You are here

Feed aggregator

Ultimate Ink Flashcards Demo

MSDN Blogs - Wed, 06/11/2014 - 00:30

Ultimate Ink Flashcards is a great app that helps to personalise learning with a variety of media rich options.

The app allows learners to easily add an image, listen to audio and use digital ink to solve problems and show work to others.

Furthermore, the app allows you to easy see the front and rear of the card simultaneously and provides a rich template of colours to create new content for revision purposes etc.

This is a great app that is both interactive and engaging and can be downloaded from the Windows Store. The app is £1.29, but has a free trial option so you can put it through its paces before opting to buy the full app.

A short demo of the app is shown below:

Ultimate Ink Flashcards Demo from Microsoft Education UK

Startups pour les marques et le commerce: mes coups de cœur

MSDN Blogs - Tue, 06/10/2014 - 23:36
Step-In Step-In propose une application permettant à l’utilisateur de collecter des STEPS juste en entrant dans les magasins partenaires. Ces points (multi-enseignes) peuvent ensuite être échangés contre des cadeaux. L’application permet également aux enseignes de proposer en temps réel des coupons de réductions ciblés en fonction du rayon dans lequel se trouve le client. Celui-ci reçoit ces remises dès qu’il passe devant les bornes Step-In installées dans les rayons, et peut les utiliser immédiatement...(read more)

Here’s one TAFE institute that’s already changed the face of learning with Yammer

MSDN Blogs - Tue, 06/10/2014 - 21:21

Shortly all education customers will be able to add the enterprise version of Yammer free to their existing Office 365 Education [Want to know more about this, and what's in Yammer enterprise]. But some education customers in Australia have already been using Yammer to support teaching and learning in their institution.

At Wodonga TAFE, they started using Yammer last year to provide an enhanced online learning environment, with better cross-institute sharing between staff, and with and between students. In addition to supporting remote students, and bringing them closer to the institute, even if they are studying online, Wodonga TAFE have also been able to win new business from government and private sector organisations. This is an important factor for TAFEs in almost every state across Australia, where Institutes are competing with private training providers who are getting into areas that have been previously reserved for TAFE Institutes.

As Michael Kershler, the ICT Director at Wodonga TAFE, put it:

  We have targeted and won contracts from government and the private sector based on our ability to embed technology in online learning. With Lync and Yammer, we are winning contracts from customers who would not traditionally have turned to a TAFE institution.  

Wodonga TAFE has 250 staff, 14 campuses, and delivers training to 18,000 students through 2,500,000 contact hours of training each year.

Connecting staff with each other, and with students

As well as wanting to attract new customers among regional businesses, government agencies and remote communities, the TAFE wanted to make training more compelling. According to Michael:

  To stimulate new learning techniques, we wanted everyone to share ideas informally, without cluttering each other’s email with irrelevant material. We had fantastic education capital, but it was stuck in silos of information in 14 different campuses. To create the best courses we needed to reduce internal barriers.  

Wodonga TAFE already delivered more than half of courses online, but to deliver a more interactive learning experience, trainers also wanted to bring remote students into the same teaching environments. “We wanted to make online learning more engaging, increase real-time participation, and equip everyone to respond quickly to student requests.”

Late last year, Wodonga TAFE became the first vocational TAFE in Victoria to roll out the enterprise social tool, Yammer. (Yammer recreates a social media platform within an organisation, so employees and students can create profiles and interest groups, start conversation threads, post news, pose questions and provide informal commentary.

They also wanted to give all staff instant messaging, voice calls, and desktop videoconferencing, so they used Lync 2013, and made Office 365Education available to all 18,000 students. And by connecting Lync and Skype, students and trainers can see each other’s availability, start IM conversations and click-to-call from either application.

TAFE staff working ‘out loud’

After combining Yammer, Lync and Office 365, Wodonga TAFE staff members started collaborating more effectively, creating more powerful courses and winning new customers. Yammer has helped create a new, highly co-operative networking culture across all TAFE Wodonga campuses.

 

We’ve had great success in breaking down organisational barriers. With Yammer, we’ve developed a ‘working out loud’ philosophy, which means trainers build new courses collaboratively, everyone knows what’s happening, and we all react fast.

Before, people were pushing information—often blindly—across organisation. Now, we are all pulling information towards us, which is more efficient and effective. Yammer brings the organisation together, both culturally and at a business level. Email is no longer our primary communication tool.

  Improving distance learning

The Yammer-Lync combination also enables trainers to reach a wider student base, through simpler instant collaboration and communication:

 

Our remote learning is now so much more than just ‘online’. When they sign up, remote students are instantly engaged in our campus environment, and tutors bring students into classes, or coach them via live chats. Meanwhile, trainers have started learning innovation groups, where they create and share digital learning techniques.

Now we can extend the best quality education to students to isolated communities at no additional cost: this gives us a great competitive advantage.

 

Read more in the full Microsoft case study on our global website

Top Apps for Windows 8 in Education

MSDN Blogs - Tue, 06/10/2014 - 21:16
The Microsoft Education Australia Team have been busy preparing new guides and resources to support schools. Windows 8 Apps Guide Wondering which Windows 8 apps hit the education ‘sweet spot’? Don't know where to begin your search? The Microsoft Australia Education Team just released a ‘top list’ just for educators like you. We shared so many copies of the printed version at the EduTech stand that we want to make sure everyone has access to this handy guide. You can...(read more)

How to implement a multiple team strategy in Team Foundation Server 2013

MSDN Blogs - Tue, 06/10/2014 - 17:14

Lately I have been working with several customers who are exploring a multiple team strategy when creating projects within Team Foundation Server. As these conversations have progressed they follow a common theme. There are some good MSDN articles that help you setup teams, groups, areas, etc. but I was not able find an article that walks through the entire process for the scenario I was encountering. So I decided I may as well write one of my own for others to take advantage of.

Scenario // 

For the customers I work with, most of the teams have more work than they can handle and need some visibility into their overall work pipeline. Many times a request or change will come from a project managers or user, but they are not sure what team or project it should be assigned to. Setting up a single project team strategy would be hard in this case as it is difficult to share product backlog items (pbi, or user story if you are using agile template) across team projects within TFS. As a solution, we will use a multiple team strategy under a single team project. We will collect the pbi's and place them in an oversight queue that will be reviewed by either an individual or committee. Then these pbi's will get moved as they get assigned to teams and projects. We also need to setup security in way so that the individual teams don't have permissions to get in and monkey around with other teams backlog, queries, or code. 

Download // 

Download the document to walk through the entire scenario. You may not need the level of security as documented, but if you are setting up a multiple team strategy in TFS it's good to understand the concepts, capabilities, and restrictions.

Download the Multiple Teams Walk through using Team Foundation Server 2013

Other Good Resources // 

Visual Studio TFS Team Project and Collection Guidance

Agile Portfolio Management whitepaper

Add another team

Add team members

Portfolio backlogs

Creating groups for restricting access 

Remove “Access App” from “Add an app” page in SharePoint

MSDN Blogs - Tue, 06/10/2014 - 17:08

In order to add a new list or a SharePoint app to a SharePoint site you go to Site Content and click on Add an app. You can also get there through the site action menu.

One of the apps that shows up out of the box is the “Access App”:

 

If you haven’t configured access services yet in your farm or don’t want users to create new Access Apps you can remove this tile from the list of apps that you can add. In order to do this you need to disable a hidden feature called “AccSvcAddAccessApp”:

To do that you need to run the following PowerShell command:

Disable-SPFeature -Url http://SITE_URL -Identity d2b9ec23-526b-42c5-87b6-852bd83e0364

 

http://SITE_URL --> Is the URL of the SharePoint Site where you want to remove “Access App” from.

Activate your Microsoft Online Services benefits today

MSDN Blogs - Tue, 06/10/2014 - 17:02

Internal Use Rights (IUR) licences for Microsoft Online Services (such as Office 365, Windows Intune, Dynamics CRM Online and Microsoft Azure) are an exclusive benefit for Microsoft Partners with an Action Pack or Competency. Read on to learn about entitlements and how to activate Office 365 IUR – please view the Product Usage Guide for guidance on other Microsoft solutions.

 

 

Office 365 IUR

Office 365 (O365) is subscription-based, per-user licensing. The O365 Enterprise E3 includes access to Office applications plus other productivity services that are enabled over the Internet (cloud services), such as Lync web conferencing and Exchange Online hosted email for business. Access to Yammer Enterprise is included in O365 (E3).

As a core benefit, Action Pack subscribers and competency partners have the flexibility of using O365 (E3) subscriptions or on-premises Office client licenses (Office Pro Plus, Exchange CALs, Lync CALs, and SharePoint CALs). You have the choice to deploy your program license grants as an on-premises only, online only, or an on-premises and online combination solution. Your internal-use of online services decrement from your on-premises licenses and vice-versa. Your combined license usage for Office on-premises client licenses and O365 may not exceed your program license entitlement. Country and worldwide license maximums apply.

For example gold competency partners are granted a choice of 100 O365 (E3) seats or 100 Office Professional Plus licenses and Office server CALS for Exchange, Lync, and SharePoint, you may choose to deploy 80 seats of Office 365, and utilize 20 on-premises license for Office Professional Plus licenses and CALs for accessing Exchange Server, Lync Server, and SharePoint Server. You will maintain your Office server licenses even if you elect to use only your online O365 seats—the server licenses may be used for demonstration, internal employee training, or additional CALs you purchase.

Competency partner may experience O365 (E4) features which includes Enterprise Voice capability by using your O365 (E3) licenses along with your Lync Server 2013 and Plus CALs.

 

Activating Office 365

  1. Log into the partner digital download site.
  2. Click the “Microsoft Online Services” tab
  3. Select “Microsoft Office 365” and view your product key (token) – copy your token(s)
  4. Select the link to the Key Redemption Portal
  5. If you have an existing account, sign in by clicking the URL on the right. Otherwise, follow the prompts to create a new account
  6. Enter keys, if given the option select "add more seats" (do not select "extend subscription"). If entering multiple product keys, select “Add another product key”. When finished, select “Next”.
  7. You’re all set – assign users an manage your tenant through the Microsoft Online Portal

 

Maintaining your Microsoft Online Services IUR

Your cloud services entitlement terminates at the conclusion of your subscription/program enrolment year. You may continue to have access to your cloud services benefits past your program enrolment end date, but you will no longer have use rights through the program. During the program year, your organizations will be issued additional tokens as you qualify for more seats.

Each year when your organization renews your subscription or re-enrols into the subscription/program with a competency, a new set of tokens will be issued based on your organization’s entitlement at the time of re-enrolment. You will be required to enter these new tokens on the Key Redemption Portal each program year to avoid a lapse in your cloud services. If you do not re-enrol into the program, you must purchase the cloud services through the Volume License channel.

Use of SQL 2014 with TFS 2013

MSDN Blogs - Tue, 06/10/2014 - 16:59

We’ve certified TFS 2013 (and its subsequent updates) to work with SQL 2014.  However, there’s a hitch.  Because TFS 2013 shipped before SQL, the license than grants the right to use it with SQL Server only allows SQL Server 2012.  Starting July 1st, we will be adding SQL Server 2014 to the list of license grants for TFS 2013.  That won’t, apply to earlier versions of TFS though – we haven’t event tested those with SQL 2014.

Anyway, hopefully this will make your life a little easier if you want to use SQL 2014.  Of course, you can keep using SQL 2012 if you like.

Brian

URL Rewrite- Part 1(Prerequisites)

MSDN Blogs - Tue, 06/10/2014 - 15:45

I am planning to post of a series of blogs on how we can use URLRewrite with and without ARR in IIS 7 and above. But before going into URLRewrite we need to understand some basics and there are some prerequisites. So in this blog we will discuss about the prerequisites below.

1) Difference between Rewrite and Redirect

2) Scope of Rewrite with ARR

3) Scope of Rewrite without ARR

4) Regular Expressions

Difference between Rewrite and Redirect:

Redirect:

Consider a scenario where we had an application ‘old1’ (http://bing.com/old1/) which was the old location and the content has now been moved to http://bing.com/new1/ , this can be done in two ways.

Rewrite:

Consider a scenario where we had an application ‘old1’ (http://bing.com/old1/) which was the old location and the content has now been moved to http://bing.com/new1/ , this can be done in two ways.

Scope of Rewrite with ARR

With Arr URlRewrite can be used to rewrite requests to any site within the same server or any site in any backend server. To achieve this urlrewrite rules have to be created at the server level.

Scope of Rewrite without ARR

• Without ARR URLRewrite can be used to rewrite requests to any other resource within the site. We can’t rewrite requests to a different site or server.

• For eg: http://bing.com rewritten to http://bing.com/new/ or http://bing.com/a.aspx to http://bing.com/b.aspx. We cant rewrite requests from http://bing.com/* to http://Chiranth.com/

• For this url rewrite rules are created at the site level or at the application level within the site.

Regular Expressions:

A regular expression (regex or regexp for short) is a special text string for describing a search pattern.

  1. . – 0 or 1 occurrence of any character

Eg: If I specify . It matches 0-9, a-z or any character

  1. *- specify 0 or more occurrence of previous character

Eg: If I specify s* ; null,s,ss,sss,ssssss,etc matches the pattern

  1. .* - means it matches null or any word or any series of characters

For eg: .* matches null value,start,match,a.aspx,etc.

  1. ^- means starts with

For eg: ^s.* matches to start,snap,s, anything that starts with s.

  1. $- means ends with

For eg: .*s$ matches with s,paas,saas,iaas anything that ends with s.

  1. + - one or more occurrence of previous character.

Eg: s+ matches with s,ss,sss,etc

You will find a lot of resources in the internet for regular expressions.

I will release my next blog on how to create inbound rules, outbound rules, and rewrite maps shortly.

Technorati Tags: ,,,,

All About Load Test Results and the Results DB (Part 4 – What Are the Numbers Really Telling Me?)

MSDN Blogs - Tue, 06/10/2014 - 15:00

This question comes up all of the time. Unfortunately, there isn’t really a single correct answer. However, there are a number of things that can be pointed out that will help lead you to an acceptable answer. The most important thing is to be sure you have defined the proper goals, objectives and success criteria (see this post).  I also want to point out that I am not covering any information on how to use results to find issues or troubleshoot test runs. This post focuses solely on the mathematics of results and the expectations of the people receiving the results from test runs. Let’s look at a question and some of the responses I have seen before. Some of the answers look very reasonable at first, but they may have some caveats:

INITIAL QUESTION: In my performance report there are 3 columns, say Average Response Time, 95% Response Time and 99% Response Time. Which one should I use to report to my Business?

RESPONSES: Here are some responses I have seen and some thoughts to consider when reading them

  • I don’t think average response time is a good idea to report since ½ your users will see something worse. [The average response time does not mean that half the values are better or worse than the average. Averages can be skewed by just one value e.g. the average of (1 , 1, 2, 2, 1, 20) = 4.5. In this example, all the values except for one are below the average. The MEDIAN or 50th percentile represents the exact middle value of a set of data.]
  • We often report the 80th percentile since that represents a vast majority of users without worrying about the extreme outliers. [the 80th percentile only excludes the “greater than” outliers. This does not necessarily exclude all “extreme” outliers since you may have outliers on the low end of the scale. It also does not mean that there are “extreme” outliers. It just means that the 80th percentile represents a value which 80% of data is either less than or equal to.]
  • It’s helpful to chart the results so that you can see the distribution. [I like this answer]
  • In terms of what to report back, the business should be telling you what they want to see based on their needs and those of their customers. [I like this answer]
  • Sharing thoughts on percentile values when reporting (to see how the values are calculated, read the bottom of this post):
    1. If the standard deviation is < 5% for the individual result set of transactions/pages, we could take the average response time.
    2. If the standard deviation is > 5 and < 10 % for the individual result set of transactions/pages, we could take the 75th percentile response time.
    3. If the standard deviation is > 10 and < 20 % for the individual result set of transactions/pages, we could take the 90th percentile response time.
    4. If the standard deviation is > 20 % for the individual result set of transactions/pages, we could take the 95th percentile response time. [Keep in mind that if the variation is low (small std dev), you generally want to use the average because it does not exclude any data. When you switch to using percentiles, you are excluding some chosen percent of the data. If you want to get a measure of central tendency when there is higher variation, I would generally steer toward the median or some sort of truncated mean (i.e. remove the bottom  and top x percent rather than just excluding the top x percent). If you want to get a measure against a criteria (such as an SLA), the chosen percentiles might make more sense because they will be saying x percent of calls are less than or equal to y. HOWEVER, you have to be careful when doing comparison reporting to always choose the exact same percentile value AND to exclude outliers using the same formula.] 

I would love to hear some other thoughts on this subject as well.

Lab Hours - Spring Quarter Finals Week/Summer Quarter

CIS Dept. Posts & Announcements - Tue, 06/10/2014 - 14:15

Learning Center Hours- Finals Week Spring Quarter
Student Computing Center
W 6/18-Fri 6/20: 8 am to 5 pm
S 6/21: 12-4
M 6/23: 8 to 1 pm
Closed 6/24 through 7/1

ALC
June 16 through June 19: 9 to 1 and 3-8
June 20: 9-12
Closed June 23rd through July 1st

Writing Center
M and T 6/16 and 6/17- 8-4
W 6/18 8-1
T 6/19 8-1
F 6/20 8-1
Sat 6/21- 10 to 12
M 6/23 8 to 12
T 6/24 8-12

Science Tutoring Center
June 16-19 M through Th 9 to 6
June 20 F 9-noon

Math Center
M-Th 8 am to 7 pm
F 8 am to 4 pm
Sat. 6/21- closed
6/23 8-2
6/24 closed

read more

L&I has more openings!

CIS Dept. Posts & Announcements - Tue, 06/10/2014 - 14:11

L&I Enterprise Services Developer, ITS 5

"My L&I" is a highly visible project and is L&I's first initiative towards realizing a mobile-ready eGovernment vision. The project is responsible for delivering advanced web capabilities to citizens and businesses within Washington State. In order to accomplish this, L&I needs new technology that enables information and services related to specific customer roles to be linked together and presented to our customers in an integrated way.

read more

min12int explained

MSDN Blogs - Tue, 06/10/2014 - 14:00

Here I go again, after a couple of years of silence... Someday I'll tell the tale of what has kept me busy.

In the meantime, here is an interesting bit that I learned today. DirectX defined various level of support across many variables, and in Windows 8, some new scalar types were added to HLSL that could provide better performance - the min* types. min12int however, looked a bit odd to me - it doesn't have an unsigned counterpart, and it's not obvious why it has that precision. Well, it all became clear when I found this tidbit on the GLSL-to-HLSL reference (highlight is mine)

min12int: minimum 12-bit signed integer
This type is for 10Level9 (9_x feature levels) in which integers are represented by floating point numbers. This is the precision you can get when you emulate an integer with a 16-bit floating point number.

And now you know too.

Enjoy!

Yammer Localization Updates Powered by Microsoft Translator

MSDN Blogs - Tue, 06/10/2014 - 13:48

There are some exciting new changes happening in the world of Social Enterprise. Earlier today Yammer announced key localization updates across its web client, mobile apps, and the Yammer Success Center, that will improve communication within your organization.

Yammer is taking taking localization a step further following last year’s announcement of localization support and is introducing message translation in both the iOS and Android Yammer apps, powered by Microsoft Translator®. Whenever a Yammer conversation in these apps includes a language different from the user’s default language setting, a translate button will appear below the initial post. Clicking translate will instantly convert the entire conversation, including related responses, into the user’s default language. Clicking “show original text” will revert the conversation back to the initial language(s).

  

Check out the full announcement with all of the new features posted here and try these localizations improvements out for yourself!

Creating a VSIX Deployable Project (or Item) Template with Custom Wizard Support

MSDN Blogs - Tue, 06/10/2014 - 13:34

Every now and then, I get an interesting question or problem from a customer (thanks Uma) that highlights a need for some additional documentation, or at the least a sample or walkthrough to illustrate how to get from A to Z. In this instance, the question was "How do you localize a project (or item) template, to support multiple languages?". Better yet, what if that template uses a custom wizard assembly, and you want to deploy it with a VSIX package?

Given all the moving pieces involved, I've opted to break this down into a couple of different blog entries. The first being this one, which will walk you through creating the initial project. And then a follow up blog entry, that will detail the steps to localized the template, wizard assembly, and VSIX package.

Prerequisites

To follow this walkthrough, you will need to install the Visual Studio SDK that matches the version of Visual Studio you are using. If you aren't sure where to find it, there is a list of useful links on the very first entry of this blog that I keep up to date with links to various downloads and resources. Note, while I used VS 2013 Ultimate to create this project, this same technique can be used for VS 2012 and VS 2010 (Pro or better SKUs).

Getting Started

Upon installing the Visual Studio SDK, the following project templates are added to assist you in developing new project and item templates.

  • C# Item Template
  • C# Project Template
  • Visual Basic Item Template
  • Visual Basic Project Template

These Project templates create a baseline project or item template, that when built, produces a .zip file that you can manually copy into your ...\Documents\Visual Studio 20xx\Templates directory, and then used to create a new project, or add a new item to an existing project.

The Visual Studio SDK, also includes a stand-alone "VSIX Project" template, which can be used to deploy a template (in addition to other assets).

These VSIX projects do not generate an assembly by default. But if you manually edit a few properties in the .csproj, you can use the VSIX project to build an assembly and have it included as a part of the .VSIX payload.

So instead of creating a solution with a structure similar to the following:

   Solution - MyTemplateWithWizard
      - MyProjectTemplate   (produces the template as a .zip file)
      - MyTemplateWizard   (produces an assembly with an IWizard implementation)
      - MyTemplateWithWizardVSIX   (packages the template and assembly into a .VSIX)

You can actually implement the wizard assembly with the VSIX project, simplifying the solution structure such that there are only two projects required. For example:

   Solution - MyTemplateWithWizard
      - MyProjectTemplate  (produces the template as a .zip file)
      - MyProjectWizard   (builds the wizard assembly, packaging it and the template into a .VSIX)

The following is a walkthrough that will show you how to create a VSIX deployable project template with custom wizard support, using just the two projects as described above.

 

Create a new "C# Project Template" project
  1. Select the File.New.Project... menu item, to invoke the "Add New Project" dialog
  2. Select the "C# Project Template" template and enter a project name as shown below

  3. Click the "OK" button to create the initial template project

 

Add a new "VSIX Project" to the solution
  1. Right click the "Solution" node in the Solution Explorer, and select the Add.New Project... menu item, to invoke the "Add New Project" dialog
  2. Select the "VSIX Project" template and enter a project name as shown below

  3. Click the "OK" button to create and add the VSIX project to the solution

 

Add the template as an asset of the VSIX project.
  1. Open the project's source.extension.vsixmanifest file
  2. In the manifest designer, add a name or company to the "Author:" field
  3. Select the "Assets" tab, then click the "New" button as highlighted below

     
  4. In the "Add New Asset" dialog, select the Type, Source, and Project fields as shown below

     
      
Build and Verify
  1. Build the Solution
  2. Launch the VS Experimental Instance with CTRL+F5
  3. Select the File.New.Project... menu item, to invoke the "Add New Project" dialog
  4. Select the "MyProjectTemplate" and create a new project as shown below

     
Modify the template.
  1. Change some of the elements displayed in the New Project dialog, by editing the .vstemplate file
    1. Open the .vstemplate file
    2. Change the Name, Description, and DefaultName elements as highlighted below

      <?xmlversion="1.0"encoding="utf-8"?>
      <VSTemplateVersion="3.0.0"Type="Project"
      xmlns=http://schemas.microsoft.com/developer/vstemplate/2005xmlns:sdk="http://schemas.microsoft.com/developer/vstemplate-sdkextension/2010">
         <TemplateData>
            <Name>My Project</Name>
            <Description>My Custom Project Template</Description>
            <Icon>MyProjectTemplate.ico</Icon>
            <ProjectType>CSharp</ProjectType>
            <RequiredFrameworkVersion>2.0</RequiredFrameworkVersion>
            <SortOrder>1000</SortOrder>
            <TemplateID>0504f2de-af7a-4065-a542-f65ca8c61790</TemplateID>
            <CreateNewFolder>true</CreateNewFolder>
            <DefaultName>MyProject</DefaultName>
            <ProvideDefaultName>true</ProvideDefaultName>
         </TemplateData>
         <TemplateContent>
            <ProjectFile="ProjectTemplate.csproj"ReplaceParameters="true">
               <ProjectItemReplaceParameters="true"TargetFileName="Properties\AssemblyInfo.cs">AssemblyInfo.cs</ProjectItem>
               <ProjectItemReplaceParameters="true"OpenInEditor="true">Class1.cs</ProjectItem>
            </Project>
         </TemplateContent>
      </VSTemplate>  

  2. Rename Class1.cs to something more appropriate.
    1. Right click "Class1.cs" in the Solution Explorer, and select the "Rename" menu item
    2. Rename Class1.cs to MyProject.cs
    3. Open MyProject.cs, and change the classname from Class1 to MyProject, and add a simple comment as shown below

 

 

  1. Fixup the .vstemplate and .csproj
    1. Open the .vstemplate file, find and rename "Class1.cs" to "MyProject.cs"
    2. Open the template's .csproj file, find and rename "Class1.cs" to "MyProject.cs"
  2. (Optional) Build and Test in the Experimental Instance again

 

Modify the .VSIX project to build a custom wizard implementation.
  1. Modify the project's properties to build an assembly.
    1. Right click the VISX Project node in the Solution Explorer, and select "Unload Project"
    2. Right click the VISX Project node in the Solution Explorer, and select "Edit MyProjectWizard.cs"
    3. Change the following properties from "false" to "true"

      <IncludeAssemblyInVSIXContainer>true</IncludeAssemblyInVSIXContainer> 
      <IncludeDebugSymbolsInVSIXContainer>true</IncludeDebugSymbolsInVSIXContainer> 
      <IncludeDebugSymbolsInLocalVSIXDeployment>true</IncludeDebugSymbolsInLocalVSIXDeployment>
    4. Save MyProjectWizard.csproj
    5. Right click the VSIX Project node in Solution Explorer, and select "Reload Project"
  2. Add a reference to EnvDTE.dll. Select the envdte node in Solution Explorer, and in the Properties toolwindow, change the "Embed Interop Types" property to "False", to ensure a clean build
  3. Add a reference to the Microsoft.VisualStudio.TemplateWizardInterface.dll
  4. Right click the VSIX Project node in Solution Explorer, and select Add.Class... menu item
  5. Add a new class called MyProjectWizard.cs
  6. Replace the contents of MyProjectWizard.cs with the following

    using System;
    using System.Collections.Generic;
    using EnvDTE;
    using Microsoft.VisualStudio.TemplateWizard;

    namespace MyProjectWizard
    {
        public class MyProjectWizard : IWizard
        {
            private DTE _dte;

            public void BeforeOpeningFile(ProjectItem projectItem) { }
            public void ProjectFinishedGenerating(Project project) { }
            public void ProjectItemFinishedGenerating(ProjectItem projectItem) { }
            public void RunFinished() { }

            public void RunStarted(object automationObject, Dictionary<string, string> replacementsDictionary, WizardRunKind runKind, object[] customParams)
            {
                _dte = (DTE)automationObject;

                // add an entry to the dictionary to specify the string used for the $greeting$ token
                replacementsDictionary.Add("$greeting$", "Hello Custom Library");
            }

            public bool ShouldAddProjectItem(string filePath) { return true; }
        }
    }

  7. Open the source.extension.vsixmanifest, select the Assets tab, and click the "New" button
  8. In the "Add New Asset" dialog, select the Type, Source, and Project fields as shown below

  9. Select File.Save All to ensure all the above changes are saved
  10. Strong Name the Assembly (Wizard assemblies need to be strong named)
    1. Right Click the VSIX Project node in Solution Explorer, and select the Properties menu item
    2. In the Project Designer, select the "Signing" tab
    3. Check the "Sign the Assembly" checkbox as shown below

    4. Select "<New...> in the "Choose a strong name key file"
    5. In the "Create Strong Name Key" dialog, enter "key.snk" for the Key filename
    6. Uncheck the "Protect my key file with a password" checkbox, and click the OK button
       
Associate the Wizard with the project template
  1. Run SN.EXE -T on the wizard assembly to retrieve the public token key
  2. Tip: Create an external tool entry on the Tools menu, as described in Jeremiah Clark's blog Visual Studio Tip: Get Public Key Token for a Strong Named Assembly
  3. Open the template's .vstemplate file and add the following <WizardExtension> section

    <WizardExtension>
       <Assembly>MyProjectWizard, Version=1.0.0.0, Culture=neutral, PublicKeyToken=22c2a1a5fa7b6905</Assembly>
       <FullClassName>MyProjectWizard.MyProjectWizard</FullClassName>
    </WizardExtension>

  4. Open the template project's MyProject.cs file, and replace the comment line with the following

    using System;
    using System.Collections.Generic;
    $if$ ($targetframeworkversion$ >= 3.5)using System.Linq;
    $endif$using System.Text;

    namespace $safeprojectname$
    {
        // $greeting$
        public class MyProject
        {
        }

      
Build and Test the Solution
  1. Build the Solution
  2. Set a breakpoint on the MyProjectWizard.RunStarted method
  3. Launch the Experimental Instance with the debugger (F5)
  4. Select the File.New.Project... menu item, to invoke the "Add New Project" dialog
  5. Select the "My Project Template", and click the OK button
  6. When the breakpoint is hit, select Debug.Continue (or F5) and let the wizard run to completion
  7. Note the new comment added to the resulting MyProject.cs file

 

Summary

And there you have it, a VSIX deployable template with a custom wizard support. When finished, use the resulting .VSIX file to deploy the template to your production environment. And if you think others will find your template useful, consider uploading it to the VS Extension Gallery.

The resulting code from the above walkthrough can be downloaded from here.

eBook deal of the week: Microsoft Exchange Server 2013 Inside Out Connectivity, Clients, and UM

MSDN Blogs - Tue, 06/10/2014 - 13:30

List price: $39.99  
Sale price: $16.00
You save 60%

Buy

With a focus on connectivity, clients, and unified messaging, this book delivers the ultimate, in-depth reference to IT professionals planning and managing an Exchange Server 2013 deployment. Learn more

Terms & conditions

Each week, on Sunday at 12:01 AM PST / 7:01 AM GMT, a new eBook is offered for a one-week period. Check back each week for a new deal.

The products offered as our eBook Deal of the Week are not eligible for any other discounts. The Deal of the Week promotional price cannot be combined with other offers.

Data Binding Part 5- Dynamic Data from Rotten Tomatoes

MSDN Blogs - Tue, 06/10/2014 - 13:05

In Part 1 of this series I covered the basic theoretical idea behind data binding, and in Part 2, we got a little more concrete with a hands on example in code.  We created a Movie class, then bound the three properties of that object (title, rating, year), to our UI in both Windows and Windows Phone projects using a Universal Windows App.  Then, in Part 3, we took a look at implementing the INotifyPropertyChanged interface and the difference in OneWay and TwoWay binding.  In Part 4, we took it one step further.  Instead of just displaying one movie to our UI, we bound a list of static movies using ListView and ObservableCollection.  Now, we are going to display a list of dynamics movie data powered by the Rotten Tomatoes API.

If you are not familiar with Rotten Tomatoes you can check out the site, Rotten Tomatoes.  In general, Rotten Tomatoes is a go to source for movies; what’s in theaters, what’s new on dvd, what’s new on TV, etc..  With their API, you can make a call to RT and they will send you back a list of movies with numerous properties (ratings, synopsis, urls to posters, etc.).  Is it starting to click how this information might fit what we are working on here?  You know, binding a list of movies to our UI and what not.  It’s a perfect fit!

To work with the RT API, you will need to sign up and get an API key from their developers website.  After you do that, you can also check out the documentation for the API itself.  I won’t cover it in depth here -you can read into it yourself- but the concept is simple.  Make a call with a url, and RT sends you back a list of movies.  For starters, the base URI is http://api.rottentomatoes.com/api/public/v1.0. From there you can tack on your specific search and your API key.  A great way to get started with this is use the IO-Docs page, which allows you “try” different requests and see what is returned.  I highly recommend trying a few of these before moving on.

Just as a reference, in this example, I will be using the following request Uri, that will ask for a list of 16 movies in the box office in the United States. Obviously, you will need to replace [your-api-key] with your actual API key.

http://api.rottentomatoes.com/api/public/v1.0/lists/movies/box_office.json?limit=16&country=us&apikey=[your-api-key]

Now that we know a little bit about the RT API.  Let’s think about how we are going to use the JSON response that it sends us back.  The general idea is to make an HTTP request to the above url and convert that JSON string into a usable object in c#.  Therefore, we need to define an object that matches the model provided in the JSON response.  This might sound tedious since there are nested objects returned in each given query, but there’s hope in the form of a website called json2csharp.  With this website, you can simply give it a url that will return a json response, and it will generate the appropriate C# classes for us!  Trust me, this is great news and saves us a ton of time!

Input the url above with your app id, and you will see the classes generated as below.

If you scroll all the way down you can see the class for the root object, which is where we find the list of Movie objects as well as some links.

Let’s now create a new class in our Shared project called RottenTomatoes.cs. We will simply copy all of the classes we just generated into our new RottenTomatoes class while making a few small changes.  I am going to take the properties of the RootObject and make them properties of RottenTomatoes class, and get rid of the RootObject class completely.  Then, I am going to rename the Movie class within our RottenTomatoes class to RTMovie to differentiate itself from the Movie class that we have worked with in the previous posts.  After I do all of this, my new class looks like this.

class RottenTomatoes
    {
         public List<RTMovie> movies { get; set; }
        public Links2 links { get; set; }
        public string link_template { get; set; }

        public class ReleaseDates
        {
             public string theater { get; set; }
            public string dvd { get; set; }
        }

        public class Ratings
         {
            public string critics_rating { get; set; }
             public int critics_score { get; set; }
            public string audience_rating { get; set; }
            public int audience_score { get; set; }
        }

        public class Posters
        {
            public string thumbnail { get; set; }
             public string profile { get; set; }
            public string detailed { get; set; }
            public string original { get; set; }
        }

        public class AbridgedCast
         {
            public string name { get; set; }
            public string id { get; set; }
            public List<string> characters { get; set; }
        }

        public class AlternateIds
        {
            public string imdb { get; set; }
         }

        public class Links
        {
            public string self { get; set; }
            public string alternate { get; set; }
            public string cast { get; set; }
             public string clips { get; set; }
            public string reviews { get; set; }
            public string similar { get; set; }
        }

        public class RTMovie
        {
             public string id { get; set; }
            public string title { get; set; }
            public int year { get; set; }
             public string mpaa_rating { get; set; }
            public int runtime { get; set; }
            public string critics_consensus { get; set; }
            public ReleaseDates release_dates { get; set; }
            public Ratings ratings { get; set; }
            public string synopsis { get; set; }
            public Posters posters { get; set; }
            public List<AbridgedCast> abridged_cast { get; set; }
            public AlternateIds alternate_ids { get; set; }
            public Links links { get; set; }
        }

        public class Links2
        {
            public string self { get; set; }
            public string alternate { get; set; }
        }
     }

Whew.  Ok we have the model for our RottenTomatoes object created, now we need to go our and get the response.  We will do this in our MoviesDataSource.cs file that we created in the last post.  In the LoadData() method, we will replace the static data with dynamic data from RT.  First let’s go ahead and create a constant string in this class for our url and call it API_CALL;

private const string API_CALL = "http://api.rottentomatoes.com/api/public/v1.0/lists/movies/box_office.json?limit=16&country=us&apikey=[your-api-key]";

The next step is to make the http call to that url using an instance of HttpClient class.  Since we will be using the getStringAsync method of the HttpClient class, our loadData() method will now need to be marked as Async.  We will then “await” that response and assign it to a string variable.  So far out method looks like this.

async private void loadData()
{
            HttpClient wc = new HttpClient();
             string response = await wc.GetStringAsync(API_CALL);
}

**If you aren’t familiar with Asynchronous programming, you can read up Here.**

We have our JSON response stored in the string called response, so now we need to convert that string to an instance of our RottenTomatoes object.  To do this, we will use a NuGet package called json.net.  To add a reference to this package, in your Solution Explorer right click on your solution and then Manage NuGet Packages.  Search for Json.net and click install.  If done successful, you should see it show up in your Windows and Windows Phone projects under the References folder as “Newtonsoft.Json” like so.

With the reference to json.net we can use to now convert our json string and cast it to an instance of our RottenTomateos class with one line.

RottenTomatoes rt = (RottenTomatoes)JsonConvert.DeserializeObject<RottenTomatoes>(response);

Great now we have a RottenTomatoes object with all sorts of data, but we are just binding to a collection of Movie objects.  So, the last step is to convert each of the movies in the RottenTomatoes object to a Movie object and add them to our ObservableCollection.  We can use a simple foreach to iterate over each RTMovie object from the list of movies in the RottenTomateos object.  As we iterate, we can create a temp Movie object and set its fields appropriately from the fields of the RTMovie.  Ok, I admit that sounds pretty tricky, but let me show you the code.

foreach (RottenTomatoes.Movie m in rt.movies)
{
                     MoviesSchema temp = new MoviesSchema();
                     temp.title = m.title;
                    temp.year = m.year.ToString();
                    temp.original = m.posters.original;
                    temp.synopsis = m.synopsis;
                     collection.Add(temp)
}

Basically we are copying over all of the RTMovies as Movie objects since our UI was designed to bind to a Movie object.  We could have just easily changed the binding of our UI to bind to a list of RTMovie objects instead.  Either way works fine.  So, when I run my app one last time I see a dynamic list of movie data.

Again, this may not look super fancy, but if you are looking for UI design, you’ll have to find someone much more creative and artistic than myself.  Anyways, I hope this makes sense and that this series has helped to give you a thorough understanding of data binding, when and how to use it, and how it benefits you as a developer.  Thanks for following along the way!

Feel free to follow me on twitter for upcoming posts! @jquickwit  As always comment with any questions, comments, or concerns below!

Conduct a Git pull request on Visual Studio Online

MSDN Blogs - Tue, 06/10/2014 - 12:35

Today we are announcing that Git pull requests are available on Visual Studio Online. Many teams use code reviews to improve code quality. When you want people on your team to review code in a Git team project on Visual Studio Online, create a pull request.

Note: Some accounts are getting the pull request feature today and some will get it later this week. Create a topic branch

Before you commit your code in Visual Studio, create a topic branch.

Commit your changes to the topic branch.

When you are ready to share your work, publish the branch.

For example, Jamal creates his topic branch and pushes it to the server.

Create a pull request

Open the web portal.

In your web browser, create the pull request. Select your topic branch as the source and the branch you want to merge into as the target branch.

Specify the title, description, and assign reviewers.

Conduct a pull request

Reviewers make comments on specific lines of code. If you want to be specific, select a specific block of code before inserting the comment.

Reviewers add general comments to the pull request.

Tip: To add a new line to a comment, press Shift+Enter.

All conversations and other events appear on the Discussion tab.

Make changes on the source branch

To act on the feedback, the requestor revises the code on their dev machine and pushes the changes so that reviewers can see them. For example, Jamal takes Raisa's advice to change the color of the peppers.

Complete the pull request

Each reviewer approves or rejects the pull request.

A single approval is sufficient to approve the pull request. A single rejection overrides all approvals and causes the status to be rejected. When you approve or reject the pull request, team members are alerted if they have subscribed to alerts.

If the code in topic branch changes, your vote does not automatically change. So for example, if you approved the pull request but would want to re-check it if changes were made, you should make sure you stay notified about changes.

When the requestor and the reviewers are satisfied that the pull request is ready to merge, you can do it from the web browser.

After the merge, the target branch is updated with the changes from the topic branch.

After the merge, the topic branch (for example, jamal/breakfast) is still in the repository. To keep your repository from getting cluttered by obsolete branches, you can delete the topic branch in your web browser.

Your target branch has been updated and the topic branch has been deleted. All of the commits that were merged are still in the repo.

All the commits and comments in pull request are still available if you need to refer to them later.

Q&A Q: How can I make sure I'm notified when a pull request is created or changed?

A: If you are in the team room, you'll see notifications there.

If you want to be notified about new pull requests, changes, approvals, and rejections, then subscribe to email alerts.

Q: How do I see the full content of the file?

A: Select the file in the left pane.

To see changes inline:

Q: Why do I see "Target branch updated, retry merge"? What should I do about it?

A: If changes are pushed to the target branch during the pull request, retry the merge to make sure there are no conflicts.

If there are no conflicts, then you are ready to merge again.

If there are conflicts, see Q: Why do I see "Merge conflicts"? What should I do about it?

Q: Can I continue working on the target branch during the pull request? Can I merge changes from the target branch to the source branch?

A: Yes. For example, changes have been made on the jamal/breakfast source branch and on the raisa/breakfast target branch.

If you want to merge the changes from the target branch, pull the changes to your dev machine.

Next, merge the changes.

Q: Why do I see "Merge conflicts"? What should I do about it?

A: Conflicts can occur when you try to merge two branches. For example, a conflict often occurs when you merge two branches in which the same file is changed.

If you are trying to merge from source to target, you see merge conflicts in the pull request.

You are also blocked by the conflict if you try to merge from target to source.

After you merge the branches in Visual Studio, use the merge tool to resolve the conflicts.

Next, commit the merge.

Finally, push the merge.

Q: Why did a comment move or disappear?

A: Comments are anchored to the line number and column of the commit on which comment was made. That's why comments can disappear or move in the discussion view.

Questions? Suggestions? Feedback?

I invite you to post:

Pages

Subscribe to Randy Riness @ SPSCC aggregator
Drupal 7 Appliance - Powered by TurnKey Linux