Embedding Server Side Values Sent to Client

Something I want to try, that somebody sent me.

Will post more later.

protected void Page_Load(object sender, EventArgs e)
    wwScriptVariables scriptVars = new wwScriptVariables();
    // *** Add any values static or dynamic
    scriptVars.Add("name", "West Wind Technologies");
    scriptVars.Add("entered", DateTime.Now);
    // *** A cleaner way to get ClientIDs into client code?
    scriptVars.Add("txtNameId", txtName.ClientID);
    scriptVars.Add("btnSubmitId", btnSubmit.ClientID);
    // *** Add a control's value
    scriptVars.AddDynamicValue("txtName", this.txtName, "Text");
    // *** Done
The class then renders a JavaScript object into the page with each of the key values as property names. 
<script type="text/javascript">
var serverVars = {
    "name": "West Wind Technologies",
    "entered": new Date(1202809550345),
    "counter": 12.22,
    "txtNameId": "txtName",
    "btnSubmitId": "btnSubmit",
    "txtName": ""
Now from anywhere you can access these variables via the static object instance:
var name = serverVars.name;
var entered = serverVars.entered;
var counter = serverVars.counter;
var txtName = document.getElementById(serverVars.txtNameId);

The Blank Keyboard - Das Keyboard II

For those of you who know me, I have this black natural keyboard I use where I've scratched off the labels on my keys. Well, I don't have to sratch any longer. Someone's made a label-less keyboard.  I don't know why I like it like that, helps me learn the keyboard even faster and I find it amusing when people come over and try and use my keyboard.


The Das Keyboard II for $80 USD.


Flash Player on Vista Does Not Display Content

You may have noticed, if you're running Vista, that with the latest update to Flash Player, you no longer are seeing pages with Flash Content. You'll go to YouTube or GrandCentral.Com and notice that it tells you that you need the latest version of Flash.  You'll install it for the 50th time and still doesn't work.

Solution? You need an update to your Flash Player for Vista, which you can find located here, after you've installed the Flash Plug-in/Player.

Here are the steps I finally found from the Adobe site.

    Windows Vista installation failure

    On some Windows Vista systems Flash Player may be installed, but will not display Flash content. In some cases updating to the latest Flash Player using the included utility can correct the User Account Control settings that cause this problem.

    To run the utility, find your installed Flash folder:

  • Right-click C:\Windows\System32\Macromed\Flash\FlashUtil9d.exe

    The letter changes with each Flash version, so may be "FlashUtilb.exe" or "FlashUtile.exe"

  • Select "Run as Administrator"

  • Follow the steps to complete the Flash Player installation

  • Restart your computer


Now, this only worked on my Vista 32bt OS, doesn't work so good on my 64bit.  Upon running the utility it doesn't seem to complete. So I took they Flash folder from my 32bit and over wrote the Flash folder on my 64bit. Located at C:\Windows\SysWOW64\Macromed\Flash.

Seemed to fixed the problem after a reboot.

MCSD and MCAD Outdated? Is MCPD Widely Recognized?

So I was tracing out my Certification Path from Microsoft to get my MCSD.  MCSD the mother ship of programming cert's, equivalent to MCSE right? Well that's what I thought.  However, as I started to dig down to what test were needed and the study material, I realized that it only covers .Net 1.0 and 1.1.  Hmm, strange, and MCAD? Same thing, .NET 1.0 and 1.1.  With .NET 2.0 out, that makes those cert's more outdated, but tell someone you are an MCSD and they recognize that certification as top of the line development. 

So then what? Well as I traced the paths of other cert's I realized that the new version is called MCPD - Enterprise Applications.  You actually need 5 test to get this certification which is the new top of the line in my eyes.  However, if you simply take 3 test you can get MCPD - Web Developer.  Notice the cert has the same name. Both are MCPD. So telling someone your an MCPD isn't enough.  There are three levels of MCPD. Web, Windows and Enterprise.  Each of these require a pre-req Cert called MCTS in Web, Windows or Distributed.


Anyway, you could still get your MCSD as that seems to be more widely known then MCPD.  Never even heard of it until I checked the site. So here's the tracks to take. 


  MS .NET Framework 2.0 - Application Development Foundation
Exam 70-536
MS .NET Framework 2.0 Web-Based Client Development
Exam 70-528
MS .NET Framework 2.0 Windows-Based Client Development
Exam 70-526
MS .NET Framework 2.0 Distributed Application Development
Exam 70-529
MCTS - Web Client Development Certification MCTS - Windows Client Development Certification MCTS - Distributed Application Development Certification
Designing and Developing Web-Based Applications Using MS .Net Framework Designing and Developing Windows-Based Applications Using MS .Net Framework Designing and Developing Enterprise Applications Using MS .Net Framework
MCPD - Web Application Certification MCPD - Windows Application Certification MCPD - Enterprise Application* Certification
- You can't get this certification until you've taken 70-528, 70-526, 70-529


After all this you could try for an MCA that's really the new mac-daddy certification.


Consolidate Excel Sheets to one Sheet using VBA

Been awhile since I used Visual Basic for Applications. I mean it's like VBScript on steroids.  So many things I'm used to now in Visual Studio 2008 that I take for granted.  Simple things, like collapsing my subs and functions. Or not getting a compile error just because I click off somewhere to copy a variable name.

Anyway, I had a friend of mine, ask me how to consolidate sheets in excel. At first I said, oh that's easy, however the more I looked into it, consolidating numbers works fine, but when it comes to text, not so much.

The idea was this....

Sheet1 is the "Master" sheet, which will hold all the information from the other Sheets.

Sheet2 looks sort of of like this...

Name Address City State Zip
Bob Joe 1234 Kingly Tampa FL 33647
Jane Doe 352 Thisway Clearwater FL 33607
Billy Bob 232 Highway Atlanta GA 33450

Sheet3 looks like this....

Name Address City State Zip
Fred Mastro 13324 Lane Honolulu HI 45612
Brain Chris 845 Thatway Miami FL 12345
Dan April 232 ByWay Washington DC 78464
Jane See 3222 Flower Howell NJ 99706

The idea was to combine Sheet2, and Sheet3 into Sheet1 so that Sheet1 is the combined rows of both sheets. Then later be able to add say Sheet4 with more data and show it as well on Sheet1. 

Sheet1 would look like this basically.....

Name Address City State Zip
Bob Joe 1234 Kingly Tampa FL 33647
Jane Doe 352 Thisway Clearwater FL 33607
Billy Bob 232 Highway Atlanta GA 33450
Fred Mastro 13324 Lane Honolulu HI 45612
Brain Chris 845 Thatway Miami FL 12345
Dan April 232 ByWay Washington DC 78464
Jane See 3222 Flower Howell NJ 99706

Easy way of doing this? At first glance you would suspect yes. Maybe I do not know all the Excel functions possible, I'm sure an Excel Guru maybe could. Upon searching the Internet I found many "add-ins" created by people to perform this function.

So I thought I'd save someone the trouble, here's a macro/vba code you could use in your excel sheet.  Most common problem when using this? Not having Macro's Enabled. Please make sure Macros are enabled for your workbook, and close and re-open excel after making the needed changes.

So in excel you'd have to find your VBA code. I'm using Excel 2007 so you have to show the developer tab first. Use help to find the Developer tab or View Code.

The event I used was Sheet1  Worksheet_Activate.  So on activate of Sheet1 the code runs.

Private Sub Worksheet_Activate()

End Sub

Then you can paste this function, this is the heart of it.  There a better way to write this? I'm sure there is, as I never work in creating VBA macros for Excel, this was my first run through. The last time I did VBA was with Access about 10 years ago.

Sub ConsolidateRows(ByVal SourceSheet As Worksheet, ByVal DestinationSheet As Worksheet, ByVal TotalColumns As Integer, Optional SkipFirstRow As Boolean = False)
    Dim SourceSheetRowCount As Integer
    Dim DestinationSheetRowCount As Integer
    Dim FoundDataInColumns As Boolean
    SourceSheetRowCount = 1
    If SkipFirstRow = True Then SourceSheetRowCount = 2
    DestinationSheetRowCount = 1
    FoundDataInColumns = False
    'Loop Through Every Source Sheet Row
    Do Until SourceSheetRowCount = SourceSheet.Rows.Count
        'Check Each Row for Data In First Cell
        If SourceSheet.Cells(SourceSheetRowCount, 1) = "" Then
            'If No Data In First Cell, Lets Check Rest of Cells In This Row
            For C = 2 To TotalColumns
                If SourceSheet.Cells(SourceSheetRowCount, C) <> "" Then
                    'Data Was Found In A Cell
                    FoundDataInColumns = True
                    FoundDataInColumns = False
                End If
                If FoundDataInColumns = True Then Exit For 'Data Found so Exit For, No Need To Check Rest of Cells
            If FoundDataInColumns = False Then Exit Do ' Data Was Not Found In Any of the Cells, so Exit Loop Completely, This Row is Empty
            FoundDataInColumns = True
        End If
        'If data was found, lets move on
        If FoundDataInColumns = True Then
            'Lets skip through rows that already have data on the DestinationSheet
            Do Until DestinationSheet.Cells(DestinationSheetRowCount, 1) = ""
                DestinationSheetRowCount = DestinationSheetRowCount + 1
                'Now lets loop through the cells for this row and copy the data over
                For C = 1 To TotalColumns
                    DestinationSheet.Cells(DestinationSheetRowCount, C) = SourceSheet.Cells(SourceSheetRowCount, C)
                    'Could copy formatting here
            DestinationSheetRowCount = DestinationSheetRowCount + 1
        End If
        SourceSheetRowCount = SourceSheetRowCount + 1
        FoundDataInColumns = False
End Sub

Now you could call this directly for each sheet you wanted to import into the master...

Call ConsolidateRows(Sheet2, Sheet1, 14)
Call ConsolidateRows(Sheet3, Sheet1, 14)

So after this, my friend was adding sheets, so I said, let me write a quick function to do all the sheets for you. So this function just loops through all the sheets and adds them to the destination one. Nothing fancy.

Sub ConsolidateAllSheetsTo(ByVal DestinationSheetName As String, ByVal DestinationSheet As Worksheet, ByVal TotalColumns As Integer)
    Dim Sheet As Worksheet
    Dim I As Integer
    I = 1
    For Each Sheet In ThisWorkbook.Worksheets
        If Sheet.Name <> DestinationSheetName Then
            If I = 1 Then
                Call ConsolidateRows(Sheet, DestinationSheet, TotalColumns)
                Call ConsolidateRows(Sheet, DestinationSheet, TotalColumns, True)
            End If
             I = I + 1
        End If
End Sub

And so then you can stop calling the ConsolidateRows directly and instead call ColsolidateAllSheetsTo instead.

Call ConsolidateAllSheetsTo("Master", Sheet1, 14)

Yes, yes I know "Call" is old school and you don't need it.  I just use it because it makes for faster skimming of code when I'm trying to debug.

So in the end, your activate event might look something like this...

Private Sub Worksheet_Activate()
Call ConsolidateAllSheetsTo("Master", Sheet1, 14)
End Sub

Complete Code from Top to Bottom:

   1: Private Sub Worksheet_Activate()
   2:     Sheet1.Cells.Delete
   3:     Call ConsolidateAllSheetsTo("Master", Sheet1, 14)
   4: End Sub
   6: Sub ConsolidateAllSheetsTo(ByVal DestinationSheetName As String, ByVal DestinationSheet As Worksheet, ByVal TotalColumns As Integer)
   7:     Dim Sheet As Worksheet
   8:     Dim I As Integer
   9:     I = 1
  10:     For Each Sheet In ThisWorkbook.Worksheets
  11:         If Sheet.Name <> DestinationSheetName Then
  12:             If I = 1 Then
  13:                 Call ConsolidateRows(Sheet, DestinationSheet, TotalColumns)
  14:             Else
  15:                 Call ConsolidateRows(Sheet, DestinationSheet, TotalColumns, True)
  16:             End If
  17:              I = I + 1
  18:         End If
  19:     Next
  20: End Sub
  23: Sub ConsolidateRows(ByVal SourceSheet As Worksheet, ByVal DestinationSheet As Worksheet, ByVal TotalColumns As Integer, Optional SkipFirstRow As Boolean = False)
  24:     Dim SourceSheetRowCount As Integer
  25:     Dim DestinationSheetRowCount As Integer
  26:     Dim FoundDataInColumns As Boolean
  27:     SourceSheetRowCount = 1
  28:     If SkipFirstRow = True Then SourceSheetRowCount = 2
  29:     DestinationSheetRowCount = 1
  30:     FoundDataInColumns = False
  32:     'Loop Through Every Source Sheet Row
  33:     Do Until SourceSheetRowCount = SourceSheet.Rows.Count
  34:         'Check Each Row for Data In First Cell
  35:         If SourceSheet.Cells(SourceSheetRowCount, 1) = "" Then
  36:             'If No Data In First Cell, Lets Check Rest of Cells In This Row
  37:             For C = 2 To TotalColumns
  38:                 If SourceSheet.Cells(SourceSheetRowCount, C) <> "" Then
  39:                     'Data Was Found In A Cell
  40:                     FoundDataInColumns = True
  41:                 Else
  42:                     FoundDataInColumns = False
  43:                 End If
  44:                 If FoundDataInColumns = True Then Exit For 'Data Found so Exit For, No Need To Check Rest of Cells
  45:             Next
  46:             If FoundDataInColumns = False Then Exit Do ' Data Was Not Found In Any of the Cells, so Exit Loop Completely, This Row is Empty
  47:         Else
  48:             FoundDataInColumns = True
  49:         End If
  50:         'If data was found, lets move on
  51:         If FoundDataInColumns = True Then
  52:             'Lets skip through rows that already have data on the DestinationSheet
  53:             Do Until DestinationSheet.Cells(DestinationSheetRowCount, 1) = ""
  54:                 DestinationSheetRowCount = DestinationSheetRowCount + 1
  55:             Loop
  56:                 'Now lets loop through the cells for this row and copy the data over
  57:                 For C = 1 To TotalColumns
  58:                     DestinationSheet.Cells(DestinationSheetRowCount, C) = SourceSheet.Cells(SourceSheetRowCount, C)
  59:                     'Could copy formatting here
  60:                 Next
  61:             DestinationSheetRowCount = DestinationSheetRowCount + 1
  62:         End If
  63:         SourceSheetRowCount = SourceSheetRowCount + 1
  64:         FoundDataInColumns = False
  65:     Loop
  66: End Sub

So there you have it, my quickly rigged consolidate function. Does it have bugs? Of course! It was free and quick.

Wexelblat's Scheduling Algorithm:

  • Choose Two:

  • Good

  • Fast

  • Cheap

So you can see by this.. it was Fast and Free, so = No Good. haha.

Known Issue, I don't think these are bug

FredMastro.Com Tags:

s, just things I didn't code for.

-Your Source Sheets can not have blank rows between data. Code will stop at first blank row and go to next sheet
-Your source sheets have to have data in the first column, otherwise it gets overwritten on the master

That's all I know of so far.

Good luck, hope this helps someone out there, 5 years from now.

New Post using Windows Live Writer

So I am now using Windows Live Writer for my blog posts. This, I think, is a must have for blogging. It can connect to different blog systems like Community Server, which is what I use, and you get the benefit of using a client base application like word, for posting up your posts.  Now I can spell check! Hooray!  Many cool add-ons you can install with it, like code snippets, insert videos, Amazon links etc..

Anyway, just wanted to write my first post using Live Writer.

Update: I've since moved off of Community Server, which was just a bit to slow for me, and have now moved on to BlogEngine.Net. It's much better and I can still use Windows Live Writer!

Some website's I've worked on or developed using ASP, ASP.NET, VB.NET, AJAX, T-SQL

So I was looking on craiglist.com looking at possible side jobs for .Net and such. Then got to wondering, how does someone know that I can actually do what they are asking versus someone who's just starting out and just trying to get the work for the money and doesn't really know what they are doing?

Then I got to thinking of all the sites I've worked on and all the internal web applications I've done, back since 1998? But even before then when the "Internet" was all new and everyone made neon color sites in 1994 give or take a year, I was making html static sites...

So note to whoever reads this. I AM NOT A FRONT-END DESIGNER. I am a back-end .net developer. I can make the page work and do what it does, and well.  I can not make the page look pretty and pleasing to the eye.  I can get close to what I think it pretty neat with some new cool Ajax controls, but always best to have someone else, who's sole purpose in life is to make things look good touch the pages I create.

So here we go...  SOME OF the sites I've worked on.  Now these sites, most of them were designed by someone else, I just made them work.

Edit: This page is not in any specific order, I add stuff as I remember.


Web TimeKeeper Add-On for Track-It!® Help Desk Management System (2001-2002): When I was at Masonite, we used were using a piece of software called Track-It. At the time it was owned by, and originally coded by, Blue Ocean.  Which later was bought out by Intuit and then re-purchased by Numara Software company.  Well back when Blue Ocean owned it, I had developed an add-on to the Track-It web application version of their helpdesk software that allowed manager to track their employees through the day.  This add-in worked so well that I was able to package it and sell it to a few clients of Blue Oceans. They sold it through be me because they had some clients that wanted this feature but it wasn't included in the product itself.  This product was developed using Classic ASP to provide up-to-the-minute tracking.  I had sold it under the name Digital Goblin, a site a friend and I made for doing side jobs.  Was a really cool app.  Then Track-It upgrade a version and went .NET they were supposed to release an API that never came and so the project faded away.


Internal Verizon Web Application OSI Server Support (2005): Worked on an internal application for Verizon that helps manage their servers. Large back-end MSSQL database.  Did a lot of screen scrapping from other internal web app's to consolidate server information.  Lot of cool tools here, links that connect to remote desktops and give you server stats.  Owners of servers and information relating to every server they are in charge of.  Pretty large application, it was started before me, and when I was contracted there for 6 months I slowly add new features and functionality.


HostedForYou.Com (2006 - 2008):  Created/Architected site in Classic ASP, integrated into a SQL 2005 backend database and Helm Control Panel for Hosting. Site uses pre-made HTML Design Layout. [Screen Shot Available]

HostedForYouDev (2007 - Present) - (In Progress):  Full ASP.NET 2.0 site with VB.NET code behind.  Using .NET features such as Menu Navigation, User Controls, AJAX, Themes.  Class Library developed for site functions.  SQL 2005 backend database and integrating into Helm Control Panel for Hosting. Site uses pre-made HTML Design Layout.

MastroInvestments.Com (2004 - 2007): Created / Architected full site win Classic ASP and Flash with a SQL 2005 database. Site uses pre-made HTML Design Layout.

CCTampa.Org  (2007 - 2008):  Full ASP.NET 2.0 with VB.NET code behind, utilizing all .NET features such as Menu, Master Pages, Themes, AJAX, Google Maps, SiteMap, User/Role Management and Security. SQL 2005 Back-end database. Design Layout created by Web Designer.


AAASouth.Com (2005 - 2008):  Sure a lot going with this site. Site is originally Classic ASP with a IBM DB2 back-end database. Supporting this site was part of the job, while slowly converting parts of the site over to .NET 2.0, utilizing AJAX, Controltool kit, custom developer classes/modules. Using .NET features such as Menu Navigation, Site Map, Localization for support of Spanish down the road. User Controls, Themes, custom Member Provider for Login and every other .NET feature I could use. Slowly over time the site should become more and more .NET.  Created even a session transfer sub-application to handle Session transfers from Classic to .NET and back.


Internal .NET 2.0 Web Application for AAA Auto Club South.Com (2007 - 2008):  This is an all .NET application migrated from 1.1 to 2.0. I handle back-end objects/classes and tie them into front-end pages. It's a three n-tier system, tying into a db2 database. No cool features used here, just straight VB.NET and some creative front-end validation and scripting.


ASP Classic PayPal Payment Control for RubyLuster.Com (2005): Developed in Classic ASP a server side script to handle communication to and from PayPal and manipulating an Access database to track paid/unpaid/expired member subscriptions.


.NET Gallery Control for RubyLuster.Com (2005):  Developed an ASP.NET 2.0 tool to handle creation of Photo Galleries. Utilizing custom GridViews and DetailView controls using a custom DataObjectSource control. Created back-end class libraries. Used AJAX.


Camp-Adventure.Com (2004):  Created/Architected/Designed Simple Classic ASP site no back-end or dynamic data.


KLMPetroleum.Com (2007): Created/Architected Flash Site Only using pre-made Flash Design template. Tying contact pages to ASP Classic Forms sent via email.


GulfCoastTriathlon.Com (1998-2001): Created/Architected/Designed site in Classic ASP. Installed ASP based Forum system, dynamic participant searches and online application. Site was taken over and ported over to PHP.  Site design/content still my original work.

Flash Intro Video for GCT (1998): Developed Intro Flash movie back in Flash 2.0 or 3.0 for GulfCoastTriathlon.Com


Internal ASP Classic site for Navy Diving and Salvage Training Center division of the U.S. Navy. (1998-2000): Re-wrote the NDSTC's internal application from an Access Database passed from person to person to a web-based application using Classic ASP with SQL 7.0 back-end.


Internal ASP Classic for Masonite.Com - Developed internal Classic ASP web application to handle Masonite's customer service department. (Used to be named Premdor) Tied into MSSQL Server 2000. Application became a Customer Service Warranty Issues/Tracking System.


Handled Back-End Contact Form Control for Coupaws.Com (2007):  Tied Contact Us page to a Classic ASP back-end email script.

Assisted on Backend or Frontend Script Changes On:


 So there you have SOME of the websites and projects I've done.  I really can't keep track of it all.

Team Foundation TFS 2010/2008 Deleting / Solving Multiple Workspace Problem

So you're setting up a new Workspace for Team Foundation and you get an error when you try and point a Source Control Project to a local folder that someone else was using as well..... Then you get the error message....

Error: "The working folder ... is already in use by another workspace on this computer"

I ran into this problem setting up a contractor's PC after the previous contractor using that PC had left.

The problem is you can't just go load up and delete workspaces unless your the owner. So in order to solve the problem I had to run a command line command for Team Foundation. Open Visual Studio 200x Command Prompt.

Tf workspace /delete developer05;<domain>\jsmith


To get that info I needed the owner name of the workspace and the workspace name. You can do


tf workspaces


You can find a list of Team Foundation (tf) commands here:

You can see commands on that MS site, however the two most useful to me in this situation was listing the information, so I could see who was the other person blocking access, and then deleting it.


tf workspaces [/owner:ownername] [/computer:computername]
[/server:servername] [/format:(brief|detailed)]

tf workspace /delete [/server:servername] workspacename[;workspaceowner]

Note: Common mistake is to forget the domain name of the owner if you are on a domain. <domain>\UserName



So you’ve swtiched to a new machine or OS because your other system crashed and now you have these ghost items checked out in TFS and can’t check them in?


First on TFS server, list the worksspaces for that old computer name (It tells you in Source Control Who and what PC has it checked out)

tf workspaces /server:http://…/Project/  /computer:mastro-pc

This will give you the list of workspaces:


Workspace                          Owner   Computer  Comment
---------------------------------- ------- --------- --------------------------
MASTRO-PC                          FMastro MASTRO-PC
SQL Source Control  (eb0jrdmq.4mh) FMastro MASTRO-PC Used by SQL Source Control
SQL Source Control  (ge1lsqh5.3gk) FMastro MASTRO-PC Used by SQL Source Control
SQL Source Control  (hewpvhe2.wai) FMastro MASTRO-PC Used by SQL Source Control
SQL Source Control  (vqdacg1f.bgr) FMastro MASTRO-PC Used by SQL Source Control
WIM 2010 (MASTRO-PC)               FMastro MASTRO-PC


Now go in and delete each one.

tf workspace /delete /sever:http://…/Project/ “MASTRO-PC”
tf workspace /delete /sever:http://…/Project/ “SQL Source Control  (eb0jrdmq.4mh)”
tf workspace /delete /sever:http://…/Project/ “WIM 2010 (MASTRO-PC)”

That will clear our those old changes you had on the no longer existent system.

VB.Net Strip Numeric Characters from an Alpha-Numeric String

I see it everywhere, people with blogs posting up ASP.NET/VB.NET code snippets.  At work I'm always asked to create a quick function how to do something. Or someone will say, "how do I do this?" and I can't help myself but write out the code real quick.  So I thought why not me? Why don't I start putting up my own code on my own blog?  So here I am.

So my first piece of code is super simple, just strips out numeric characters from an alpha-numeric string.  Now maybe there's already a built-in method in .Net that does this already, but .Net is so full of methods and namespaces and such that I don't know them all. 

So here we begin a new blog theme.

   1: ''' <summary>
   2: ''' Strips out Numeric characters from a Alpha-Numeric String
   3: ''' </summary>
   4: ''' <param name="HotStripper">Send Alpha-Numeric String</param>
   5: ''' <returns>String</returns>
   6: Function StringOutNumbers(ByVal HotStripper As String) As String
   7:      Dim NewValue As String = ""
   8:      For I As Integer = 0 To HotStripper.Length - 1
   9:           If IsNumeric(HotStripper.Substring(I, 1)) = False Then
  10:                NewValue += HotStripper.Substring(I, 1)
  11:           End If
  12:      Next
  13:      Return NewValue
  14: End Function


Dim myString As String = StringOutNumbers("Something1234")



Note: If you wanted only to pull out the numbers you could just change line 9, from False to True.

Am I a good programmer?

I came across an article just the other day where this guy Daniel writes about how to recognize a good programmer. In this article he lists some bullet points on how to tell....

 Positive indicators:

  • Passionate about technology
  • Programs as a hobby
  • Will talk your ear off on a technical subject if encouraged
  • Significant (and often numerous) personal side-projects over the years
  • Learns new technologies on his/her own
  • Opinionated about which technologies are better for various usages
  • Very uncomfortable about the idea of working with a technology he doesn’t believe to be “right”
  • Clearly smart, can have great conversations on a variety of topics
  • Started programming long before university/work
  • Has some hidden “icebergs”, large personal projects under the CV radar
  • Knowledge of a large variety of unrelated technologies (may not be on CV)

Negative indicators:

  • Programming is a day job
  • Don’t really want to “talk shop”, even when encouraged to
  • Learns new technologies in company-sponsored courses
  • Happy to work with whatever technology you’ve picked, “all technologies are good”
  • Doesn’t seem too smart
  • Started programming at university
  • All programming experience is on the CV
  • Focused mainly on one or two technology stacks (e.g. everything to do with developing a java application), with no experience outside of it

... so naturally I started to see which ones apply to me.  What in this list would define where I stand? As I started to look at the list it made sense and actually I could see it applied to someone one else I know who always wants to be a better programmer but lacks some of the bullets from the first part.

As I read the bullets, everyone one of the positive bullets matched with me, only one of the negatives I felt matched as well.  The last one about technology stacks.  At first I thought that contradicted learning new technologies from the first one but it doesn't.  Example, I learned AJAX, I'm learning Silverlight, those are new technologies. I am stacking the technology because I'm using everything with VB.NET.  That's what I feel I stack.  I can read C# but slower to code in it then VB and ususaly when I want to get something done I default to VB.NET because I already know it's full sytax.

Anyway, it was an interesting read.