Windows Mobile 7 at Make Web Not War

I’m sitting in on the Windows Mobile 7 Session featuring Joey Devilla and Paul Leberge.

Joey has just demonstrated that the emulator is completely compatible with 4-point touch so that you can begin creating Windows Phone 7 Series 7 Applications without having the hardware.  This emulator and the full IDE is available on the Windows Phone Developer Portal, FREE-AS-IN-BEER.

The Windows Phone has been completely rehashed in order to focus on the users needs with a smart design and Integrated Experiences. The Windows Phone is looking to be the most well rounded phone to hit the market place right now.  The ’Metro’ User Interface was influenced by street signage which is something that is familiar to anyone that leaves their house. With Silverlight driving the User Experience, users are guaranteed to have a smooth, slick, and rich experience while interacting with their phone.

The Internet Explorer version for Windows Phone is currently a little bit different from what is currently running on Windows 7. The reasoning behind this is to get the phone to the marketplace and scale up the features of the browser to bring both desktop and mobile versions inline for future releases. For more information on this keep an eye on the IE Mobile Blog. This just in, Flash and Silverlight is slotted to be supported in browser on the Mobile 7 Phone.

There are will be only two supported form factors 800×480 & 480×320. All Windows Phones will need 4 point touch, a set RAM requirement, and a consistent Processor/GPU. This will keep things running smooth and take a lot of issues that developers run into out of the build cycle.

Make Web Not War – Keynote

I’m sitting in the front row of #WebNotWar, an Open Source Development Conference based on the Windows Platform. This is truly my first ever live blog, that I will be posting at the end of this session, so I hope enjoy the content.

“The Web and Website Development is still a child, we’re still in the dark of what the web will provide, however our flashlight is getting bigger”. We’re starting to experiment with new technologies and methodologies that weren’t available back in the 90s when the web was born and we were known as “Web Masters”.

No matter which language you use to develop, what your backend infrastructure is, what we make for the web is not for us, it’s for our users. The end user doesn’t understand what Ruby, Python, or AJAX is for all they know, they are fancy Minerals, a Snake, or what they use to clean the bathroom sink. What we as Developers need to do is worry about what the user needs, or wants without needing to worry about what is running in the background.

Javascript is the most widely implemented programming language on the web, and is the most interoperable language. When people realized how widely used Javascript had become it made people venture out to build frameworks to abstract the common tasks required in most web applications. This sort of thinking has lead to the birth of jQuery, Prototype, Dojo, YUI, and mootools.

“There really is no way to win, you just need to make it hurt less.”

Windows Azure Chat at TVBUG

On Thursday May 13th, I travelled to the North York Community Centre to give a presentation at the Toronto Visual Basic User Group on Windows Azure.  I’d like to thank the group for having me out, with a Special Thank you to the User Group leader Rob Windsor who was celebrating his Birthday that very night.

With a crowd of approximately 10 people this may have well been one of the smallest groups that I had giving my Windows Azure presentation to, but definitely by far the most interested in the cloud. The majority of the audience had questions, and may offered up more than one question, which is typically rare for a User Group.

There was one Question that I wasn’t able to answer at the event which I hope to clarify here.

The Question was brought on by the statement that a Windows Azure Queue Message was capable of storing up to 8KB. I’m glad to see questions like this arise as it lets you know that the audience is listening, here’s the question, “What is the maximum size that can be stored within a column of the Table Storage Service.”

After a little bit of research here is the official word from the MSDN Windows Azure Documentation Library.

An entity may have up to 255 properties, including the 3 system properties described in the following section. Therefore, the user may include up to 252 custom properties, in addition to the 3 system properties. The combined size of all data in an entity’s properties may not exceed 1 MB.

I have posted the slides on SlideShare, the slides themselves aren’t terribly informative the true value of the slides is in the Speakers notes which unfortunately don’t get posted. If you’d like to get a copy of the slide deck, please drop me a line.

The code that I presented is an open source project which is available on CodePlex. The Azure Email Queuer is meant to be a Starter Project for an Internet Email Marketing Tool. The current hosted source is a little bit out of date, but I will be working towards Updating it shortly. You can download the Visual Basic version of the Azure Email Queuer from my website.

Life Refactored: Going from 9-5 to Dedicated Technologist

"Consider it a going away present" The work life balance is something that all developers have to sort out in their own lives, and it’s not easy. There are coders that are content Developing between the hours of 9-5 when they are paid to do so.  Of course there is the polar opposite, in which Developers spend time out side of their paid job learning new techniques, technologies, and possibly even new programming languages. I am not saying there is anything wrong with either group, however it all depends on where you want your career to lead you. If you want to step into a world where you work hard, but all of that hard work will pay off, this blog post is for you. If this doesn’t sound like you, leave now.

As it may be quite obvious, I enjoy developing outside of the office, not only to further my skills, but also to make a little bit of extra money. This has it’s trials and tribulations in which your brain is always on, and sometimes you start speaking in code and/or writing code in your sleep.  Some times you have to make sacrifices like not playing Halo with your friends [Sorry Kyle & Anna], or missing out on attending certain social gatherings. However, there is a solid reason in which anyone would make these sacrifices and it all boils down to personal growth.

If you’re currently a developer that is doing the 9-5 life, or are currently in school and would like to Refactor your lifestyle into something that will grow your experience, and expertise here are some pieces of advice I have for you.

Goals

goal Just by reading the title above, you’re probably asking yourself “what is this guy going to tell me that I didn’t hear from my high school guidance councilor?”  The short answer is, not much, but one thing that I can offer above and beyond your guidance councilor is that I’ve been living the life, and I am focused on the same career in which you are in or working towards.

Educational Goals

When you first jump into the “Real World” from College you hit the ground running and are probably making less money then you first expected to make and have less free time than you anticipated you would have to attend some part-time studies. Setting simple educational goals that are easy to achieve are key to keeping on top of new Technology and Trends.

Personally, I have posted a Programmer Competency Matrix on my office wall, this gives me a constant reminder that if I don’t have a specific learning objective, there is something else I can always work toward.

Here are some resources I use in order to keep up with Development trends and new Technology:

Podcasts/Vidcasts

A Podcast is normally a short 15-30 minutes of audio clip, sometimes sped up to up to 2x the speed. The short time frame gives you the ability to listen to them practically anywhere, on a run, your commute to work, or even while you’re working on some code.

A Vidcast is practically the same as a Podcast, except for the fact it is in video format. Vidcasts are a little bit harder to keep up with because of the Visual element. However with the Release of Visual Studio 2010 we might be able to play videos within the IDE which will give us the ability to code and watch at the same time.

Here are some Podcast & Vidcast sites I enjoy:

Podcasts

Vidcasts

Blogs

If you found your way here, you are obviously familiar with the concept of Blogs. Blogs are a great source of information and I would have to say one of the biggest learning tools out there, all because of the magical invention of the Search Engine. You are able to find a so many of different opinions all focusing on the same topic and come up with a well informed opinion of the topic.

Industry Professionals

Local Professionals

Books/Magazines

A lot of publishers are doing their best to keep you buying books on a regular basis, take advantage of this whenever you can. E-books are great as they are often very affordable, and extremely portable. I keep a large number of books in my SkyDrive, this allows me to access them from any computer or internet capable portable devices [like an eReader]. Here are some prime places to Purchase affordable E-Books:

I also subscribe to MSDN Magazine and CoDe Magazine both of which are typically packed with incredible articles from Industry Professionals.

Forums

Forums aren’t really somewhere that you’d cruise to learn random facts about development, but they do have their place in the learning process. If you need an answer that isn’t required immediately, head on over to StackOverflow, or ASP.NET Forums to post your question.

two_way

Forums are a two way street, someone was nice enough to help you out for free-as-in-beer, pass the good cheer along and help out a follow programmer in need. The first vacation time I had ever had the chance to take, I spent the entire week on ASP.NET Forums helping out fellow developers. It made me feel great as I had the opportunity to both, help people out and learning new things that I would have had to learn eventually anyways. I’m currently a “Contributor” with 4,209 points.

Events

Find a Local User Group

If you’re a .NET Developer check out the INETA, you should be able to find a User Group near you on their site. If you are in the Greater Toronto Area [GTA] here is a list of User Groups near you:

Attend a local Code Camp

Code Camps are typically put on by User Groups but are normally a full day of learning for free. You will find content on Current, and upcoming Technology Trends from Local Speakers that you have the ability to talk to at the after party. If you do end up attending a code camp you may want to read the lessons learned by this first time code camp attendee. If you live in the GTA, definitely check out the Toronto Code Camp which is typically held on May 1st.

Keep an eye out for Development Conferences and Events

door_to_success Conferences and Events are excellent resources for Networking and High Level learning. Typically Conferences and Events have a Price Tag associated with them but from time to time you can luck out and find some extraordinary content at a reasonable cost and possibly even free. I typically live off of a few resources to keep up to date on some of the conferences that are going on in my area.

 

Microsoft Canada has a great Events System in which you can filter the events by Online/Offline, Developer/IT Pro, and even Geographical Region.

Newsletters are also a great source of Great Events sign up for a Newsletter from Microsoft, a Third Party Control Provider, a Book Company, or a Local Consulting Company. If you aren’t a fan of getting a flood of email some providers will allow you to subscribe to an RSS feed of their event/conference announcements instead of having to get the newsletter delivered to your inbox.

If you are on a tight budget here are some great free conferences to note: Make Web Not War, ObjectSharp: At the Movies, WebCamps and Hack and Defend.

Mentors

Mentors Help If you are able to land a job with a mentor program consider yourself lucky. There is no easier way to gear up your development skills then having someone watch over you when you’re still green. A mentor can also give you valuable life experience advice, and narrow your development vision so you don’t get overwhelmed by trying to learn it all [insert Pokémon joke here].

If you don’t have a mentor program where you work, it would be a valuable investment for the company, so don’t be afraid to ask for one to be implemented.

If you can’t find a mentor at work, there are a few people that you can contact that may be able to help. Microsoft has a group called the Developer & Platform Evangelist [DPE] Team, it’s their job to ensure that you as a Developer have the tools you need to get the job done. If they aren’t able to help you, they will definitely know someone that will be able to give you the advise you are looking for. You can also talk to your local User Group Leader, as they are also normally quite knowledgeable or connected to others that are willing to share their knowledge with you.

Community

Community plays an important role in your Professional Development. What you know can always be expanded, who you know is something that isn’t as easily obtained unless you put yourself out there.  You may have noticed that the majority of my points above tie into this theme, they all have to do with the Development Community. Each point made above builds upon the next; Starting with reading articles written by influencers within the Community, listening/watching to their shows, next you attend an event in which they are speaking, then ultimately you get the opportunity to get mentored by that individual, even if the experience is as simple as a quick chat at a technology event after party.

Expanding your network is important, so before you go to a Conference or Event, make sure to set goals as to who you wish to meet (if any), or how many people you wish to meet. Be sure to make a good connection with these people, enough that you’ll be able to recall where you met them if you are to run into them again at future events. Also be sure to be consistent, and reliable, if you make a promise be sure to follow through.

If you have the time to invest, you could become a volunteer for your local user group. Giving a helping hand at User Group meetings gives you the opportunity to continuously meet developers in your area, as well connect you with the speakers that come to present. It also gives you the opportunity to show off your talents, if you so choose to volunteer as a presenter.

Compiling a list of Best Practices

Similar to our coding habits, our lives can always be improved by putting a little bit of effort into understanding how others are implementing their solutions. In the points above I have outlined some of what I have done over the past two years. In posting these snippets of my experiences, I hope to inspire at least one Developer to refactor a part of their lifestyle.

If you have run across this post and were inspired or would like to add to the list of Best Practices, I welcome you to leave a comment below.

How to Configure the Guest OS in Windows Azure

It’s an exciting time with the release of Visual Studio 2010, .NET 4 and ASP.NET MVC 2. I made the move to rewriting my Azure Email Queuer Application to ASP.NET MVC and leveraging some Telerik ASP.NET MVC Extension Controls to kick up the project a little bit.

twitterProfilePhoto_bigger In making this move it made it necessary to upgrade from the default Guest OS for my Windows Azure Hosted Service. Luckily I was pointed to the “Windows Azure Guest OS Versions and SDK Compatibility Matrix” by Brent Stineman [@BrentCodeMonkey] which gave me the low down on how to configure Azure for the Guest OS I needed to target.

Here is the how to get the “osVersion” attribute in your Cloud Service Configuration (.cscfg) File.

Generating a Windows Azure Configuration File

Obviously, the easiest way to create a Cloud Service Configuration file for Windows Azure is to use the Visual Studio templates for a Cloud Service.  This is all fine and dandy for those of us that are using the .NET Framework on Azure, but Azure is a Robust Cloud Service Model that allows Open Source Languages like PHP, Python, Ruby and even Java. How do those folks Generate Cloud Service Configuration file?

This task is made simple with the Windows Azure Command-line Tool which is part of the Windows Azure SDK.

In the Azure Command-Line tool, you should start by adding the following to the %PATH%:

C:\Program Files\Windows Azure SDK\v1.1\bin

Here’s where things get fun, using the CSPack.exe file you can use a flag to Generate a Skeleton Windows Azure Configuration File. You’ll have to first save the following Service Definition File (I’m not sure why they don’t have a tool to generate this):

<?xml version="1.0" encoding="utf-8"?>
<ServiceDefinition name="[Service Name]" xmlns="http://schemas.microsoft.com/ServiceHosting/2008/10/ServiceDefinition">
  <WebRole name="[Must be a valid folder path]">
    <InputEndpoints>
      <InputEndpoint name="HttpIn" protocol="http" port="80" />
    </InputEndpoints>
    <ConfigurationSettings>
      <Setting name="DiagnosticsConnectionString" />
    </ConfigurationSettings>
  </WebRole>
  <WorkerRole name="[Must be a valid folder path]">
    <ConfigurationSettings>
      <Setting name="DiagnosticsConnectionString" />
    </ConfigurationSettings>
  </WorkerRole>
</ServiceDefinition>

Once you’ve replaced the Square Bracketed names with valid data, save the above XML to a file called “ServiceDefinition.csdef”, run the following command in your command-line tool:

c:\samples\HelloWorld>cspack HelloWorld\ServiceDefinition.csdef /generateConfigurationFile:ServiceConfiguration.cscfg

This will probably cause an error as there is a good chance there isn’t an endpoint defined for the Roles. However, It does generate the necessary Cloud Service Configuration File. In order to do the next step you’ll need to deploy a project, this will require that you use cspack to package your configuration to a cspkg file. This can be done using the following:

c:\samples\HelloWorld>cspack HelloWorld\ServiceDefinition.csdef
   /role:HelloWorld_WebRole;
         HelloWorld_WebRole
   /out:HelloWorld.cspkg

Got my Configuration File and Package, Now What?

Now We’ll Login to the Windows Azure Development Portal, which currently needs a Windows Live ID to login [The Windows Azure team is looking for feedback on other login methods that would be handy for Cloud login, if you’d like to share your Great Windows Azure Idea].

After you’re created a new Hosted Service to host your application, you’ll have to deploy your project, seen below:

deployment

Once the Deployment finishes uploading you will need to hit the configure button.

configure

After deployment, Windows Azure adds some additional configuration settings to the Configuration file. Opening the Configuration file in the Deployment Portal will allow you to modify your deployments configuration, note that this is also the way that you scale up/down the number of running instances of your application.

osVersion_Configuration

For this exercise to make sense you will have to Understand Which Windows Azure Guest OS is Required for your application. On the Details page for the Guest OS that you have selected you will see the Configuration Value for the Guest OS which will start with WA-GUEST-OS. Copy the entire value, as  you will be pasting it into the osVersion attribute for your Cloud Service Configuration.

If you specify an osVersion this will keep your deployment targeted to the Guest OS you chose. Note that future service updates may contain patches to the deployment which may fix security vulnerabilities, it is not guaranteed that these patches won’t affect your deployment so each set of security deployments may be hosted under a different Guest OS. You will be able to test out the newest Guest OS in your Staging environment before upgrading your Production deployment.

Happy Coding!