SQL Azure & Updated Pricing

Written by rsolberg. Posted in All, Reviews, Technology

One of the biggest challenges I face daily is how to build and architect cost effective technical solutions to improve our business processes. While we have no shortage of ideas for processes we can enhance, we are very constrained on capital to invest. With all that said, we still have to operate and improve our processes. Our goal as a business is to be the best at what we do which means we also need to make sure we have appropriate scalable technical solutions in please to meet the demands of our users. Over the past few years our Customer Relationship Management (CRM) database has become our Enterprise Resource Planning (ERP) system. This system tells our staff everything they need to know about our customers, potential customers, and what activities need to be completed and when. This system is an ASP.NET web application with a SQL database on the back end. In the days leading up to our busy season, we had an Internet outage (thanks to some meth tweakers for digging up some copper!) and only one of our offices had access to our system. At this time, I knew that our business required us to rethink the hosting of our server and services. After working with various technical partners, we determined we could collocate our existing server in a data center for a mere $400 per month. While this was a workable solution, the only perk this would really provide us was redundant power and internet access which we didn’t have in our primary location. We still had huge redundancy issues with our server in general, and by huge I mean non-existent. In other words, if a hard disk failed, we were SOL until Dell was able to get us a replacement. Since our busy season of work had just begun, I decided that we’d roll the dice and address the concerns in the 1Q of 2012.

Enter Azure

When Azure was announced from Microsoft, I initially brushed off the platform. I found the Azure pricing model way too difficult to comprehend and I really wasn’t willing to spend the hours, weeks, or months trying to put it all together. Things have changed though! On February 14th, 2012 Microsoft announced that it was reducing the pricing of SQL Azure and I decided to see if I could figure out what that meant. While digging into this, I came across a nice article written by Steven Martin that did a good job explaining the costs.  After reading the article, I decided to evaluate the pricing calculator again.  Winner Winner Chicken Dinner! I could move our entire database to the SQL Azure platform for $9.99 per month!  This would at least handle some of the disaster recovery and scalability concerns.  The only other piece to the puzzle would be our ASP.NET web application.  While I have scalability concerns with that, disaster recovery isn’t really a concern because the data drives the app.  In other words, a Windows PC can running IIS would work until the server is fixed.  But what if the cost wasn’t an issue on the Azure platform?  Would it be worth it?  Five months ago, I couldn’t have told you the cost.  With the updated pricing calculator, I can see that running 2 extra-small instances of our ASP.NET web app will cost $60.00 per month.  VERY AFFORDABLE! While I’ve not deployed our solutions to Azure yet, it is something that I’ve got on the list to complete within the next 60 days.  Hosting our entire application for less than $70 per month (ok, a penny less… but still!) is amazing!  I’ll write another blog entry once we’ve tested the Azure system out, but very promising!!!!!

What if your database was 30GB?

HP TouchPad from OnSale

Written by rsolberg. Posted in All, Reviews, Technology

Well if you’re reading this, my guess is that you were potentially impacted by the fire sale of the HP TouchPads after the insane new price of $99 for the 16GB version was established. While most “Geeks” out there probably already had their tablet of choice in hand already or their eyes on one, the $99 price point made the device very sexy. Simply putting it on your desk as a digital picture frame, or calendar display, or eBook reader at this price would simply be amazing. Below I will recap my overall experience trying to grab one of these hot buys. If you’re looking for one, sorry I’m in the same boat as you!
Obviously something that has so much to give at $99 would be in hot demand. HP sold through their inventory very quickly. Most national and global retailers removed their stock to send back to HP. This left just a few folks whom were selling them through other channels like the re-seller platform through Amazon. On Sunday I came across a tweet alerting folks that the $99 HP TouchPad was available on Amazon. I logged onto Amazon as quickly as I could and ordered 3 of them. Again at the $99 price point, these would offer incredible value and make fantastic gifts. I then decided to pony up the extra coin to have the shipment expedited. After receiving the confirmation emails, etc. from OnSale, the re-seller, I got pretty darn excited. Normally ordering something on Amazon and selecting next day delivery goes off without a hitch. On Monday, I full expected to see a shipment notification from OnSale. Monday came and went and so did Tuesday and still not shipment notification. On Wednesday morning I checked my order status and saw “Shipping Soon.” I figured, this must be good news… I then saw some tweets from people suggesting their order had been cancelled from OnSale since the item was on back order. From the way folks were describing the situation, OnSale apparently oversold their inventory by the thousands. I decided to call Amazon just to make sure everything with my order was OK and they said, “YES” and to call OnSale with questions. I tried, dozens of times throughout the day. I’m guessing thousands of others were as well since all I got was “All circuits are busy, please try your call again later”… Clearly there was a big mess going on. Finally near 5PM I was able to get through to OnSale and they told me that they had no record of my order and that Amazon failed to send it to them. After publicly defending them and Amazon for the mess, I decided I was mad. I called Amazon and they again said, “everything looked fine” and that OnSale probably needed more time to catch up. About fifteen minutes later, I received my cancellation notice.
Clearly there was an inventory management issue somewhere in the supply chain for Amazon.com. While I know Amazon.com is not fully responsible for the re-seller channel, especially in terms of inventory, there wasn’t nearly enough communication. People were checking their front door days after ordering only to find cancellation emails. The communication on this was atrocious. If I were running the show at Amazon.com, I’d send out an email to all those customers whom tried to purchase the device with a recap of what happened, why, and what Amazon.com is doing to make sure it doesn’t happen again. While this fiasco won’t change my shopping habits, sometimes accountability will go a very long ways. If I were running the show, I’d also try to get in touch with HP and work something out. Supposedly HP may have some more inventory available within the week and a large retailer like Amazon may have enough clout to cut a deal on getting devices out to those whom ordered.

MacWorld iPhone4 Photo Contest

Written by rsolberg. Posted in All, Photography

It was a random morning while I was using Google Reader to review some of the RSS feeds that I follow when I saw a plug for an iPhone 4 photo contest sponsored by MacWorld. Normally I would have skipped right over it, but I had just happened to take a photo that I thought turned out pretty cool and decided it was worth a shot… Well this past week I received an email from an editor at MacWorld and my photo took 2nd place! They had received over 600 pictures, and mine was chosen. Pretty cool stuff. With the 2nd place finish came some pretty sweet gear from iLuv. The top item in my loot was the iLuv iMM190.  After downloading the app from the app store, the item is really a great addition for a bedroom, garage, or kitchen.  The sound is good too for its size. I wanted to quickly thank the folks over at MacWorld and iLuv for making the contest happen.  It was fun and interesting to see what others have used their iPhone 4 cameras for.  Some great shots! I added a new “Photography” category here to my blog to catch some of these types of items.  If I’ve won a prize once, maybe I can do it twice!

ELMAH For Multiple Environments

Written by rsolberg. Posted in All, Technology

Web applications today, especially in medium to larger sized enterprises will be deployed in multiple environments. This allows the development teams to deploy the web application to an environment to verify changes made and that the application functions as expected before shipping it to production. So when you go to use plugins out there such as ELMAH, how should you go about this?  Out of the box, ELMAH allows you to set a single connection string name within your web.config as shown below. So what do you do when you actually have 3 different connection strings for all the environments that your web application exists in?  As it turns out, this is pretty easy to do because ELMAH is open source.  When you download the ELMAH code, you can include it inside your Visual Studio Solution or create a new solution specifically for ELMAH that you can reference from your web application.
If you’re reading this I’m guessing you don’t need help on how to go about doing that.  If you have specific questions, use the contact me page or the comments below.
With the ELMAH code open, look for the SqlErrorLog.cs file and add the code below.  This essentially allows you to set  the connection string property via your application to handle variations… So suppose this was a real world situation where you have a few different connection strings to manage like this: From your Global.asax.cs you can add a line of code to use the correct ELMAH database…
If you’re looking for more information on this, please contact me and I’d be glad to help.

ASP.Net GridView Context Menu

Written by rsolberg. Posted in All, Technology

This post will cover how to add a context menu to a GridView in ASP.Net utilizing jQuery. Once your site is setup to utilize jQuery, you can simply include a new style sheet and script file and get awesome functionality fairly easy! Take a look at this site here to download the required files and their code samples. Mine below shows how I used this on a GridView in ASP.NET…



jQuery Initialization

ASP.Net MVC MarkItUp Rich Text Editor

Written by rsolberg. Posted in All, Technology

MarkItUp identifies itself as being the Universal Markup Editor and from as far as I can tell, this is probably true! It was very easy to integrate the jQuery editor into my new Blog Admin views. I will try to illustrate how I was able to do this below. In addition to the jQuery MarkItUp files, you will also need to download the MarkUp to HTML parser/enhancer of your choice. I used the MarkdownSharp framework which is what the makes of StackOverflow.com have recently converted to an Open Source project.

Download the MarkItUp Files and MarkDown Sharp

You’ll need to take a look at the MarkItUp Website and download a couple of different files. – markItUp! pack 1.1.6 – Basic MarkDown Set – MarkDownSharp

Include MarkItUp Folder In Your Project

Now that you have the files downloaded, you need to deploy them to your MVC site. I have deployed the MarkItUp folder to my Scripts directory. The MarkItUp folder contains 3 different folders (sets, skins, and templates) and you’ll find a couple of .js files in the root of the folder. Once the MarkItUp folder is in your project, open up the MarkDown file that you downloaded above. You will need to deploy this folder into the Sets folder described above in your project.

LINQ to SQL Where Clause Optional Criteria

Written by rsolberg. Posted in All, Technology

Often times you may allow the users to query your system and you give them the choice of which fields to use in their query. This entry covers how to use optional where criteria within your query and avoid having to write 12 versions of the same query with different where clauses! Let’s take a real example of what I’m talking about… Suppose you have the following basic LINQ query.
  • Product Number – Comes from another table that can be joined to ItemsHeaders.
  • PO Number – a field within the ItemsHeaders table.
  • Order Number – Similar to PO #, just different column.
  • Product Status – Apply if the user selected this from a drop down.In order to accomplish this task, you need to create a couple of extension methods that allow you to apply a where filter if a condition is met.
    New Query!
    I must give special thanks to Andrew Robinson for assisting me with this code and functionality.
  • © Copyright RSolberg, 2003 - 2014. All Rights Reserved