Wednesday, August 30, 2006

Jeffrey Palermo has assembled a great list of productivity features inherent in JetBrain's ReSharper (R#) that make it one of my all-time favorite tools.  I have a hard time remembering the myriad of keyboard shortcuts, but he mentions several that I use on a daily basis that make programming a joy.

It's a great reference for users of the tool and a great list of enticements for those not using it that want a boost to their programming environment.

Wednesday, August 30, 2006 9:20:00 AM (Mountain Standard Time, UTC-07:00)  #    Disclaimer  |  Comments [0]  |  Trackback
 Tuesday, August 29, 2006

I'm looking for laptop bag suggestions, ideas, and recommendations.  I currently have a great bag - it's an Ogio (I forget the model), but it's the best and most spacious bag I've ever had.  That said, however, I am in the market for something else.  I travel quite frequently and my bag weighs in excess of 50 lbs and my back is taking the toll - not to mention that it's a pain at airports.

Here's what I need in a bag:

  • Must be able to have as a carry-on on a plane.
  • Must be able to carry a Dell Precision M90 (17“ monitor) + accessories
  • Must be able to carry a Dell Inspiron 8600 (15.4“ monitor) + accessories
  • Must be wheeled - I don't want to carry it all the time.
  • Have more room to carry 1+ external hard drives, headphones (Bose QuietComfort 2), power strip, etc
  • Preferrably have more room for a few magazines, a book or two, papers, notebooks, etc.

Any suggestions?

I'm considering the following:

I've seen others but they're less than inspiring.  I'm hoping that people have some good suggestions 'cause I'm at a loss but I need to get one soon.

Tuesday, August 29, 2006 1:27:00 PM (Mountain Standard Time, UTC-07:00)  #    Disclaimer  |  Comments [2]  |  Trackback
 Wednesday, August 23, 2006

Last night we held the August 2006 incarnation of the Geek Dinner at Los Hermanos in Lindon, Utah; right back where we started in November of last year.  After enjoying our meals we lent an ear to Senatorial candidate Pete Ashdown.  Some of you may not know of Pete directly, but you've probably heard of the company he started years ago called XMission (especially if you're from Utah and haven't lived in a cave for too long).

I encourage you to find out more about Pete's stances on issues as he presented them, they make a lot of sense - especially when it comes to technology.  Pete has the unique position of understanding technology and the internet (unlike Ted Stevens misunderstanding of the 'Inter-Tube') and a great desire to serve the interests of Americans.  We could definitely use (a lot) more people in the Senate et al that understand technology.

Anyway, hope to see more at the next Geek Dinner.  I'll announce it here when we figure out what's happening next.

Wednesday, August 23, 2006 2:43:00 AM (Mountain Standard Time, UTC-07:00)  #    Disclaimer  |  Comments [0]  |  Trackback
 Tuesday, August 22, 2006

I made a few updates to the Regex Assembly Builder tool that I posted a few days ago.  Most notably are the following updates:

  • NEW: Added a 48x48 256 color icon.
  • FIX: Opening Strong Name Key file returns access denied if the file is readonly.
  • FIX: Unable to specify assembly name identifier with period delimiters.
  • NEW: Application now strong named.  This is a breaking change.  All assemblies generated heretofore with the utility will not work with this application because of an embedded attribute.  This will not be an issue moving forward, but my apologies for the mistake.
  • NEW: Added ability to specify output path and to change the target directory the generated assembly.
  • UPD: Set font on the Zoom/Text Editor to be 'Consolas, 9pt'.  If you don't have Consolas, get it - you won't regret it - hands down one of the greatest monospaced fonts out there.
  • UPD: Set anchor on RegexEditor control to support resizing of TextBox controls.
  • UPD: Added application configuration file to support binding redirects when application is updated.

All in all, these updates were added smoothly.  Let me know if you have any issues with the update.

Feel free to download it here.

Coming features include:

  • Namespace view in TreeView to allow for a more natural navigation.
  • Alphabetical listing of regular expressions in TreeView.
  • (possible) Regular expression editor to allow for the creation of the regular expressions directly in the tool.  I may integrate with another tool if anyone has suggestions.

What features would you like to see in it?

Tuesday, August 22, 2006 8:54:00 AM (Mountain Standard Time, UTC-07:00)  #    Disclaimer  |  Comments [2]  |  Trackback
 Friday, August 18, 2006

Regular expressions provide a powerful means to harness the capabilities of text.  Deeply ingrained in the heart of .NET is a vast and powerful regular expression toolkit found in the System.Text.RegularExpressions namespace.  This is a well-known fact.  Many developers, myself included have been using them for years and years because they provide unparallelled control over interpreting, parsing, extracting, replacing, and manipulating strings.

I'm not going to bore anyone by further explaining the benefits of regular expressions nor will I go into explaining how they are constructed and how they work.  Every single developer, IMHO, should have on his desk the fantastic book “Mastering Regular Expressions” by Jeffrey Friedl.  It is a MUST read.  It's a MUST read many times.  I absolutely love it.  Alright, enough evangelism.

When creating regular expressions in .NET you have the opportunity to establish how the regular expression will be used to process your text by a RegexOptions enumeration.  By default, the regular expressions that you create are interpreted and evaluated at runtime.  There is nothing particularly wrong with that.  If your regex is used infrequently then that can be perfectly adequate.  However, suppose your regular expression needs to be utilized much more frequently.  It is quite possible that your application's performance may begin to degrade because of such frequent interpretation of the regex.

One of the RegexOptions enumeration values is Compiled.  When you apply the Compiled option to the regular expression you are telling the .NET runtime that you don't want the regex interpreted, but rather that you want it to be compiled.  Ultimately, this will usually have the benefit of being more efficient.  However, there is a cost.  The compilation happens at runtime.  When the execution path hit the regex flagged for compilation the .NET runtime will dynamically generate an assembly, load it, and execute it.  So there's an initial hit.

This might be fine and dandy...but it's going to happen once for every compiled regular expression.  In other words, if you have 25 compiled regular expressions in your code, you'll end up with 25 dynamically generated DLLs in memory.  That doesn't sound good to me.

The wonderful thing is you can take this hit up front entirely and generate a single assembly that contains as many pre-compiled regular expressions as you desire.  This is accomplished through code - there's no built-in IDE support.  The added benefit of a pre-compiled regex assembly is that you can fine tune your regular expressions out-of-band with your application.  You don't have to recompile your application(s) to get the updated regular expressions.  Instead, you reference your regex library and you have access to them.

This magic is accomplished via the Regex.CompileToAssembly() method.

Over the past couple of days I created a little application that I call the “Regular Expression Assembly Builder”.  This tool provides you with the ability to gather your regular expressions, organize them, and ultimately compile them into a DLL.  Essentially, with this tool you can:

  • Open and edit existing assemblies containing regular expressions (via Reflection).
  • Create brand new assemblies.
  • Organize your regular expressions into hierarchical namespaces.
  • Strongly name (even Delay Sign) your resulting assembly with a key file.
  • Apply several attributes to your target assembly.
  • ...and much more

Here are a few screen shots of the application in action:

  

The application plus source can be downloaded directly here or from the link on the main blog page.

Enjoy!

NOTE: I didn't know a tool like this existed already, but when I was just about done with the project I stumbled upon a similar, yet distinct, project that you might also be interested in.  It looks like Brian Delahunty took the initiative to create this well before I did.  Good job!

Friday, August 18, 2006 4:56:00 PM (Mountain Standard Time, UTC-07:00)  #    Disclaimer  |  Comments [3]  |  Trackback
 Thursday, August 17, 2006

Microsoft released Visual Studio 2003 SP1 today.  If you're a daily user of VS 2003, as I am, you'll want to get this update.  I'm now waiting for Microsoft to release a Visual Studio 2005 service pack; VS2005 is much more of a house of cards.  That said, there are many quirks in VS 2003 that this fixes.

Thursday, August 17, 2006 4:17:00 PM (Mountain Standard Time, UTC-07:00)  #    Disclaimer  |  Comments [0]  |  Trackback
 Wednesday, August 16, 2006

I had the opportunity today to present over Live Meeting to a group of programmers all over the country for First Data Corporation on the topic of Threading in .NET.  While I use Live Meeting in some capacity almost every day (multiple times), I have never actually given a presentation over one.  As I tend to do, I had very few slides and almost all “on-the-fly” demos.  Until now, pretty much all of the presentations I've given have been live and in in-person.  It sure makes it easier to see reactions and demeanor.  Online presentations, are by their very nature, are more impersonal and without an audience present it's a little trickier.

Despite the unfamiliarity of the territory, I feel the presentation (though a little rushed due to time constraints) went pretty well and was well received.  I look forward to the opportunity of doing it again in the future.

Wednesday, August 16, 2006 9:46:00 AM (Mountain Standard Time, UTC-07:00)  #    Disclaimer  |  Comments [1]  |  Trackback
 Thursday, August 10, 2006

This month, the monthly Utah .NET User Group meeting will be one week late (Thursday, August 17th, 2006).  These summer months have been a challenge with respect to scheduling and our speaker isn't in town today, but will be next week.

To quote from our email reminder that went out:

Matt Smith is a Senior Consultant with Microsoft Consulting Services in Salt Lake City and will be speaking to us on Domain Specific Languages (DSL) and DSL Tools. This is surely to be a very exciting and informative session as Matt has worked intimately with these tools for the past few years.

You definitely will NOT want to miss this awesome session. So show up, invite your friends, colleagues, parents, and anyone you know - it'll surely be a great time.

          Time: 6:00 PM
         
Date:
Thursday, August 17th, 2006
         
Place: Neumont, University (10701 South River Front Parkway, South Jordan, Utah)

See you at there!

This should be a fun meeting!

Thursday, August 10, 2006 3:12:00 AM (Mountain Standard Time, UTC-07:00)  #    Disclaimer  |  Comments [0]  |  Trackback