Thursday, November 21, 2013

Visual Studio LIVE! Orlando 2013 Day 3

We are right in the middle of the mix of VSLive! 2013, and there is another good day ahead of us all! One thing I wanted to clarify to those of you attending the conference (and reading this) is the agenda of the 'Modern Apps Live' tracks and my own misunderstanding of what the content entailed. My thought prior to the conference (actually all the way back to the Las Vegas conference earlier this year when it was released), was that the session tracks covered 'Win 8 native applications' formerly and widely know as 'Metro Applications.' My thought was, "yeah I'll attend some of those session but Win8 apps aren't in our near future" so probably secondary to my main agenda.

Oops, I made a mistake in my understanding of the content delivered. I figured out immediately on Day 1 when Rock Lhotka presented and showed a slide presenting essentially the logical layers of their 'voting' application that I was incorrect in my assessment. 'Modern Apps Live!' to me should have actually been renamed to 'Modern Application Design Live!' or something to that tune. Literally the word 'modern' threw me off, but should have been taken at face value. Since then I've attended multiple sessions, and the elite at Magenic (image above courtesy of the website) have put together a solid (yes pun intended OO guys) set of training. The point here is, flip a couple of pages in the Live360 agenda booklet and check out some of the sessions. I highly recommend them regardless of position at your company, but especially if you are a senior engineer / architect helping to drive design and technology in your corporation. 

OK, without further of an introduction, let's get to Billy Hollis' keynote today!

There's No Future in the Past: A Critique of Conventional Thinking
Billy Hollis, Primary Guru, Next Version Systems

This quote helps summarize the overall message of Billy's keynote:

"Don't put your preferences ahead of the needs of the user."

Once again Billy showed the slide of the programmer 'addicted' to code (a person with a rolled up dollar bill snorting a screen of C# on a tablet).. I love the non PC nature of Billy's talks at times. He stated someone told him once: "I want 2 testers per developer." Billy's response was, "I'd like 2 blonde bombshells in my bed at night but we can't all have what we want!" We can be so wrapped up in the 'code' and 'process' of creating the application, but we need to expand our horizons and really understand what our users need and think in a different way. Things like MVVM, OOP, SOLID, Agile, etc. are fine but they are not they are not the entire picture.

One interesting point Billy made was this his philosophy is he will not take advice on building software from people that don't build software. I couldn't agree more, but it happens all of the time in the busniess world. If one hasn't developed in 5 years they are too far removed from the current technology and practices that it's difficult for them to offer any valid advice. He would listen to their suggestions, but would test those suggestions to see if they have any merit.

The main message delivered here are placing their desires, knowledge, and understanding of the technology ahead of what the users actually need. 

Another great quote in response to someone writing an article about how TDD changed their life: "If TDD changed your life, your life must of really sucked." It was followed by another testimonial of interviewing a candidate going on and on about TDD. The interviewee leaned over and stated "I'm really passionate about TDD." Billy said, "You know you should really be passionate about your spouse or girlfriend not TDD; the world is like that."

I really enjoyed the conversation around knocking those that say, "Only Agile works", or "Waterfall is stupid." For eons software that was created and maybe still running (i.e. banking software) were built using waterfall and similar project methodologies. The point is you can use what works well, we don't have to behave like blind zombies following some methodology or practice, 'just because'. In fact he states many will use a methodology long after it's effectiveness has expired because that is what they are used to doing.

Be skeptical of gurus, and 'one size fits all answers', and dogmatic statements in our industry. We need to be and think diverse from a team and technology perspective. This is what will help us grow and be effective in a rapidly changing and ever evolving industry.

Data Access and SQL Server in Modern Apps
Steve Hughes, Practice Lead, Magenic

This session looks to be great as their are multiple approaches to creating databases and subsequently the code model that interacts with those databases so exploring and discussing the options are always interesting. Steve is a 'database guy' so his perspective to me is a fresh perspective vs. my own a developer. He also happens to be one of those humble elite in our industry so I'll keep his email handy for questions ;)

He began by exploring the multiple options that we have to ask ourselves when beginning a project that requires a database. I know I have run through these myself so the slide below was spot on for current development (image courtesy of Visual Studio LIVE! and Steve Hughes):

I love the comment that "DBAs thank developers for writing poor queries because it's ob security for them!" 

There are 3 main SQL Server options currently: SQL Server on Premise, SQL Server in an Azure VM, and Azure SQL Database. Obviously when choosing the characteristics like performance vs accessibility (local vs cloud).

He stated that DBAs do not like Entity Framework. This sentiment really spawned from EF version 1-4 which created poor SQL. The developers loved it and stated, "Well the SQL is generated by Microsoft so it must be good right??" Well initially this was not true, but as EF has matured the DBAs began to see the increased efficiency of the TSQL produced and the close relationship between SQL Server and EF (both created by Microsoft) the acceptance began to increase. The current day reality of EF is a nice harmony of performance, testability, and ease of deployment which is helping to make everyone happy about it being Microsoft's flagship ORM.

So let's explore the (3) main ways to use EF: Code First, Model First, and Database First.  I've been a part of Database 1st, and the Voting Application used in the Modern Apps track also used a Database 1st approach. The reason for their selection was simply because Steve was on the project and this makes total sense. Any DBA or the like will always like to create the database 1st and hand it off to the development team as opposed to having code generate the database.

Side note quote from Steve: "Any DB architect that says you must use 5th normal form... fire them :P Maybe in a rare instance, but everyone will dislike them because it will be so hard to find the data; it's all a bunch if keys."

One valid reason to use a stored procedure as opposed to what EF generates is when the SQL generated is not valid. The example provided was needed to issue a series of DELETE statements in a particular order that EF was not doing correctly. Otherwise it's more of an exception than the rule to use stored procedures when using EF.

The BEST remarks were surrounding 'busniess logic in the stored procedures'. I love this topic and have spoke on it before myself (Should I Place My Business Logic In Code Or In Stored Procedures?). Here was Steve's comment, "If you want to add busniess logic to a stored procedure.... don't" Even if it is easy, don't do it. For those that say, "I can make a quick change in production to a stored procedure out in the field..." Don't do this; tell the client to wait a minute. Do a hot fix, decrease inefficiencies in the project methodology, make a change in the release, etc. but don't make field changes to complex logic that shouldn't be in a stored procedure. Remember, SQL is designed to persist and retrieve data and that's what it does well. Leave the busniess logic to a development language in a logical layer that makes sense and keep it out of the database. 

There was a gentleman in the audience who stated, as long as you follow good process and source control what's the difference (advocating for busniess logic in the stored procedures). Steve reiterated, SQL does data CRUD operations really well, but it's a misuse of the tool to try and leverage it for storing and executing busniess logic; that's not what it's made to do. I also responded with, "how do you unit test that logic?" Apparently there are ways to unit test stored procedures that's not just making a integration style test to the database. However it was somewhat of a moot point because as stated, busniess logic shouldn't be in the database. I too have passion on this topic and really dislike placing business rules in stored procedures, so I couldn't agree more with Steve's presentation on the topic.

Something I will have to review offline is a product called DACPAC to submit database schema changes to the DBA before deployment On very small projects Steve was still using a manual deployment process, but for more formal projects a process using scripts or DACPACs should be exercised.

It was interesting to see the Azure DB in the cloud. I have no personal experience with the tool, but it seems intuitive and clean. There are performance tools and monitoring to help show metrics for database debugging. One of the reasons for using the tools is to use an index strategy for EF access. When Steve created the Azure database he had to weigh the options of Table Storage, Blog Storage, or SQL Database. The think to remember is Azure databases can skyrocket in cost if they get too big, so these factors need to be kept in mind. 

A couple of final points to keep in mind to wrap up Azure databases in the cloud - leverage caching (it's a must) and keep in mind availability. Microsoft guarantees (3) 9's (99.9% uptime), so if you need more than that, Azure is not for you.

Learning UX Design Principals Through Windows 8 Apps
Billy Hollis, Primary Guru, Next Version Systems

In this session we are going to get into the human brain and how m\we need to get developers to learn how designs application. Even though I've already seen one of Billy's other talks and was at the keynote, these sessions are extremely valuable because instead of being right in your face it's more, 'think outside the box' material. In our world thinking outside the box is probably not done as often as it should be.

He showed the AT&T site and asked what we all thought of it? As a previous AT&T customer I can vouch that the site was awful and very difficult to navigate. This is the path Billy takes us to not continue to slap and slam stuff together. We need to make apps intuitive, simple, and easy. "Whit space is OK."

We proceeded to an awareness test where 2 teams of basketball players are dressed separately in black and white. The quiz: how many passes does the white team make? The answer is 13 and a lot of people got it, but then the question was asked, "did anyone see something odd?" It turns out in all this complex passing and moving around a dressed up bear moon-walked through the middle. The point, we don't see what we are not looking for; it's called 'intentional blindness'/

In Windows 8 and in modern application design we need to de-clutter and simplify our designs. We may still need to provide a massive amount of information, but we need to change the way we think about presentation and design.

There were (2) other visual examples / quizzes given. On a quick flash of some screens, find the number of screens that contain scissors? Everyone got the answer right. The Billy asked "how many had a paint roller? Uhhhhhh.... we were not looking for that. Exactly. Then the elevator quiz with a picture of the buttons. What sticks out as odd? Everyone says, "there is no floor 13." Yes correct, but not the answer. The ground floor indicated by a 'G' and a star was worn out from being pressed. However it was the label that was worn out and not the button. The visual queue made people gravitate to the label and not the button. It's another example of poor design and how we visualize and interpret what we see.

Fitt's Law: the amount of time required to locate and use an option is smaller if the option is bigger. There is no rule that all button need to be exactly the same size.

An interesting history lesson about Windows 8. Windows 8 was a direct response to the iPad. Microsoft had seen this story with IBM in the 80's and made them irrelevant in 10 years. In an effort to not have Apple do the same thing to them, they came out with Windows 8 which had a focus on the consumer space. Microsoft pretty much had ignored developers and the enterprise for the last few years and are now realizing this mistake. I have spoke about this previously (INSERT LINK HERE) about Windows 8 (formerly 'Metro' apps) were not ready for the enterprise. It appears my thoughts at the time were right.

Billy even showed some slides breaking down the retina of the eye and how we visually break down what we see and in what order. The reason for getting into this low level detail and analyzing of the brain is to better understand how we should design applications.

One example Billy gave that hit close to home was a radiology application that he helped create in reference to the training of the application. Of course Billy's applications if you have not seen before are drastically different than the status quo (data grid disaster we normally create) apps most of us create and use. The trainer of the company selling this software created a typical 3-day training course for the new software as they always had done previously. Billy mentioned how expensive it is to to have Doctors on hand for training, and the ability to train quickly saves time and money. 

Well day 1 of training with the software, the trainer realized after 4 minutes no one in the class was paying attention to her. The reason? Everyone was already using the app on their own. It was designed so well and it was so naturally intuitive to use that everyone took off on their own. Eventually the training course was able to be reduced to 1.5 days. Point, great design.

I would love to see the radiology app he spoke of in the example. The radiology applications doing these sorts of tasks that I have been associated with are jam packed with controls and functionality out of necessity. To make a Windows 8 application with the identical requirements, but blending in touch,, simplicity, and minimalism seems like trying to fit a square peg in a round hole situation considering the requirements, The point is it could answer a lot of questions in a simple 1:1 comparison for bridging the gap from old design to new design methodologies.

Another interesting point made: "Good design is only good design in reference to it's context." A trash can in Alaska takes 2 hands to operate. Here in Florida that seems like a bad design. In Alaska you have to keep the bears out of the trashcan so it's a good design. Keep this in mind when designing applications to know and understand your audience.

To wrap it up for this session, try to avoid what Billy speaks to with a busy and over complicated design.. An extreme example of this is the space shuttle pictured below: 

The designers understand for this scenario the user's need a 'high cognitive load,' or better yet 'rocket scientists'. Since most of us do not have rocket scientists with a massive amount of training using our software, try to avoid the following style of application design which Billy displayed; look somewhat familiar?

Building Mobile Cross-Platform Apps with HTML5 & PhoneGap
Nick Landry MVP, App Artisan, Mobility42

There are several options when doing mobile web development today when attempting to reach users across platforms. Like Xamarin is for native applications, 'PhoneGap' allows us to take our source and compile it to a native shell that runs in the browser. However the application still appears to run in full screen and you don;t see the browser. You can deploy to multiple platforms even the ones fading away.

HTML5 and CSS3 combined with JS will be what we as developers leverage to create our cross platform web applications. There are JS frameworks like jQuery mobile, Kendo UI and, Sencha Touch to name a few. jQuery mobile is the most popular, well documented, and built atop the jQuery framework. Many major web apps have been built with jQuery mobile like Disney, Dodge, United, Chase, and many more.

PhoneGap is an open source project under the Apache License. It is a open source distribution of Cordova. It can be downloaded and read about via the following location: It is recommended to take a look at the site to see the full feature set and documentation.

By the way another informal poll which I love was taken in the class and here are th results:

Number of users on a Widows Platform: 100%
Number of users on a Apple OSX platform: 0% (except Nick himself)

PhoneGap creates a web app with a wrapper that allows HTML5 and JS applications to be spawned up and run quickly on multiple platforms. As Nick described, if the UI is and delivery is your main money stream then the simple UI of PhoneGap vs. a product such as Xamarin may not win out in comparison. However if you need to quickly  produce a cross-platform application that reuses and leverages your current web development skills, then PhoneGap may be the right fit.

For testing applications locally when doing Android you will need the emulator installed or an actual Android device connected. When running the PhoneGap application, it will try to run it locally first and if it can't find a device it will look for an emulator. For iOS you will need a Mac. Likewise you will not be able to build a Windows Phone App on iOS. 

When we run the PhoneGap app, it will use the 'remote environment' to build the application. With the free account you can have 1 private app and unlimited public apps. A public app is one where the source code is on something like GitHub and we point to that to have it built. There are some nuances with the PhoneGap Build server and the keys required per platform. Inspect their site for details on the individual keys required. Using 'local build' is typically more useful than Cordova 'remote' builds. 

Once the application is built using PhoneGap, the entry point of the application can be reached via the indiex.html file.

This looks to be a promising tool with a strong open source community following. This is one of those sessions displaying a tool to look at in the future and get hands on in addition to reading about its particulars and understanding its end-to-end usage. If you do happen to buy or read any books on PhoneGap, he mentioned to make sure it was on v3.0 or later as there ahve been drastic changes in the framework since the early versions.

Wrap Up Day 3

A super quick wrap up as it has been an extremely long day today, but very productive! Tomorrow is jam packed full of session so I need to get rested to keep on truckin' (<- yes I said it).

A quick shout out to the Live360 staff and organizers for a great conference so far this year! You always do a great job and thus far this year is on par with the best!

Award for Best Live360 Attendee Luau Dancers :)


  1. Your information about asp is really interesting and innovative. Also I want you to share latest updates about asp. Can you update it in your website? Thanks for sharing

  2. Thank You for Sharing Valuable Information. I like this blog and this is very informative.

    Dot Net Training in Chennai

  3. Your posts is really helpful for me.Thanks for your wonderful post.It is really very helpful for us and I have gathered some important information from this blog.If anyone wants to get Dot Net Training in Chennai reach FITA IT training and placement academy.

  4. Useful post with valid points on visual studio

  5. Informative blog. The information you shared is very effective for learners I have got some important suggestions from it.

  6. “Great share!” Each and every tips of your post are more informative and it was awesome to read.
    Thank you for such a great post…..

  7. I have to voice my passion for your kindness giving support to those people that should have guidance on this important matter.