Entries for 2009

December 16, 2009

Spell Check for DNN Module Developers

I have talked to many developers that have one common feature request that we would like to see for Visual Studio, Spell Check.  As a developer one of the most troubling things can be minor typo's in code after it has been completed.  Although simple to fix, it can be embarrassing to have a typo that goes out in a module that a client is reviewing or that you put up for sale on SnowCovered.  Well, today I got an email from Chad Nash at DataSprings, and they have a set of tools that are going to help us out on this front from a DNN module perspective.

December 02, 2009

Potential DNN 5.2 Upgrade Issues

After talking with a number of clients since last week, I thought it would be worthwhile to make a post here with a formal warning regarding upgrades to DotNetNuke 5.2.  As announced at OpenForce US, DotNetNuke 5.2 contains the Telerik Controls for ASP.NET, which is a very good thing for DotNetNuke as a whole, however, it can cause massive problems for individuals that are already using the Telerik Controls as a site upgrade can end up rendering portions, or the entire site unusable, until DLL versions are restored.  In this post I will give a bit of information regarding the scenarios that I have encountered and some guidance on how to protect yourself from upgrade issues.

November 15, 2009

OpenForce 2009 Recap

 Well, it has been a very busy week, but we can now record another OpenForce event in the books.  I'm sitting here still in Las Vegas going over various notes regarding various announcements that have occurred through the week and though it would be good to make a blog post with a few "highlights" as I see them from the week.  So, without future delay, here are my favorite highlights from the week, in no particular order!

November 04, 2009

SQL Server Dynamic Pivots Article

I am proud to announce that an article that I wrote for SQL Server magazine, "Pivoting the Dynamic Way" was included in the November 2009 issue of the magazine.  The article was published in both the print and online editions of the magazine, for those of you with subscriptions I encourage you to check it out!

October 30, 2009

Selecting a DotNetNuke Hosting Provider 2009 Edition

Back in May of 2008 I wrote an article “Selecting a DotNetNuke Hosting Provider Revisited”. Well, being almost a year-and-a-half later I thought it would be good to provide a 2009-2010 follow-up to the article to update based on new information, updates to hosting plans/offerings, as well as DotNetNuke performance in general. In this article I will talk though the thought process that I use when working with current and potential customers to select their hosting plan, environment and provider. This document has been updated based on current information, in addition, prior to going through the recommendations below I strongly recommend reading my article “Shared, Virtual Private Server, Dedicated of Cloud Hosting” to become familiar with the different levels of hosting.

October 14, 2009

DotNetNuke Bulk Extension Installation

About two months ago, I responded to a DotNetNuke question on StackOverflow.com with regard to automating the installation of modules within the installation.  This is a question that I have seen many times, but with different business requirements and end desires, but the trend is the same, installing extensions one-by-one is an inefficient process, and with a heavily used site can cause performance issues that would impact regular traffic for an extended period of time.  This is simply because there is a delay between each install, and with each install and update to the /bin directory the application recycles.  Thankfully there is a method built into DotNetNuke that easily allows you to bulk install extensions, the rest of this article will show you how.

October 09, 2009

Using LINQ to Aggregate and Group

Recently when I was presenting at Tech Days Canada I was preparing some examples of how LINQ could be used to do in-memory manipulations of data to help avoid repeated database calls. In the presentation I showed some quick code samples, and I thought that I would follow this up with a few simple examples here in a blog post. Before I start I wanted to share that the code shown here is actual production code that is being used to run the reporting on MyWebKeepAlive, the keep alive service offered by my company IowaComputerGurus.

September 29, 2009

The Importance of a Consistent Development Environment

I am again traveling this week, in Toronto speaking at Tech Days Canada 2009, and as luck would have it I needed to complete some work on a few custom DotNetNuke modules for clients on a "Urgent" basis.  So this afternoon I darted off to the speaker room to get an internet connection, just recently I re-formatted my laptop to move to Windows 7, one of the main reasons that I needed to re-format the system was to create an environment that matched my primary development machine, today was the first true test of this new configuration.  Thankfully everything worked as expected and all issues were resolved.  In this blog post, I'll explain a bit as to why it is important when working on multiple environments to have consistent system configurations.

August 11, 2009

Performance Tuning DotNetNuke Modules with ANTS Profiler

As I have mentioned in past posts here on this blog and via other communication channels I strongly believe that ANTS profiler which is offered by Red Gate software is a must-have tool for all software developers.  Most recently with my day job I have been working with profiler a lot more than usual and it prompted me to re-visit the concept of profiling within the constructs of a DotNetNuke installation.  I've had many individuals with questions before about, is it possible to profile a DNN module, or how do you set it up.  Well this article will walk through all of the steps necessary to profile a single module within a local installation.

August 04, 2009

How To Get Design-Time Support for DNN Controls

 As everyone that is a regular reader of this blog is already aware of I am a big fan of the WAP development model for all DotNetNuke development projects.  Now, one of the most common issues that individuals have reported to me is that "design-time" support is not there for common DotNetNuke user controls that are common to integrate with custom modules.  The controls I'm discussing are the DNN Label, Text Editor, and Url Controls.  Luckly though it is VERY simple to get full design time support for the controls and this article will show you how to accomplish this!

July 30, 2009

Acronis Backup and Recovery 10 Review

As some readers of this blog might have known about 2 weeks ago, I suffered from a critical hardware component failure on my primary development machine.  Initially unsure of the exact issue I was seeing the hard drive as a potential failure point.  It was at that point that I realized exactly how horrible it would be if the drive failed.  Don't get me wrong, I have backups both locally, in my source control system remotely, as well as in the cloud using Jungle Disk.  But the total time to recovery would be massive.  I have a list of around 100 or so applications that would need to be installed to get me back to "full" working state.  Not an easy task!  Luckily for me, it was some bad RAM and the system was restored after my new RAM came in.

However, this was a very enlightening experience for me and prompted me to re-visit the concept of disk imaging.  This is what prompted the review of Acronis Backup and Recovery, as it is my selected and implemented solution for the long term.

July 03, 2009

Improving the Debugger Experience Using Attributes

I have often found that when debugging applications that a lot of time is spent drilling down into the various custom objects to see what the values are of specific instance methods.  In this blog posting I will demonstrate the default behavior of Visual Studio when debugging a class, I will then show how you can improve the debugging experience with the addition of a simple attribute.

July 02, 2009

Changes to Future Blog Programming!

After doing this blog for almost three years I have came to a conclusion that I need to take a step back, and re-focus a bit and manage the content a bit more.  To do this, I am making a few changes, don't worry not only will you keep getting the same quality of content, but you will start seeing more content and a better organization system behind the scenes.  Overall this is a three step process, each phase of the changes will be outlined below.

Changes to Blogging on MitchelSellers.com

The first stage of change here is working to solidify the types of articles that will continue to be published via the communication channel.  I will continue blogging about .NET and DotNetNuke technical topics, as well as product reviews.  Therefore trying to stay with a more technical focus.

In addition to this, as part of becoming a C# MVP, you will start to see more C# articles here as well.

New Blog at IowaComputerGurus.com

The second stage of change is the introduction of a new blog on the company website, IowaComputerGurus.com.  This blog will become the new home for the best practices, case study, and "doing business" blog articles.  Trying to focus a bit on the proper implementation/leveraging of both the .NET and DotNetNuke platforms from a business perspective.  These articles will be less technical in nature and are geared more towards doing business, we hope to include success stories of DotNetNuke implementations as well.

NOTE: if you are an existing IowaComputerGurus customer and would like your project featured in a case study on the new blog, please e-mail me [email protected].

Tutorials Aggregation

The final stage of change will come from a future "tutorial aggregation" system.  This will be a new place for the storage of items that are currently being posted to this blog that are much more directly "tutorial" related; items such as the DotNetNuke installation, upgrade, backup and restore tutorials.  Right now, although very popular articles these are a bit harder for individuals to identify and access.

The exact plan and home of this new system is unknown, therefore, all blogs of this nature that are created will be tagged with the "Tutorials" tag, so they can still be easily identified.

Comments/Suggestions Appreciated

As with any change, some people will not like the direction that things are going, I welcome comments and suggestions on better ways to manage this information.  Otherwise, stay tuned for future blogs and announcements.


June 15, 2009

Day of DotNetNuke Recap

As many of you know I attended and presented at the Day of DotNetNuke event this past weekend in Tampa Florida.  First and foremost I want to take a moment and thank Will Strohl and all others that put the effort forward to organize this great event.  I was very impressed with how well organized everything was, and overall the sheer size of the event.  With what I believe was close to 150 people there was a variety of interests and viewpoints expressed.  The sessions were great and the conversations before, during, and after the event were even better.

June 08, 2009

DNN Navigation Redirect With Parameters and No Control

When working with DotNetNuke I often find it necessary to do a redirection back to the current page, with additional querystring parameters.  Not actually switching views, but just back to the same page so that some other action could be taken for a specific module.  In the past most of the examples I found used this process.

DotNetNuke.Common.Globals.NavigateUrl(this.TabId) + "?mykey=myvalue"

Which would create a url such as


Although a fully functional URL that works 100%, it is not something that can be easily copied, and overall doesn't look all that fancy.  Looking through the functionality of the various NavigateUrl overloads, it didn't seem apparent that there was something that could be used to re-write that type of URL.  Well I missed something using the following code.

DotNetNuke.Common.Globals.NavigateUrl(this.TabId, "", "mykey=myvalue")

From this example we provide the tabId, a blank ControlKey, and then our added parameter value.  We could add additional parameters as well.

This results in a URL similar to the following.


Now, this is a fully re-written URL, and something much easier for a person to remember.  I hope this has been helpful!

May 22, 2009

Development Environment and Tools Used

A very common question that I get asked by people is; what tools do you use to complete your development and what type of system do you use.  Now, I believe I have written a bit about this in the past, but I thought I would take some time to go through and give a bit of a detailed overview of what I use for development and why I have selected the hardware and software that I have.  I will cover this in detail from both the hardware and software point of view.

May 14, 2009

Programmatically Creating DNN Roles A Gotcha Moment!

This is just a quick blog post to hopefully share some helpful information.  Recently when working on a DotNetNuke Authentication Provider for a client I was tasked with syncing roles from the external system into DNN.  Simple enough right?  We can just use the "RoleController" and the "AddRole" method to add the role to the system. Well, that is the process but it doesn't work 100% unless you specify specific items.  The following sections show what I tried, and what actually works, along with a few notes.

May 11, 2009

So you moved sites again?

As many people caught on the other day via Twitter I have moved my sites to a different hosting provider again.  One of the first questions I got before was "why did you move" or "did you have a problem with your existing host?".  I want to start off by saying that I do NOT have any issues with my old hosting provider, and that if it was not for special circumstances I would still be with them.  In this article, I'll lay out my hosting experience, and give everyone some insight in to what happens behind the scenes when I make hosting decisions.

April 16, 2009

Review of SourceGear Vault Source Control Provider

My last blog article "Selecting the Right Source Control Provider" touched on the evaluation criteria that I use when looking for a source control system. This article is a review of sorts of SourceGear's Vault product, my preferred source control system. I'll start by reviewing vault as it relates to the criteria from the previous article, I will then provide my overall feedback on my experience with Vault.

April 08, 2009

Selecting the Right Source Control Provider

One of the most common questions that I have been getting recently has been "what source control provider do you use and why?".  This article is the first in a series of two articles about source control.  This article takes a quick look at criteria that I believe is important to consider when it comes to evaluating source control systems for use.  The next article in the series will be a review of the source control system that I use, in relation to the evaluation criteria that I list in this article.

March 02, 2009

Speaking Engagements

As we get moving into 2009, one of my personal goals this year was to get out and do more presentations to User Groups and at conferences.  Well ...
February 25, 2009

Recurring Billing with Quickbooks

I know I typically blog here about .NET and DotNetNuke, but I have been fielding more and more questions via e-mail about how I manage my business.  So it was with that, and a recent question that I had of my own that I might try making a few business related posts here.  If there ends up being interest, I will continue with some general business items, otherwise, we will just go back to the regular scheduled programming!

Now, on to the issue at hand, when running a business such as mine, it is very common to have "recurring" invoices.  Say for hosting or support items that may be monthly, quarterly or yearly.  Up until now I have been using a crude system to remember, and honestly it hasn't been all that effective.  Having Quickbooks I figured there would be a way of doing it, but for the life of me I couldn't remember.  So I posted out to Twitter to see if anyone had recommendations, and in literally 5 minutes @BrandonHaynes responded with the perfect solution, and that is what I explain below.

February 18, 2009

Explaining High Performance DotNetNuke Configuration and Management

My recent postings regarding DotNetNuke have been very popular among the community and each of them have covered specific aspects of performance improvement. However, none of them have gone through the full collection of "performance optimizations" that are possible. This article is going to summarize the items from the existing articles and will try to explain some additional, bigger picture elements that come into play, and considerations that must be thought of during any site configuration.
February 14, 2009

Site Upgrades and Performance Improvements

Those that frequent this site and the other sites that I operate might have noticed some periods of service interruptions over the past 2-3 days as I have been working on some infrastructure upgrades for our collections of sites.  As part of this, it was my goal to improve the "average load times" of various pages of my DotNetNue sites.  As many people will note, they have been pretty fast before, but that just wasn't good enough for me.

So, now I'm proud to say that I'm done with all of the major changes and the functionality of all sites should now be stable, I've love to get some opinions of those regular users/visitors of my sites to see if they can confirm the improvements. 

View the full article for a listing of sites affected as well as benchmark information that I have.

February 06, 2009

DNN Performance Tip: Disable Unused Auth Providers

One of the most common questions I get regarding DotNetNuke performance is; "Why is the DotNetNuke login so slow?".  Well there are a number of reasons, but one of the most common issues is that every time you visit the login page it has to determine which provider to show you.  If you are using multiple providers, there is not much way around this.  However, if you are running a site that is NOT using any other providers, you have some options to really help speed up the performance of your login page.

View the full article for details.

January 30, 2009

Creating Comma Separated List in SQL

It seems that every client project I have started in recent months has involved a new form of complexity in SQL Server scripts.  The most recent task that I had to tackle was with generating a comma separated list based on entries in a table.  Now this was something that I needed for each and every row of a result set, so I didn't want to do the actual list creation in .NET.  So, reaching back to some content and examples that I built for my "Creating Dynamic SQL Pivots" article which will be published in an upcoming edition of SQL Server I found the following helpful snippet of code.

January 26, 2009

Creating DotNetNuke SqlDataProvider Files Using SSMS

One of the biggest failure points I see with third-party DotNetNuke modules, including some of my first released modules were failures due to the lack of support for ObjectQualifier or DatabaseOwner values within the SqlDataProvider files.  Although the process to add support for these two tokens is easy to add, it is very hard for those of us that like to test our database structures outside of DotNetNuke before we actually commit to building our modules.  Thankfully, with a bit of research, I have found a way to build SQL Scripts for DotNetNuke using SQL Server Management Studio (SSMS) in a normal fashion and using a simple find/replace operation to bring everything into compliance with DotNetNuke integration.  This post will explore the method that I use to accomplish this.

January 22, 2009

Avoiding File Locks and Cannot Access File Exceptions

While working through some issues recently with some legacy code written by someone else I was faced with a horrible case of a shared object that was writing to the file.  This was a "custom" logging implementation and opened a file for append, inserted the line, and then closed the file.  Well in times of heavy load the system would encounter errors such as "Cannot access ___ because it is being used by another process".  So in effect the file was either still open, or the lock was not yet released.  This post goes through a bit of the detail on how I resolved the issue.

January 09, 2009

Creating Dynamic Where Clauses with SQL

One very common scenario in when working with User Interface database queries is the concept of a "Dynamic Search Query". A select statement that can have optional items in the where clause. There are a number of methods to implement this, however, they have varying levels of difficulty and, overall each have their own tradeoffs, in implementation, readability, performance, and accuracy. This article explores a few of the most common methods of doing this.

January 05, 2009

How I Get My DotNetNuke Sites To Run So Fast

One of the most common questions that I get via the forums on this site, or via e-mail is "How do you get your sites to run so fast".  Although not perfect, my sites typically run a bit faster than your average DotNetNuke sites.  Previously I have kept the exact specifics of my changes to myself, however, with a little encouragement from the community I have decided to share the full context of the changes that I make to a default DotNetNuke installation to get better baseline performance, as well as extra items that I do to help when I really need that "boost".

Content provided in this blog is provided "AS-IS" and the information should be used at your own discretion.  The thoughts and opinions expressed are the personal thoughts of Mitchel Sellers and do not reflect the opinions of his employer.

Content Copyright

Content in this blog is copyright protected.  Re-publishing on other websites is allowed as long as proper credit and backlink to the article is provided.  Any other re-publishing or distribution of this content is prohibited without written permission from Mitchel Sellers.