Blog

I recently installed a mesh network in our house using Google Wifi, replacing an Asus RT-N66U that was powering the network for our entire house (2 story, with basement). We found that Wifi was weak in certain areas of the house, the RT-N66U was on the first floor in the middle of the house.
I thought I blogged about this previously, but apparently not. One of the most frustrating things with getting your Foscam FI9803ep setup and running is getting the FTP access working. With the firmware updates in the past year or two, enabling FTP access to the camera isn’t easy.
We’ve been back in Missouri for just over 5 years now, and in that time I’ve taken my mountain bike out to Howell Island Conservation area three times. Howell Island is located in the Chesterfield valley, off of N. Eatherton Rd, if you’re coming from the outlet malls you will head south/west towards Centaur road. The area is pretty darn flat, though some of the trails are heavily rutted from vehicular traffic and flooding damage. I’m assuming the vehicular traffic is farming or park related, but not sure on that. Howell Island is a really simple multi-use trailer, with 8 miles of trails. It is a very easy mountain bike ride, and not a highly trafficked route by any means, according to Strava only 9 people have ever completed the outer loop in the counter clockwise direction (which is always the route/direction I ride). The trail is a mix of fields and wooded areas.

15 Years of DotNetNuke

Chris Hammond
15 years ago a guy named Shaun Walker released something special unto the world. Something that would ultimately change the way Microsoft approached Open Source. Shaun released a CMS tool called IBuySpy Workshop, a modified version of IBuySpy Portal. The IBuySpy Workshop ultimately became DotNetNuke, now known as DNN (I’m nostalgic for DotNetNuke btw).
So I really am starting to question my usage of Insteon hardware in my automated home lately. The Insteon App for Android is just poor, I’ll leave the details on those complaints for another blog post, but today, let’s talk about the latest Hub firmware update.

 

image

This is the first in what could potentially be multiple Rocket League Tip blog posts, we’re going to start off with a simple one, be a good team. Let’s talk about HOW to be a good teammate, maybe in a future post we’ll talk about WHY, though it should be obvious.

Two of my three cycling goals were completed in the past few weeks. First, I rode Pedal The Cause 2017, the century again. I didn’t walk any this year, though I did leave out the Babler Beast loop this year. I was fighting a cold, and it was very warm, I knew if I attempted it I would struggle to finish the ride, so I cut it short and completed 93.4 miles with 4600’ of elevation gain on the route. A big thanks to everyone who helped me out this year with donations, I raised $650, bringing my lifetime PTC fundraising to $4,956.69.

I’ve been trying for months to migrate my Codeplex Projects over to GitHub, but always got stuck at this step on GitHub (trying to get credentials for CodePlex:

image

I enter my Codeplex username and password, but it always comes back and asks me for the credentials again, they never work.

Well it’s been YEARS since I’ve checked anything into Codeplex, and I remembered that back in the day, I had to connect with different credentials in TFS, so how do you find those?

  • Navigate to the project in Codplex
  • Choose Source
  • Choose the “Connect” option
    image
  • Look at the Username field, in my case it was SND\SOMETHING_CP

Using that username and my normal CodePlex password, I was finally able to get the migration completed for one of my projects, only 21 more to go….

A list of supplies I planned to take on my Katy Trail bicycle ride, will eventually update this to show what items I actually needed and which items I shouldn't have bothered with.

Katy Trail Plan

BicycleTips.com
This is the initial plan for #KatyTrail2017, as posted on the internal ClubReady Slack before the ride. This was our plan, prior to taking off, for our route.
If you’ve setup a new DNN site running on version 9.0 or 9.1, you’ll notice that you don’t have the ability to setup the Google Analytics module/code anymore. For some reason, DNN Corp in its infinite wisdom decided to remove the core, critical functionality from the Platform version of DNN and only leave it in the paid versions. Well fear not, you can easily add Google Analytics code to your pages, follow these steps.

If you’re not switching all of your websites to utilize SSL encryption by default, you’re going to miss out on search results for many years to come! (see here for more info)

In the past, the notion of switching all your sites to use SSL would be daunting and a costly affair, especially if you have too many different websites to count (what, not everyone has this problem?).

I’ve been recently setting up a few websites on Azure for test purposes, and decided to look into how I could setup SSL for those sites. I came across a blog post from Rick Strahl regarding using Let’s Encrypt, for free SSL configurations. Basically with Let’s Encrypt, you can get a free SSL certificate, the main catch though is that they need to be renewed very frequently, they expire in 90 days.

From there I came across a Site Extension for Azure that can be setup to automatically configure, assign, and even renew these certificates. This takes quite a bit of work to get setup, but once setup, requesting certificates is super simple. As you add more “custom domains” to your Azure instance you can setup a new certificate for each. One problem I ran into however is that once I had setup two certificates, the extension started throwing an error when trying to add new certificates for domains. The error was:"

Cannot update IP SSL Bindings because total number of allowed IP addresses per site will be exceeded.
CloudException: Cannot update IP SSL Bindings because total number of allowed IP addresses per site will be exceeded.

This I believe is possibly due to my limitations on the Basic App Service that I have setup, where you are limited to SSL IPs, but you can have unlimited SNI SSL certs. Completing the binding process for the SSL certificate is easy, simply go to your Azure Portal, navigate to the App Service and then the SSL Certificates section. Click the Add SSL Binding button, choose your domain and select the appropriate certificate!

Boom, SSL setup and ready to go!

Update: Looks like I had a setting configured incorrectly in the Site Extension, I simply removed the web app setting letsencrypt:UseIPBasedSSL  see this thread: https://github.com/sjkp/letsencrypt-siteextension/issues/118#issuecomment-291241410

With the release of Visual Studio 2017 coming in a few short hours, I am proud to release the latest update for the Christoc’s DotNetNuke Extension Development Templates!

With this release I’ve updated my suite of DNN extension templates (modules and themes) to support Visual Studio 2017.

You can download these templates from Visual Studio 2017, by going to the Tools/Extensions menu. From there you can search the Online option for “DotNetNuke” choose the “DotNetNuke (DNN) Development Project Templates” option.


image

Other Download Options:

If you have any feedback, please visit the Project’s Github Repo


Here’s a quick video of how to install the templates in Visual Studio 2017


Here’s a quick video on how to make create your first DNN module. After creation the video walks you through the compilation and installation of that module into your DNN site.

In an earlier blog post I talked about the EventLog table and the Exceptions table, specifically in terms of how to “clear” the tables out. This post will talk specifically about how to keep the EventLog table cleaned up to begin with.

In DNN you have the ability to configure if you would like specific EventLogTypes to be tracked or not. By default in DNN there are over 100 different events that can be tracked in the EventLog table. Many of these are turned off by default, you can configure them to be “on” by going to the Admin Logs page in the Persona Bar, and choose the Log Settings tab

image

In doing so you will be presented with a page that looks similar to

image

From here you can click on the Edit pencil on each row and enable or disable the Logging setting

image

You can also turn options on such as email notifications and the Keep Most Recent entries option

image

Some of the default options in DNN will have the Keep Most Recent option configured to a low number, like “10 Entries” but some will have them set to All. This can cause the EventLog table to fill up with many many many events, depending on how much traffic your website gets. You can go through and set these all manually through the ADMIN UI, or you can do it in bulk in the database with this simple SQL statement:

update Eventlogconfig
set keepmostrecent = 10

If you’re using the SQL Console page you can use this statement

update {databaseOwner}{objectQualifier}Eventlogconfig
set keepmostrecent = 10


Warning: You might actually want to keep ALL logs for your site, depends on your industry and needs, but I prefer to keep mine pruned to try to keep the database smaller, more manageable and better performing.

image

At some point, if you manage a DNN based website long enough, you are going to run into a problem where your database seems to have grown WAY bigger than it should be. I’m not talking a couple hundred megs, I’m talking gigabytes, lots of gigabytes. This post will hopefully help you get that under control.

Tonight, I had a DNN instance that I was looking to migrate to Azure, in preparation for this I remoted into the web and database servers to see what the files and database looked like. The database MDF file was almost 1.5gb in size, for a DNN instance that has 5 portals, and very very little activity, this was concerning. I knew where to start looking though, there are two tables to start with, Exceptions and EventLog. The EventLog is tied to the “Admin Logs” in DNN 9, in earlier versions of DNN the menu item was Event Logs or even Event Viewer.

Running the following simple SQL query will get you an idea of how many rows are in those tables.

select count(1) from Exceptions with (nolock)

select count(1) from EventLog with (nolock)

If you’re running this in the SQL Console on your DNN site you might run it with

select count(1) from {databaseOwner}{objectQualifier}Exceptions with (nolock)

select count(1) from {databaseOwner}{objectQualifier}EventLog with (nolock)

This will give you a “count” of the number of rows in each of those tables. In my case, the EventLog table only had 394 records, but the Exceptions table had 300k+. That’s a pretty common cause of database size creep in DNN. Ultimately what my issue was, I had one site that still used “SolPartMenu” in the Containers for the skin, and with DNN9, those no longer work, and every request that tried to load that site (mostly search engines hitting it) caused multiple records to be thrown into the EventLog and Exceptions table.

Message:Object reference not set to an instance of an object.
StackTrace:
at DotNetNuke.UI.Skins.Pane.LoadModuleContainer(ModuleInfo module) at DotNetNuke.UI.Skins.Pane.InjectModule(ModuleInfo module)

Now, the question is how did I know what the cause of that cryptic error message was? Well, I had just spent some time with a customer of mine this weekend upgrading their website, and they ran into the same problem, so it was fresh in my head, and I was easily able to correct this.

But let’s get back to the topic of the post, the Exceptions and EventLog tables. DNN has a way to “purge” the eventlog built into the system, and most “types” of events only get stored 10 times, so when the 11th event comes in, the first one gets cleared from the system. But, the exception Events also get logged to the Exceptions table, and there doesn’t appear to be anything in DNN that cleans that table up automatically. Because I upgraded the site to DNN 9 well over a month ago, I had hundreds of thousands of exceptions in the table. So I needed to get this cleaned up, that’s easy with the following SQL statement.

truncate table Exceptions

or the DNN SQL Console version

truncate table {databaseOwner}{objectQualifier}Exceptions

That forces the table to be purged, and then using SQL Server Management Studio I was able to run a SHRINK command on the database, bringing the files back down to an expected 30 mb.

Now you might think, well can’t I do the same on the EventLog table? Unfortunately the simple answer to that is no. The longer answer is YES, but you’ll want to look at Sebastian’s SQL script for doing so: http://dnnscript.codeplex.com/releases/view/612643

I ran into a problem this evening with Visual Studio 2017 hanging when opening my Solution that I'm working on for my DNNTemplates VSIX project. It would open up solution explorer, it would also open up the TABS in visual studio, but it wouldn’t complete the process and would hang on “Opening the files”.

Basically every time I opened the solution, no matter what I tried, rebooting, deleting the .SUO file, deleting the .USER files, nothing would seem to work. I would let Visual Studio site for hours, and it would never complete the opening process.

Finally I went in and deleted the contents of the .VS folder, after deleting this contents the solution can successfully be opened.

So if you run into problems with “Opening the files”, try deleting the contents of the .vs folder in your solution directory, hopefully that will help you.

If anyone from the Visual Studio team wants to reach out to me on this, I have perfview files and files collected from collect.exe as I was trying to troubleshoot the issue.

With the improvements in Visual Studio 2017, the installation process can be much more compact and streamlined, allowing you to choose which “workloads” you want to install. But what happens when you need a workload that you don’t have installed? Well with a little digging I was able to determine the process to do so, check out the steps listed below.

  1. Shut down any running Visual Studio 2017 instances
  2. Click on your Start Menu and Type “Visual Studio Installer”
    image
  3. Once you have the installer open, if you see an “Update” option, go ahead and update Visual Studio 2017 before proceeding
    image

  4. After you have VS up to date, you should see a Modify option available
    image
  5. Once you click Modify you’ll be presented with the Workloads selection option in which you can choose your necessary workloads.
    image

Any time you need to add ore remove workloads, you can always get back to this screen.

With the Release Candidate for Visual Studio 2017 Community I did run into one problem where the “install” file ended up being lost. If that’s the case just download the vs_community.exe again from Microsoft and run that, it’ll restore what you need and get you back to the appropriate process.

Mary Jo Foley is reporting that Visual Studio 2017 will release on March 7th, 2017.

I guess I better get to updating my DNN Extension Templates for Visual Studio before that release hits!

Head on over to http://launch.visualstudio.com for details on some virtual launch events.

What are you looking forward to most with Visual Studio 2017? 

I'm hoping for faster installation times than it takes to install your operating system!

2017 Bicycle Goals

BicycleTips.com
2016 was a fairly down year for my biking, I think I only commuted to the office a handful of times, and my total mileage for the year was well under 1,000 miles. I'm planning a couple of things in 2017 that will hopefully get me to exceed that poor showing (819 miles), and hopefully triple it, with an ultimate goal of riding 2,500 miles for the year.

DNN 9.0.1 Released

weblogs.asp.net

Depending on what the "source" is, it appears that DNN 9.0.1 was released either 11 days ago, or 3 days ago.

So which is it, 11 or 3? Who cares, let's just go over some of the basics of what the release covers.

First off, there are a number of security updates in this release, primarily around API security.

RSS URL

Chris Hammond is a father, husband, leader, developer and car guy. Chris has long specialized in ASP.NET and DotNetNuke development, so you will find a variety of topics here on the website. For more information check out the about me page.

If you are looking for DotNetNuke consulting please visit my business website at http://www.christoc.com/