Weather.com Drops Support for Internet Explorer 7

Earlier this evening, I visited weather.com to find the following:

image

I’m quite surprised that IE7 is being dropped especially on such a popular website. However, I commend them on moving forward. IE7 is now over 6 years old and estimates are that less than 3% of users are still using IE7. That’s less than Internet Explorer 8, Internet Explorer 9, Chrome 22, Firefox 15, Firefox 16, and even Internet Explorer 6 – which is slowly dying off, but not fast enough.

As a reminder, if you’re using Windows 7, you can download Internet Explorer 10 Release Preview here.



Syncing “Application Installations” Across Windows 8 Machines

Windows 8 has done a great job with syncing settings across machines. So good in fact that you can even see what you’ve “purchased” from the Windows Store and what you’ve “purchased” that is not installed. I’m using the term “purchased” loosely as this infers that you’ve downloaded and includes free apps.

So, how do we sync theses application installations? Quite easily.

Go into the Windows Store, right click or swipe down) and choose the item at the top that says “Your Apps”.

image

When that loads, you’ll notice a drop down that shows Apps not installed on this PC. If you choose it, you’ll see all of the Windows 8 machines that are tied to your Microsoft Live account.

image

You can choose any of these machines to see what’s installed on that machine, select all of the apps that you’d like to install, and install them to the current machine.

So far, the only caveat that I’ve found (though I’m sure there’s someway to do it), is that my start menu items and groups are not sync’d between machines. If I could get that, this would be a huge win. Until then, cheers!



Dropping MS SQL Tables that have a Prefix using T-SQL

How many times have you wanted to drop a selection of Microsoft SQL Server tables that have begin with some common characters? I have many times especially when I’m testing certain web applications, such as Orchard CMS, and using different database prefix values to switch between instances. Thanks to Curt Hagenlocher over at a StackOverflow post, I now can.

This can easily be updated to include views, stored procedures, and functions.



Being a Microsoft MVP for 10 Years

First of all, thanks to all who are involved with the Microsoft MVP program for acknowledging the technical community. It is much appreciated.

WP_002712

It’s hard to believe, but it’s been 10 years since I first became a Microsoft MVP. I still remember where I was 10 years ago.

mvp-10-year-thoughts

Since that time, I feel that I’ve grown as a community leader and have become a better developer. I think I’ve learned that our user group, .NET Valley, will always have peaks and valleys. Even though we haven’t had consistent attendance, we’ve still managed to observer over 20 IT professionals and developers successfully secure jobs through user group networking at our events. When someone’s livelihood has been positively affected, it’s worth it.

To find out more about the MVP program and similar programs in the technology community, be sure to read my blog post about the MVP program at http://jasongaylord.com/blog/microsoft-mvp-2012.

Finally, I can’t take all of the credit. Besides coworkers and other friends in the technology community, I have to thank my wife, Lisa. She’s tolerated my late nights writing articles, prepping for talks, answering community forums, and traveling to events. Even in all of her spare time, she’s pitched in and helped stuff giveaway grab bags for our TECHbash and NEPA GiveCamp events.

I can only hope that I can continue to help out the technology community for the next 10 years with as much success as I have the first 10 years.



Microsoft Stack for Startups

One of the questions I’ve been getting asked lately at user group meetings, advisory board meetings, and lunch discussions about technology is “What startups are using Microsoft technology?” The perception is that building on top of the Microsoft stack costs money, much more than using LAMP (Linux, Apache, MySQL, and PHP). Let’s see what Microsoft can offer as of today.

Microsoft BizSpark

Many startups aren’t aware of BizSpark. BizSpark is very similar to WebSpark (for web developers) and DreamSpark (for students) in that businesses can have access to Microsoft software and services and partner expertise during a three year time period. At that time, participants “graduate” and get to keep everything that they’ve used during the time period as well as receive steep discounts on future software. To qualify, startups must be less than five years old, be privately held, have less than $1 million in revenue and be developing software. If you’re a student, you can even participate in the annual ImagineCup competition. Looking for some VC funding? Bing Fund is a potential place to check out. You can find out more about the BizSpark program by visiting the website or by downloading the fact sheet.

Since I’m based in Pennsylvania, I wanted to show my user group members the following in our area and surrounding areas. I think this graphic is pretty telling:

BizSparkParticipation20121113

Mono Tools

So, let’s assume that you’re worried that Windows and Windows Server will cost way too much down the road. However, you love Visual Studio and .NET. For many years, there has been a toolset that allows you to build .NET applications and deploy them to Linux. The toolset is called the Mono Project. The Mono Project is a port of functionality based on the CLR and specifically C# to Linux. Currently, it covers C# through version 4.0. A commercial product, called Mono Tools, allows developers to have a more seamless integration of the Mono Project within Visual Studio. Mono also has an increasingly large community and you can find out more by reading the Monologue.

One of the major sponsors of the Mono Project is a company called Xamarin. The company’s founder, Miguel de Icaza, was the primary force behind the Mono Project before Novell had shut it down. Miguel’s company Xamarin has continued development on the Mono Project and two other interesting projects: monotouch and mono for Android. The monotouch product allows developers to write C# applications for iOS while the mono for Android product allows the same for Android devices. If you’re interested in learning more about either, check out the following books written by Wally McClure:

Other Free Microsoft Resources

If I were to research and list all of the free resources that Microsoft has for startups, I may never stop typing. So, below is an incomplete list of resources. If you are aware of others, feel free to leave them as a comment and I’ll try to keep this list as complete as possible.

  • Visual Studio 2012 Express Products – Please don’t look at the term Express and think that these products are not feature rich. These products include most of what a startup would need if not everything. If you do need a full version of Visual Studio, look at the Spark programs. If you don’t, you have access the following products:
    • Express for Web – For web development
    • Express for Windows 8 – For WindowsRT design style applications
    • Express for Windows Desktop – For traditional desktop applications
    • Express for Windows Phone – For Windows Phone applications
    • Team Foundation Server Express – For source code management for small teams. If TFS Express isn’t your cup of tea because you use GitHub, you can always consider GitHub for Windows by the GitHub team which is also free.
  • SQL Server Products
    • SQL Server Express 2012 – This is a great way to start off with creating a database that will eventually grow up to and beyond 10 GB. SQL Server Express databases can be migrated over to full blown SQL databases and clustering. Click here for a full comparison.
    • SQL Server 2012 Compact Edition – SQL Server Compact is not full featured, but is a free, embedded database that can be used with applications. If you’re just looking to store some core data and not looking to do lots with your data, this is perfect. However, you can always use WebMatrix (mentioned next) to convert the database later on if you made the “wrong” choice.
  • WebMatrix – This tool is phenomenal. It’s a great lightweight tool for creating web applications. It has been optimized for open source and allows developers to spin up WordPress and other popular open source applications. It also includes IIS Express (mentioned next)
  • IIS Express – IIS Express is a free version of the IIS Web Server that can be installed and setup to point to any directory. This is a great tool during the development process. Oh, and this is also bundled with WebMatrix and Visual Studio.
  • Azure Cloud Services – So this one is tricky. It’s not really free. There is a 90 day trial and the team frequently offers free services for a limited time when they offer new features or products. However, if you don’t want to pay for hardware, this is a great way to host your entire business (or parts of it). Active Directory (for authentication), Exchange (for email), SQL Azure, etc. are all part of the same service.
  • Outlook.com Email – Outlook.com is the new Hotmail. One of the cool features is that if you already own a custom domain name, you can set it up with Outlook.com for email. Check out http://domai
  • ns.live.com for more information.
  • Open Source Projects – There are too many to name them all. However, check out these resources that highlight Microsoft supported and community open source projects on the Microsoft stack:

Startups Currently Using the Microsoft Stack

Much like the free resource listing above, this list is (very) incomplete. If you are aware of a startup that is using the Microsoft stack, please let me know in the comment section and I’ll try to keep this up to date. Microsoft also has an incomplete listing on their website.

So, hopefully you have a better idea as to what the Microsoft Stack can do for your startup. If you have any suggestions for items you’d like to see added, be sure to let me know in the comments of this post.



Embed JavaScript in Custom ASP.NET Server Controls

As ASP.NET evolves, using ASP.NET WebForms is still the most popular way to serve up ASP.NET. One of the biggest benefits of ASP.NET WebForms is the fact that we can use re-usable code in several ways including in a compiled server control. What you may not know is that server controls can be quite powerful and can allow referencing JavaScript files. But, if you’re distributing your controls or do not have the means to host your JavaScript files on a content delivery network (CDN), you may want to package the files with your control.

So, let’s start from the beginning. Let’s assume that we’re building a sample web application to test our control output. We’ll create a brand new solution in Visual Studio 2012 along with an ASP.NET Empty Web Application. After the project is created, we’ll add another new project: an ASP.NET Server Control project called ‘OurSuperCoolControlSuite’.

After our server control project has been added, we’ll see a .cs file (or .vb file if we are using Visual Basic) named ServerControl1.cs. For this example, let’s rename this to GreetingControl.cs. I then have updated my GreetingControl.cs to include a basic input text element that calls some custom JavaScript when the input element loses focus to show a Greeting alert. Here’s what the GreetingControl.cs looks like:

GreetingControl.cs

   1: using System;
   2: using System.Collections.Generic;
   3: using System.ComponentModel;
   4: using System.Linq;
   5: using System.Text;
   6: using System.Threading.Tasks;
   7: using System.Web;
   8: using System.Web.UI;
   9: using System.Web.UI.WebControls;
  10:  
  11: namespace OurSuperCoolControlSuite
  12: {
  13:     [DefaultProperty("Text")]
  14:     [ToolboxData("<{0}:GreetingControl runat=server></{0}:GreetingControl>")]
  15:     public class GreetingControl : WebControl
  16:     {
  17:         [Bindable(true)]
  18:         [Category("Appearance")]
  19:         [DefaultValue("")]
  20:         [Localizable(true)]
  21:         public string Text
  22:         {
  23:             get
  24:             {
  25:                 String s = (String)ViewState["Text"];
  26:                 return ((s == null)? "Jason" : s);
  27:             }
  28:  
  29:             set
  30:             {
  31:                 ViewState["Text"] = value;
  32:             }
  33:         }
  34:  
  35:         protected override void OnPreRender(EventArgs e)
  36:         {
  37:             Page.ClientScript.RegisterClientScriptResource(typeof(GreetingControl), "OurSuperCoolControlSuite.Scripts.Greeting.js");
  38:             Page.ClientScript.RegisterStartupScript(typeof(Page), "ControlFocus", "document.getElementById('" + this.ClientID + "').focus();", true);
  39:         } 
  40:  
  41:         protected override void RenderContents(HtmlTextWriter output)
  42:         {
  43:             output.RenderBeginTag(HtmlTextWriterTag.Div);
  44:             output.AddAttribute(HtmlTextWriterAttribute.Type, "text");
  45:             output.AddAttribute(HtmlTextWriterAttribute.Id, this.ClientID);
  46:             output.AddAttribute(HtmlTextWriterAttribute.Name, this.ClientID);
  47:             output.AddAttribute(HtmlTextWriterAttribute.Value, this.Text);
  48:             output.AddAttribute("onBlur", "greetMe(this.value);");
  49:             output.RenderBeginTag(HtmlTextWriterTag.Input);
  50:             output.RenderEndTag();
  51:             output.RenderEndTag();
  52:         }
  53:     }
  54: }

Next, we’ll add a Scripts folder to this same project. We don’t have to, but this allows us to organize our JavaScript files better. So, if you look in the code snippet above, you’ll notice on Line 37, we’re using ClientScript.RegisterClientScriptResource. This method takes two attributes: a type and a string of the resource. For the type, it’s best to use the class name of the control you are building. The reasoning behind this is that if you are sharing the same script across multiple controls, you may run into some strange behavior as the embedded resource will be shared between all of the controls using the same type. This means that if your end users are using two different controls that use the same resource on the same page and that resource contains a variable to store a value, the value is used between both controls. The second attribute is our JavaScript file. Now, in a minute, we’ll add Greeting.js to our Scripts folder. But, we can have multiple Greeting.js files in our application. So, to clarify which one we would like to use, we need to specify the assembly name, folder structure, and JavaScript file name. In this case, our default namespace and assembly are both OurSuperCoolControlSuite. The folder structure is just Scripts. We’ll separate these using periods to get OurSuperCoolControlSuite.Scripts.Greeting.js.

Let’s add that JavaScript file now and change the Build Action of the file in the properties window to ‘Embedded Resource’.

Greeting.js

   1: function greetMe(value) {
   2:     alert('Welcome, ' + value);
   3: }

We’re almost there. We have our JavaScript embedded into the binary and we’re looking to register the script file in our control, but at this point we haven’t specified that this resource is available to the Web. So, just to keep all of our assembly information together in AssemblyInfo.cs by adding the following to that file (found in the Properties folder):

[assembly: WebResource("OurSuperCoolControlSuite.Scripts.Greeting.js", "text/javascript")]

Now, let’s compile our server control project OurSuperCoolControlSuite.

Going back to our ASP.NET Web project, let’s add a new ASP.NET WebForm called default.aspx. We’ll switch to design mode as this refreshes the Toolbox window. We should now see our control appear at the top of the toolbox as shown below:

image

Finally, let’s drag our control to the designer. We’ll leave all of the default values of the control and simply run our Web application to see what we’ve done. When we leave the input control, we’ll get our JavaScript alert like we’re expecting:

image

So, let’s check out the rendered markup:

   1:  
   2:  
   3: <!DOCTYPE html>
   4:  
   5: <html xmlns="http://www.w3.org/1999/xhtml">
   6: <head><title>
   7:  
   8: </title></head>
   9: <body>
  10:     <form method="post" action="default.aspx" id="form1">
  11: <div class="aspNetHidden">
  12: <input type="hidden" name="__VIEWSTATE" id="__VIEWSTATE" value="ujUKHFd/M66UGv4J0cHNpTYhArBWf9fbtT2EnoPIeBCTvKsxnv8RhqWiclz4isaDVA5RGAq34QhgzP1u00nUnc2G+uo9cHBXO93wo4KVt0g=" />
  13: </div>
  14:  
  15:  
  16: <script src="/WebResource.axd?d=-P4RDcgXkNOn_YBSzQs9QnlpUkuyKvL9dN_aN24z9gNtNbp8N0RegRa0qyC9MB1-76d6lcsPvf-em95iFJrp2hesCfrTWRkCgd7vEMF3yI3Rfc_Eyywc7m9bEtxaWp_rVl_WDYbyF97Ehy42Q0Z1WQ2&amp;t=634880155251801752" type="text/javascript"></script>
   1:  
   2:     <div>
   3:     
   4:         <span id="GreetingControl1"><div>
   5:     <input type="text" id="GreetingControl1" name="GreetingControl1" value="Jason" onBlur="greetMe(this.value);" />
   6: </div></span>
   7:     
   8:     </div>
   9:     
  10:  
  11: <script type="text/javascript">
  12: //<![CDATA[
  13: document.getElementById('GreetingControl1').focus();//]]>
</script>
  17: </form>
  18: </body>
  19: </html>

Notice that in Line 16, we have a script reference. This reference is using an HttpHandler named WebResource.axd. Our JavaScript file has been referenced through this URL.


What’s cool about this is that we now have a self-contained server control that has an embedded JavaScript file.


So, if you’d like to skip right to the demo without building it yourself, feel free to download the solution using the link below.


Enjoy!



Download



Windows Store is Missing Enterprise Capabilities

The Windows Store is great. Seriously, it is. There are some minor issues with it that I’d like to see such as a way to track “recommended apps” by either your friends or by Microsoft and a way to sort Games by “Xbox” titles. However, the biggest thing the Windows Store is missing is a way for businesses to handle it.

IT professionals have never had to deal with this in the way they do now. Windows design style applications are coming out to accomplish so much and a lot of business functionality is moving to these types of applications. Although, iPads and the rest of the “iParade” could have connected to the network, the Apple world has generally been considered a “separate” network from the traditional machines. The question is, how would an enterprise level store work? Well, I have some recommendations:

  • The most obvious is the Group Policy update for enabling and disabling the Windows Store. However, when SalesForce or Microsoft CRM comes out with an app for the Start menu, we cannot disallow the Sales staff from installing it. That’s one of the reasons they like to use iPads now.
  • Allow corporate sponsored applications to be deployed to Windows 8 devices. All Windows 8 devices. See, I’m a developer. And I know we’ll have WindowsRT devices in our organization. And I know I compile apps for x86 and x64. But, there has to be a way that Microsoft can decompile my .NET apps back into IL and allow for deployment to WindowsRT devices. I’m not that well versed in the deep inner-workings of the CLR, but I’m sure that there can be some magic there.
  • Allow businesses to add apps to a custom store feed per OU or User. I’m sure this would cause a lot of work to be done and Microsoft would want to charge for it so it sounds like a great addition to System Center. I mean, how cool would it be to open up all games for the IT staff but leave only the Skype app for all other users? Keeping it real, there’s no reason why different departments can’t have different available apps through their store and can install the apps on demand.

Hopefully we’ll see something official from Microsoft in the next 12 months if not sooner. Some of us like the idea of early adoption, but an all or nothing store doesn’t help us out.

What are your thoughts?