My Experience Earning a MCSD for Windows Store Apps Using C#

This summer I had been having fun working on a Windows 8 RT C# application. I decided to take the momentum of learning a new language and platform and apply that to getting certified. To earn a Microsoft Certified Solutions Develop for Windows Store Apps Using C# you need to pass three tests of increasing specialization, 70-483, 70-484, and 70-485.

Exam 70-483: Programming in C#

microsoft-specialistThe first of three exams was 70-483 on programming in C# which I felt pretty good about already. A few other developers had written a few Microsoft 70-483 exam preparation guides and more than one suggestion to read Pro C# 5.0 and the .NET 4.5 Framework which was a intimidating tome to start with. This was easily the most difficult test to prepare for because C# is an enormous language when you start looking under the covers and getting into the details. After reading the book cover to cover and going back through a few times I felt pretty confident about passing the test. Needless to say I was really disappointed to fail it the first time out. They don’t leave you blind and told me the general areas I needed to brush up on. I spent another two weeks going back over everything an hour or two each night before psyching myself up to take another stab at the exam. It was quite a relief to pass the first of three exams. I didn’t realize it before taking the test but passing also gave me my first certification step. In three months of work over the summer I became a Microsoft Specialist in Programming using C# complete with a logo I can use.

Exam 70-484: Essentials of Developing Windows Store Apps Using C#

I took a well deserved break for a week before starting my studies for the next exam, 70-484 on the Essentials of Developing Windows Store Apps Using C#. Here it started to get a lot more interesting as this is what I had already been working on for the last few months. It was at this time I found the Microsoft Virtual Academy and my study methods changed drastically. I did continue reading on the bus and picked up Exam Ref 70-484: Essentials of Developing Windows Store Apps Using C#, but I also started watching Jerry Nixon and Daren May present the video training Windows Store App Development Essentials with C#. As an aside, the MVA is an incredible resource, and I really enjoyed watching and learning from both Jerry and Daren over many hours of video. After finishing up both the book and video I went on to pass this exam on my first try. The sum of knowledge I was building up was obviously cumulative. Understanding what to expect, the exam conditions, familiarity with the facility I think all helped to make this happen in just a couple of months.

Exam 70-485: Advanced Windows Store App Development Using C#

MCSD_2013(rgb)_1484

Feeling like I was on a roll at this point I dove right in to prepare for the final test, 70-485 on Advanced Windows Store App Development Using C#. I started reading on the recommended book Exam Ref 70-485: Advanced Windows Store App Development Using C# and MVA video training Advanced Windows Store App Development Using C# immediately. There was a sense of urgency at this point because the reading material and videos (at the time I was watching them) were about to be out of date! Microsoft was updating the series for the new Windows 8.1 release and additional features. Before I was done with any of the study material I signed myself up for a November 30th test date. It was going to be all or nothing because if I didn’t pass then it would set me back another month to go over new material. I spent all my free time studying to cram it all in before the test and my effort was well rewarded. I passed that morning, and I was elated that I had completed my personal challenge to become a Microsoft Certified Solutions Developer. I’m excited to share with you my new certification logo as well, so shiny.

MCSD and the Future

No certification process covers every piece of possible material, and I am not coming out the other side of this experience knowing all the answers in Windows Store app development. I would do the process again for sure, and I’m probably going to get re-certified in two years. This was a long standing dream of mine that I was able to seize this year and I’m now I’ve got to make my next step. Thanks MVA, Daren May, and Jerry Nixon for putting together the videos and my wife for giving up so much free time.

Using SciTech Memory Profiler for Windows 8 Store Apps

Heading toward the app submission finish line with our new Windows 8 Store App I was wrapping up the remaining functional bugs and we had a moment to breath. Of course with that extra time I started to poke around at performance and asked about our expected usage. They didn’t have an idea so we pull some heavy usage tests out of thin air and threw them at the application. It buckled, taking just over a minute to start the main process after connecting to a server. The Visual Studio tools for profiling and performance analysis are awesome, but were grayed out for my application! I could only do CPU profiling using the build in performance wizard so I started looking elsewhere. Specifically it would not let me do the Visual Studio Performance Wizard for Implementation or Memory profiling. I downloaded every application that was recommended on StackOverflow but SciTech Memory Profiler was what did it for me.

Installation was pretty simple, it integrated right into Visual Studio. I built my application and pulled it up on one window with the profiler on the other. I loved using the real-time profiling, watching the memory usage rise was fun, and disconcerting. I looked through the function calls, seeing where all my time was being used and it ended up being an inefficiency in how I spooled up a pool of WebViews. There was a still a lingering memory leak though, and after a few more hours of digging around I found out I made a very newbie mistake of not removing my event listeners, which prevented old pages from being garbage collected completely.

I could not get the build in Visual Studio tools to provide any of this functionality, so SciTech was a savior in that respect. One improvement I would like to see however is the ability to debug my application from within the Surface Simulator which I couldn’t figure out how to get working.

Getting started with Python web development: Setting up the environment

Python is a fun language. It is easy to read, write, and they have libraries for almost everything. To try and catch up though all at once I am going to go through the process of setting up the new hot stack. I will be going through this setup on my system using Mac OSX 10.8.2, and we’ll use pip and brew for installing our dependancies for this article (What the heck is pip or brew?) as it makes getting setup very easy.

Where we’ll end up:

  • Python 2.7
  • Separate Python environments using virtualenv to help with development down the road
  • Flask micro-framework for the web server, template engine and API development
  • MongoDB for our document store using the PyMongo library
  • Jinja2 for the front-end template engine, bundled with Flask
  • Flask-OpenID for user login

Installing Python

Easiest step, Mac OSX 10.8.2 is already running Python 2.7.2! If you don’t think you have it open up a terminal and type the command python –version. If you don’t it, go download and install it: http://www.python.org/getit/

$ python --version
Python 2.7.2

Installing virtualenv

Open up your terminal and fire off a this command to install virtualenv, you may have to use sudo to elevate the command.

$ sudo pip install virtualenv

After it is installed make a directory to store and locate any virtual environments you have setup for Python and go into that directory.

$ mkdir virtualenvs
$ cd virtualenvs

To make a new virtual environment is really easy, just type the command virtualenv environmentName and it creates the directory structure for you.

$ virtualenv envTest
New python executable in envTest/bin/python
Installing setuptools............done.
Installing pip...............done.

Go into that new directory that virtualenv created and you’ll see a full folder structure with Python 2.7 in there for you. This is important, to activate the environment on this terminal only run the command source bin/activate to get into the new virtual environment. Use the command deactiavte to get back out of the virtual environment. Any pip commands we run in here, while active, will install to this virtual environment only instead of the computers global store.

$ source bin/activate
(envTest) $ pip install blah
(envTest) $ deactivate
$

Why mess with virtualenv at all?

When you start having multiple projects, on multiple servers, you want your local development environment to match that of the server, including things like different framework versions. Setting up and using virtual environments like this allows you to get in the good habit of knowing what is on your box and available to you, and why you chose what you did.

Installing Flask, PyMongo, and Flask-OpenID

Get back into your virtual environment directory you setup earlier and then lets run the easy pip install commands!

$ source bin/activate
(envTest) $ pip install Flask
(envTest) $ pip install pymongo
(envTest) $ pip install Flask-OpenID
(envTest) $ deactivate

Install MongoDB

I just followed the MongoDB installation instructions and it worked perfectly. Simply type the command brew install mongodb and you’re good to go.

$ brew install mongodb

Test the environment setup

So now that we have everything installed lets run a test Python script to verify that everything is working as we expected. Open up a new terminal and fire up MongoDB using the command mongod  and then run this script after activating your virtual environment on the terminal you are in.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
from flask import Flask
from pymongo import MongoClient
import flask_openid
 
mc = MongoClient()
print "PyMongo test: "
print mc.database_names()
 
print "flask_openid test: "
print flask_openid.COMMON_PROVIDERS["google"]
 
app = Flask(__name__)
 
@app.route('/')
 
def hello_world():
	return "Flask is running!"
 
if __name__ == '__main__':
	app.run()

You should see a result something like this after running it, which means that each library we installed is working correctly.

(envTest) $ python envTest.py 
PyMongo test: 
[u'local']
flask_openid test: 
https://www.google.com/accounts/o8/id
 * Running on http://127.0.0.1:5000/

Now we’re all setup and ready to code, which is what I think I’ll save for the next post.