Generating License Keys for Software Products

A few years ago, I had decided that I was going to go full-speed into building my own products. Do not get me wrong, I still have that dream and continue to try, but other like everything else in adulthood, other priorities constantly get in the way. One of the first things that I thought about was how to implement copy protection and do license enforcement for my products. Most off-the-shelf products that we use today involve the user receiving some sort of license code or unlock key that the customer is required to enter into the program in order to unlock features. I originally went with a third-party solution to implement this type of functionality, but after a bad customer experience, I dropped that vendor and decided to roll my own. Yes, I know that approach is full of danger, but that is what I decided after looking at the options. In this first post, I tackle the first part of a software licensing solution: generating the product license keys.

Continue reading

Desert Code Camp 2011: WCF REST Services Using the WCF Web API

Thank you to everyone that could attend my Desert Code Camp presentation on building RESTful web services using the WCF Web API. For those who would like to review the presentation, or for anyone who missed the presentation, I have posted the screencast and audio online for you to review.

Continue reading

Desert Code Camp 2011 Presentation: Windows 8 for .NET Developers

First, I would like to thank everyone that attended my presentation on Windows 8 for .NET Developers. I enjoyed being back at Desert Code Camp presenting and am very thankful that I had the opportunity to present this topic to you. I have posted the recorded audio and screencast from the session for you to review.

Continue reading

Coming Up For Air

It is hard to believe that we are approaching the end of 2011. When this year started, there was a lot that I wanted to accomplish. I still plan on accomplishing those goals, but it will most likely be 2012 for that to happen. I have also been away from my blog for far too long and have not published much technical content lately. I will try to catch up in the two months that I have left so that 2011 can go out in a coding blaze of glory. But as I wrap up 2011 and get ready for 2012, I am also getting ready for a bunch of changes. Here is an update of my life as of the end of 2011.

Continue reading

Mercurial Plug-in Updated for OnTime 2011

Sorry everyone for the long delay between releases. I’ve been extremely busy with my professional life, which has made doing side projects a little difficult. A few weeks ago, Axosoft released OnTime 2011. A user kindly reported to me this morning that the plug-in didn’t work with OnTime 2011, so I updated it this morning and released the update on CodePlex.

Continue reading

Changing Your Razor View Layout for Themes and Devices

In a previous post, I showed off some source code that I had written to customize the ASP.NET MVC view engines to support themes and mobile devices. In this post, I’m going to build on my updated view support a bit to discuss how to customize the layout of Razor-based views for different themes and mobile devices.

Continue reading

ASP.NET MVC Views Gone Crazy

I love ASP.NET MVC. It took me a little while to warm up to it with MVC 1.0, but the way that the framework was built has made each version really exciting to work with. One of my favorite pieces is the view engine architecture. In ASP.NET MVC, view engines are pluggable components that can be replaced with other view engines. Traditionally, ASP.NET MVC came with support for ASPX-based “web form” views. With ASP.NET MVC 3, Microsoft introduced the Razor view engine that added a much easier syntax for building sites. As a view engine user, creating a new view engine isn’t something that I really care about doing, but what I do want is to have the flexibility to implement some advanced scenarios to implement features such as themes or mobile device support. Fortunately, the ASP.NET MVC view engines are also built for extensibility, and in this post, I’ll show you how.

Continue reading