The Spotlight posts are back again! For this post, I decided to interview Andy Houghton, an IT professional and a member of Canada’s Technology Triangle .NET User Group, who regularly attends the sessions and full day workshops.
Andy understands that an important aspect in the IT field is continuous learning. He is a super star on the Microsoft Virtual Academy track, achieving Platinum status with over 14K points. Andy is currently ranked among the Top 10 overall MVA students in Canada.
If you haven’t heard of Microsoft Virtual Academy, then check out my short post, Microsoft Virtual Academy – Free Training At Your Fingertips
Andy Houghton has been in the IT community since 1988. He has held many IT roles from Help Desk to Programmer to IT Manager. Andy enjoys working, and helping others grow, in technology. He is currently working on a contract at the Co-operators Insurance Company in Guelph, Ontario. Outside of work, Andy and his wife provide a safe place for children as foster parents. He also has a 19 year old daughter who recently completed her first year of university.
I had a chance to ask Andy some questions about how he got started with MVA, and how it has impacted his career.
1) When did you first get started with Microsoft Virtual Academy (MVA)?
I started using MVA on June 24th, 2011, which was the second week it was available.
2) How did you hear about it?
I received an email from Microsoft.
3) How many courses have you completed through MVA to date?
To date, I have completed about 120 courses.
4) What is your motivation for pursuing the MVA courses?
Keeping current on new technology.
5) How has your career changed since taking the MVA courses?
I have been able to improve my skills and get more contracts. I also feel more confident that what I am telling customers is correct because I heard it on MVA. Sometimes in the past, you created your own solution and it was not the best practice. When I learn something on MVA I know it is the best practice, because it is coming from Microsoft.
6) Of all the courses you’ve taken, what is your favourite MVA course? And who is your favourite MVA instructor?
The OneNote training was my favourite because it is what I use to keep track of my IT resources.
I do not have a favourite instructor I find all of them really knowledgeable and easy to listen to.
7) Are there any additional resources you use to continue to learn and grow in your field of expertise?
Besides MVA, I also use MSDN and TechNet websites. There is an abundance of user created content online which is really useful. Office 365 also has some separate resources that you can search for online.
I use OneNote notebooks to keep track of the best resources. I also make note of those resources that are not so good, so I know to avoid them in the future.
8) What advice can you give to new grads that are entering the workforce?
Never stop learning. I received one piece of advice from an MVA course that I will always remember. I am not sure what course it was, I believe it was an Office 365 course where the instructor said. If you want to continue to advance your career and make more money, “Be more valuable to your employer this year then you were last year”.
The key to success in this field is the ability to change, and adapt, as new technologies emerge. Microsoft Virtual Academy is one of the many resources available online that help you to hone your skills, and keep current, at no cost to you. Thanks Andy for participating in this month’s Spotlight post!
Last but not least…
If you enjoy keeping up with the technology trends, I highly recommend that you register for Microsoft Virtual Academy and create your own personal learning plan. While you’re at it be sure to check out the upcoming Windows 10 Developer Readiness Canadian Webcast.
Online resources are awesome, but in-person events are just as important, both for the learning and the networking opportunities. If you’re in the GTA or surrounding area, register for the Toronto stop of the Build Tour as well as for the Build Highlights sessions that both I and fellow Microsoft MVP, Tom Walker, will be running for our local area .NET User Groups: London Developers .NET Meetup Group and Canada’s Technology Triangle .NET User Group (Kitchener).
I look forward to seeing you there!
Join the Windows 10 Developer Readiness – Powered by MVPs global webcast series to learn how to build an app or bring an existing App to the *NEW* Universal Windows Platform!
This live webcast is part of a global series provided by the MVP Award Program for developers. Our goal is to bring you the latest opportunities in developing for the Windows Platform, and to bring you closer to the Microsoft MVPs from your region.
By joining this webcast you will be able to:
- Learn about the *NEW* Universal Windows Platform for apps and web developers.
- Participate in open Q&A with Microsoft MVPs, some of the top experts in the field.
Canadian Webcast Details
Registration Link: https://mvp.eventbuilder.com/event?eventid=r9f3h0®Now=1
Speaker: Colin Melia
Moderator: Tom Walker
Date: Thursday, June 11th
Time: 12pm EST
For more information, visit the event page: http://mvp.microsoft.com/win10mvp.aspx
It’s that time of year again! ObjectSharp’s At the Movies event is right around the corner, and we can’t wait to share all of the good things coming up in our industry this year! I really enjoy being a part of this event, and not just for the posters (but on an important side note, thanks to Denis Makarenko for his hard work in making those posters look amazing!). What’s important is the information we are bringing to you, so that you can get up to speed with the changes coming your way, and to show you how Microsoft is making it easier than ever to manage projects with TFS, integrate advanced services into your enterprise or mobile applications through Azure, and develop high quality applications for the enterprise or consumer market.
In a few short days, my fellow ObjectSharp colleagues and I will take to the stage at the TIFF Bell Lightbox in downtown Toronto to share all of the exciting advancements that Microsoft announced recently at its annual Build conference.
Shane Castle will talk about the sophisticated service offerings available in Azure which can easily be incorporated into your applications regardless of the platform they are running under.
Dave Lloyd and Max Yermakhanov will then step up to discuss the new features coming in TFS 2015 enabling you to easily set up your team and projects for success.
Last but not least, David Totzke and I will take to the stage to share with you what we learned firsthand while attending the Build conference.
Be sure to register for this event at http://objectsharp.com/atm! It’s free, it’s fun, and it’s full of information that is relevant to you! We are all looking forward to seeing you there!
Being able to attend //build/ last week was a dream come true. In the 18 years that I have worked in the industry, this was the first time I was able to attend a major Microsoft conference. In the past, when working as a full time employee, I had never received approval from employers for this type of professional development. Being a consultant changed the playing field. I didn’t need to ask anyone for permission, or have someone else approve the cost. I didn’t have to beg, bargain and plea for the time off. I was the requester and approver all rolled into one. Suffice it to say, I wasn’t going to let the opportunity pass me by. I had a feeling this was THE year to be in San Francisco, instead of watching it from the comfort of my home. Within 45 minutes, registration to //build/ was at max capacity with myself being among the many that were lucky enough to have processed the registration in time.
“Why spend all that money to go in person when you can watch it online?”
This was a question I often heard when discussing the upcoming conference. Yes, the cost of the registration and travel expenses combined are not for the faint of heart, including the days of lost wages for a consultant. But for me, this was well worth the expense. This was all before I even knew what I was getting myself into. And now, after returning from a glorious week in sunny San Francisco, truth be told, how do I feel? Thankful, excited, and rejuvenated.
Thankful that I had the opportunity to go, and was able to cover my own expenses to do so. Life is short, and often throws you a curveball when you least expect it. Seeing as how this year the stars aligned perfectly in my favour, I grabbed the bull by the horns and registered without hesitation. Who knows if I’ll have the chance next year or the year after that? I wasn’t going to let this one pass me by.
Excited over the opportunities that are on the forefront for .NET Developers with Windows 10, Azure, and Office 365. Did your heart skip a beat when Joe Belfiore showed off Continuum for Windows Phone? Mine did. Did you drool at the HoloLens demo and wish you were the one walking around the stage, pinning virtual items to the wall, talking to a robot, and manipulating 3D holograms in real time? I sure did. Did you envision the potential opportunities for all Microsoft developers when seeing what Azure, Office 365, and the Windows 10 platform has to offer? Ditto for me.
Rejuvenated after having spent a week with other professionals that share the same passion and excitement for not only what we do now, but for the possibilities that are open to us in the very near future.
If I had decided to stay home, I wouldn’t have:
1) Met Charles Petzold and scored a signed hard copy of his new book
2) Tried on the HoloLens!!!!
3) Participated in a focus group to provide valuable feedback and make my voice heard
4) Met up with people I’ve only communicated with over Twitter prior to this conference – Jason Young (MS Dev Show), Omer Raviv (OzCode), Stephen Keefer (Accuweather), Mark MacDonnell (Sela Canada), Sid Gurjar (Accuweather)
5) Reconnected with some of my favourite MVPs who I wouldn’t have had the opportunity to talk to face-to-face otherwise – Laurent Bugnion, René Schulte, Ginny Caughey, Carl Schweitzer, Jan Hannemann, Sébastien Lachance, Brian Lagunas, Rob Irving, Oren Novotny, Mark Schramm, Paras Wadehra and the list goes on and on
6) Attended the many awesome parties that were put on by Xamarin, Infragistics, and Microsoft
7) Hung out with my local colleagues and friends, who I rarely get a chance to see in person because we are all crazy busy otherwise – Tom Walker (London .NET Dev Group), Richard Underwood (fellow ObjectSharpie), David Totzke (fellow ObjectSharpie and co-author)
8) Met and had lunch with an editor from O’Reilly (thanks Brian!)
9) Shared the experience with friends over which session to see next, being collectively enamored with the “ooh” and “ahh” moments over the new APIs we learned about in the deep dive sessions, and been part of our post-session discussions as we compared notes and speculated on what opportunities this could bring.
The //build/ conference isn’t just about the sessions you see on Channel 9. There is so much more to it than that. The ability to participate in focus groups, to voice your opinions on the marketing, direction or usability of a product – whether it be Visual Studio, Windows 10, and yes even HoloLens, is by far one of the most compelling reasons to attend. The networking opportunities to meet new people, who share the same interest and excitement as you do is always worthwhile. It’s refreshing to connect with others face-to-face rather than through the online medium we’ve become accustomed to. There’s no replacement for that, believe you me.
If you live in the GTA…
…then pencil off May 13th in your calendar, and make a point to join me and my fellow ObjectSharp colleagues at this year’s At The Movies event at the Bell TIFF Lightbox in downtown Toronto, where we will recap the highlights from //build/. It’s free, fun, and highly informative. Don’t miss out on yet another awesome event! Visit objectsharp.com/atm to register today!
Looking back on 2014, I realize so much has changed in such a short time, and appreciate all of the good things that have come my way. Here are my favourite moments of 2014.
Awarded Microsoft MVP
I was beyond excited when I was awarded my very first (and hopefully not the last!) Microsoft MVP in April 2014!
I have always admired and respected other Microsoft MVPs whose paths had crossed mine over the years, and to be considered part of that group is a huge honour.
Given Opportunities to Speak
Prairie Dev Con was the first conference that accepted my session submissions, and so I was off to Winnipeg in early April to talk to people about Windows Phone development. What a thrill it was to be part of a roster of all-star speakers! I felt lucky to not only have been selected to be a part of the conference, but to meet those people that I have learned from as well. It was special to be at a conference with people who were there to learn and to have fun. Kudos to D’Arcy Lussier for organizing this fantastic conference each year.
I’m excited to announce that I’ve have been selected to return to Prairie Dev Con Winnipeg 2015!
My conference submission to That Conference 2014 was also accepted. The thrill and excitement to be a part of yet another conference is something I can’t describe.
The best part of it being that it’s held at a family friendly venue - the Kalahari Resort in Wisconsin Dells. Although my children are both grown and had no interest in attending this with me, I still found it to be a wonderful experience to see others there with their families, and to see children participating in the conference as well!
The opening keynote by Elizabeth Naramore was inspiring and worth watching.
Big props to Greg Levenhagen and his crew for putting on a great event year in and year out!
I was also invited to participate in ObjectSharp’s At the Movies event which was held at a movie theatre in downtown Toronto in May.
It was an honour to be able to represent ObjectSharp and speak at this event, in front of an audience of over 300 people. The event was also recorded by Microsoft and is now currently up on the Channel 9 site, which makes it my second video appearance on Channel 9!
Last but not least, I had the opportunity to present at both CTTDNUG’s Cloud Camp in early 2014, and at the London .NET Developers Group Cloud Camp in late 2014!
Attended MVP Open Day and MVP Summit!
Microsoft Canada hosted an Open Day in May 2014 for current Canadian MVPs. This was my first opportunity to attend an event where I would meet my MVP Lead, Simran Chaudhry, along with Joel Langford and the rest of the Microsoft team that focuses on the developer community. It was also a wonderful feeling to meet other MVPs from across the country.
In November 2014, I was on a plane heading to Seattle to attend the MVP Global Summit where I met other MVPs from around the world. It was an experience like no other! Aside from attending the various sessions, the networking opportunities were priceless and the social events were fun. I met so many amazing people, including my MVP Summit roommate Sara Silva, as well as the father of MVVM Light, Laurent Bugnion.
Continued writing Posts for the Canadian Developer Connection blog
In 2013, I had the opportunity to write multiple posts for Microsoft’s Canadian Developer Connection blog, and the momentum kept going in 2014:
1) Save Time, Money, and Your Sanity: Coded UI Testing for the Windows Phone - Part 1
2) Save Time, Money, and Your Sanity: Coded UI Testing for the Windows Phone - Part 2
3) Save Time, Money, and Your Sanity: Coded UI Testing for the Windows Phone–Adding Assertions
4) Save Time, Money, and Your Sanity: Coded UI Testing for the Windows Phone–Test Methods
5) Windows First: A New Strategy for Mobile Development and Beyond
6) Using Portable Class Libraries
7) The Power of Speech in Your Windows Phone 8.1 Apps
8) The Power of Speech in Your Windows Phone 8.1 Apps - Text-to-Speech
9) The Power of Speech in Your Windows Phone 8.1 Apps–Speech Recognition
Transitioned the User Group to Meetup.com
With the new Canadian Anti-Spam Legislation in place as of July 2014, I decided this was a perfect time to transition the Canadian Technology Triangle .NET User Group to Meetup.com, and ask members to join our Meetup group in order to deactivate the old web site. This was a risky move, considering we had a solid member base in place. I was worried about losing members, but it was a risk worth taking. As part of the legislation compliance, we were required to ask people to “opt-in” to email newsletters even though they were already in our database. The old site was built on an old version of Dot Net Nuke, and we had over 1000 registered emails in the CTTDNUG database which would have required manual vetting to determine which emails were still linked to valid members.
Moving to Meetup made it easier for our members to manage their own email notifications, made it easier for them to join or leave our group without requiring any manual action on our end, and introduced our group to a wider audience. In less than 6 months, CTTDNUG has 196 members!
Achievement Unlocked: Xamarin Mobile Developer Certification
Early in the year, I subscribed to Xamarin University to learn firsthand from those that know about cross-platform development with Xamarin. I absolutely loved that the online classes were run by live instructors. Being able to interact with the instructors and other students only enhanced the learning experience. Along with that, Xamarin University provides the recordings of each class so that you can view them at your own convenience. I found this to be great to revisit topics where I needed a refresher as I was preparing for the certification exam.
I’m not sure what 2015 has in store for me, but I know I don’t plan to sit idle. I plan to continue to learn, grow, and share my knowledge with others.
Happy New Year!
In the last few posts, we have walked through how to design the Ultimate Fan App using Windows AppStudio and the Bandsintown API.
In Part 1, I went over the basics of Windows AppStudio and Bandstown API, and briefly touched on how they can be used collectively to create a Universal app that allows you to track your favourite musician or band.
In Part 2, I demonstrated how you can get the majority of the app completed simply using Windows AppStudio. To complete the app, I mentioned that it would be necessary to download and modify the source code.
Before digging into the code, my last post was focused on looking at the solution and source code that was generated by AppStudio to gain a better understanding of the structure of the projects. This helps us to identify where modifications will need to be made.
The Necessary Changes
In order to ensure the Bandsintown concert listings are rendered in the application, and to allow users to link to the band’s concert page to purchase tickets, we need to make some changes. My goal for these changes are to show a concerts list with the name of the venue, the city and/or country the concert is in, and the concert’s date and time. I would also like to make it easy to see which concerts still have tickets available for sale.
Last but not least, when a concert item that has tickets available is tapped, I want to the app to load the concert’s ticket sales page.
To accomplish this, changes are required to the application logic within the Portable Class Library and Shared Project. Further changes are needed to each platform-specific project to ensure the user interface displays the data in a desirable format.
In the Portable Class Library:
1) Add a class, named ConcertSchema, to represent the data retrieved from the Bandsintown API.
You can easily add the members to this class from a JSON sample of the data in Visual Studio 2013. First, go to the Event JSON Response page on the Bandsintown API site: http://www.bandsintown.com/api/responses#event-json
Next, highlight and copy the sample Event data. Now go back to your ConcertSchema class in the Portable Class Library and delete the default class that is created. Click Edit > Paste Special… > Paste JSON As Classes
You will notice the main Events result set is created as a class called Rootobject. Any subsequent classes that are needed are automatically created as well (in this case, Artist and Venue).
2) Add a class, named ConcertDataProvider, to perform the web request which will retrieve the data from the Bandsintown API for your favourite artist. It also will translate the retrieved data into an object which we can use within the code. This is referred to as deserialization.
3) Rename the Rootobject class to ConcertSchema. For conformity, I also renamed the Venue and Artist classes that were generated to VenueSchema and ArtistSchema respectively. I also changed the data type of on_sale_datetime from DateTime to object, since this field may not always have a value, causing null exceptions to be thrown.
Try building the solution now to see if we are on the right track.
What happened? Did you notice an error similar to this:
The solution to this is to ensure the class derives from the BindableSchemaBase abstract class, similar to the way that the RssSchema class does:
public class ConcertSchema : BindableSchemaBase
Right-click on BindableSchemaBase within the ConcertSchema class, and select to implement abstract class:
Modify the override methods that were added as part of the abstract class implementation as shown below:
Since the concert listings pulls a DefaultTitle, DefaultSummary and DefaultContent for each list item, it’s easy to feed the concert data that we want to the concert item by just returning that information through these classes. AppStudio has already provided the bindings (or virtual glue) that wires everything together to get the data flowing from back to front.
4) Modify the ConcertsDataSource class to make use of the new Concert data provider.
In the Shared Project:
1) Modify the ConcertsViewModel in the Shared Project to utilize the new ConcertSchema class. This can be simply accomplished by replacing RssSchema with ConcertSchema.
2) Add an image to the Assets folder which will be used to represent a ticket. In this case, I used Syncfusion’s Metro Studio to obtain an image which suits the purpose.
3) Add a converter class, named TicketAvailableToVisibilityConverter which will display the ticket image when tickets are available, and hides it when tickets are not available for a concert.
In each platform-specific project:
1) Modify the ConcertsViews data template in each platform-specific project to include the ticket image that displays when tickets are available for a concert, as well as text indicating “available”.
2) Delete ConcertDetailsPage.xaml from each platform-specific project
Next, it’s important to revisit the ConcertsViewModel class to modify the ItemClickCommand so that when a concert item is tapped, the application launches a browser and navigates to the artist’s Bandsintown page. We will accomplish this by using the LaunchUriAsync method off the Launcher object:
Last but not least, it is just as important to add a Credits section in your app to give attribution to any images obtained under the Creative Commons License. In this case, the background image used in the app must be attributed to Léa Reviron. As well, attribution should be included for any external data providers, and/or 3rd party libraries used within the app, such as the Json.NET library. In the Windows 8.1 project, this could be included as an additional App Flyout.
Credits Flyout on Windows 8.1
In the Windows Phone 8.1 project, this could be added to the About page, as part of a Pivot item or a separate Credits page. It’s up to you.
Build and Run
With all of the modifications in place, it’s time see what it looks like. Build and run the app on each platform to see if everything is displayed and working as expected.
Maroon 5 Fan Book on Windows 8.1
Concert listings from Bandsintown on Windows 8.1
As you can see, concert data is flowing into the app from the Bandsintown API. The other feeds which AppStudio wired up for us - Twitter, YouTube and Maroon 5 Blog feeds - are working as expected. Tapping a concert listing that shows tickets are available launches a new browser page and loads the concert’s ticket sales page right within the app.
Drill-down into the concerts listings page by tapping the concerts header. Now navigate back to the main page. What do you notice?
It appears that the other feeds still have their data displayed, but the concerts list is rebuilding each time you navigate back to the main page. Let’s see what the other feeds are doing that we aren’t.
RssSchema, TwitterSchema, and VideosSchema implement IEquatable and IComparable. If you take a look at ObservableCollectionExtensions class in the Common folder within the Portable Class Library, you will notice that it contains two methods: AddRangeUnique and AddSorted. All data sources call this method when loading data to first determine if the data has already been loaded. If so, then it just retrieves the collection from the AppCache. If not, it loads the data and stores the collection to the AppCache so that on the next page load it doesn’t go through the expensive operation of reloading the data unnecessarily. The goal when designing mobile apps is to keep the application running efficiently and with minimal resources. Caching data so that it does not load data needlessly from either a web service, database, or other mechanism multiple times is one of those improvements that will really make a difference in your application’s performance. This also takes care of the flash issues we were experiencing when navigating back and forth between pages.
Let’s make the necessary changes to ConcertSchema to ensure it implements IEquatable and IComparable.
In the Equals and GetHashCode methods, we will use the concert’s id as an equality check. In the CompareTo method, we will use the concert’s event datetime field as a comparison to ensure items that get added to the list are sorted by date so we can see upcoming concerts in order by concert date.
Build and run the app again and perform the same test see if concert data is being displayed from the AppCache. Do you notice that the concert listing flash is gone now when navigating between pages after the initial data load?
One Last Gotcha
In testing the app on Windows Phone 8.1, I discovered that attempting to load the concert’s event page at the Bandsintown website fails. Instead it prompts the user to install an app from the Store, but no related app is found. In attempting to simply use the built-in browser to navigate to the URL outside of the app, I am prompted with this:
So there is clearly something wrong with the way the native browser interprets the URL or the attempted redirect that is occurring on the Bandsintown end. I’ve sent off an email to Bandsintown about this issue. In the meantime, I have revamped my Windows Phone app so that users can only view concert listings in the app. They cannot navigate to the Bandsintown event page to purchase tickets. The browser just won’t load the page.
I simply removed the wiring to the ItemClickCommand from the ConcertsList Data Template in the ConcertsViews.xaml file in the Window Phone 8.1 project. When a user taps the item, no action is taken. I will revisit this once I hear back on a solution to the issue from Bandsintown.
Other than that, everything else looks good in the Windows Phone app.
Whew! That was quite the project, but then again, imagine having to develop the entire app from scratch!
With Windows AppStudio, we were able to create a pretty slick Fan App that is supported on Windows 8.1 and Windows Phone 8.1 devices. The majority of the application was automatically generated based on information we entered in the AppStudio design tool. We had to make some modifications to bring it to the homestretch, and add that coolness factor by integrating the Bandsintown API to tie in concert listings. Sure it required a little bit of effort, but the payoff is priceless!
You can download the source code for this demo from my Github account. Remember that you will need to add your own consumer key and access token for the Twitter feed to work.
When I first started this series, I intended on it being delivered in 3 parts. But in wrapping up the series, I felt that an important piece was missing - understanding the structure of the Visual Studio solution generated by AppStudio. So this post is technically not part 3, but simply a brief tangent to discuss the anatomy of an AppStudio solution.
In Part 2 of this series, I demonstrated how to get 90% of the Ultimate Fan Universal App completed simply by using Windows AppStudio. Since we require some code modifications to get the band’s concert listings displayed within the app, we downloaded the archive containing the source code generated by AppStudio.
At this point, you will need some basic knowledge to be able to navigate through the code, and make changes. If you’re new to Universal App development, C#, and/or XAML, I recommend watching the following Microsoft Virtual Academy courses which will help you to get up to speed fairly quickly:
1) Programming in C# Jump Start
2) Developing Universal Apps With C# and XAML
3) Designing Your XAML UI with Blend Jump Start
Anatomy of an AppStudio Solution
Now we need to unzip the contents of the archive to a folder on the local machine, then launch the provided solution in Visual Studio. Let’s take a look at what that includes based on how we configured the app in AppStudio.
Notice that the solution contains 4 projects: 2 platform-specific projects, 1 Shared Project, and 1 Portable Class Library.
A Universal App currently supports both Windows 8.1 and Windows Phone 8.1, which requires two separate files to be compiled and submitted to the Window Store. You can see this reflected below in the solution, where each supported platform is contained within separate projects. They can both share code in different ways which we will get to shortly.
The platform-specific projects contain components that are exactly that: platform-specific. This includes user interface elements and code that target the current platform, such as custom controls, styles, views, as well as images that are used for the application’s tiles, background image, splash screen, and logo.
Windows 8.1 and Windows Phone 8.1 both render and display data in a different way. Apps designed for Windows 8.1, known as Windows Store apps, will run on laptops, desktop PCs or tablets with more screen real estate than Windows Phone 8.1 devices. Also the default orientation of a Windows Store app is in landscape mode, whereas the default orientation on a Windows Phone 8.1 device is portrait mode. When designing a user interface for each platform, it is best to customize the layout and user experience to each supported platform.
The Shared Project is made up of files, images, and classes that are independent of any target platform. For example:
- Resource Dictionary files which contain localized strings that are used within the app.
- - Converters which render how elements are displayed or format data in a specific way based on an object’s property value.
- - ViewModel classes which contain data which need to be displayed within the views.
- Services to incorporate features such as Speech Recognition, Maps, and Navigation.
Shared project files are copied into each target platform whenever the solution is compiled.
Portable Class Library
The Portable Class Library contains code which is also platform independent, but is compiled separately outside of the solution. Each project contains a reference to the compiled library. Portable Class Libraries are great for code reuse among multiple projects.
As we can see, AppStudio generated a number of classes:
1) Data Providers – base classes containing logic which loads data from a source (ex: web service, static data, local database, etc).
a. The RssReaders folder contains classes to parse data from Atom and RSS feeds
b. The Twitter folder contains classes to handle Twitter authentication using OAuth so that the app has authorized access to the Twitter API.
2) Data Schemas – represent the models for data that is retrieved within its associated data provider
3) Data Sources – extensions of the data providers to load data from a specified source
4) OAuth – supporting classes for Twitter authentication.
Important Note: Your Twitter ConsumerKey, ConsumerSecret, AccessToken, and AccessTokenSecret are in the OAuthTokensRepository class. If you share your project code with others (for example, by posting it on Github or making the code available for download via OneDrive), be sure to scrub these values from this class and just use placeholders. Never let anyone have access to these values!
5) Tiles – logic for updating the application’s tile (ie. title, content, and image)
So now that you have a basic understanding of your AppStudio solution structure, it will be easier to figure out where changes need to be made to achieve the end goal, which I will cover in the next and final post in this series.
In my last post, we went over the basics of Windows AppStudio and Bandstown API, and briefly touched on how they can be used collectively to create a Universal app that allows you to track your favourite musician or band. To prepare for this, I left you with some homework to verify you have the necessary development tools installed on your machine, compile a list of URLs that point to data feeds you will include in your app, design an app logo, and gather any other images you wish to use in your app.
With all that in place, we can pick up where we left off!
Step 3: Design the app using AppStudio
It’s time to log into Windows AppStudio to create the shell of your app, selecting a template whose style suits your fancy. If you’re not sure how to navigate the tool, step through my blog post series on AppStudio:
Creating an App with Windows Phone App Studio – Part 1
Creating an App with Windows Phone App Studio – Part 2
Creating an App with Windows Phone App Studio – Part 3
For the purpose of this blog series, I have chosen to create a fan app about Maroon 5 (oh, Adam Levine, how I love thee…let me count the ways). I decided to use the template, “My favourite band”, for its layout. Let’s take a look at what that gave me out of the box.
From the app’s dashboard, we can see that AppStudio generated everything we need to see what the app will look like. Out of the box, it created 6 default sections which correspond to the type of app you want to develop. Test data is already wired up for you with stock images for the app logo, background, splash screen, and live tiles. Now that you have a sense of how the app will flow, you can decide which sections you wish to keep, remove, and add, if you don’t like the suggested sections that were created by default.
App Logo and Title
First things first, ideally you should change the app logo to one that will represent your app. You will notice as we proceed through this post, that the app logo is used within the app, but you will need to also upload images for the application’s live tiles and application icon which will represent your app in the Windows Store. For a consistent experience, it would be nice if the app logo, tile image, and application icon all aligned by using the same image throughout, just as the template has demonstrated.
To swap out the app logo, click on the current one at the top of the page, and when prompted select your custom logo. The image can be on your local machine, in your OneDrive account, or you can select an alternate AppStudio resource. Next, in the App Title field, provide a name that describes your app. In my case, I’ve set the title to “Maroon 5 Fan Book”.
Next, we can start modifying the content.
By default, the template preloaded 6 sections: HTML, singles, albums, concerts, blog, and videos. This is just a suggestion and not a requirement in your app. The beauty here is you have the flexibility to add, remove, and reorder sections as you see fit.
In my app, I decided to remove the first 3 sections: HTML, singles, and albums. I easily can delete the HTML and singles sections without issue, but the albums section won’t allow me to delete it because it is used a data source for the Cycle tile, which is the default tile for the “My favorite band” template.
We’ll fix this once we have our other sections sorted out.
The concerts section will be used to display the concert listings that I will retrieve from the Bandsintown API. To do this, I will edit the section which will allow me to choose a different layout, and specify a data source. In this case, I like the default layout the template provided. I just need to change the data source. Within the Edit section page, I click on Data, and enter the Bandsintown request URL to retrieve the concert listings for Maroon 5: http://api.bandsintown.com/artists/Maroon5/events.json?api_version=2.0&app_id=YOUR_APP_ID
Remember that the API call must also include your own unique App Id as a query string parameter, so you will need to replace “YOUR_APP_ID” with one that you’ve come up with. With that in place, I save my changes. Notice that no data is displayed in the preview to the left. Don’t worry about that for now. We’ll revisit that later.
I perform the same steps for the blog and videos section to ensure that sections are retrieving data from Maroon 5’s blog and YouTube channel respectively. In these cases, you will notice the data is displayed as expected in the preview to the left.
So far so good?
Yes and no. I want to add one more section because 3 just doesn’t feel like enough. So I decide to add a Twitter feed to round out my app. This requires a few extra steps to ensure I register my app with Twitter, obtain the required consumer key/secret and access token/secret values, and copy them into my Twitter feed section in AppStudio.
For a detailed walkthrough on how to add a Twitter feed to your AppStudio project, check out the section, “Using The Twitter Data Source” within AppStudio’s online documentation.
The next step is to select the theme you wish to use. The Theme that the template uses by default is a custom theme with a standard stock image as the background. If you wish to use the Custom Theme with a background image, this is the time to swap out the stock image provided by the template with a custom image that represents your app. Ensure the image is your own, or one obtained under the Creative Commons License and be sure to include proper attribution.
Alternatively, you can go with the standard light or dark theme, which doesn’t require a background image. The choice is yours!
Similar to Themes, the template has selected a default tile format. In the case of the “My favorite band” template, it is the Cycle tile template that is selected by default. And as we noticed earlier, the Cycle tile template uses the albums data source to display pictures on the app’s live tile. I change this to simply use a Flip tile for simplicity.
I also needed to modify the tile title to correspond to my app title. Changing the app title didn’t automatically propagate that change to my tile. Last but not least, the tile images need to be uploaded. By default, the template provides a small tile image which is the same stock image it provided for the app logo. I will swap this out with my custom logo image, in each of the sizes it requires: Small (160X160), Normal (340X340), and Back (715X340). I can optionally choose to add a back title and some text that will be displayed on the back side of the tile.
The Tile tab also includes a section to swap out the stock images that were added for the app’s splash screen (both for Windows Phone and Windows Store) and the Windows Phone lock screen. Once I swap these images out for my own images, I save my changes, then revisit the Content tab to delete the albums section.
The final step is to include the information that will be packaged with the app and displayed in the store when it is eventually published, including app name, description, and privacy URL. You will also need to upload the image that will serve as the application icon when the app is published to the Windows Store.
At this point, you can also associate your app with the Store. This will require you to have a registered Dev Center account, and will allow you to reserve your app name in advance of publishing the app.
For details on how to publish your app to the Windows Store, refer to the Publish section within AppStudio’s online documentation.
At this point, the app is not yet ready to be published. Remember earlier on in this post, that the Bandsintown concert listings weren’t appearing as we had hoped? That’s because it will require some extra work to get it working. And it will give me the opportunity to provide some custom styling for that list, if I so choose.
Step 4: Download the source code
With the app completed as far as we can go in AppStudio, I select “Finish”, then “Generate”. In the dialog box that appears, I simply select the “Generate” button to generate the source code. Once the code is generated, I can click the link within the Download Source Code Section, “Visual Studio 2013 Universal Project …” to do exactly that.
A zip file will be downloaded containing the Visual Studio solution for my app.
To Be Continued…
Awesome! At this point, we have a functioning app that requires some minor modifications to polish it off so that it can be published to the Store with pride.
In my next post, we will explore the modifications that need to be made to the source code to get the concert listings to display properly, as well as to allow users to purchase tickets without leaving the app!
Let’s face it. We all love music. Some of us love it so much, that we track our favourite musicians waiting for concert dates to be announced and tickets to go on sale. Wouldn’t it be easier to use an app that will do that for you? Better yet, wouldn’t it be awesome if you could purchase available concert tickets for your favourite artist right from within the app?
With Windows AppStudio and the Bandsintown combined, you can easily create your own ultimate fan app with a few clicks of the mouse, and some modifications to the code.
If you’re not familiar with Windows AppStudio, it is Microsoft’s online design tool which allows you to create Universal apps through a wizard-style interface. It also allows you to generate and download the source code for the app so that you can customize it further from within Visual Studio. AppStudio is great for displaying collections of data, whether it’s an RSS feed, live Twitter stream, Facebook page posts, photos, or static data.
To learn more about how AppStudio works, check out my 3 part blog post series on using AppStudio to create a Windows Phone app:
Creating an App with Windows Phone App Studio – Part 1
Creating an App with Windows Phone App Studio – Part 2
Creating an App with Windows Phone App Studio – Part 3
AppStudio has changed since then to include more features and the ability to generate Universal apps, but the main concepts of the design tool are the same. You can check out how to use the latest features of Windows AppStudio by reading the online How-To guide.
Now that you know what AppStudio is, let’s explore what Bandsintown is all about and how it can help you create a custom fan-based app.
Bandsintown is a platform that connects fans with their favourite artists. It includes information on a multitude of artists, such as band information, concert listings, and ticket availability. Bandsintown v2 API is designed for enterprise partners with websites, media players, and/or mobile applications that are part of the Facebook platform and would like to provide their users with the ability to RSVP to and share artist's real Facebook events. Response data is available either as a JSON or XML result.
In order to use the Bandsintown v2 API, you will need to, review Bandintown’s best practices for using the API, send them a note to let them know that you will be using their API, and choose a custom Id that will serve as your unique application identifier. You will use this value each time an API call is made. Since their API returns links to an artist’s Facebook page, you will also need to ensure that you follow all Facebook policies.
Before you start designing your ultimate fan app, I recommend that the following preparations are made ahead of time to ensure that the app creation process is as smooth as possible.
Step 1: Select your favourite artist, and gather information
Decide which artist your app will feature, any images you wish to use within your app. Ensure that any image you use, if it is not your own, is made available under the Creative Commons License and proper attribution is included in your app.
You will also need to design a logo for your app. You can use Syncfusion’s MetroStudio, a free tool, to create Modern style icons.
Also, decide on which data sources you will use to load information relevant to your favourite artist within your app. For example, this could be information from the artist’s Facebook page, videos from YouTube, or photos from Flickr or Instagram. Be sure to have these links handy so that you can copy/paste them into AppStudio’s design tool when configuring the sections within your app.
Step 2: Prepare your development environment
Next, ensure you have Visual Studio 2013 (with Update 2 or higher) installed on your machine. If you don’t have Visual Studio installed, you can download the Express edition which is free. To help you through this process, check out my post, Setting up Your Development Environment in 30 minutes (or less).
To be continued…
Now that you know what your app will be focused on, and have the necessary materials at hand, creating the app will be a seamless process. In my next post, we will explore how to create the ultimate fan app using Windows AppStudio and the Bandsintown v2 API!
For this month’s spotlight post, I interviewed Tom Walker, who is the User Group Leader of the London .NET User Group in London, Ontario. Tom also volunteers for many community groups and tech events across the region, including my own user group, CTTDNUG. He is also a conference speaker, Windows 8 / Windows Phone Developer, and Xamarin Developer and an advocate for those platforms.
Tom Walker is a senior software developer with over 10 years of experience in the .NET stack. In those 10+ years he has worked in the auto, medical and fitness industries. He specializes in building software that enhances people’s lives in their day-to-day activities be it work or play. His current goal is to combine his passion for art and development into beautiful useful apps. Beyond that you can find him tinkering away on open data and open source projects using Windows Azure, Node.js, MongoDB, and Xamarin plus C #to glue it all together.
London .NET User Group: meetup.com/London-NET-Developers-Group/
1) How many years have you been involved in the .NET community as a volunteer?
I have been a volunteer for 3 years.
2) Which events have you participated in as a volunteer in the past?
When I was speaking at DevTeach I volunteered my time to the Humanitarian Toolbox hackathon. Humanitarian Toolbox is a charity organization that utilizes IT skills to help save lives during disasters and relief efforts.
I have volunteered my time as host and helped out on weekend developer workshops for CTTDNUG, which is the Kitchener/Waterloo area .NET user group.
I recently volunteered as a developer mentor at two Nokia/Microsoft DVLUP events in Toronto. The DVLUP events were setup to provide mentors and resources to help developers complete their Windows Phone apps or enable them to start creating an app.
Toronto DVLUP event
3) What prompted you to participate in those events?
My first volunteer event was with Humanitarian Toolbox when I was speaking at the DevTeach conference in Toronto. It was during this event my interest was sparked to help others through the use of my coding skills. After this event I was hooked and wanted to do even more to help others and to improve the developer community.
DevTeach was my first time speaking at a professional developer conference. I found that going through the process of preparing for the talk really forced me to learn my session topics. The other benefit I found with giving talks was the audience engagement. I found during my session talks that I was learning from my audience, from their reactions and questions on my presentations.
I attended two more developer conferences, Prairie Developer Conference in Saskatoon and GRDev Days in Grand Rapids in Michigan. It took me awhile to overcome my fear of talking in front of others. However, I found the experience to be worthwhile because I was able to meet other developers from other parts of Canada and the US. I would like to encourage other developers to either speak at their user group or a local developer conference. It’s a great way to meet new people with the same interest and motivation for learning a subject matter. I always found I learned better when I had a purpose for doing it. Preparing to give developer session talk gives me this purpose. Also being a speaker at conferences does have its perks. Speakers at conferences attend for free and some organizers do cover some of the travelling costs.
My current passion is Windows 8/Windows Phone 8 app development. I found that by volunteering to be a mentor I could share with others my development experience and also learn from them as well. I also found the experience always renewed my purpose for being a developer. I recently volunteered as a developer mentor at two Nokia/Microsoft DVLUP events in Toronto. It was challenging for me in solving other developers problems and very enjoyable at the same time to see other developer app creations.
4) When did you start up the London .NET Developers User Group?
I started London .NET Developers User Group in September 2013. So we haven’t reached our 1 year anniversary yet and I am happy to say our membership is 124 registered developers.
Really the motivating factor for me is the time I’ve spent with the great community of developers within CTTDNUG. I wanted to bring that same community experience to London by creating a similar .NET user group. Having these kinds of developer communities is a great way for developers to share their experiences and network with others on job opportunities or on personal projects. I’ve seen the positive impact our group has had by connecting local developers with local companies looking to fill developer roles.
5) What were the challenges you faced in starting up a new User Group?
The biggest challenge was overcoming the fear of failing. In the past I had always found an excuse to convince myself that I could never establish a successful user group for the London, Ontario area. It was encouragement from Rob McDermid the CEO of IES Group that gave me the courage. Rob has always been a great mentor to me. He had also helped by making introductions to local developers who later became members of the lead support team for the new group.
I saw firsthand through Lori Lalonde the leadership of how to properly structure a user group. It was just a simple matter of duplicating the same group organization that she had created for CTTDNUG.
The last challenge was finding a decent place for our group to meet. I was fortunate to find HackerStudios which offered us a space for reasonable price. HackerStudios is a co-work space for local entrepreneur to share in the cost of office and work space. The space offered us plenty of room for our members, Wi-Fi and flexibility on seating configuration depending if we were doing a speaker session or workshop event.
London .NET UG Event at HackerStudios
6) What challenges do you face running the User Group on a regular basis?
The challenges that I face on a regular basis are what topics to create for our monthly sessions, who can I schedule as a speaker and how to increase membership. The most difficult recurring challenge is how to schedule this extra work on top of my normal day to day job. So I had to tackle each of these challenges one at a time. I found if I planned topics 2 months in advance it became less stressful. Now I’m trying to schedule topics and workshops for our entire upcoming session season. I’ve been fortunate because I’ve networked with several industry experts during my time with CTTDNUG and through the conferences that I’ve attended.
It was as simple as reaching out to these people and asking if they would be interested in speaking at our user group. I’ve always been courteous and schedule speakers 2 months in advance. You have to remember these people are busy with their work and lives as well.
As for picking topics it was matter of listening to what members were interested in and taking advantage of the resources from the Microsoft user group support program. Microsoft has already prepared several topic packages which included Power Point slides and speaking notes. The topic packages save some of the work and are great resources that help me create session talks for sessions or lab lessons for our workshops.
In order to help increase membership I take advantage of social media channels like Twitter, Facebook, LinkedIn to get the word out about our group and upcoming event. I also take advantage of local community event boards on websites like TechAlliance to help promote our events. However, word of mouth is still king when it comes in promoting events. I found if we kept delivering interesting topics membership registration would increase as well.
7) What advice would you give to someone who is thinking about starting up / running a User Group?
Attend an existing user group in nearby city if you can. Talk with the other group leads and members. You basically want to walk way confident that this is something you seriously want to pursue. There will be some cost and work involved.
Establish a support team for your user group. It’s easy if you have other people to share some of the work and responsibility.
Take advantage of group website services like Meetup. It didn’t take me long to decide to buy into the monthly fees for Meetup. I was able to have all the group info created and schedule sessions in just one Sunday afternoon. I don’t have to worry about creating webpages or setting up web server. Meetup had everything I needed plus it had discussion forums, member signups, image uploads and member feedback and comments.
Automate as much as the work as you can. I’ve been using BufferApp to schedule all my social media event promotion for up to 10 days. I typical schedule event promotions 4 times a day and within 4 days of a typical week.
Take advantage of user group support programs from Microsoft and other vendors like Telerik, Pluralsight, Apress and Wrox. They can provide discounts on products, resources for topics and potential swag to give away during your sessions.
Ask if your company can provide space for your user group to meet. It will save on some of the upfront costs. You can always sell the idea as a means for the company to screen potential developer hires.
Always be consistent with scheduling your events. It’s far easier to establish recurring attendance if you schedule for the same time each month.
Thanks Tom for participating in my second Spotlight blog post!
To find out more about Tom Walker, be sure to follow him on Twitter, visit his blog, and join the London .NET Developers Meetup Group!