<?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>Coding Times of a .Net Developer from Yard</title>
    <atom:link
      href="https://docs.microsoft.com/archive/blogs/yardman/feed.xml"
      rel="self"
      type="application/rss+xml" />
    <link>https://docs.microsoft.com/archive/blogs/yardman/feed.xml</link>
    <description />
    <lastBuildDate>Tue, 16 Apr 2019 05:35:53 GMT</lastBuildDate>
    <language>en-US</language>
    <sy:updatePeriod>hourly</sy:updatePeriod>
    <sy:updateFrequency>1</sy:updateFrequency>
    <item>
      <title>Azure Mobile Services vs. Al la Carte Azure</title>
      <link>https://docs.microsoft.com/archive/blogs/yardman/azure-mobile-services-vs-al-la-carte-azure</link>
      <pubDate>Mon, 23 Feb 2015 14:22:00 GMT</pubDate>
      <dc:creator><![CDATA[Karim Kameka]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/yardman/2015/02/23/azure-mobile-services-vs-al-la-carte-azure/</guid>
      <description><![CDATA[The other day I was chatting with my colleague Nick Pinheiro about possible architectures of mobile...]]></description>
      <content:encoded><![CDATA[<p>The other day I was chatting with my colleague <a href="http://blogs.msdn.com/b/nickpinheiro">Nick Pinheiro</a> about possible architectures of mobile solutions with Azure.&#160; As you may or may not know <a href="http://azure.microsoft.com/en-us/">Windows Azure </a>is the Microsoft Cloud.&#160; Azure provides a bevy of services from Website hosting to API creation, data storage, machine learning and much more.&#160; </p>  <p>Nick and I are in the process of building separate mobile applications and we often spit-ball ideas about the architecture of our applications and how we handle certain scenarios as they come up with our applications.&#160;&#160; to set the basis of what we have been discussing, Nick’s application started off as a web application (actually, it’s a Facebook app in which Nick&#160; was honored as having one of the top Facebook apps on the planet!).&#160; He is now in the process of making his app a native mobile application (Brownfield).&#160; My application comes from the perspective of building a brand new Azure Mobile Services application (Greenfield).&#160; </p>  <p>Both approaches have their own unique pros and cons.&#160;&#160; So this lead us to wonder what might be the pros and cons of using Windows Azure Mobile Services vs. building a mobile application using the individual (A la Carte) services offered by Windows Azure.&#160; Get the details of this <a href="http://karimkameka.com/2015/02/23/mobile-services-vs-al-a-carte-services/" target="_blank">Azure Post here</a>.</p>]]></content:encoded>
    </item>
    <item>
      <title>Submitting a Search by Pressing Enter with #AngularJS</title>
      <link>https://docs.microsoft.com/archive/blogs/yardman/submitting-a-search-by-pressing-enter-with-angularjs</link>
      <pubDate>Tue, 10 Feb 2015 15:45:00 GMT</pubDate>
      <dc:creator><![CDATA[Karim Kameka]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/yardman/2015/02/10/submitting-a-search-by-pressing-enter-with-angularjs/</guid>
      <description><![CDATA[Well I am well on my next chapter of AngularJS for my Stock application (Mogul Match Stocks) which...]]></description>
      <content:encoded><![CDATA[<p>Well I am well on my next chapter of AngularJS for my Stock application (Mogul Match Stocks) which follows the tenets of Rule #1, by Phil Town which I mentioned in my earlier <a href="http://karimkameka.com/2015/01/27/integrate-google-adsense-with-an-angularjs-web-site/" target="_blank">post</a>. BTW just to share a quick win with you, Rule #1 told be to buy Twitter before the huge run up on last Friday,&#160; I was up 20% as of this writing!&#160; Anyway back to the point of this piece.&#160; In building the application I&#160; was in need of a search function which would allow my users to search for a stock by typing in the first few letters of the company name or the first few letters of the ticker symbol.&#160; In the design of site, as you can see in the screenshot below, I was in need of a search box in a few places.&#160; AngularJS handles this scenario really well with directives!&#160; After building out by site with the search boxes as I wanted I began to test.&#160; During my testing of the solution I found my self hitting the enter key when I was done entering the letters for my query.&#160; Of course, I had not told the form to submit for the search box&#160; but only to submit when the little search icon was clicked.&#160; This became annoying and I figured that I would implement as my users might want to do the same.&#160;&#160;&#160; Check out the full article with the code snippets for this on my blog at:&#160; <a title="http://karimkameka.com/2015/02/10/submitting-a-search-by-pressing-enter-with-angularjs/" href="http://karimkameka.com/2015/02/10/submitting-a-search-by-pressing-enter-with-angularjs/">http://karimkameka.com/2015/02/10/submitting-a-search-by-pressing-enter-with-angularjs/</a></p>]]></content:encoded>
    </item>
    <item>
      <title>Living the Dream as a Web Developer</title>
      <link>https://docs.microsoft.com/archive/blogs/yardman/living-the-dream-as-a-web-developer</link>
      <pubDate>Mon, 02 Feb 2015 11:53:40 GMT</pubDate>
      <dc:creator><![CDATA[Karim Kameka]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/yardman/2015/02/02/living-the-dream-as-a-web-developer/</guid>
      <description><![CDATA[I've been blogging again on Karimkameka.com.&nbsp; My latest entry Living the Dream as a Web...]]></description>
      <content:encoded><![CDATA[<p>I've been blogging again on Karimkameka.com.&nbsp; My latest entry Living the Dream as a Web Developer aims at helping those of you looking to get started in becoming a developer.&nbsp; Here's to your success!&nbsp; You can find the article here:</p>
<p><a href="http://karimkameka.com/2015/02/02/living-the-dream-as-a-web-developer/">http://karimkameka.com/2015/02/02/living-the-dream-as-a-web-developer/</a></p>]]></content:encoded>
    </item>
    <item>
      <title>Integrate Google AdSense with and AngularJS Web Site</title>
      <link>https://docs.microsoft.com/archive/blogs/yardman/integrate-google-adsense-with-and-angularjs-web-site</link>
      <pubDate>Tue, 27 Jan 2015 11:51:45 GMT</pubDate>
      <dc:creator><![CDATA[Karim Kameka]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/yardman/2015/01/27/integrate-google-adsense-with-and-angularjs-web-site/</guid>
      <description><![CDATA[&#160;  I’ve just added my latest post on my new blog http://karimkameka.com.&#160; This one...]]></description>
      <content:encoded><![CDATA[<p>&#160;</p>  <p>I’ve just added my latest post on my new blog <a href="http://karimkameka.com">http://karimkameka.com</a>.&#160; This one discusses how to make a AngularJS Directive to get Google AdSense working on your AngularJS site.&#160; </p>  <p><a title="http://karimkameka.com/2015/01/27/integrate-google-adsense-with-an-angularjs-web-site/" href="http://karimkameka.com/2015/01/27/integrate-google-adsense-with-an-angularjs-web-site/">http://karimkameka.com/2015/01/27/integrate-google-adsense-with-an-angularjs-web-site/</a></p>  <p>Don’t forget to follow me on Twitter <a href="https://twitter.com/livehands" target="_blank">@livehands</a></p>]]></content:encoded>
    </item>
    <item>
      <title>Migrating from SharePoint 2010 to O365 in the Real World</title>
      <link>https://docs.microsoft.com/archive/blogs/yardman/migrating-from-sharepoint-2010-to-o365-in-the-real-world</link>
      <pubDate>Tue, 20 Jan 2015 13:31:00 GMT</pubDate>
      <dc:creator><![CDATA[Karim Kameka]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/yardman/2015/01/20/migrating-from-sharepoint-2010-to-o365-in-the-real-world/</guid>
      <description><![CDATA[&#160;  I’m working with a customer who has 7000+ sites hosted in an On-Premise SharePoint 2010...]]></description>
      <content:encoded><![CDATA[<p>&#160;</p>  <p>I’m working with a customer who has 7000+ sites hosted in an On-Premise SharePoint 2010 farm.&#160; The farm has about 78 custom WSPs deployed throughout the farm. We had very little source code from each of the WSPs as this customer was a perfect example of how not to do SharePoint Application development.&#160; We had solutions raging from the deployment of custom CSS to others involving web services deployed to the ISAPI folder on the WFEs.&#160; Needless to say many recommended practices were not followed.&#160; </p>  <p>The following steps were used to evaluate the farm.&#160; These are necessary in the Planning stages to determine what will/can be moved.&#160; </p>  <ol>   <li>Capture the Inventory of your sites and the Information Architecture. The inventory should capture the following: </li>    <ol>     <li><em>List of Web applications</em></li>      <li><em>List of Site Collections</em></li>      <li><em>List of Sites</em></li>      <li><em>List of Features and their Associated Site Collections/Sites (Important for STEP 2)</em></li>      <li><em>Size of each site</em></li>      <li><em>Last Updated Date for the site items. (Will help identify dead sites)</em></li>   </ol>    <li>Capture the inventory of your Solution Packages (WSPs) and download.</li>    <li>Use a tool like <strong>SPCAF </strong><a title="http://www.spcaf.com/" href="http://www.spcaf.com/"><strong>http://www.spcaf.com/</strong></a> to evaluate.&#160; SPCAF will provide a report for migration to the cloud and thus the recommendation to use the tool.&#160;&#160; (<strong><em>This tool was invaluable in getting the evaluation of the WSPs done in a timely manner</em>.</strong>)&#160; We classified each WSP into one of the following buckets, <strong><em><font color="#f79646">the timelines are based on our teams capacity to convert the items</font></em></strong>.</li>    <ol>     <li><strong>Low (2-4 weeks)</strong> - Converting simple SharePoint artifacts like web parts, Content Types/Branding to the new model.</li>      <li><strong>Medium (4-6 Weeks)</strong> - Solutions with complex deployments/configurations.&#160; This would include things like rewriting a Visual Studio Workflow and or converting Event receivers.&#160; This could also include those solutions with numerous Web parts and other artifacts which need to be converted.</li>      <li><strong>Medium-High (6-10 Weeks)</strong> - Solutions which will need some re-architecting and/or alternate configurations due to artifacts and/or services which are deployed directly to the SharePoint server.&#160; An Example here would be a web service which was deployed to the ISAPI folder as this will not be allow in O365&#160; we will need an alternate place for deploying this solution and the ability for the sites leveraging these solutions to access the new deployment location (preferably Azure).</li>      <li><strong>High (10+ Weeks)</strong> - These should be full on rewrite which will require some requirements gathering and building of a project backlog.&#160; They will require architecture design of the solution/app and would typically be a large solution/project with multiple components</li>   </ol>    <li>Once the WSPs are classified we evaluated the Sites from Step 1 and matched those up with the sites which were using the custom features in the WSPs from Step 3.&#160; This gives us a report on which sites contain customizations and which ones do not.&#160; We now have an idea on which sites will be trouble <img class="wlEmoticon wlEmoticon-winkingsmile" style="border-top-style: none; border-bottom-style: none; border-right-style: none; border-left-style: none" alt="Winking smile" src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/08/30/metablogapi/1172.wlEmoticon-winkingsmile_36B8BBB1.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-08-30-metablogapi/1172.wlEmoticon_2D00_winkingsmile_5F00_36B8BBB1.png" /></li>    <li>We now needed to determine which sites get migrated first.&#160; We created a set of buckets for Site Classification:</li>    <ol>     <li><strong>Low</strong> – No Customizations Required.&#160; These sites were migrated first.&#160; </li>      <li><strong>Medium</strong> – Small customizations which could be completed quickly such as the Low &amp; Medium solutions from Step 3 above.</li>      <li><strong>High</strong> – Any customizations which will take some time to migrate. </li>   </ol>    <li>We them formulated the schedule for migration based on the above information.&#160; We are using a migration tool to do the pushing of the data to O365 as part of our Testing and eventually our Execute stage. </li> </ol>  <p>&#160;</p>  <h2>SharePoint Artifact Migration Recommendations</h2>  <p>Once we had our Inventory we classified each of the custom artifacts with a plan of attack for migrating these items to the Cloud.&#160; Because Solution Packages (WSPs) are not allowed in O365.&#160; These packages and their associated SharePoint Features will need to be broken down and converted to the SharePoint App Model where applicable.&#160; Many of the guidelines for converting these solutions reside as part of the O365 Patterns and Practices recommendations.&#160; Below are he guidelines we used for the various artifacts:</p>  <ol>   <li><strong>Provisioning/Web Templates/Site Templates</strong> – Any web templates and site templates as well as the process for provisioning new sites should leverage the guidelines from the <a href="http://blogs.office.com/2014/07/29/office-365-development-patterns-practices-launched/" target="_blank">O365 Patterns and Practices</a> team.</li>    <li><strong>Branding &amp; Layout</strong> –Contains the deployment of CSS, JavaScript, master pages, page layouts and the associated content types.&#160; The migration of these items should follow the guidance from the O365 Patterns and Practices team.&#160; (<a title="http://www.microsoft.com/en-us/download/details.aspx?id=42030" href="http://www.microsoft.com/en-us/download/details.aspx?id=42030">http://www.microsoft.com/en-us/download/details.aspx?id=42030</a>)</li>    <li><strong>Workflows</strong>&#160; -&#160; Custom workflows created in Visual Studio which use code behind to complete tasks. Workflows which were built with Visual Studio will need to be converted to the SharePoint 2013 declarative workflow model.&#160; These workflows will need to be rebuilt from scratch.</li>    <li><strong>Content Types</strong> – These were custom content types which were deployed as a part of a WSP Solution. Content Types should be evaluated to determine if they can reside in a Content Type Hub.&#160; This will provide the content types to all Site Collections subscribing to that hub and provide a safe location for management of the enterprise content types which were previously deployed as WSP solutions. Secondly, Content Types can be deployed using CSOM and the App Model APIs available for use in the O365.</li>    <li><strong>List Templates</strong> – custom list templates and in some cases their associated implementations which are deployed as part of a WSP Solution.&#160; List Templates can be deployed via the CSOM APIs and by leveraging the Application model APIs.</li>    <li><strong>Web parts</strong> -&#160; Custom web parts which are deployed as WSPs. All Web parts will need to be recreated as SharePoint 2013 App Parts.&#160; This will bring these solutions into the App Model configuration and allow for the deployment of these Web Parts into the Cloud.</li>    <li><strong>InfoPath Forms</strong> – InfoPath forms which contained code behind and or required full trust in order to work.&#160; Administrator/Full Trust Info Path forms will should be rewritten as SharePoint Hosted Applications.&#160; This will allow the required flexibility needed for the forms while allowing the use of the form on multiple sites as needed through the SharePoint 2013 App Model.</li>    <li><strong>WCF/Web Services</strong> – WCF Services which were deployed to the Web Front End servers which contained calls to the SharePoint APIs.&#160; These services need to be redesigned/built as SharePoint Provider Hosted Apps.&#160; </li>    <li><strong>Web.Config Modifications</strong> – Changes to the Web.config on the Web Front Ends which were needed to enable functionality by custom code. These modifications will need to be identified and the associated solutions which required them will need to be refactored into a supported model.&#160; Most likely these solutions will become Provider Hosted Applications for which the required customizations can be made without deploying anything to the SharePoint servers.</li> </ol>]]></content:encoded>
    </item>
    <item>
      <title>Instagram Subscribe Error “Invalid format for ’callback_url’”</title>
      <link>https://docs.microsoft.com/archive/blogs/yardman/instagram-subscribe-error-invalid-format-for-callback_url</link>
      <pubDate>Thu, 15 Jan 2015 05:58:00 GMT</pubDate>
      <dc:creator><![CDATA[Karim Kameka]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/yardman/2015/01/15/instagram-subscribe-error-invalid-format-for-callback_url/</guid>
      <description><![CDATA[&#160;  I was looking to integrate the Instagram Real Time API from my application, however when I...]]></description>
      <content:encoded><![CDATA[<p>&#160;</p>  <p>I was looking to integrate the <a href="http://instagram.com/developer/realtime/" target="_blank">Instagram Real Time API</a> from my application, however when I sent my request to Instagram to register my subscription I kept getting a response with the error below. After investigating this issue it turns out that Instagram is expecting the data for this request to be sent as form data (i.e. Content-Type = x-www-form-urlencoded).&#160; This was not obvious as the other Instagram APIs I used just accepted the required parameters via the URI in parameters or via the route specified.&#160; </p>  <p>When sending my request to <a title="https://api.instagram.com/v1/subscriptions" href="https://api.instagram.com/v1/subscriptions">https://api.instagram.com/v1/subscriptions</a>&#160; I sent my request as a POST in JavaScript I was getting the following payload returned with the error description from Instagram:</p>  <p>&quot;{\&quot;meta\&quot;:{\&quot;error_type\&quot;:\&quot;APISubscriptionError\&quot;,\&quot;code\&quot;:400,\&quot;error_message\&quot;:\&quot;Invalid format for \\\&quot;callback_url\\\&quot;. URL must start with \\\&quot;http:\\/\\/\\\&quot; or \\\&quot;https:\\/\\/\\\&quot;\&quot;}}&quot;,</p>  <p>The issue was I was sending my requests using the ‘data’ member in my JSON like this:</p>  <p><strong><font color="#ff0000">WRONG</font></strong></p>  <p>request({   <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; uri: url,    <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; method: &quot;POST&quot;,    <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; data:&#160; {    <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; aspect: &quot;media&quot;,    <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; callback_url: [MY CALLBACK URL],    <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; object: “tag”,    <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; object_id: “Frendli”    <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; }</p>  <p>&#160;&#160;&#160;&#160;&#160;&#160;&#160; });</p>  <p>However because Instagram is looking for the data to be sent a form in the POST I had to amend the request to use the ‘form’ field in the request instead.&#160; Once I did this all was well. See the corrected request below, for a more detailed description of how to automate this with node.js in Azure Mobile Services check out my article about how to create a Instagram subscription with <a href="http://azure.microsoft.com/en-us/services/mobile-services/" target="_blank">Azure Mobile Services</a>.</p>  <p><strong><font color="#008000">CORRECTED</font></strong></p>  <p>request({   <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; uri: url,    <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; method: &quot;POST&quot;,    <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; form:&#160; {    <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; aspect: &quot;media&quot;,    <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; callback_url: [MY CALLBACK URL],    <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; object: “tag”,    <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; object_id: “Frendli”    <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; }</p>  <p>&#160;&#160;&#160;&#160;&#160;&#160;&#160; });</p>  <p>For more developer goodness follow me on Twitter <a href="https://twitter.com/livehands" target="_blank">@livehands</a></p>]]></content:encoded>
    </item>
    <item>
      <title>Creating an Instagram Subscription API with Azure Mobile Services</title>
      <link>https://docs.microsoft.com/archive/blogs/yardman/creating-an-instagram-subscription-api-with-azure-mobile-services</link>
      <pubDate>Wed, 14 Jan 2015 10:01:00 GMT</pubDate>
      <dc:creator><![CDATA[Karim Kameka]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/yardman/2015/01/14/creating-an-instagram-subscription-api-with-azure-mobile-services/</guid>
      <description><![CDATA[Windows Azure Mobile Services has been an exciting tool I’ve been using to develop my mobile...]]></description>
      <content:encoded><![CDATA[<p>Windows Azure Mobile Services has been an exciting tool I’ve been using to develop my mobile applications.&#160; One of the key things when building several kinds of mobile applications is integration with several of the big social networks.&#160; Instagram becoming the way to share photos was one of those integration points I needed in my application.&#160; Instagram provides&#160; a “real-time” API service which uses the PubSubHub model,&#160; details about the <a href="http://instagram.com/developer/realtime/#">real-time API</a> can be found on Instagram’s developer site.&#160; </p>  <p>My application required the need to have images from Instagram show up in a user’s feed as it was available.&#160; At first I thought about just polling the Instagram feed’s using a Scheduled job (which is a part of the mobile service) however this solution did not scale well due to the limited number of SQL Azure connections in the service.&#160; This lead me to the real-time API to have Instagram tell me when to update my application.&#160; As a part of this I also wanted the user’s to have the ability to specify the tag for which they would like to follow, as well as the username (in many cases their own) they would like to follow as well.&#160; Given these requirements I needed a generic enough API which would allow my application to subscribe to these objects in Instagram and then have them populate in my application by storing in a table.&#160; </p>  <p>So enough background let’s get to the code.&#160; </p>  <h3>Step 1. Create an InstagramSubscriptions table.</h3>  <p>There are a few tables and services I needed in my solution.&#160; We want to create these here first, this way when we get to our API Controllers we are ready to go.</p>  <p>The first Item is a table to keep track of the subscriptions.&#160; This table is needed as when a new item is added to Instagram the Instagram publishing service will call your API method with the subscription payload.&#160; The payload does not contain any media information, a second call from your API will need to be made to actually get the items.&#160; Secondly, I needed a way to tie this subscription back to a user. This table also provides a quick way for me to delete a subscription from the Instagram service without having to first call Instagram’s subscription API.&#160; </p>  <ol>   <li>Create a Table named “InstagramSubscriptions” </li>    <li>Add the following Columns all of type String:      <ol>       <li>SubscriptionId </li>        <li>UserId </li>        <li>ObjectType </li>        <li>ObjectId </li>     </ol>   </li> </ol>  <p>&#160;</p>  <h3>Step 3.&#160; Create the Item Push API</h3>  <p>The Push API as I call it will be the callback method for which Instagram will use when there is a new item for the subscriptions in your application.&#160; This callback will receive a payload with the subscription details for which new items have been added.&#160; Once this payload is received you will have the ability to call the other Instagram API methods to get the actual data (images/video) you can then pull into your app.&#160; In the Mobile App Service create a new API, I called mine “Instagram_push”.&#160; You will need a GET method and a POST method which is accessible to “Everyone” as Instagram will not be able to authenticate and/or use your Application key.&#160; To keep the process secure Instagram sends a Verify_Token, which is setup when you create your subscription (we will see this in the next step).&#160; You should always validate the Verify_Token when new subscription requests are sent as this is the only way to ensure this is a valid call from Instagram.</p>  <p>Here are the two methods I created to be used as my callback method when Instagram needs to send me an update for new items, I’ve left the spot when you implement your logic blank in this sample, but in my case I update some tables and perform other logic which retrieves the items in this spot when Instagram sends me an update:</p>  <p>exports.post = function(request, response) {</p>  <p>&#160;&#160;&#160; var bodyObject = JSON.Parse(request.body); // Parse the response into a JSON object for use in my Script    <br />&#160;&#160;&#160; console.log(&quot;Instagram Push: &quot; + new Date());     <br />&#160;&#160;&#160; console.log(request.body);</p>  <blockquote>   <p>// ADD YOUR LOGIC HERE!</p>    <p>//TYPICALLY CALL INSTAGRAM API TO GET THE NEW ITEMs</p> </blockquote>  <p>};</p>  <p>exports.get = function(request, response) {    <br />&#160;&#160;&#160; var hubchallenge = request.query[&quot;hub.challenge&quot;];     <br />&#160;&#160;&#160; //console.log (&quot;Hub Challenge: &quot;&#160; + hubchallenge)     <br />&#160;&#160;&#160; response.send(statusCodes.OK, hubchallenge);     <br />};</p>  <p>&#160;</p>  <h3>Step 2.&#160; Create the Subscription Service API </h3>  <p>The second half of what I needed was to have a method for my application to automate the creation of subscriptions with Instagram.&#160; I also wanted to create a way to remove these subscriptions if the user choses to do so.&#160; To accomplish this I create a second API interface which handles the subscription service.&#160; This service will take in some parameters in the body:</p>  <ul>   <li>igObjectType – This is the type of subscription.&#160; should be “tag”, “user”, “geo” </li>    <li>igName – The string for the tag or the username for which we are creating this subscription.</li>    <li>userId – the user Id I use to tie this subscription in my application.</li> </ul>  <p>I also set some environment variables such as the Push API Url which will be used as our call back.&#160; You should replace this URL with your Mobile Service URL.</p>  <p>&#160;</p>  <p>SECURITY HINT: unlike the Item Push API above this API should be secured using the Mobile service methods.&#160; I chose to lock this service down by only allowing authenticated users.&#160; You should use what is best for your application.</p>  <p>exports.post = function(request, response) {    <br />&#160;&#160;&#160; // Use &quot;request.service&quot; to access features of your mobile service, e.g.:     <br />&#160;&#160;&#160; //&#160;&#160; var tables = request.service.tables;     <br />&#160;&#160;&#160; //&#160;&#160; var push = request.service.push;     <br />&#160;&#160;&#160; var sql = request.service.mssql;     <br />&#160;&#160;&#160; var instagramPushUrl = &quot;<a href="https://[YOUR MOBILE SERVICE URL]/api/instagrampush/&quot;;">https://<strong><em>[YOUR MOBILE SERVICE URL]</em></strong>/api/instagrampush/&quot;;</a>     <br />&#160;&#160;&#160; var igName = request.body.igName;     <br />&#160;&#160;&#160; var igObjectType = request.body.type;     <br />&#160;&#160;&#160; var streamId = request.body.streamId;     <br />&#160;&#160;&#160; var createSubscriptionQuery = &quot;INSERT INTO InstagramSubscriptions (userId, subscriptionId, objectType, objectId) VALUES (?, ?, ?, ?)&quot;;</p>  <p>//Ensure a valid user Id for my applications.&#160;&#160;&#160;&#160;&#160; </p>  <p>if (!userId) {    <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160; request.respond(403, { message: 'Bad request! No User Id for this subscription' });     <br />&#160;&#160;&#160; }</p>  <p>&#160;&#160;&#160; if (!igObjectType) {    <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160; igObjectType = &quot;tag&quot;; //Set Default if not passed    <br />&#160;&#160;&#160; } </p>  <p>   <br />&#160;&#160;&#160; var httpRequest = require('request');     <br />&#160;&#160;&#160; if (igName) {     <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160; var url = '<a href="https://api.instagram.com/v1/subscriptions?client_id=[YOUR CLIENT ID]&amp;client_secret=[YOUR CLIENT SECRET]&amp;verify_token=[YOUR VERIFY TOKEN]';">https://api.instagram.com/v1/subscriptions?client_id=[YOUR CLIENT ID]&amp;client_secret=[YOUR CLIENT SECRET]&amp;verify_token=[YOUR VERIFY TOKEN]';</a>     <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160; var msgBody = {     <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; aspect: &quot;media&quot;,     <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; callback_url: instagramPushUrl,     <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; object: igObjectType,     <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; object_id: igName     <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160; };</p>  <p>&#160;&#160;&#160;&#160;&#160;&#160;&#160; httpRequest({    <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; uri: url,     <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; method: &quot;POST&quot;,     <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; form: msgBody,</p>  <blockquote>   <p>&#160;&#160;&#160;&#160;&#160;&#160;&#160; }, function(err, response, body) {      <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; //console.log(&quot;IG Response: &quot; + body);       <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; if (err) {       <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; console.error(&quot;IG Subscribe Error: &quot; + err);       <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; request.respond(500, { message: 'IG NOT Subscribed for 1 ' + igObjectType + ' with name ' + igName + '!' });       <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; }       <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; else if (response.statusCode !== 200) {       <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; console.error(&quot;IG Subscribe Error: &quot; + err);       <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; request.respond(500, { message: 'IG NOT Subscribed for 2 ' + igObjectType + ' with name ' + igName + '!', err: body, url: url + msgBody });       <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; }       <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; else {       <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; var bodyObject = JSON.parse(body);&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; //console.log (&quot;Result from Subscription: &quot; + bodyObject);&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; //console.log(&quot;Subscription Id: &quot; + subscription.id);       <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; var subscription = bodyObject.data;&#160; <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; <br />//Update my DB</p>    <p>sql.query(createSubscriptionQuery, [userId, subscription.id, igObjectType, igName], {      <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; success: function(result) {       <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; request.respond(statusCodes.OK, { message: 'IG Subscribed for user ' + igObjectType + ' ' + igName + '!', result: body });       <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; },       <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; error: function(error) {       <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; console.error(error);       <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; console.log('IG Subscription Created but not logged for ' + igObjectType + ' with name ' + igName + '!' + ' and SubscriptionId ' + subscription.id);       <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; request.respond(statusCodes.OK, { message: 'IG Subscription Created but not logged for ' + igObjectType + ' with name ' + igName + '!', result: body });       <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; }       <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; });       <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; }       <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; });       <br />&#160;&#160;&#160; }       <br />&#160;&#160;&#160; else {       <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160; request.respond(404, { message: 'User ' + igName + ' not found!' });       <br />&#160;&#160;&#160; }       <br />};</p> </blockquote>  <p>//DELETE METHOD</p>  <p>exports.delete = function(request, response) {    <br />&#160;&#160;&#160; var sql = request.service.mssql;     <br />&#160;&#160;&#160; var subscriptionId = request.query.subscriptionId;     <br />&#160;&#160;&#160; var deleteQuery = &quot;DELETE FROM InstagramSubscriptions WHERE subscriptionId = ?&quot;;</p>  <p>&#160;&#160;&#160; if (!subscriptionId) {    <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160; request.respond(403, { message: 'Bad request! SubscriptionId is required' });     <br />&#160;&#160;&#160; }</p>  <p>&#160;&#160;&#160; var httpRequest = require('request');</p>  <p>&#160;&#160;&#160; var url = '<a href="https://api.instagram.com/v1/subscriptions?client_id=[YOUR CLIENT ID]&amp;client_secret=[YOUR CLIENT SECRET]&amp;id='">https://api.instagram.com/v1/subscriptions?client_id=[YOUR CLIENT ID]&amp;client_secret=[YOUR CLIENT SECRET]&amp;id='</a> + subscriptionId;</p>  <p>&#160;&#160;&#160; httpRequest({    <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160; uri: url,     <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160; method: &quot;DELETE&quot;,     <br />&#160;&#160;&#160; }, function(err, response, body) {     <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; //console.log(&quot;IG Response: &quot; + body);     <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; if (err) {     <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; console.error(&quot;IG Subscribe Error: &quot; + err);     <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; request.respond(500, { message: 'IG NOT delete Subscribed for subscription with id ' + subscriptionId });     <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; }     <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; else if (response.statusCode !== 200) {     <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; console.error(&quot;IG Subscribe Error: &quot; + err);     <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; request.respond(500, { message: 'IG NOT delete Subscribed for subscription with id ' + subscriptionId });     <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; }     <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; else {     <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; sql.query(deleteQuery, [subscriptionId], {     <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; success: function(result) {     <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; request.respond(200, { meta: { code: 200 }, data: [] });     <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; },     <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; error: function(error) {     <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; console.error(error);&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; console.log(&quot;Failed to update database after deleting subscription with id: &quot; + subscriptionId);     <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; request.respond(200, { meta: { code: 400 }, data: { subscriptionId: subscriptionId } });     <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; }     <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; });     <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; }     <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160; });     <br />};</p>]]></content:encoded>
    </item>
    <item>
      <title>Bing Developer Assistant</title>
      <link>https://docs.microsoft.com/archive/blogs/yardman/bing-developer-assistant</link>
      <pubDate>Tue, 19 Aug 2014 07:05:56 GMT</pubDate>
      <dc:creator><![CDATA[Karim Kameka]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/yardman/2014/08/19/bing-developer-assistant/</guid>
      <description><![CDATA[A must have tool in the toolbox.&#160; When you hit that wall this add-in can come in real...]]></description>
      <content:encoded><![CDATA[<p>A must have tool in the toolbox.&#160; When you hit that wall this add-in can come in real handy.&#160; Download from: <a title="http://visualstudiogallery.msdn.microsoft.com/a1166718-a2d9-4a48-a5fd-504ff4ad1b65" href="http://visualstudiogallery.msdn.microsoft.com/a1166718-a2d9-4a48-a5fd-504ff4ad1b65">http://visualstudiogallery.msdn.microsoft.com/a1166718-a2d9-4a48-a5fd-504ff4ad1b65</a></p>]]></content:encoded>
    </item>
    <item>
      <title>Calculating Distance in Miles via SQL Query</title>
      <link>https://docs.microsoft.com/archive/blogs/yardman/calculating-distance-in-miles-via-sql-query</link>
      <pubDate>Wed, 13 Aug 2014 09:35:19 GMT</pubDate>
      <dc:creator><![CDATA[Karim Kameka]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/yardman/2014/08/13/calculating-distance-in-miles-via-sql-query/</guid>
      <description><![CDATA[I have been working diligently on a new app which has a need to use location to find people in a...]]></description>
      <content:encoded><![CDATA[<p>I have been working diligently on a new app which has a need to use location to find people in a specified radius.&#160; My data store already had the coordinates for these users in decimal degree radians (I. e. latitude = 25.762098 and longitude = 80.189117)&#160; BTW you can use <a href="http://maps.bing.com" target="_blank">Bing maps</a> to get these coordinates for test purposes.&#160; What I needed to be able to do was to query my SQL database using a standard SQL query and get back a set of people who were nearby.&#160; In my research to find this there are a bunch of Math formulas out there and it seemed there are 4 very specific ones which can be used to calculate the distance.&#160; I found <a href="http://ragrawal.wordpress.com/2009/07/11/calculating-geographic-distance/" target="_blank">this blog article</a> useful in determining which formula to use.&#160; I landed on the Modified Pythagorus’ distance formula as it was accurate enough for what I needed.&#160; </p>  <p>The next step was to get the SQL Query for which I could apply my newly found calculation.&#160; After speaking with a very good friend of mine who is a SQL genius he helped me put the following query together:</p>  <p>SELECT * FROM myTable WHERE (POWER ((POWER( (69.1 * ( Longitude - @longitude ) * cos(@latitude/57.3)) , 2 ) + POWER( (69.1 * ( Latitude - @latitude )) , 2 )), .5)) &lt; ( @radiusInMiles ) </p>  <p>&#160;</p>  <p>@longitude, @latitude, @radiusInMiles are all parameters you can pass to the stored procedure to keep the query dynamic.&#160; </p>  <p>&#160;</p>  <p>Happy locating!</p>]]></content:encoded>
    </item>
    <item>
      <title>SharePoint Video Solution SharePoint Media Services SPMedia.IO</title>
      <link>https://docs.microsoft.com/archive/blogs/yardman/sharepoint-video-solution-sharepoint-media-services-spmedia-io</link>
      <pubDate>Tue, 08 Jul 2014 12:53:48 GMT</pubDate>
      <dc:creator><![CDATA[Karim Kameka]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/yardman/2014/07/08/sharepoint-video-solution-sharepoint-media-services-spmedia-io/</guid>
      <description><![CDATA[A good friend of mine has release a top of the line Media solution for SharePoint.&#160; I have been...]]></description>
      <content:encoded><![CDATA[<p>A good friend of mine has release a top of the line Media solution for SharePoint.&#160; I have been to many a client who is in need of a solution where they can share their Videos and various other media via their SharePoint sites.&#160; Today with the power of the cloud and the seamless integration of SPMedia this is now possible!&#160; SharePoint Media Services (SPMedia) is a SharePoint app that bridges the gap between Azure Media Services and SharePoint. SPMedia works equally well in SharePoint online or on-premise, easily incorporating vid   <div id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:e9b87010-d02c-465d-8307-6a6c019288a3" class="wlWriterEditableSmartContent" style="margin: 0px; padding: 0px; float: none; display: inline;">Technorati Tags: <a href="http://technorati.com/tags/SharePoint+2013" rel="tag">SharePoint 2013</a>,<a href="http://technorati.com/tags/Azure" rel="tag">Azure</a>,<a href="http://technorati.com/tags/Cloud+Services" rel="tag">Cloud Services</a></div> eo and audio into your site.</p>  <p>Built using leading technologies: Windows Azure, SharePoint Online, HTML5 and jQuery SPMedia delivers a scalable cross browser+device solution.</p>  <p>Check out more details at: <a href="http://spmedia.io">http://spmedia.io</a></p>  <p>Download the app here: <a href="http://office.microsoft.com/en-us/store/sp-media-WA104364733.aspx">http://office.microsoft.com/en-us/store/sp-media-WA104364733.aspx</a></p>]]></content:encoded>
    </item>
  </channel>
</rss>