<?xml version="1.0" encoding="utf-8"?>
<rss xmlns:atom="http://www.w3.org/2005/Atom" xmlns:sy="http://purl.org/rss/1.0/modules/syndication/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
  version="2.0">
  <channel>
    <title>Commercial Software Engineering Team Africa</title>
    <atom:link
      href="https://docs.microsoft.com/archive/blogs/southafrica/feed.xml"
      rel="self"
      type="application/rss+xml" />
    <link>https://docs.microsoft.com/archive/blogs/southafrica/feed.xml</link>
    <description />
    <lastBuildDate>Wed, 17 Apr 2019 03:13:00 GMT</lastBuildDate>
    <language>en-US</language>
    <sy:updatePeriod>hourly</sy:updatePeriod>
    <sy:updateFrequency>1</sy:updateFrequency>
    <item>
      <title>Publishing existing maven artifacts to VS Package Management</title>
      <link>https://docs.microsoft.com/archive/blogs/southafrica/publishing-existing-maven-artifacts-to-vs-package-management</link>
      <pubDate>Fri, 18 May 2018 15:07:39 GMT</pubDate>
      <dc:creator><![CDATA[ahmeds]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/southafrica/?p=3405</guid>
      <description><![CDATA[On a recent customer engagement, we hit a situation where the customer had some artifacts that were...]]></description>
      <content:encoded><![CDATA[<p>On a recent customer engagement, we hit a situation where the customer had some artifacts that were available locally (obtained through a script), but these were not available in a maven repo. When we tried to build the solution via a build server it failed.</p><p>We setup a maven based repository using VSTS Package Management as documented <a href="https://docs.microsoft.com/en-us/vsts/package/get-started-maven?view=vsts">here</a>, but this was not clear on how to upload an existing POM/JAR artifact. </p><p>After some research, and help from colleagues - <a title="https://maven.apache.org/guides/mini/guide-3rd-party-jars-remote.html" href="https://maven.apache.org/guides/mini/guide-3rd-party-jars-remote.html">https://maven.apache.org/guides/mini/guide-3rd-party-jars-remote.html</a> provided the hints</p><p>For POC purposes I tried to deploy JTidy to VSTS Package Management – and this command did it.</p><p><br></p><p align="left"><em>mvn deploy:deploy-file -DpomFile=C:\jtidy\jtidy-4aug2000r7-dev.pom -Dfile=C:\jtidy\jtidy-4aug2000r7-dev.jar -DrepositoryId=vstsinstance-visualstudio.com-mavenfeed -Durl=https://vsinstance.pkgs.visualstudio.com/_packaging/MavenFeed/maven/v1</em><p><br><p>You obviously need to change the values (eg vstsinstance etc), and need to ensure you follow the initial instructions to setup and Maven feed, as well as the proper settings.xml file<p>Hope this helps,<p>Ahmed]]></content:encoded>
    </item>
    <item>
      <title>Use Nuget package 2.2 for VS App Center testing</title>
      <link>https://docs.microsoft.com/archive/blogs/southafrica/use-nuget-package-2-2-for-vs-app-center-testing</link>
      <pubDate>Mon, 14 May 2018 11:14:54 GMT</pubDate>
      <dc:creator><![CDATA[ahmeds]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/southafrica/?p=3395</guid>
      <description><![CDATA[I was doing a simple POC using Xamarin Forms, Xamarin UITest and VS App Center. I created a standard...]]></description>
      <content:encoded><![CDATA[<p>I was doing a simple POC using Xamarin Forms, Xamarin UITest and VS App Center. I created a standard Forms and UI Tests projects, and setup a build in VSTS.</p><p>When trying to run the tests via App Center in VSTS (using the builtin task), I got an error </p><p align="left"><em>esoent no such file or directory</em></p><p align="left">After much troubleshooting, and trying to run the appcenter CLI directly, I figured out the issue. You need v2.2 of the test-cloud.exe in order for this to work. The nuget package that is installed when creating a new UITest is 1.3X. As soon as upgraded the Nuget package to 2.2, everything was good.</p><p align="left">Ahmed</p><p align="left"><br></p><p align="left"><br></p><p align="left"><br></p><p align="left"></p>]]></content:encoded>
    </item>
    <item>
      <title>Setting up a Windows/VS Jenkins VM Agent</title>
      <link>https://docs.microsoft.com/archive/blogs/southafrica/setting-up-a-windowsvs-jenkins-vm-agent</link>
      <pubDate>Fri, 11 May 2018 15:31:52 GMT</pubDate>
      <dc:creator><![CDATA[ahmeds]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/southafrica/?p=3385</guid>
      <description><![CDATA[Note – I am newbie to Jenkins. The steps below might not be best practice, but hopefully useful for...]]></description>
      <content:encoded><![CDATA[<p><i>Note – I am newbie to Jenkins. The steps below might not be best practice, but hopefully useful for someone looking to setup Jenkins Windows agent. It took me some time to figure this out so thought it might be useful to share.</i><p>I was following the really good lab at <a href="https://almvm.azurewebsites.net/labs/vstsextend/jenkins/">https://almvm.azurewebsites.net/labs/vstsextend/jenkins/</a> on how to use Jenkins. That scenario sets up a Jenkins infrastructure on Azure via <a href="https://portal.azure.com/#create/azure-oss.jenkinsjenkins">https://portal.azure.com/#create/azure-oss.jenkinsjenkins</a>. The lab then proceeds to build a maven based app on a Linux box. <p>As a prerequisite to below, you should probably follow the lab above first, especially the provisioning of Jenkins using the solution template. <p>The obvious follow-up for me was how to build a Windows based app (in this case an ASP.NET application using the full .NET Framework) in the same environment. I am a newbie to Jenkins but picked up the following:<p>1) Jenkins has a concept of master and slaves. You could look to set a Windows based slave manually<p>2) The Jenkins infrastructure that is provisioned automatically installs some plugins that allows you to scale or create new environments using Azure VM Agents plugin. More information ia available at <a href="https://docs.microsoft.com/en-us/azure/jenkins/jenkins-azure-vm-agents">https://docs.microsoft.com/en-us/azure/jenkins/jenkins-azure-vm-agents</a> and <a href="https://plugins.jenkins.io/azure-vm-agents">https://plugins.jenkins.io/azure-vm-agents</a><p>I decided to go with the second option. As I was looking to build a .NET Framework ASP.NET app, I felt the easiest way to get all the dependencies on the machine was to have a VM that had a Visual Studio configured. <p>In summary : I wanted to setup a Jenkins agent running Windows and Visual Studio leveraging the Azure VM Agent task.<p>The intention is not to provide a step by step walkthrough. The general details of using the Azure VM agent plugins are provided in the URLs listed above. <p><strong><font size="3">Steps</font></strong> <p>1) I set the label to something that my build could use to select this agent – in the screenshot below it is “vs2”<p><a href="https://msdnshared.blob.core.windows.net/media/2018/05/clip_image0022.png"><img width="635" height="388" title="clip_image002" alt="clip_image002" src="https://msdnshared.blob.core.windows.net/media/2018/05/clip_image002_thumb1.png" border="0"></a><p>2) You can specify the other usual Azure settings in terms of machine size, region etc as shown above<p>3) The important bit is the image reference where I specified <p>a. Use Advanced Image Configuration<p>b. I then specified the various details on the image. In this case<ul><li>ImagePublisher=MicrosoftVisualStudio</li><li>ImageOffer=VisualStudio</li><li>ImageSKU=VS-2017-Ent-WS2016</li><li>ImageVersion=latest</li></ul><p>c. I set the image type to Windows, Launch method SSH and ticked the box to pre-install SSH<p><a href="https://msdnshared.blob.core.windows.net/media/2018/05/clip_image0042.png"><img width="666" height="421" title="clip_image004" alt="clip_image004" src="https://msdnshared.blob.core.windows.net/media/2018/05/clip_image004_thumb2.png" border="0"></a><p><em>Where did I get these settings from?</em> - I went into the Azure portal and went through the process of creating a Visual Studio VM. Before you create a VM, you have the option to download the template. Open this template and look for the section around on StorageProfile. This is where you can get the values from (the values in the screenshot differ from above). Note – there is no need to create the VM from the portal. You can cancel it. The point is get the template so we can get easily derive the values. If you want a different VM then use the appropriate values. There might be an easier way to do this<p><a href="https://msdnshared.blob.core.windows.net/media/2018/05/clip_image006.png"><img width="613" height="222" title="clip_image006" alt="clip_image006" src="https://msdnshared.blob.core.windows.net/media/2018/05/clip_image006_thumb.png" border="0"></a><p><a href="https://msdnshared.blob.core.windows.net/media/2018/05/clip_image0082.png"><img width="613" height="270" title="clip_image008" alt="clip_image008" src="https://msdnshared.blob.core.windows.net/media/2018/05/clip_image008_thumb2.png" border="0"></a><p>4) IMPORTANT – I had to set up the initialization script under the section . If you hover over the information icon, it gives you the clue and advises you to use the script at <a href="https://raw.githubusercontent.com/Azure/jenkins/master/agents_scripts/Jenkins-Windows-Init-Script-Jnlp.ps1">https://raw.githubusercontent.com/Azure/jenkins/master/agents_scripts/Jenkins-Windows-Init-Script-Jnlp.ps1</a> for a Windows machine. This is what I used. The script is listed below as well (just in case!)<p>5) The Jenkins that was deployed sets up set of credentials, but I had no idea what the password was. So I setup a new set of credentials<p><a href="https://msdnshared.blob.core.windows.net/media/2018/05/clip_image0102.png"><img width="668" height="214" title="clip_image010" alt="clip_image010" src="https://msdnshared.blob.core.windows.net/media/2018/05/clip_image010_thumb2.png" border="0"></a><p>6) When I setup a new build in Jenkins I set <em>restrict where this project can be run</em> – and set it to same label that was set in Step (1)<p><a href="https://msdnshared.blob.core.windows.net/media/2018/05/clip_image0122.png"><img width="665" height="362" title="clip_image012" alt="clip_image012" src="https://msdnshared.blob.core.windows.net/media/2018/05/clip_image012_thumb2.png" border="0"></a><p><br><p><br><p><br><p>Script (should be same as <a href="https://raw.githubusercontent.com/Azure/jenkins/master/agents_scripts/Jenkins-Windows-Init-Script-Jnlp.ps1">https://raw.githubusercontent.com/Azure/jenkins/master/agents_scripts/Jenkins-Windows-Init-Script-Jnlp.ps1</a> and better to directly use that. Included below just in case the script is moved)<p># Download and Install Java<p>Set-ExecutionPolicy Unrestricted<p>#Default workspace location<p>Set-Location C:\<p>$source = "http://download.oracle.com/otn-pub/java/jdk/8u131-b11/d54c1d3a095b4ff2b6607d096fa80163/jdk-8u131-windows-x64.exe"<p>$destination = "C:\jdk-8u131-windows-x64.exe"<p>$client = new-object System.Net.WebClient<p>$cookie = "oraclelicense=accept-securebackup-cookie"<p>$client.Headers.Add([System.Net.HttpRequestHeader]::Cookie, $cookie)<p>$client.downloadFile($source, $destination)<p>$proc = Start-Process -FilePath $destination -ArgumentList "/s" -Wait -PassThru<p>$proc.WaitForExit()<p>[System.Environment]::SetEnvironmentVariable("JAVA_HOME", "c:\Program Files\Java\jdk1.8.0_131", "Machine")<p>[System.Environment]::SetEnvironmentVariable("PATH", $Env:Path + ";c:\Program Files\Java\jdk1.8.0_131\bin", "Machine")<p>$Env:Path += ";c:\Program Files\Java\jdk1.8.0_131\bin"<p>#Disable git credential manager, get more details in https://support.cloudbees.com/hc/en-us/articles/221046888-Build-Hang-or-Fail-with-Git-for-Windows<p>git config --system --unset credential.helper<p># Install Maven<p>$source = "https://archive.apache.org/dist/maven/maven-3/3.5.2/binaries/apache-maven-3.5.2-bin.zip"<p>$destination = "C:\maven.zip"<p>$webClient = New-Object System.Net.WebClient<p>$webClient.DownloadFile($source, $destination)<p>$shell_app=new-object -com shell.application<p>$zip_file = $shell_app.namespace($destination)<p>mkdir 'C:\Program Files\apache-maven-3.5.2'<p>$destination = $shell_app.namespace('C:\Program Files')<p>$destination.Copyhere($zip_file.items(), 0x14)<p>[System.Environment]::SetEnvironmentVariable("PATH", $Env:Path + ";C:\Program Files\apache-maven-3.5.2\bin", "Machine")<p>$Env:Path += ";C:\Program Files\apache-maven-3.5.2\bin"<p># Install Git<p>$source = "https://github.com/git-for-windows/git/releases/latest"<p>$latestRelease = Invoke-WebRequest -UseBasicParsing $source -Headers @{"Accept"="application/json"}<p>$json = $latestRelease.Content | ConvertFrom-Json<p>$latestVersion = $json.tag_name<p>$versionHead = $latestVersion.Substring(1, $latestVersion.IndexOf("windows")-2)<p>$source = "https://github.com/git-for-windows/git/releases/download/v${versionHead}.windows.1/Git-${versionHead}-64-bit.exe"<p>$destination = "C:\Git-${versionHead}-64-bit.exe"<p>$webClient = New-Object System.Net.WebClient<p>$webClient.DownloadFile($source, $destination)<p>$proc = Start-Process -FilePath $destination -ArgumentList "/VERYSILENT" -Wait -PassThru<p>$proc.WaitForExit()<p>$Env:Path += ";C:\Program Files\Git\cmd"]]></content:encoded>
    </item>
    <item>
      <title>How HITS Solutions Is Using Xamarin.Forms To Offer A Productivity App That Manages Employee Development Plans</title>
      <link>https://docs.microsoft.com/archive/blogs/southafrica/how-hits-solutions-is-using-xamarin-forms-to-offer-a-productivity-app-that-manages-employee-development-plans</link>
      <pubDate>Sat, 30 Sep 2017 23:30:12 GMT</pubDate>
      <dc:creator><![CDATA[Sherif El Mahdi]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/southafrica/?p=3155</guid>
      <description><![CDATA[HITS Products | HITS Customers | Contact HITS
Microsoft and HITS teamed up to build Azure-backed...]]></description>
      <content:encoded><![CDATA[<a target="_blank" href="http://www.hitssolutions.com/products" rel="noopener">HITS Products</a> | <a target="_blank" href="http://www.hitssolutions.com/clients/" rel="noopener">HITS Customers</a> | <a target="_blank" href="http://www.hitssolutions.com/contact/" rel="noopener">Contact HITS</a>
<h3>Microsoft and HITS teamed up to build Azure-backed Xamarin productivity app that would facilitate managing employee development plans</h3>
<p style="text-align: center"><a href="https://msdnshared.blob.core.windows.net/media/2017/09/login.jpg"><img width="300" height="198" class=" wp-image-3156 alignleft" alt="" src="https://msdnshared.blob.core.windows.net/media/2017/09/login-300x198.jpg" /></a></p>
<p style="text-align: center"><a href="https://msdnshared.blob.core.windows.net/media/2017/09/home.jpg"><img width="300" height="200" class=" wp-image-3165 alignleft" alt="" src="https://msdnshared.blob.core.windows.net/media/2017/09/home-300x200.jpg" /></a></p>
The Xamarin app allows the customers of HITS to manage their employee development plan; through the app you can create any number of development plans where each Development can target certain group of employees.

The Development plan contains configurable number of stages and each stage contains numbers of skills that should be developed and tracked to assure the employees development.

The manager &amp; the employee agrees on a set of skills and KPIs at each stage, then the app guides the employee through set of actions and interventions that will lead to develop the required skills, these actions are triggered by other development modules in the app like training, objectives, and appraisals module. The app is the one-stop shop for assigning the development plans, and skills, tracking the progress of the interventions throughout the stages.
<blockquote>
<div>"When we took the decision to start mobile development to expand our main HR product, we faced three challenges; upskilling of the team as they all are web developers, time frame to produce a certain HR model over the mobile platforms and finally how we keep our development environment as it is.</div>
<div>

Xamarin answered the three challenges by providing cross platform development (time factor) , XAML support (similarity to ASP.Net model in utilizing markup and code behind)  and all the projects are within a solution running on VS 2015 and fully integrating with TFS."
<div>

-Mina Monir, Director of Research and Development, HITS

</div>
</div></blockquote>
<div></div>
<h4><span>Application Functionalities</span></h4>
<h5><strong>1) Employee Functionalities:</strong></h5>
<ul>
 	<li><span> </span>Join a development plan</li>
 	<li>Track the progress according to the chosen development plan</li>
 	<li>File self-service forms to complete the actions required to develop a specific skill</li>
 	<li>Track changes made by managers in skills order or KPI score after the completion of a specific stage</li>
</ul>
<img src="https://blogimagescse.blob.core.windows.net/blogimages/Managemyplanemployee.jpg" width="327" height="218" class="alignnone " /> <img src="https://blogimagescse.blob.core.windows.net/blogimages/enrollEmp.jpg" width="325" height="215" class="alignnone " />

<img src="https://blogimagescse.blob.core.windows.net/blogimages/manageskillsemployee.jpg" width="323" height="216" class="alignnone " /> <img src="https://blogimagescse.blob.core.windows.net/blogimages/manageInterventionsemployee.jpg" width="333" height="218" class="alignnone " />

&nbsp;
<h5 style="text-align: left"><strong>2) Manager Functionalities:</strong></h5>
<ul>
 	<li>Manage all employees' development plans</li>
 	<li><span> </span>Enroll employees in a development plan at each stage</li>
 	<li>Order the skills to be developed for the employees</li>
 	<li>Complete actions and forms required to step employees from stage to stage</li>
 	<li>Evaluate employees' KPIs after the completion of their stages</li>
</ul>
<img width="387" height="251" class="alignnone " src="https://blogimagescse.blob.core.windows.net/blogimages/managemyteammanager.jpg" /> <img width="376" height="246" class="alignnone " src="https://blogimagescse.blob.core.windows.net/blogimages/appraisalmanager.jpg" />

&nbsp;
<h4><span>Key technologies:</span></h4>
<ul>
 	<li><a target="_blank" href="https://developer.xamarin.com/guides/xamarin-forms" rel="noopener">Xamarin.Forms</a></li>
 	<li><a target="_blank" href="https://docs.microsoft.com/en-us/azure/app-service/" rel="noopener">Azure App Service</a></li>
 	<li><a target="_blank" href="https://docs.microsoft.com/en-us/azure/app-service-api/" rel="noopener">Azure API Apps</a></li>
 	<li><a target="_blank" href="http://swagger.io/" rel="noopener">Swagger</a></li>
 	<li><a target="_blank" href="https://docs.microsoft.com/en-us/azure/sql-database/" rel="noopener">Azure SQL</a></li>
 	<li><a target="_blank" href="https://docs.microsoft.com/en-us/azure/storage/storage-xamarin-blob-storage" rel="noopener">Azure Blobs</a></li>
 	<li>XAML/C#</li>
</ul>
<h4></h4>
<h4>Core Team:</h4>
<ul>
 	<li>Minaa Monir - Director of Research &amp; Development, HITS</li>
 	<li><span><a target="_blank" href="https://twitter.com/_SherifElMahdi" rel="noopener">Sherif El Mahdi</a>, Senior </span>Technical Evangelist, Microsoft</li>
 	<li>Sara Ahmed - Technical Evangelist, Microsoft</li>
 	<li>Nour Ramadan - Technical Evangelist, Microsoft</li>
</ul>
&nbsp;
<h3>Challenge</h3>
HITS offers a set of solutions under the umbrella of HITS DNA; HR &amp; Payroll Solution, Time Management Solution and Citizen Management Solution where all of them are web apps.

HITS team decided to develop their new solution  "Employee Development Plans App" as a mobile application targeting Android, iOS and Windows with the following constraints: shortest go-to-market time, lowest cost in terms of upskilling HITS development team, highest code sharing across all the supported platforms and native user experience.

In order to fit into such constraints, HITS team wanted to use Xamarin mobile development approach capitalizing on the XAML/C# experience of their development team.

&nbsp;
<h3><span>Solution, steps, and delivery</span></h3>
Before digging deep into the development of HITS Azure-Backed Xamarin application, let's have a bird's-eye view on the architecture behind all HITS DNA web solutions (HR &amp; Payroll Solution, Time Management Solution and Citizen Management Solution):

<img width="507" height="316" class="alignnone " src="https://blogimagescse.blob.core.windows.net/blogimages/architecture.png" />

&nbsp;

Web Role Instances: Set of cloud services behind azure application gateway with WAF enabled feature, these cloud services are the main HR system application(ASP.NET application) - Multi tenant.

Load Balancer: Azure application gateway with WAF enabled feature - Multi tenant.

Virtual Machines - Alerting: SQL VM machine utilizing SQL reporting services data driven subscription to build user defined Email alerts - Multi tenant.

Virtual Machines - Reporting: SQL VM machine utilizing SQL reporting services for rendering reports from the cloud service web application - Multi tenant.

Azure SQL Database : the main HR system Database - Single tenant.

Blob Storage : the main storage for HR files (letters , HR documents , contracts copy , etc...) - Single tenant.

In this case, we are mainly focusing on the development of HITS Azure-Backed Xamarin client application. Basically, It's a cross-platform mobile application implemented using Xamarin.Forms that consumes Azure API App and uses SQL Azure DB &amp; Azure Blobs for storage.

&nbsp;

<img width="119" height="312" class="alignnone " src="https://blogimagescse.blob.core.windows.net/blogimages/architectureFocused.png" />
<h4><span>[Server Side - Azure API App]</span></h4>
<h5><strong>Building Azure API App as a REST model:</strong></h5>
<blockquote>"Azure API Apps provided us with very quick and simple deployment and we found it extremely easy to stand up an HTTP endpoint for our client application."  -Mina Monir, Director of Research and Development, HITS</blockquote>
To start building the mobile application, HITS team needed to build a REST model that can be interfaced to the Xamarin mobile app representing the data tier. Moreover, scaling automatically and having built-in load-balancing made an Azure API APP a natural choice for HITS.

<a href="https://msdnshared.blob.core.windows.net/media/2017/09/addAPI.png"><img width="470" height="285" class="alignnone wp-image-3166" alt="" src="https://msdnshared.blob.core.windows.net/media/2017/09/addAPI-300x182.png" /></a>

Here's the solution structure:

<a href="https://msdnshared.blob.core.windows.net/media/2017/09/structure.png"><img width="471" height="284" class="alignnone wp-image-3175" alt="" src="https://msdnshared.blob.core.windows.net/media/2017/09/structure-300x181.png" /></a>

The API covers the following:
<ul>
 	<li>Authentication through HTTPS headers</li>
 	<li>Filter pass-through based on the authentication</li>
 	<li>Models built over HITS Azure database</li>
 	<li>Web routing based on action tags</li>
 	<li>Enabled swagger interface</li>
</ul>
HITSRestServices project provides REST functionality to be called by the client apps where the API layer provides Swagger metadata for each API call facilitating easy cross-platform client SDK generation.

Here’s a typical controller interface allowing access to the model layer and Swagger metadata. The method is checking the authentication validity and returns either empty structures or hits the entity to GET or POST the data based on the message parameters.

[code language="csharp"]
using System.web.http;
using HITSRestServices.Models;

namespace HITSRestServices.Controllers
{
  public class EmployeeBasicDatasController : ApiController
  {
    private NASDataSource db = new NASDataSource();

    public IQueryable GetEmployeebasicDatas(string userLogoname, int empid, Nullable mydate, string where)
    {

      if (RequestContext.Principal.Identity.IsAuthenticated == false)
      return Enumerable.Empty().AsQueryable();
      else
      {
        NASdataSource db1 = new NASDataSource();
        try
        {
          return db1.WebAPIGetEmployeeBasicData(userLogonName, empid, mydate, where).AsQueryable();
        }
        catch (Exception ex)
        {
          return Enumerable.Empty().AsQueryable();
        }
     }
   }

  protected override void Dispose(bool disposing)
  {
    if (disposing)
    {
      db.Dispose();
    }
    base.Dispose(disposing);
  }
 }
}
[/code]

After developing the API, we hosted the API as Azure API App under the Azure App Service umbrella, which gave us the documentation of the API using Swagger without additional effort.

<a href="https://msdnshared.blob.core.windows.net/media/2017/09/swagger1.png"><img width="355" height="366" class="alignnone wp-image-3195" alt="" src="https://msdnshared.blob.core.windows.net/media/2017/09/swagger1-291x300.png" /></a>
<h4></h4>
<h4></h4>
&nbsp;
<h4><span>[Client Side - Xamarin.Forms]</span></h4>
<h5><strong>Consuming Azure API App from Xamarin.Forms Client Application</strong></h5>
One of the big challenges that has been solved by Azure API App is that the client side can automatically consume the API without any development effort. It's as simple as that:

Right Click on the Project -&gt; Add -&gt; REST API Client -&gt; Select the hosted Azure API App.

This automatically sends the swagger documentation needed by visual studio populating the whole model that's ready to be used.

<a href="https://msdnshared.blob.core.windows.net/media/2017/09/consume.png"><img width="492" height="254" class="alignnone wp-image-3205" alt="" src="https://msdnshared.blob.core.windows.net/media/2017/09/consume-300x155.png" /></a> <a href="https://msdnshared.blob.core.windows.net/media/2017/09/consume2.png"><img width="575" height="253" class="alignnone wp-image-3215" alt="" src="https://msdnshared.blob.core.windows.net/media/2017/09/consume2-300x132.png" /></a>

At this stage the Xamarin projects are ready to build view models based on the populated models.

A Sample View Model looks like the following after adding the references of HITSServicesClient and HITSServicesClient.Models.

[code language="csharp"]
    using System;
    using System.Windows.Input;
    using Xamarin.Forms;
    using System.ComponentModel;
    using System.Runtime.CompilerServices;
    using System.Diagnostics;
    using HITSServicesClient;
    using HITSHRDev.Views;
    using HITSHRDev;
    using System.Collections;
    using HITSServicesClient.Models;
    using System.Collections.Generic;
    
    namespace HITSHRDev.ViewModels
    {
    	public class VMEmployee : INotifyPropertyChanged
    	{
   		 int taps = 0;
   		 string numberOfTapsTapped;
    
    	 public IList&amp;amp;amp;amp;lt;EmployeeBasicData&amp;amp;amp;amp;gt; Employees { get; set; }
     	 public object iteml { get; set; }
    	 public VMEmployee(User NasUser,object item,int EmpId)
     	 {
    		 Employees = NasUser.HITAPIs.EmployeeBasicDatas.GetEmployeeBasicDatas(NasUser.Username, EmpId, DateTime.Now, &quot;&quot;);
    		 iteml = item;
     	 	 tapCommand = new Command(OnTapped);
   		 }
  	 	 ICommand tapCommand; 

[/code]

<h5><strong>Building the application UI using Xamarin.Forms</strong></h5>
Part of the app UI-related requirements is to have a "store like" navigation UI experience in addition to showing the employees data in business card-presentation format as shown below:

<img width="181" height="321" class="alignnone " src="https://blogimagescse.blob.core.windows.net/blogimages/screenshotUI01.png" /> <img width="443" height="260" class="alignnone " src="https://blogimagescse.blob.core.windows.net/blogimages/screenshotUI02.png" />

In order to meet the two requirements mentioned above, HITS team developed a custom UI control that inherits from Xamarin.Forms.Grid. Moreover, the team implemented a generic view cell that can be binded to different view models and can be positioned as the data item of the new grid class.

[code language="html"]
  &amp;amp;amp;amp;lt;H:HStackLayout HorizontalOptions=&quot;Center&quot; VerticalOptions=&quot;CenterAndExpand&quot; BackgroundColor=&quot;Transparent&quot;&amp;amp;amp;amp;gt;
    &amp;amp;amp;amp;lt;H:HMetroGridView HorizontalOptions=&quot;FillAndExpand&quot; VerticalOptions=&quot;FillAndExpand&quot; x:Name=&quot;GridView&quot; RowSpacing=&quot;5&quot; ColumnSpacing=&quot;5&quot; MaxColumns=&quot;4&quot; TileHeight=&quot;160&quot; IsClippedToBounds=&quot;False&quot;&amp;amp;amp;amp;gt;
    &amp;amp;amp;amp;lt;/H:HMetroGridView&amp;amp;amp;amp;gt;
    &amp;amp;amp;amp;lt;/H:HStackLayout&amp;amp;amp;amp;gt;
[/code]

<h5><strong>Using Xamarin Cross-Platform Plugins</strong></h5>
One of the main advantages of using Xamarin is the possibility of sharing a significant portion of the source code across all the supported platforms. github.com/xamarin/plugins maintains a list of open-source plugins which can be used in Xamarin-based applications. Here's an example showing how HITS development team used file picker in a cross-platform fashion to pick a file then upload it to Azure Blobs.

<img width="555" height="60" class="alignnone " src="https://blogimagescse.blob.core.windows.net/blogimages/nuget.png" />

&nbsp;

[code language="csharp"]
     filedata = await CrossFilePicker.Current.PickFile();
     filebytes = filedata.DataArray;
    
     StorageCredentials credss = new StorageCredentials(&quot;hitsfiles&quot;, &quot;YOUR BLOB KEY HERE&quot;);
     CloudBlobContainer tempContainer = new CloudBlobContainer(
      new Uri(&quot;https://hitsfiles.blob.core.windows.net/hitimages&quot;),credss);
    
      SharedAccessBlobPolicy sasConstraints = new SharedAccessBlobPolicy();
      sasConstraints.SharedAccessExpiryTime = DateTime.UtcNow.AddHours(4);
      sasConstraints.Permissions = SharedAccessBlobPermissions.Write  
      |SharedAccessBlobPermissions.List;
    
      //Generate the shared access signature on the container, setting the constraints   
      directly on the signature.
      string sasContainerToken = tempContainer.GetSharedAccessSignature(sasConstraints);
    
      StorageCredentials cred = new StorageCredentials(sasContainerToken);
    
      try
      {
     	// Instantiate a Blob store container based on the info in the returned item.
   	    CloudBlobContainer container = new CloudBlobContainer(
       	new Uri(&quot;https://hitsfiles.blob.core.windows.net/hitimages&quot;),cred);
    
    	// Upload the new image as a BLOB from the stream.
      	CloudBlockBlob blobFromSASCredential =
    	container.GetBlockBlobReference(Guid.NewGuid().ToString() + &quot;.jpg&quot;);
    
    	await blobFromSASCredential.UploadFromByteArrayAsync(filebytes,0,filebytes.Length);

    	string ImageLink = blobFromSASCredential.Uri.ToString();
    
      }
      catch (Exception ex)
      {
 	    //Do Something to handle exceptions
      }
[/code]

<h5><strong>Xamarin.Forms Performance Challenge</strong></h5>
HITS team faced a performance issue with Xamarin.Forms GridView as it was taking too long to display the data of the employees in "Manage My Team" View which is built using XAML.

Manage My Team View:

<img width="628" height="368" class="alignnone " src="https://blogimagescse.blob.core.windows.net/blogimages/screenshotUI02.png" />

&nbsp;

In order to optimize the poor layout performance, HITS team applied the following corrective actions in XAML:
<ul>
 	<li>Using Fixed size rows and columns instead of using Auto Size whenever it's possible in addition to using FillAndExpand or LayoutOptions.Fill.</li>
</ul>

[code language="html"]
 &amp;amp;amp;amp;lt;H:HMetroEmployees HorizontalOptions=&quot;FillAndExpand&quot; VerticalOptions=&quot;FillAndExpand&quot; x:Name=&quot;GrdView&quot; RowSpacing=&quot;5&quot; ColumnSpacing=&quot;5&quot; MaxColumns=&quot;4&quot; TileHeight=&quot;160&quot; IsClippedToBounds=&quot;False&quot; &amp;amp;amp;amp;gt;
      &amp;amp;amp;amp;lt;/H:HMetroEmployees&amp;amp;amp;amp;gt;
[/code]

<ul>
 	<li>Removing all the unnecessary Label text measurements as measuring text affects performance.</li>
 	<li>Enabling XAML Compiler as it removes some of the load time for XAML elements.</li>
</ul>

[code language="csharp"]
//Enabling XAML Compiler on the assembly level
[assembly:&amp;amp;amp;amp;nbsp;XamlCompilation&amp;amp;amp;amp;nbsp;(XamlCompilationOptions.Compile) 
[/code]

<ul>
 	<li>Reducing unnecessary bindings as bindings aren't cost efficient.</li>
</ul>
Beside "Manage My Team" View, some views in the app were built in run-time from the code behind (C#) and the following corrective action was taken as well:
<ul>
 	<li>Packing Children before Parents.</li>
</ul>

[code language="csharp"]
layout.Children.Add(nasImage); //Children
layout.Children.Add(nasLabel); //Children
page.Content= layout;  //Parent
[/code]

<h3><span>Conclusion</span></h3>
With this project, HITS team strengthened their Xamarin muscle for any upcoming mobile-based projects. The project now is in the publishing phase to provide HITS customers with one more pillar under HITS DNA umbrella.
<h4><span>General Lessons:</span></h4>
<ul>
 	<li>100% of the Web Service Access Code, Processing the Logic and Using the Database is a shared code across the 3 platforms.</li>
 	<li>Using Portable Class Libraries (PCL) for sharing code over the Shared Project style made the unit testing easier. However PCL may not be the optimal solution as platform-specific libraries cannot be referenced.</li>
 	<li>Since the app doesn't need to be highly customized to the platform, Xamarin.Forms was useful for adding the UI definition under the shared code umbrella as well.</li>
 	<li>Using Xamarin.Forms UI controls wasn't a blocker for making the app reflects HITS DNA visual identity; HITS development team created custom UI controls running across the 3 platforms and matching the visual identity of HITS DNA by inheriting from Xamarin.Forms UI controls.</li>
 	<li>Connecting the logic fell under the shared code umbrella by using MVVM with Xamarin.Forms as a layered separated presentation pattern. However, using MVVM may not be worth it for smaller apps since it necessitates multiple layers.</li>
 	<li>Using Swagger API metadata is effective when it comes to automatically generating client code for Azure API Apps.</li>
 	<li>Deployment of Azure API Apps can be done easily through a wizard using tools built into Visual Studio 2015 or higher.</li>
</ul>
&nbsp;
<h3><span>Additional resources</span></h3>
<ul>
 	<li><a target="_blank" href="https://www.xamarin.com/download" rel="noopener">Xamarin Unified Installer</a></li>
 	<li><a target="_blank" href="https://github.com/xamarin/XamarinComponents" rel="noopener">Xamarin Cross-Platform Plugins on GitHub</a></li>
 	<li><a target="_blank" href="https://docs.microsoft.com/en-us/azure/app-service-api/app-service-api-dotnet-get-started" rel="noopener">Azure API Apps Documentation</a></li>
 	<li><a target="_blank" href="https://developer.xamarin.com/guides/xamarin-forms/user-interface/controls/" rel="noopener">Xamarin.Forms Controls Reference</a></li>
 	<li><a target="_blank" href="https://www.visualstudio.com/vs/msft-android-emulator/" rel="noopener">Visual Studio Emulator for Android</a></li>
 	<li><a target="_blank" href="https://developer.xamarin.com/guides/xamarin-forms/xaml/xaml-basics/data_bindings_to_mvvm/" rel="noopener">MVVM in Xamarin Forms</a></li>
 	<li><a target="_blank" href="http://storageexplorer.com/" rel="noopener">Microsoft Azure Storage Explorer</a></li>
 	<li><a target="_blank" href="https://azure.microsoft.com/en-us/downloads/archive-net-downloads/" rel="noopener">Azure SDK for .NET</a></li>
 	<li><a target="_blank" href="https://developer.xamarin.com/guides/xamarin-forms/deployment-testing/performance/" rel="noopener">Optimizing Xamarin.Forms Performance</a></li>
</ul>
&nbsp;]]></content:encoded>
    </item>
    <item>
      <title>Develop and Scale applications using OpenShift</title>
      <link>https://docs.microsoft.com/archive/blogs/southafrica/develop-and-scale-applications-using-openshift</link>
      <pubDate>Sat, 02 Sep 2017 21:10:52 GMT</pubDate>
      <dc:creator><![CDATA[Francois Smith (AEM)]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/southafrica/?p=3125</guid>
      <description><![CDATA[OpenShift is Red Hat's Platform-as-a-Service (PaaS) that allows developers to quickly develop, host,...]]></description>
      <content:encoded><![CDATA[<a target="_blank" href="https://www.openshift.com/?elqTrackId=0ee6c81c1fed40e58d5af839ae157daa&amp;elqaid=7857&amp;elqat=2" rel="noopener noreferrer">OpenShift</a><span> is Red Hat's Platform-as-a-Service (PaaS) that allows developers to quickly develop, host, and scale applications in a cloud environment. With OpenShift you have a choice of offerings, including online, on-premise, and open source project options.</span>  Microsoft partner <a target="_blank" href="http://www.spektrasystems.com/" rel="noopener noreferrer">Spektra Systems</a> will be delivering a hands-on lab workshop where <span>you will learn about how to setup an OpenShift cluster on Microsoft Azure and quickly develop/host/scale your applications.</span>

<strong>Space is limited</strong><span>.  please <a target="_blank" href="https://azuretraining.spektrasystems.com/#/event?1b2c2ac1-5726-413a-9bdd-6ebff15ce97e" rel="noopener noreferrer">sign up here</a></span>]]></content:encoded>
    </item>
    <item>
      <title>Interested in running Red Hat Ansible Tower,  OpenShift or RHEL on Azure?</title>
      <link>https://docs.microsoft.com/archive/blogs/southafrica/interested-in-running-red-hat-ansible-tower-openshift-or-rhel-on-azure</link>
      <pubDate>Sat, 02 Sep 2017 21:01:05 GMT</pubDate>
      <dc:creator><![CDATA[Francois Smith (AEM)]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/southafrica/?p=3115</guid>
      <description><![CDATA[Learn how to automate infrastructure on Azure using Red Hat Ansible! 

Microsoft partner Spektra...]]></description>
      <content:encoded><![CDATA[<span>Learn how to automate infrastructure on Azure using Red Hat Ansible! </span>

Microsoft partner <a href="http://www.spektrasystems.com/">Spektra Systems</a> will be delivering a hands-on lab workshop were you will  learn how to manage Windows and Linux virtual machines using Ansible Tower by Red Hat. No set up, no need to bring an Azure subscription—just attend and explore.

<strong>Space is limited</strong>.  please <a target="_blank" href="https://azuretraining.spektrasystems.com/#/event?f4598008-0f38-43d7-8f7b-5b1c9e8efc16" rel="noopener noreferrer">sign up here</a>]]></content:encoded>
    </item>
    <item>
      <title>Public preview of Azure Event Grid</title>
      <link>https://docs.microsoft.com/archive/blogs/southafrica/public-preview-of-azure-event-grid</link>
      <pubDate>Sat, 02 Sep 2017 20:52:46 GMT</pubDate>
      <dc:creator><![CDATA[Francois Smith (AEM)]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/southafrica/?p=3106</guid>
      <description><![CDATA[Keen to try out the public preview of Azure Event Grid? Azure Event Grid is a fully managed event...]]></description>
      <content:encoded><![CDATA[Keen to try out the public preview of Azure Event Grid? Azure Event Grid is a fully managed e<span>vent routing service that are making event-based and serverless applications even easier to build on Azure. This is the 1st of its kind and</span><span> you can easily manage events across many different Azure services and applications. <a target="_blank" href="https://azure.microsoft.com/en-us/services/event-grid" rel="noopener noreferrer">Try it out today</a>. </span>]]></content:encoded>
    </item>
    <item>
      <title>.NET Core 2.0 released</title>
      <link>https://docs.microsoft.com/archive/blogs/southafrica/net-core-2-0-released</link>
      <pubDate>Sat, 02 Sep 2017 20:44:28 GMT</pubDate>
      <dc:creator><![CDATA[Francois Smith (AEM)]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/southafrica/?p=3097</guid>
      <description><![CDATA[In case you have missed this recent announcement? .NET Core 2.0 is now generally available.

What...]]></description>
      <content:encoded><![CDATA[In case you have missed this recent announcement? .NET Core 2.0 is now generally available.

What is .NET Core?

it is a cross-platform, open source, and modular .NET environment for creating modern web apps, microservices, libraries and console applications that run everywhere. This release focuses on performance improvements and expanding the set of APIs available via the .NET Standard 2.0 spec. The release includes the runtime and libraries for .NET Core as well as the tools for building, debugging and running .NET Core applications. This tooling includes a new set of command line tools, as well as Visual Studio and Visual Studio for Mac updates that enable developers to work with .NET Core 2.0 projects.

<a target="_blank" href="http://www.dot.net/core" rel="noopener noreferrer">Get started today!</a>]]></content:encoded>
    </item>
    <item>
      <title>Empower Event coming on the 26&amp;27th May 2016</title>
      <link>https://docs.microsoft.com/archive/blogs/southafrica/empower-event-coming-on-the-2627th-may-2016</link>
      <pubDate>Wed, 11 May 2016 11:31:01 GMT</pubDate>
      <dc:creator><![CDATA[Dave Russell (Technical Evangelist)]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/southafrica/?p=2946</guid>
      <description><![CDATA[&nbsp;     &nbsp;   Technology is one of the major driving forces behind the evolution of...]]></description>
      <content:encoded><![CDATA[<table cellspacing="0" cellpadding="0" border="1"> <tbody> <tr> <td valign="top"> <p><a href="https://msdnshared.blob.core.windows.net/media/2016/05/clip_image00217.jpg"><img title="clip_image002" style="border-left-width: 0px;border-right-width: 0px;border-bottom-width: 0px;padding-top: 0px;padding-left: 0px;padding-right: 0px;border-top-width: 0px" border="0" alt="clip_image002" src="https://msdnshared.blob.core.windows.net/media/2016/05/clip_image002_thumb13.jpg" width="706" height="197"></a></p></td></tr> <tr> <td valign="top"> <table cellspacing="0" cellpadding="0" border="0"> <tbody> <tr> <td valign="top" width="13">&nbsp;</td> <td valign="top" width="674"> <table cellspacing="0" cellpadding="0" border="0"> <tbody> <tr> <td valign="top">&nbsp;</td></tr> <tr> <td valign="top"> <p>Technology is one of the major driving forces behind the evolution of how business gets done as well as how organisations of all sizes transform themselves into digital businesses. In an era of digital disruption, technology is the answer to how your business can thrive and not just survive.<br>You are invited to our Microsoft Empower Technical Summit on the <strong>26 &amp; 27 May 2016 </strong>at Gallagher Convention Centre, Midrand.</p></td></tr> <tr> <td valign="top"> <table cellspacing="0" cellpadding="0" border="0"> <tbody> <tr> <td width="10">&nbsp;</td> <td width="564"> <p>Join us for 2 full days of training where you can expect the following training:</p></td></tr></tbody></table></td></tr> <tr> <td>&nbsp;</td></tr> <tr> <td valign="top"> <p><strong>Deep technical training and insights from top Microsoft and industry speakers on the following topics:</strong></p></td></tr> <tr> <td valign="top"> <table cellspacing="0" cellpadding="0" border="0"> <tbody> <tr> <td valign="top" width="18"> <p>•</p></td> <td valign="top" width="656"> <p>Intelligent Cloud Products such as SQL Server 2016, Windows Server 2016 and Systems Centre 2016 </p></td></tr> <tr> <td valign="top" width="18"> <p>•</p></td> <td valign="top" width="656"> <p>Developer Tools and Platforms covering ALM, DevOps, Web and Mobile development</p></td></tr> <tr> <td valign="top" width="18"> <p>•</p></td> <td valign="top" width="656"> <p>Productivity tools covering Delve, Sway, Office 365, Office 2016 and Project 2016 </p></td></tr></tbody></table></td></tr> <tr> <td valign="top">&nbsp;</td></tr> <tr> <td valign="top"> <p><strong>Cost per person: R 500.00 (exc VAT) for the two full days.</strong></p></td></tr> <tr> <td valign="top">&nbsp;</td></tr> <tr> <td valign="top"> <table style="background-color: #333333" cellspacing="0" cellpadding="0" border="0"> <tbody> <tr> <td width="10">&nbsp;</td> <td width="164"> <p><a href="http://www.empowerbizsa.co.za/">Click here to Register</a></p></td> <td width="26"> <p><a href="http://www.empowerbizsa.co.za/"><img title="clip_image004" style="border-left-width: 0px;border-right-width: 0px;border-bottom-width: 0px;padding-top: 0px;padding-left: 0px;padding-right: 0px;border-top-width: 0px" border="0" alt="clip_image004" src="https://msdnshared.blob.core.windows.net/media/2016/05/clip_image004.gif" width="22" height="22"></a></p></td> <td width="12">&nbsp;</td></tr></tbody></table></td></tr> <tr> <td valign="top">&nbsp;</td></tr> <tr> <td valign="top"> <p><strong>Facilitated Hands on Labs covering: </strong></p></td></tr> <tr> <td valign="top"> <table cellspacing="0" cellpadding="0" border="0"> <tbody> <tr> <td valign="top" width="18"> <p>•</p></td> <td valign="top" width="656"> <p>Data Platform</p></td></tr> <tr> <td valign="top" width="18"> <p>•</p></td> <td valign="top" width="656"> <p>Advanced Analytics</p></td></tr> <tr> <td valign="top" width="18"> <p>•</p></td> <td valign="top" width="656"> <p>Big Data and IoT.</p></td></tr> <tr> <td valign="top" width="18"> <p>•</p></td> <td valign="top" width="656"> <p>Data Canter and Hybrid Cloud </p></td></tr></tbody></table></td></tr> <tr> <td valign="top">&nbsp;</td></tr> <tr> <td valign="top"> <p><strong>Cost per person: R 1500.00 (exc VAT) for the two full days.</strong></p></td></tr> <tr> <td valign="top">&nbsp;</td></tr> <tr> <td valign="top"> <table style="background-color: #333333" cellspacing="0" cellpadding="0" border="0"> <tbody> <tr> <td width="12">&nbsp;</td> <td width="162"> <p><a href="http://www.empowerbizsa.co.za/">Click here to Register</a></p></td> <td width="26"> <p><a href="http://www.empowerbizsa.co.za/"><img title="clip_image004[1]" style="border-left-width: 0px;border-right-width: 0px;border-bottom-width: 0px;padding-top: 0px;padding-left: 0px;margin: 0px;padding-right: 0px;border-top-width: 0px" border="0" alt="clip_image004[1]" src="https://msdnshared.blob.core.windows.net/media/2016/05/clip_image0041.gif" width="22" height="22"></a></p></td> <td width="12">&nbsp;</td></tr></tbody></table></td></tr> <tr> <td valign="top">&nbsp;</td></tr> <tr> <td valign="top"> <p><strong>Industry Tracks covering: </strong></p></td></tr> <tr> <td valign="top"> <table cellspacing="0" cellpadding="0" border="0"> <tbody> <tr> <td valign="top" width="18"> <p>•</p></td> <td valign="top" width="656"> <p>Public Sector solutions focussing on improving citizen services in an ever increasing digital world.</p></td></tr> <tr> <td valign="top" width="18"> <p>•</p></td> <td valign="top" width="656"> <p>Understanding the risks with moving Enterprises to the cloud and enabling the mobile work force. We will have particular focus on solution for the following industries. </p></td></tr> <tr> <td valign="top" width="18">&nbsp;</td> <td valign="top"> <table cellspacing="0" cellpadding="0" border="0"> <tbody> <tr> <td valign="top" width="16"> <p>-</p></td> <td valign="top" width="640"> <p>Financial Services industry </p></td></tr> <tr> <td valign="top" width="16"> <p>-</p></td> <td valign="top" width="640"> <p>Manufacturing </p></td></tr> <tr> <td valign="top" width="16"> <p>-</p></td> <td valign="top" width="640"> <p>Professional Services </p></td></tr> <tr> <td valign="top" width="16"> <p>-</p></td> <td valign="top" width="640"> <p>Retail</p></td></tr></tbody></table></td></tr></tbody></table></td></tr> <tr> <td valign="top">&nbsp;</td></tr> <tr> <td valign="top"> <p><strong>No cost to attend this session.</strong></p></td></tr> <tr> <td valign="top">&nbsp;</td></tr> <tr> <td valign="top"> <table style="background-color: #333333" cellspacing="0" cellpadding="0" border="0"> <tbody> <tr> <td width="12">&nbsp;</td> <td width="162"> <p><a href="http://www.empowerbizsa.co.za/">Click here to Register</a></p></td> <td width="26"> <p><a href="http://www.empowerbizsa.co.za/"><img title="clip_image004[2]" style="border-left-width: 0px;border-right-width: 0px;border-bottom-width: 0px;padding-top: 0px;padding-left: 0px;margin: 0px;padding-right: 0px;border-top-width: 0px" border="0" alt="clip_image004[2]" src="https://msdnshared.blob.core.windows.net/media/2016/05/clip_image0042.gif" width="22" height="22"></a></p></td> <td width="12">&nbsp;</td></tr></tbody></table></td></tr> <tr> <td valign="top">&nbsp;</td></tr> <tr> <td valign="top"> <table cellspacing="0" cellpadding="0" border="0"> <tbody> <tr> <td width="12">&nbsp;</td> <td width="184"> <p>Technical Requirements:</p></td> <td width="12">&nbsp;</td></tr></tbody></table></td></tr> <tr> <td valign="top">&nbsp;</td></tr> <tr> <td valign="top"> <table cellspacing="0" cellpadding="0" border="0"> <tbody> <tr> <td valign="top" width="18"> <p>•</p></td> <td valign="top" width="656"> <p>Win 7 OS or higher</p></td></tr> <tr> <td valign="top" width="18"> <p>•</p></td> <td valign="top" width="656"> <p>Laptop needs to have Internet Explorer available</p></td></tr> <tr> <td valign="top" width="18"> <p>•</p></td> <td valign="top" width="656"> <p>Have "local admin" rights </p></td></tr> <tr> <td valign="top" width="18"> <p>•</p></td> <td valign="top" width="656"> <p>Need to be able to connect to internet and VPN (VPN instructions will be provided in class). There will be wireless access in the class </p></td></tr> <tr> <td valign="top" width="18"> <p>•</p></td> <td valign="top" width="656"> <p>Wi-Fi capabilities</p></td></tr> <tr> <td valign="top" width="18"> <p>•</p></td> <td valign="top" width="656"> <p>Remember your power supply </p></td></tr></tbody></table></td></tr> <tr> <td valign="top">&nbsp;</td></tr> <tr> <td valign="top"> <table cellspacing="0" cellpadding="0" border="0"> <tbody> <tr> <td valign="top" width="148"> <p><a href="https://msdnshared.blob.core.windows.net/media/2016/05/clip_image0075.jpg"><img title="clip_image007" style="border-top: 0px;border-right: 0px;border-bottom: 0px;padding-top: 0px;padding-left: 0px;border-left: 0px;padding-right: 0px" border="0" alt="clip_image007" src="https://msdnshared.blob.core.windows.net/media/2016/05/clip_image007_thumb4.jpg" width="128" height="48"></a></p></td> <td valign="top" width="128"> <p><a href="https://msdnshared.blob.core.windows.net/media/2016/05/clip_image0093.jpg"><img title="clip_image009" style="border-top: 0px;border-right: 0px;border-bottom: 0px;padding-top: 0px;padding-left: 0px;border-left: 0px;padding-right: 0px" border="0" alt="clip_image009" src="https://msdnshared.blob.core.windows.net/media/2016/05/clip_image009_thumb3.jpg" width="108" height="48"></a></p></td> <td valign="top" width="160"> <p><a href="https://msdnshared.blob.core.windows.net/media/2016/05/clip_image0114.jpg"><img title="clip_image011" style="border-top: 0px;border-right: 0px;border-bottom: 0px;padding-top: 0px;padding-left: 0px;border-left: 0px;padding-right: 0px" border="0" alt="clip_image011" src="https://msdnshared.blob.core.windows.net/media/2016/05/clip_image011_thumb3.jpg" width="140" height="48"></a></p></td></tr></tbody></table></td></tr> <tr> <td valign="top">&nbsp;</td></tr></tbody></table></td> <td valign="top" width="13">&nbsp;</td></tr></tbody></table></td></tr></tbody></table>]]></content:encoded>
    </item>
    <item>
      <title>Dev Camps – IoT Jhb, Dbn, CT</title>
      <link>https://docs.microsoft.com/archive/blogs/southafrica/dev-camps-iot-jhb-dbn-ct</link>
      <pubDate>Mon, 08 Feb 2016 01:07:33 GMT</pubDate>
      <dc:creator><![CDATA[Dave Russell (Technical Evangelist)]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/southafrica/2016/02/08/dev-camps-iot-jhb-dbn-ct/</guid>
      <description><![CDATA[&#160;...]]></description>
      <content:encoded><![CDATA[<table cellspacing="0" cellpadding="0" border="0"><tbody>     <tr>       <td valign="top">         <h4><img border="0" alt="Cloud-in-a-Box Solutions." src="http://image.email.microsoftemail.com/lib/fec8157277650d75/m/29/151043-header.jpg" width="600" height="284" /></h4>       </td>     </tr>      <tr>       <td valign="top">         <table cellspacing="0" cellpadding="0" border="0"><tbody>             <tr>               <td valign="top" width="20">&#160;</td>                <td valign="top" width="560">                 <table cellspacing="0" cellpadding="0" border="0"><tbody>                     <tr>                       <td valign="top">                         <h4 align="left">Microsoft Dev Camp is a free and fun event for developers by developers. </h4>                          <p align="left">Please join us for this special Dev Camp that will be presented by Microsoft technical experts.                            <br />You will learn about the Universal Windows Platform that can run across all Windows 10 devices as well as building Internet of Things solutions and using cloud backend support. Whether you haven’t looked at your most recent project in 1 month or 1 year, there is plenty to learn about what’s new - not just for a PC or a phone, but for all Windows 10 devices. That is an unprecedented opportunity of over one billion devices. </p>                       </td>                     </tr>                      <tr>                       <td valign="top">&#160;</td>                     </tr>                      <tr>                       <td valign="top">                         <table cellspacing="0" cellpadding="0" border="0"><tbody>                             <tr>                               <td valign="top" width="173">                                 <table cellspacing="0" cellpadding="0" border="0"><tbody>                                     <tr>                                       <td valign="top">                                         <p align="left"><strong>Durban</strong>                                             <br /><strong>Date:</strong> 17 February 2016                                             <br /><strong>Time:</strong> 9am - 5pm                                             <br /><strong>Address:</strong> Gateway Hotel Corner Centenary Boulevard &amp; Twilight Drive, Gateway, Durban</p>                                       </td>                                     </tr>                                      <tr>                                       <td>                                         <p align="left"></p>                                       </td>                                     </tr>                                      <tr>                                       <td>                                         <table cellspacing="0" cellpadding="0" border="0"><tbody>                                             <tr>                                               <td width="12">&#160;</td>                                                <td width="130">                                                 <p><a href="https://na01.safelinks.protection.outlook.com/?url=https%3a%2f%2fclick.email.microsoftemail.com%2f%3fqs%3d345495915f7a74dcecc335f5c53c1d9a33321e6d5b6bd3cd6848372ae71d476962817b4e3eeb484e&amp;data=01%7c01%7ctamach%40064d.mgd.microsoft.com%7ce39507345da2440480f708d32e27330b%7c72f988bf86f141af91ab2d7cd011db47%7c1&amp;sdata=CnytKZ4cNAVDZA%2fLUu6uWr9Av6Fc83VuwMUog%2fEKazw%3d">Click here to RSVP</a></p>                                               </td>                                                <td width="10">                                                 <p><a href="https://na01.safelinks.protection.outlook.com/?url=https%3a%2f%2fclick.email.microsoftemail.com%2f%3fqs%3d345495915f7a74dcecc335f5c53c1d9a33321e6d5b6bd3cd6848372ae71d476962817b4e3eeb484e&amp;data=01%7c01%7ctamach%40064d.mgd.microsoft.com%7ce39507345da2440480f708d32e27330b%7c72f988bf86f141af91ab2d7cd011db47%7c1&amp;sdata=CnytKZ4cNAVDZA%2fLUu6uWr9Av6Fc83VuwMUog%2fEKazw%3d"><img border="0" alt="Click here to RSVP" src="http://image.email.microsoftemail.com/lib/fec41576756d0d7f/m/4/170237-sm-arrow.png" width="15" /></a></p>                                               </td>                                                <td width="27">&#160;</td>                                             </tr>                                           </tbody></table>                                       </td>                                     </tr>                                   </tbody></table>                               </td>                                <td width="20">&#160;</td>                                <td valign="top" width="173">                                 <table cellspacing="0" cellpadding="0" border="0"><tbody>                                     <tr>                                       <td valign="top">                                         <p align="left"><strong>Johannesburg </strong>                                            <br /><strong>Date</strong>: 24 February 2016                                             <br /><strong>Time:</strong> 9am - 5pm                                             <br /><strong>Address:</strong> Focus Rooms 1, The Core, Leeuwkop Rd &amp; Kikuyu rd, Sunninghill, Johannesburg</p>                                       </td>                                     </tr>                                      <tr>                                       <td>&#160;</td>                                     </tr>                                      <tr>                                       <td>                                         <table cellspacing="0" cellpadding="0" border="0"><tbody>                                             <tr>                                               <td width="12">&#160;</td>                                                <td width="130">                                                 <p><a href="https://na01.safelinks.protection.outlook.com/?url=https%3a%2f%2fclick.email.microsoftemail.com%2f%3fqs%3d345495915f7a74dc94282e27e0c6897c093ebdd2023ad52f958c36e268cd275dfd07cd8359e4c78e&amp;data=01%7c01%7ctamach%40064d.mgd.microsoft.com%7ce39507345da2440480f708d32e27330b%7c72f988bf86f141af91ab2d7cd011db47%7c1&amp;sdata=bXKNuNUD%2bZKFia%2fO1i0LiTmfQiBZXOT8Vh7xD5A%2bVa4%3d">Click here to RSVP</a></p>                                               </td>                                                <td width="22">                                                 <p><a href="https://na01.safelinks.protection.outlook.com/?url=https%3a%2f%2fclick.email.microsoftemail.com%2f%3fqs%3d345495915f7a74dc94282e27e0c6897c093ebdd2023ad52f958c36e268cd275dfd07cd8359e4c78e&amp;data=01%7c01%7ctamach%40064d.mgd.microsoft.com%7ce39507345da2440480f708d32e27330b%7c72f988bf86f141af91ab2d7cd011db47%7c1&amp;sdata=bXKNuNUD%2bZKFia%2fO1i0LiTmfQiBZXOT8Vh7xD5A%2bVa4%3d"><img border="0" alt="Click here to RSVP" src="http://image.email.microsoftemail.com/lib/fec41576756d0d7f/m/4/170237-sm-arrow.png" width="15" /></a></p>                                               </td>                                                <td width="12">&#160;</td>                                             </tr>                                           </tbody></table>                                       </td>                                     </tr>                                   </tbody></table>                               </td>                                <td width="20">&#160;</td>                                <td valign="top" width="173">                                 <table cellspacing="0" cellpadding="0" border="0"><tbody>                                     <tr>                                       <td valign="top">                                         <p align="left"><strong>Cape Town </strong>                                            <br /><strong>Date:</strong> 02 March 2016                                             <br /><strong>Time: </strong>9am - 5pm                                             <br /><strong>Address: </strong>Cape Town International Convention Centre Convention Square, 1 Lower Long St, Cape Town</p>                                       </td>                                     </tr>                                      <tr>                                       <td>                                         <p align="left"></p>                                       </td>                                     </tr>                                      <tr>                                       <td>                                         <table cellspacing="0" cellpadding="0" border="0"><tbody>                                             <tr>                                               <td width="12">&#160;</td>                                                <td width="130">                                                 <p><a href="https://na01.safelinks.protection.outlook.com/?url=https%3a%2f%2fclick.email.microsoftemail.com%2f%3fqs%3d345495915f7a74dc240a8cca60eb8679df19dda0b0f7f8c4b88681c98551a1a39c6b389299d00568&amp;data=01%7c01%7ctamach%40064d.mgd.microsoft.com%7ce39507345da2440480f708d32e27330b%7c72f988bf86f141af91ab2d7cd011db47%7c1&amp;sdata=h0owlDoA2roZWyUf1ty2Dp%2foAkVzNg9mkYrf3keuyBg%3d">Click here to RSVP</a></p>                                               </td>                                                <td width="22">                                                 <p><a href="https://na01.safelinks.protection.outlook.com/?url=https%3a%2f%2fclick.email.microsoftemail.com%2f%3fqs%3d345495915f7a74dc240a8cca60eb8679df19dda0b0f7f8c4b88681c98551a1a39c6b389299d00568&amp;data=01%7c01%7ctamach%40064d.mgd.microsoft.com%7ce39507345da2440480f708d32e27330b%7c72f988bf86f141af91ab2d7cd011db47%7c1&amp;sdata=h0owlDoA2roZWyUf1ty2Dp%2foAkVzNg9mkYrf3keuyBg%3d"><img border="0" alt="Click here to RSVP" src="http://image.email.microsoftemail.com/lib/fec41576756d0d7f/m/4/170237-sm-arrow.png" width="15" /></a></p>                                               </td>                                                <td width="12">&#160;</td>                                             </tr>                                           </tbody></table>                                       </td>                                     </tr>                                   </tbody></table>                               </td>                             </tr>                           </tbody></table>                       </td>                     </tr>                      <tr>                       <td valign="top">                         <p>Agenda: </p>                       </td>                     </tr>                      <tr>                       <td valign="top">                         <table cellspacing="0" cellpadding="0" border="0"><tbody>                             <tr>                               <td valign="top" width="15">                                 <p>1.</p>                               </td>                                <td valign="top" width="545">                                 <p>Welcome</p>                               </td>                             </tr>                              <tr>                               <td valign="top" width="15">                                 <p>2.</p>                               </td>                                <td valign="top" width="545">                                 <p>Introduction to Windows Universal Platform </p>                               </td>                             </tr>                              <tr>                               <td valign="top" width="15">                                 <p>3.</p>                               </td>                                <td valign="top" width="545">                                 <p>Windows and IoT </p>                               </td>                             </tr>                              <tr>                               <td valign="top" width="15">                                 <p>4.</p>                               </td>                                <td valign="top" width="545">                                 <p>Azure and IoT</p>                               </td>                             </tr>                              <tr>                               <td valign="top" width="15">                                 <p>5.</p>                               </td>                                <td valign="top" width="545">                                 <p>Machine Learning and IoT</p>                               </td>                             </tr>                              <tr>                               <td valign="top" width="15">                                 <p>6.</p>                               </td>                                <td valign="top" width="545">                                 <p>Panel Discussion </p>                               </td>                             </tr>                           </tbody></table>                       </td>                     </tr>                   </tbody></table>               </td>                <td valign="top" width="20">&#160;</td>             </tr>           </tbody></table>       </td>     </tr>   </tbody></table>
Originally posted at http://blogs.msdn.com/hemipteran]]></content:encoded>
    </item>
  </channel>
</rss>