# Wednesday, 27 June 2012

If you are new to performance and load testing, you need two things: knowledge of testing practices and knowledge of testing tools. .NET Performance Testing and Optimization: The Complete Guide by Paul Glavich and Chris Farrell provides both of these.

.NET Performance Testing and Optimization provides a solid overview of good testing practices, as well as practical information on how to use various commercial testing tools that are currently available.

The first three chapters cover principles of testing, such as which metrics you can measure, what information each metric provides, and when to care about each metric.

Glavich and Farrell describe the different types of tests and the goals of each. Performance Testing, for example, measures the speed at which an application responds to user input and events. Load Testing measures the number of concurrent users an application can reasonably support. Although they are often confused, the goals are different and the important metrics for each are different.

The rest of the book describes in detail various types of tests you can perform. Glavich and Farrell even provide step-by-step instructions to perform these tests with popular commercial products.

For those new to performance testing, for those needing a refresher on performance testing, or for those who want to know how to use commercial products to perform performance testing, .NET Performance Testing and Optimization  is a good source of information.

Wednesday, 27 June 2012 15:47:00 (GMT Daylight Time, UTC+01:00)
# Monday, 25 June 2012
Monday, 25 June 2012 15:47:00 (GMT Daylight Time, UTC+01:00)
# Tuesday, 19 June 2012

If you are in or near Michigan or northwest Ohio this week, you have a rare opportunity to learn from the creator of one of the most popular Aspect-Oriented-Programming (AOP) frameworks on the market. PostSharp inventor Gael Fraiteur will conduct a user group tour this week, primarily talking about AOP, using PostSharp for his examples. During the day, Gael will be stopping at area companies to educate them. AOP provides a way of adding functionality across a variety of classes and methods without cluttering said methods with a lot of extra code.

Originally from Belgium, Gael now resides in the Czech Republic, so it’s not often we get to hear him in-person.

Gael’s evening schedule is:

Date Group Location Link
Tue June 19 Northwest Ohio .NET User Group Toledo, OH http://nwnug.com/ 
Wed Jun 20 Great Lakes Area .NET User Group Southfield, MI http://migang.org
Thu Jun 21 Greater Lansing .NET User Group Okemos, MI http://glugnet.org/

I hope you can make it one of these nights.

Tuesday, 19 June 2012 15:29:00 (GMT Daylight Time, UTC+01:00)
# Monday, 18 June 2012
Monday, 18 June 2012 15:04:00 (GMT Daylight Time, UTC+01:00)
# Saturday, 16 June 2012

I attended my first Tech Ed conference in Orlando this week. I was fortunate to have the opportunity to work for INETA at the conference. In exchange, INETA covered my admission and expenses which would have been prohibitively expensive if I had to pay them myself.

My INETA work involved the following:

  • Working at the Community Leadership Summit the day before Tech Ed
  • Staffing a booth on the Expo floor
  • Volunteering at Birds-of-A-Feather sessions
  • Meetings throughout the week to talk about board business
  • Preparing a sponsor prospectus for the INETA Champs program

This was a small price to pay and I enjoyed most of these tasks. I got to meet some of the other board members in person for the first time and I had a chance to spread the word about user groups to a broad audience.

I gave a presentation at the Community Leadership Summit on attracting volunteers to a user group.

Two of my Birds-of-a-Feather topics were accepted at this conference, so I served as a moderator for these. The topics were "Getting Involved in my Local Developer Community: How is it a Win-Win? " and "Is Windows Azure a Contender for my Next Application?" Attendance wasn't particularly high at these sessions (possibly due to the 530PM and 830AM time slots) but the attendees participated in an active exchange. One exciting aspect of these sessions is that they were streamed live online and INETA volunteers monitored a Twitter hashtag to accept comments and questions from beyond Tech Ed.

Attending Tech Ed gave me the opportunity to spend some time with some members of the Visual Studio team and ask them some questions about the testing tools in VS Ultimate. I've been struggling with some aspects of this for my current project and I now have a better understanding of the capabilities and limitations of these tools.

I was invited to a Q&A with Microsoft VP Jason Zander in which we heard about some directions Microsoft is taking in the future. Unfortunately, I signed a non-disclosure agreement, so I can say nothing about this event except that I'm very excited about this future.

I competed in the Speaker Idol contest, hosted by Carl Franklin and Richard Campbell. Because I won, I now have an invitation to speak at next year's competition.

Of course, I also recorded 5 interviews that I plan to publish on Technology and Friends over the next few weeks.

The busy schedule above left some time to attend sessions. My favourite sessions were Web Sites on Windows Azure
and Building HTTP Services with ASP.NET Web API. I saw some exciting new technologies in these sessions that I can use in my work soon.

Of course, there were many hallway conversations and a chance to meet technologists from all over the world, which is always an opportunity to learn.

My notes on the sessions are below:

Web Sites on Windows Azure

Presenter: Bill Staples

10 free web sites

Supports Classic ASP, .NET 2.0,

Usage info on dashboard

App Gallery: Create blog in WordPress on Azure

WebMatrix 2 (in beta)

Install & download WordPress site

Publish automatically syncs with Azure (no configuration needed)

Publish via

  • FTP
  • Web Deploy
  • Git
  • TFS

Essential Tips for the Windows Azure Startup

Presenter: Michele Leroux Bustamante

  • Avoid web.config for
    • Settings that vary between staging, production
    • Use Web.config transformations
  • Caching
    • Co-located caching (% on each VM)
    • Shared caching (on one VM)
    • Same API
  • Queuing
    • Service bus queues
      • unlimited lifetime
      • 5GB max storage
      • Duplicate detection
      • Guarantee order
    • Storage queues
      • 7 day expiration
      • 100TB max storage
  • Diagnostics
    • Trace.TraceWarning
    • Listeners in webrole<trace><listeners>
  • Monitor from Outside
    • Monitoring Service
  • noSQL Kool-Aid

If the learning curve for noSQL is great, only use it for "obvious" data (e.g., profile, location data).

  • Enable Social Logins. Simplify signup
  • Don't ask users for too much info
  • Estimate costs
    • Calculate projected costs and revenue based on expected usage in advance
    • What is break-even point?

Beyond Master-Detail: Interaction and Navigation Patterns for Modern User Experience

Presenter: Billy Hollis

List

Hicks Law: Too many choices slow down user

Add 'FIND' capability

Launchpad

Make important buttons bigger

Combinations

Different patterns at different parts of the app

Wizard

Lots of new users

Complex but rarely use

Spreadsheet

Flexible Sort

Allow drag/drop columns

Context switchers

Toolbars & Ribbons

Usually action-oriented

Ribbon designed for en-users (not devs)

Most users don't like toolbars

Galery

Visual array of items

Multi-select

Dashboard

Visualization & navigation

Queue

Next item on top. No naviagation.

Don't use confirmation'

Underused.

Can increase productivity dramatically

Configurator

See changes as you select them

Timeline

Vertical or horizontal layout

Metaphor

Interface resembles something familiar in the real world

May be cute the first time, but gets old over time

Map

Items laid out in real world

Use lat-long

May use geocoding to get lat-long from address.

Viewport

Semantic zoom: Change view as you zoom in & out

For multiple levels of detail

Book recommendation: Mobile Design Pattern Gallery by Theresa Neil

Building HTTP Services with ASP.NET Web API

Presenter: Daniel Roth

VS 2012

MVC app

Scaffolding to create CRUD methods around entity

GetById

If not found, throw httpException (not found/404)

Post

Create new entity

Return HttpResponse

Url pointing to new entity page

ASP.NET Roadmap: One ASP.NET – Web Forms, MVC, Web API, and more

Presenter: Scott Hunter

In release mode, all js files are combined and minified

Put validation on model. Enforced in client script.

Migrations

  1. Inherit from DbMigration
  2. Up() method
  1. Update columns in db

HTML 5 emitted

e.g., <input type="datetime" … />

Page.cshtml

Page.mobile.cshtml <-- Displayed when Page is requested on mobile devices

Signal R

  1. Inherit from Hub
  2. Send() method
    1. Clients.addMessage

Real-time communication with server

Design for Non-Designers

Presenter: Jennifer Smith

Good design makes a product useful, usable

Dieter Rams:

Good design

  1. is innovative
  2. Makes a product useful
  3. Is aesthetic
  4. Makes a product understnadable
  5. Is unobtrusive

Putting things in boxes is not good design

Keep UI focused

Before starting

My ___ app will be the best at _________

Talk through app using low-fidelity prototype

Recommended design tools

Illustrator

SketchFlow (Expression Blend)

Use rule of thirds (Divide into thirds, horizontally and vertically)

Golden Region

Viewers look at apps, pages, pictures, etc via Fibonacci (spiral in)

"Dead center is dead wrong"

White space is OK.

Fonts

Use sans serif fonts

Counter size = space inside 'e' or 'p'. Larger is better

Saturday, 16 June 2012 17:42:00 (GMT Daylight Time, UTC+01:00)
# Friday, 15 June 2012
 #
 

This week, at Tech Ed North America, I participated in something called "Speaker Idol".

Speaker Idol is a contest organized by Richard Campbell and Carl Franklin of .NET Rocks Fame. The contestants are speakers who have never spoken at Tech Ed before and the grand prize is an invitation to speak at Tech Ed next year. Each speaker delivers a 5-minute presentation and a panel of judges rates that presentation afterward.

I entered the contest and delivered a short talk on Data Visualization. The judges liked my presentation but made a number of suggestions about providing more real-world examples.

I won the first heat, which placed me in the finals. The competition in the finals was intimidating to say the least. There were three other contestants: Jeff Fritz (who was the runner-up in the first heat), Seth Juarez, and Jim Holmes. I only met Jeff this week, but I've seen Jim and Seth deliver many presentations and they are both excellent, so I knew I needed my A-game.

Fortunately, the judges liked the fact that I took their feedback and my finals presentation included some practical examples at the end of my presentation. One of the judges paid me a very high compliment, saying that he planned to change the way he did some things based on what he learned in my talk.

When it was over, I came in first place overall.

Speaking at a major contest like TechEd has been a personal goal for a long time, which made it gratifying. Having it happen among competition like that makes me suspect divine intervention was involved.

I'm very excited about this and I wanted to share it right away.

In a few days, I'll have a full brain dump on my experience  at Tech Ed North America.

A crown made by one of the judges

Friday, 15 June 2012 15:09:00 (GMT Daylight Time, UTC+01:00)
# Thursday, 14 June 2012

Here is a video of Michael Collier's "The Hybrid Windows Azure Application" presentation at the 2012 Detroit Day of Azure.

Azure | Video
Thursday, 14 June 2012 15:43:00 (GMT Daylight Time, UTC+01:00)
# Wednesday, 13 June 2012

Here is a video of Joe Kunk "Windows Azure Data Marketplace" presentation at the 2012 Detroit Day of Azure.

Azure | Video
Wednesday, 13 June 2012 15:29:00 (GMT Daylight Time, UTC+01:00)
# Tuesday, 12 June 2012

Here is a video of John Ferringer's "Office 365" presentation at the 2012 Detroit Day of Azure.

Azure | Video
Tuesday, 12 June 2012 15:28:00 (GMT Daylight Time, UTC+01:00)
# Monday, 11 June 2012
Monday, 11 June 2012 15:26:00 (GMT Daylight Time, UTC+01:00)