﻿<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/">
  <channel>
    <title>YTechie - C#, ASP.NET, and Adobe Flex Blog - Podcasts powered by Odiogo</title>
    <link>http://www.ytechie.com</link>
    <description>Productive software development using ASP.NET, C#, and Adobe Flex</description>
    <generator />
    <item>
      <title>Using Unlimited OneDrive Space for Backups</title>
      <link />
      <pubDate>Thu, 06 Nov 2014 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<p>Recently, Microsoft announced they&#39;re increasing OneDrive from 1 Terabyte, to unlimited. Unlimited as in infinity, endless, never ending, vast. You get the point. The only catch is that you have to have an Office 365 account. Considering you can get one for <a href="http://products.office.com/en-us/buy/office">as little as $69.99/year</a>, this is a phenomenal deal even if you don&#39;t use Office. If you get the 5 user edition for $99.99, you&#39;ll get unlimited space for everyone in your household. That&#39;s like 5 infinities! Kids know that the more infinities you have, the better.</p>
<p>The killer feature for OneDrive is that the files you store in it <em>don&#39;t have to actually take up any space on your hard drive</em>. After a file sits unused for some time, it can switch to an online-only mode. It will still appear to be on your computer, but it takes up zero space. For example, my OneDrive folder has 100+ GB on it, but on my laptop, it only takes up 307 MB on disk. When I try to open a file that&#39;s not actually on this computer, it will automatically pull the file down and make it available offline. It&#39;s all transparent to the user. This is a big improvement over the <a href="https://www.dropbox.com/help/175">selective sync option in Dropbox</a>.</p>
<p><img src="http://www.ytechie.com/2014/11/using-unlimited-onedrive-space-for-backups/virtual-drive-space-screenshot.png" alt="Virtual Drive Space Screenshot"></p>
<p>Now for the bad news. On my desktop, I have a 9 TB storage array, and a 512 GB SSD. My photo collection has ballooned in size, and is now well over 200 GB. If I were to simply copy these files into my OneDrive, I would both fill up my SSD, and the files would ultimately end up online-only. I want to have quick (read: local) access to all these files.</p>
<p>My first thought was to use robocopy, a powerful file copy utility included with Windows. My hope was that I could maintain a backup copy in my OneDrive, and simply mirror the new photos as they were added. I tried every combination of command line parameters, but I always ran into errors from robocopy (file cannot be accessed by the system) because it wasn&#39;t designed to work with files that only <em>appear</em> to exist.</p>
<p>Then, a breakthrough. I learned that OneDrive supports WebDAV. WebDAV is a protocol that runs on HTTP and allows you to open a remote resource as a folder in Explorer. It let&#39;s you do tricks like open a SharePoint document collection in an Explorer window.</p>
<h2>Mounting OneDrive as a Folder</h2>
<p>First, you&#39;ll need a special ID, called a <code>cid</code> to make this work. It&#39;s easy to get, just go to <a href="http://onedrive.com">OneDrive.com</a>, and click <em>Files</em>. In the URL, grab the <code>cid</code> value after the equals sign.</p>
<p><img src="http://www.ytechie.com/2014/11/using-unlimited-onedrive-space-for-backups/cid.png" alt="CID"></p>
<p>Next, open an explorer window, navigate to your computer (&quot;This PC&quot;), and click &quot;map network drive&quot; in the ribbon.</p>
<p><img src="http://www.ytechie.com/2014/11/using-unlimited-onedrive-space-for-backups/map-network-drive.png" alt="Map Network Drive"></p>
<p>The drive you&#39;re mapping is <strong><a href="https://d.docs.live.net/YOUR_CID/">https://d.docs.live.net/YOUR_CID/</a></strong>, be sure to enter your CID in that URL.</p>
<p><img src="http://www.ytechie.com/2014/11/using-unlimited-onedrive-space-for-backups/map-drive-details.png" alt="Map Drive Details"></p>
<p>When prompted for a username/password, use your live ID for the username. For the password, you can use your live password if you don&#39;t have 2-factor authentication enabled. If you DO have 2-factor authentication, <a href="https://account.live.com/proofs/AppPassword?mkt=en-us">generate an app password here</a>.</p>
<p>Congratulations, you now have OneDrive mapped as a drive on our computer. This is different than the typical OneDrive folder, because changes on this drive are reflected immediately in the cloud.</p>
<p><img src="http://www.ytechie.com/2014/11/using-unlimited-onedrive-space-for-backups/drive.png" alt="WebDAV Drive"></p>
<h2>Robocopy</h2>
<p>Now that we have a drive that takes up no space on our computer, but allows us to copy files to it without affecting our local copy, our work is easy.</p>
<p>For my photos folder, I run the following command line script:</p>
<pre><code>Robocopy e:\photography &quot;z:\backup\photography&quot; /m /e /purge /mt</code></pre>
<p><img src="http://www.ytechie.com/2014/11/using-unlimited-onedrive-space-for-backups/command-line-screenshot.png" alt="Command Line"></p>
<p>Here is an explanation of the parameters I&#39;m using:</p>
<ul>
<li><strong>e:\photography</strong> - The <em>source</em> of the files I would like to backup.</li>
<li><strong>z:\backup\photography</strong> - The <em>destination</em> of the backup in OneDrive.</li>
<li><strong>/m</strong> - Only copy files that have been modified. The archive bit on the file will indicate this, and will be reset.</li>
<li><strong>/e</strong> - Include subfolders.</li>
<li><strong>/purge</strong> - Delete files that have been removed in the source. You may choose to skip this so that accidental deletes won&#39;t propagate.</li>
<li><strong>/mt</strong> - Use multiple threads. This speeds up the upload by a large factor.</li>
</ul>
<h2>Performance</h2>
<p>Performance of WebDAV is not that great to be honest. Navigating around the drive is an exercise in frustration, but it wasn&#39;t designed to be used that way.</p>
<p>Performance of copying the files is alright. I&#39;ve let it run overnight and it copied up a few gigs. After the initial load, the speed won&#39;t be an issue. But truthfully, I don&#39;t need it to be fast. It&#39;s just an additional backup.</p>
<h2>Summary</h2>
<p>Everyone repeat after me. <strong>OneDrive is NOT a backup solution</strong>. That being said, it can be part of a balanced backup diet.</p>
<p>You should always have an additional off-site backup, more are better. I rotate external drives for this purpose.</p>
<h3>Update 2014-11-07</h3>
<p>I found out WebDAV is messing up the destination timestamps, which makes the subsequent backups overwrite files that haven&#39;t changed. I&#39;ve updated the robocopy paramters to use the archive bit on the files. Keep in mind that the archive bit doesn&#39;t work if you have multiple backup processes using it.</p>
<h3>Update 2004-11-09</h3>
<p>Added the <code>/mt</code> flag, which speeds this up 5x-10x.</p>
<img src="http://feeds.feedburner.com/~r/Ytechie/~4/9r9n1JTqm_c" height="1" width="1"/>]]></content:encoded>
      <enclosure url="http://podcasts.odiogo.com/get_mp3.mp3?f=/ytechie-c-asp-net-and-adobe-flex-blog/YTechie_-_C_ASPNET_and_Adobe_Flex_Blog-Using_Unlimited_OneDrive_Space_for_Backups.mp3" length="2960429" type="audio/mpeg" />
    </item>
    <item>
      <title>Do It in Public</title>
      <link />
      <pubDate>Thu, 23 Oct 2014 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<p>How many times have you run into a problem with your code? Stuck so bad you can&#39;t think about anything else. As time goes on, you get more desperate, changing your search terms, Looking for any glimmer of hope. You reach a point of desperation where you&#39;ll cut and paste any code you can find in the hopes that you&#39;ll get closer to the answer.</p>
<p>Conversely, how many times have you created a new console app to create a quick and dirty proof of concept? If it worked, where did you put that code?</p>
<p>I&#39;ve been thinking about writing this for some time. Over the past few months, I&#39;ve gotten in the habit of publishing every proof of concept, every sample project, and every demo. It feels great. I even <a href="http://msdevshow.com/">started a podcast</a> just to have more public discussions.</p>
<p><img src="http://www.ytechie.com/2014/10/do-it-in-public/github-activity.png" alt="GitHub Activity"></p>
<p>I know what you&#39;re thinking - it takes too much time and I have work to do. It takes much less time than you think, and the ROI will make it worthwhile. Get out there, <a href="https://github.com/">create your GitHub account</a>.</p>
<p>When you create a GitHub project, all you really need is a name, but ideally it should also have a readme file. I used to think this was a hassle, but I&#39;ve come to realize that it&#39;s actually worth the time investment. When you have to explain a piece of code to someone else, it forces to you think just enough to ensure that it makes sense. For my quick and dirty test project, this may be just a single sentence. If it&#39;s throwaway code, just be honest and mention that.</p>
<p>Your code doesn&#39;t need to be perfect, and if you are afraid of public criticism, get over it. You need to focus on the developers that are desperately looking for a fix to their problem.</p>
<p>Scott Hanselman had a similar thought <a href="http://www.hanselman.com/blog/PutYourselfOutThereAndPublishThatOpenSourceProjectToday.aspx">on his blog recently</a>:</p>
<blockquote>
<p>I hear several times a week things like &quot;I&#39;m not ready for people to see my code.&quot; But let me tell you, while it may be painful, it will make you better</p>
</blockquote>
<p>Since using GitHub for my sample projects, I&#39;ve found some other significant benefits:</p>
<ul>
<li><strong>Easy to email &amp; share</strong> - When a coworker asks how to solve a problem I&#39;ve already solved, I&#39;m able to look at my GitHub account, even if I&#39;m on my phone. I can grab a URL of the relevant file, and email a link. </li>
<li><strong>Free backup</strong> - Over the years, as I&#39;ve switched computers, I&#39;ve lost a lot of code I wish I had saved. Putting it on GitHub, ensures that I can access it at any point in the future without having to worry about keeping backups.</li>
<li><strong>Work from multiple computers</strong> - I&#39;ve found it extremely helpful to create a proof of concept on one machine, and then pull it down to another as reference.</li>
</ul>
<p><strong>Stop making excuses. Contribute back to the community.</strong></p>
<img src="http://feeds.feedburner.com/~r/Ytechie/~4/0KVkqcxrNAc" height="1" width="1"/>]]></content:encoded>
      <enclosure url="http://podcasts.odiogo.com/get_mp3.mp3?f=/ytechie-c-asp-net-and-adobe-flex-blog/YTechie_-_C_ASPNET_and_Adobe_Flex_Blog-Do_It_in_Public.mp3" length="1398461" type="audio/mpeg" />
    </item>
    <item>
      <title>7 Things the Surface Pro 3 Can Do Better than Your Laptop</title>
      <link />
      <pubDate>Tue, 24 Jun 2014 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<p>I&#39;ve been using a Surface Pro 3 for a few days now (borrowing it from my wife until I get my own). I wanted to show some of the scenarios that the kickstand, the pen, and the form factor provide. I do work at Microsoft, but I&#39;m free to use any type of device I wish, and I don&#39;t work for the Surface team.</p>
<p>The Surface Pro 3 is often a misunderstood device, and let&#39;s face it, it&#39;s a difficult product to explain and market. The way I see it is that at the low end of $799, it&#39;s a replacement for the high-end iPad market. The midrange models are extremely capable laptop and tablet killers, and the high-end models can handle pretty much anything.</p>
<h3>1. Scan and Annotate</h3>
<p>The Surface Pro is an amazing note-taking device and it opens up some new scenarios that may not be immediately obvious.</p>
<p>Let&#39;s say we have an interesting document in our hands, and we want to mark it up. We may be able to use a standard pen to write on the document itself, but there are times when we can&#39;t write on it, or we simply want to go paperless. The <a href="http://blogs.office.com/2014/03/17/office-lens-a-onenote-scanner-for-your-pocket/">Office Lens app</a> turns your phone into a scanner in your pocket. For example, you can scan in a sheet of paper or a whiteboard, and it will do edge detection, and it will also try to remove the background when possible.</p>
<p><img src="http://www.ytechie.com/2014/06/7-things-the-surface-pro-3-can-do-better-than-your-laptop/onenote-scan-annotation.png" alt="OneNote Scan Annotation"></p>
<p>Using my phone and the Office Lens app, I scanned in a sheet of paper and hit save, which sent it to OneNote. Within seconds, the scan was available in OneNote on my Surface. I was then able to use my pen to annotate the document.</p>
<p>Alternatively, you can use the camera built into the Surface itself.</p>
<h3>2. Use on-screen keyboard in reclined position</h3>
<p>Thanks to the new kickstand design, you can position the Surface Pro 3 to be slightly angled (nearly flat). This is useful when drawing, but I have found that it also provides the best angle for typing. I&#39;ve seen people that were able to type on a tablet laying flat, but I found that to be very difficult without tacticle feedback.</p>
<p><img src="http://www.ytechie.com/2014/06/7-things-the-surface-pro-3-can-do-better-than-your-laptop/surface-pro-3-reclined.jpg" alt="Surface Pro 3 Reclined"></p>
<p><em>Magic floating pen?</em></p>
<p>I often remove the keyboard and walk around with the Surface to use it as a consumption device. While you won&#39;t find the on-screen keyboard a replacement for a physical keyboard, it can certainly work in a pinch thanks to the new angles.</p>
<h3>3. Use the Pen as a Whiteboard in a Presentation</h3>
<p>Personally, my goal is to minimize the dreaded &quot;death by PowerPoint&quot;, and instead focus on code and content. Using a typical whiteboard is often far to small for the audience to see.</p>
<p>The Surface Pro 3 makes a great developer presentation device, and the presenter can switch over to an application like OneNote and write or draw something. Used properly, it can create a more engaging experience.</p>
<p><img src="http://www.ytechie.com/2014/06/7-things-the-surface-pro-3-can-do-better-than-your-laptop/presentation.jpg" alt="Presentation Screenshot"></p>
<h3>4. Keeping your Lap Cool</h3>
<p>In a traditional laptop, all of the heat generating components are in the base, or the part that sits on your lap. The result is usually just discomfort in the summer, but in severe cases it can cause <a href="http://www.emaxhealth.com/1506/laptop-users-warned-burn-risk">skin damage or even reduced fertility</a>.</p>
<p>With the Surface Pro, the parts that touch your body are the kickstand, the bottom edge of the device, and the keyboard. All of these components should be room temperature since they don&#39;t create any heat. The heat is allowed to vent vertically, far away from your skin.</p>
<h3>5. Gaming</h3>
<p>The iPad is great for casual gaming. However, there are 2 large shortcomings. First, the iPad does not have an accurate pointing device. There are capactive pens available, but they don&#39;t have anywhere near the same level of accuracy. The Surface pen has sub-millimeter accuracy.  Second, the iPad can&#39;t run some of the amazing legacy games like one of my all-time favorites, Age of Empires II.</p>
<p><img src="http://www.ytechie.com/2014/06/7-things-the-surface-pro-3-can-do-better-than-your-laptop/age-of-empires-on-surface-pro-3.jpg" alt="Age of Empires on Surface Pro 3"></p>
<p>This game is actually pretty amazing on the Surface. The high resolution screen shows you a good portion of the map and the pen works great for picking single units or grouping multiple units.</p>
<h3>6. Extreme Portability</h3>
<p>The Surface can replace your laptop and your tablet, but I think that&#39;s only part of the story. The Surface power adapter is extremely light. Laptops often have a dirty little secret, which is that they have a huge, heavy power brick.</p>
<p>Just take a look at this beast!</p>
<p><img src="http://www.ytechie.com/2014/06/7-things-the-surface-pro-3-can-do-better-than-your-laptop/huge-dell-power-adapter.jpg" alt="Huge Dell Power Adapter for M6400"></p>
<p>I can&#39;t find a consistent weight measurement for the Dell M6400 power adapter, but I&#39;m guessing it weighs more than the Surface Pro 3 with a type cover and power adapter. I should also mention that the MacBook Air power supply is very light, and Apple did a great job paying attention to that detail.</p>
<p>Personally, I would love to have a requirement for laptops that they must include the weight of their power supply in the specifications if the device doesn&#39;t last an entire day with normal usage. After all, the power supply is something you&#39;re likely to need to carry along with you.</p>
<p>The point is that that the Surface Pro 3 is ridiculously light. It&#39;s 1.76lbs, the cover is <a href="http://www.microsoftstore.com/store/msusa/en_US/pdp/Surface-Pro-Type-Cover/productID.300193600">10 ounces</a>, and the power supply is <a href="http://www.microsoftstore.com/store/msusa/en_US/pdp/Surface-Pro-3-Power-Supply/productID.300191700">6 ounces</a>. The total weight for everything in your bag is 2.78 lbs. It&#39;s light enough that the weight of the bag you put it in starts to become a factor.</p>
<p>It&#39;s also light enough that you&#39;re far more likely to take it with you. Much like the best camera is the one that you have with you, the best computer is the one you have with you.</p>
<p>When you start to consider this is a device that can help you go paperless and can possibly even be your reading device, you realize that you can shed a lot of the load.</p>
<h3>7. Detach the Keyboard</h3>
<p>The detachable keyboard is one of the fundamental selling points of the Surface Pro 3, yet the commercials did a terrible job showing how powerful this feature is.</p>
<p>I fly occasionally, and due to motion sickness, I usually use the time to catch up on movies. I originally used my Surface 2, but it was an extra device I had to put in my bag in addition to my laptop. Then, I switched to my Nokia Lumia 1520, which has a MicroSD slot, which let me fit 30+ movies on it. This works pretty well, but holding the phone is a bit of a hassle. When I do decide to get some work done, I can&#39;t hold the phone and use a laptop at the same time.</p>
<p>With the Surface Pro 3, I can leave it in my bag for the security check. Once on the plane, I can hold it during takeoff, and during the flight I can use the kickstand to sit it on the tray table. The combination of the screen, kickstand, and MicroSD slot, make it the best airplane device for me. If I want to get some work done, I move the movie off to the side, and run visual studio in the rest of the screen. The high-res screen gives me plenty of code real-estate.</p>
<h3>Conclusion</h3>
<p>I love this device. Its flexibility is exactly what I&#39;m looking for.</p>
<img src="http://feeds.feedburner.com/~r/Ytechie/~4/m5cpdC-VTt8" height="1" width="1"/>]]></content:encoded>
      <enclosure url="http://podcasts.odiogo.com/get_mp3.mp3?f=/ytechie-c-asp-net-and-adobe-flex-blog/YTechie_-_C_ASPNET_and_Adobe_Flex_Blog-7_Things_the_Surface_Pro_3_Can_Do_Better_than_Your_Laptop.mp3" length="3476966" type="audio/mpeg" />
    </item>
    <item>
      <title>What is the Internet of Things?</title>
      <link />
      <pubDate>Wed, 18 Jun 2014 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<p>IoT.</p>
<p>Internet of Things.</p>
<p>The trillion dollar question is &quot;what is it?&quot;. I&#39;ve heard answers ranging from &quot;a way for your refrigerator to push data to your phone&quot; to &quot;anything data related&quot;.</p>
<p>I just attended the <a href="http://iotworldevent.com/">Internet of Things World Conference</a>. The attendees and companies were as diverse as the answer to that question. Chip vendors, cloud providers, IoT branded companies, sensor providers, integrators, and product vendors.</p>
<p>The mere existence of the event and companies branded as <em>Internet of Things</em> represents the growing mindshare and buzzworthiness. A clever name may be all that is required to get companies to rally around it. Don&#39;t take that statement too lightly. I really think the branding is important here. We&#39;ve seen it before, &quot;the cloud&quot;, &quot;AJAX&quot;. All of these are technologies that were not new when the term was created, but the mere existence of a term pushes it forward.</p>
<h3>So what is it?</h3>
<p>What is IoT to me? I focus primarily on manufacturing. The majority of my career has been spent creating software that powers manufacturing. In the context of manufacturing, IoT represents a new economic proposition for sensors, control hardware, and data processing. Sensors are getting cheap enough to measure, and later analyze the data later to create interesting models. We finally have Internet connections that can push much of this data to a central repository. To process the data, we now have proven elastic cloud platforms that can scale down to a small shop, or up to the largest companies in the world.</p>
<p>Manufacturing seems ripe for the picking. Lots of potential for data collection and lots of low hanging fruit in terms of analysis and ROI.</p>
<p>This doesn&#39;t come without a unique set of challenges. From a hardware standpoint, the environment is a nightmare. We need to contend with dust, humidity, temperature extremes, vibration, and a reflective wireless environment.</p>
<p>Manufacturing tends to move very slowly. At the end of the day, they have product to produce. <a href="http://en.wikipedia.org/wiki/Modbus">Modbus</a>, the de facto standard for industrial communications, was developed in the 70&#39;s. It&#39;s reliability and interoperability has been time proven. For an IoT solution to be successful, it must be able to augment, not replace these existing solutions. Now, throw in multiple layers of networking, only 1 of which has direct internet access, and that internet access is likely slower than what you have at home.</p>
<p>Once we jump through all of these hoops to get data out of the facility, now we have to operate at cloud scale. The platform must be secure, scalable, and reliable. At Microsoft, there are a lot of efforts to make these processes as easy as possible.</p>
<p>Be sure to <a href="http://channel9.msdn.com/Events/Build/2014/3-635">watch the presentation</a> by the Azure Service Bus team where they talk about how they&#39;re ingesting data at scale.</p>
<p><img src="http://www.ytechie.com/2014/06/what-is-the-internet-of-things/azure-data-ingestion.png" alt="Azure Data Ingestion"></p>
<p>You&#39;re going to hear myself and others talk about data until we&#39;re blue in the face. Meaningful, actionable data is what we get out of all of this. Once we can centralize the data, we can do things like cross-facility benchmarking, predictive analysis to keep less parts on hand, actionable enterprise-wide data. Historical data is nice to have, real-time information is great, and accurate predictive data is game changing.</p>
<p>You won&#39;t hear me talk often about IoT security. The reason being that it must be present throughout the entire system. As a user of the technology, I don&#39;t want to think about security, but I want it to be pervasive and invisible.</p>
<h3>What about Residential?</h3>
<p>I have a lot of people ask me about how IoT fits into the residential space. As a person who has a mile of Cat 6 in his house, and a wireless network with over 20 devices including 3 thermostats, I want IoT to be ubiquitous more than anybody. Unfortunately, there are a lot of great niche products on the market today, but nobody has a good &quot;system&quot;. If someone does, I don&#39;t see it.</p>
<p>Why doesn&#39;t my security camera help the Nest know when I&#39;m home? Why don&#39;t my lights turn on when I walk into the bathroom? Why can&#39;t I choose &quot;scenes&quot; from a wall mounted panel or my phone? Why can&#39;t I see a comprehensive environmental map of my house? Why doesn&#39;t my house know when pollen levels are high so I can take my allergy medication? The truth is that most of this was possible in <strong>1985</strong>.</p>
<p>This automation has a <strong>touchscreen</strong> to control the entire system.</p>
<p><em>Temperature Control</em></p>
<p><img src="http://www.ytechie.com/2014/06/what-is-the-internet-of-things/temp-schedules@2x.jpg" alt="Temperature Control"></p>
<p><em>Security</em></p>
<p><img src="http://www.ytechie.com/2014/06/what-is-the-internet-of-things/security@2x.jpg" alt="Security"></p>
<p><em>Irrigation Control</em></p>
<p><img src="http://www.ytechie.com/2014/06/what-is-the-internet-of-things/irrigation-control@2x.jpg" alt="Irrigation Control"></p>
<p><em>HVAC Control</em></p>
<p><img src="http://www.ytechie.com/2014/06/what-is-the-internet-of-things/temp-schedules@2x.jpg" alt="HVAC Control"></p>
<p><strong>This should be blowing your mind right now.</strong> This was nearly 30 years ago, and this house did much of what we think we want today. Time of day controls, security, HVAC, even irrigation, all in a relatively intuitive interface.</p>
<p>Want to build a system like that today? Head over to <a href="http://www.smarthome.com/">SmartHome.com</a> and you&#39;ll find everything you need.</p>
<p>The problem is that most people are waiting to see who is going to win the battle for the home. It could be Apple, Microsoft, Google, or it could be anyone else. The thought of any one company with exclusive control should be terrifying.</p>
<p><em>OK, so maybe customers aren&#39;t looking for features, maybe we can motivate them with money? For example, running their washing machine during off-peak hours</em></p>
<p>I&#39;ve spoken to residential energy providers, and the message is always the same. For consumers, the decision making process is more emotional than logical. I remember when fluorescent light bulbs were free or close to free thanks to energy rebates. Even at the price level near $0, it wasn&#39;t enough motivation for many people to switch and they instead chose the default of <em>inaction</em>. The same goes for old refrigerators, dehumidifiers, and water softeners. Investing in a new fridge will often pay for itself, but the owners keep the old one and lose money in installments.</p>
<blockquote>
<p>The best thing about standards is that there are so many to choose from.</p>
</blockquote>
<p>The only way we&#39;ll get over the current hump is to start seeing a clear pattern of interoperability. Consumers and businesses alike need to feel like they&#39;re making a long-term <strong>investment</strong>. Paying money to solve a single problem may work in certain niche cases, but will never realize the full potential of this market.</p>
<p>This is only the beginning.</p>
<h3>Relevant Links I find Interesting</h3>
<ul>
<li><a href="http://channel9.msdn.com/Events/Build/2014/3-635">Ingesting data at scale with Azure</a></li>
<li><a href="http://www.dotnetrocks.com/default.aspx?showNum=990">Clemens Vasters talking about IoT scenarios and how we&#39;re solving real problems</a></li>
<li><a href="http://online.wsj.com/article/PR-CO-20140415-911273.html">Satya Nadella</a> talks about ambient intelligence</li>
</ul>
<p><strong><a href="http://brentdacodemonkey.wordpress.com/2014/06/19/attempting-to-define-iot/">Brent Stineman, a colleague and friend, has a follow-up/response that you should check out here</a></strong></p>
<img src="http://feeds.feedburner.com/~r/Ytechie/~4/Jy-20Z_EvlU" height="1" width="1"/>]]></content:encoded>
      <enclosure url="http://podcasts.odiogo.com/get_mp3.mp3?f=/ytechie-c-asp-net-and-adobe-flex-blog/YTechie_-_C_ASPNET_and_Adobe_Flex_Blog-What_is_the_Internet_of_Things.mp3" length="3411003" type="audio/mpeg" />
    </item>
    <item>
      <title>1 Year at Microsoft - A Retrospective</title>
      <link />
      <pubDate>Tue, 03 Jun 2014 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<p>One year ago today, I started my journey as a Microsoft employee. It has been one of the most interesting and exciting years of my career. I thought this would be an ideal time to take a look back. Let&#39;s go back in time to before I started.</p>
<p><img src="http://www.ytechie.com/2014/06/1-year-at-microsoft-a-retrospective/mms@2x.jpg" alt="M&amp;M&apos;s">
(it&#39;s tradition to bring in 1 pound of candy/M&amp;M&#39;s for each year anniversary)</p>
<p>I have a long history with Microsoft products and development tools. I loved the company long before working here. When a former colleague and now Microsoft employee suggested applying for an open position, I couldn&#39;t pass up the opportunity.</p>
<h3>The Interview</h3>
<p>Interviews at Microsoft are legendary. Famous puzzles and white-boarding challenges have made the process famous enough for someone to <a href="http://www.amazon.com/How-Would-Move-Mount-Fuji/dp/0316778494/ref=sr_1_1?ie=UTF8&amp;qid=1401755691&amp;sr=8-1&amp;keywords=microsoft+interview">write a book about it</a>.</p>
<p>After passing multiple technical phone interviews, they flew me out to Redmond for a &quot;loop&quot;, which is a series of diverse interviews.</p>
<p>As I arrived at the airport to fly out, I got call from my wife telling me that my oldest son had fallen &quot;off&quot; our staircase. He didn&#39;t fall <em>down</em> the staircase, he literally fell over the handrail to the floor below. We kept calling each other for updates as the ambulance arrived and took him to the hospital. It was really difficult to make the call if I should go back home, or catch my flight to the interview.</p>
<p>Right before the cabin door closed on the plane, I got the call that there were miraculously no broken bones, just bruising. I decided to continue with the flight to Redmond. Kids are amazing healers, and he was back to school in just 2 days.</p>
<p>I won&#39;t go into a lot detail about my interview loop, but I will tell you it was the most comprehensive, well-rounded set of interviewers and interview topics that I&#39;ve ever faced. I believe the key to a good interview is to not treat it as an interrogation. It&#39;s much more useful to both parties to have engaging discussions. I had some whiteboard discussions, and even had some disagreements about technical topics.</p>
<p>I got my questions answered, although the MS org chart itself can be very intimidating to outsiders, so you never fully understand what you&#39;re getting into.</p>
<p>At the end of the loop, I ended up having an amazing discussion with John Shewchuk, one of the &quot;technical fellows&quot; in the company. A title given to a select few technical leaders within the company. He was the last gate to getting an offer.</p>
<h3>Drinking from the Firehose</h3>
<p>The tales of drinking from the proverbial firehose are absolutely true. The amount of information available, on the Intranet, distribution lists, roadmaps, presentations and the smartest people I have ever met, provide you with everything your brain can absorb. Your constantly encouraged to move outside of your comfort zone, expand your knowledge, and find your particular niche.</p>
<p>I recently watched a Pluralsight video titled <a href="http://pluralsight.com/training/courses/TableOfContents?courseName=developing-killer-personal-brand">Developing a Killer Personal Brand</a>. One of the core concepts was to realize what you want to be known for. In my case, I specialize primarily in Azure, so I&#39;ve been trying to focus on how to create the right taglines and introductions so that when I&#39;m speaking with someone, they understand what my main focus is.</p>
<h3>Working Here</h3>
<p>Working here is amazing. Since my assigned partners are located at various locations across the US, I&#39;m fortunate to be able to work from my home. I have a great home office setup and for the most part I keep regular work hours. When my doors are closed, my kids know that daddy is <em>at work</em>. It takes a lot of adjustment going from working in a busy office to working at home. The advantage is that I have a 5 second walk to work, and everyone is a Lync call away. The downside is missing the hallway discussions, and being able to walk down the hall to get a question answered.</p>
<p>A couple of times per year, I go to Redmond for &quot;sync week&quot;, a time when we work together to learn and share experiences to help us work more efficiently. These weeks are highly valuable, and it&#39;s my chance to hear the information I don&#39;t hear in formal meetings.</p>
<p><img src="http://www.ytechie.com/2014/06/1-year-at-microsoft-a-retrospective/microsoft-campus-map@2x.jpg" alt="Microsoft Campus Map"></p>
<p>The Redmond campus is unbelievable. The 140+ buildings are top notch and run like clockwork. Getting between buildings is as easy as summoning &quot;connector&quot; car with your phone. Within minutes, it shows up and takes you to your destination using a computerized logistics system. The free soda/coffee is on every floor of every building. The <em>commons</em> has dozens of great restaurants, as well as cellular stores, a salon, bike shop, tech support, and more. Everything is built around keeping everyone productive.</p>
<p>Groups of building share a Cafe, so they&#39;re never far away:</p>
<p><img src="http://www.ytechie.com/2014/06/1-year-at-microsoft-a-retrospective/cafe@2x.jpg" alt="Cafe"></p>
<p>There are miles of walking trails:</p>
<p><img src="http://www.ytechie.com/2014/06/1-year-at-microsoft-a-retrospective/campus-walk@2x.jpg" alt="Campus">
<img src="http://www.ytechie.com/2014/06/1-year-at-microsoft-a-retrospective/campus-trail@2x.jpg" alt="Walking Trail"></p>
<p>An outdoor waterfall at one of the buildings:</p>
<p><img src="http://www.ytechie.com/2014/06/1-year-at-microsoft-a-retrospective/campus-waterfall@2x.jpg" alt="Campus Waterfall"></p>
<h3>Being Successful at Microsoft</h3>
<p>Since I&#39;ve only been here a year, I certainly can&#39;t say I&#39;m the authority on what makes someone successful. From what I&#39;ve seen, the common trait is pure passion around our products. No one is here primarily for the money, and if they are, they don&#39;t tend to stick around. The people here don&#39;t just think about the products, they <em>can&#39;t stop</em> thinking about them. Time and time again you see people changing the world though the work they&#39;re doing here. We cross every industry in virtually every geographical location.</p>
<p>I work for a part of Microsoft known as TED (technology evangelism &amp; development), which is part of DX (developer experience &amp; evangelism). I work very closely with a small set of partners (5 currently) to help make technology and architecture choices, primarily around Azure and Windows. Azure has grown very quickly since it&#39;s inception, and I help developers navigate and align the vast list of features. I also get to write code for open source frameworks that can multiply the effectiveness our efforts and help a broader set of partners.</p>
<p>Being able to write code, and help others build and deliver amazing applications makes this my dream job.</p>
<p>I often get asked how to get a career at Microsoft. First, it should be immediately obvious that you fit in here. Your work and your enthusiasm should make your talents apparent. Next, find area you want to focus on, whether it&#39;s a product group, or evangelism. Then, head over to <a href="http://careers.microsoft.com">Microsoft Careers</a> and do some searches for positions you may be interested in. The best way to get into any company is through networking. Find someone you know with connections to Microsoft, and see if they&#39;re aware of any positions that you may be a great fit for.</p>
<h3>What&#39;s Next</h3>
<p>One of the best things about working for a big company is having the ability to switch jobs without leaving the company. I&#39;m having a great time working in DX (developer experience &amp; evangelism), but it&#39;s great knowing there are lots of lateral opportunities as well as growth opportunities. Want to help build Windows? Office? XBox? SQL? It&#39;s an impressively diverse set of products all in one company.</p>
<p>Right now I&#39;m just enjoying the ride and I&#39;ll see where it takes me.</p>
<img src="http://feeds.feedburner.com/~r/Ytechie/~4/p53N82pNp-4" height="1" width="1"/>]]></content:encoded>
      <enclosure url="http://podcasts.odiogo.com/get_mp3.mp3?f=/ytechie-c-asp-net-and-adobe-flex-blog/YTechie_-_C_ASPNET_and_Adobe_Flex_Blog-1_Year_at_Microsoft_-_A_Retrospective.mp3" length="3550665" type="audio/mpeg" />
    </item>
    <item>
      <title>Dead Simple Real-Time Logging for Cloud Applications</title>
      <link />
      <pubDate>Thu, 22 May 2014 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<p>When working with developers that are building cloud-first applications, I&#39;ve found that they want real-time insights into their executing code. In the past, I was able to use tools like <a href="http://log2console.codeplex.com/">Log2Console</a>, but this type of tool only works when you are on the same machine as the executing code, or if there is a direct route with no firewalls. </p>
<p><img src="http://www.ytechie.com/2014/05/dead-simple-real-time-logging-for-cloud-applications/centralized-logging.png" alt="Centralized Logging Diagram"></p>
<h2>The Need</h2>
<p>There are lots of great solutions for gaining insights into your distributed applications, but I wanted a <strong>dead-simple, low-friction</strong> way of adding logging to a new or existing application.</p>
<p>Imagine if we could simply do the following</p>
<ol>
<li>Add a <a href="https://www.nuget.org/packages/Log4stuff.Appender/">NuGet package</a> to our solution</li>
<li>Add 1 line of code in our application startup code</li>
<li>Go to a website and get real-time log messages without having to sign up</li>
</ol>
<p>I set out to build a simple tool to make this a reality.</p>
<h2>Getting Started</h2>
<p>Let&#39;s see what it takes to set this up.</p>
<p>In my example, I&#39;m going to create a brand new project, but you can easily add this to any existing project type such as a web site, web role, worker role, etc.</p>
<p><img src="http://www.ytechie.com/2014/05/dead-simple-real-time-logging-for-cloud-applications/new-project.jpg" alt="Create a New Project"></p>
<h3>1. Add the NuGet Package</h3>
<p>Right-click on your project and select &quot;Manage NuGet Packages&quot;</p>
<p>Search for &quot;log4stuff&quot; in the search box and click &quot;Install&quot; on the &quot;Log4stuff.Appender&quot; package.</p>
<p><img src="http://www.ytechie.com/2014/05/dead-simple-real-time-logging-for-cloud-applications/nuget.jpg" alt="Manage NuGet Packages Screen"></p>
<h3>2. Configure your Application</h3>
<p>Your application ID is just a unique way of identifying your application so that you can view your logs. It can be anything you want, there are no restrictions, and it&#39;s case sensitive. In my example, I&#39;ll use <em>myAppId</em>.</p>
<p>I&#39;m going to add just a single line of code in the application startup:</p>
<pre><code>    static void Main(string[] args)
    {
        Log4stuff.Appender.Log4stuffAppender.AutoConfigureLogging(&quot;myAppId&quot;);
    }</code></pre>
<p>This automatically configures Log4Net in your application, and it also redirects the .NET trace logs into Log4Net. Recently I used this with the <a href="http://research.microsoft.com/en-us/projects/orleans/">Orleans</a> code to intercept the existing logging. If you have already configured Log4Net in your application, you can find integration <a href="http://log4stuff.com/Apps/Configure/myAppId">instructions here</a>.</p>
<p>Now, you can use the standard Log4Net mechanism for logging, which typically involves adding a logger declaration into each class:</p>
<pre><code>private static readonly ILog Log =
    LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);</code></pre>
<p>And then use the standard log methods for logging:</p>
<pre><code>Log.Debug(&quot;This is a standard debug message&quot;);</code></pre>
<p>Here is the code from our application in its entirety:</p>
<pre><code>using System.Reflection;
using log4net;

namespace ConsoleApplication1
{
    class Program
    {
        private static readonly ILog Log =
            LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);

        static void Main(string[] args)
        {
            Log4stuff.Appender.Log4stuffAppender.AutoConfigureLogging(&quot;myAppId&quot;);

            Log.Debug(&quot;This is a standard debug message&quot;);
        }
    }
}</code></pre>
<h3>3. View your Logs</h3>
<p>Now, just go to the Log4Stuff website and use your application ID, in this example, you would use:</p>
<p><a href="http://log4stuff.com/app/myAppId"><a href="http://log4stuff.com/app/myAppId">http://log4stuff.com/app/myAppId</a></a></p>
<p>When you run your console application, you&#39;ll see the log message appear in near real-time:</p>
<p><img src="http://www.ytechie.com/2014/05/dead-simple-real-time-logging-for-cloud-applications/log-output-window.jpg" alt="Log Output Window"></p>
<p>Now you can imagine instrumenting the various components of your cloud application, and you&#39;ll have the ability to watch data as it flows through the system. UDP packets are used to get messages to the site, and the site uses SignalR, so the total latency is minimal.</p>
<p>Happy Logging!</p>
<h3>Links</h3>
<ul>
<li><a href="http://logging.apache.org/log4net/">More information on the Log4Net open source project.</a></li>
<li><a href="http://log4stuff.com/">Log4Stuff.com</a></li>
</ul>
<img src="http://feeds.feedburner.com/~r/Ytechie/~4/32aCLJ2gxjc" height="1" width="1"/>]]></content:encoded>
      <enclosure url="http://podcasts.odiogo.com/get_mp3.mp3?f=/ytechie-c-asp-net-and-adobe-flex-blog/YTechie_-_C_ASPNET_and_Adobe_Flex_Blog-Dead_Simple_Real-Time_Logging_for_Cloud_Applications.mp3" length="1896065" type="audio/mpeg" />
    </item>
    <item>
      <title>TechEd 2014 Ultimate Recap - with Links!</title>
      <link />
      <pubDate>Mon, 12 May 2014 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<p>Just like my <a href="http://www.ytechie.com/2014/04/build-2014-ultimate-recap-with-links/">//Build 2014 Ultimate Recap - with Links!</a>, I&#39;ll be doing the same for <a href="http://northamerica.msteched.com/">TechEd</a>. I&#39;ll keep updating this content with new announcements until the end of TechEd. Keep in mind that my outline is developer focused, so I won&#39;t go as deep on the IT Pro topics.</p>
<h3>New Services</h3>
<ul>
<li>Windows 7 and Windows 8.1 virtual machines now available for <a href="https://twitter.com/ytechie/status/465857908551335936">MSDN subscribers in the gallery</a>.</li>
<li><a href="http://blogs.msdn.com/b/windowsazurestorage/archive/2014/05/12/introducing-microsoft-azure-file-service.aspx">Public preview of Azure Files</a>. This allows you to use a storage account as an SMB share (standard Windows file share).</li>
<li>Partnerships with Trend Micro and Symantec to provide Antimalware solutions.</li>
<li><a href="http://msdn.microsoft.com/en-us/library/azure/dn690121.aspx">Internal load balancing</a> of virtual machines with private addresses</li>
<li>Multiple site-to-site virtual network connections</li>
<li>Cross-datacenter virtual network connectivity</li>
<li>IP reservation of VIPs. Reserve a public IP address and assign them to cloud services as needed (think Elastic IPs but better).</li>
<li>Instance-level IPs. Assign a public IP address to any VM without having to go through the cloud-service endpoint.</li>
<li>Azure <a href="http://azure.microsoft.com/en-us/services/RemoteApp/">RemoteApp</a></li>
<li>Public preview of <a href="http://azure.microsoft.com/en-us/services/api-management/">API management</a>.<ul>
<li>Analytics</li>
<li>Throttling</li>
<li>Caching</li>
<li>Permissions</li>
</ul>
</li>
<li>Public preview of <a href="http://redis.io/">Redis cache</a></li>
<li>Shared caching service will be retired in September. Customers should use the managed cache option or Redis.</li>
<li>Public preview of <a href="http://blogs.msdn.com/b/biztalk_server_team_blog/archive/2014/05/13/hybrid-connections-preview.aspx">BizTalk Hybrid Connections</a>. Communicate to TCP or HTTP resources from Azure Web Sites.</li>
<li><a href="http://weblogs.asp.net/scottgu/archive/2014/05/12/azure-vm-security-extensions-expressroute-ga-reserved-ips-internal-load-balancing-multi-site-to-site-vpns-storage-import-export-ga-new-smb-file-service-api-management-hybrid-connection-service-redis-cache-remote-apps-and-more.aspx">Capture images with OS and data drives attached</a>. Works on running or stopped virtual machines.</li>
<li><a href="http://azure.microsoft.com/en-us/updates/azure-store-direct-ea-customers-channel-partners/">Store support for EA (enterprise agreement) customers</a>.</li>
<li><a href="http://winsupersite.com/windows-8/windows-store-app-gets-major-update">Windows 8 Store Update</a></li>
</ul>
<h3>Services that are now GA (general availability)</h3>
<ul>
<li>Larger VM&#39;s for virtual machines. A8 machines give you 8 cores, 56GB of RAM, and A9 give you 16 cores and 112GB of RAM. These also provide an <a href="http://en.wikipedia.org/wiki/Infiniband">Infiniband</a> network.</li>
<li><a href="http://azure.microsoft.com/en-us/pricing/details/storage-import-export/">Azure import/export</a></li>
<li><a href="http://azure.microsoft.com/en-us/services/cache/">Azure Cache Service</a></li>
</ul>
<h3>Visual Studio</h3>
<ul>
<li><a href="http://blogs.msdn.com/b/visualstudio/archive/2014/05/12/visual-studio-2013-update-2-is-here.aspx">Visual Studio 2013 Update 2 RTM</a></li>
<li><a href="http://www.hanselman.com/blog/IntroducingASPNETVNext.aspx">ASP.NET vNext</a><ul>
<li>Cloud and server optimized</li>
<li>No-compile developer experience</li>
<li>Side-by-side runtime and application</li>
<li>The runtime is NuGet-able</li>
<li>The source is on <a href="https://github.com/aspnet">Github</a></li>
</ul>
</li>
<li>Visual Studio <a href="http://msopentech.com/blog/2014/05/12/apache-cordova-integrated-visual-studio/">tooling support for Cordova (aka PhoneGap)</a>. Build cross-platform HTML/JavaScript applications.</li>
</ul>
<img src="http://feeds.feedburner.com/~r/Ytechie/~4/TLVj1u-J3Qo" height="1" width="1"/>]]></content:encoded>
      <enclosure url="http://podcasts.odiogo.com/get_mp3.mp3?f=/ytechie-c-asp-net-and-adobe-flex-blog/YTechie_-_C_ASPNET_and_Adobe_Flex_Blog-TechEd_2014_Ultimate_Recap_-_with_Links.mp3" length="1257765" type="audio/mpeg" />
    </item>
    <item>
      <title>//Build 2014 Ultimate Recap - with Links!</title>
      <link />
      <pubDate>Fri, 11 Apr 2014 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<ul>
<li><a href="http://blogs.windows.com/windows_phone/b/windowsphone/archive/2014/04/02/cortana-yes-and-many-many-other-great-features-coming-in-windows-phone-8-1.aspx">Windows Phone</a> - Lots of industry excitement!<ul>
<li>8.1 developer preview will be available soon. <a href="https://twitter.com/joebelfiore/status/454281727158919168">Joe Belfiore said check back next week :-)</a></li>
<li>Action center + notification center</li>
<li>New keyboard - <a href="https://www.youtube.com/watch?v=WM60BZUTOC8">new world record holder</a></li>
<li>Cortana<ul>
<li>Cortana = Siri + Google Now + Developer Extensibility</li>
<li>Interviewed personal assistants</li>
<li>Notebook stores relevant information</li>
</ul>
</li>
<li>Quiet hours</li>
<li>HIGHLY customizable lock screen</li>
<li>Rewritten calendar</li>
<li>Store apps on the SD card</li>
<li>IE 11<ul>
<li>WebGL</li>
</ul>
</li>
<li>Bluetooth LE</li>
<li>VPN</li>
<li>Windows is now free for any screen under 9&quot;</li>
<li>Existing apps can run in compatibility mode</li>
<li>Buy applications and in-app purchases and share then between Win8.1 and WP8.1</li>
<li>Geofencing</li>
<li>WiFi sense - auto-WiFi portal login and password sharing with friends</li>
<li>Signed and encrypted email</li>
<li>Switch calls to Skype while on a call</li>
<li>Battery Sense - Monitor battery performance by application</li>
<li><a href="http://press.nokia.com/2014/04/02/nokia-introduces-three-lumia-smartphones-for-windows-phone-8-1/">New Nokia phones announced</a></li>
</ul>
</li>
<li>Azure<ul>
<li><a href="https://portal.azure.com/">New portal</a> focused on merging separate products and supporting DevOps<ul>
<li>Integrated billing</li>
<li>Integrated Visual Studio Online</li>
</ul>
</li>
<li>Remote debugging in IaaS - thanks to the agent</li>
<li>Websites<ul>
<li>Free SSL certs for web sites</li>
<li>Java support</li>
<li>Autoscale GA</li>
<li>Traffic Manager GA</li>
</ul>
</li>
<li>SQL Databases<ul>
<li>Restore from backups at regular intervals</li>
<li>Max size for premium is now 500GB, up from 150GB</li>
</ul>
</li>
<li><a href="http://blogs.msdn.com/b/windowsazure/archive/2014/03/31/microsoft-azure-innovation-quality-and-price.aspx">Big pricing drops</a><ul>
<li>Compute by up to 35%</li>
<li>Storage by up to 65%</li>
<li>New &quot;basic&quot; tier without load balancing - 27% price drop</li>
</ul>
</li>
<li><a href="http://research.microsoft.com/en-us/projects/orleans/">Orleans preview released</a> - The framework that powers <a href="http://channel9.msdn.com/Events/Build/2014/3-641">Halo&#39;s distributed cloud services</a></li>
<li>Partnerships with <a href="http://techcrunch.com/2014/04/03/microsoft-updates-azure-with-deeper-visual-studio-integration-puppet-and-chef-support/">Chef and Puppet to run their management software on Azure</a></li>
<li>Mobile services<ul>
<li>Offline sync capability</li>
<li>Kindle push notifications GA</li>
</ul>
</li>
<li>New CDN Service<ul>
<li>Can point at blobs</li>
<li>Can point at a content folder. Previously this was /content/, and it is now /cdn/</li>
</ul>
</li>
<li><a href="http://blogs.technet.com/b/ad/archive/2014/04/03/azure-active-directory-premium-has-reached-ga.aspx">Azure Active Directory Premium GA</a><ul>
<li>Multi-factor authentication</li>
<li>Machine learning-based security &amp; reports</li>
<li>Self-service password reset</li>
<li>Company branding</li>
</ul>
</li>
</ul>
</li>
<li>.NET/Windows<ul>
<li>Side-loaded apps<ul>
<li>Ability to call existing .NET code</li>
<li>Allows local loopback</li>
<li>A new option to <a href="http://blogs.windows.com/windows/b/business/archive/2014/04/02/building-the-mobile-workplace-with-windows-and-windows-phone.aspx">purchase unlimited sideloading</a></li>
</ul>
</li>
<li><a href="http://channel9.msdn.com/Events/Build/2014/3-591">Universal apps</a><ul>
<li>90%+ API convergence        </li>
<li>Structured to separate out common code but design device specific screens</li>
<li>Future support for Xbox</li>
<li>Supports C#, JavaScript, c++</li>
<li>Different than PCL<ul>
<li>No binary output</li>
<li>Include platform specific code in #if conditionals</li>
</ul>
</li>
</ul>
</li>
<li><a href="http://msdn.microsoft.com/en-US/vstudio/dotnetnative">Project N - .NET Native</a><ul>
<li>Compile .NET store apps to native code for c++ performance</li>
</ul>
</li>
<li><a href="https://roslyn.codeplex.com/">Roslyn</a><ul>
<li><a href="http://channel9.msdn.com/Events/Build/2014/2-577">Compiler as a service</a></li>
<li>Now open source</li>
</ul>
</li>
<li>Lots of other <a href="http://www.dotnetfoundation.org/">Microsoft software open sourced through the .NET foundation</a></li>
<li>Demoed <a href="http://winsupersite.com/office/office-touch-windows-outclass-version-ipad?">modern office apps</a><ul>
<li>Based on iPad UI, which has been very well received</li>
<li>Same code on Phone and Tablet/Desktop</li>
</ul>
</li>
<li><a href="http://channel9.msdn.com/Events/Build/2014/2-506">WinJS open sourced</a></li>
<li><a href="http://channel9.msdn.com/Events/Build/2014/3-576">TypeScript 1.0 release</a></li>
<li>Future version of Windows<ul>
<li>Start menu option with live tiles</li>
<li>Run modern apps in a Window</li>
</ul>
</li>
</ul>
</li>
</ul>
<img src="http://feeds.feedburner.com/~r/Ytechie/~4/3LDDlwvmVnY" height="1" width="1"/>]]></content:encoded>
      <enclosure url="http://podcasts.odiogo.com/get_mp3.mp3?f=/ytechie-c-asp-net-and-adobe-flex-blog/YTechie_-_C_ASPNET_and_Adobe_Flex_Blog-Build_2014_Ultimate_Recap_-_with_Links.mp3" length="1502073" type="audio/mpeg" />
    </item>
    <item>
      <title>Adding Authentication to your Windows Store Application &amp; API</title>
      <link />
      <pubDate>Tue, 04 Mar 2014 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<p>In a hackfest this past weekend, I integrated Windows Azure Active Directory (WAAD) into the <a href="http://www.ytechie.com/2014/02/introducing-the-modern-manufacturing-framework/">manufacturing project</a> I&#39;m working on. This is meant as a gentle introduction and is not a comprehensive guide to adding authentication to your application. The application consists of a Windows 8 Store application and a WebAPI backend that interfaces with the rest of the backend systems.</p>
<p>In the early days of .NET, we had to create our own database of users and manage all aspects of getting them logged in. .NET 2.0 introduced ASP.NET membership, which let us offload most of the work. Now, we offload all of the work to WAAD.</p>
<h3>What is <a href="http://www.windowsazure.com/en-us/services/active-directory/">WAAD</a>?</h3>
<p><img src="http://www.ytechie.com/2014/03/adding-authentication-to-your-windows-store-application-and-api/ad-authentication.png" alt="Active Directory Authentication"></p>
<p>WAAD gives us a user directory (and more) and makes it easy to integrate a secure login to your applications with very little work.</p>
<p>Unlike the on-premise version of Active Directory, this is purely for user authentication, not machine authentication (yet).</p>
<p><img src="http://www.ytechie.com/2014/03/adding-authentication-to-your-windows-store-application-and-api/ad-users.gif" alt="Active Directory Users List"></p>
<p><strong>Long Description:</strong></p>
<blockquote>
<p>Enterprise level identity and access management for all your cloud apps. Windows Azure Active Directory is a comprehensive identity and access management cloud solution. You can manage user accounts, synchronize with on-premises directories, get single sign on across Azure, Office 365 and hundreds of popular SaaS applications like Salesforce, Workday, Concur, DocuSign, Google Apps, Box, ServiceNow, Dropbox, and more.</p>
</blockquote>
<h3>Adding a Login Screen</h3>
<p>In our Windows 8.1 application, Login.xaml is the first page we navigate to. The key in this page is that it calls <code>AcquireTokenAsync</code>. This method handles the whole authentication process for us, including bringing up the login dialog:</p>
<pre><code>var authContext = new AuthenticationContext(&quot;https://login.windows.net/&quot; + authConfig.DirectoryDomain);
var result = await authContext.AcquireTokenAsync(authConfig.AppRedirectUri, authConfig.AppClientId, new Uri(authConfig.ApiAppSignOnUrl));</code></pre>
<p><img src="http://www.ytechie.com/2014/03/adding-authentication-to-your-windows-store-application-and-api/login@2x.jpg" alt="Login Screen"></p>
<blockquote>
<p><strong>Let me repeat this in case it&#39;s not sinking in.</strong> One line of code has given us an entire functional login dialog!</p>
</blockquote>
<p>This is part of the Windows Azure AD Authentication Library for .NET and available through a <a href="http://www.nuget.org/packages/Microsoft.IdentityModel.Clients.ActiveDirectory/">pre-release NuGet</a>.</p>
<p>(<strong>Pro tip:</strong> Call <a href="http://msdn.microsoft.com/en-us/library/microsoft.identitymodel.clients.activedirectory.authenticationcontext.tokencachestore.aspx">TokenCacheStore</a>.Clear() on your <a href="http://msdn.microsoft.com/en-us/library/microsoft.identitymodel.clients.activedirectory.authenticationcontext.aspx">AuthenticationContext</a> during WAAD development to clear your cached credentials to force it to authenticate you each time)</p>
<p>Of course <code>AcquireTokenAsync</code> requires parameters that we configured in our WAAD instance. Fortunately we’re using the <a href="https://github.com/ytechie/ConventionConfig">ConventionConfig library</a> (shameless plug) to store and share our configuration details. This gives us a great centralized location to keep track of the settings we supplied when we configured the directory application.</p>
<p>When the authentication succeeds, we get back a result that has some useful information. First, it contains a bearer token. This is a token that we’ll put in our HTTP calls to prove our identity. We also get a UserInfo object back that contains things like first/last/email.</p>
<p>To make it easy to handle the bearer token, I subclassed the HttpClient like so:</p>
<pre><code>public class SecureHttpClient : HttpClient
{
    public SecureHttpClient(string bearerToken)
    {
        DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue(&quot;Bearer&quot;, bearerToken);
    }
}</code></pre>
<p>Now we can make secure we calls like this:</p>
<pre><code>var secureHttpClient = new SecureHttpClient(app.BearerToken);
var response = await secureHttpClient.GetAsync(&quot;http://localhost:3184/api/echo?whoami=true&quot;);</code></pre>
<p>If we don’t pass the bearer token, we’ll get a 401 (we&#39;ll configure the WebAPI in a moment).</p>
<pre><code>var httpClient = new HttpClient();
var response = await httpClient.GetAsync(&quot;http://localhost:3184/api/echo?whoami=true&quot;);</code></pre>
<p>If you&#39;re using an IoC container, or you don&#39;t feel comfortable inheriting from HttpClient, you could also use a factory method to create a configured HttpClient.</p>
<h3>In the WebAPI</h3>
<p>In the WebAPI project we use <a href="http://owin.org/">OWIN</a> to allow easy injection of middleware. In this case, I’m referencing <code>Microsoft.Owin.Security.ActiveDirectory</code>. In an OWIN startup task, we call the following:</p>
<pre><code>app.UseWindowsAzureActiveDirectoryBearerAuthentication(
    new WindowsAzureActiveDirectoryBearerAuthenticationOptions
    {
        Audience = config.ApiAppId,
        Tenant = config.DirectoryDomain
    });</code></pre>
<p>Now, it’s just a matter of using the built-in WebAPI authorization functionality. We can put an <code>[Authorize]</code> attribute on a controller or action, or just make everything require authorization by default (probably the best way).</p>
<pre><code>[Authorize]
public string Get(bool whoAmI)
{
...</code></pre>
<p>In an API action, we can get information about the user through the standard <code>ClaimsPrincipal.Current property</code>.</p>
<p>It’s pretty amazing once you get everything in place.</p>
<h3>Valuable Resources I Used</h3>
<ul>
<li><a href="http://www.cloudidentity.com/blog/">Vittorio Bertocci&#39;s Cloud Identity Blog</a> - This turned up in a lot of searches with valuable information.</li>
<li><a href="http://code.msdn.microsoft.com/windowsapps/ADAL-Windows-Store-app-to-e9250d6f/">ADAL - Windows Store app to REST service - Authentication</a></li>
<li><a href="http://www.nuget.org/packages/Microsoft.IdentityModel.Clients.ActiveDirectory/">Active Directory Authentication Library</a></li>
</ul>
<img src="http://feeds.feedburner.com/~r/Ytechie/~4/PJUup-pcHHk" height="1" width="1"/>]]></content:encoded>
      <enclosure url="http://podcasts.odiogo.com/get_mp3.mp3?f=/ytechie-c-asp-net-and-adobe-flex-blog/YTechie_-_C_ASPNET_and_Adobe_Flex_Blog-Adding_Authentication_to_your_Windows_Store_Application__API.mp3" length="2936763" type="audio/mpeg" />
    </item>
    <item>
      <title>Introducing the Modern Manufacturing Framework</title>
      <link />
      <pubDate>Thu, 06 Feb 2014 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<p>Manufacturing is responsible for the clothes you wear, the products you use every day, and has assembled nearly every object in the room with you right now. Data, data, data - Manufacturing is responsible for generating Exabyte&#39;s of data that gets collected, stored, and analyzed every year. That&#39;s far more data than any other sector.</p>
<p><img src="http://www.ytechie.com/2014/02/introducing-the-modern-manufacturing-framework/plant-worker.jpg" alt="Plant Worker"></p>
<p>In my role with Microsoft, I&#39;m working with commercial software vendors on a daily basis to help them build cloud solutions. Manufacturing is becoming extremely competitive, to the point where the only survivors are those that can efficiently mine the insights from their data in real-time and adapt/react quickly. Thanks to technology, manufacturers in the United States have become the <a href="http://www.nam.org/Statistics-And-Data/Facts-About-Manufacturing/Landing.aspx" title="Facts About Manufacturing in the United States">most productive in the world</a>.</p>
<p>Within the <a href="http://www.zdnet.com/microsoft-builds-a-deep-tech-team-to-attract-next-gen-developers-7000015270/">Technology Evangelism &amp; Development (TED)</a> team, we&#39;re working hard to identify common patterns where we can build reusable open source frameworks. My goal is to bring these frameworks together in the context of manufacturing, while filling in some of the holes that exist currently. Microsoft already has a <a href="http://www.microsoft.com/enterprise/industry/manufacturing-and-resources/discrete-manufacturing/reference-architecture/">reference architecture for Discrete Manufacturing</a> (DIRA). While the goals of the DIRA project are similar, our project complements those patterns with a concrete implementation showcasing Microsoft technologies.</p>
<h2>Manufacturing Landscape &amp; Trends</h2>
<p><img src="http://www.ytechie.com/2014/02/introducing-the-modern-manufacturing-framework/manufacturing-trends@2x.gif" alt="Manufacturing Trends"></p>
<p>Data collection in manufacturing is rooted in technologies whose protocols were <a href="http://en.wikipedia.org/wiki/Modbus">developed decades ago</a>. Traditionally, data collection and storage has been siloed by physical location. Companies with multiple facilities have struggled with not just getting their data into a central location, but storing and processing that data at scale. Cloud computing can provide a centralized storage location and the scaleable processing required to make sense of it.</p>
<p>When you look at the design of software that has been around for a decade or more, you&#39;ll see that as an industry we&#39;ve gotten really good at adding features. Historically this meant adding more buttons to toolbars or menus. Modern software design requires us to focus on usability. In manufacturing, this means designing intuitive role-based displays. Mobile software has taught us that focused simplicity can be a valuable advantage. Less training means lower costs for new employees, and makes it easier to collect the right information from the right people.</p>
<p><img src="http://www.ytechie.com/2014/02/introducing-the-modern-manufacturing-framework/toolbars-vs-simplicity.gif" alt="Toolbars vs Simplicity"></p>
<h2>This framework is...</h2>
<ul>
<li>focused on the MES portion of discrete manufacturing.</li>
<li>an end-to-end data pipeline capable of pulling data from existing systems (using adapters) and ultimately display that information and provide self-service business intelligence.</li>
<li>decomposable - components are interface-based so that any portions can be used individually. Use as little or as much as you like.  </li>
<li>extensible - because of the modular design approach, the framework can be extended limitlessly.</li>
<li>open source - it will be licensed under the MS-PL.</li>
<li>using Microsoft technologies such as Windows Azure and Windows 8, although non-Microsoft technologies will be used where appropriate.</li>
<li>aligned with tomorrows manufacturing trends such as <a href="http://en.wikipedia.org/wiki/Industry_4.0">Industry 4.0</a>.</li>
</ul>
<h2>This framework is not...</h2>
<ul>
<li>competing with other Microsoft efforts. It&#39;s meant to fill in gaps, not replace existing solutions in development.</li>
<li>the best way to push data. It simply demonstrates one possible solution.</li>
<li>the best way to store data. It simply demonstrates one possible solution.</li>
<li>The best way to process data. It simply demonstrates one possible solution.</li>
<li>embedded. This framework is a level above the embedded device ecosystem, but can use data generated or collected by devices.</li>
<li>competing with partners already in this space. This is designed to help accelerate partner application development, and gives them opportunities to add their business value.</li>
</ul>
<h2>Going Forward</h2>
<p>For now, my goal was to simply introduce the project. I&#39;ll be working on a series of blog posts discussing the architecture and the various goals. Be sure to <a href="http://www.ytechie.com/2014/02/introducing-the-modern-manufacturing-framework//feed/">subscribe</a> for updates!</p>
<img src="http://feeds.feedburner.com/~r/Ytechie/~4/xE7H-_hMuDE" height="1" width="1"/>]]></content:encoded>
      <enclosure url="http://podcasts.odiogo.com/get_mp3.mp3?f=/ytechie-c-asp-net-and-adobe-flex-blog/YTechie_-_C_ASPNET_and_Adobe_Flex_Blog-Introducing_the_Modern_Manufacturing_Framework.mp3" length="2131291" type="audio/mpeg" />
    </item>
  </channel>
</rss>
<!-- 100279 -->
<!-- Generated by Odiogobot V5.309 / http://www.odiogo.com -->
