<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:blogger='http://schemas.google.com/blogger/2008' xmlns:georss='http://www.georss.org/georss' xmlns:gd="http://schemas.google.com/g/2005" xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-1811411750119502062</id><updated>2023-03-21T03:33:02.915+00:00</updated><category term=".NET"/><category term="Tips"/><category term="C#"/><category term="Industry News"/><category term="Innovation"/><category term="Windows 8"/><category term="Productivity"/><category term="Mobile"/><category term="Touch"/><category term="Windows Phone"/><category term="Interoperability"/><category term="Metro"/><category term="Visual Studio"/><category term="Web Development"/><category term="Functional Integration"/><category term="Multi-Platform"/><category term="Silverlight"/><category term="XAML"/><category term="Windows Phone 8"/><category term="ASP.NET"/><category term="Architecture"/><category term="Conferences"/><category term="Continuous Integration"/><category term="NUI"/><category term="Surface"/><category term="Windows"/><category term="MVC"/><category term="Source Control"/><category term="Agile"/><category term="Game Development"/><category term="WPF"/><category term="Xbox"/><category term="Expression Blend"/><category term="Continuous Deployment"/><category term="Internet of Things"/><category term="TeamCity"/><category term="Interaction Behavious"/><category term="Windows RT"/><category term="Schematic"/><category term="Azure"/><category term="REST"/><category term="Retail"/><category term="SOA"/><category term="WCF"/><category term="Kinect"/><category term="BUILD"/><category term="Gestures"/><category term="R/GA"/><category term="Social Media"/><category term="Unity3D"/><category term="JavaScript"/><category term="WinRT"/><category term="Devices"/><category term="Portfolio"/><category term="Twitter"/><category term="Windows Media Center"/><category term="XNA"/><category term="Design"/><category term="Intersection of Things"/><category term="LINQ"/><category term="Windows 8.1"/><category term="Dependency Injection"/><category term="Experience Design"/><category term="IFA 2012"/><category term="IIS"/><category term="MSSQL"/><category term="Music"/><category term="TFS"/><category term="Android"/><category term="Apple"/><category term="Design Patters"/><category term="Facebook"/><category term="Gadgets"/><category term="Localization"/><category term="Semantic Web"/><category term="Analytics"/><category term="Awards"/><category term="Bass"/><category term="DIY"/><category term="Entity Framework"/><category term="Python"/><category term="Security"/><category term="SignalR"/><category term="Travel"/><category term="iPhone"/><category term=".NET Gadgeteer"/><category term="3D Printing"/><category term="Connected Spaces"/><category term="Games"/><category term="Responsive Web Design"/><category term="Xbox One"/><category term="iOS"/><title type='text'>Anthony Baker</title><subtitle type='html'>creative development and interactive technologies</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://blog.anthonybaker.me/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1811411750119502062/posts/default?redirect=false'/><link rel='alternate' type='text/html' href='http://blog.anthonybaker.me/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><link rel='next' type='application/atom+xml' href='http://www.blogger.com/feeds/1811411750119502062/posts/default?start-index=26&amp;max-results=25&amp;redirect=false'/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/00141462441551416511</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>314</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-1811411750119502062.post-5009072641482246128</id><published>2015-01-31T19:01:00.001+00:00</published><updated>2015-01-31T19:03:09.698+00:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Connected Spaces"/><category scheme="http://www.blogger.com/atom/ns#" term="Innovation"/><category scheme="http://www.blogger.com/atom/ns#" term="Internet of Things"/><category scheme="http://www.blogger.com/atom/ns#" term="Intersection of Things"/><category scheme="http://www.blogger.com/atom/ns#" term="Retail"/><title type='text'>“The Internet of Things” – Published on Event Magazine</title><content type='html'>&lt;p&gt;&lt;img style=&quot;float: none; margin-left: auto; display: block; margin-right: auto&quot; src=&quot;https://scontent-b-lhr.xx.fbcdn.net/hphotos-xpf1/v/t1.0-9/983842_10152745520928871_384309412851919820_n.jpg?oh=521dcbc34bbc4c8c1893f057409677fd&amp;amp;oe=555BB5EE&quot; width=&quot;301&quot; height=&quot;301&quot;&gt;&lt;/p&gt; &lt;p&gt;This is a short post to celebrate that one of my recent articles got published on &lt;a href=&quot;http://eventmagazine.co.uk/about-event&quot; target=&quot;_blank&quot;&gt;Event Magazine!&lt;/a&gt; &lt;/p&gt; &lt;p&gt;The magazine has a digital and a print portfolio, including several different subscriptions. One of their top printed magazines is called “&lt;strong&gt;The Agenda&lt;/strong&gt;”, which highlights the winners of its influence index and analyses the trends for the years ahead. I got my article published on page 61 of “&lt;strong&gt;The Agenda 2015&lt;/strong&gt;” volume.&lt;/p&gt; &lt;p&gt;I would like to share a bit of background on the article subject, please bear with me!&lt;/p&gt; &lt;p&gt;Recently, I have been researching, discussing and promoting the concept of “&lt;strong&gt;Connected Spaces&lt;/strong&gt;”, focusing on a different angle of the “&lt;strong&gt;Internet of Things&lt;/strong&gt;”. As opposed to concentrate on the fact and goal of getting devices connected to the Internet, I like to think that device connectivity is just the medium of achieving something way more interesting: &lt;strong&gt;getting spaces and environments connected.&lt;/strong&gt; The premise is simple, if spaces are truly connected, they can work harder for us, react and adapt appropriately according to the level of information that we willingly share with it, and give us a much more relevant, personal and useful experience, what we call a “&lt;strong&gt;contextual experience&lt;/strong&gt;”.&lt;/p&gt; &lt;p&gt;See, I would like brands and companies to make environments work harder and better, and stop pushing us to look at the tiny mobile screen all the time. If the environment can reach through the connectivity and data flow&amp;nbsp; of our devices, then we avoid having to use our device’s as the sole window of information, the only way to interact with brands. It is an inverse data flow point of view. &lt;/p&gt; &lt;p&gt;To put it simply, I’d like the space to deliver what I need when I need it, without having to look at my mobile to get it.&amp;nbsp; &lt;/p&gt; &lt;p&gt;I’ll be exploring, writing and hopefully publishing a lot more on the subject this year. The article that &lt;strong&gt;Event Magazine&lt;/strong&gt; kindly published for me, is the start of the topic, ahead of the big trend of connected devices and “&lt;strong&gt;The Internet of Things&lt;/strong&gt;”. This is why the article itself is titled exactly like that.&lt;/p&gt; &lt;p&gt;Although the magazine is printed, I’m sharing a digital version of the article if you would like to read it. Of course, if you are really interested on the subject, I’d recommend that you get a subscription to &lt;a href=&quot;http://eventmagazine.co.uk/&quot; target=&quot;_blank&quot;&gt;Event Magazine&lt;/a&gt;.&lt;/p&gt; &lt;p&gt;If you want to read the digital version of the article, you can do so &lt;a href=&quot;https://onedrive.live.com/redir?resid=DE4123305D395277!118163&amp;amp;authkey=!AD1ouTSvlxOTGc4&amp;amp;ithint=file%2cpdf&quot; target=&quot;_blank&quot;&gt;here&lt;/a&gt;.&lt;/p&gt;  </content><link rel='replies' type='application/atom+xml' href='http://blog.anthonybaker.me/feeds/5009072641482246128/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://blog.anthonybaker.me/2015/01/the-internet-of-things-published-on.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1811411750119502062/posts/default/5009072641482246128'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1811411750119502062/posts/default/5009072641482246128'/><link rel='alternate' type='text/html' href='http://blog.anthonybaker.me/2015/01/the-internet-of-things-published-on.html' title='“The Internet of Things” – Published on Event Magazine'/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/00141462441551416511</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1811411750119502062.post-6333501862016230884</id><published>2014-11-25T22:04:00.001+00:00</published><updated>2014-11-25T22:04:19.066+00:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Conferences"/><category scheme="http://www.blogger.com/atom/ns#" term="Devices"/><category scheme="http://www.blogger.com/atom/ns#" term="Functional Integration"/><category scheme="http://www.blogger.com/atom/ns#" term="Industry News"/><category scheme="http://www.blogger.com/atom/ns#" term="Innovation"/><category scheme="http://www.blogger.com/atom/ns#" term="Interaction Behavious"/><category scheme="http://www.blogger.com/atom/ns#" term="Internet of Things"/><category scheme="http://www.blogger.com/atom/ns#" term="Intersection of Things"/><category scheme="http://www.blogger.com/atom/ns#" term="Productivity"/><title type='text'>Published Articles</title><content type='html'>&lt;p&gt;It has been quite a while since the last post on my blog. The truth is that I have been focusing my energies on lots of different things. &lt;/p&gt; &lt;p&gt;However, during this year I got a few articles published on The Guardian, Contagious and R/GA Blogs, so I wanted to share them here. &lt;/p&gt; &lt;p&gt;Check them out! &lt;/p&gt; &lt;p&gt;&lt;a href=&quot;http://techblog.rga.com/google-outside-a-story-telling-platform/&quot;&gt;Google Outside: A Storytelling Platform (R/GA Tech Blog)&lt;/a&gt;  &lt;p&gt;&lt;a href=&quot;http://www.theguardian.com/media-network/media-network-blog/2014/jul/31/digital-marketing-personalised-context-experiences&quot;&gt;Is Context the Saviour of Marketing (The Guardian)&lt;/a&gt;  &lt;p&gt;&lt;a href=&quot;http://www.theguardian.com/media-network/media-network-blog/2014/apr/16/wearable-technology-design-interface&quot;&gt;The Design Challenge of Wearables (The Guardian)&lt;/a&gt;  &lt;p&gt;&lt;a href=&quot;http://www.contagious.com/blogs/news-and-views/11748625-opinion-beyond-the-digital-screen&quot;&gt;Beyond the Digital Screen (Contagious)&lt;/a&gt;  &lt;p&gt;&lt;a href=&quot;http://www.theguardian.com/media-network/media-network-blog/2013/aug/06/10-steps-creative-prototyping-advertising&quot;&gt;10 Steps to Effective Creative Prototyping for Agencies (The Guardian)&lt;/a&gt;  &lt;p&gt;I hope I’ll get back to writing more here with the new year.&lt;/p&gt;  </content><link rel='replies' type='application/atom+xml' href='http://blog.anthonybaker.me/feeds/6333501862016230884/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://blog.anthonybaker.me/2014/11/published-articles.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1811411750119502062/posts/default/6333501862016230884'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1811411750119502062/posts/default/6333501862016230884'/><link rel='alternate' type='text/html' href='http://blog.anthonybaker.me/2014/11/published-articles.html' title='Published Articles'/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/00141462441551416511</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1811411750119502062.post-4458837400598862323</id><published>2013-12-27T13:05:00.001+00:00</published><updated>2013-12-27T13:05:46.535+00:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Devices"/><category scheme="http://www.blogger.com/atom/ns#" term="Gadgets"/><category scheme="http://www.blogger.com/atom/ns#" term="Tips"/><category scheme="http://www.blogger.com/atom/ns#" term="Touch"/><category scheme="http://www.blogger.com/atom/ns#" term="Windows 8"/><category scheme="http://www.blogger.com/atom/ns#" term="Windows 8.1"/><title type='text'>Operating system wasn&#39;t found ,try disconnecting drives and press cltr+alt+del to restart</title><content type='html'>&lt;p&gt;Annoying, isn’t it? I ran into this problem with an old Windows 7 tablet while performing a full restore of Windows 8. Although the Tablet was made for Windows 7, I was able to install the Windows 8 Consumer Preview when it came out. &lt;/p&gt; &lt;p&gt;The restore seemed to run just fine, but after restart the tablet run into this issue and I was unable to get it to start Windows again.&lt;/p&gt; &lt;p&gt;I knew I had to boot from a bootable USB image, but the tablet wound not use the USB to boot. Normally, you need would restart and get into the BIOS to change the boot device sequence. However, getting into and navigating the BIOS on a tablet without a keyboard is daunting at best.&lt;/p&gt; &lt;p&gt;I tried several button sequences to no avail. For the sake of reference, here’s how you would navigate the BIOS on a touch device without keyboard:&lt;/p&gt; &lt;ul&gt; &lt;li&gt;&lt;strong&gt;Windows Key&lt;/strong&gt; held during boot:&amp;nbsp; BIOS  &lt;li&gt;&lt;strong&gt;Volume Up&lt;/strong&gt; (up key): Navigate current page options &lt;li&gt;&lt;strong&gt;Volume Down&lt;/strong&gt; (down key): Navigate current page options&amp;nbsp; &lt;li&gt;&lt;strong&gt;Rotation Lock&lt;/strong&gt; (enter / select key): Select option &lt;li&gt;&lt;strong&gt;Windows Key&lt;/strong&gt; [In BIOS] (escape / return / go to exit page)&lt;/li&gt; &lt;li&gt;Hold&lt;strong&gt; Rotation Lock + Volume Up / Volume Down&lt;/strong&gt;: Navigate tabs/pages&lt;/li&gt;&lt;/ul&gt; &lt;p&gt;Frustrating enough, I was able to navigate the BIOS, see the boot sequence, but from the Tablet I wasn’t able to change the boot sequence order.&lt;/p&gt; &lt;p&gt;Additionally, there are also a couple of suggestions on how to booth into the recovery partition or connected UBS devices:&lt;/p&gt; &lt;ul&gt; &lt;li&gt;Hold &lt;strong&gt;Volume Up&lt;/strong&gt; to start the System Recovery Partition&lt;/li&gt; &lt;li&gt;Hold &lt;strong&gt;Volume Up + Volume Down&lt;/strong&gt; to change the booting device sequence&lt;/li&gt;&lt;/ul&gt; &lt;p&gt;However, in my case, the System Recovery didn’t work (missing Windows files) and neither the combination to change the boot sequence.&lt;/p&gt; &lt;p&gt;Finally, I found out that at the bottom of the BIOS exit page, the available boot devices are listed. The connected USB key devices should be there (make sure the USB device is connected before powering on the tablet). &lt;/p&gt; &lt;p&gt;On that page, you can actually step on the USB device and select it with the Rotation Lock button. Doing this, I was able to force the tablet to boot into the USB device and get the Windows installation going. &lt;/p&gt; &lt;p&gt;I hope this saves you some time and helps you bringing your tablet to life again.&lt;/p&gt;  </content><link rel='replies' type='application/atom+xml' href='http://blog.anthonybaker.me/feeds/4458837400598862323/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://blog.anthonybaker.me/2013/12/operating-system-wasn-found-try.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1811411750119502062/posts/default/4458837400598862323'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1811411750119502062/posts/default/4458837400598862323'/><link rel='alternate' type='text/html' href='http://blog.anthonybaker.me/2013/12/operating-system-wasn-found-try.html' title='Operating system wasn&amp;#39;t found ,try disconnecting drives and press cltr+alt+del to restart'/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/00141462441551416511</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1811411750119502062.post-3684800738863854900</id><published>2013-12-24T15:27:00.001+00:00</published><updated>2013-12-24T15:27:39.794+00:00</updated><title type='text'>Happy Holidays!</title><content type='html'>&lt;p&gt;Quite a few months since the last written words here on the blog huh? It has been a hectic but amazing year. There are really exiting things coming our way, technology is moving fast!&lt;/p&gt; &lt;p&gt;Anyway, have a peaceful and fun holiday break, and an even better year. See you in 2014!&lt;/p&gt;  </content><link rel='replies' type='application/atom+xml' href='http://blog.anthonybaker.me/feeds/3684800738863854900/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://blog.anthonybaker.me/2013/12/happy-holidays.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1811411750119502062/posts/default/3684800738863854900'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1811411750119502062/posts/default/3684800738863854900'/><link rel='alternate' type='text/html' href='http://blog.anthonybaker.me/2013/12/happy-holidays.html' title='Happy Holidays!'/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/00141462441551416511</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1811411750119502062.post-3846468594459826915</id><published>2013-07-06T22:22:00.001+01:00</published><updated>2013-07-06T22:22:13.858+01:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="3D Printing"/><category scheme="http://www.blogger.com/atom/ns#" term="BUILD"/><category scheme="http://www.blogger.com/atom/ns#" term="Devices"/><category scheme="http://www.blogger.com/atom/ns#" term="DIY"/><category scheme="http://www.blogger.com/atom/ns#" term="Functional Integration"/><category scheme="http://www.blogger.com/atom/ns#" term="Innovation"/><category scheme="http://www.blogger.com/atom/ns#" term="Kinect"/><category scheme="http://www.blogger.com/atom/ns#" term="Windows 8.1"/><title type='text'>BUILD 2013–3D Printers Everywhere</title><content type='html'>&lt;p&gt;&lt;a href=&quot;http://lh5.ggpht.com/-o1N9Qmvm2Zc/UdiKRVtX0GI/AAAAAAAAFFM/fGx_mxH6o_w/s1600-h/WP_20130626_004%25255B5%25255D.jpg&quot;&gt;&lt;img title=&quot;WP_20130626_004&quot; style=&quot;float: none; margin-left: auto; display: block; margin-right: auto&quot; alt=&quot;WP_20130626_004&quot; src=&quot;http://lh4.ggpht.com/-2R9AezT73aA/UdiKR29cghI/AAAAAAAAFFU/3g8OVaNBoBM/WP_20130626_004_thumb%25255B2%25255D.jpg?imgmax=800&quot; width=&quot;426&quot; height=&quot;240&quot;&gt;&lt;/a&gt;&lt;/p&gt; &lt;p&gt;One of the most eye catching things I saw last week, at Microsoft’s BUILD 2013 conference in San Francisco, was how 3D Printing was everywhere. &lt;/p&gt; &lt;p&gt;As may know, &lt;a href=&quot;http://channel9.msdn.com/Events/Build/2013/3-9027&quot;&gt;Windows 8.1 brings native, seamless support for 3D printing&lt;/a&gt;. You will be able to send your 3D print files directly to a 3D printer just as you currently do with any 2D printer. This is actually amazing, considering that 3D printing is still in its early stages.&lt;/p&gt; &lt;p&gt;BUILD had one big room dedicated to device showcase and partner’s displays, and let me tell you, I have never seen so many different types of 3D printers and so many people into it under one room. Every one was super friendly and willing to share their print-outs, models, advise and services.&lt;/p&gt; &lt;p&gt;I thought that the best way to share this with you, was with as many pictures as possible, so check them out!&lt;/p&gt; &lt;p&gt;&lt;a href=&quot;http://www.up3dusa.com/&quot;&gt;Up Mini 3D Printer – Up 3D USA&lt;/a&gt; &lt;p&gt;&lt;a href=&quot;http://lh6.ggpht.com/-_rtXMtmDmVg/UdiKSXeclDI/AAAAAAAAFFc/XKnrnIZa0NA/s1600-h/WP_20130626_017%25255B5%25255D.jpg&quot;&gt;&lt;img title=&quot;WP_20130626_017&quot; style=&quot;display: inline&quot; alt=&quot;WP_20130626_017&quot; src=&quot;http://lh5.ggpht.com/-uDpIc2Z01UM/UdiKTHq4HwI/AAAAAAAAFFk/_xf5FvP3nRo/WP_20130626_017_thumb%25255B2%25255D.jpg?imgmax=800&quot; width=&quot;250&quot; height=&quot;444&quot;&gt;&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&lt;a href=&quot;http://www.fabster.com/3d-printers&quot;&gt;Fabster 3D Printer&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&lt;a href=&quot;http://lh6.ggpht.com/-JNvG-0ki930/UdiKT9jmu8I/AAAAAAAAFFs/7eMccniMLZ0/s1600-h/WP_20130626_033%25255B4%25255D.jpg&quot;&gt;&lt;img title=&quot;WP_20130626_033&quot; style=&quot;display: inline&quot; alt=&quot;WP_20130626_033&quot; src=&quot;http://lh5.ggpht.com/-POei9PynPQc/UdiKUfxLMJI/AAAAAAAAFF0/21OInax4cKQ/WP_20130626_033_thumb%25255B1%25255D.jpg?imgmax=800&quot; width=&quot;426&quot; height=&quot;240&quot;&gt;&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&lt;a href=&quot;http://lh6.ggpht.com/-hTYOGwsKA6I/UdiKVRA8YBI/AAAAAAAAFF8/LkhBCTjyRvo/s1600-h/WP_20130626_035%25255B8%25255D.jpg&quot;&gt;&lt;img title=&quot;WP_20130626_035&quot; style=&quot;display: inline&quot; alt=&quot;WP_20130626_035&quot; src=&quot;http://lh5.ggpht.com/-WzEPr1F_RPU/UdiKVyDNLRI/AAAAAAAAFGE/AJWe6KmDVb8/WP_20130626_035_thumb%25255B2%25255D.jpg?imgmax=800&quot; width=&quot;426&quot; height=&quot;240&quot;&gt;&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&lt;a href=&quot;http://www.netfabb.com/netfabb_private.php&quot;&gt;Netfabb Private&lt;/a&gt; &lt;/p&gt; &lt;p&gt;&lt;a href=&quot;http://lh3.ggpht.com/-bRj_7IGFA3M/UdiKWgvk2sI/AAAAAAAAFGM/WozoR5AHYY0/s1600-h/WP_20130626_034%25255B4%25255D.jpg&quot;&gt;&lt;img title=&quot;WP_20130626_034&quot; style=&quot;display: inline&quot; alt=&quot;WP_20130626_034&quot; src=&quot;http://lh6.ggpht.com/-elqXTOE9LKc/UdiKXCSV-gI/AAAAAAAAFGU/QVLDM3YLLbE/WP_20130626_034_thumb%25255B1%25255D.jpg?imgmax=800&quot; width=&quot;426&quot; height=&quot;240&quot;&gt;&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&lt;a href=&quot;http://www.typeamachines.com/&quot;&gt;Type A Machines&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&lt;a href=&quot;http://lh5.ggpht.com/-mZrR1RSeoIM/UdiKYfvHfoI/AAAAAAAAFGc/dgVrjcqrHiQ/s1600-h/WP_20130628_001%25255B4%25255D.jpg&quot;&gt;&lt;img title=&quot;WP_20130628_001&quot; style=&quot;display: inline&quot; alt=&quot;WP_20130628_001&quot; src=&quot;http://lh5.ggpht.com/-Lbruk8obIrE/UdiKY5OhE3I/AAAAAAAAFGk/pDgKRcTvZp4/WP_20130628_001_thumb%25255B1%25255D.jpg?imgmax=800&quot; width=&quot;426&quot; height=&quot;240&quot;&gt;&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&lt;a href=&quot;http://lh4.ggpht.com/-roZqfROToYc/UdiKZiLBFQI/AAAAAAAAFGs/LDT1hvxq2Ic/s1600-h/WP_20130628_002%25255B4%25255D.jpg&quot;&gt;&lt;img title=&quot;WP_20130628_002&quot; style=&quot;display: inline&quot; alt=&quot;WP_20130628_002&quot; src=&quot;http://lh4.ggpht.com/-Aa4ssKQDMuU/UdiKaPGrmKI/AAAAAAAAFG0/mqXXZg0yMV0/WP_20130628_002_thumb%25255B1%25255D.jpg?imgmax=800&quot; width=&quot;426&quot; height=&quot;240&quot;&gt;&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&lt;a href=&quot;http://cubify.com/&quot;&gt;Cubify 3D Systems&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&lt;a href=&quot;http://lh6.ggpht.com/-fPzpJt8QVcw/UdiKbKtthHI/AAAAAAAAFG8/AH-NEEnL8fc/s1600-h/WP_20130628_003%25255B4%25255D.jpg&quot;&gt;&lt;img title=&quot;WP_20130628_003&quot; style=&quot;display: inline&quot; alt=&quot;WP_20130628_003&quot; src=&quot;http://lh6.ggpht.com/-HrOcMElmbdA/UdiKbmzPN4I/AAAAAAAAFHE/DNt8xuUEw2Y/WP_20130628_003_thumb%25255B1%25255D.jpg?imgmax=800&quot; width=&quot;426&quot; height=&quot;240&quot;&gt;&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&lt;a href=&quot;http://lh4.ggpht.com/-SshzSWwKX6c/UdiKcgtxQeI/AAAAAAAAFHM/TUgHGGccYRk/s1600-h/WP_20130628_004%25255B4%25255D.jpg&quot;&gt;&lt;img title=&quot;WP_20130628_004&quot; style=&quot;display: inline&quot; alt=&quot;WP_20130628_004&quot; src=&quot;http://lh4.ggpht.com/-fs2qGYrqAyg/UdiKdIzvILI/AAAAAAAAFHU/9HZnS6xUXPM/WP_20130628_004_thumb%25255B1%25255D.jpg?imgmax=800&quot; width=&quot;426&quot; height=&quot;240&quot;&gt;&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&lt;a href=&quot;http://lh5.ggpht.com/-kJIrbUOR9fo/UdiKd2EZ0yI/AAAAAAAAFHc/Xqb-V8Ci49Q/s1600-h/WP_20130628_005%25255B5%25255D.jpg&quot;&gt;&lt;img title=&quot;WP_20130628_005&quot; style=&quot;display: inline&quot; alt=&quot;WP_20130628_005&quot; src=&quot;http://lh5.ggpht.com/-DMpYrVx-q4Q/UdiKeUoftZI/AAAAAAAAFHk/EXytVmnhoZo/WP_20130628_005_thumb%25255B2%25255D.jpg?imgmax=800&quot; width=&quot;250&quot; height=&quot;444&quot;&gt;&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&lt;a href=&quot;http://www.makerbot.com/&quot;&gt;MakerBot&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&lt;a href=&quot;http://lh3.ggpht.com/-virfVSvMuDE/UdiKfuWkfwI/AAAAAAAAFHs/7IjWqh7edxY/s1600-h/WP_20130618_006%25255B4%25255D.jpg&quot;&gt;&lt;img title=&quot;WP_20130618_006&quot; style=&quot;display: inline&quot; alt=&quot;WP_20130618_006&quot; src=&quot;http://lh6.ggpht.com/-_4dzFhzQSCo/UdiKgJwRTAI/AAAAAAAAFH0/CzMx-RZv-sU/WP_20130618_006_thumb%25255B1%25255D.jpg?imgmax=800&quot; width=&quot;427&quot; height=&quot;240&quot;&gt;&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&lt;a href=&quot;https://www.google.co.uk/search?q=kinect+3D+printer&amp;amp;source=lnms&amp;amp;tbm=isch&amp;amp;sa=X&amp;amp;ei=C4nYUZTJNqPB0QX0uoDADQ&amp;amp;ved=0CAkQ_AUoAQ&amp;amp;biw=1600&amp;amp;bih=777&quot;&gt;Cubify + Kinect Live Printed from a Kinect-scanned person!&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&lt;a href=&quot;http://lh3.ggpht.com/-9h4_uYKrgmc/UdiKgoCAjII/AAAAAAAAFH8/x3gw2W60NqU/s1600-h/WP_20130628_032%25255B8%25255D.jpg&quot;&gt;&lt;img title=&quot;WP_20130628_032&quot; style=&quot;display: inline&quot; alt=&quot;WP_20130628_032&quot; src=&quot;http://lh6.ggpht.com/-OEtT0ZQ-_Hk/UdiKhPSxJhI/AAAAAAAAFIE/ipCHPHfjskY/WP_20130628_032_thumb%25255B2%25255D.jpg?imgmax=800&quot; width=&quot;426&quot; height=&quot;240&quot;&gt;&lt;/a&gt;&lt;/p&gt;  </content><link rel='replies' type='application/atom+xml' href='http://blog.anthonybaker.me/feeds/3846468594459826915/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://blog.anthonybaker.me/2013/07/build-20133d-printers-everywhere.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1811411750119502062/posts/default/3846468594459826915'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1811411750119502062/posts/default/3846468594459826915'/><link rel='alternate' type='text/html' href='http://blog.anthonybaker.me/2013/07/build-20133d-printers-everywhere.html' title='BUILD 2013–3D Printers Everywhere'/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/00141462441551416511</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://lh4.ggpht.com/-2R9AezT73aA/UdiKR29cghI/AAAAAAAAFFU/3g8OVaNBoBM/s72-c/WP_20130626_004_thumb%25255B2%25255D.jpg?imgmax=800" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1811411750119502062.post-4653171466221253614</id><published>2013-07-06T19:54:00.001+01:00</published><updated>2013-07-06T19:54:41.512+01:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Devices"/><category scheme="http://www.blogger.com/atom/ns#" term="Functional Integration"/><category scheme="http://www.blogger.com/atom/ns#" term="Industry News"/><category scheme="http://www.blogger.com/atom/ns#" term="Innovation"/><category scheme="http://www.blogger.com/atom/ns#" term="Interoperability"/><category scheme="http://www.blogger.com/atom/ns#" term="Music"/><category scheme="http://www.blogger.com/atom/ns#" term="Tips"/><category scheme="http://www.blogger.com/atom/ns#" term="Xbox"/><title type='text'>Xbox Music Pass Available on the Web</title><content type='html'>&lt;p&gt;&lt;a href=&quot;http://lh6.ggpht.com/-HACPCrj05eY/Udhn0OpBpoI/AAAAAAAAFD0/OGxE35-UWEs/s1600-h/xboxmusic_pass_01%25255B3%25255D.png&quot;&gt;&lt;img title=&quot;xboxmusic_pass_01&quot; style=&quot;float: none; margin-left: auto; display: block; margin-right: auto&quot; alt=&quot;xboxmusic_pass_01&quot; src=&quot;http://lh3.ggpht.com/-BbDz-UI3zH0/Udhn1PKSFyI/AAAAAAAAFD8/gW6moJJBCSo/xboxmusic_pass_01_thumb%25255B1%25255D.png?imgmax=800&quot; width=&quot;434&quot; height=&quot;220&quot;&gt;&lt;/a&gt;&lt;/p&gt; &lt;p&gt;Just received an exciting notification from my Xbox Music service communicating that the Xbox Music Pass is now on the web, allowing you to stream millions of songs through your browser, from any device. Best of all? No annoying ads!&lt;/p&gt; &lt;p&gt;&lt;a href=&quot;http://lh6.ggpht.com/-8OhL9xdR-R4/Udhn24VGv_I/AAAAAAAAFEE/1VtSUHbs_DU/s1600-h/xboxmusic_pass_02%25255B6%25255D.png&quot;&gt;&lt;img title=&quot;xboxmusic_pass_02&quot; style=&quot;float: none; margin-left: auto; display: block; margin-right: auto&quot; alt=&quot;xboxmusic_pass_02&quot; src=&quot;http://lh4.ggpht.com/-BygD9w_ypfM/Udhn3tmNNPI/AAAAAAAAFEM/4kGpMDWWBDM/xboxmusic_pass_02_thumb%25255B2%25255D.png?imgmax=800&quot; width=&quot;434&quot; height=&quot;220&quot;&gt;&lt;/a&gt;&lt;/p&gt; &lt;p&gt;The web streaming service completes the overall cross-device offering. Now you can stream and sync up your music on your Xbox, Tablets, PCs, mobiles and the web, making it one of the most compelling music services in the market. Don’t believe me? Try it for your self. You can get a 30 days trial. I use several other services including Spotify, and although the social features are quite good, I often struggle to find some of my favourite music, specially if it comes from non-English markets.&lt;/p&gt; &lt;p&gt;&lt;a href=&quot;http://lh3.ggpht.com/-6ZC04TxWAoI/Udhn48F7juI/AAAAAAAAFEU/jaAczUjBnB8/s1600-h/xboxmusic_pass_03%25255B10%25255D.png&quot;&gt;&lt;img title=&quot;xboxmusic_pass_03&quot; style=&quot;float: none; margin-left: auto; display: block; margin-right: auto&quot; alt=&quot;xboxmusic_pass_03&quot; src=&quot;http://lh4.ggpht.com/-WCc0DwG7WpE/Udhn5hiZuSI/AAAAAAAAFEc/yT1Go-7QJTY/xboxmusic_pass_03_thumb%25255B3%25255D.png?imgmax=800&quot; width=&quot;434&quot; height=&quot;220&quot;&gt;&lt;/a&gt;&lt;/p&gt; &lt;p&gt;You can explore albums, artists, and songs. You can easily browse and jump to specific names and the search works as expected. You have access to all your playlists, and you can create and modify them on the fly. Which means that you can setup your playlists before getting home, in preparation for your dinner party. &lt;/p&gt; &lt;p&gt;&lt;a href=&quot;http://lh4.ggpht.com/-4iXMlpEJ8Sk/Udhn6K0TaqI/AAAAAAAAFEk/G6w1yXNIy_Y/s1600-h/xboxmusic_pass_04%25255B10%25255D.png&quot;&gt;&lt;img title=&quot;xboxmusic_pass_04&quot; style=&quot;float: none; margin-left: auto; display: block; margin-right: auto&quot; alt=&quot;xboxmusic_pass_04&quot; src=&quot;http://lh3.ggpht.com/-8wByh07HEew/Udhn6vWEcjI/AAAAAAAAFEs/RlPrrxFaLEk/xboxmusic_pass_04_thumb%25255B3%25255D.png?imgmax=800&quot; width=&quot;434&quot; height=&quot;219&quot;&gt;&lt;/a&gt;&lt;/p&gt; &lt;p&gt;Interesting enough, at home, we are heavily using our Xbox&amp;nbsp; as an entertainment and music system. It allows us to stream all the music we like, with big screen visualizations and a decent sound system. Sure, it is a subscription service, but so far, it is one of the best-value subscriptions I have.&lt;/p&gt; &lt;p&gt;&lt;a href=&quot;http://lh5.ggpht.com/-0ikjlTIr2go/Udhn7b7jZbI/AAAAAAAAFE0/ljxR49MZbsQ/s1600-h/xboxmusic_pass_05%25255B10%25255D.png&quot;&gt;&lt;img title=&quot;xboxmusic_pass_05&quot; style=&quot;float: none; margin-left: auto; display: block; margin-right: auto&quot; alt=&quot;xboxmusic_pass_05&quot; src=&quot;http://lh6.ggpht.com/-UW4cvg_VePI/Udhn7yKGjjI/AAAAAAAAFE8/pGspzJgcxnU/xboxmusic_pass_05_thumb%25255B3%25255D.png?imgmax=800&quot; width=&quot;434&quot; height=&quot;220&quot;&gt;&lt;/a&gt;&lt;/p&gt; &lt;p&gt;Let me know your thoughts about it. And please share your experience with other services to have as a reference.&lt;/p&gt;  </content><link rel='replies' type='application/atom+xml' href='http://blog.anthonybaker.me/feeds/4653171466221253614/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://blog.anthonybaker.me/2013/07/xbox-music-pass-available-on-web.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1811411750119502062/posts/default/4653171466221253614'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1811411750119502062/posts/default/4653171466221253614'/><link rel='alternate' type='text/html' href='http://blog.anthonybaker.me/2013/07/xbox-music-pass-available-on-web.html' title='Xbox Music Pass Available on the Web'/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/00141462441551416511</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://lh3.ggpht.com/-BbDz-UI3zH0/Udhn1PKSFyI/AAAAAAAAFD8/gW6moJJBCSo/s72-c/xboxmusic_pass_01_thumb%25255B1%25255D.png?imgmax=800" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1811411750119502062.post-5005139817011302802</id><published>2013-07-06T18:51:00.001+01:00</published><updated>2013-07-06T18:51:30.776+01:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="BUILD"/><category scheme="http://www.blogger.com/atom/ns#" term="Devices"/><category scheme="http://www.blogger.com/atom/ns#" term="Innovation"/><category scheme="http://www.blogger.com/atom/ns#" term="Mobile"/><category scheme="http://www.blogger.com/atom/ns#" term="Windows 8"/><category scheme="http://www.blogger.com/atom/ns#" term="Windows 8.1"/><category scheme="http://www.blogger.com/atom/ns#" term="WinRT"/><title type='text'>Unboxing the Acer Iconia W3</title><content type='html'>&lt;p&gt;Last week I had the opportunity to attend BUILD 2013 in San Francisco, where Microsoft was bold enough to offer not one, but two tablets to every BUILD attendee! This is a picture-post on the Acer Iconia W3 unboxing for your delight, one of the first small tablets running the full Windows Pro in an 8” tablet.&lt;/p&gt; &lt;p&gt;&lt;strong&gt;Acer Tablet and Keyboard&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;&lt;a href=&quot;http://lh4.ggpht.com/-LeZcaGTaVvw/UdhY-domUnI/AAAAAAAAFBc/yu-p_uyGnxo/s1600-h/WP_20130628_034%25255B4%25255D.jpg&quot;&gt;&lt;img title=&quot;WP_20130628_034&quot; style=&quot;float: none; margin-left: auto; display: block; margin-right: auto&quot; alt=&quot;WP_20130628_034&quot; src=&quot;http://lh3.ggpht.com/-ixR1N7TdlKI/UdhY-2BDoMI/AAAAAAAAFBk/te6CbkE-f44/WP_20130628_034_thumb%25255B1%25255D.jpg?imgmax=800&quot; width=&quot;426&quot; height=&quot;240&quot;&gt;&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&lt;strong&gt;The Tablet&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;&lt;a href=&quot;http://lh6.ggpht.com/-muIH36m8lr8/UdhY_kaX7eI/AAAAAAAAFBs/cfvcV5egBZc/s1600-h/WP_20130628_035%25255B4%25255D.jpg&quot;&gt;&lt;img title=&quot;WP_20130628_035&quot; style=&quot;float: none; margin-left: auto; display: block; margin-right: auto&quot; alt=&quot;WP_20130628_035&quot; src=&quot;http://lh5.ggpht.com/-3I_LlhFH7-0/UdhZANMskUI/AAAAAAAAFB0/XBWn6znVgzU/WP_20130628_035_thumb%25255B1%25255D.jpg?imgmax=800&quot; width=&quot;426&quot; height=&quot;240&quot;&gt;&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&lt;a href=&quot;http://lh4.ggpht.com/-wkHG-km4hfA/UdhZAysE1WI/AAAAAAAAFB8/jymVmTa13DQ/s1600-h/WP_20130628_037%25255B4%25255D.jpg&quot;&gt;&lt;img title=&quot;WP_20130628_037&quot; style=&quot;float: none; margin-left: auto; display: block; margin-right: auto&quot; alt=&quot;WP_20130628_037&quot; src=&quot;http://lh3.ggpht.com/-SWlXcHwR-24/UdhZBB7CT2I/AAAAAAAAFCA/kI0DPP44LLg/WP_20130628_037_thumb%25255B1%25255D.jpg?imgmax=800&quot; width=&quot;426&quot; height=&quot;240&quot;&gt;&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&lt;a href=&quot;http://lh6.ggpht.com/-GUsmX6IGxMY/UdhZB_LuYBI/AAAAAAAAFCM/8CZFrRyYJwE/s1600-h/WP_20130628_038%25255B4%25255D.jpg&quot;&gt;&lt;img title=&quot;WP_20130628_038&quot; style=&quot;float: none; margin-left: auto; display: block; margin-right: auto&quot; alt=&quot;WP_20130628_038&quot; src=&quot;http://lh5.ggpht.com/-YEaPmlcpLNA/UdhZCYsnWgI/AAAAAAAAFCU/S4wptJBTEj0/WP_20130628_038_thumb%25255B1%25255D.jpg?imgmax=800&quot; width=&quot;426&quot; height=&quot;240&quot;&gt;&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&lt;a href=&quot;http://lh3.ggpht.com/-ksVCjk1-kzc/UdhZC2efCrI/AAAAAAAAFCc/sHDXnEwMB0Q/s1600-h/WP_20130628_041%25255B4%25255D.jpg&quot;&gt;&lt;img title=&quot;WP_20130628_041&quot; style=&quot;float: none; margin-left: auto; display: block; margin-right: auto&quot; alt=&quot;WP_20130628_041&quot; src=&quot;http://lh3.ggpht.com/-dx6xHLd3xoE/UdhZDb9V7TI/AAAAAAAAFCk/zmpBQpULkmc/WP_20130628_041_thumb%25255B1%25255D.jpg?imgmax=800&quot; width=&quot;426&quot; height=&quot;240&quot;&gt;&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&lt;strong&gt;The Set&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;&lt;a href=&quot;http://lh5.ggpht.com/-GiTsppFwGZ8/UdhZENhocVI/AAAAAAAAFCs/vpsLYeQO3h0/s1600-h/WP_20130628_042%25255B4%25255D.jpg&quot;&gt;&lt;img title=&quot;WP_20130628_042&quot; style=&quot;float: none; margin-left: auto; display: block; margin-right: auto&quot; alt=&quot;WP_20130628_042&quot; src=&quot;http://lh5.ggpht.com/-lEsaGkTIQtg/UdhZEku2a8I/AAAAAAAAFC0/O_NQaz5a68M/WP_20130628_042_thumb%25255B1%25255D.jpg?imgmax=800&quot; width=&quot;426&quot; height=&quot;240&quot;&gt;&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&lt;a href=&quot;http://lh5.ggpht.com/-HS4WS8GhpkI/UdhZFaIntMI/AAAAAAAAFC8/9VoFK7jAD_w/s1600-h/WP_20130628_044%25255B4%25255D.jpg&quot;&gt;&lt;img title=&quot;WP_20130628_044&quot; style=&quot;float: none; margin-left: auto; display: block; margin-right: auto&quot; alt=&quot;WP_20130628_044&quot; src=&quot;http://lh5.ggpht.com/-jKBmXBxjiP0/UdhZF5ThxzI/AAAAAAAAFDE/4gQyFFvp7u4/WP_20130628_044_thumb%25255B1%25255D.jpg?imgmax=800&quot; width=&quot;426&quot; height=&quot;240&quot;&gt;&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&lt;a href=&quot;http://lh4.ggpht.com/-F-10OE4ALDk/UdhZGyUwtqI/AAAAAAAAFDM/CZuToI6SpEI/s1600-h/WP_20130628_045%25255B4%25255D.jpg&quot;&gt;&lt;img title=&quot;WP_20130628_045&quot; style=&quot;float: none; margin-left: auto; display: block; margin-right: auto&quot; alt=&quot;WP_20130628_045&quot; src=&quot;http://lh6.ggpht.com/-mJ_Iq-c7MIE/UdhZHa5EEaI/AAAAAAAAFDU/YUiZ3Aqx60w/WP_20130628_045_thumb%25255B1%25255D.jpg?imgmax=800&quot; width=&quot;426&quot; height=&quot;240&quot;&gt;&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&lt;a href=&quot;http://lh6.ggpht.com/-fugcEvJfLvA/UdhZH0SiYlI/AAAAAAAAFDc/blpLcJ88pq4/s1600-h/WP_20130628_046%25255B8%25255D.jpg&quot;&gt;&lt;img title=&quot;WP_20130628_046&quot; style=&quot;float: none; margin-left: auto; display: block; margin-right: auto&quot; alt=&quot;WP_20130628_046&quot; src=&quot;http://lh6.ggpht.com/-OuJsP3fDIz8/UdhZIRVY2vI/AAAAAAAAFDk/HhlNTZAB__Q/WP_20130628_046_thumb%25255B2%25255D.jpg?imgmax=800&quot; width=&quot;426&quot; height=&quot;240&quot;&gt;&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&lt;strong&gt;First Impressions&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;So far I have been enjoying the tablet. Most of all, the small factor makes it really comfortable in portrait mode, which is great for reading and browsing through content. The performance is relatively good, although not close to the Surface Pro. &lt;/p&gt; &lt;p&gt;The only downside I can clearly see at the moment is the poor screen resolution. The keyboard form factor is a bit weird, although might be convenient if you plan to write a lot on it. So far, I used as a more-portable tablet. &lt;/p&gt; &lt;p&gt;As I develop and deploy application, I hope to be able to tell you more about it. Cheers!&lt;/p&gt;  </content><link rel='replies' type='application/atom+xml' href='http://blog.anthonybaker.me/feeds/5005139817011302802/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://blog.anthonybaker.me/2013/07/unboxing-acer-iconia-w3.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1811411750119502062/posts/default/5005139817011302802'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1811411750119502062/posts/default/5005139817011302802'/><link rel='alternate' type='text/html' href='http://blog.anthonybaker.me/2013/07/unboxing-acer-iconia-w3.html' title='Unboxing the Acer Iconia W3'/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/00141462441551416511</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://lh3.ggpht.com/-ixR1N7TdlKI/UdhY-2BDoMI/AAAAAAAAFBk/te6CbkE-f44/s72-c/WP_20130628_034_thumb%25255B1%25255D.jpg?imgmax=800" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1811411750119502062.post-8782173481194393544</id><published>2013-07-06T18:35:00.001+01:00</published><updated>2013-07-06T18:35:36.807+01:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="BUILD"/><category scheme="http://www.blogger.com/atom/ns#" term="Devices"/><category scheme="http://www.blogger.com/atom/ns#" term="Surface"/><category scheme="http://www.blogger.com/atom/ns#" term="Windows 8"/><category scheme="http://www.blogger.com/atom/ns#" term="Windows 8.1"/><category scheme="http://www.blogger.com/atom/ns#" term="WinRT"/><title type='text'>Unboxing the Surface Pro</title><content type='html'>&lt;p&gt;Last week I had the opportunity to attend BUILD 2013 in San Francisco, where Microsoft was bold enough to offer not one, but two tablets to every BUILD attendee! This is a picture-post on the Surface Pro unboxing for your delight.&lt;/p&gt; &lt;p&gt;&lt;strong&gt;Surface Pro Tablet&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;&lt;a href=&quot;http://lh5.ggpht.com/-k3wHTS1HPGg/UdhVMjJulyI/AAAAAAAAE-U/MPEceJKvzhg/s1600-h/WP_20130628_013%25255B4%25255D.jpg&quot;&gt;&lt;img title=&quot;WP_20130628_013&quot; style=&quot;float: none; margin-left: auto; display: block; margin-right: auto&quot; alt=&quot;WP_20130628_013&quot; src=&quot;http://lh6.ggpht.com/-UfJAE_LkQLc/UdhVNw5W8dI/AAAAAAAAE-c/LIDjB4YMMjU/WP_20130628_013_thumb%25255B1%25255D.jpg?imgmax=800&quot; width=&quot;426&quot; height=&quot;240&quot;&gt;&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&lt;a href=&quot;http://lh6.ggpht.com/-hhdUMo70ktU/UdhVOUE87FI/AAAAAAAAE-k/0nM5o8qc9TE/s1600-h/WP_20130628_016%25255B4%25255D.jpg&quot;&gt;&lt;img title=&quot;WP_20130628_016&quot; style=&quot;float: none; margin-left: auto; display: block; margin-right: auto&quot; alt=&quot;WP_20130628_016&quot; src=&quot;http://lh4.ggpht.com/-lz8mkOZi3kU/UdhVOofh7-I/AAAAAAAAE-o/JJgWojnPjNI/WP_20130628_016_thumb%25255B1%25255D.jpg?imgmax=800&quot; width=&quot;426&quot; height=&quot;240&quot;&gt;&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&lt;a href=&quot;http://lh4.ggpht.com/-6dZREjFDiJU/UdhVPe32klI/AAAAAAAAE-0/oH4cKwD94Zs/s1600-h/WP_20130628_017%25255B4%25255D.jpg&quot;&gt;&lt;img title=&quot;WP_20130628_017&quot; style=&quot;float: none; margin-left: auto; display: block; margin-right: auto&quot; alt=&quot;WP_20130628_017&quot; src=&quot;http://lh5.ggpht.com/-uDr768Z9cnA/UdhVP3ctsnI/AAAAAAAAE-8/ZIsKRXd08go/WP_20130628_017_thumb%25255B1%25255D.jpg?imgmax=800&quot; width=&quot;426&quot; height=&quot;240&quot;&gt;&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&lt;a href=&quot;http://lh4.ggpht.com/-TYpRdJqa-TM/UdhVQsPRgGI/AAAAAAAAE_E/AAHaRP75BPk/s1600-h/WP_20130628_018%25255B4%25255D.jpg&quot;&gt;&lt;img title=&quot;WP_20130628_018&quot; style=&quot;float: none; margin-left: auto; display: block; margin-right: auto&quot; alt=&quot;WP_20130628_018&quot; src=&quot;http://lh4.ggpht.com/-RNbX1N-b0C0/UdhVRGAr6xI/AAAAAAAAE_M/iDAsPsmQCP4/WP_20130628_018_thumb%25255B1%25255D.jpg?imgmax=800&quot; width=&quot;426&quot; height=&quot;240&quot;&gt;&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&lt;a href=&quot;http://lh4.ggpht.com/-ZjMiTtn8jVA/UdhVRtgJDoI/AAAAAAAAE_U/_1bmG0n6JXI/s1600-h/WP_20130628_020%25255B4%25255D.jpg&quot;&gt;&lt;img title=&quot;WP_20130628_020&quot; style=&quot;float: none; margin-left: auto; display: block; margin-right: auto&quot; alt=&quot;WP_20130628_020&quot; src=&quot;http://lh6.ggpht.com/-yDs9m1_I4Ok/UdhVSPUxA4I/AAAAAAAAE_c/awJDzjYSnaI/WP_20130628_020_thumb%25255B1%25255D.jpg?imgmax=800&quot; width=&quot;426&quot; height=&quot;240&quot;&gt;&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&lt;strong&gt;Surface Type Cover&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;&lt;a href=&quot;http://lh4.ggpht.com/-XHErTG7zSlo/UdhVShZVEEI/AAAAAAAAE_k/Z_XjPG6lNZI/s1600-h/WP_20130628_021%25255B4%25255D.jpg&quot;&gt;&lt;img title=&quot;WP_20130628_021&quot; style=&quot;float: none; margin-left: auto; display: block; margin-right: auto&quot; alt=&quot;WP_20130628_021&quot; src=&quot;http://lh3.ggpht.com/-fHx2jPzVojE/UdhVTGj6GmI/AAAAAAAAE_s/DOolEAdMKDc/WP_20130628_021_thumb%25255B1%25255D.jpg?imgmax=800&quot; width=&quot;426&quot; height=&quot;240&quot;&gt;&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&lt;a href=&quot;http://lh3.ggpht.com/-N5GgrWqb_nY/UdhVT-h3SjI/AAAAAAAAE_0/oZLkHO7pXxI/s1600-h/WP_20130628_023%25255B4%25255D.jpg&quot;&gt;&lt;img title=&quot;WP_20130628_023&quot; style=&quot;float: none; margin-left: auto; display: block; margin-right: auto&quot; alt=&quot;WP_20130628_023&quot; src=&quot;http://lh5.ggpht.com/-9Hsaei7i3VM/UdhVUcuDVzI/AAAAAAAAE_8/wRN7cZ5lkWM/WP_20130628_023_thumb%25255B1%25255D.jpg?imgmax=800&quot; width=&quot;426&quot; height=&quot;240&quot;&gt;&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&lt;a href=&quot;http://lh6.ggpht.com/-T1PKUmcwz0s/UdhVVNi58FI/AAAAAAAAFAE/qt4aSxhG2FU/s1600-h/WP_20130628_024%25255B4%25255D.jpg&quot;&gt;&lt;img title=&quot;WP_20130628_024&quot; style=&quot;float: none; margin-left: auto; display: block; margin-right: auto&quot; alt=&quot;WP_20130628_024&quot; src=&quot;http://lh6.ggpht.com/-iuEFuxSfe7I/UdhVVcBEK7I/AAAAAAAAFAM/LF0TvB3FTWg/WP_20130628_024_thumb%25255B1%25255D.jpg?imgmax=800&quot; width=&quot;426&quot; height=&quot;240&quot;&gt;&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&lt;strong&gt;Comparing Surface Pro to Surface RT&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;&lt;a href=&quot;http://lh6.ggpht.com/-4iANJGHoOmA/UdhVWFYREYI/AAAAAAAAFAU/kFK0mY-pFWo/s1600-h/WP_20130628_025%25255B4%25255D.jpg&quot;&gt;&lt;img title=&quot;WP_20130628_025&quot; style=&quot;float: none; margin-left: auto; display: block; margin-right: auto&quot; alt=&quot;WP_20130628_025&quot; src=&quot;http://lh3.ggpht.com/-xV7KJeO2nQo/UdhVWl-Et3I/AAAAAAAAFAc/8hWYZ-iz5GY/WP_20130628_025_thumb%25255B1%25255D.jpg?imgmax=800&quot; width=&quot;426&quot; height=&quot;240&quot;&gt;&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&lt;a href=&quot;http://lh6.ggpht.com/-VLv_mKkrWXQ/UdhVXXr0r8I/AAAAAAAAFAk/RczoAyLP-o0/s1600-h/WP_20130628_026%25255B4%25255D.jpg&quot;&gt;&lt;img title=&quot;WP_20130628_026&quot; style=&quot;float: none; margin-left: auto; display: block; margin-right: auto&quot; alt=&quot;WP_20130628_026&quot; src=&quot;http://lh3.ggpht.com/-8Wc8OSyl_NU/UdhVXpQMi3I/AAAAAAAAFAs/ohXWOdXDPIc/WP_20130628_026_thumb%25255B1%25255D.jpg?imgmax=800&quot; width=&quot;426&quot; height=&quot;240&quot;&gt;&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&lt;a href=&quot;http://lh6.ggpht.com/-jAPnUVawcVY/UdhVYbbUOiI/AAAAAAAAFA0/r1W9a4FYpWE/s1600-h/WP_20130628_027%25255B4%25255D.jpg&quot;&gt;&lt;img title=&quot;WP_20130628_027&quot; style=&quot;float: none; margin-left: auto; display: block; margin-right: auto&quot; alt=&quot;WP_20130628_027&quot; src=&quot;http://lh5.ggpht.com/-BD0g7Gxyk20/UdhVY2P55DI/AAAAAAAAFA8/T-ZfxHbcq68/WP_20130628_027_thumb%25255B1%25255D.jpg?imgmax=800&quot; width=&quot;426&quot; height=&quot;240&quot;&gt;&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&lt;a href=&quot;http://lh5.ggpht.com/-aMtR7vmX2Nk/UdhVZQk7a9I/AAAAAAAAFBE/Mf_w87RtZMY/s1600-h/WP_20130628_028%25255B4%25255D.jpg&quot;&gt;&lt;img title=&quot;WP_20130628_028&quot; style=&quot;float: none; margin-left: auto; display: block; margin-right: auto&quot; alt=&quot;WP_20130628_028&quot; src=&quot;http://lh5.ggpht.com/-d5S-oUVH1bk/UdhVZ1EZPfI/AAAAAAAAFBI/f3u1GhqJrHc/WP_20130628_028_thumb%25255B1%25255D.jpg?imgmax=800&quot; width=&quot;426&quot; height=&quot;240&quot;&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;The Surface Pro tablet is heavier and thicker than the Surface RT. However, the performance bust and the full Windows 8 capabilities are more than welcomed. The balance is great and the type cover makes it a great experience as a full, portable computer.&lt;/p&gt; &lt;p&gt;I’m already running Windows 8.1 on it, so I’ll keep you posted as I keep developing and experiencing the new OS and dev tools features.&lt;/p&gt;  </content><link rel='replies' type='application/atom+xml' href='http://blog.anthonybaker.me/feeds/8782173481194393544/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://blog.anthonybaker.me/2013/07/unboxing-surface-pro.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1811411750119502062/posts/default/8782173481194393544'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1811411750119502062/posts/default/8782173481194393544'/><link rel='alternate' type='text/html' href='http://blog.anthonybaker.me/2013/07/unboxing-surface-pro.html' title='Unboxing the Surface Pro'/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/00141462441551416511</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://lh6.ggpht.com/-UfJAE_LkQLc/UdhVNw5W8dI/AAAAAAAAE-c/LIDjB4YMMjU/s72-c/WP_20130628_013_thumb%25255B1%25255D.jpg?imgmax=800" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1811411750119502062.post-1232191943725586471</id><published>2013-07-06T18:24:00.001+01:00</published><updated>2013-07-06T18:24:23.213+01:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="BUILD"/><category scheme="http://www.blogger.com/atom/ns#" term="Conferences"/><category scheme="http://www.blogger.com/atom/ns#" term="Industry News"/><category scheme="http://www.blogger.com/atom/ns#" term="Visual Studio"/><category scheme="http://www.blogger.com/atom/ns#" term="Windows 8"/><category scheme="http://www.blogger.com/atom/ns#" term="Windows 8.1"/><category scheme="http://www.blogger.com/atom/ns#" term="Windows Phone 8"/><category scheme="http://www.blogger.com/atom/ns#" term="Windows RT"/><category scheme="http://www.blogger.com/atom/ns#" term="WinRT"/><title type='text'>BUILD 2013 – Windows Keynote Summary</title><content type='html'>&lt;p&gt;&lt;a href=&quot;http://lh5.ggpht.com/-1hqpNIrS-SU/UdhSvDoEK2I/AAAAAAAAE9s/PW_skC3fMEg/s1600-h/WP_20130626_011%25255B6%25255D.jpg&quot;&gt;&lt;img title=&quot;WP_20130626_011&quot; style=&quot;float: none; margin-left: auto; display: block; margin-right: auto&quot; alt=&quot;WP_20130626_011&quot; src=&quot;http://lh3.ggpht.com/-lMXeHHaO8sc/UdhSvp_ID9I/AAAAAAAAE90/MEt_Nawfx5c/WP_20130626_011_thumb%25255B3%25255D.jpg?imgmax=800&quot; width=&quot;426&quot; height=&quot;240&quot;&gt;&lt;/a&gt;&lt;/p&gt; &lt;p&gt;Last week was an exciting time in San Francisco, the way it can only be for the techies around the world. Microsoft hosted its annual developer conference for the third time since BUILD came to life, and this time it took place in San Francisco, home of Apple and Google.&lt;/p&gt; &lt;p&gt;There is a lot of information in the web already, and you can go straight to Channel 9 to watch the keynote and the developer sessions videos yourself. However, I wanted to share a short summary from the notes I took during the first day’s keynote, most of it related to Windows and Devices.&lt;/p&gt; &lt;p&gt;&lt;a href=&quot;http://lh4.ggpht.com/-aX1Xa7IKmK0/UdhSw8twvDI/AAAAAAAAE98/bs6WYUxN5EY/s1600-h/CameraCapture-3c919377-574f-47df-b939-8264caea0b5a%25255B5%25255D.jpg&quot;&gt;&lt;img title=&quot;CameraCapture-3c919377-574f-47df-b939-8264caea0b5a&quot; style=&quot;float: none; margin-left: auto; display: block; margin-right: auto&quot; alt=&quot;CameraCapture-3c919377-574f-47df-b939-8264caea0b5a&quot; src=&quot;http://lh3.ggpht.com/-zoo2yGWnnpQ/UdhSxS4lSMI/AAAAAAAAE-E/FGfeC88p05Q/CameraCapture-3c919377-574f-47df-b939-8264caea0b5a_thumb%25255B3%25255D.jpg?imgmax=800&quot; width=&quot;426&quot; height=&quot;240&quot;&gt;&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&lt;strong&gt;Windows 8.1&lt;/strong&gt;&lt;/p&gt; &lt;ul&gt; &lt;li&gt;Windows 8.1 Preview is announced and made available for download.&lt;/li&gt; &lt;li&gt;Windows 8.1 allows users to boot straight to the desktop.&lt;/li&gt; &lt;li&gt;Windows 8.1 brings back the Start Button, which can take you to the Start Screen of to the Full List of Apps.&lt;/li&gt; &lt;li&gt;Windows 8.1 improves the multi-screen experience, allowing different screen. resolutions, and making the transitions between screens automatically.&lt;/li&gt; &lt;li&gt;Windows 8.1 comes with the Bing platform deeply integrated.&lt;/li&gt; &lt;li&gt;Small tablets introduced and encouraged.&lt;/li&gt; &lt;li&gt;Window 8.1 improves the portrait experience.&lt;/li&gt; &lt;li&gt;Windows 8.1 improves the keyboard gestures, making it easier to type in landscape and portrait.&lt;/li&gt; &lt;li&gt;Windows 8.1 comes with lots of app improvements. &lt;/li&gt; &lt;li&gt;Mail App improvements.&lt;/li&gt; &lt;li&gt;Bing enhancements.&lt;/li&gt; &lt;li&gt;Xbox Music redesigned. &lt;/li&gt; &lt;li&gt;Music playlists can be now generated from existing websites automatically.&lt;/li&gt; &lt;li&gt;Windows 8.1 enables home screen slide shows.&lt;/li&gt; &lt;li&gt;Windows 8.1 allows to open apps from lock screen without having to log in. Perfect for answer calls or seeing calendar appointments.&lt;/li&gt; &lt;li&gt;Swipe up from Start Screen to reveal full list of apps installed on the system.&lt;/li&gt; &lt;li&gt;Animated backgrounds in the start Screen.&lt;/li&gt; &lt;li&gt;SkyDrive deeply integrated within the OS to provide a seamless experience.&lt;/li&gt; &lt;li&gt;Hands-free camera gestures introduced. Specially handy for presentations.&lt;/li&gt; &lt;li&gt;Snap functionality now allows apps to take any size of the screen.&lt;/li&gt; &lt;li&gt;Multi-screen apps, effectively allowing multiple windows to run at the same time.&lt;/li&gt; &lt;li&gt;Power Point heavy enhancements, specially regarding transitions.&lt;/li&gt; &lt;li&gt;Windows 8.1 supports native 3D printing. Works like sending documents to any normal printer.&lt;/li&gt;&lt;/ul&gt; &lt;p&gt;&lt;strong&gt;Visual Studio 2013&lt;/strong&gt;&lt;/p&gt; &lt;ul&gt; &lt;li&gt;Visual Studio 2013 preview announced and available for download.&lt;/li&gt; &lt;li&gt;Lots of new tools for performance and energy consumption analysis. &lt;/li&gt; &lt;li&gt;Async debugging improved. Amazing feature set for developers.&lt;/li&gt; &lt;li&gt;Push Notifications embedded within the IDE. Incredibly easy to set up and test.&lt;/li&gt;&lt;/ul&gt; &lt;p&gt;&lt;strong&gt;Windows Store&lt;/strong&gt;&lt;/p&gt; &lt;ul&gt; &lt;li&gt;Windows Store redesigned to provide a more compelling and personalized experience.&lt;/li&gt; &lt;li&gt;Windows Store picks for each user. Personalized experience.&lt;/li&gt; &lt;li&gt;New generation of Windows apps will be available, including Flipboard, Facebook and NFL Fantasy Football.&lt;/li&gt; &lt;li&gt;App updates are automatic in Windows 8.1, removing the need for the user to be constantly updating apps, and ensuring developers that apps will always run the latest version.&lt;/li&gt; &lt;li&gt;More than 100K Windows Phone apps in the store.&lt;/li&gt;&lt;/ul&gt; &lt;p&gt;&lt;strong&gt;Graphics and Gaming&lt;/strong&gt;&lt;/p&gt; &lt;ul&gt; &lt;li&gt;WebGL now supported.&lt;/li&gt; &lt;li&gt;MPEG Dash supported.&lt;/li&gt; &lt;ul&gt;&lt;!--EndFragment--&gt;&lt;/ul&gt; &lt;ul&gt;&lt;!--EndFragment--&gt;&lt;/ul&gt; &lt;li&gt;DirectX Tiled Resources and high resolution games in Windows 8.1 and Xbox One.&lt;/li&gt; &lt;li&gt;Project Spark presented. Crowd goes wild!&lt;/li&gt;&lt;/ul&gt; &lt;p&gt;&lt;strong&gt;Bing as a Platform&lt;/strong&gt;&lt;/p&gt; &lt;ul&gt; &lt;li&gt;Bing now available as a platform for developers to create tailored search experiences based on the platform.&lt;/li&gt; &lt;li&gt;Bing as a platform offers semantic search for developers.&lt;/li&gt; &lt;li&gt;Maps with 3D support.&lt;/li&gt; &lt;li&gt;Scan, extract and translate functionality.&lt;/li&gt; &lt;li&gt;Voice commands.&lt;/li&gt;&lt;/ul&gt; &lt;p&gt;That is a short, bullet-point style summary of the keynote. You can watch the full video online at Channel 9. Hopefully, I’ll be blogging as much as possible about the Windows 8.1 updates as I play more and more with them on my tablets. &lt;/p&gt; &lt;p&gt;See you soon!&lt;/p&gt;  </content><link rel='replies' type='application/atom+xml' href='http://blog.anthonybaker.me/feeds/1232191943725586471/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://blog.anthonybaker.me/2013/07/build-2013-windows-keynote-summary.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1811411750119502062/posts/default/1232191943725586471'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1811411750119502062/posts/default/1232191943725586471'/><link rel='alternate' type='text/html' href='http://blog.anthonybaker.me/2013/07/build-2013-windows-keynote-summary.html' title='BUILD 2013 – Windows Keynote Summary'/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/00141462441551416511</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://lh3.ggpht.com/-lMXeHHaO8sc/UdhSvp_ID9I/AAAAAAAAE90/MEt_Nawfx5c/s72-c/WP_20130626_011_thumb%25255B3%25255D.jpg?imgmax=800" height="72" width="72"/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1811411750119502062.post-9124728252130142646</id><published>2013-06-22T19:46:00.001+01:00</published><updated>2013-06-22T19:46:31.599+01:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Devices"/><category scheme="http://www.blogger.com/atom/ns#" term="DIY"/><category scheme="http://www.blogger.com/atom/ns#" term="Gadgets"/><category scheme="http://www.blogger.com/atom/ns#" term="Innovation"/><category scheme="http://www.blogger.com/atom/ns#" term="Intersection of Things"/><category scheme="http://www.blogger.com/atom/ns#" term="Retail"/><title type='text'>MakerBot 3D Printing</title><content type='html'>&lt;p&gt;&lt;a href=&quot;http://lh5.ggpht.com/-dGv6ZAVJIwI/UcXw2LDzcjI/AAAAAAAAE8A/CYlN3CNY4UA/s1600-h/WP_20130618_001%25255B6%25255D.jpg&quot;&gt;&lt;img title=&quot;WP_20130618_001&quot; style=&quot;float: none; margin-left: auto; display: block; margin-right: auto&quot; alt=&quot;WP_20130618_001&quot; src=&quot;http://lh4.ggpht.com/-NT8TOdfJGQc/UcXw3LKuY9I/AAAAAAAAE8I/FLYbU58L4i4/WP_20130618_001_thumb%25255B3%25255D.jpg?imgmax=800&quot; width=&quot;427&quot; height=&quot;240&quot;&gt;&lt;/a&gt;&lt;/p&gt; &lt;p&gt;It turns out that one of the joys of my job is to be able to play and explore a lot of technologies and gadgets in a dedicated space, where I can research and create digital experiments.&lt;/p&gt; &lt;p&gt;&lt;a href=&quot;http://lh5.ggpht.com/-pjPen5EVa0E/UcXw4KanMbI/AAAAAAAAE8Q/hY5BCJ_2Dto/s1600-h/WP_20130618_003%25255B8%25255D.jpg&quot;&gt;&lt;img title=&quot;WP_20130618_003&quot; style=&quot;float: none; margin-left: auto; display: block; margin-right: auto&quot; alt=&quot;WP_20130618_003&quot; src=&quot;http://lh4.ggpht.com/-SMR3d_evTk0/UcXw5BYOCSI/AAAAAAAAE8Y/qe5auv1S3eI/WP_20130618_003_thumb%25255B5%25255D.jpg?imgmax=800&quot; width=&quot;427&quot; height=&quot;240&quot;&gt;&lt;/a&gt;&lt;/p&gt; &lt;p&gt;Our most recent toy, is a brand new &lt;a href=&quot;http://store.makerbot.com/replicator2x.html&quot;&gt;MakerBot Replication 2X&lt;/a&gt; 3D printer! An awesome piece of tech that allows you to recreate 3D models. There’s a lot to talk about 3D printing, but this being the first chance I have to actually have one, has been a really cool experience.&lt;/p&gt; &lt;p&gt;&lt;a href=&quot;http://lh6.ggpht.com/-uk-I9-Z4zS0/UcXw6m_6bII/AAAAAAAAE8g/BqYv60mAMzI/s1600-h/WP_20130618_006%25255B4%25255D.jpg&quot;&gt;&lt;img title=&quot;WP_20130618_006&quot; style=&quot;float: none; margin-left: auto; display: block; margin-right: auto&quot; alt=&quot;WP_20130618_006&quot; src=&quot;http://lh4.ggpht.com/-eRRaY4ORwno/UcXw7dHtWYI/AAAAAAAAE8o/DRO1zmyf1zQ/WP_20130618_006_thumb%25255B1%25255D.jpg?imgmax=800&quot; width=&quot;427&quot; height=&quot;240&quot;&gt;&lt;/a&gt;&lt;/p&gt; &lt;p&gt;I already had to disassemble and clean the nozzles to change plastic colours from the extruders, a fun thing to do. I’ll hopefully be blogging a lot more and share what we can achieve with it in the short future. For now, enjoy some of the shots.&lt;/p&gt; &lt;p&gt;&lt;a href=&quot;http://lh3.ggpht.com/-zyPEqc5FjEk/UcXw8gkHYFI/AAAAAAAAE8w/D7y47UNJg64/s1600-h/WP_20130618_011%25255B4%25255D.jpg&quot;&gt;&lt;img title=&quot;WP_20130618_011&quot; style=&quot;float: none; margin-left: auto; display: block; margin-right: auto&quot; alt=&quot;WP_20130618_011&quot; src=&quot;http://lh6.ggpht.com/-c9VJWKlJyrQ/UcXw9pOSlqI/AAAAAAAAE84/jAyhotsJUyg/WP_20130618_011_thumb%25255B1%25255D.jpg?imgmax=800&quot; width=&quot;427&quot; height=&quot;240&quot;&gt;&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&lt;a href=&quot;http://lh5.ggpht.com/-q3UbNFC8UbU/UcXw-mMZmHI/AAAAAAAAE88/_47cbQxoXyQ/s1600-h/WP_20130618_009%25255B4%25255D.jpg&quot;&gt;&lt;img title=&quot;WP_20130618_009&quot; style=&quot;float: none; margin-left: auto; display: block; margin-right: auto&quot; alt=&quot;WP_20130618_009&quot; src=&quot;http://lh3.ggpht.com/-9ogAo0xPqPo/UcXw_ayMpjI/AAAAAAAAE9I/jM34U3waQrk/WP_20130618_009_thumb%25255B1%25255D.jpg?imgmax=800&quot; width=&quot;427&quot; height=&quot;240&quot;&gt;&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&lt;a href=&quot;http://lh4.ggpht.com/-bwN-ZbgEGOo/UcXxAiFIwqI/AAAAAAAAE9Q/igI0-7KOKA8/s1600-h/WP_20130618_010%25255B4%25255D.jpg&quot;&gt;&lt;img title=&quot;WP_20130618_010&quot; style=&quot;float: none; margin-left: auto; display: block; margin-right: auto&quot; alt=&quot;WP_20130618_010&quot; src=&quot;http://lh6.ggpht.com/-pgfSxnfn2hE/UcXxBcH3T3I/AAAAAAAAE9Y/pkj9qndHLhQ/WP_20130618_010_thumb%25255B1%25255D.jpg?imgmax=800&quot; width=&quot;427&quot; height=&quot;240&quot;&gt;&lt;/a&gt;&lt;/p&gt;  </content><link rel='replies' type='application/atom+xml' href='http://blog.anthonybaker.me/feeds/9124728252130142646/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://blog.anthonybaker.me/2013/06/makerbot-3d-printing.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1811411750119502062/posts/default/9124728252130142646'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1811411750119502062/posts/default/9124728252130142646'/><link rel='alternate' type='text/html' href='http://blog.anthonybaker.me/2013/06/makerbot-3d-printing.html' title='MakerBot 3D Printing'/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/00141462441551416511</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://lh4.ggpht.com/-NT8TOdfJGQc/UcXw3LKuY9I/AAAAAAAAE8I/FLYbU58L4i4/s72-c/WP_20130618_001_thumb%25255B3%25255D.jpg?imgmax=800" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1811411750119502062.post-6748962452269194009</id><published>2013-06-22T19:25:00.001+01:00</published><updated>2013-06-22T19:25:00.567+01:00</updated><category scheme="http://www.blogger.com/atom/ns#" term=".NET"/><category scheme="http://www.blogger.com/atom/ns#" term=".NET Gadgeteer"/><category scheme="http://www.blogger.com/atom/ns#" term="C#"/><category scheme="http://www.blogger.com/atom/ns#" term="Functional Integration"/><category scheme="http://www.blogger.com/atom/ns#" term="Gadgets"/><category scheme="http://www.blogger.com/atom/ns#" term="Innovation"/><category scheme="http://www.blogger.com/atom/ns#" term="Internet of Things"/><category scheme="http://www.blogger.com/atom/ns#" term="Interoperability"/><category scheme="http://www.blogger.com/atom/ns#" term="Productivity"/><category scheme="http://www.blogger.com/atom/ns#" term="Retail"/><title type='text'>Getting Started with .NET Gadgeteer</title><content type='html'>&lt;p&gt;&lt;a href=&quot;http://lh5.ggpht.com/-3CsKAFmV56g/UcXrkl51U_I/AAAAAAAAE4Y/fUNB3foAEKw/s1600-h/WP_20130529_013%25255B4%25255D.jpg&quot;&gt;&lt;img title=&quot;WP_20130529_013&quot; style=&quot;float: none; margin-left: auto; display: block; margin-right: auto&quot; alt=&quot;WP_20130529_013&quot; src=&quot;http://lh4.ggpht.com/-HNOT24OXFWc/UcXrl42ja_I/AAAAAAAAE4g/fOanVOXP5Cg/WP_20130529_013_thumb%25255B1%25255D.jpg?imgmax=800&quot; width=&quot;427&quot; height=&quot;240&quot;&gt;&lt;/a&gt;&lt;/p&gt; &lt;p&gt;A few weeks ago I had the change to attend a very cool and different kind of workshop in East London. I joined the event on an early start with other fellow developers, but this time, to play around with software AND hardware. Welcome to the realm of hardware prototyping and smart gadgets creation with .NET Gadgeteer! &lt;/p&gt; &lt;p&gt;The even took place at Modern Jago, and was hosted by &lt;a href=&quot;http://stevenjohnston.co.uk/&quot;&gt;Dr Steven Johnston&lt;/a&gt;, from Microsoft Research. The workshop was a delight and everybody who attended was having a great deal of fun.&lt;/p&gt; &lt;p align=&quot;center&quot;&gt;&lt;a href=&quot;http://lh3.ggpht.com/-ZUhp5e1QiNQ/UcXrm6CO3bI/AAAAAAAAE4o/oRvhYbhBWzo/s1600-h/WP_20130529_010%25255B7%25255D.jpg&quot;&gt;&lt;img title=&quot;WP_20130529_010&quot; style=&quot;display: inline&quot; alt=&quot;WP_20130529_010&quot; src=&quot;http://lh5.ggpht.com/-vz5Xs_v0jMc/UcXrn-_gogI/AAAAAAAAE4w/u89A7kdfoO0/WP_20130529_010_thumb%25255B4%25255D.jpg?imgmax=800&quot; width=&quot;250&quot; height=&quot;141&quot;&gt;&lt;/a&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;a href=&quot;http://lh5.ggpht.com/-n9NMKnUZAn4/UcXro6KUu0I/AAAAAAAAE44/bdteCRARcAc/s1600-h/WP_20130529_009%25255B6%25255D.jpg&quot;&gt;&lt;img title=&quot;WP_20130529_009&quot; style=&quot;display: inline&quot; alt=&quot;WP_20130529_009&quot; src=&quot;http://lh4.ggpht.com/-44SOFcDoJv0/UcXrpquANBI/AAAAAAAAE5A/UrqLoIcDkgM/WP_20130529_009_thumb%25255B3%25255D.jpg?imgmax=800&quot; width=&quot;250&quot; height=&quot;141&quot;&gt;&lt;/a&gt;&lt;a href=&quot;http://lh5.ggpht.com/-weuZOE57Hpg/UcXrrCmTqrI/AAAAAAAAE5I/_g8Nh1scMII/s1600-h/WP_20130529_004%25255B6%25255D.jpg&quot;&gt;&lt;img title=&quot;WP_20130529_004&quot; style=&quot;display: inline&quot; alt=&quot;WP_20130529_004&quot; src=&quot;http://lh3.ggpht.com/-LtG4mEv63HY/UcXrr5YmkpI/AAAAAAAAE5Q/BdDdExNWrxU/WP_20130529_004_thumb%25255B3%25255D.jpg?imgmax=800&quot; width=&quot;300&quot; height=&quot;169&quot;&gt;&lt;/a&gt;&lt;/p&gt; &lt;p&gt;We first started by creating our very own multi-led Gadgeteer module. Each of us “cooked” a multi-led circuit having a multi-led light, which we then tested with a .NET Gadgeteer main board and a simple piece of software. If you though Open Source was relevant, Open Hardware is the real deal. &lt;a href=&quot;http://www.ingenuitymicro.com/justins-blog.aspx&quot;&gt;Justin Wilson&lt;/a&gt; from &lt;a href=&quot;http://www.ingenuitymicro.com/&quot;&gt;IngenuityMicro&lt;/a&gt; was our mentor here, teaching us how to build and cook our module.&lt;/p&gt; &lt;p align=&quot;center&quot;&gt;&lt;a href=&quot;http://lh4.ggpht.com/-hHkszoQ5Dk0/UcXrtCx6ASI/AAAAAAAAE5Y/wV_l_Kx8Qw8/s1600-h/WP_20130529_008%25255B6%25255D.jpg&quot;&gt;&lt;img title=&quot;WP_20130529_008&quot; style=&quot;display: inline&quot; alt=&quot;WP_20130529_008&quot; src=&quot;http://lh5.ggpht.com/-bNz6QVsPQ_c/UcXrtxo0CcI/AAAAAAAAE5g/YuuOyhD8n-s/WP_20130529_008_thumb%25255B3%25255D.jpg?imgmax=800&quot; width=&quot;170&quot; height=&quot;96&quot;&gt;&lt;/a&gt;&amp;nbsp; &lt;a href=&quot;http://lh4.ggpht.com/-oAia7dTVbP0/UcXru-C3BuI/AAAAAAAAE5o/lXVeTwckVyA/s1600-h/WP_20130529_006%25255B8%25255D.jpg&quot;&gt;&lt;img title=&quot;WP_20130529_006&quot; style=&quot;display: inline&quot; alt=&quot;WP_20130529_006&quot; src=&quot;http://lh4.ggpht.com/-arWSJZZQrT4/UcXrvnGM8JI/AAAAAAAAE5s/31-Mlhe_1m8/WP_20130529_006_thumb%25255B5%25255D.jpg?imgmax=800&quot; width=&quot;170&quot; height=&quot;96&quot;&gt;&lt;/a&gt;&amp;nbsp; &lt;a href=&quot;http://lh5.ggpht.com/-36jUtRkJCdo/UcXrwiFhydI/AAAAAAAAE54/NOKKgj-zOnY/s1600-h/WP_20130529_007%25255B7%25255D.jpg&quot;&gt;&lt;img title=&quot;WP_20130529_007&quot; style=&quot;display: inline&quot; alt=&quot;WP_20130529_007&quot; src=&quot;http://lh6.ggpht.com/-WAyVP-CskTM/UcXrxYRj8eI/AAAAAAAAE6A/oa0BIH6g-Ws/WP_20130529_007_thumb%25255B4%25255D.jpg?imgmax=800&quot; width=&quot;170&quot; height=&quot;96&quot;&gt;&lt;/a&gt;&lt;/p&gt; &lt;p&gt;Next, Dr Johnston took the lead, and formally introduced us to .NET Gadgeteer. We were given starter kits and jump straight away to build our very own gadget, a touch-screen digital camera! Let me tell you, this is really cool stuff, in its easiest and most developer friendly way. Anyone who has done some fiddling with raw components, transistors and breadboard knows that making a gadget can be quite a challenge. Even working with &lt;a href=&quot;http://www.raspberrypi.org/&quot;&gt;Raspberry PI&lt;/a&gt; and &lt;a href=&quot;http://www.arduino.cc/&quot;&gt;Arduino&lt;/a&gt;, especially if you are trying to extend them and use them to create your own devices, can also be quite tricky. &lt;/p&gt; &lt;p align=&quot;center&quot;&gt;&lt;a href=&quot;http://lh3.ggpht.com/-wDYkneRIBjg/UcXryklfRrI/AAAAAAAAE6I/bsanHwsqXqk/s1600-h/WP_20130529_015%25255B5%25255D.jpg&quot;&gt;&lt;img title=&quot;WP_20130529_015&quot; style=&quot;display: inline&quot; alt=&quot;WP_20130529_015&quot; src=&quot;http://lh5.ggpht.com/-GBDBVhb8Yds/UcXrzvrlySI/AAAAAAAAE6M/-I1ONPG7dX0/WP_20130529_015_thumb%25255B2%25255D.jpg?imgmax=800&quot; width=&quot;250&quot; height=&quot;141&quot;&gt;&lt;/a&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;a href=&quot;http://lh3.ggpht.com/-tHl6_iidBlI/UcXr0Ueg2MI/AAAAAAAAE6Y/o-XUH2YQves/s1600-h/WP_20130529_011%25255B5%25255D.jpg&quot;&gt;&lt;img title=&quot;WP_20130529_011&quot; style=&quot;display: inline&quot; alt=&quot;WP_20130529_011&quot; src=&quot;http://lh5.ggpht.com/-SxOUZ4lez-E/UcXr1DF_VBI/AAAAAAAAE6g/fHi6HffMn9c/WP_20130529_011_thumb%25255B2%25255D.jpg?imgmax=800&quot; width=&quot;250&quot; height=&quot;141&quot;&gt;&lt;/a&gt;&lt;/p&gt; &lt;p&gt;.NET Gadgeteer is intended to make it really easy to create components. All modules already come with the required connectors, and you can even use extender modules to connect to other non-Gadgeteer modules. To give you an example, I was able to build my version of a fully functional touch-enabled digital camera in less that an hour, and with less than 10 lines of code! That is unbeatable! &lt;/p&gt; &lt;p align=&quot;center&quot;&gt;&lt;a href=&quot;http://lh4.ggpht.com/-5qaqJ8ZHEe4/UcXr2I3S6jI/AAAAAAAAE6o/nY3Bo6JkvwY/s1600-h/WP_20130529_018%25255B5%25255D.jpg&quot;&gt;&lt;img title=&quot;WP_20130529_018&quot; style=&quot;display: inline&quot; alt=&quot;WP_20130529_018&quot; src=&quot;http://lh5.ggpht.com/-t6heoBVTCzc/UcXr3OGvVHI/AAAAAAAAE6w/yhknzawQUSU/WP_20130529_018_thumb%25255B2%25255D.jpg?imgmax=800&quot; width=&quot;250&quot; height=&quot;141&quot;&gt;&lt;/a&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;a href=&quot;http://lh6.ggpht.com/-3wEVBWiz-Wk/UcXr4lEuIhI/AAAAAAAAE64/PvTq1C-VsWQ/s1600-h/WP_20130529_016%25255B5%25255D.jpg&quot;&gt;&lt;img title=&quot;WP_20130529_016&quot; style=&quot;display: inline&quot; alt=&quot;WP_20130529_016&quot; src=&quot;http://lh3.ggpht.com/-nhjDq4AiRrQ/UcXr5bFsmdI/AAAAAAAAE7A/lBiQ15MmMfw/WP_20130529_016_thumb%25255B2%25255D.jpg?imgmax=800&quot; width=&quot;250&quot; height=&quot;141&quot;&gt;&lt;/a&gt;&lt;/p&gt; &lt;p&gt;I then extended it to use light sensors to trigger the pictures and even connected it to a mechanical motor just for the fun of it.&lt;/p&gt; &lt;p align=&quot;center&quot;&gt;&lt;a href=&quot;http://lh3.ggpht.com/-UwOt7v0LM-Y/UcXr6BclpZI/AAAAAAAAE7I/cE_LFyfcUvU/s1600-h/WP_20130529_021%25255B9%25255D.jpg&quot;&gt;&lt;img title=&quot;WP_20130529_021&quot; style=&quot;display: inline&quot; alt=&quot;WP_20130529_021&quot; src=&quot;http://lh6.ggpht.com/-nLKMlYfjBdU/UcXr6ze50gI/AAAAAAAAE7Q/j3FuRkI03mg/WP_20130529_021_thumb%25255B3%25255D.jpg?imgmax=800&quot; width=&quot;250&quot; height=&quot;141&quot;&gt;&lt;/a&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;a href=&quot;http://lh6.ggpht.com/-vuWREAzjLp8/UcXr8FDcR5I/AAAAAAAAE7Y/VNX_Md2pTCY/s1600-h/WP_20130529_019%25255B9%25255D.jpg&quot;&gt;&lt;img title=&quot;WP_20130529_019&quot; style=&quot;display: inline&quot; alt=&quot;WP_20130529_019&quot; src=&quot;http://lh5.ggpht.com/-bpydRBcoOYk/UcXr82bQkFI/AAAAAAAAE7g/00F4ThfQNxI/WP_20130529_019_thumb%25255B3%25255D.jpg?imgmax=800&quot; width=&quot;250&quot; height=&quot;141&quot;&gt;&lt;/a&gt;&lt;/p&gt; &lt;p&gt;What is most compelling about .NET Gadgeteer is that because its solderless assembly and computer-aided design you can build things really fast. This makes it a truly rapid prototyping platform for small electronic devices. I have been enforcing rapid prototyping techniques for efficient software development at my work and with different multi-disciplinary teams for the past couple of years, and being able to apply this techniques to hardware prototyping open a huge potential for digital solutions in the short-term future.&lt;/p&gt; &lt;p&gt;&lt;a href=&quot;http://lh6.ggpht.com/-jPEAZdLCetQ/UcXr91052-I/AAAAAAAAE7o/aWsxD0LiYAc/s1600-h/WP_20130529_023%25255B4%25255D.jpg&quot;&gt;&lt;img title=&quot;WP_20130529_023&quot; style=&quot;float: none; margin-left: auto; display: block; margin-right: auto&quot; alt=&quot;WP_20130529_023&quot; src=&quot;http://lh4.ggpht.com/-20f9Cl-4dN8/UcXr-qUAWTI/AAAAAAAAE7w/g73HDrScBKk/WP_20130529_023_thumb%25255B1%25255D.jpg?imgmax=800&quot; width=&quot;427&quot; height=&quot;240&quot;&gt;&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&lt;a href=&quot;http://www.netmf.com/gadgeteer/&quot;&gt;.NET Gadgeteer&lt;/a&gt; is an open source/open hardware project that uses the &lt;a href=&quot;http://www.netmf.com/&quot;&gt;Microsoft .NET Micro Framework&lt;/a&gt;. You can learn more at &lt;a href=&quot;http://gadgeteering.net/&quot;&gt;Gadgeteering.net&lt;/a&gt;.&lt;/p&gt; &lt;p&gt;Make sure to &lt;a href=&quot;http://www.netmf.com/gadgeteer/showcase.aspx?showcaseid=1&quot;&gt;check out more about .NET Gadgeteer&lt;/a&gt;, and start building your own gadgets and becoming part of an exciting community!&lt;/p&gt; &lt;p&gt;Other useful links to get started:&lt;/p&gt; &lt;p&gt;&lt;a href=&quot;http://www.netmf.com/gadgeteer/get-started.aspx&quot;&gt;http://www.netmf.com/gadgeteer/get-started.aspx&lt;/a&gt;&lt;br&gt;&lt;a href=&quot;http://www.gadgeteering.net/&quot;&gt;http://www.gadgeteering.net/&lt;/a&gt;&lt;br&gt;&lt;a href=&quot;http://www.microsoft.com/net/multiple-platform-support&quot;&gt;http://www.microsoft.com/net/multiple-platform-support&lt;/a&gt;&lt;br&gt;&lt;a href=&quot;http://netmf.codeplex.com/releases/view/81000&quot;&gt;http://netmf.codeplex.com/releases/view/81000&lt;/a&gt;&lt;br&gt;&lt;a href=&quot;http://www.ghielectronics.com/support/.net-micro-framework&quot;&gt;http://www.ghielectronics.com/support/.net-micro-framework&lt;/a&gt;&lt;br&gt;&lt;a href=&quot;https://gadgeteer.codeplex.com/releases/view/105366&quot;&gt;https://gadgeteer.codeplex.com/releases/view/105366&lt;/a&gt;  </content><link rel='replies' type='application/atom+xml' href='http://blog.anthonybaker.me/feeds/6748962452269194009/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://blog.anthonybaker.me/2013/06/getting-started-with-net-gadgeteer.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1811411750119502062/posts/default/6748962452269194009'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1811411750119502062/posts/default/6748962452269194009'/><link rel='alternate' type='text/html' href='http://blog.anthonybaker.me/2013/06/getting-started-with-net-gadgeteer.html' title='Getting Started with .NET Gadgeteer'/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/00141462441551416511</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://lh4.ggpht.com/-HNOT24OXFWc/UcXrl42ja_I/AAAAAAAAE4g/fOanVOXP5Cg/s72-c/WP_20130529_013_thumb%25255B1%25255D.jpg?imgmax=800" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1811411750119502062.post-2819693000528191437</id><published>2013-06-16T17:31:00.001+01:00</published><updated>2013-06-16T17:31:33.141+01:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Apple"/><category scheme="http://www.blogger.com/atom/ns#" term="Continuous Deployment"/><category scheme="http://www.blogger.com/atom/ns#" term="iOS"/><category scheme="http://www.blogger.com/atom/ns#" term="iPhone"/><category scheme="http://www.blogger.com/atom/ns#" term="Mobile"/><category scheme="http://www.blogger.com/atom/ns#" term="Productivity"/><category scheme="http://www.blogger.com/atom/ns#" term="Tips"/><title type='text'>iOS Application Distribution with TestFlight</title><content type='html'>&lt;p&gt;Mobile development is becoming more and more relevant in the current digital landscape. Mobile devices are now covering a wide range of demographics, price tags and features, allowing more and more people to have access to them.&lt;/p&gt; &lt;p&gt;For me, being able to understand mobile platforms is important, both from business and development perspectives. I have been working on several mobile projects from different perspectives, coding, leading and facilitating mobile solutions not only on the Windows Phone platform but also on iOS.&lt;/p&gt; &lt;p&gt;Distribution of mobile applications is a key topic when developing a mobile application. Being able to quickly compile, deploy and share builds is highly important, particularly when working on fast phased and collaborative prototyping projects.&lt;/p&gt; &lt;p&gt;On one of these recent projects we set up to use &lt;a href=&quot;https://testflightapp.com&quot;&gt;TestFlight&lt;/a&gt; as our distribution platform.&amp;nbsp; &lt;/p&gt; &lt;p&gt;For those of us who develop applications, especially mobile applications, easy distribution is always a challenge. &lt;a href=&quot;https://testflightapp.com&quot;&gt;TestFlight&lt;/a&gt; is a brilliant tool to ease the pain and help us distribute iOS applications in a simple and straight forward way. &lt;p&gt;&lt;a href=&quot;https://testflightapp.com&quot;&gt;TestFlight&lt;/a&gt; is well known to iOS developers, and you should give it a try if you are developing iOS apps (promised for Android development soon).  &lt;p&gt;It is a free platform intended for mobile developers, project managers and application testers. It is used to distribute beta and internal iOS applications to team members over-the-air. With it, you are able to upload and manage application builds, invite people, create and manage distribution lists and distribute applications in a simple and straight forward way. They also offer an SDK (currently for iOS only) which enables you to extend the metrics you can get from your apps. &lt;p&gt;&lt;a href=&quot;http://lh4.ggpht.com/-wzq6TzdLCug/Ub3oUh48qpI/AAAAAAAAE3c/lPxe3fIsRYI/s1600-h/testflight_01%25255B11%25255D.png&quot;&gt;&lt;img title=&quot;testflight_01&quot; style=&quot;float: none; margin-left: auto; display: block; margin-right: auto&quot; alt=&quot;testflight_01&quot; src=&quot;http://lh6.ggpht.com/-ZPJEvwCzWOA/Ub3oVcqb5xI/AAAAAAAAE3k/TdY9VWMacQQ/testflight_01_thumb%25255B7%25255D.png?imgmax=800&quot; width=&quot;438&quot; height=&quot;392&quot;&gt;&lt;/a&gt; &lt;p&gt;&lt;strong&gt;Here is how to get started&lt;/strong&gt; &lt;ol&gt; &lt;li&gt;Go to &lt;a href=&quot;https://testflightapp.com&quot;&gt;TestFlight’s website&lt;/a&gt;.&lt;/li&gt; &lt;li&gt;Sign up for an account (you should use an email address you use, or can access from your iOS device)&lt;/li&gt; &lt;li&gt;Create a team&lt;/li&gt; &lt;li&gt;Invite team members&lt;/li&gt; &lt;li&gt;You can create distribution lists and add team members to them&lt;/li&gt; &lt;li&gt;Add the team members&#39; devices to their application build (this still has to be done via Apple&#39;s provisioning on the Developer Portal)&lt;/li&gt; &lt;li&gt;Upload your application to TestFlight (.ipa)&lt;/li&gt; &lt;li&gt;Distribute your app (with just a click) to everyone, or your selected lists or team members.&lt;/li&gt; &lt;li&gt;Track downloads, installs and more through your TestFlight dashboard.&lt;/li&gt;&lt;/ol&gt; &lt;p&gt;When you distribute an application, TestFlight will send an email to the registered email addresses included. People will get an email with the app’s information and a link to download and install the application’s build to the device. &lt;/p&gt; &lt;p&gt;TestFlight also exposes an API that can be used to automate the build’s upload. This is quite handy to setup continuous deployment mechanisms, but that will be a topic for another post. &lt;p&gt;&lt;a href=&quot;http://lh4.ggpht.com/-KLNKO5AEqbU/Ub3oWcQp7_I/AAAAAAAAE3s/-CbJT7rmhxE/s1600-h/testflight_04%25255B4%25255D.png&quot;&gt;&lt;img title=&quot;testflight_04&quot; style=&quot;float: none; margin-left: auto; display: block; margin-right: auto&quot; alt=&quot;testflight_04&quot; src=&quot;http://lh4.ggpht.com/-NuPwfSEeeEo/Ub3oXEzSCYI/AAAAAAAAE30/xnWy3-HX5qQ/testflight_04_thumb%25255B2%25255D.png?imgmax=800&quot; width=&quot;438&quot; height=&quot;345&quot;&gt;&lt;/a&gt; &lt;p&gt;&lt;strong&gt;Upload a Build&lt;/strong&gt; &lt;ol&gt; &lt;li&gt;From the dashboard you can select the &#39;Add a Build&#39; button.&lt;/li&gt; &lt;li&gt;This will take you to the upload screen. Drag and drop your .ipa file or click on the page to browse for it.&lt;/li&gt; &lt;li&gt;Add the corresponding build notes.&lt;/li&gt; &lt;li&gt;Click Upload to upload your app build to TestFlight.&lt;/li&gt; &lt;li&gt;Afterwards you can select the people you want to have access to it.&lt;/li&gt; &lt;li&gt;Send them the build.&lt;/li&gt;&lt;/ol&gt; &lt;p&gt;&lt;a href=&quot;http://lh4.ggpht.com/-1ABHc8RR690/Ub3oX-Pf7aI/AAAAAAAAE38/7vRlY_qqKDw/s1600-h/testflight_02%25255B3%25255D.png&quot;&gt;&lt;img title=&quot;testflight_02&quot; style=&quot;float: none; margin-left: auto; display: block; margin-right: auto&quot; alt=&quot;testflight_02&quot; src=&quot;http://lh6.ggpht.com/-SfJfy2ktQ1w/Ub3oY04tFaI/AAAAAAAAE4A/WRCkfwz0-TI/testflight_02_thumb%25255B1%25255D.png?imgmax=800&quot; width=&quot;434&quot; height=&quot;209&quot;&gt;&lt;/a&gt;&lt;/p&gt; &lt;p&gt;Make sure to also take a look at the &lt;a href=&quot;http://help.testflightapp.com/customer/portal/articles/829819-setting-up-permissions-distribution&quot;&gt;Permissions and Distributions&lt;/a&gt; features, the &lt;a href=&quot;http://help.testflightapp.com/customer/portal/articles/843659-what-is-the-testflight-dashboard-&quot;&gt;dashboard&lt;/a&gt; and the &lt;a href=&quot;http://help.testflightapp.com/&quot;&gt;help&lt;/a&gt; links.&lt;/p&gt; &lt;p&gt;&lt;strong&gt;Connecting device with account&lt;/strong&gt; &lt;p&gt;When you connect your device a small configuration profile is installed on your device which does two things. First, it sends your device&#39;s unique identifier (UDID) to TestFlight allowing a developer to include your device in future builds. Second, it adds a bookmark (web clip) to your home screen giving you quick access to the TestFlight website and your application list. No device settings are changed. The bookmark is a technical requirement in order to make the UDID sending possible. &lt;p&gt;You can view and/or remove the profile and verify what it installs by going to Settings &amp;gt; General &amp;gt; Profiles and look under the Configuration Profiles Section. Check out &lt;a href=&quot;http://help.testflightapp.com/customer/portal/articles/829600-how-do-i-connect-my-device-to-my-account-&quot;&gt;this page&lt;/a&gt; if you want to dig deeper on the subject.       </content><link rel='replies' type='application/atom+xml' href='http://blog.anthonybaker.me/feeds/2819693000528191437/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://blog.anthonybaker.me/2013/06/ios-application-distribution-with.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1811411750119502062/posts/default/2819693000528191437'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1811411750119502062/posts/default/2819693000528191437'/><link rel='alternate' type='text/html' href='http://blog.anthonybaker.me/2013/06/ios-application-distribution-with.html' title='iOS Application Distribution with TestFlight'/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/00141462441551416511</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://lh6.ggpht.com/-ZPJEvwCzWOA/Ub3oVcqb5xI/AAAAAAAAE3k/TdY9VWMacQQ/s72-c/testflight_01_thumb%25255B7%25255D.png?imgmax=800" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1811411750119502062.post-4470877757743727977</id><published>2013-06-16T16:59:00.001+01:00</published><updated>2013-06-16T16:59:09.366+01:00</updated><category scheme="http://www.blogger.com/atom/ns#" term=".NET"/><category scheme="http://www.blogger.com/atom/ns#" term="C#"/><category scheme="http://www.blogger.com/atom/ns#" term="Mobile"/><category scheme="http://www.blogger.com/atom/ns#" term="Tips"/><category scheme="http://www.blogger.com/atom/ns#" term="Windows Phone 8"/><category scheme="http://www.blogger.com/atom/ns#" term="WinRT"/><category scheme="http://www.blogger.com/atom/ns#" term="XAML"/><title type='text'>How to Upload a File from a Windows Phone App</title><content type='html'>&lt;p&gt;In this post I’ll share with you how to upload a files from a Windows Phone application to a web service via HTTP POST. I’ll be using ASP.NET MVC to create a simple service that allows you to post multi-part form data over HTTP, and a Windows Phone 8 project.&lt;/p&gt; &lt;p&gt;Surprisingly enough, seems to me that there are very few examples available on the web, about how to achieve such a basic feature. It might be because most apps will commonly use popular services like Facebook or Twitter, or established cloud services where APIs and examples exist. However, the moment you want to create your own service to upload photos or files from your mobile app, working coding samples start to mingle.&lt;/p&gt; &lt;p&gt;For the file upload web service, you can use WCF, Web API or ASP.NET MVC (or any other web services technology for that matter), as long as you can provide an endpoint that accepts an http POST request using multipart form data. I previously published a post on &lt;a href=&quot;http://blog.anthonybaker.me/2013/06/how-to-implement-file-upload-restful.html&quot;&gt;how to implement the upload service&lt;/a&gt;. Check it out for details and step-by-step instructions. You can also download the sample project &lt;a href=&quot;https://github.com/anthonybaker/MVC_FileUploadSample_01&quot;&gt;here&lt;/a&gt;.&lt;/p&gt; &lt;p&gt;&lt;a href=&quot;http://lh3.ggpht.com/--eKDFJ7DTM0/Ub3gXx_CrDI/AAAAAAAAEzk/tjkdO9QItiM/s1600-h/image3.png&quot;&gt;&lt;img title=&quot;image&quot; style=&quot;float: none; margin-left: auto; display: block; margin-right: auto&quot; alt=&quot;image&quot; src=&quot;http://lh6.ggpht.com/-Sszd2pgIXcw/Ub3gY2eFMFI/AAAAAAAAEzs/YYW1jBFbPYI/image_thumb1.png?imgmax=800&quot; width=&quot;347&quot; height=&quot;240&quot;&gt;&lt;/a&gt;&lt;/p&gt; &lt;p&gt;Let’s now create the Windows Phone 8 client application that will upload the file. In this case, we will create a simple application that will allow the user to pick a picture from the phone pictures library and upload it to the service.&lt;/p&gt; &lt;p&gt;&lt;a href=&quot;http://lh3.ggpht.com/-SYtSOFKJL6A/Ub3gZQFoyYI/AAAAAAAAEz0/uLnbdqQVwnE/s1600-h/image%25255B9%25255D.png&quot;&gt;&lt;img title=&quot;image&quot; style=&quot;float: none; margin-left: auto; display: block; margin-right: auto&quot; alt=&quot;image&quot; src=&quot;http://lh5.ggpht.com/-R5-gTohSRaA/Ub3gaCsXBtI/AAAAAAAAEz8/Wl96sQVUbY0/image_thumb%25255B4%25255D.png?imgmax=800&quot; width=&quot;175&quot; height=&quot;240&quot;&gt;&lt;/a&gt;&lt;/p&gt; &lt;p&gt;Open Visual Studio and create a new empty Windows Phone 8 application. Modify the layout of the UI to provide a simple interface to choose a picture, display it and then upload it. &lt;/p&gt; &lt;p&gt;&lt;a href=&quot;http://lh5.ggpht.com/-Da29505DlOI/Ub3gaoXNfiI/AAAAAAAAE0E/FVfDyD9efpA/s1600-h/image7.png&quot;&gt;&lt;img title=&quot;image&quot; style=&quot;float: none; margin-left: auto; display: block; margin-right: auto&quot; alt=&quot;image&quot; src=&quot;http://lh3.ggpht.com/-H3RFl3CAVsM/Ub3gbJatzJI/AAAAAAAAE0M/PoxWfx8ARJA/image_thumb3.png?imgmax=800&quot; width=&quot;133&quot; height=&quot;240&quot;&gt;&lt;/a&gt;&lt;/p&gt; &lt;p&gt;Next, let’s create the functionality to select an existing photo from the phone’s picture library. The code below uses the WP8 &lt;a href=&quot;http://msdn.microsoft.com/en-us/library/windowsphone/develop/hh394019(v=vs.105).aspx&quot;&gt;PhotoChooserTask&lt;/a&gt; to achieve exactly that. Notice that we are attaching an event handler to the completed event, so we know when the user chose the picture.&lt;/p&gt;&lt;pre style=&quot;overflow: auto; border-top: #cecece 1px solid; border-right: #cecece 1px solid; border-bottom: #cecece 1px solid; padding-bottom: 5px; padding-top: 5px; padding-left: 5px; min-height: 40px; border-left: #cecece 1px solid; padding-right: 5px; width: 580px; background-color: #fbfbfb&quot;&gt;&lt;pre style=&quot;font-size: 12px; font-family: consolas,&#39;Courier New&#39;,courier,monospace; margin: 0em; width: 100%; background-color: #eaeaea&quot;&gt;&lt;span style=&quot;color: #0000ff&quot;&gt;public&lt;/span&gt; partial &lt;span style=&quot;color: #0000ff&quot;&gt;class&lt;/span&gt; MainPage : PhoneApplicationPage&lt;br /&gt;&lt;/pre&gt;&lt;pre style=&quot;font-size: 12px; font-family: consolas,&#39;Courier New&#39;,courier,monospace; margin: 0em; width: 100%; background-color: #ffffff&quot;&gt;{&lt;br /&gt;&lt;/pre&gt;&lt;pre style=&quot;font-size: 12px; font-family: consolas,&#39;Courier New&#39;,courier,monospace; margin: 0em; width: 100%; background-color: #eaeaea&quot;&gt;    &lt;span style=&quot;color: #008000&quot;&gt;// Image stream variables&lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;&lt;pre style=&quot;font-size: 12px; font-family: consolas,&#39;Courier New&#39;,courier,monospace; margin: 0em; width: 100%; background-color: #ffffff&quot;&gt;    &lt;span style=&quot;color: #0000ff&quot;&gt;private&lt;/span&gt; MemoryStream photoStream;&lt;br /&gt;&lt;/pre&gt;&lt;pre style=&quot;font-size: 12px; font-family: consolas,&#39;Courier New&#39;,courier,monospace; margin: 0em; width: 100%; background-color: #eaeaea&quot;&gt;    &lt;span style=&quot;color: #0000ff&quot;&gt;private&lt;/span&gt; &lt;span style=&quot;color: #0000ff&quot;&gt;string&lt;/span&gt; fileName;&lt;br /&gt;&lt;/pre&gt;&lt;pre style=&quot;font-size: 12px; font-family: consolas,&#39;Courier New&#39;,courier,monospace; margin: 0em; width: 100%; background-color: #ffffff&quot;&gt;&lt;/pre&gt;&lt;pre style=&quot;font-size: 12px; font-family: consolas,&#39;Courier New&#39;,courier,monospace; margin: 0em; width: 100%; background-color: #eaeaea&quot;&gt;    &lt;span style=&quot;color: #008000&quot;&gt;// PhotoChooserTask definition&lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;&lt;pre style=&quot;font-size: 12px; font-family: consolas,&#39;Courier New&#39;,courier,monospace; margin: 0em; width: 100%; background-color: #ffffff&quot;&gt;    PhotoChooserTask photoChooserTask;&lt;br /&gt;&lt;/pre&gt;&lt;pre style=&quot;font-size: 12px; font-family: consolas,&#39;Courier New&#39;,courier,monospace; margin: 0em; width: 100%; background-color: #eaeaea&quot;&gt;&lt;/pre&gt;&lt;pre style=&quot;font-size: 12px; font-family: consolas,&#39;Courier New&#39;,courier,monospace; margin: 0em; width: 100%; background-color: #ffffff&quot;&gt;    &lt;span style=&quot;color: #008000&quot;&gt;// Constructor&lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;&lt;pre style=&quot;font-size: 12px; font-family: consolas,&#39;Courier New&#39;,courier,monospace; margin: 0em; width: 100%; background-color: #eaeaea&quot;&gt;    &lt;span style=&quot;color: #0000ff&quot;&gt;public&lt;/span&gt; MainPage()&lt;br /&gt;&lt;/pre&gt;&lt;pre style=&quot;font-size: 12px; font-family: consolas,&#39;Courier New&#39;,courier,monospace; margin: 0em; width: 100%; background-color: #ffffff&quot;&gt;    {&lt;br /&gt;&lt;/pre&gt;&lt;pre style=&quot;font-size: 12px; font-family: consolas,&#39;Courier New&#39;,courier,monospace; margin: 0em; width: 100%; background-color: #eaeaea&quot;&gt;        InitializeComponent();&lt;br /&gt;&lt;/pre&gt;&lt;pre style=&quot;font-size: 12px; font-family: consolas,&#39;Courier New&#39;,courier,monospace; margin: 0em; width: 100%; background-color: #ffffff&quot;&gt;&lt;/pre&gt;&lt;pre style=&quot;font-size: 12px; font-family: consolas,&#39;Courier New&#39;,courier,monospace; margin: 0em; width: 100%; background-color: #eaeaea&quot;&gt;        &lt;span style=&quot;color: #008000&quot;&gt;// initializes the PhotoChooserTask&lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;&lt;pre style=&quot;font-size: 12px; font-family: consolas,&#39;Courier New&#39;,courier,monospace; margin: 0em; width: 100%; background-color: #ffffff&quot;&gt;        photoChooserTask = &lt;span style=&quot;color: #0000ff&quot;&gt;new&lt;/span&gt; PhotoChooserTask();&lt;br /&gt;&lt;/pre&gt;&lt;pre style=&quot;font-size: 12px; font-family: consolas,&#39;Courier New&#39;,courier,monospace; margin: 0em; width: 100%; background-color: #eaeaea&quot;&gt;        photoChooserTask.Completed += &lt;br /&gt;&lt;/pre&gt;&lt;pre style=&quot;font-size: 12px; font-family: consolas,&#39;Courier New&#39;,courier,monospace; margin: 0em; width: 100%; background-color: #ffffff&quot;&gt;            &lt;span style=&quot;color: #0000ff&quot;&gt;new&lt;/span&gt; EventHandler&amp;lt;PhotoResult&amp;gt;(OnPhotoChooserTaskCompleted);&lt;br /&gt;&lt;/pre&gt;&lt;pre style=&quot;font-size: 12px; font-family: consolas,&#39;Courier New&#39;,courier,monospace; margin: 0em; width: 100%; background-color: #eaeaea&quot;&gt;    }&lt;br /&gt;&lt;/pre&gt;&lt;pre style=&quot;font-size: 12px; font-family: consolas,&#39;Courier New&#39;,courier,monospace; margin: 0em; width: 100%; background-color: #ffffff&quot;&gt;&lt;/pre&gt;&lt;pre style=&quot;font-size: 12px; font-family: consolas,&#39;Courier New&#39;,courier,monospace; margin: 0em; width: 100%; background-color: #eaeaea&quot;&gt;    &lt;span style=&quot;color: #008000&quot;&gt;// Launches the photo chooser. &lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;&lt;pre style=&quot;font-size: 12px; font-family: consolas,&#39;Courier New&#39;,courier,monospace; margin: 0em; width: 100%; background-color: #ffffff&quot;&gt;    &lt;span style=&quot;color: #0000ff&quot;&gt;private&lt;/span&gt; &lt;span style=&quot;color: #0000ff&quot;&gt;void&lt;/span&gt; OnChoosePicture(&lt;span style=&quot;color: #0000ff&quot;&gt;object&lt;/span&gt; sender, &lt;br /&gt;&lt;/pre&gt;&lt;pre style=&quot;font-size: 12px; font-family: consolas,&#39;Courier New&#39;,courier,monospace; margin: 0em; width: 100%; background-color: #eaeaea&quot;&gt;                     System.Windows.Input.GestureEventArgs e)&lt;br /&gt;&lt;/pre&gt;&lt;pre style=&quot;font-size: 12px; font-family: consolas,&#39;Courier New&#39;,courier,monospace; margin: 0em; width: 100%; background-color: #ffffff&quot;&gt;    {&lt;br /&gt;&lt;/pre&gt;&lt;pre style=&quot;font-size: 12px; font-family: consolas,&#39;Courier New&#39;,courier,monospace; margin: 0em; width: 100%; background-color: #eaeaea&quot;&gt;        photoChooserTask.Show();&lt;br /&gt;&lt;/pre&gt;&lt;pre style=&quot;font-size: 12px; font-family: consolas,&#39;Courier New&#39;,courier,monospace; margin: 0em; width: 100%; background-color: #ffffff&quot;&gt;    }&lt;br /&gt;&lt;/pre&gt;&lt;pre style=&quot;font-size: 12px; font-family: consolas,&#39;Courier New&#39;,courier,monospace; margin: 0em; width: 100%; background-color: #eaeaea&quot;&gt;&lt;/pre&gt;&lt;pre style=&quot;font-size: 12px; font-family: consolas,&#39;Courier New&#39;,courier,monospace; margin: 0em; width: 100%; background-color: #ffffff&quot;&gt;    &lt;span style=&quot;color: #008000&quot;&gt;// Called when an existing photo is chosen with the photo chooser.&lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;&lt;pre style=&quot;font-size: 12px; font-family: consolas,&#39;Courier New&#39;,courier,monospace; margin: 0em; width: 100%; background-color: #eaeaea&quot;&gt;    &lt;span style=&quot;color: #0000ff&quot;&gt;private&lt;/span&gt; &lt;span style=&quot;color: #0000ff&quot;&gt;void&lt;/span&gt; OnPhotoChooserTaskCompleted(&lt;span style=&quot;color: #0000ff&quot;&gt;object&lt;/span&gt; sender, PhotoResult e)&lt;br /&gt;&lt;/pre&gt;&lt;pre style=&quot;font-size: 12px; font-family: consolas,&#39;Courier New&#39;,courier,monospace; margin: 0em; width: 100%; background-color: #ffffff&quot;&gt;    {&lt;br /&gt;&lt;/pre&gt;&lt;pre style=&quot;font-size: 12px; font-family: consolas,&#39;Courier New&#39;,courier,monospace; margin: 0em; width: 100%; background-color: #eaeaea&quot;&gt;        &lt;span style=&quot;color: #008000&quot;&gt;// Hide text messages&lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;&lt;pre style=&quot;font-size: 12px; font-family: consolas,&#39;Courier New&#39;,courier,monospace; margin: 0em; width: 100%; background-color: #ffffff&quot;&gt;        txtError.Visibility = Visibility.Collapsed;&lt;br /&gt;&lt;/pre&gt;&lt;pre style=&quot;font-size: 12px; font-family: consolas,&#39;Courier New&#39;,courier,monospace; margin: 0em; width: 100%; background-color: #eaeaea&quot;&gt;        txtMessage.Visibility = Visibility.Collapsed;&lt;br /&gt;&lt;/pre&gt;&lt;pre style=&quot;font-size: 12px; font-family: consolas,&#39;Courier New&#39;,courier,monospace; margin: 0em; width: 100%; background-color: #ffffff&quot;&gt;&lt;/pre&gt;&lt;pre style=&quot;font-size: 12px; font-family: consolas,&#39;Courier New&#39;,courier,monospace; margin: 0em; width: 100%; background-color: #eaeaea&quot;&gt;        &lt;span style=&quot;color: #008000&quot;&gt;// Make sure the PhotoChooserTask is resurning OK&lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;&lt;pre style=&quot;font-size: 12px; font-family: consolas,&#39;Courier New&#39;,courier,monospace; margin: 0em; width: 100%; background-color: #ffffff&quot;&gt;        &lt;span style=&quot;color: #0000ff&quot;&gt;if&lt;/span&gt; (e.TaskResult == TaskResult.OK)&lt;br /&gt;&lt;/pre&gt;&lt;pre style=&quot;font-size: 12px; font-family: consolas,&#39;Courier New&#39;,courier,monospace; margin: 0em; width: 100%; background-color: #eaeaea&quot;&gt;        {&lt;br /&gt;&lt;/pre&gt;&lt;pre style=&quot;font-size: 12px; font-family: consolas,&#39;Courier New&#39;,courier,monospace; margin: 0em; width: 100%; background-color: #ffffff&quot;&gt;            &lt;span style=&quot;color: #008000&quot;&gt;// initialize the result photo stream&lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;&lt;pre style=&quot;font-size: 12px; font-family: consolas,&#39;Courier New&#39;,courier,monospace; margin: 0em; width: 100%; background-color: #eaeaea&quot;&gt;            photoStream = &lt;span style=&quot;color: #0000ff&quot;&gt;new&lt;/span&gt; MemoryStream();&lt;br /&gt;&lt;/pre&gt;&lt;pre style=&quot;font-size: 12px; font-family: consolas,&#39;Courier New&#39;,courier,monospace; margin: 0em; width: 100%; background-color: #ffffff&quot;&gt;&lt;/pre&gt;&lt;pre style=&quot;font-size: 12px; font-family: consolas,&#39;Courier New&#39;,courier,monospace; margin: 0em; width: 100%; background-color: #eaeaea&quot;&gt;            &lt;span style=&quot;color: #008000&quot;&gt;// Save the stream result (copying the resulting stream)&lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;&lt;pre style=&quot;font-size: 12px; font-family: consolas,&#39;Courier New&#39;,courier,monospace; margin: 0em; width: 100%; background-color: #ffffff&quot;&gt;            e.ChosenPhoto.CopyTo(photoStream);&lt;br /&gt;&lt;/pre&gt;&lt;pre style=&quot;font-size: 12px; font-family: consolas,&#39;Courier New&#39;,courier,monospace; margin: 0em; width: 100%; background-color: #eaeaea&quot;&gt;&lt;/pre&gt;&lt;pre style=&quot;font-size: 12px; font-family: consolas,&#39;Courier New&#39;,courier,monospace; margin: 0em; width: 100%; background-color: #ffffff&quot;&gt;            &lt;span style=&quot;color: #008000&quot;&gt;// save the original file name&lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;&lt;pre style=&quot;font-size: 12px; font-family: consolas,&#39;Courier New&#39;,courier,monospace; margin: 0em; width: 100%; background-color: #eaeaea&quot;&gt;            fileName = e.OriginalFileName;&lt;br /&gt;&lt;/pre&gt;&lt;pre style=&quot;font-size: 12px; font-family: consolas,&#39;Courier New&#39;,courier,monospace; margin: 0em; width: 100%; background-color: #ffffff&quot;&gt;&lt;/pre&gt;&lt;pre style=&quot;font-size: 12px; font-family: consolas,&#39;Courier New&#39;,courier,monospace; margin: 0em; width: 100%; background-color: #eaeaea&quot;&gt;            &lt;span style=&quot;color: #008000&quot;&gt;// display the chosen picture&lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;&lt;pre style=&quot;font-size: 12px; font-family: consolas,&#39;Courier New&#39;,courier,monospace; margin: 0em; width: 100%; background-color: #ffffff&quot;&gt;            var bitmapImage = &lt;span style=&quot;color: #0000ff&quot;&gt;new&lt;/span&gt; BitmapImage();&lt;br /&gt;&lt;/pre&gt;&lt;pre style=&quot;font-size: 12px; font-family: consolas,&#39;Courier New&#39;,courier,monospace; margin: 0em; width: 100%; background-color: #eaeaea&quot;&gt;            bitmapImage.SetSource(photoStream);&lt;br /&gt;&lt;/pre&gt;&lt;pre style=&quot;font-size: 12px; font-family: consolas,&#39;Courier New&#39;,courier,monospace; margin: 0em; width: 100%; background-color: #ffffff&quot;&gt;            imgSelectedImage.Source = bitmapImage;&lt;br /&gt;&lt;/pre&gt;&lt;pre style=&quot;font-size: 12px; font-family: consolas,&#39;Courier New&#39;,courier,monospace; margin: 0em; width: 100%; background-color: #eaeaea&quot;&gt;&lt;/pre&gt;&lt;pre style=&quot;font-size: 12px; font-family: consolas,&#39;Courier New&#39;,courier,monospace; margin: 0em; width: 100%; background-color: #ffffff&quot;&gt;            &lt;span style=&quot;color: #008000&quot;&gt;// enable the upload button&lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;&lt;pre style=&quot;font-size: 12px; font-family: consolas,&#39;Courier New&#39;,courier,monospace; margin: 0em; width: 100%; background-color: #eaeaea&quot;&gt;            btnUpload.IsEnabled = &lt;span style=&quot;color: #0000ff&quot;&gt;true&lt;/span&gt;;&lt;br /&gt;&lt;/pre&gt;&lt;pre style=&quot;font-size: 12px; font-family: consolas,&#39;Courier New&#39;,courier,monospace; margin: 0em; width: 100%; background-color: #ffffff&quot;&gt;        }&lt;br /&gt;&lt;/pre&gt;&lt;pre style=&quot;font-size: 12px; font-family: consolas,&#39;Courier New&#39;,courier,monospace; margin: 0em; width: 100%; background-color: #eaeaea&quot;&gt;        &lt;span style=&quot;color: #0000ff&quot;&gt;else&lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;&lt;pre style=&quot;font-size: 12px; font-family: consolas,&#39;Courier New&#39;,courier,monospace; margin: 0em; width: 100%; background-color: #ffffff&quot;&gt;        {&lt;br /&gt;&lt;/pre&gt;&lt;pre style=&quot;font-size: 12px; font-family: consolas,&#39;Courier New&#39;,courier,monospace; margin: 0em; width: 100%; background-color: #eaeaea&quot;&gt;            &lt;span style=&quot;color: #008000&quot;&gt;// if result is not ok, make sure user can&#39;t upload&lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;&lt;pre style=&quot;font-size: 12px; font-family: consolas,&#39;Courier New&#39;,courier,monospace; margin: 0em; width: 100%; background-color: #ffffff&quot;&gt;            btnUpload.IsEnabled = &lt;span style=&quot;color: #0000ff&quot;&gt;false&lt;/span&gt;;&lt;br /&gt;&lt;/pre&gt;&lt;pre style=&quot;font-size: 12px; font-family: consolas,&#39;Courier New&#39;,courier,monospace; margin: 0em; width: 100%; background-color: #eaeaea&quot;&gt;        }&lt;br /&gt;&lt;/pre&gt;&lt;pre style=&quot;font-size: 12px; font-family: consolas,&#39;Courier New&#39;,courier,monospace; margin: 0em; width: 100%; background-color: #ffffff&quot;&gt;    }&lt;br /&gt;&lt;/pre&gt;&lt;pre style=&quot;font-size: 12px; font-family: consolas,&#39;Courier New&#39;,courier,monospace; margin: 0em; width: 100%; background-color: #eaeaea&quot;&gt;&lt;/pre&gt;&lt;pre style=&quot;font-size: 12px; font-family: consolas,&#39;Courier New&#39;,courier,monospace; margin: 0em; width: 100%; background-color: #ffffff&quot;&gt;    &lt;span style=&quot;color: #008000&quot;&gt;// calls the UploadFile method&lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;&lt;pre style=&quot;font-size: 12px; font-family: consolas,&#39;Courier New&#39;,courier,monospace; margin: 0em; width: 100%; background-color: #eaeaea&quot;&gt;    &lt;span style=&quot;color: #0000ff&quot;&gt;private&lt;/span&gt; &lt;span style=&quot;color: #0000ff&quot;&gt;void&lt;/span&gt; OnUpload(&lt;span style=&quot;color: #0000ff&quot;&gt;object&lt;/span&gt; sender, System.Windows.Input.GestureEventArgs e)&lt;br /&gt;&lt;/pre&gt;&lt;pre style=&quot;font-size: 12px; font-family: consolas,&#39;Courier New&#39;,courier,monospace; margin: 0em; width: 100%; background-color: #ffffff&quot;&gt;    {&lt;br /&gt;&lt;/pre&gt;&lt;pre style=&quot;font-size: 12px; font-family: consolas,&#39;Courier New&#39;,courier,monospace; margin: 0em; width: 100%; background-color: #eaeaea&quot;&gt;        UploadFile();&lt;br /&gt;&lt;/pre&gt;&lt;pre style=&quot;font-size: 12px; font-family: consolas,&#39;Courier New&#39;,courier,monospace; margin: 0em; width: 100%; background-color: #ffffff&quot;&gt;    }&lt;br /&gt;&lt;/pre&gt;&lt;pre style=&quot;font-size: 12px; font-family: consolas,&#39;Courier New&#39;,courier,monospace; margin: 0em; width: 100%; background-color: #eaeaea&quot;&gt;&lt;/pre&gt;&lt;pre style=&quot;font-size: 12px; font-family: consolas,&#39;Courier New&#39;,courier,monospace; margin: 0em; width: 100%; background-color: #ffffff&quot;&gt;    &lt;span style=&quot;color: #008000&quot;&gt;// uploads the file&lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;&lt;pre style=&quot;font-size: 12px; font-family: consolas,&#39;Courier New&#39;,courier,monospace; margin: 0em; width: 100%; background-color: #eaeaea&quot;&gt;    &lt;span style=&quot;color: #0000ff&quot;&gt;private&lt;/span&gt; async &lt;span style=&quot;color: #0000ff&quot;&gt;void&lt;/span&gt; UploadFile()&lt;br /&gt;&lt;/pre&gt;&lt;pre style=&quot;font-size: 12px; font-family: consolas,&#39;Courier New&#39;,courier,monospace; margin: 0em; width: 100%; background-color: #ffffff&quot;&gt;    {&lt;br /&gt;&lt;/pre&gt;&lt;pre style=&quot;font-size: 12px; font-family: consolas,&#39;Courier New&#39;,courier,monospace; margin: 0em; width: 100%; background-color: #eaeaea&quot;&gt;        &lt;span style=&quot;color: #0000ff&quot;&gt;try&lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;&lt;pre style=&quot;font-size: 12px; font-family: consolas,&#39;Courier New&#39;,courier,monospace; margin: 0em; width: 100%; background-color: #ffffff&quot;&gt;        {&lt;br /&gt;&lt;/pre&gt;&lt;pre style=&quot;font-size: 12px; font-family: consolas,&#39;Courier New&#39;,courier,monospace; margin: 0em; width: 100%; background-color: #eaeaea&quot;&gt;            &lt;span style=&quot;color: #008000&quot;&gt;// Make sure there is a picture selected&lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;&lt;pre style=&quot;font-size: 12px; font-family: consolas,&#39;Courier New&#39;,courier,monospace; margin: 0em; width: 100%; background-color: #ffffff&quot;&gt;            &lt;span style=&quot;color: #0000ff&quot;&gt;if&lt;/span&gt; (photoStream != &lt;span style=&quot;color: #0000ff&quot;&gt;null&lt;/span&gt;)&lt;br /&gt;&lt;/pre&gt;&lt;pre style=&quot;font-size: 12px; font-family: consolas,&#39;Courier New&#39;,courier,monospace; margin: 0em; width: 100%; background-color: #eaeaea&quot;&gt;            {&lt;br /&gt;&lt;/pre&gt;&lt;pre style=&quot;font-size: 12px; font-family: consolas,&#39;Courier New&#39;,courier,monospace; margin: 0em; width: 100%; background-color: #ffffff&quot;&gt;                &lt;span style=&quot;color: #008000&quot;&gt;// initialize the client&lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;&lt;pre style=&quot;font-size: 12px; font-family: consolas,&#39;Courier New&#39;,courier,monospace; margin: 0em; width: 100%; background-color: #eaeaea&quot;&gt;                &lt;span style=&quot;color: #008000&quot;&gt;// need to make sure the server accepts network IP-based&lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;&lt;pre style=&quot;font-size: 12px; font-family: consolas,&#39;Courier New&#39;,courier,monospace; margin: 0em; width: 100%; background-color: #ffffff&quot;&gt;                &lt;span style=&quot;color: #008000&quot;&gt;// requests. &lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;&lt;pre style=&quot;font-size: 12px; font-family: consolas,&#39;Courier New&#39;,courier,monospace; margin: 0em; width: 100%; background-color: #eaeaea&quot;&gt;                &lt;span style=&quot;color: #008000&quot;&gt;// ensure correct IP and correct port address&lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;&lt;pre style=&quot;font-size: 12px; font-family: consolas,&#39;Courier New&#39;,courier,monospace; margin: 0em; width: 100%; background-color: #ffffff&quot;&gt;                var fileUploadUrl = @&quot;&lt;span style=&quot;color: #8b0000&quot;&gt;http://&amp;lt;IPaddress&amp;gt;:&amp;lt;port&amp;gt;/fileupload&lt;/span&gt;&quot;;&lt;br /&gt;&lt;/pre&gt;&lt;pre style=&quot;font-size: 12px; font-family: consolas,&#39;Courier New&#39;,courier,monospace; margin: 0em; width: 100%; background-color: #eaeaea&quot;&gt;                var client = &lt;span style=&quot;color: #0000ff&quot;&gt;new&lt;/span&gt; HttpClient();&lt;br /&gt;&lt;/pre&gt;&lt;pre style=&quot;font-size: 12px; font-family: consolas,&#39;Courier New&#39;,courier,monospace; margin: 0em; width: 100%; background-color: #ffffff&quot;&gt;&lt;/pre&gt;&lt;pre style=&quot;font-size: 12px; font-family: consolas,&#39;Courier New&#39;,courier,monospace; margin: 0em; width: 100%; background-color: #eaeaea&quot;&gt;                &lt;span style=&quot;color: #008000&quot;&gt;// Reset the photoStream position&lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;&lt;pre style=&quot;font-size: 12px; font-family: consolas,&#39;Courier New&#39;,courier,monospace; margin: 0em; width: 100%; background-color: #ffffff&quot;&gt;                &lt;span style=&quot;color: #008000&quot;&gt;// If you don&#39;t reset the position, the content lenght&lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;&lt;pre style=&quot;font-size: 12px; font-family: consolas,&#39;Courier New&#39;,courier,monospace; margin: 0em; width: 100%; background-color: #eaeaea&quot;&gt;                &lt;span style=&quot;color: #008000&quot;&gt;// sent will be 0&lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;&lt;pre style=&quot;font-size: 12px; font-family: consolas,&#39;Courier New&#39;,courier,monospace; margin: 0em; width: 100%; background-color: #ffffff&quot;&gt;                photoStream.Position = 0;&lt;br /&gt;&lt;/pre&gt;&lt;pre style=&quot;font-size: 12px; font-family: consolas,&#39;Courier New&#39;,courier,monospace; margin: 0em; width: 100%; background-color: #eaeaea&quot;&gt;&lt;/pre&gt;&lt;pre style=&quot;font-size: 12px; font-family: consolas,&#39;Courier New&#39;,courier,monospace; margin: 0em; width: 100%; background-color: #ffffff&quot;&gt;                &lt;span style=&quot;color: #008000&quot;&gt;// This is the postdata&lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;&lt;pre style=&quot;font-size: 12px; font-family: consolas,&#39;Courier New&#39;,courier,monospace; margin: 0em; width: 100%; background-color: #eaeaea&quot;&gt;                MultipartFormDataContent content = &lt;span style=&quot;color: #0000ff&quot;&gt;new&lt;/span&gt; MultipartFormDataContent();&lt;br /&gt;&lt;/pre&gt;&lt;pre style=&quot;font-size: 12px; font-family: consolas,&#39;Courier New&#39;,courier,monospace; margin: 0em; width: 100%; background-color: #ffffff&quot;&gt;                content.Add(&lt;span style=&quot;color: #0000ff&quot;&gt;new&lt;/span&gt; StreamContent(photoStream), &quot;&lt;span style=&quot;color: #8b0000&quot;&gt;file&lt;/span&gt;&quot;, fileName);&lt;br /&gt;&lt;/pre&gt;&lt;pre style=&quot;font-size: 12px; font-family: consolas,&#39;Courier New&#39;,courier,monospace; margin: 0em; width: 100%; background-color: #eaeaea&quot;&gt;&lt;/pre&gt;&lt;pre style=&quot;font-size: 12px; font-family: consolas,&#39;Courier New&#39;,courier,monospace; margin: 0em; width: 100%; background-color: #ffffff&quot;&gt;                &lt;span style=&quot;color: #008000&quot;&gt;// upload the file sending the form info and ensure a result.&lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;&lt;pre style=&quot;font-size: 12px; font-family: consolas,&#39;Courier New&#39;,courier,monospace; margin: 0em; width: 100%; background-color: #eaeaea&quot;&gt;                &lt;span style=&quot;color: #008000&quot;&gt;// it will throw an exception if the service doesn&#39;t return &lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;&lt;pre style=&quot;font-size: 12px; font-family: consolas,&#39;Courier New&#39;,courier,monospace; margin: 0em; width: 100%; background-color: #ffffff&quot;&gt;                &lt;span style=&quot;color: #008000&quot;&gt;// a valid successful status code&lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;&lt;pre style=&quot;font-size: 12px; font-family: consolas,&#39;Courier New&#39;,courier,monospace; margin: 0em; width: 100%; background-color: #eaeaea&quot;&gt;                await client.PostAsync(fileUploadUrl, content)&lt;br /&gt;&lt;/pre&gt;&lt;pre style=&quot;font-size: 12px; font-family: consolas,&#39;Courier New&#39;,courier,monospace; margin: 0em; width: 100%; background-color: #ffffff&quot;&gt;                    .ContinueWith((postTask) =&amp;gt;&lt;br /&gt;&lt;/pre&gt;&lt;pre style=&quot;font-size: 12px; font-family: consolas,&#39;Courier New&#39;,courier,monospace; margin: 0em; width: 100%; background-color: #eaeaea&quot;&gt;                    {&lt;br /&gt;&lt;/pre&gt;&lt;pre style=&quot;font-size: 12px; font-family: consolas,&#39;Courier New&#39;,courier,monospace; margin: 0em; width: 100%; background-color: #ffffff&quot;&gt;                        postTask.Result.EnsureSuccessStatusCode();&lt;br /&gt;&lt;/pre&gt;&lt;pre style=&quot;font-size: 12px; font-family: consolas,&#39;Courier New&#39;,courier,monospace; margin: 0em; width: 100%; background-color: #eaeaea&quot;&gt;                    });&lt;br /&gt;&lt;/pre&gt;&lt;pre style=&quot;font-size: 12px; font-family: consolas,&#39;Courier New&#39;,courier,monospace; margin: 0em; width: 100%; background-color: #ffffff&quot;&gt;            }&lt;br /&gt;&lt;/pre&gt;&lt;pre style=&quot;font-size: 12px; font-family: consolas,&#39;Courier New&#39;,courier,monospace; margin: 0em; width: 100%; background-color: #eaeaea&quot;&gt;&lt;/pre&gt;&lt;pre style=&quot;font-size: 12px; font-family: consolas,&#39;Courier New&#39;,courier,monospace; margin: 0em; width: 100%; background-color: #ffffff&quot;&gt;            &lt;span style=&quot;color: #008000&quot;&gt;// Disable the Upload button&lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;&lt;pre style=&quot;font-size: 12px; font-family: consolas,&#39;Courier New&#39;,courier,monospace; margin: 0em; width: 100%; background-color: #eaeaea&quot;&gt;            btnUpload.IsEnabled = &lt;span style=&quot;color: #0000ff&quot;&gt;false&lt;/span&gt;;&lt;br /&gt;&lt;/pre&gt;&lt;pre style=&quot;font-size: 12px; font-family: consolas,&#39;Courier New&#39;,courier,monospace; margin: 0em; width: 100%; background-color: #ffffff&quot;&gt;&lt;/pre&gt;&lt;pre style=&quot;font-size: 12px; font-family: consolas,&#39;Courier New&#39;,courier,monospace; margin: 0em; width: 100%; background-color: #eaeaea&quot;&gt;            &lt;span style=&quot;color: #008000&quot;&gt;// reset the image control&lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;&lt;pre style=&quot;font-size: 12px; font-family: consolas,&#39;Courier New&#39;,courier,monospace; margin: 0em; width: 100%; background-color: #ffffff&quot;&gt;            imgSelectedImage.Source = &lt;span style=&quot;color: #0000ff&quot;&gt;null&lt;/span&gt;;&lt;br /&gt;&lt;/pre&gt;&lt;pre style=&quot;font-size: 12px; font-family: consolas,&#39;Courier New&#39;,courier,monospace; margin: 0em; width: 100%; background-color: #eaeaea&quot;&gt;&lt;/pre&gt;&lt;pre style=&quot;font-size: 12px; font-family: consolas,&#39;Courier New&#39;,courier,monospace; margin: 0em; width: 100%; background-color: #ffffff&quot;&gt;            &lt;span style=&quot;color: #008000&quot;&gt;// Display the Uploaded message&lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;&lt;pre style=&quot;font-size: 12px; font-family: consolas,&#39;Courier New&#39;,courier,monospace; margin: 0em; width: 100%; background-color: #eaeaea&quot;&gt;            txtMessage.Visibility = Visibility.Visible;&lt;br /&gt;&lt;/pre&gt;&lt;pre style=&quot;font-size: 12px; font-family: consolas,&#39;Courier New&#39;,courier,monospace; margin: 0em; width: 100%; background-color: #ffffff&quot;&gt;        }&lt;br /&gt;&lt;/pre&gt;&lt;pre style=&quot;font-size: 12px; font-family: consolas,&#39;Courier New&#39;,courier,monospace; margin: 0em; width: 100%; background-color: #eaeaea&quot;&gt;        &lt;span style=&quot;color: #0000ff&quot;&gt;catch&lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;&lt;pre style=&quot;font-size: 12px; font-family: consolas,&#39;Courier New&#39;,courier,monospace; margin: 0em; width: 100%; background-color: #ffffff&quot;&gt;        {&lt;br /&gt;&lt;/pre&gt;&lt;pre style=&quot;font-size: 12px; font-family: consolas,&#39;Courier New&#39;,courier,monospace; margin: 0em; width: 100%; background-color: #eaeaea&quot;&gt;            &lt;span style=&quot;color: #008000&quot;&gt;// Display the Uploaded message&lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;&lt;pre style=&quot;font-size: 12px; font-family: consolas,&#39;Courier New&#39;,courier,monospace; margin: 0em; width: 100%; background-color: #ffffff&quot;&gt;            txtError.Visibility = Visibility.Visible;&lt;br /&gt;&lt;/pre&gt;&lt;pre style=&quot;font-size: 12px; font-family: consolas,&#39;Courier New&#39;,courier,monospace; margin: 0em; width: 100%; background-color: #eaeaea&quot;&gt;        }&lt;br /&gt;&lt;/pre&gt;&lt;pre style=&quot;font-size: 12px; font-family: consolas,&#39;Courier New&#39;,courier,monospace; margin: 0em; width: 100%; background-color: #ffffff&quot;&gt;    }&lt;br /&gt;&lt;/pre&gt;&lt;pre style=&quot;font-size: 12px; font-family: consolas,&#39;Courier New&#39;,courier,monospace; margin: 0em; width: 100%; background-color: #eaeaea&quot;&gt;}&lt;/pre&gt;&lt;/pre&gt;&lt;br /&gt;&lt;p&gt;When the picture is chosen, we want to display it on screen, and then enable the Upload button. We will want to notify the user when the image was successfully upload it, and if there was any error uploading it. Finally, we will clear the image on screen when it is successfully uploaded.&lt;/p&gt;&lt;br /&gt;&lt;p&gt;For the upload functionality, I’ll be using a &lt;a href=&quot;https://nuget.org/packages/Microsoft.Net.Http&quot;&gt;package that allows to use the HttpClient on Windows Phone&lt;/a&gt;. To add the required DLLs, open the NuGet Package Manager and search for &lt;a href=&quot;https://nuget.org/packages/Microsoft.Net.Http&quot;&gt;Microsoft.Net.HttpClient&lt;/a&gt;. Install the library on your project. &lt;/p&gt;&lt;br /&gt;&lt;p&gt;&lt;a href=&quot;http://lh4.ggpht.com/-lwzE9g6RhBE/Ub3gbxr7rdI/AAAAAAAAE0U/lmzdsixnEy0/s1600-h/image11.png&quot;&gt;&lt;img title=&quot;image&quot; style=&quot;float: none; margin-left: auto; display: block; margin-right: auto&quot; alt=&quot;image&quot; src=&quot;http://lh6.ggpht.com/-NID6I6IWhU8/Ub3gdfDnGjI/AAAAAAAAE0c/YU6j3PB3fzI/image_thumb5.png?imgmax=800&quot; width=&quot;360&quot; height=&quot;240&quot;&gt;&lt;/a&gt;&lt;/p&gt;&lt;br /&gt;&lt;p&gt;If you compile the project, you will get an error because of one of the package dependencies, which can only compile for x86 or ARM. &lt;/p&gt;&lt;br /&gt;&lt;p&gt;&lt;a href=&quot;http://lh3.ggpht.com/-9mjyL6LzAYs/Ub3gePpFyiI/AAAAAAAAE0k/EPCouPSaiKA/s1600-h/image15.png&quot;&gt;&lt;img title=&quot;image&quot; style=&quot;float: none; margin-left: auto; display: block; margin-right: auto&quot; alt=&quot;image&quot; src=&quot;http://lh3.ggpht.com/-e1nzUixlib8/Ub3gevPXSZI/AAAAAAAAE0s/hzB5FpM_ShY/image_thumb7.png?imgmax=800&quot; width=&quot;434&quot; height=&quot;62&quot;&gt;&lt;/a&gt;&lt;/p&gt;&lt;br /&gt;&lt;p&gt;To fix this, just change the target platform to x86 in the configuration manager if you are deploying in the emulator, or ARM if you are deploying on your device.&lt;/p&gt;&lt;br /&gt;&lt;p&gt;&lt;a href=&quot;http://lh5.ggpht.com/-4oUogpcKvdY/Ub3gfMnfPvI/AAAAAAAAE00/Ws7VRYbZu7o/s1600-h/image%25255B4%25255D.png&quot;&gt;&lt;img title=&quot;image&quot; style=&quot;float: none; margin-left: auto; display: block; margin-right: auto&quot; alt=&quot;image&quot; src=&quot;http://lh4.ggpht.com/-jKlWUmvenBI/Ub3gfx6n3eI/AAAAAAAAE08/hsFPGEqxKxg/image_thumb%25255B1%25255D.png?imgmax=800&quot; width=&quot;382&quot; height=&quot;240&quot;&gt;&lt;/a&gt;&lt;/p&gt;&lt;br /&gt;&lt;p&gt;Although the code is straight forward in terms of functionality, there are a few things to notice that could get you wasting a lot of time trying to solve. You have to pay attention to the way you work with streams. Once you read a stream, the position will change. You have to reset it to “0” when you want to read it again. Then, you need to initialize it if you want to replace it with a new photo stream. &lt;/p&gt;&lt;br /&gt;&lt;p&gt;You also need to configure your file upload web service if you want it to work locally. Either the Windows Phone 8 emulator or the device itself will appear as separate devices, so you will need to use your local machine IP address and configure your web server (in my case IIS Express) to accept HTTP requests, and also make sure the Windows Firewall is allowing the private or domain incoming requests on the web service assigned port.&lt;/p&gt;&lt;br /&gt;&lt;p&gt;Finally, you have to control the exception thrown by the HttpClient post task if the request is not successful. Remember that if you want to modify the UI from the request task, you will need to use a dispatcher, since the request is running on a non-UI thread.&lt;/p&gt;&lt;br /&gt;&lt;p&gt;Here are some screenshots of the running app. I tested the code running both in the Windows Phone 8 emulator and on the actual device.&lt;/p&gt;&lt;br /&gt;&lt;p&gt;&lt;a href=&quot;http://lh6.ggpht.com/-KcVg1yiOTaY/Ub3gg_DN4FI/AAAAAAAAE1E/z-XE7uZhn54/s1600-h/wp8_upload_01%25255B3%25255D.png&quot;&gt;&lt;img title=&quot;wp8_upload_01&quot; style=&quot;display: inline&quot; alt=&quot;wp8_upload_01&quot; src=&quot;http://lh4.ggpht.com/-KvhbzE9iWIo/Ub3ghprE1AI/AAAAAAAAE1M/KOvAz0942mA/wp8_upload_01_thumb%25255B1%25255D.png?imgmax=800&quot; width=&quot;133&quot; height=&quot;240&quot;&gt;&lt;/a&gt;&lt;a href=&quot;http://lh5.ggpht.com/-GGv7lVQM9UY/Ub3gim297rI/AAAAAAAAE1U/xcz2n_58DBc/s1600-h/wp8_upload_08%25255B3%25255D.png&quot;&gt;&lt;img title=&quot;wp8_upload_08&quot; style=&quot;display: inline&quot; alt=&quot;wp8_upload_08&quot; src=&quot;http://lh6.ggpht.com/-kabxlbyg_9U/Ub3gjbOTh-I/AAAAAAAAE1c/136fpko9SQY/wp8_upload_08_thumb%25255B1%25255D.png?imgmax=800&quot; width=&quot;133&quot; height=&quot;240&quot;&gt;&lt;/a&gt;&lt;a href=&quot;http://lh6.ggpht.com/-bKECFJyQIGI/Ub3gkJ4wOdI/AAAAAAAAE1k/-BzvAZFOQ7w/s1600-h/wp8_upload_03%25255B3%25255D.png&quot;&gt;&lt;img title=&quot;wp8_upload_03&quot; style=&quot;display: inline&quot; alt=&quot;wp8_upload_03&quot; src=&quot;http://lh4.ggpht.com/-o8yq-L85nPY/Ub3glRTtuII/AAAAAAAAE1o/VZ7Ufkk0iJU/wp8_upload_03_thumb%25255B1%25255D.png?imgmax=800&quot; width=&quot;133&quot; height=&quot;240&quot;&gt;&lt;/a&gt;&lt;a href=&quot;http://lh5.ggpht.com/-XysdfOEG1ec/Ub3gmagGsnI/AAAAAAAAE10/zP4eWwXl7qY/s1600-h/wp8_upload_04%25255B3%25255D.png&quot;&gt;&lt;img title=&quot;wp8_upload_04&quot; style=&quot;display: inline&quot; alt=&quot;wp8_upload_04&quot; src=&quot;http://lh5.ggpht.com/-DXms_c6ta4U/Ub3gnO6771I/AAAAAAAAE18/EntBNYY6XAY/wp8_upload_04_thumb%25255B1%25255D.png?imgmax=800&quot; width=&quot;133&quot; height=&quot;240&quot;&gt;&lt;/a&gt;&lt;a href=&quot;http://lh6.ggpht.com/-Xg51vPBFmmo/Ub3gokkuwoI/AAAAAAAAE2E/2djes5PcytQ/s1600-h/wp8_upload_05%25255B3%25255D.png&quot;&gt;&lt;img title=&quot;wp8_upload_05&quot; style=&quot;display: inline&quot; alt=&quot;wp8_upload_05&quot; src=&quot;http://lh5.ggpht.com/-nnRktUiiNiE/Ub3gpn810YI/AAAAAAAAE2M/fe6Cfgwdd5c/wp8_upload_05_thumb%25255B1%25255D.png?imgmax=800&quot; width=&quot;133&quot; height=&quot;240&quot;&gt;&lt;/a&gt;&lt;a href=&quot;http://lh4.ggpht.com/-FuHVTBjRPE0/Ub3grIMa3WI/AAAAAAAAE2U/VFRoynnr-g8/s1600-h/wp8_upload_06%25255B3%25255D.png&quot;&gt;&lt;img title=&quot;wp8_upload_06&quot; style=&quot;display: inline&quot; alt=&quot;wp8_upload_06&quot; src=&quot;http://lh4.ggpht.com/-KwRtiTYTFp4/Ub3gsRg1daI/AAAAAAAAE2c/P3ut9eYDkS0/wp8_upload_06_thumb%25255B1%25255D.png?imgmax=800&quot; width=&quot;133&quot; height=&quot;240&quot;&gt;&lt;/a&gt;&lt;a href=&quot;http://lh6.ggpht.com/-Djq4jJlvppU/Ub3gtZ77LrI/AAAAAAAAE2k/_f7FYqvSGYs/s1600-h/wp8_upload_07%25255B3%25255D.png&quot;&gt;&lt;img title=&quot;wp8_upload_07&quot; style=&quot;display: inline&quot; alt=&quot;wp8_upload_07&quot; src=&quot;http://lh6.ggpht.com/-ZBV7Z0xNUSw/Ub3guW2jrfI/AAAAAAAAE2s/wPEUZ6mSiXU/wp8_upload_07_thumb%25255B1%25255D.png?imgmax=800&quot; width=&quot;133&quot; height=&quot;240&quot;&gt;&lt;/a&gt;&lt;a href=&quot;http://lh6.ggpht.com/-_D2VOfzvJfs/Ub3gwYQL0sI/AAAAAAAAE20/zMwFH-x8CI8/s1600-h/wp8_upload_11%25255B3%25255D.png&quot;&gt;&lt;img title=&quot;wp8_upload_11&quot; style=&quot;display: inline&quot; alt=&quot;wp8_upload_11&quot; src=&quot;http://lh6.ggpht.com/-oK8Ud2Q-kTU/Ub3gwww5AJI/AAAAAAAAE28/Hz-B4jv7-gs/wp8_upload_11_thumb%25255B1%25255D.png?imgmax=800&quot; width=&quot;133&quot; height=&quot;240&quot;&gt;&lt;/a&gt;&lt;a href=&quot;http://lh5.ggpht.com/-a4mtdyIrVCw/Ub3gxoY11yI/AAAAAAAAE3E/y61JYQdcmDE/s1600-h/wp8_upload_09%25255B3%25255D.png&quot;&gt;&lt;img title=&quot;wp8_upload_09&quot; style=&quot;float: none; margin-left: auto; display: block; margin-right: auto&quot; alt=&quot;wp8_upload_09&quot; src=&quot;http://lh6.ggpht.com/-5Ocg4k7Sc7o/Ub3gy3pNTGI/AAAAAAAAE3M/J18JGCrjDQY/wp8_upload_09_thumb%25255B1%25255D.png?imgmax=800&quot; width=&quot;338&quot; height=&quot;240&quot;&gt;&lt;/a&gt;&lt;/p&gt;&lt;br /&gt;&lt;p&gt;Special thanks to my colleague &lt;a href=&quot;http://hmadrigal.wordpress.com/&quot;&gt;Herber Madrigal&lt;/a&gt; who was kind enough to put together the initial proof of concept and point me into the right direction. &lt;/p&gt;&lt;br /&gt;&lt;p&gt;Make sure to read &lt;a href=&quot;http://blog.anthonybaker.me/2013/06/how-to-implement-file-upload-restful.html&quot;&gt;my initial post on how to implement the File Upload Web Service&lt;/a&gt;, and then afterwards, make sure to check &lt;a href=&quot;http://blog.anthonybaker.me/2013/06/how-to-connect-to-local-web-services.html&quot;&gt;my post on how to enable the Windows Phone 8 Emulator and your network devices to connect to your local web services&lt;/a&gt;. Without this, you won’t be able to test and debug your apps and services locally!&lt;/p&gt;&lt;br /&gt;&lt;p&gt;Finally, you can grab the complete sample code for the WP8 File Upload from my Github repo &lt;a href=&quot;https://github.com/anthonybaker/WP8.FileUpload.Sample01&quot;&gt;here&lt;/a&gt;. &lt;/p&gt;  </content><link rel='replies' type='application/atom+xml' href='http://blog.anthonybaker.me/feeds/4470877757743727977/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://blog.anthonybaker.me/2013/06/how-to-upload-file-from-windows-phone.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1811411750119502062/posts/default/4470877757743727977'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1811411750119502062/posts/default/4470877757743727977'/><link rel='alternate' type='text/html' href='http://blog.anthonybaker.me/2013/06/how-to-upload-file-from-windows-phone.html' title='How to Upload a File from a Windows Phone App'/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/00141462441551416511</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://lh6.ggpht.com/-Sszd2pgIXcw/Ub3gY2eFMFI/AAAAAAAAEzs/YYW1jBFbPYI/s72-c/image_thumb1.png?imgmax=800" height="72" width="72"/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1811411750119502062.post-6242792981350606939</id><published>2013-06-16T16:26:00.001+01:00</published><updated>2013-06-16T17:03:43.986+01:00</updated><category scheme="http://www.blogger.com/atom/ns#" term=".NET"/><category scheme="http://www.blogger.com/atom/ns#" term="ASP.NET"/><category scheme="http://www.blogger.com/atom/ns#" term="C#"/><category scheme="http://www.blogger.com/atom/ns#" term="IIS"/><category scheme="http://www.blogger.com/atom/ns#" term="MVC"/><category scheme="http://www.blogger.com/atom/ns#" term="Productivity"/><category scheme="http://www.blogger.com/atom/ns#" term="Silverlight"/><category scheme="http://www.blogger.com/atom/ns#" term="Tips"/><category scheme="http://www.blogger.com/atom/ns#" term="Visual Studio"/><category scheme="http://www.blogger.com/atom/ns#" term="Windows Phone 8"/><category scheme="http://www.blogger.com/atom/ns#" term="XAML"/><title type='text'>How to Connect to Local Web Services from the Windows Phone 8 Emulator</title><content type='html'>&lt;p&gt;In this post I want to share some tips on how to enable locally hosted web services connectivity, so you can connect to them from the Windows Phone 8 emulator or any devices in your network. &lt;/p&gt; &lt;p&gt;The best way to demonstrate this is with a sample web service and a WP8 applications. For this post I’ll be using a &lt;a href=&quot;http://blog.anthonybaker.me/2013/06/how-to-implement-file-upload-restful.html&quot;&gt;File Upload MVC Service&lt;/a&gt; and a File Upload WP8 app. Check the articles on my blog post for implementation details and source code.&lt;/p&gt; &lt;p&gt;The code required for the service and the mobile app is actually quite straight forward. On the other hand, being able to connect to your local service from your emulator or device, and test locally, is actually tricky. This gave me quite a few hours of wall banging since although I had some code in place, I could not figure out how to test it. My good colleague &lt;a href=&quot;http://hmadrigal.wordpress.com/&quot;&gt;Herber Madrigal&lt;/a&gt; gave me a hand, and put together a prove of concept for me. &lt;/p&gt; &lt;p&gt;It turned out, that there are a couple vital steps your need to take to be able to run your service so the emulator and devices can connect and use the service based on the local machine IP. &lt;/p&gt; &lt;p&gt;In WP8, the emulator configures itself as a separate device on the network, and so, it can’t connect to the development computer as &lt;em&gt;&lt;strong&gt;localhost&lt;/strong&gt;&lt;/em&gt;. Effectively, it acts as a separate device in your network. &lt;/p&gt; &lt;p&gt;Before you can connect successfully from the emulator or a device in the network, you will have to do two changes:&lt;/p&gt; &lt;ul&gt; &lt;li&gt;Configure the local web service and web server to accept connections from other devices on the network.  &lt;li&gt;You have to configure the service in the WP8 app to connect to the service by using the IP address of the development computer on which the service is running.&lt;/li&gt;&lt;/ul&gt; &lt;p&gt;Let’s start with the web service. You can use WCF, Web API or ASP.NET MVC (or any other web services technology for that matter), as long as you can provide an endpoint that accepts a HTTP request using multipart form data. I have previously published a post on &lt;a href=&quot;http://blog.anthonybaker.me/2013/06/how-to-implement-file-upload-restful.html&quot;&gt;how to implement the upload service&lt;/a&gt;. Check it out for details and step-by-step instructions. You can also download the sample project &lt;a href=&quot;https://github.com/anthonybaker/MVC_FileUploadSample_01&quot;&gt;here&lt;/a&gt;.&lt;/p&gt; &lt;p&gt;Run the project and go to the &lt;em&gt;/fileupload&lt;/em&gt; page. You should see the page displaying correctly, indicating that the request was received, but no file was sent. &lt;/p&gt; &lt;p&gt;&lt;a href=&quot;http://lh4.ggpht.com/-xXfPaLSABYs/Ub3Y8x2DPSI/AAAAAAAAEw8/jKpxuBni58Q/s1600-h/image3.png&quot;&gt;&lt;img title=&quot;image&quot; style=&quot;float: none; margin-left: auto; display: block; margin-right: auto&quot; alt=&quot;image&quot; src=&quot;http://lh5.ggpht.com/-4eCGP3aH8M4/Ub3Y9g81urI/AAAAAAAAExE/uRZ8fhJdrQA/image_thumb1.png?imgmax=800&quot; width=&quot;308&quot; height=&quot;240&quot;&gt;&lt;/a&gt;&lt;/p&gt; &lt;p&gt;If you want to test the upload, you can use a tool like Fiddler to emulate the file upload request, as I showed in my &lt;a href=&quot;http://blog.anthonybaker.me/2013/06/how-to-implement-file-upload-restful.html&quot;&gt;previous post&lt;/a&gt;.&lt;/p&gt; &lt;p&gt;&lt;a href=&quot;http://lh3.ggpht.com/-OurnQRvdD6s/Ub3Y-xiqbyI/AAAAAAAAExM/1ZuulRGgNy4/s1600-h/image25.png&quot;&gt;&lt;img title=&quot;image&quot; style=&quot;float: left; display: inline&quot; alt=&quot;image&quot; align=&quot;left&quot; src=&quot;http://lh3.ggpht.com/-2Cn0Jcmg6yE/Ub3Y_jb7FJI/AAAAAAAAExQ/Yr5m46RxH20/image_thumb15.png?imgmax=800&quot; width=&quot;273&quot; height=&quot;181&quot;&gt;&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&lt;a href=&quot;http://lh3.ggpht.com/-TAigHFxsBxA/Ub3ZA6f2OnI/AAAAAAAAExc/wPAYjIGZ30Y/s1600-h/image32.png&quot;&gt;&lt;img title=&quot;image&quot; style=&quot;float: none; margin-left: auto; display: block; margin-right: auto&quot; alt=&quot;image&quot; src=&quot;http://lh6.ggpht.com/-dYP8WOD9QVE/Ub3ZBiTiQuI/AAAAAAAAExk/VKmSH4MHTC0/image_thumb22.png?imgmax=800&quot; width=&quot;283&quot; height=&quot;181&quot;&gt;&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&lt;a href=&quot;http://lh3.ggpht.com/-TfDkrTKWtrc/Ub3ZCcToYBI/AAAAAAAAExs/mMp3TOxqXjQ/s1600-h/image33.png&quot;&gt;&lt;img title=&quot;image&quot; style=&quot;float: none; margin-left: auto; display: block; margin-right: auto&quot; alt=&quot;image&quot; src=&quot;http://lh5.ggpht.com/-4pY8Pf8djo8/Ub3ZC9QMOYI/AAAAAAAAEx0/my9K9p_ZbLc/image_thumb23.png?imgmax=800&quot; width=&quot;302&quot; height=&quot;217&quot;&gt;&lt;/a&gt;&lt;/p&gt; &lt;p&gt;Ok. Now that we have the service running, you need to do a couple of configuration tricks to allow the service to be reached from the Windows Phone emulator or device. You need to bind your application to your public IP address, so it can be reached by another machine, or in this case another virtual machine. Once you do that, you need to configure the Windows firewall to allow incoming connections, which are most commonly locked by default.&lt;/p&gt; &lt;p&gt;Remember that the Windows Phone emulator configures itself to run as a separate device on the network, so it can’t, by default, reach &lt;em&gt;&lt;strong&gt;localhost&lt;/strong&gt;&lt;/em&gt;!&lt;/p&gt; &lt;p&gt;&lt;strong&gt;Binding your IP in IIS Express&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;&lt;a href=&quot;http://lh4.ggpht.com/-HNCTKlRQKDA/Ub3ZD1f_2gI/AAAAAAAAEx8/n3G3GT52vgI/s1600-h/image37.png&quot;&gt;&lt;img title=&quot;image&quot; style=&quot;float: none; margin-left: auto; display: block; margin-right: auto&quot; alt=&quot;image&quot; src=&quot;http://lh6.ggpht.com/-5X9Bk8r8544/Ub3ZEgfWOFI/AAAAAAAAEyE/KZ84STbedCo/image_thumb25.png?imgmax=800&quot; width=&quot;434&quot; height=&quot;64&quot;&gt;&lt;/a&gt;&lt;/p&gt; &lt;ol&gt; &lt;li&gt;Find IIS Express configuration file, applicationhost.config, in the folder &lt;br&gt;%USERPROFILE%\Documents\IISExpress\config\&lt;strong&gt;&lt;em&gt;&amp;nbsp;&lt;/em&gt;&lt;/strong&gt;&amp;nbsp; &lt;li&gt;Duplicate the &amp;lt;binding&amp;gt; line, and replace “&lt;strong&gt;localhost&lt;/strong&gt;” with your IP address (make sure to verify the port number).  &lt;li&gt;Save the file.&lt;/li&gt;&lt;/ol&gt; &lt;p&gt;At this point, you should be able to run the web service and on the browser, go to the &lt;em&gt;/fileupload &lt;/em&gt;using your IP address and port instead of&lt;em&gt; &lt;strong&gt;localhost&lt;/strong&gt;&lt;/em&gt;. However, that works only from the browser.&lt;/p&gt; &lt;p&gt;Note: you might not be able to reach out the endpoint with your IP address. If that is the case, completing the following steps, and re-running the web service should fix it. &lt;/p&gt; &lt;p&gt;&lt;strong&gt;Allow Incoming Connections&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;If you try to reach the endpoint on your browser using the IP address, you will most likely get a Bad Request or Service Unavailable response, since up to this point the firewall is not allowing incoming connections.&lt;/p&gt; &lt;ol&gt; &lt;li&gt;Start a command prompt with administrative privileges.  &lt;li&gt;Run the following command making sure to include your IP address and the correct app port:&lt;br&gt;netsh http add urlacl url=http://youripaddress:yourappport/ user=everyone&lt;br&gt;This just tells http.sys that it’s ok to talk to this url.  &lt;li&gt;Add a rule in the Windows Firewall, allowing incoming connections to your app port for computers on your local subnet. To do so, run the following command including the correct port&lt;br&gt;netsh advfirewall firewall add rule name=&quot;IISExpressWeb&quot; dir=in protocol=tcp localport=yourappport profile=private remoteip=localsubnet action=allow&lt;/li&gt;&lt;/ol&gt; &lt;p&gt;If you open the Windows Firewall manager, you should be able to see the new rule added. You can change or delete the rule from here easily.&lt;/p&gt; &lt;p&gt;&lt;a href=&quot;http://lh5.ggpht.com/-uFtDMNp5Fmw/Ub3ZFfuChOI/AAAAAAAAEyM/mcY3FuBbios/s1600-h/image41.png&quot;&gt;&lt;img title=&quot;image&quot; style=&quot;float: none; margin-left: auto; display: block; margin-right: auto&quot; alt=&quot;image&quot; src=&quot;http://lh5.ggpht.com/-hJ5S38gwft8/Ub3ZGLQvrBI/AAAAAAAAEyU/HJ0u1ikxSlk/image_thumb27.png?imgmax=800&quot; width=&quot;434&quot; height=&quot;210&quot;&gt;&lt;/a&gt;&lt;/p&gt; &lt;p&gt;Now, you can go back to the service project in Visual Studio and run the project again. Now you should be able to reach the &lt;em&gt;/test&lt;/em&gt; or &lt;em&gt;/fileupload&lt;/em&gt; endpoint using your IP address.&lt;/p&gt; &lt;p&gt;&lt;a href=&quot;http://lh3.ggpht.com/-oIzwga8XK-8/Ub3ZGjo7DGI/AAAAAAAAEyc/wnFO2qo5svI/s1600-h/image48.png&quot;&gt;&lt;img title=&quot;image&quot; style=&quot;float: none; margin-left: auto; display: block; margin-right: auto&quot; alt=&quot;image&quot; src=&quot;http://lh3.ggpht.com/-FnM8H9Xt4LU/Ub3ZHY6ILcI/AAAAAAAAEyk/reD3DUV17Fc/image_thumb30.png?imgmax=800&quot; width=&quot;392&quot; height=&quot;240&quot;&gt;&lt;/a&gt;&lt;/p&gt; &lt;p&gt;The easiest way to test that the web service is now allowing network devices to connect is to go to the /fileupload page from the Windows Phone emulator or the device browser. If you are able to reach the page (and also debug the incoming request from Visual Studio) you are good to go.&lt;/p&gt; &lt;p&gt;&lt;a href=&quot;http://lh4.ggpht.com/-Dmu6-Rl_tkY/Ub3ZIOgyPCI/AAAAAAAAEys/yMvGHTN00Cw/s1600-h/image%25255B4%25255D.png&quot;&gt;&lt;img title=&quot;image&quot; style=&quot;float: none; margin-left: auto; display: block; margin-right: auto&quot; alt=&quot;image&quot; src=&quot;http://lh5.ggpht.com/-IheTVEUCmMo/Ub3ZIniNW0I/AAAAAAAAEy0/YPOA4ceCH74/image_thumb%25255B1%25255D.png?imgmax=800&quot; width=&quot;133&quot; height=&quot;240&quot;&gt;&lt;/a&gt;&lt;/p&gt; &lt;p&gt;You can easily test the Windows Firewall rule by going into the Firewall’s manager and disabling the rule. If after doing it, you refresh the page on the emulator’s browser, it won’t work.&lt;/p&gt; &lt;p&gt;&lt;a href=&quot;http://lh5.ggpht.com/-PltqCgsSHr8/Ub3ZJYMeJaI/AAAAAAAAEy8/gneqpVyvGLA/s1600-h/image%25255B8%25255D.png&quot;&gt;&lt;img title=&quot;image&quot; style=&quot;float: none; margin-left: auto; display: block; margin-right: auto&quot; alt=&quot;image&quot; src=&quot;http://lh6.ggpht.com/-wL3XhBhzqyU/Ub3ZJwvhMDI/AAAAAAAAEzE/ygs7P8vzSyM/image_thumb%25255B3%25255D.png?imgmax=800&quot; width=&quot;444&quot; height=&quot;217&quot;&gt;&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&lt;a href=&quot;http://lh3.ggpht.com/-EhjmQ9S1tUY/Ub3ZKnYbDgI/AAAAAAAAEzM/aJLxdP9AGgg/s1600-h/image%25255B17%25255D.png&quot;&gt;&lt;img title=&quot;image&quot; style=&quot;float: none; margin-left: auto; display: block; margin-right: auto&quot; alt=&quot;image&quot; src=&quot;http://lh5.ggpht.com/-XYkOxMsr-_U/Ub3ZMESvajI/AAAAAAAAEzU/vIYh6ufDh7Y/image_thumb%25255B8%25255D.png?imgmax=800&quot; width=&quot;133&quot; height=&quot;240&quot;&gt;&lt;/a&gt;&lt;/p&gt; &lt;p&gt;To summarize, remember that you can actually enable your locally hosted web services to be reached by local apps running on the Windows Phone 8 emulator or any other devices in your network. To do this, you will need to create an IP binding on your web server configuration to allow the apps to use the local machine’s IP address instead of &lt;strong&gt;&lt;em&gt;localhost&lt;/em&gt;&lt;/strong&gt;. Then you need to create a rule to allow inbound HTTP requests to go through the Windows Firewall. Make sure to check the IP address of your local machine when testing to make sure is the right one (it can change if your provider uses dynamic IP assignment). &lt;/p&gt; &lt;p&gt;&lt;a href=&quot;http://msdn.microsoft.com/en-us/library/windowsphone/develop/jj684580(v=vs.105).aspx&quot;&gt;Here is a helpful MSDN article&lt;/a&gt; on how to configure local connectivity under different scenarios. &lt;a href=&quot;http://johan.driessen.se/posts/Accessing-an-IIS-Express-site-from-a-remote-computer&quot;&gt;Here is a summary for IIS Express&lt;/a&gt;.&lt;/p&gt; &lt;p&gt;Finally, if you want to put together or test the WP8 File Upload application, check &lt;a href=&quot;http://blog.anthonybaker.me/2013/06/how-to-upload-file-from-windows-phone.html&quot;&gt;my post on the subject for step-by-step details and source code&lt;/a&gt;.&lt;/p&gt;  </content><link rel='replies' type='application/atom+xml' href='http://blog.anthonybaker.me/feeds/6242792981350606939/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://blog.anthonybaker.me/2013/06/how-to-connect-to-local-web-services.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1811411750119502062/posts/default/6242792981350606939'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1811411750119502062/posts/default/6242792981350606939'/><link rel='alternate' type='text/html' href='http://blog.anthonybaker.me/2013/06/how-to-connect-to-local-web-services.html' title='How to Connect to Local Web Services from the Windows Phone 8 Emulator'/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/00141462441551416511</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://lh5.ggpht.com/-4eCGP3aH8M4/Ub3Y9g81urI/AAAAAAAAExE/uRZ8fhJdrQA/s72-c/image_thumb1.png?imgmax=800" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1811411750119502062.post-7416808141776316304</id><published>2013-06-15T14:42:00.001+01:00</published><updated>2013-06-15T14:42:27.121+01:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Awards"/><category scheme="http://www.blogger.com/atom/ns#" term="Industry News"/><category scheme="http://www.blogger.com/atom/ns#" term="Innovation"/><category scheme="http://www.blogger.com/atom/ns#" term="Multi-Platform"/><category scheme="http://www.blogger.com/atom/ns#" term="Portfolio"/><category scheme="http://www.blogger.com/atom/ns#" term="R/GA"/><title type='text'>Ray-Ban Ambermatic Wins 2013 One Show Interactive Merit Award</title><content type='html'>&lt;p&gt;&lt;a href=&quot;http://lh3.ggpht.com/-eNOBugYSxJ0/UbxvLUMdhrI/AAAAAAAAEwU/IJoyJlXwH8s/s1600-h/13150N_1%25255B3%25255D.jpg&quot;&gt;&lt;img title=&quot;13150N_1&quot; style=&quot;float: none; margin-left: auto; display: block; margin-right: auto&quot; alt=&quot;13150N_1&quot; src=&quot;http://lh3.ggpht.com/-PpnERzozz6Q/UbxvMv8sQcI/AAAAAAAAEwc/CKbSSfC2c7E/13150N_1_thumb%25255B1%25255D.jpg?imgmax=800&quot; width=&quot;427&quot; height=&quot;240&quot;&gt;&lt;/a&gt;&lt;/p&gt; &lt;p&gt;A few weeks ago, the 2013 One Show Interactive Award winners were announced and I was pleased to know that among the 15 awards that R/GA got, the &lt;a href=&quot;http://www.oneclub.org/#olb=/_ajax/archive/?action=arc_work%26value=19774&quot;&gt;Ray-Ban Ambermatic project got the 2013 One Show Interactive Merit Award&lt;/a&gt; in the category of Mobile Applications/Sites/Consumer Goods. &lt;/p&gt; &lt;p&gt;I wrote a brief post about the project some time ago, which you can read &lt;a href=&quot;http://blog.anthonybaker.me/2013/02/portfolio-project-ray-ban-ambermatic.html&quot;&gt;here&lt;/a&gt;. The project was designed by my colleagues in the R/GA Stockholm office, and it was developed in London and New York. I was responsible for co-architecting the technical solution and building the camera installation and image processing, along with running and maintaining it.&lt;/p&gt; &lt;p&gt;&lt;a href=&quot;http://lh6.ggpht.com/-QHAi2G3JVZw/UbxvPPZZ98I/AAAAAAAAEwk/a3p86kbOqKw/s1600-h/image%25255B3%25255D.png&quot;&gt;&lt;img title=&quot;image&quot; style=&quot;float: none; margin-left: auto; display: block; margin-right: auto&quot; alt=&quot;image&quot; src=&quot;http://lh6.ggpht.com/-iPfR8WIQd38/UbxvQvmTZdI/AAAAAAAAEws/mgVtO3TLCog/image_thumb%25255B1%25255D.png?imgmax=800&quot; width=&quot;429&quot; height=&quot;240&quot;&gt;&lt;/a&gt;&lt;/p&gt; &lt;p&gt;R/GA has done quite well so far this year on several award ceremonies, and the 2013 One Show Interactive Awards are a nice addition. In fact, the agency was honoured as &lt;a href=&quot;http://www.rga.com/news/release/2013/rga_agency_of_year_one_show_interactive&quot;&gt;Interactive Agency of the Year at One Show Interactive&lt;/a&gt;.&lt;/p&gt; &lt;p&gt;I have high expectations for the upcoming &lt;a href=&quot;http://www.canneslions.com/&quot;&gt;Cannes Lions Awards&lt;/a&gt;!&lt;/p&gt;  </content><link rel='replies' type='application/atom+xml' href='http://blog.anthonybaker.me/feeds/7416808141776316304/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://blog.anthonybaker.me/2013/06/ray-ban-ambermatic-wins-2013-one-show.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1811411750119502062/posts/default/7416808141776316304'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1811411750119502062/posts/default/7416808141776316304'/><link rel='alternate' type='text/html' href='http://blog.anthonybaker.me/2013/06/ray-ban-ambermatic-wins-2013-one-show.html' title='Ray-Ban Ambermatic Wins 2013 One Show Interactive Merit Award'/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/00141462441551416511</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://lh3.ggpht.com/-PpnERzozz6Q/UbxvMv8sQcI/AAAAAAAAEwc/CKbSSfC2c7E/s72-c/13150N_1_thumb%25255B1%25255D.jpg?imgmax=800" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1811411750119502062.post-7703697295559775205</id><published>2013-06-02T20:51:00.001+01:00</published><updated>2013-06-02T21:02:38.348+01:00</updated><category scheme="http://www.blogger.com/atom/ns#" term=".NET"/><category scheme="http://www.blogger.com/atom/ns#" term="ASP.NET"/><category scheme="http://www.blogger.com/atom/ns#" term="C#"/><category scheme="http://www.blogger.com/atom/ns#" term="MVC"/><category scheme="http://www.blogger.com/atom/ns#" term="Tips"/><category scheme="http://www.blogger.com/atom/ns#" term="Web Development"/><title type='text'>How to Implement a File Upload RESTful Web Service with ASP.NET MVC</title><content type='html'>&lt;p&gt;In this post we will create a basic web service that allows clients to upload or post binary files. This is a common feature to allow your apps to upload and share photos from mobile apps or the like. We will use ASP.NET MVC to create the service, and demonstrate how simple it is. &lt;/p&gt; &lt;p&gt;Fire up Visual Studio and create a basic ASP.NET MVC application. For this sample Ill be using Visual Studio 2012 and ASP.NET MVC 4.0 on a Windows 8 development machine. Additionally, I’ll be using Fiddler 4 beta for testing the service.&lt;/p&gt; &lt;p&gt;&lt;a href=&quot;http://lh6.ggpht.com/-lgI0eVyYWWw/UauhhoRMe6I/AAAAAAAAEqw/GpNG7oehWF4/s1600-h/image%25255B20%25255D.png&quot;&gt;&lt;img title=&quot;image&quot; style=&quot;float: left; display: inline&quot; alt=&quot;image&quot; align=&quot;left&quot; src=&quot;http://lh4.ggpht.com/-ywCe4R5snPE/UauhiUgv1OI/AAAAAAAAEq4/ZLzwOpjprFw/image_thumb%25255B14%25255D.png?imgmax=800&quot; width=&quot;258&quot; height=&quot;194&quot;&gt;&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&lt;a href=&quot;http://lh6.ggpht.com/-a2lFefz-hZM/Uauhi5DfX7I/AAAAAAAAErA/CYFAbBIOudo/s1600-h/image%25255B18%25255D.png&quot;&gt;&lt;img title=&quot;image&quot; style=&quot;float: none; margin-left: auto; display: block; margin-right: auto&quot; alt=&quot;image&quot; src=&quot;http://lh4.ggpht.com/-nKnlAS-I7XA/UauhjnuKYfI/AAAAAAAAErI/6pvUdA006rE/image_thumb%25255B12%25255D.png?imgmax=800&quot; width=&quot;213&quot; height=&quot;195&quot;&gt;&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&lt;a href=&quot;http://lh3.ggpht.com/-Ana4lj3oJIY/UauhkSnGrsI/AAAAAAAAErQ/ia17PWgkaFA/s1600-h/image%25255B22%25255D.png&quot;&gt;&lt;img title=&quot;image&quot; style=&quot;float: none; margin-left: auto; display: block; margin-right: auto&quot; alt=&quot;image&quot; src=&quot;http://lh6.ggpht.com/-TsmHQ-auVFA/UauhlLea-JI/AAAAAAAAErY/Z753I5t0glM/image_thumb%25255B16%25255D.png?imgmax=800&quot; width=&quot;176&quot; height=&quot;354&quot;&gt;&lt;/a&gt;&lt;/p&gt; &lt;p&gt;Now, let’s create a simple controller with its view, so we can run and test the service. Create a new empty controller named &lt;em&gt;TestController&lt;/em&gt;. We won’t be doing anything especial on it, we just need to have the endpoint and its view available.&lt;/p&gt; &lt;p&gt;&lt;a href=&quot;http://lh3.ggpht.com/-v_2KGIrUzBo/UauhligNwHI/AAAAAAAAErg/j5bd7QxdRVA/s1600-h/image%25255B87%25255D.png&quot;&gt;&lt;img title=&quot;image&quot; style=&quot;float: none; margin-left: auto; display: block; margin-right: auto&quot; alt=&quot;image&quot; src=&quot;http://lh5.ggpht.com/-8PdgzI8L7Cs/UauhmbQ02uI/AAAAAAAAEro/XCKioTJ4u60/image_thumb%25255B51%25255D.png?imgmax=800&quot; width=&quot;369&quot; height=&quot;278&quot;&gt;&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&lt;a href=&quot;http://lh6.ggpht.com/-jP5Gda5tSG0/UauhnNASNuI/AAAAAAAAErw/4NT44l4gVW0/s1600-h/image%25255B85%25255D.png&quot;&gt;&lt;img title=&quot;image&quot; style=&quot;float: none; margin-left: auto; display: block; margin-right: auto&quot; alt=&quot;image&quot; src=&quot;http://lh4.ggpht.com/-OzvDZKijXQQ/Uauhn1uVihI/AAAAAAAAEr4/FzSaE4bAL1A/image_thumb%25255B49%25255D.png?imgmax=800&quot; width=&quot;369&quot; height=&quot;240&quot;&gt;&lt;/a&gt;&lt;/p&gt; &lt;p&gt;Then, create a new view for the &lt;em&gt;TestController&lt;/em&gt;. Within the &lt;em&gt;Views&lt;/em&gt; folder, create a new folder named “Test” and then right click, select Add, and then View. Name the view index. Then modify the view’s code so we can differentiate it from the default views.&lt;/p&gt; &lt;p&gt;&lt;a href=&quot;http://lh5.ggpht.com/-xnAW7gvQ2UY/UauhoQGEWgI/AAAAAAAAEsA/WgOIhjcEkUc/s1600-h/image%25255B42%25255D.png&quot;&gt;&lt;img title=&quot;image&quot; style=&quot;float: none; margin-left: auto; display: block; margin-right: auto&quot; alt=&quot;image&quot; src=&quot;http://lh3.ggpht.com/-V9JR227V1uA/UauhpGP7W8I/AAAAAAAAEsI/YxvtlVqSkco/image_thumb%25255B24%25255D.png?imgmax=800&quot; width=&quot;420&quot; height=&quot;318&quot;&gt;&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&lt;a href=&quot;http://lh4.ggpht.com/-yRqRXTvZTho/Uauh3Vw_RNI/AAAAAAAAEsY/ROX0AlELGec/s1600-h/image%25255B46%25255D.png&quot;&gt;&lt;img title=&quot;image&quot; style=&quot;display: inline&quot; alt=&quot;image&quot; src=&quot;http://lh3.ggpht.com/-AnHcuFOAP94/Uauh4MPzFBI/AAAAAAAAEsg/VtLT9l6Tgng/image_thumb%25255B28%25255D.png?imgmax=800&quot; width=&quot;191&quot; height=&quot;235&quot;&gt;&lt;/a&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;a href=&quot;http://lh4.ggpht.com/-TXTog_tjmHw/Uauh4j72wGI/AAAAAAAAEso/rEQMTZyVzD8/s1600-h/image%25255B51%25255D.png&quot;&gt;&lt;img title=&quot;image&quot; style=&quot;display: inline&quot; alt=&quot;image&quot; src=&quot;http://lh4.ggpht.com/-jmG6NSGS5oU/Uauh5BeAQuI/AAAAAAAAEsw/DnzQJ80xRj0/image_thumb%25255B31%25255D.png?imgmax=800&quot; width=&quot;264&quot; height=&quot;112&quot;&gt;&lt;/a&gt;&lt;/p&gt; &lt;p&gt;Compile and run the application to make sure everything is running so far. Since we don’t have a default home controller, when the page loads on the root URL, you will see an error page.&lt;/p&gt; &lt;p&gt;&lt;a href=&quot;http://lh5.ggpht.com/-FjK0MM98470/Uauh5gtXKLI/AAAAAAAAEs4/6geptOzuddc/s1600-h/image%25255B58%25255D.png&quot;&gt;&lt;img title=&quot;image&quot; style=&quot;float: none; margin-left: auto; display: block; margin-right: auto&quot; alt=&quot;image&quot; src=&quot;http://lh6.ggpht.com/-Tl8iDsNUL_c/Uauh6df9dII/AAAAAAAAEtA/3Z-Wh_jGGak/image_thumb%25255B34%25255D.png?imgmax=800&quot; width=&quot;308&quot; height=&quot;240&quot;&gt;&lt;/a&gt;&lt;/p&gt; &lt;p&gt;Once you add the “/test” route in the address bar, the app will resolve to our &lt;em&gt;TestController&lt;/em&gt; and will display its view.&lt;/p&gt; &lt;p&gt;&lt;a href=&quot;http://lh5.ggpht.com/-ZvZ0Y9wpEvo/Uauh6_jSyfI/AAAAAAAAEtI/DzBAGRaKo5E/s1600-h/image%25255B60%25255D.png&quot;&gt;&lt;img title=&quot;image&quot; style=&quot;float: none; margin-left: auto; display: block; margin-right: auto&quot; alt=&quot;image&quot; src=&quot;http://lh3.ggpht.com/-cs-zTsadL48/Uauh7jCRhzI/AAAAAAAAEtQ/laIbf5W6q9s/image_thumb%25255B36%25255D.png?imgmax=800&quot; width=&quot;305&quot; height=&quot;240&quot;&gt;&lt;/a&gt;&lt;/p&gt; &lt;p&gt;Ok, lets quickly code the file upload service so we have it ready. Create a new controller as we did before and name it &lt;em&gt;FileUploadController&lt;/em&gt;. &lt;/p&gt; &lt;p&gt;&lt;a href=&quot;http://lh4.ggpht.com/-FDX4MRNyTSY/Uauh8D_Av2I/AAAAAAAAEtY/ULLRhK6qjEc/s1600-h/image%25255B64%25255D.png&quot;&gt;&lt;img title=&quot;image&quot; style=&quot;float: none; margin-left: auto; display: block; margin-right: auto&quot; alt=&quot;image&quot; src=&quot;http://lh6.ggpht.com/-cLQCthUgcA8/Uauh8rZ0R5I/AAAAAAAAEtg/ldf5AL6ogKI/image_thumb%25255B38%25255D.png?imgmax=800&quot; width=&quot;369&quot; height=&quot;240&quot;&gt;&lt;/a&gt;&lt;/p&gt; &lt;p&gt;The code for the file upload is as follows (base code courtesy of my good colleague &lt;a href=&quot;http://hmadrigal.wordpress.com/&quot;&gt;Herber Madrigal&lt;/a&gt;):&lt;/p&gt;&lt;pre style=&quot;overflow: auto; border-top: #cecece 1px solid; border-right: #cecece 1px solid; border-bottom: #cecece 1px solid; padding-bottom: 5px; padding-top: 5px; padding-left: 5px; min-height: 40px; border-left: #cecece 1px solid; padding-right: 5px; width: 550px; background-color: #fbfbfb&quot;&gt;&lt;pre style=&quot;font-size: 12px; font-family: consolas,&#39;Courier New&#39;,courier,monospace; margin: 0em; width: 100%; background-color: #eaeaea&quot;&gt;  1: &lt;span style=&quot;color: #0000ff&quot;&gt;public&lt;/span&gt; &lt;span style=&quot;color: #0000ff&quot;&gt;class&lt;/span&gt; FileUploadController : Controller&lt;br /&gt;&lt;/pre&gt;&lt;pre style=&quot;font-size: 12px; font-family: consolas,&#39;Courier New&#39;,courier,monospace; margin: 0em; width: 100%; background-color: #ffffff&quot;&gt;  2: {&lt;br /&gt;&lt;/pre&gt;&lt;pre style=&quot;font-size: 12px; font-family: consolas,&#39;Courier New&#39;,courier,monospace; margin: 0em; width: 100%; background-color: #eaeaea&quot;&gt;  3:     &lt;span style=&quot;color: #008000&quot;&gt;//&lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;&lt;pre style=&quot;font-size: 12px; font-family: consolas,&#39;Courier New&#39;,courier,monospace; margin: 0em; width: 100%; background-color: #ffffff&quot;&gt;  4:     &lt;span style=&quot;color: #008000&quot;&gt;// GET: /FileUpload/&lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;&lt;pre style=&quot;font-size: 12px; font-family: consolas,&#39;Courier New&#39;,courier,monospace; margin: 0em; width: 100%; background-color: #eaeaea&quot;&gt;  5:     &lt;span style=&quot;color: #008000&quot;&gt;//[HttpPost]&lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;&lt;pre style=&quot;font-size: 12px; font-family: consolas,&#39;Courier New&#39;,courier,monospace; margin: 0em; width: 100%; background-color: #ffffff&quot;&gt;  6:     &lt;span style=&quot;color: #0000ff&quot;&gt;public&lt;/span&gt; ActionResult Index()&lt;br /&gt;&lt;/pre&gt;&lt;pre style=&quot;font-size: 12px; font-family: consolas,&#39;Courier New&#39;,courier,monospace; margin: 0em; width: 100%; background-color: #eaeaea&quot;&gt;  7:     {&lt;br /&gt;&lt;/pre&gt;&lt;pre style=&quot;font-size: 12px; font-family: consolas,&#39;Courier New&#39;,courier,monospace; margin: 0em; width: 100%; background-color: #ffffff&quot;&gt;  8:         var fileUploaded = &lt;span style=&quot;color: #0000ff&quot;&gt;false&lt;/span&gt;; &lt;br /&gt;&lt;/pre&gt;&lt;pre style=&quot;font-size: 12px; font-family: consolas,&#39;Courier New&#39;,courier,monospace; margin: 0em; width: 100%; background-color: #eaeaea&quot;&gt;  9: &lt;br /&gt;&lt;/pre&gt;&lt;pre style=&quot;font-size: 12px; font-family: consolas,&#39;Courier New&#39;,courier,monospace; margin: 0em; width: 100%; background-color: #ffffff&quot;&gt; 10:         &lt;span style=&quot;color: #0000ff&quot;&gt;foreach&lt;/span&gt; (&lt;span style=&quot;color: #0000ff&quot;&gt;string&lt;/span&gt; upload &lt;span style=&quot;color: #0000ff&quot;&gt;in&lt;/span&gt; Request.Files)&lt;br /&gt;&lt;/pre&gt;&lt;pre style=&quot;font-size: 12px; font-family: consolas,&#39;Courier New&#39;,courier,monospace; margin: 0em; width: 100%; background-color: #eaeaea&quot;&gt; 11:         {&lt;br /&gt;&lt;/pre&gt;&lt;pre style=&quot;font-size: 12px; font-family: consolas,&#39;Courier New&#39;,courier,monospace; margin: 0em; width: 100%; background-color: #ffffff&quot;&gt; 12:             &lt;span style=&quot;color: #0000ff&quot;&gt;if&lt;/span&gt; (!HasFile(Request.Files[upload]))&lt;br /&gt;&lt;/pre&gt;&lt;pre style=&quot;font-size: 12px; font-family: consolas,&#39;Courier New&#39;,courier,monospace; margin: 0em; width: 100%; background-color: #eaeaea&quot;&gt; 13:                 &lt;span style=&quot;color: #0000ff&quot;&gt;continue&lt;/span&gt;;&lt;br /&gt;&lt;/pre&gt;&lt;pre style=&quot;font-size: 12px; font-family: consolas,&#39;Courier New&#39;,courier,monospace; margin: 0em; width: 100%; background-color: #ffffff&quot;&gt; 14: &lt;br /&gt;&lt;/pre&gt;&lt;pre style=&quot;font-size: 12px; font-family: consolas,&#39;Courier New&#39;,courier,monospace; margin: 0em; width: 100%; background-color: #eaeaea&quot;&gt; 15:             &lt;span style=&quot;color: #0000ff&quot;&gt;string&lt;/span&gt; path = Path.Combine(&lt;br /&gt;&lt;/pre&gt;&lt;pre style=&quot;font-size: 12px; font-family: consolas,&#39;Courier New&#39;,courier,monospace; margin: 0em; width: 100%; background-color: #ffffff&quot;&gt; 16:                           AppDomain.CurrentDomain.BaseDirectory, &lt;br /&gt;&lt;/pre&gt;&lt;pre style=&quot;font-size: 12px; font-family: consolas,&#39;Courier New&#39;,courier,monospace; margin: 0em; width: 100%; background-color: #eaeaea&quot;&gt; 17:                           &quot;&lt;span style=&quot;color: #8b0000&quot;&gt;uploads&lt;/span&gt;&quot;);&lt;br /&gt;&lt;/pre&gt;&lt;pre style=&quot;font-size: 12px; font-family: consolas,&#39;Courier New&#39;,courier,monospace; margin: 0em; width: 100%; background-color: #ffffff&quot;&gt; 18:             &lt;span style=&quot;color: #0000ff&quot;&gt;string&lt;/span&gt; filename = Path.GetFileName(&lt;br /&gt;&lt;/pre&gt;&lt;pre style=&quot;font-size: 12px; font-family: consolas,&#39;Courier New&#39;,courier,monospace; margin: 0em; width: 100%; background-color: #eaeaea&quot;&gt; 19:                               Request.Files[upload].FileName);&lt;br /&gt;&lt;/pre&gt;&lt;pre style=&quot;font-size: 12px; font-family: consolas,&#39;Courier New&#39;,courier,monospace; margin: 0em; width: 100%; background-color: #ffffff&quot;&gt; 20: &lt;br /&gt;&lt;/pre&gt;&lt;pre style=&quot;font-size: 12px; font-family: consolas,&#39;Courier New&#39;,courier,monospace; margin: 0em; width: 100%; background-color: #eaeaea&quot;&gt; 21:             &lt;span style=&quot;color: #0000ff&quot;&gt;if&lt;/span&gt; (!Directory.Exists(path))&lt;br /&gt;&lt;/pre&gt;&lt;pre style=&quot;font-size: 12px; font-family: consolas,&#39;Courier New&#39;,courier,monospace; margin: 0em; width: 100%; background-color: #ffffff&quot;&gt; 22:                 Directory.CreateDirectory(path);&lt;br /&gt;&lt;/pre&gt;&lt;pre style=&quot;font-size: 12px; font-family: consolas,&#39;Courier New&#39;,courier,monospace; margin: 0em; width: 100%; background-color: #eaeaea&quot;&gt; 23: &lt;br /&gt;&lt;/pre&gt;&lt;pre style=&quot;font-size: 12px; font-family: consolas,&#39;Courier New&#39;,courier,monospace; margin: 0em; width: 100%; background-color: #ffffff&quot;&gt; 24:             Request.Files[upload].SaveAs(Path.Combine(&lt;br /&gt;&lt;/pre&gt;&lt;pre style=&quot;font-size: 12px; font-family: consolas,&#39;Courier New&#39;,courier,monospace; margin: 0em; width: 100%; background-color: #eaeaea&quot;&gt; 25:                                          path, &lt;br /&gt;&lt;/pre&gt;&lt;pre style=&quot;font-size: 12px; font-family: consolas,&#39;Courier New&#39;,courier,monospace; margin: 0em; width: 100%; background-color: #ffffff&quot;&gt; 26:                                          filename));&lt;br /&gt;&lt;/pre&gt;&lt;pre style=&quot;font-size: 12px; font-family: consolas,&#39;Courier New&#39;,courier,monospace; margin: 0em; width: 100%; background-color: #eaeaea&quot;&gt; 27: &lt;br /&gt;&lt;/pre&gt;&lt;pre style=&quot;font-size: 12px; font-family: consolas,&#39;Courier New&#39;,courier,monospace; margin: 0em; width: 100%; background-color: #ffffff&quot;&gt; 28:             fileUploaded = &lt;span style=&quot;color: #0000ff&quot;&gt;true&lt;/span&gt;;&lt;br /&gt;&lt;/pre&gt;&lt;pre style=&quot;font-size: 12px; font-family: consolas,&#39;Courier New&#39;,courier,monospace; margin: 0em; width: 100%; background-color: #eaeaea&quot;&gt; 29:         }&lt;br /&gt;&lt;/pre&gt;&lt;pre style=&quot;font-size: 12px; font-family: consolas,&#39;Courier New&#39;,courier,monospace; margin: 0em; width: 100%; background-color: #ffffff&quot;&gt; 30: &lt;br /&gt;&lt;/pre&gt;&lt;pre style=&quot;font-size: 12px; font-family: consolas,&#39;Courier New&#39;,courier,monospace; margin: 0em; width: 100%; background-color: #eaeaea&quot;&gt; 31:         &lt;span style=&quot;color: #0000ff&quot;&gt;this&lt;/span&gt;.ViewData.Add(&quot;&lt;span style=&quot;color: #8b0000&quot;&gt;uploaded&lt;/span&gt;&quot;, fileUploaded);&lt;br /&gt;&lt;/pre&gt;&lt;pre style=&quot;font-size: 12px; font-family: consolas,&#39;Courier New&#39;,courier,monospace; margin: 0em; width: 100%; background-color: #ffffff&quot;&gt; 32: &lt;br /&gt;&lt;/pre&gt;&lt;pre style=&quot;font-size: 12px; font-family: consolas,&#39;Courier New&#39;,courier,monospace; margin: 0em; width: 100%; background-color: #eaeaea&quot;&gt; 33:         &lt;span style=&quot;color: #0000ff&quot;&gt;return&lt;/span&gt; View();&lt;br /&gt;&lt;/pre&gt;&lt;pre style=&quot;font-size: 12px; font-family: consolas,&#39;Courier New&#39;,courier,monospace; margin: 0em; width: 100%; background-color: #ffffff&quot;&gt; 34:     }&lt;br /&gt;&lt;/pre&gt;&lt;pre style=&quot;font-size: 12px; font-family: consolas,&#39;Courier New&#39;,courier,monospace; margin: 0em; width: 100%; background-color: #eaeaea&quot;&gt; 35: &lt;br /&gt;&lt;/pre&gt;&lt;pre style=&quot;font-size: 12px; font-family: consolas,&#39;Courier New&#39;,courier,monospace; margin: 0em; width: 100%; background-color: #ffffff&quot;&gt; 36:     &lt;span style=&quot;color: #0000ff&quot;&gt;private&lt;/span&gt; &lt;span style=&quot;color: #0000ff&quot;&gt;static&lt;/span&gt; &lt;span style=&quot;color: #0000ff&quot;&gt;bool&lt;/span&gt; HasFile(HttpPostedFileBase file)&lt;br /&gt;&lt;/pre&gt;&lt;pre style=&quot;font-size: 12px; font-family: consolas,&#39;Courier New&#39;,courier,monospace; margin: 0em; width: 100%; background-color: #eaeaea&quot;&gt; 37:     {&lt;br /&gt;&lt;/pre&gt;&lt;pre style=&quot;font-size: 12px; font-family: consolas,&#39;Courier New&#39;,courier,monospace; margin: 0em; width: 100%; background-color: #ffffff&quot;&gt; 38:         &lt;span style=&quot;color: #0000ff&quot;&gt;return&lt;/span&gt; (file != &lt;span style=&quot;color: #0000ff&quot;&gt;null&lt;/span&gt; &amp;amp;&amp;amp; file.ContentLength &amp;gt; 0) ? &lt;span style=&quot;color: #0000ff&quot;&gt;true&lt;/span&gt; : &lt;span style=&quot;color: #0000ff&quot;&gt;false&lt;/span&gt;;&lt;br /&gt;&lt;/pre&gt;&lt;pre style=&quot;font-size: 12px; font-family: consolas,&#39;Courier New&#39;,courier,monospace; margin: 0em; width: 100%; background-color: #eaeaea&quot;&gt; 39:     }&lt;br /&gt;&lt;/pre&gt;&lt;pre style=&quot;font-size: 12px; font-family: consolas,&#39;Courier New&#39;,courier,monospace; margin: 0em; width: 100%; background-color: #ffffff&quot;&gt; 40: &lt;br /&gt;&lt;/pre&gt;&lt;pre style=&quot;font-size: 12px; font-family: consolas,&#39;Courier New&#39;,courier,monospace; margin: 0em; width: 100%; background-color: #eaeaea&quot;&gt; 41: }&lt;/pre&gt;&lt;/pre&gt;&lt;br /&gt;&lt;p&gt;The service will try to retrieve the files being posted. It will verify that the file is present, and if so, it will save it within the “uploads” folder in the local machine, using the original file name. The request is of type &lt;a href=&quot;http://msdn.microsoft.com/en-us/library/cc680816.aspx&quot;&gt;HttpRequestBase&lt;/a&gt;, which contains a handy property called &lt;a href=&quot;http://msdn.microsoft.com/en-us/library/system.web.httprequestbase.files.aspx&quot;&gt;Files&lt;/a&gt;. The property gives you a collection of files that were uploaded by the client, in multipart MIME format. The collection is of type &lt;a href=&quot;http://msdn.microsoft.com/en-us/library/system.web.httpfilecollection.aspx&quot;&gt;HttpFileCollection&lt;/a&gt;, and each item is of type &lt;a href=&quot;http://msdn.microsoft.com/en-us/library/system.web.httppostedfile.aspx&quot;&gt;HttpPostedFile&lt;/a&gt;. The code uses a helper function to determine if the request effectively has or not a file. Additionally we use a simple flag to communicate if a file was received and saved, so we can display a message in the view.&lt;/p&gt;&lt;br /&gt;&lt;p&gt;Let’s create a default view for the &lt;em&gt;FileUploadController&lt;/em&gt;. Create a new &lt;em&gt;FileUpload&lt;/em&gt; folder inside the &lt;em&gt;Views&lt;/em&gt; folder, and then add a new view and name it &lt;em&gt;index&lt;/em&gt;.&lt;/p&gt;&lt;br /&gt;&lt;p&gt;&lt;a href=&quot;http://lh6.ggpht.com/-YldzLQN5pAQ/Uauh9ft9EEI/AAAAAAAAEto/B9WVMZAiIRI/s1600-h/image%25255B71%25255D.png&quot;&gt;&lt;img title=&quot;image&quot; style=&quot;display: inline&quot; alt=&quot;image&quot; src=&quot;http://lh3.ggpht.com/-bK5x7l2k4qA/Uauh-FQHRJI/AAAAAAAAEtw/-KQ4Rq3awno/image_thumb%25255B41%25255D.png?imgmax=800&quot; width=&quot;243&quot; height=&quot;240&quot;&gt;&lt;/a&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;a href=&quot;http://lh5.ggpht.com/-zxe0UY5PK3c/Uauh-4sK-pI/AAAAAAAAEt4/4UszuCs1ZYw/s1600-h/image%25255B72%25255D.png&quot;&gt;&lt;img title=&quot;image&quot; style=&quot;display: inline&quot; alt=&quot;image&quot; src=&quot;http://lh6.ggpht.com/-VXue7J7jsLo/Uauh_ct5lRI/AAAAAAAAEuA/DaHbrA2WQhE/image_thumb%25255B42%25255D.png?imgmax=800&quot; width=&quot;183&quot; height=&quot;240&quot;&gt;&lt;/a&gt;&amp;nbsp;&lt;/p&gt;&lt;br /&gt;&lt;p&gt;Let’s modify the view so we can display a meaningful message and and also indicate if a file was actually received and stored or not.&lt;/p&gt;&lt;br /&gt;&lt;p&gt;&lt;a href=&quot;http://lh4.ggpht.com/-Ib3vLl0NIV8/Uauh_6uV3RI/AAAAAAAAEuI/ZTAItVxbqOM/s1600-h/image%25255B91%25255D.png&quot;&gt;&lt;img title=&quot;image&quot; style=&quot;float: none; margin-left: auto; display: block; margin-right: auto&quot; alt=&quot;image&quot; src=&quot;http://lh5.ggpht.com/-vUD1zRg1GlQ/UauiA9GebsI/AAAAAAAAEuQ/h9_GKQ8VYfE/image_thumb%25255B53%25255D.png?imgmax=800&quot; width=&quot;434&quot; height=&quot;133&quot;&gt;&lt;/a&gt;&lt;/p&gt;&lt;br /&gt;&lt;p&gt;Let’s give it a quick test by running the app and executing the file upload action by entering “/fileupload” in the address bar. Remember that you can debug the actions by placing breakpoints into your controller’s code. The view should display the message “File received: False” since we are not submitting any file.&lt;/p&gt;&lt;br /&gt;&lt;p&gt;&lt;a href=&quot;http://lh4.ggpht.com/-zSatFqS52T4/UauiCE5gunI/AAAAAAAAEuY/6LdueFcTiwk/s1600-h/image%25255B79%25255D.png&quot;&gt;&lt;img title=&quot;image&quot; style=&quot;float: none; margin-left: auto; display: block; margin-right: auto&quot; alt=&quot;image&quot; src=&quot;http://lh3.ggpht.com/-HoLrv8DNVEM/UauiC59476I/AAAAAAAAEug/ATmhTS6kohU/image_thumb%25255B45%25255D.png?imgmax=800&quot; width=&quot;434&quot; height=&quot;226&quot;&gt;&lt;/a&gt;&lt;/p&gt;&lt;br /&gt;&lt;p&gt;&lt;a href=&quot;http://lh6.ggpht.com/-060BDEVBq_E/UauiDprMyII/AAAAAAAAEuo/o_9SbohbgRM/s1600-h/image%25255B83%25255D.png&quot;&gt;&lt;img title=&quot;image&quot; style=&quot;float: none; margin-left: auto; display: block; margin-right: auto&quot; alt=&quot;image&quot; src=&quot;http://lh6.ggpht.com/-CPaIVVODlwM/UauiEARCR9I/AAAAAAAAEuw/0UIxzqidUIc/image_thumb%25255B47%25255D.png?imgmax=800&quot; width=&quot;305&quot; height=&quot;240&quot;&gt;&lt;/a&gt;&lt;/p&gt;&lt;br /&gt;&lt;p&gt;Now, let’s test the file upload. For this purpose, I’ll be using Fiddler. Run the app and go to the compose tab. Select Post as the HTTP method, enter the URL for the &lt;em&gt;FileUpload&lt;/em&gt; action, and use the “Upload File” functionality to include a local file in the request (tip: you can go to the filters tab and check the option to track only traffic coming from &lt;em&gt;localhost&lt;/em&gt;).&lt;/p&gt;&lt;br /&gt;&lt;p&gt;&lt;a href=&quot;http://lh3.ggpht.com/-7hiXyZ1mccI/UauiFcj6k1I/AAAAAAAAEu4/fBXVz6yhy4I/s1600-h/image%25255B99%25255D.png&quot;&gt;&lt;img title=&quot;image&quot; style=&quot;float: none; margin-left: auto; display: block; margin-right: auto&quot; alt=&quot;image&quot; src=&quot;http://lh3.ggpht.com/-VByU-A7DMzQ/UauiGMo_srI/AAAAAAAAEvA/8Wb1XRUcid4/image_thumb%25255B57%25255D.png?imgmax=800&quot; width=&quot;345&quot; height=&quot;240&quot;&gt;&lt;/a&gt;&lt;/p&gt;&lt;br /&gt;&lt;p&gt;Once you execute the post, you should be able to debug the &lt;em&gt;FileUpload&lt;/em&gt; action on the MVC project. Check to make sure you are receiving the correct file you posted with Fiddler and that that file content is not null. &lt;/p&gt;&lt;br /&gt;&lt;p&gt;&lt;a href=&quot;http://lh6.ggpht.com/-6vyyV4LPusU/UauiHqWkrjI/AAAAAAAAEvI/OfvmpoujxVA/s1600-h/image%25255B103%25255D.png&quot;&gt;&lt;img title=&quot;image&quot; style=&quot;float: none; margin-left: auto; display: block; margin-right: auto&quot; alt=&quot;image&quot; src=&quot;http://lh6.ggpht.com/-49hAAn4ET2s/UauiImKM73I/AAAAAAAAEvQ/ay1RaIYu74o/image_thumb%25255B59%25255D.png?imgmax=800&quot; width=&quot;434&quot; height=&quot;228&quot;&gt;&lt;/a&gt;&lt;/p&gt;&lt;br /&gt;&lt;p&gt;&lt;a href=&quot;http://lh3.ggpht.com/-PDEZArVgLrE/UauiJZvudZI/AAAAAAAAEvY/NHFZcZcCFRI/s1600-h/image%25255B107%25255D.png&quot;&gt;&lt;img title=&quot;image&quot; style=&quot;float: none; margin-left: auto; display: block; margin-right: auto&quot; alt=&quot;image&quot; src=&quot;http://lh3.ggpht.com/-3GzXmU9Qd1U/UauiKKFbNxI/AAAAAAAAEvg/eWuPoHrTYQE/image_thumb%25255B61%25255D.png?imgmax=800&quot; width=&quot;434&quot; height=&quot;212&quot;&gt;&lt;/a&gt;&lt;/p&gt;&lt;br /&gt;&lt;p&gt;After executing the HTTP request, you should see a 200 response in fiddler and the file being saved in the newly created “uploads” folder inside your MVC solution folder.&lt;/p&gt;&lt;br /&gt;&lt;p&gt;&lt;a href=&quot;http://lh6.ggpht.com/-YNNbdWj7wYQ/UauiLYl5vkI/AAAAAAAAEvo/oYKYBHoV-cU/s1600-h/image%25255B118%25255D.png&quot;&gt;&lt;img title=&quot;image&quot; style=&quot;float: none; margin-left: auto; display: block; margin-right: auto&quot; alt=&quot;image&quot; src=&quot;http://lh4.ggpht.com/-JIqyAlY__1U/UauiMHWY8WI/AAAAAAAAEvw/HBRLbLnn2rs/image_thumb%25255B68%25255D.png?imgmax=800&quot; width=&quot;399&quot; height=&quot;287&quot;&gt;&lt;/a&gt;&lt;/p&gt;&lt;br /&gt;&lt;p&gt;&lt;a href=&quot;http://lh6.ggpht.com/-SuKCEQzgIds/UauiM9eXBDI/AAAAAAAAEv4/6Kd3kbo-wjk/s1600-h/image%25255B115%25255D.png&quot;&gt;&lt;img title=&quot;image&quot; style=&quot;float: none; margin-left: auto; display: block; margin-right: auto&quot; alt=&quot;image&quot; src=&quot;http://lh6.ggpht.com/-8FYNoRqi144/UauiNvN8vXI/AAAAAAAAEwA/6BJGW5_8e1M/image_thumb%25255B65%25255D.png?imgmax=800&quot; width=&quot;398&quot; height=&quot;240&quot;&gt;&lt;/a&gt;&lt;/p&gt;&lt;br /&gt;&lt;p&gt;That all for now. You have a web service accepting file upload requests now. We were able to test that the service is running and responding, and also test an actual file upload using Fiddler. The next step is to create actual client apps that connect and upload to the service, which hopefully I’ll share soon.&lt;/p&gt;&lt;br /&gt;&lt;p&gt;You can download the sample application from my Github repo &lt;a href=&quot;https://github.com/anthonybaker/MVC_FileUploadSample_01&quot;&gt;here&lt;/a&gt;.&lt;/p&gt;  </content><link rel='replies' type='application/atom+xml' href='http://blog.anthonybaker.me/feeds/7703697295559775205/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://blog.anthonybaker.me/2013/06/how-to-implement-file-upload-restful.html#comment-form' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1811411750119502062/posts/default/7703697295559775205'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1811411750119502062/posts/default/7703697295559775205'/><link rel='alternate' type='text/html' href='http://blog.anthonybaker.me/2013/06/how-to-implement-file-upload-restful.html' title='How to Implement a File Upload RESTful Web Service with ASP.NET MVC'/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/00141462441551416511</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://lh4.ggpht.com/-ywCe4R5snPE/UauhiUgv1OI/AAAAAAAAEq4/ZLzwOpjprFw/s72-c/image_thumb%25255B14%25255D.png?imgmax=800" height="72" width="72"/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1811411750119502062.post-4886430168451177131</id><published>2013-05-21T23:09:00.001+01:00</published><updated>2013-05-21T23:09:48.761+01:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Functional Integration"/><category scheme="http://www.blogger.com/atom/ns#" term="Industry News"/><category scheme="http://www.blogger.com/atom/ns#" term="Innovation"/><category scheme="http://www.blogger.com/atom/ns#" term="Interoperability"/><category scheme="http://www.blogger.com/atom/ns#" term="Kinect"/><category scheme="http://www.blogger.com/atom/ns#" term="WinRT"/><category scheme="http://www.blogger.com/atom/ns#" term="Xbox"/><category scheme="http://www.blogger.com/atom/ns#" term="Xbox One"/><title type='text'>Xbox One Revealed</title><content type='html'>&lt;p&gt;&lt;a href=&quot;http://lh4.ggpht.com/-ji3sg2KimVg/UZvwbUbHkuI/AAAAAAAAEpY/SO0Ao4oPadk/s1600-h/xbox_one_01%25255B3%25255D.png&quot;&gt;&lt;img title=&quot;xbox_one_01&quot; style=&quot;float: none; margin-left: auto; display: block; margin-right: auto&quot; alt=&quot;xbox_one_01&quot; src=&quot;http://lh5.ggpht.com/-FiuzFOPZNto/UZvwc1Pa99I/AAAAAAAAEpg/WAPYI46SMAE/xbox_one_01_thumb%25255B1%25255D.png?imgmax=800&quot; width=&quot;428&quot; height=&quot;240&quot;&gt;&lt;/a&gt;&lt;/p&gt; &lt;p&gt;Today, Microsoft revealed the successor of the Xbox 360, the &lt;a href=&quot;http://www.xbox.com/en-GB/xboxone/meet-xbox-one&quot;&gt;Xbox One&lt;/a&gt;. On a well coordinated and nicely phased presentation, the company revealed their vision for the future of consoles. It turns out, that Xbox One is an all-in-one entertainment system, aiming to unity TV and Movies, Gaming, Music, Internet, Exercise, you name it. It integrates the latest sensor technologies for a completely new version of the Kinect, a powerful computing power which also integrates cloud computing, promising to get only more powerful with time, an architecture focused on ecosystem integration, from home devices and second and third screen experiences, to Internet and social, cloud and beyond.&lt;/p&gt; &lt;p&gt;&lt;strong&gt;Here are some of the highlights:&lt;/strong&gt;&lt;/p&gt; &lt;ul&gt; &lt;li&gt;Instant Power On&lt;/li&gt; &lt;li&gt;Fast Switching between Games, Movies, TV, Music, Web, Apps&lt;/li&gt; &lt;li&gt;Personalized TV with Smart TV Features&lt;/li&gt; &lt;li&gt;Skype is integrated&lt;/li&gt; &lt;li&gt;Multi-tasking with Snap View&lt;/li&gt; &lt;li&gt;New Kinect (Real Vision, Real Motion, Real Voice)&lt;/li&gt; &lt;li&gt;Brand New Controller improving the 360 version&lt;/li&gt; &lt;li&gt;SmartGlass Enhanced (Phone and Tablet Second Screen)&lt;/li&gt; &lt;li&gt;Redefined Xbox Live (Gold Membership Compatible)&lt;/li&gt; &lt;li&gt;Living Games Technology (leverages Cloud computing power)&lt;/li&gt; &lt;li&gt;Game Progress Sync&lt;/li&gt; &lt;li&gt;Smart Match to find the perfect gaming match around the world&lt;/li&gt; &lt;li&gt;Forza Motorsports 5 Sneak Peak and Exclusive&lt;/li&gt; &lt;li&gt;Quantum Break Exclusive&lt;/li&gt; &lt;li&gt;Impressive Performance and Graphics&lt;/li&gt; &lt;li&gt;NFL on Xbox (Interactive Experience and Exclusive Partnership) &lt;/li&gt; &lt;li&gt;Call of Duty Ghosts Exclusive Downloads&lt;/li&gt; &lt;li&gt;Web / Browser Integrated&lt;/li&gt; &lt;li&gt;Halo Action TV Series with Exclusives for Xbox&lt;/li&gt;&lt;!--EndFragment--&gt;&lt;/ul&gt; &lt;p&gt;&lt;strong&gt;&lt;a href=&quot;http://lh5.ggpht.com/-VKW16Cq_lP4/UZvwd1AWdsI/AAAAAAAAEpo/2OIuqDAOmqc/s1600-h/xbox_one_03%25255B3%25255D.png&quot;&gt;&lt;img title=&quot;xbox_one_03&quot; style=&quot;float: none; margin-left: auto; display: block; margin-right: auto&quot; alt=&quot;xbox_one_03&quot; src=&quot;http://lh4.ggpht.com/-8CIqtwBiXmA/UZvwfKowCII/AAAAAAAAEpw/F0-hfK7Nqhk/xbox_one_03_thumb%25255B1%25255D.png?imgmax=800&quot; width=&quot;333&quot; height=&quot;240&quot;&gt;&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;&lt;strong&gt;Cutting-edge Powerful Specs:&lt;/strong&gt;&lt;/p&gt; &lt;ul&gt; &lt;li&gt;8 Corer (x86 processors)&lt;/li&gt; &lt;li&gt;HDMI Pass-Thru&lt;/li&gt; &lt;li&gt;8 GB of RAM&lt;/li&gt; &lt;li&gt;500 GB Hard Drive&lt;/li&gt; &lt;li&gt;Blue-ray Player&lt;/li&gt; &lt;li&gt;ESRAM/CPU/GPU Access for Top Performance&lt;/li&gt; &lt;li&gt;Power Consumption Efficiency&lt;/li&gt;&lt;/ul&gt; &lt;p&gt;&lt;strong&gt;The Tenants:&lt;/strong&gt; &lt;/p&gt; &lt;ul&gt; &lt;li&gt;Simple&lt;/li&gt; &lt;li&gt;Instant&lt;/li&gt; &lt;li&gt;Complete&lt;/li&gt;&lt;/ul&gt; &lt;p&gt;&lt;a href=&quot;http://lh5.ggpht.com/-KcUB9UcVLRo/UZvwgzKKONI/AAAAAAAAEp4/gfE33xEyevY/s1600-h/xbox_one_02%25255B3%25255D.png&quot;&gt;&lt;img title=&quot;xbox_one_02&quot; style=&quot;float: none; margin-left: auto; display: block; margin-right: auto&quot; alt=&quot;xbox_one_02&quot; src=&quot;http://lh3.ggpht.com/-wTLjgrxQlfc/UZvwiD-DjPI/AAAAAAAAEqA/3es_FD6IjH8/xbox_one_02_thumb%25255B1%25255D.png?imgmax=800&quot; width=&quot;370&quot; height=&quot;240&quot;&gt;&lt;/a&gt;&lt;/p&gt; &lt;p&gt;Truly, the Xbox One is by far the most compelling entertainment and gaming console the industry has seen so far. No matter how loud Microsoft haters bark, this is a lot more powerful, integrated and engaging than any existing Smart TV technology, gaming console or entertainment system. Google TV and Apple TV have now a really strong, all-in-one competitor, which is in fact quite good, since it will push the home entertainment technologies far higher.&lt;/p&gt; &lt;p&gt;&lt;a href=&quot;http://lh5.ggpht.com/-ddbnFfpOwuQ/UZvwkaYEkWI/AAAAAAAAEqI/JWHAdxC9AvA/s1600-h/xbox_one_05%25255B3%25255D.png&quot;&gt;&lt;img title=&quot;xbox_one_05&quot; style=&quot;float: none; margin-left: auto; display: block; margin-right: auto&quot; alt=&quot;xbox_one_05&quot; src=&quot;http://lh4.ggpht.com/-JrThK-WJK1U/UZvwl--FliI/AAAAAAAAEqQ/1pyf37IKXNI/xbox_one_05_thumb%25255B1%25255D.png?imgmax=800&quot; width=&quot;382&quot; height=&quot;240&quot;&gt;&lt;/a&gt;&lt;/p&gt; &lt;p&gt;However, beating what the Xbox One is going to be hard. The machine specs are really powerful, and the cloud computing leverage just increases the potential. The Kinect sensor has already proven its capabilities, and by completely integrating it within the system and pushing the boundaries, Microsoft has achieved an impressive accuracy in terms of voice, gestures and facial recognition. &lt;/p&gt; &lt;p&gt;The console also integrates the WinRT kernel, and the application world, enhancing and empowering the Xbox Live community. I can only see benefits for Indi developers, and more opportunities for game and application developers along the road. &lt;/p&gt; &lt;p&gt;&lt;a href=&quot;http://lh3.ggpht.com/-z8QX2jKV3vI/UZvwoeRGYqI/AAAAAAAAEqY/QeiMchDPUoA/s1600-h/xbox_one_04%25255B6%25255D.png&quot;&gt;&lt;img title=&quot;xbox_one_04&quot; style=&quot;float: none; margin-left: auto; display: block; margin-right: auto&quot; alt=&quot;xbox_one_04&quot; src=&quot;http://lh6.ggpht.com/--tTiXo583JM/UZvwqk2kIXI/AAAAAAAAEqg/YroUWU9kpTQ/xbox_one_04_thumb%25255B4%25255D.png?imgmax=800&quot; width=&quot;388&quot; height=&quot;312&quot;&gt;&lt;/a&gt;&lt;/p&gt; &lt;p&gt;Smart Glass, higher connectivity specs and capabilities, Internet enabled at its core, deliver a true cross-device, cross-platform integrated home entertainment ecosystem, which no other company has been able to deliver, even if they have been in stronger positions.&lt;/p&gt; &lt;p&gt;Some people will complain about not being able to run their existing Xbox 360 games on the new platform, which I’m actually happy it is the case. Backward compatibility with existing games would have crippled the console. All in all, I believe this system to be a true integrated entertainment solution that people will really enjoy. It is aligned to the latest Windows technologies, and it will help to bring the ecosystem closer together. &lt;/p&gt; &lt;p&gt;You can find more on the &lt;a href=&quot;http://www.xbox.com/en-GB/xboxone/meet-xbox-one&quot;&gt;Xbox One site&lt;/a&gt;.&lt;/p&gt;  </content><link rel='replies' type='application/atom+xml' href='http://blog.anthonybaker.me/feeds/4886430168451177131/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://blog.anthonybaker.me/2013/05/xbox-one-revealed.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1811411750119502062/posts/default/4886430168451177131'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1811411750119502062/posts/default/4886430168451177131'/><link rel='alternate' type='text/html' href='http://blog.anthonybaker.me/2013/05/xbox-one-revealed.html' title='Xbox One Revealed'/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/00141462441551416511</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://lh5.ggpht.com/-FiuzFOPZNto/UZvwc1Pa99I/AAAAAAAAEpg/WAPYI46SMAE/s72-c/xbox_one_01_thumb%25255B1%25255D.png?imgmax=800" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1811411750119502062.post-1713937309738354312</id><published>2013-05-16T22:18:00.001+01:00</published><updated>2013-05-16T22:23:46.805+01:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="C#"/><category scheme="http://www.blogger.com/atom/ns#" term="Mobile"/><category scheme="http://www.blogger.com/atom/ns#" term="Tips"/><category scheme="http://www.blogger.com/atom/ns#" term="Visual Studio"/><category scheme="http://www.blogger.com/atom/ns#" term="Windows Phone"/><category scheme="http://www.blogger.com/atom/ns#" term="Windows Phone 8"/><category scheme="http://www.blogger.com/atom/ns#" term="XAML"/><title type='text'>WP8 Tip: Creating Live Tiles with Dynamic Images</title><content type='html'>&lt;p&gt;On a recent project we came to an issue with the Windows Phone application’s Live Tile. The application is used as a product’s specific interactive mobile experience. One of the requirements, is to be able to update the content to match a product, so when the app is installed, it displays only the desired product’s information. &lt;/p&gt; &lt;p&gt;In terms of app content, this is a common scenario and it can be approached by consuming local or external content, whether using the application’s isolated storage or web services. &lt;/p&gt; &lt;p&gt;However, Live Tiles are a different matter, in particular if you need to create the app’s Live Tile with images loaded dynamically. Today I spent some time looking for a way to solve the issue, and I want to share it with you.&lt;/p&gt; &lt;p&gt;In this sample, I’ll create a simple example which will use images stored in isolated storage. The first time the application runs, it will create the Live Tile using one of the tile templates using the loaded images. This approach allows you to change the tile images according to the desired content.&lt;/p&gt; &lt;p&gt;&lt;a href=&quot;http://lh5.ggpht.com/-xTKjdSqi63o/UZVMdrW5w8I/AAAAAAAAEko/amEgtiG7jRg/s1600-h/image%25255B4%25255D.png&quot;&gt;&lt;img title=&quot;image&quot; style=&quot;float: none; margin-left: auto; display: block; margin-right: auto&quot; alt=&quot;image&quot; src=&quot;http://lh6.ggpht.com/-lPBUfDG6Uuw/UZVMfLCsC5I/AAAAAAAAEkw/q3IRgmsWLCM/image_thumb%25255B2%25255D.png?imgmax=800&quot; width=&quot;207&quot; height=&quot;365&quot;&gt;&lt;/a&gt;&lt;/p&gt; &lt;p&gt;To start, create a new Windows Phone 8 application in Visual Studio. Remove the UI code that you won’t use, to keep the sample clean. &lt;/p&gt; &lt;p&gt;&lt;a href=&quot;http://lh5.ggpht.com/-huBNhdlvvtk/UZVMgHBHhRI/AAAAAAAAEk4/qlXNJsXO6ME/s1600-h/image%25255B9%25255D.png&quot;&gt;&lt;img title=&quot;image&quot; style=&quot;float: none; margin-left: auto; display: block; margin-right: auto&quot; alt=&quot;image&quot; src=&quot;http://lh4.ggpht.com/-eUm-SDMdI84/UZVMhn6o_FI/AAAAAAAAElA/YsyP1ZuAgZ4/image_thumb%25255B5%25255D.png?imgmax=800&quot; width=&quot;206&quot; height=&quot;262&quot;&gt;&lt;/a&gt;&lt;/p&gt; &lt;p&gt;By default, the application will be created with a few default images for the tile. Notice the default images for the FlipCycle and the Iconic tile templates. If you check the windows phone application’s manifest (WMAppManifest.xml), you will notice the application’s default tile template and default images defined here.&lt;/p&gt; &lt;p&gt;&lt;a href=&quot;http://lh3.ggpht.com/-jn57kkQ7Efo/UZVMjZGsZrI/AAAAAAAAElI/8-CsNJvjSBg/s1600-h/image%25255B61%25255D.png&quot;&gt;&lt;img title=&quot;image&quot; style=&quot;float: none; margin-left: auto; display: block; margin-right: auto&quot; alt=&quot;image&quot; src=&quot;http://lh3.ggpht.com/-w4aGbqyrwyE/UZVMkmfHGaI/AAAAAAAAElQ/jnnrZJx_jjA/image_thumb%25255B23%25255D.png?imgmax=800&quot; width=&quot;434&quot; height=&quot;229&quot;&gt;&lt;/a&gt;&lt;/p&gt; &lt;p&gt;Then, open the App.xaml.cs class and add the following method, which will be responsible for creating the actual Live Tile.&lt;/p&gt;&lt;pre style=&quot;overflow: auto; border-top: #cecece 1px solid; border-right: #cecece 1px solid; border-bottom: #cecece 1px solid; padding-bottom: 5px; padding-top: 5px; padding-left: 5px; min-height: 40px; border-left: #cecece 1px solid; padding-right: 5px; width: 500px; background-color: #fbfbfb&quot;&gt;&lt;pre style=&quot;font-size: 12px; font-family: consolas,&#39;Courier New&#39;,courier,monospace; margin: 0em; width: 100%; background-color: #eaeaea&quot;&gt;  1: &lt;span style=&quot;color: #808080&quot;&gt;/// &amp;lt;summary&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;&lt;pre style=&quot;font-size: 12px; font-family: consolas,&#39;Courier New&#39;,courier,monospace; margin: 0em; width: 100%; background-color: #ffffff&quot;&gt;  2: &lt;span style=&quot;color: #808080&quot;&gt;/// create live tile if it was not created&lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;&lt;pre style=&quot;font-size: 12px; font-family: consolas,&#39;Courier New&#39;,courier,monospace; margin: 0em; width: 100%; background-color: #eaeaea&quot;&gt;  3: &lt;span style=&quot;color: #808080&quot;&gt;/// &amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;&lt;pre style=&quot;font-size: 12px; font-family: consolas,&#39;Courier New&#39;,courier,monospace; margin: 0em; width: 100%; background-color: #ffffff&quot;&gt;  4: &lt;span style=&quot;color: #0000ff&quot;&gt;private&lt;/span&gt; &lt;span style=&quot;color: #0000ff&quot;&gt;void&lt;/span&gt; CreateLiveTile()&lt;br /&gt;&lt;/pre&gt;&lt;pre style=&quot;font-size: 12px; font-family: consolas,&#39;Courier New&#39;,courier,monospace; margin: 0em; width: 100%; background-color: #eaeaea&quot;&gt;  5: {&lt;br /&gt;&lt;/pre&gt;&lt;pre style=&quot;font-size: 12px; font-family: consolas,&#39;Courier New&#39;,courier,monospace; margin: 0em; width: 100%; background-color: #ffffff&quot;&gt;  6:     &lt;span style=&quot;color: #008000&quot;&gt;// Assumes we are getting the image file names from either &lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;&lt;pre style=&quot;font-size: 12px; font-family: consolas,&#39;Courier New&#39;,courier,monospace; margin: 0em; width: 100%; background-color: #eaeaea&quot;&gt;  7:     &lt;span style=&quot;color: #008000&quot;&gt;// a web service or local isolated storage&lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;&lt;pre style=&quot;font-size: 12px; font-family: consolas,&#39;Courier New&#39;,courier,monospace; margin: 0em; width: 100%; background-color: #ffffff&quot;&gt;  8:     &lt;span style=&quot;color: #0000ff&quot;&gt;string&lt;/span&gt; smallImage = &quot;&lt;span style=&quot;color: #8b0000&quot;&gt;FlipCycleTileSmall.png&lt;/span&gt;&quot;;&lt;br /&gt;&lt;/pre&gt;&lt;pre style=&quot;font-size: 12px; font-family: consolas,&#39;Courier New&#39;,courier,monospace; margin: 0em; width: 100%; background-color: #eaeaea&quot;&gt;  9:     &lt;span style=&quot;color: #0000ff&quot;&gt;string&lt;/span&gt; mediumImageFront = &quot;&lt;span style=&quot;color: #8b0000&quot;&gt;FlipCycleTileMedium.png&lt;/span&gt;&quot;;&lt;br /&gt;&lt;/pre&gt;&lt;pre style=&quot;font-size: 12px; font-family: consolas,&#39;Courier New&#39;,courier,monospace; margin: 0em; width: 100%; background-color: #ffffff&quot;&gt; 10:     &lt;span style=&quot;color: #0000ff&quot;&gt;string&lt;/span&gt; mediumImageBack = &quot;&lt;span style=&quot;color: #8b0000&quot;&gt;FlipCycleTileMediumBack.png&lt;/span&gt;&quot;;&lt;br /&gt;&lt;/pre&gt;&lt;pre style=&quot;font-size: 12px; font-family: consolas,&#39;Courier New&#39;,courier,monospace; margin: 0em; width: 100%; background-color: #eaeaea&quot;&gt; 11:     &lt;span style=&quot;color: #0000ff&quot;&gt;string&lt;/span&gt; title = &quot;&lt;span style=&quot;color: #8b0000&quot;&gt;PRODUCT XYZ&lt;/span&gt;&quot;;&lt;br /&gt;&lt;/pre&gt;&lt;pre style=&quot;font-size: 12px; font-family: consolas,&#39;Courier New&#39;,courier,monospace; margin: 0em; width: 100%; background-color: #ffffff&quot;&gt; 12: &lt;br /&gt;&lt;/pre&gt;&lt;pre style=&quot;font-size: 12px; font-family: consolas,&#39;Courier New&#39;,courier,monospace; margin: 0em; width: 100%; background-color: #eaeaea&quot;&gt; 13:     &lt;span style=&quot;color: #008000&quot;&gt;// The way to load the tile images from isolated storage is to use the&lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;&lt;pre style=&quot;font-size: 12px; font-family: consolas,&#39;Courier New&#39;,courier,monospace; margin: 0em; width: 100%; background-color: #ffffff&quot;&gt; 14:     &lt;span style=&quot;color: #008000&quot;&gt;// isostorage URI format. Images need to exist in the /Shared/ShellContent/ location.&lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;&lt;pre style=&quot;font-size: 12px; font-family: consolas,&#39;Courier New&#39;,courier,monospace; margin: 0em; width: 100%; background-color: #eaeaea&quot;&gt; 15:     &lt;span style=&quot;color: #008000&quot;&gt;// Assumes there is a data/asseet download and store mechanism making sure of this.&lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;&lt;pre style=&quot;font-size: 12px; font-family: consolas,&#39;Courier New&#39;,courier,monospace; margin: 0em; width: 100%; background-color: #ffffff&quot;&gt; 16:     &lt;span style=&quot;color: #0000ff&quot;&gt;string&lt;/span&gt; baseIsoUri = &quot;&lt;span style=&quot;color: #8b0000&quot;&gt;/Shared/ShellContent/&lt;/span&gt;&quot;;&lt;br /&gt;&lt;/pre&gt;&lt;pre style=&quot;font-size: 12px; font-family: consolas,&#39;Courier New&#39;,courier,monospace; margin: 0em; width: 100%; background-color: #eaeaea&quot;&gt; 17: &lt;br /&gt;&lt;/pre&gt;&lt;pre style=&quot;font-size: 12px; font-family: consolas,&#39;Courier New&#39;,courier,monospace; margin: 0em; width: 100%; background-color: #ffffff&quot;&gt; 18:     FlipTileData appTile = &lt;span style=&quot;color: #0000ff&quot;&gt;new&lt;/span&gt; FlipTileData();&lt;br /&gt;&lt;/pre&gt;&lt;pre style=&quot;font-size: 12px; font-family: consolas,&#39;Courier New&#39;,courier,monospace; margin: 0em; width: 100%; background-color: #eaeaea&quot;&gt; 19:     appTile.Title = title;&lt;br /&gt;&lt;/pre&gt;&lt;pre style=&quot;font-size: 12px; font-family: consolas,&#39;Courier New&#39;,courier,monospace; margin: 0em; width: 100%; background-color: #ffffff&quot;&gt; 20:     appTile.Count = 9;&lt;br /&gt;&lt;/pre&gt;&lt;pre style=&quot;font-size: 12px; font-family: consolas,&#39;Courier New&#39;,courier,monospace; margin: 0em; width: 100%; background-color: #eaeaea&quot;&gt; 21:     appTile.SmallBackgroundImage = &lt;span style=&quot;color: #0000ff&quot;&gt;new&lt;/span&gt; Uri(&quot;&lt;span style=&quot;color: #8b0000&quot;&gt;isostore:&lt;/span&gt;&quot; + baseIsoUri + smallImage, UriKind.Absolute);&lt;br /&gt;&lt;/pre&gt;&lt;pre style=&quot;font-size: 12px; font-family: consolas,&#39;Courier New&#39;,courier,monospace; margin: 0em; width: 100%; background-color: #ffffff&quot;&gt; 22:     appTile.BackgroundImage = &lt;span style=&quot;color: #0000ff&quot;&gt;new&lt;/span&gt; Uri(&quot;&lt;span style=&quot;color: #8b0000&quot;&gt;isostore:&lt;/span&gt;&quot; + baseIsoUri + mediumImageFront, UriKind.Absolute);&lt;br /&gt;&lt;/pre&gt;&lt;pre style=&quot;font-size: 12px; font-family: consolas,&#39;Courier New&#39;,courier,monospace; margin: 0em; width: 100%; background-color: #eaeaea&quot;&gt; 23:     appTile.BackBackgroundImage = &lt;span style=&quot;color: #0000ff&quot;&gt;new&lt;/span&gt; Uri(&quot;&lt;span style=&quot;color: #8b0000&quot;&gt;isostore:&lt;/span&gt;&quot; + baseIsoUri + mediumImageBack, UriKind.Absolute);&lt;br /&gt;&lt;/pre&gt;&lt;pre style=&quot;font-size: 12px; font-family: consolas,&#39;Courier New&#39;,courier,monospace; margin: 0em; width: 100%; background-color: #ffffff&quot;&gt; 24:     appTile.BackContent = &quot;&lt;span style=&quot;color: #8b0000&quot;&gt;Dynamic Images&lt;/span&gt;&quot;;&lt;br /&gt;&lt;/pre&gt;&lt;pre style=&quot;font-size: 12px; font-family: consolas,&#39;Courier New&#39;,courier,monospace; margin: 0em; width: 100%; background-color: #eaeaea&quot;&gt; 25: &lt;br /&gt;&lt;/pre&gt;&lt;pre style=&quot;font-size: 12px; font-family: consolas,&#39;Courier New&#39;,courier,monospace; margin: 0em; width: 100%; background-color: #ffffff&quot;&gt; 26:     &lt;span style=&quot;color: #008000&quot;&gt;// find the tile object for the application tile that use the string used in the title contains string in it.&lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;&lt;pre style=&quot;font-size: 12px; font-family: consolas,&#39;Courier New&#39;,courier,monospace; margin: 0em; width: 100%; background-color: #eaeaea&quot;&gt; 27:     ShellTile TileToFind = ShellTile.ActiveTiles.FirstOrDefault(x =&amp;gt; x.NavigationUri.ToString().Contains(title.ToString()));&lt;br /&gt;&lt;/pre&gt;&lt;pre style=&quot;font-size: 12px; font-family: consolas,&#39;Courier New&#39;,courier,monospace; margin: 0em; width: 100%; background-color: #ffffff&quot;&gt; 28: &lt;br /&gt;&lt;/pre&gt;&lt;pre style=&quot;font-size: 12px; font-family: consolas,&#39;Courier New&#39;,courier,monospace; margin: 0em; width: 100%; background-color: #eaeaea&quot;&gt; 29:     &lt;span style=&quot;color: #0000ff&quot;&gt;if&lt;/span&gt; (TileToFind == &lt;span style=&quot;color: #0000ff&quot;&gt;null&lt;/span&gt;)&lt;br /&gt;&lt;/pre&gt;&lt;pre style=&quot;font-size: 12px; font-family: consolas,&#39;Courier New&#39;,courier,monospace; margin: 0em; width: 100%; background-color: #ffffff&quot;&gt; 30:     {&lt;br /&gt;&lt;/pre&gt;&lt;pre style=&quot;font-size: 12px; font-family: consolas,&#39;Courier New&#39;,courier,monospace; margin: 0em; width: 100%; background-color: #eaeaea&quot;&gt; 31:         ShellTile.Create(&lt;span style=&quot;color: #0000ff&quot;&gt;new&lt;/span&gt; Uri(&lt;span style=&quot;color: #0000ff&quot;&gt;string&lt;/span&gt;.Format(&quot;&lt;span style=&quot;color: #8b0000&quot;&gt;/MainPage.xaml?id={0}&lt;/span&gt;&quot;, title), UriKind.Relative), appTile, &lt;span style=&quot;color: #0000ff&quot;&gt;true&lt;/span&gt;);&lt;br /&gt;&lt;/pre&gt;&lt;pre style=&quot;font-size: 12px; font-family: consolas,&#39;Courier New&#39;,courier,monospace; margin: 0em; width: 100%; background-color: #ffffff&quot;&gt; 32:     }&lt;br /&gt;&lt;/pre&gt;&lt;pre style=&quot;font-size: 12px; font-family: consolas,&#39;Courier New&#39;,courier,monospace; margin: 0em; width: 100%; background-color: #eaeaea&quot;&gt; 33: }&lt;/pre&gt;&lt;/pre&gt;&lt;br /&gt;&lt;p&gt;Then, you need to call the method from your application initialization. You can add the call at the end of the InitializePhoneApplication() method in the App.xaml.cs file.&lt;br&gt;&lt;br&gt;Before we give it a try, lets create a copy of the default tile images and change them using a tool like Photoshop to differentiate them.&lt;br&gt;&lt;br&gt;&lt;a href=&quot;http://lh3.ggpht.com/-mhqgcrTixVg/UZVMmDx1aiI/AAAAAAAAElY/YMmIetqCtmw/s1600-h/image%25255B62%25255D.png&quot;&gt;&lt;img title=&quot;image&quot; style=&quot;float: none; margin-left: auto; display: block; margin-right: auto&quot; alt=&quot;image&quot; src=&quot;http://lh6.ggpht.com/-b9VyvUSjG1A/UZVMnczTbnI/AAAAAAAAElg/lf2iErl7nTg/image_thumb%25255B24%25255D.png?imgmax=800&quot; width=&quot;374&quot; height=&quot;240&quot;&gt;&lt;/a&gt;&lt;br&gt;Go back to Visual Studio and put a breakpoint on the CreateLiveTile method we created. &lt;br&gt;&lt;br&gt;&lt;a href=&quot;http://lh5.ggpht.com/-V3u8vNfLchE/UZVMokM1B3I/AAAAAAAAElo/7NiGAGVwKqo/s1600-h/image%25255B63%25255D.png&quot;&gt;&lt;img title=&quot;image&quot; style=&quot;float: none; margin-left: auto; display: block; margin-right: auto&quot; alt=&quot;image&quot; src=&quot;http://lh6.ggpht.com/-DMHUI7AcWGY/UZVMqIK8QCI/AAAAAAAAElw/UovJBcFOwR8/image_thumb%25255B25%25255D.png?imgmax=800&quot; width=&quot;434&quot; height=&quot;209&quot;&gt;&lt;/a&gt;&lt;br&gt;Select the emulator as the target device, and run the application.&lt;a href=&quot;http://lh6.ggpht.com/-F7R0hm-GAEg/UZVMrWzLGmI/AAAAAAAAEl4/NXGQInjG6MM/s1600-h/image%25255B64%25255D.png&quot;&gt;&lt;br&gt;&lt;br&gt;&lt;img title=&quot;image&quot; style=&quot;float: none; margin-left: auto; display: block; margin-right: auto&quot; alt=&quot;image&quot; src=&quot;http://lh3.ggpht.com/-JQDvEgDzfQo/UZVMsUFcc1I/AAAAAAAAEmA/M5Tw9XriZsQ/image_thumb%25255B26%25255D.png?imgmax=800&quot; width=&quot;434&quot; height=&quot;49&quot;&gt;&lt;/a&gt;&lt;br&gt;Visual Studio will launch the WP8 emulator (the first time it will take a while, so keep the emulator open so following runs load faster)&lt;br&gt;&lt;br&gt;&lt;a href=&quot;http://lh4.ggpht.com/-ZA712R-UzKA/UZVMtg-4x1I/AAAAAAAAEmI/K2XimlOa5d4/s1600-h/image%25255B65%25255D.png&quot;&gt;&lt;img title=&quot;image&quot; style=&quot;float: none; margin-left: auto; display: block; margin-right: auto&quot; alt=&quot;image&quot; src=&quot;http://lh4.ggpht.com/-mW2it-oXjzU/UZVMuyLbWMI/AAAAAAAAEmQ/TYBepfadXRA/image_thumb%25255B27%25255D.png?imgmax=800&quot; width=&quot;434&quot; height=&quot;214&quot;&gt;&lt;/a&gt;&lt;br&gt;You can debug step by step and make sure your Tile template is created correctly with all the data and images we want.&lt;a href=&quot;http://lh4.ggpht.com/-l_rcflpZmOU/UZVMwf6xBnI/AAAAAAAAEmY/QpSP5Jf6UOE/s1600-h/image%25255B66%25255D.png&quot;&gt;&lt;br&gt;&lt;br&gt;&lt;img title=&quot;image&quot; style=&quot;float: none; margin-left: auto; display: block; margin-right: auto&quot; alt=&quot;image&quot; src=&quot;http://lh5.ggpht.com/-kUo_KR-WpyA/UZVMxow1glI/AAAAAAAAEmg/R48swfWbFdU/image_thumb%25255B28%25255D.png?imgmax=800&quot; width=&quot;434&quot; height=&quot;180&quot;&gt;&lt;/a&gt;&lt;br&gt;The first time the app runs, it will create the application’s Live Tile. Stop the debugger and check the emulator’s start screen. You should be see the tile, working and flipping between the front and back views.&lt;/p&gt;&lt;br /&gt;&lt;p align=&quot;center&quot;&gt;&lt;a href=&quot;http://lh6.ggpht.com/-OcbfVs7434E/UZVMzNWcF0I/AAAAAAAAEmo/1QVggMdSVu4/s1600-h/image%25255B68%25255D.png&quot;&gt;&lt;img title=&quot;image&quot; style=&quot;display: inline&quot; alt=&quot;image&quot; src=&quot;http://lh6.ggpht.com/-D9T5Mxm7JRw/UZVM0RSXUsI/AAAAAAAAEmw/LGyO9lCg4CE/image_thumb%25255B30%25255D.png?imgmax=800&quot; width=&quot;133&quot; height=&quot;240&quot;&gt;&lt;/a&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;a href=&quot;http://lh4.ggpht.com/-dQlO-Ou_hIA/UZVM1yEXvkI/AAAAAAAAEm4/6jCFFx7psmE/s1600-h/image%25255B67%25255D.png&quot;&gt;&lt;img title=&quot;image&quot; style=&quot;display: inline&quot; alt=&quot;image&quot; src=&quot;http://lh5.ggpht.com/-SFDddwc7hEM/UZVM26MIxlI/AAAAAAAAEnA/jM_Xi2IWsO8/image_thumb%25255B29%25255D.png?imgmax=800&quot; width=&quot;133&quot; height=&quot;240&quot;&gt;&lt;/a&gt;&lt;/p&gt;&lt;br /&gt;&lt;p&gt;you will notice that the tile is created, but no images are shown. This is because the app didn’t find the images in the location we specified. We are assuming that another mechanism will make sure to store the images in the right location before hand. For now, we just need to copy the assets to the app’s isolated storage location. &lt;br&gt;&lt;br&gt;You can do this by using the &lt;a href=&quot;http://wptools.codeplex.com/&quot;&gt;Windows Phone Power Tools&lt;/a&gt; utility. The tool allows you to connect to a connected device or emulator and copy or delete files from the installed application’s isolated storage.&lt;br&gt;&lt;br&gt;&lt;a href=&quot;http://lh6.ggpht.com/-Ee5g9UoYkgU/UZVM4BzELvI/AAAAAAAAEnI/Y-4alvtjPY0/s1600-h/image%25255B69%25255D.png&quot;&gt;&lt;img title=&quot;image&quot; style=&quot;float: none; margin-left: auto; display: block; margin-right: auto&quot; alt=&quot;image&quot; src=&quot;http://lh6.ggpht.com/-Ef4NW-9WtNs/UZVM5eonG6I/AAAAAAAAEnQ/wTNHWJ5eSF0/image_thumb%25255B31%25255D.png?imgmax=800&quot; width=&quot;434&quot; height=&quot;231&quot;&gt;&lt;/a&gt;&lt;br&gt;Click on the Isolated Storage section, and expand the Shared folder of your newly installed application.&lt;br&gt;&lt;br&gt;&lt;a href=&quot;http://lh3.ggpht.com/-PBIIdqthRok/UZVM6lmXKZI/AAAAAAAAEnY/1gva9yUDavo/s1600-h/image%25255B70%25255D.png&quot;&gt;&lt;img title=&quot;image&quot; style=&quot;float: none; margin-left: auto; display: block; margin-right: auto&quot; alt=&quot;image&quot; src=&quot;http://lh5.ggpht.com/-9GvOjdGsZ7k/UZVM7_PoUuI/AAAAAAAAEng/LQPBMRXYquo/image_thumb%25255B32%25255D.png?imgmax=800&quot; width=&quot;434&quot; height=&quot;231&quot;&gt;&lt;/a&gt;&lt;br&gt;Let’s add the files we created for the Tile.&lt;br&gt;&lt;br&gt;&lt;a href=&quot;http://lh5.ggpht.com/-J2Vnb5bda_c/UZVM9OhnWoI/AAAAAAAAEno/alVHdv_ht8s/s1600-h/image%25255B77%25255D.png&quot;&gt;&lt;img title=&quot;image&quot; style=&quot;float: none; margin-left: auto; display: block; margin-right: auto&quot; alt=&quot;image&quot; src=&quot;http://lh5.ggpht.com/-FCAmKO0JNpo/UZVM-abyluI/AAAAAAAAEnw/19XYu5tQOjY/image_thumb%25255B39%25255D.png?imgmax=800&quot; width=&quot;428&quot; height=&quot;261&quot;&gt;&lt;/a&gt;&lt;br&gt;&lt;a href=&quot;http://lh4.ggpht.com/-KU2W5sdxwTs/UZVM_s1QNLI/AAAAAAAAEn4/YxJDJF8K9aU/s1600-h/image%25255B72%25255D.png&quot;&gt;&lt;img title=&quot;image&quot; style=&quot;float: none; margin-left: auto; display: block; margin-right: auto&quot; alt=&quot;image&quot; src=&quot;http://lh3.ggpht.com/-fp7JV17-31A/UZVNAz_Ot5I/AAAAAAAAEoA/c2L8xfFtFPg/image_thumb%25255B34%25255D.png?imgmax=800&quot; width=&quot;434&quot; height=&quot;231&quot;&gt;&lt;/a&gt;&lt;br&gt;Now, go to the emulator, and remove the tile from the home screen. Then run it again from Visual Studio.&lt;/p&gt;&lt;br /&gt;&lt;p align=&quot;center&quot;&gt;&lt;a href=&quot;http://lh6.ggpht.com/-cTWdrfg6VRU/UZVNCfJ_dSI/AAAAAAAAEoI/3dXZ1HYGLYQ/s1600-h/image%25255B73%25255D.png&quot;&gt;&lt;img title=&quot;image&quot; style=&quot;display: inline&quot; alt=&quot;image&quot; src=&quot;http://lh6.ggpht.com/-dDo9tFt2Ue4/UZVND-3loDI/AAAAAAAAEoQ/PvW8RecqJa4/image_thumb%25255B35%25255D.png?imgmax=800&quot; width=&quot;133&quot; height=&quot;240&quot;&gt;&lt;/a&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;a href=&quot;http://lh5.ggpht.com/-OUxAVQCUB_0/UZVNFRjOUwI/AAAAAAAAEoY/FRLfvyDiOfM/s1600-h/image%25255B74%25255D.png&quot;&gt;&lt;img title=&quot;image&quot; style=&quot;display: inline&quot; alt=&quot;image&quot; src=&quot;http://lh3.ggpht.com/--90AzLMdESQ/UZVNGvAbQpI/AAAAAAAAEog/Z3PUf2L_ju0/image_thumb%25255B36%25255D.png?imgmax=800&quot; width=&quot;133&quot; height=&quot;240&quot;&gt;&lt;/a&gt;&lt;/p&gt;&lt;br /&gt;&lt;p&gt;Now, you should see the app’s tile created again, but this time using the modified images, which were loaded dynamically.&lt;/p&gt;&lt;br /&gt;&lt;p align=&quot;center&quot;&gt;&lt;a href=&quot;http://lh3.ggpht.com/-szmAHjJ9UoQ/UZVNIFtJoRI/AAAAAAAAEoo/R7ZiXlgR94I/s1600-h/image%25255B76%25255D.png&quot;&gt;&lt;img title=&quot;image&quot; style=&quot;display: inline&quot; alt=&quot;image&quot; src=&quot;http://lh6.ggpht.com/-FyiwFIfBtrg/UZVNJT5TNnI/AAAAAAAAEow/5GJlSNsP8jA/image_thumb%25255B38%25255D.png?imgmax=800&quot; width=&quot;133&quot; height=&quot;240&quot;&gt;&lt;/a&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;a href=&quot;http://lh4.ggpht.com/-ND2yLIp0EJ4/UZVNK5cDOGI/AAAAAAAAEo4/Zgg9qL9MhtE/s1600-h/image%25255B75%25255D.png&quot;&gt;&lt;img title=&quot;image&quot; style=&quot;display: inline&quot; alt=&quot;image&quot; src=&quot;http://lh6.ggpht.com/-6D6KQ5Y4oS8/UZVNMUnbnzI/AAAAAAAAEpA/cr9vM7GjiV4/image_thumb%25255B37%25255D.png?imgmax=800&quot; width=&quot;133&quot; height=&quot;240&quot;&gt;&lt;/a&gt;&lt;/p&gt;&lt;br /&gt;&lt;p&gt;There you go. You are now able to create the Tile with images that were loaded dynamically. I’ll be soon publishing more tips about how to update existing main Live Tiles and how to work with Isolated Storage. You can download the &lt;a href=&quot;https://github.com/anthonybaker/WP8DynamicLiveTileSample_01&quot;&gt;sample project from my Github repo&lt;/a&gt;.&lt;br&gt;&lt;br&gt;There’s already lots of people sharing information about it, so hopefully you will be able to find answers and different approaches. Check some of the following articles for more information:&lt;br&gt;&lt;br&gt;&lt;a href=&quot;http://msdn.microsoft.com/en-us/library/windowsphone/develop/jj662933(v=vs.105).aspx&quot;&gt;WP Dev Center Tiles Overview&lt;/a&gt;&lt;br&gt;&lt;a href=&quot;http://www.geekchamp.com/articles/live-tiles-in-windows-phone-8-part-1-tile-templates&quot;&gt;Live Tiles Templates Tutorial&lt;/a&gt;&lt;br&gt;&lt;a href=&quot;http://www.developer.nokia.com/Community/Wiki/Live_Tile_Templates_in_Windows_Phone_8&quot;&gt;Nokia Dev Live Tiles Guide&lt;/a&gt;&lt;/p&gt;  </content><link rel='replies' type='application/atom+xml' href='http://blog.anthonybaker.me/feeds/1713937309738354312/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://blog.anthonybaker.me/2013/05/wp8-tip-creating-live-tiles-with.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1811411750119502062/posts/default/1713937309738354312'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1811411750119502062/posts/default/1713937309738354312'/><link rel='alternate' type='text/html' href='http://blog.anthonybaker.me/2013/05/wp8-tip-creating-live-tiles-with.html' title='WP8 Tip: Creating Live Tiles with Dynamic Images'/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/00141462441551416511</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://lh6.ggpht.com/-lPBUfDG6Uuw/UZVMfLCsC5I/AAAAAAAAEkw/q3IRgmsWLCM/s72-c/image_thumb%25255B2%25255D.png?imgmax=800" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1811411750119502062.post-4079585780782360051</id><published>2013-05-13T21:38:00.001+01:00</published><updated>2013-05-13T21:38:04.763+01:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="C#"/><category scheme="http://www.blogger.com/atom/ns#" term="Mobile"/><category scheme="http://www.blogger.com/atom/ns#" term="Productivity"/><category scheme="http://www.blogger.com/atom/ns#" term="Silverlight"/><category scheme="http://www.blogger.com/atom/ns#" term="Tips"/><category scheme="http://www.blogger.com/atom/ns#" term="Touch"/><category scheme="http://www.blogger.com/atom/ns#" term="Windows Phone 8"/><category scheme="http://www.blogger.com/atom/ns#" term="XAML"/><title type='text'>WP8 Tip: Using Manipulation Events to Animate a Clipping Mask</title><content type='html'>&lt;p&gt;This is another post of the clipping mask series that I published last month (&lt;a href=&quot;http://blog.anthonybaker.me/2013/04/wp8-tip-how-to-create-clipping-mask.html&quot;&gt;here&lt;/a&gt; and &lt;a href=&quot;http://blog.anthonybaker.me/2013/04/wp8-tip-how-to-animate-clipping-mask.html&quot;&gt;here&lt;/a&gt;). In this post, I’ll show you one way you can control a clipping mask by using manipulation events triggered by another control. It will give the illusion that the clipping mask is being controlled by touch input.&lt;/p&gt; &lt;p align=&quot;center&quot;&gt;&lt;img alt=&quot;image&quot; src=&quot;http://lh3.ggpht.com/-LAZYl4KTvFY/UV3eLXqg90I/AAAAAAAADpY/sa3r2UAVzLY/image_thumb%25255B23%25255D.png?imgmax=800&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;img alt=&quot;image&quot; src=&quot;http://lh3.ggpht.com/-_iBicUx2gPE/UV3eMaqQGLI/AAAAAAAADpo/RNQQ9vzTgwk/image_thumb%25255B22%25255D.png?imgmax=800&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;img alt=&quot;image&quot; src=&quot;http://lh3.ggpht.com/-e6kEoTL40v0/UV3eNhZnwQI/AAAAAAAADp4/exEfrejRdEw/image_thumb%25255B21%25255D.png?imgmax=800&quot;&gt;&lt;/p&gt; &lt;p&gt;Working with animations on Windows Phone is a lot of fun, but you need to keep in mind that performance might suffer if you abuse it. That is why it is always good to put together basic samples to find the best way to achieve animations. &lt;/p&gt; &lt;p&gt;&lt;a href=&quot;http://lh4.ggpht.com/-wEnOGcMXjwU/UZFPAMXSK1I/AAAAAAAAEjQ/gizKIlSbMo0/s1600-h/image%25255B11%25255D.png&quot;&gt;&lt;img title=&quot;image&quot; style=&quot;float: none; margin-left: auto; display: block; margin-right: auto&quot; alt=&quot;image&quot; src=&quot;http://lh6.ggpht.com/-zqbxB_7YJGw/UZFPB-lNlSI/AAAAAAAAEjY/4P2xTDxOfZY/image_thumb%25255B5%25255D.png?imgmax=800&quot; width=&quot;434&quot; height=&quot;229&quot;&gt;&lt;/a&gt;&lt;/p&gt; &lt;p&gt;My advice is to break down complex animations and user interactions into smaller and simpler prototypes. Then you can work the very basics of each one of them. This is the way I encourage my team to work, and we have had amazing results on highly effective and productive rapid prototyping approaches.&lt;/p&gt; &lt;p&gt;&lt;a href=&quot;http://lh6.ggpht.com/-OAAJhNbk8DM/UZFPC2YdPzI/AAAAAAAAEjg/OJiaZCipYrw/s1600-h/image%25255B10%25255D.png&quot;&gt;&lt;img title=&quot;image&quot; style=&quot;float: none; margin-left: auto; display: block; margin-right: auto&quot; alt=&quot;image&quot; src=&quot;http://lh4.ggpht.com/-1eJb1yxxRAQ/UZFPD5R32wI/AAAAAAAAEjo/3z7_jq8RCyI/image_thumb%25255B4%25255D.png?imgmax=800&quot; width=&quot;212&quot; height=&quot;373&quot;&gt;&lt;/a&gt;&lt;/p&gt; &lt;p&gt;So, for this sample, I want to use the previous clipping mask we created, consisting of two rectangles. One of them (green), with a &lt;a href=&quot;http://msdn.microsoft.com/en-gb/library/system.windows.media.rectanglegeometry(v=vs.95).aspx&quot;&gt;RectangleGeometry&lt;/a&gt; as clipping mask, with a &lt;a href=&quot;http://msdn.microsoft.com/en-GB/library/system.windows.media.translatetransform(v=vs.95).aspx&quot;&gt;TranslateTransform&lt;/a&gt; component. Again, by translating the mask’s transform on the Y axis, it reveals the underlying rectangle (blue) while moving up or down. &lt;a href=&quot;http://blog.anthonybaker.me/2013/04/wp8-tip-how-to-animate-clipping-mask.html&quot;&gt;Check out my post&lt;/a&gt; for a full explanation on this technique.&lt;/p&gt; &lt;p&gt;This time, instead of using triggers to run a storyboard animating the mask’s transform, I want to use touch events to control the mask’s movement. One way of doing it is to overlay a &lt;a href=&quot;http://msdn.microsoft.com/en-us/library/system.windows.controls.scrollviewer(v=vs.95).aspx&quot;&gt;ScrollViewer&lt;/a&gt; control, which will give you scrolling (vertical and/or horizontal) behaviour out of the box. We will then use the &lt;a href=&quot;http://msdn.microsoft.com/en-us/library/system.windows.uielement.manipulationdelta(v=vs.95).aspx&quot;&gt;ManipulationDelta&lt;/a&gt; event of the scroller to get notified of the corresponding manipulation events (triggered by touches). &lt;/p&gt; &lt;p&gt;Here’s the first simple rectangle, in XAML code.&lt;br&gt;&lt;br&gt;&lt;pre style=&quot;overflow: auto; border-top: #cecece 1px solid; border-right: #cecece 1px solid; border-bottom: #cecece 1px solid; padding-bottom: 5px; padding-top: 5px; padding-left: 5px; min-height: 40px; border-left: #cecece 1px solid; padding-right: 5px; width: 450px; background-color: #fbfbfb&quot;&gt;&lt;pre style=&quot;font-size: 12px; font-family: consolas,&#39;Courier New&#39;,courier,monospace; margin: 0em; width: 100%; background-color: #eaeaea&quot;&gt;  1: &lt;span style=&quot;color: #0000ff&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #800000&quot;&gt;Rectangle&lt;/span&gt; &lt;span style=&quot;color: #ff0000&quot;&gt;HorizontalAlignment&lt;/span&gt;=&lt;span style=&quot;color: #0000ff&quot;&gt;&quot;Center&quot;&lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;&lt;pre style=&quot;font-size: 12px; font-family: consolas,&#39;Courier New&#39;,courier,monospace; margin: 0em; width: 100%; background-color: #ffffff&quot;&gt;  2:            &lt;span style=&quot;color: #ff0000&quot;&gt;VerticalAlignment&lt;/span&gt;=&lt;span style=&quot;color: #0000ff&quot;&gt;&quot;Center&quot;&lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;&lt;pre style=&quot;font-size: 12px; font-family: consolas,&#39;Courier New&#39;,courier,monospace; margin: 0em; width: 100%; background-color: #eaeaea&quot;&gt;  3:            &lt;span style=&quot;color: #ff0000&quot;&gt;Fill&lt;/span&gt;=&lt;span style=&quot;color: #0000ff&quot;&gt;&quot;Blue&quot;&lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;&lt;pre style=&quot;font-size: 12px; font-family: consolas,&#39;Courier New&#39;,courier,monospace; margin: 0em; width: 100%; background-color: #ffffff&quot;&gt;  4:            &lt;span style=&quot;color: #ff0000&quot;&gt;Height&lt;/span&gt;=&lt;span style=&quot;color: #0000ff&quot;&gt;&quot;300&quot;&lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;&lt;pre style=&quot;font-size: 12px; font-family: consolas,&#39;Courier New&#39;,courier,monospace; margin: 0em; width: 100%; background-color: #eaeaea&quot;&gt;  5:            &lt;span style=&quot;color: #ff0000&quot;&gt;Width&lt;/span&gt;=&lt;span style=&quot;color: #0000ff&quot;&gt;&quot;100&quot;&lt;/span&gt;&lt;span style=&quot;color: #0000ff&quot;&gt;/&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;/pre&gt;Here’s the second rectangle, with the clipping mask and the corresponding TranslateTransform, in XAML code.&lt;br&gt;&lt;br&gt;&lt;pre style=&quot;overflow: auto; border-top: #cecece 1px solid; border-right: #cecece 1px solid; border-bottom: #cecece 1px solid; padding-bottom: 5px; padding-top: 5px; padding-left: 5px; min-height: 40px; border-left: #cecece 1px solid; padding-right: 5px; width: 450px; background-color: #fbfbfb&quot;&gt;&lt;pre style=&quot;font-size: 12px; font-family: consolas,&#39;Courier New&#39;,courier,monospace; margin: 0em; width: 100%; background-color: #eaeaea&quot;&gt;  1:  &lt;span style=&quot;color: #0000ff&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #800000&quot;&gt;Rectangle&lt;/span&gt; &lt;span style=&quot;color: #ff0000&quot;&gt;HorizontalAlignment&lt;/span&gt;=&lt;span style=&quot;color: #0000ff&quot;&gt;&quot;Center&quot;&lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;&lt;pre style=&quot;font-size: 12px; font-family: consolas,&#39;Courier New&#39;,courier,monospace; margin: 0em; width: 100%; background-color: #ffffff&quot;&gt;  2:             &lt;span style=&quot;color: #ff0000&quot;&gt;VerticalAlignment&lt;/span&gt;=&lt;span style=&quot;color: #0000ff&quot;&gt;&quot;Center&quot;&lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;&lt;pre style=&quot;font-size: 12px; font-family: consolas,&#39;Courier New&#39;,courier,monospace; margin: 0em; width: 100%; background-color: #eaeaea&quot;&gt;  3:             &lt;span style=&quot;color: #ff0000&quot;&gt;Fill&lt;/span&gt;=&lt;span style=&quot;color: #0000ff&quot;&gt;&quot;Green&quot;&lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;&lt;pre style=&quot;font-size: 12px; font-family: consolas,&#39;Courier New&#39;,courier,monospace; margin: 0em; width: 100%; background-color: #ffffff&quot;&gt;  4:             &lt;span style=&quot;color: #ff0000&quot;&gt;Height&lt;/span&gt;=&lt;span style=&quot;color: #0000ff&quot;&gt;&quot;300&quot;&lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;&lt;pre style=&quot;font-size: 12px; font-family: consolas,&#39;Courier New&#39;,courier,monospace; margin: 0em; width: 100%; background-color: #eaeaea&quot;&gt;  5:             &lt;span style=&quot;color: #ff0000&quot;&gt;Width&lt;/span&gt;=&lt;span style=&quot;color: #0000ff&quot;&gt;&quot;100&quot;&lt;/span&gt;&lt;span style=&quot;color: #0000ff&quot;&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;&lt;pre style=&quot;font-size: 12px; font-family: consolas,&#39;Courier New&#39;,courier,monospace; margin: 0em; width: 100%; background-color: #ffffff&quot;&gt;  6:     &lt;span style=&quot;color: #0000ff&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #800000&quot;&gt;Rectangle.Clip&lt;/span&gt;&lt;span style=&quot;color: #0000ff&quot;&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;&lt;pre style=&quot;font-size: 12px; font-family: consolas,&#39;Courier New&#39;,courier,monospace; margin: 0em; width: 100%; background-color: #eaeaea&quot;&gt;  7:         &lt;span style=&quot;color: #0000ff&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #800000&quot;&gt;RectangleGeometry&lt;/span&gt; &lt;span style=&quot;color: #ff0000&quot;&gt;Rect&lt;/span&gt;=&lt;span style=&quot;color: #0000ff&quot;&gt;&quot;0, 0, 100, 300&quot;&lt;/span&gt;&lt;span style=&quot;color: #0000ff&quot;&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;&lt;pre style=&quot;font-size: 12px; font-family: consolas,&#39;Courier New&#39;,courier,monospace; margin: 0em; width: 100%; background-color: #ffffff&quot;&gt;  8:             &lt;span style=&quot;color: #0000ff&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #800000&quot;&gt;RectangleGeometry.Transform&lt;/span&gt;&lt;span style=&quot;color: #0000ff&quot;&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;&lt;pre style=&quot;font-size: 12px; font-family: consolas,&#39;Courier New&#39;,courier,monospace; margin: 0em; width: 100%; background-color: #eaeaea&quot;&gt;  9:                 &lt;span style=&quot;color: #0000ff&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #800000&quot;&gt;TranslateTransform&lt;/span&gt; &lt;span style=&quot;color: #ff0000&quot;&gt;x&lt;/span&gt;:&lt;span style=&quot;color: #ff0000&quot;&gt;Name&lt;/span&gt;=&lt;span style=&quot;color: #0000ff&quot;&gt;&quot;MaskTransform&quot;&lt;/span&gt; &lt;br /&gt;&lt;/pre&gt;&lt;pre style=&quot;font-size: 12px; font-family: consolas,&#39;Courier New&#39;,courier,monospace; margin: 0em; width: 100%; background-color: #ffffff&quot;&gt; 10:                                     &lt;span style=&quot;color: #ff0000&quot;&gt;Y&lt;/span&gt;=&lt;span style=&quot;color: #0000ff&quot;&gt;&quot;0&quot;&lt;/span&gt; &lt;span style=&quot;color: #0000ff&quot;&gt;/&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;&lt;pre style=&quot;font-size: 12px; font-family: consolas,&#39;Courier New&#39;,courier,monospace; margin: 0em; width: 100%; background-color: #eaeaea&quot;&gt; 11:             &lt;span style=&quot;color: #0000ff&quot;&gt;&amp;lt;/&lt;/span&gt;&lt;span style=&quot;color: #800000&quot;&gt;RectangleGeometry.Transform&lt;/span&gt;&lt;span style=&quot;color: #0000ff&quot;&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;&lt;pre style=&quot;font-size: 12px; font-family: consolas,&#39;Courier New&#39;,courier,monospace; margin: 0em; width: 100%; background-color: #ffffff&quot;&gt; 12:         &lt;span style=&quot;color: #0000ff&quot;&gt;&amp;lt;/&lt;/span&gt;&lt;span style=&quot;color: #800000&quot;&gt;RectangleGeometry&lt;/span&gt;&lt;span style=&quot;color: #0000ff&quot;&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;&lt;pre style=&quot;font-size: 12px; font-family: consolas,&#39;Courier New&#39;,courier,monospace; margin: 0em; width: 100%; background-color: #eaeaea&quot;&gt; 13:     &lt;span style=&quot;color: #0000ff&quot;&gt;&amp;lt;/&lt;/span&gt;&lt;span style=&quot;color: #800000&quot;&gt;Rectangle.Clip&lt;/span&gt;&lt;span style=&quot;color: #0000ff&quot;&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;&lt;pre style=&quot;font-size: 12px; font-family: consolas,&#39;Courier New&#39;,courier,monospace; margin: 0em; width: 100%; background-color: #ffffff&quot;&gt; 14: &lt;span style=&quot;color: #0000ff&quot;&gt;&amp;lt;/&lt;/span&gt;&lt;span style=&quot;color: #800000&quot;&gt;Rectangle&lt;/span&gt;&lt;span style=&quot;color: #0000ff&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;/pre&gt;Finally, here’s our new ScrollViewer element. Notice the event handler for the ManipulationDelta event, again defined in XAML code.&lt;br&gt;&lt;br&gt;&lt;pre style=&quot;overflow: auto; border-top: #cecece 1px solid; border-right: #cecece 1px solid; border-bottom: #cecece 1px solid; padding-bottom: 5px; padding-top: 5px; padding-left: 5px; min-height: 40px; border-left: #cecece 1px solid; padding-right: 5px; width: 450px; background-color: #fbfbfb&quot;&gt;&lt;pre style=&quot;font-size: 12px; font-family: consolas,&#39;Courier New&#39;,courier,monospace; margin: 0em; width: 100%; background-color: #eaeaea&quot;&gt;  1: &lt;span style=&quot;color: #0000ff&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #800000&quot;&gt;ScrollViewer&lt;/span&gt; &lt;span style=&quot;color: #ff0000&quot;&gt;x&lt;/span&gt;:&lt;span style=&quot;color: #ff0000&quot;&gt;Name&lt;/span&gt;=&lt;span style=&quot;color: #0000ff&quot;&gt;&quot;ScrollViewer&quot;&lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;&lt;pre style=&quot;font-size: 12px; font-family: consolas,&#39;Courier New&#39;,courier,monospace; margin: 0em; width: 100%; background-color: #ffffff&quot;&gt;  2:               &lt;span style=&quot;color: #ff0000&quot;&gt;ManipulationDelta&lt;/span&gt;=&lt;span style=&quot;color: #0000ff&quot;&gt;&quot;OnManipulationDelta&quot;&lt;/span&gt; &lt;span style=&quot;color: #0000ff&quot;&gt;/&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;/pre&gt;In this case, we will need to get the &lt;a href=&quot;http://msdn.microsoft.com/en-GB/library/system.windows.input.manipulationdeltaeventargs(v=vs.95).aspx&quot;&gt;ManipulationDeltaEventArgs&lt;/a&gt; data and retrieve the Y axis translation from it. We will do this in code behind. Once we retrieve the translation, we can add it to our mask’s Y axis Translation. &lt;br&gt;&lt;br&gt;&lt;pre style=&quot;overflow: auto; border-top: #cecece 1px solid; border-right: #cecece 1px solid; border-bottom: #cecece 1px solid; padding-bottom: 5px; padding-top: 5px; padding-left: 5px; min-height: 40px; border-left: #cecece 1px solid; padding-right: 5px; width: 450px; background-color: #fbfbfb&quot;&gt;&lt;pre style=&quot;font-size: 12px; font-family: consolas,&#39;Courier New&#39;,courier,monospace; margin: 0em; width: 100%; background-color: #eaeaea&quot;&gt;  1: &lt;span style=&quot;color: #0000ff&quot;&gt;private&lt;/span&gt; &lt;span style=&quot;color: #0000ff&quot;&gt;void&lt;/span&gt; OnManipulationDelta(&lt;span style=&quot;color: #0000ff&quot;&gt;object&lt;/span&gt; sender, System.Windows.Input.ManipulationDeltaEventArgs e)&lt;br /&gt;&lt;/pre&gt;&lt;pre style=&quot;font-size: 12px; font-family: consolas,&#39;Courier New&#39;,courier,monospace; margin: 0em; width: 100%; background-color: #ffffff&quot;&gt;  2: {&lt;br /&gt;&lt;/pre&gt;&lt;pre style=&quot;font-size: 12px; font-family: consolas,&#39;Courier New&#39;,courier,monospace; margin: 0em; width: 100%; background-color: #eaeaea&quot;&gt;  3:     var manipulation = e.DeltaManipulation;&lt;br /&gt;&lt;/pre&gt;&lt;pre style=&quot;font-size: 12px; font-family: consolas,&#39;Courier New&#39;,courier,monospace; margin: 0em; width: 100%; background-color: #ffffff&quot;&gt;  4:     MaskTransform.Y += manipulation.Translation.Y;&lt;br /&gt;&lt;/pre&gt;&lt;pre style=&quot;font-size: 12px; font-family: consolas,&#39;Courier New&#39;,courier,monospace; margin: 0em; width: 100%; background-color: #eaeaea&quot;&gt;  5: }&lt;/pre&gt;&lt;/pre&gt;&lt;br&gt;&lt;br&gt;In the sample, I also included a text field at the bottom of the screen to see the different manipulation variables and keep track of the mask’s translation. I’m displaying them in code behind just after modifying the mask translation.&lt;/p&gt;&lt;br /&gt;&lt;p align=&quot;center&quot;&gt;&lt;a href=&quot;http://lh3.ggpht.com/-ir0hQ3mjpZ8/UZFPExOi3DI/AAAAAAAAEjw/OCWKum1CgF4/s1600-h/image%25255B12%25255D.png&quot;&gt;&lt;img title=&quot;image&quot; style=&quot;display: inline&quot; alt=&quot;image&quot; src=&quot;http://lh4.ggpht.com/-LlRk-ZMQSJo/UZFPGN6OQKI/AAAAAAAAEj4/2EUf8vV71rc/image_thumb%25255B6%25255D.png?imgmax=800&quot; width=&quot;133&quot; height=&quot;240&quot;&gt;&lt;/a&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;a href=&quot;http://lh5.ggpht.com/-gakt3RyTAxI/UZFPHEC7P5I/AAAAAAAAEkA/QynfGC4RRbs/s1600-h/image%25255B20%25255D.png&quot;&gt;&lt;img title=&quot;image&quot; style=&quot;display: inline&quot; alt=&quot;image&quot; src=&quot;http://lh3.ggpht.com/-6mYVrujv6LE/UZFPIDNZCGI/AAAAAAAAEkI/z4sFKnQlD3k/image_thumb%25255B10%25255D.png?imgmax=800&quot; width=&quot;133&quot; height=&quot;240&quot;&gt;&lt;/a&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;a href=&quot;http://lh5.ggpht.com/-AEECfJYeFVc/UZFPJRhW8vI/AAAAAAAAEkQ/KI2YVgQOS_M/s1600-h/image%25255B19%25255D.png&quot;&gt;&lt;img title=&quot;image&quot; style=&quot;display: inline&quot; alt=&quot;image&quot; src=&quot;http://lh3.ggpht.com/-6a-CxAHdqxI/UZFPKcN8ZGI/AAAAAAAAEkU/Ib7o-NLan9k/image_thumb%25255B9%25255D.png?imgmax=800&quot; width=&quot;133&quot; height=&quot;240&quot;&gt;&lt;/a&gt;&lt;/p&gt;&lt;br /&gt;&lt;p&gt;There you go, with just a few lines of code we were able to modify the non-interactive animated clipping mask into an interactive version, where you can control the animation with touch. This might seem too basic, but this is the foundation to achieve more complex animations.&lt;br&gt;&lt;br&gt;I hope you like the sample and make use of it. You can download the sample code from my Github repo &lt;a href=&quot;https://github.com/anthonybaker/WP8ClippingMaskSample03&quot;&gt;here&lt;/a&gt;. &lt;/p&gt;  </content><link rel='replies' type='application/atom+xml' href='http://blog.anthonybaker.me/feeds/4079585780782360051/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://blog.anthonybaker.me/2013/05/wp8-tip-using-manipulation-events-to.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1811411750119502062/posts/default/4079585780782360051'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1811411750119502062/posts/default/4079585780782360051'/><link rel='alternate' type='text/html' href='http://blog.anthonybaker.me/2013/05/wp8-tip-using-manipulation-events-to.html' title='WP8 Tip: Using Manipulation Events to Animate a Clipping Mask'/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/00141462441551416511</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://lh3.ggpht.com/-LAZYl4KTvFY/UV3eLXqg90I/AAAAAAAADpY/sa3r2UAVzLY/s72-c/image_thumb%25255B23%25255D.png?imgmax=800" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1811411750119502062.post-1322063843872768701</id><published>2013-05-06T15:02:00.001+01:00</published><updated>2013-05-06T15:02:05.455+01:00</updated><category scheme="http://www.blogger.com/atom/ns#" term=".NET"/><category scheme="http://www.blogger.com/atom/ns#" term="Agile"/><category scheme="http://www.blogger.com/atom/ns#" term="ASP.NET"/><category scheme="http://www.blogger.com/atom/ns#" term="Continuous Deployment"/><category scheme="http://www.blogger.com/atom/ns#" term="Continuous Integration"/><category scheme="http://www.blogger.com/atom/ns#" term="MVC"/><category scheme="http://www.blogger.com/atom/ns#" term="Source Control"/><category scheme="http://www.blogger.com/atom/ns#" term="TeamCity"/><category scheme="http://www.blogger.com/atom/ns#" term="Tips"/><category scheme="http://www.blogger.com/atom/ns#" term="Visual Studio"/><category scheme="http://www.blogger.com/atom/ns#" term="Web Development"/><title type='text'>How to Automate App Deployment in TeamCity</title><content type='html'>&lt;p&gt;This is a multi-part, step-by-step guide, on how to automate application deployment with TeamCity CI Server. This series is part of several other articles I have &lt;a href=&quot;http://blog.anthonybaker.me/search/label/Continuous%20Integration?max-results=20&quot;&gt;published about continuous integration&lt;/a&gt;. &lt;p&gt;In the related &lt;a href=&quot;http://blog.anthonybaker.me/search/label/Continuous%20Integration&quot;&gt;previous posts&lt;/a&gt;, I showed how to configure a build to compile a .NET solution and the run the project’s test suite. The part that we are missing is to have our CI server to automatically deploy our project so we can establish a continuous deployment mechanism too.  &lt;p&gt;Deployment mechanisms will often depend on the platform your are developing and the type of application you need to distribute. For example, in iOS development you will most often use a third party distribution service to distribute your mobile app. On Windows Phone, you will need to go through the Windows Phone Marketplace. For desktop applications, you will probably want to generate installers and expose a way to securely download and install them. For web applications, you are most likely required to deploy the web app files on your web server.  &lt;p&gt;Let’s continue with the initial web application we created in the &lt;a href=&quot;http://blog.anthonybaker.me/search/label/Continuous%20Integration&quot;&gt;previous articles&lt;/a&gt;. We will configure &lt;a href=&quot;http://www.jetbrains.com/teamcity/&quot;&gt;TeamCity&lt;/a&gt; to package and deploy our ASP.NET MVC application to our IIS web server.&lt;/p&gt; &lt;p&gt;Here is the breakdown of this series:&lt;/p&gt; &lt;ul&gt; &lt;li&gt;&lt;a href=&quot;http://blog.anthonybaker.me/2013/05/how-to-automate-app-deployment-in.html&quot;&gt;Part 1: Setting Up the Deploy Step in TeamCity&lt;/a&gt;&lt;/li&gt; &lt;li&gt;&lt;a href=&quot;http://blog.anthonybaker.me/2013/05/how-to-automate-app-deployment-in_6.html&quot;&gt;Part 2: Configuring the Web Application in IIS7&lt;/a&gt;&amp;nbsp;&lt;/li&gt; &lt;li&gt;&lt;a href=&quot;http://blog.anthonybaker.me/2013/05/how-to-automate-app-deployment-in_1352.html&quot;&gt;Part 3: Completing the Web Deploy Configuration&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt; &lt;p&gt;Make sure to check out my posts on troubleshooting &lt;a href=&quot;http://blog.anthonybaker.me/2013/04/troubleshooting-msbuild-error-msb4019.html&quot;&gt;MSBuild&lt;/a&gt; and &lt;a href=&quot;http://blog.anthonybaker.me/2013/05/running-mstest-without-visual-studio.html&quot;&gt;MSTest&lt;/a&gt;. The easiest thing to do to avoid issues, is to have Visual Studio installed on your server. However, must of us prefer to have &lt;em&gt;vanilla&lt;/em&gt; server setups and certainly having a full Visual Studio installation on your server is overkill (although you might be required to do so because of licensing agreements). &lt;p&gt;I hope this series of articles help you and save you time. As usual, feel free to leave your comments and share your experience. Nothing better than a good tech conversation!   </content><link rel='replies' type='application/atom+xml' href='http://blog.anthonybaker.me/feeds/1322063843872768701/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://blog.anthonybaker.me/2013/05/how-to-automate-app-deployment-in_1474.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1811411750119502062/posts/default/1322063843872768701'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1811411750119502062/posts/default/1322063843872768701'/><link rel='alternate' type='text/html' href='http://blog.anthonybaker.me/2013/05/how-to-automate-app-deployment-in_1474.html' title='How to Automate App Deployment in TeamCity'/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/00141462441551416511</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1811411750119502062.post-3762861140233760675</id><published>2013-05-06T14:54:00.001+01:00</published><updated>2013-05-06T15:08:23.574+01:00</updated><category scheme="http://www.blogger.com/atom/ns#" term=".NET"/><category scheme="http://www.blogger.com/atom/ns#" term="Agile"/><category scheme="http://www.blogger.com/atom/ns#" term="ASP.NET"/><category scheme="http://www.blogger.com/atom/ns#" term="Continuous Deployment"/><category scheme="http://www.blogger.com/atom/ns#" term="Continuous Integration"/><category scheme="http://www.blogger.com/atom/ns#" term="MVC"/><category scheme="http://www.blogger.com/atom/ns#" term="Source Control"/><category scheme="http://www.blogger.com/atom/ns#" term="TeamCity"/><category scheme="http://www.blogger.com/atom/ns#" term="Tips"/><category scheme="http://www.blogger.com/atom/ns#" term="Visual Studio"/><category scheme="http://www.blogger.com/atom/ns#" term="Web Development"/><title type='text'>How to Automate App Deployment in TeamCity (Part 3)</title><content type='html'>&lt;p&gt;Please notice that this is a &lt;a href=&quot;http://blog.anthonybaker.me/2013/05/how-to-automate-app-deployment-in_1474.html&quot;&gt;multi-part, step-by-step guide&lt;/a&gt;, on how to automate application deployment in &lt;a href=&quot;http://www.jetbrains.com/teamcity/&quot;&gt;TeamCity CI Server&lt;/a&gt;. Links to &lt;a href=&quot;http://blog.anthonybaker.me/2013/05/how-to-automate-app-deployment-in.html&quot;&gt;Part 1 here&lt;/a&gt; and &lt;a href=&quot;http://blog.anthonybaker.me/2013/05/how-to-automate-app-deployment-in_6.html&quot;&gt;Part 2 here&lt;/a&gt;.&amp;nbsp; &lt;p&gt;&lt;strong&gt;Part 3: Completing the Web Deploy Configuration&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;We now have our TeamCity deployment step configured in our CI Build project, and our website configuration created and working on IIS. However, the current files being deployed are not the right ones. We need to modify our existing project’s build script to add the required steps, which include web packaging, clean up, and deployment. &lt;/p&gt; &lt;p&gt;Here’s the steps you need to add to the script:&lt;/p&gt;&lt;pre style=&quot;overflow: auto; border-top: #cecece 1px solid; border-right: #cecece 1px solid; border-bottom: #cecece 1px solid; padding-bottom: 5px; padding-top: 5px; padding-left: 5px; min-height: 40px; border-left: #cecece 1px solid; padding-right: 5px; width: 450px; background-color: #fbfbfb&quot;&gt;&lt;pre style=&quot;font-size: 12px; font-family: consolas,&#39;Courier New&#39;,courier,monospace; margin: 0em; width: 100%; background-color: #eaeaea&quot;&gt;  1: &lt;span style=&quot;color: #008000&quot;&gt;&amp;lt;!-- Packages and copies the web application files required by a web publishing step --&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;&lt;pre style=&quot;font-size: 12px; font-family: consolas,&#39;Courier New&#39;,courier,monospace; margin: 0em; width: 100%; background-color: #ffffff&quot;&gt;  2: &lt;span style=&quot;color: #0000ff&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #800000&quot;&gt;Target&lt;/span&gt; &lt;span style=&quot;color: #ff0000&quot;&gt;Name&lt;/span&gt;=&lt;span style=&quot;color: #0000ff&quot;&gt;&quot;DeployWeb&quot;&lt;/span&gt; &lt;span style=&quot;color: #ff0000&quot;&gt;DependsOnTargets&lt;/span&gt;=&lt;span style=&quot;color: #0000ff&quot;&gt;&quot;DeleteBinFiles;Package;CopyWeb;CopyConfigs&quot;&lt;/span&gt; &lt;span style=&quot;color: #0000ff&quot;&gt;/&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;&lt;pre style=&quot;font-size: 12px; font-family: consolas,&#39;Courier New&#39;,courier,monospace; margin: 0em; width: 100%; background-color: #eaeaea&quot;&gt;  3:   &lt;br /&gt;&lt;/pre&gt;&lt;pre style=&quot;font-size: 12px; font-family: consolas,&#39;Courier New&#39;,courier,monospace; margin: 0em; width: 100%; background-color: #ffffff&quot;&gt;  4: &lt;span style=&quot;color: #008000&quot;&gt;&amp;lt;!-- Deletes all previous files from directory --&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;&lt;pre style=&quot;font-size: 12px; font-family: consolas,&#39;Courier New&#39;,courier,monospace; margin: 0em; width: 100%; background-color: #eaeaea&quot;&gt;  5: &lt;span style=&quot;color: #0000ff&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #800000&quot;&gt;Target&lt;/span&gt; &lt;span style=&quot;color: #ff0000&quot;&gt;Name&lt;/span&gt;=&lt;span style=&quot;color: #0000ff&quot;&gt;&quot;DeleteBinFiles&quot;&lt;/span&gt;&lt;span style=&quot;color: #0000ff&quot;&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;&lt;pre style=&quot;font-size: 12px; font-family: consolas,&#39;Courier New&#39;,courier,monospace; margin: 0em; width: 100%; background-color: #ffffff&quot;&gt;  6:     &lt;span style=&quot;color: #0000ff&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #800000&quot;&gt;Message&lt;/span&gt; &lt;span style=&quot;color: #ff0000&quot;&gt;Text&lt;/span&gt;=&lt;span style=&quot;color: #0000ff&quot;&gt;&quot;Deleting bin files from $(DestinationPath)&quot;&lt;/span&gt; &lt;span style=&quot;color: #0000ff&quot;&gt;/&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;&lt;pre style=&quot;font-size: 12px; font-family: consolas,&#39;Courier New&#39;,courier,monospace; margin: 0em; width: 100%; background-color: #eaeaea&quot;&gt;  7:     &lt;span style=&quot;color: #0000ff&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #800000&quot;&gt;ItemGroup&lt;/span&gt;&lt;span style=&quot;color: #0000ff&quot;&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;&lt;pre style=&quot;font-size: 12px; font-family: consolas,&#39;Courier New&#39;,courier,monospace; margin: 0em; width: 100%; background-color: #ffffff&quot;&gt;  8:   &lt;span style=&quot;color: #0000ff&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #800000&quot;&gt;FilesToDelete&lt;/span&gt; &lt;span style=&quot;color: #ff0000&quot;&gt;Include&lt;/span&gt;=&lt;span style=&quot;color: #0000ff&quot;&gt;&quot;$(DestinationPath)\**\*.*&quot;&lt;/span&gt;&lt;span style=&quot;color: #0000ff&quot;&gt;/&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;&lt;pre style=&quot;font-size: 12px; font-family: consolas,&#39;Courier New&#39;,courier,monospace; margin: 0em; width: 100%; background-color: #eaeaea&quot;&gt;  9:     &lt;span style=&quot;color: #0000ff&quot;&gt;&amp;lt;/&lt;/span&gt;&lt;span style=&quot;color: #800000&quot;&gt;ItemGroup&lt;/span&gt;&lt;span style=&quot;color: #0000ff&quot;&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;&lt;pre style=&quot;font-size: 12px; font-family: consolas,&#39;Courier New&#39;,courier,monospace; margin: 0em; width: 100%; background-color: #ffffff&quot;&gt; 10:     &lt;span style=&quot;color: #0000ff&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #800000&quot;&gt;Delete&lt;/span&gt; &lt;span style=&quot;color: #ff0000&quot;&gt;Files&lt;/span&gt;=&lt;span style=&quot;color: #0000ff&quot;&gt;&quot;@(FilesToDelete)&quot;&lt;/span&gt; &lt;span style=&quot;color: #0000ff&quot;&gt;/&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;&lt;pre style=&quot;font-size: 12px; font-family: consolas,&#39;Courier New&#39;,courier,monospace; margin: 0em; width: 100%; background-color: #eaeaea&quot;&gt; 11: &lt;span style=&quot;color: #0000ff&quot;&gt;&amp;lt;/&lt;/span&gt;&lt;span style=&quot;color: #800000&quot;&gt;Target&lt;/span&gt;&lt;span style=&quot;color: #0000ff&quot;&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;&lt;pre style=&quot;font-size: 12px; font-family: consolas,&#39;Courier New&#39;,courier,monospace; margin: 0em; width: 100%; background-color: #ffffff&quot;&gt; 12:   &lt;br /&gt;&lt;/pre&gt;&lt;pre style=&quot;font-size: 12px; font-family: consolas,&#39;Courier New&#39;,courier,monospace; margin: 0em; width: 100%; background-color: #eaeaea&quot;&gt; 13: &lt;span style=&quot;color: #0000ff&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #800000&quot;&gt;Target&lt;/span&gt; &lt;span style=&quot;color: #ff0000&quot;&gt;Name&lt;/span&gt;=&lt;span style=&quot;color: #0000ff&quot;&gt;&quot;Package&quot;&lt;/span&gt;&lt;span style=&quot;color: #0000ff&quot;&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;&lt;pre style=&quot;font-size: 12px; font-family: consolas,&#39;Courier New&#39;,courier,monospace; margin: 0em; width: 100%; background-color: #ffffff&quot;&gt; 14:     &lt;span style=&quot;color: #0000ff&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #800000&quot;&gt;Message&lt;/span&gt; &lt;span style=&quot;color: #ff0000&quot;&gt;Text&lt;/span&gt;=&lt;span style=&quot;color: #0000ff&quot;&gt;&quot;Packaging project...&quot;&lt;/span&gt; &lt;span style=&quot;color: #0000ff&quot;&gt;/&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;&lt;pre style=&quot;font-size: 12px; font-family: consolas,&#39;Courier New&#39;,courier,monospace; margin: 0em; width: 100%; background-color: #eaeaea&quot;&gt; 15:     &lt;span style=&quot;color: #0000ff&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #800000&quot;&gt;MSBuild&lt;/span&gt; &lt;span style=&quot;color: #ff0000&quot;&gt;Projects&lt;/span&gt;=&lt;span style=&quot;color: #0000ff&quot;&gt;&quot;$(ProjectFile)&quot;&lt;/span&gt; &lt;span style=&quot;color: #ff0000&quot;&gt;ContinueOnError&lt;/span&gt;=&lt;span style=&quot;color: #0000ff&quot;&gt;&quot;false&quot;&lt;/span&gt; &lt;span style=&quot;color: #ff0000&quot;&gt;Targets&lt;/span&gt;=&lt;span style=&quot;color: #0000ff&quot;&gt;&quot;Package&quot;&lt;/span&gt; &lt;span style=&quot;color: #ff0000&quot;&gt;Properties&lt;/span&gt;=&lt;span style=&quot;color: #0000ff&quot;&gt;&quot;Configuration=$(Configuration)&quot;&lt;/span&gt; &lt;span style=&quot;color: #0000ff&quot;&gt;/&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;&lt;pre style=&quot;font-size: 12px; font-family: consolas,&#39;Courier New&#39;,courier,monospace; margin: 0em; width: 100%; background-color: #ffffff&quot;&gt; 16: &lt;span style=&quot;color: #0000ff&quot;&gt;&amp;lt;/&lt;/span&gt;&lt;span style=&quot;color: #800000&quot;&gt;Target&lt;/span&gt;&lt;span style=&quot;color: #0000ff&quot;&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;&lt;pre style=&quot;font-size: 12px; font-family: consolas,&#39;Courier New&#39;,courier,monospace; margin: 0em; width: 100%; background-color: #eaeaea&quot;&gt; 17:  &lt;br /&gt;&lt;/pre&gt;&lt;pre style=&quot;font-size: 12px; font-family: consolas,&#39;Courier New&#39;,courier,monospace; margin: 0em; width: 100%; background-color: #ffffff&quot;&gt; 18: &lt;span style=&quot;color: #0000ff&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #800000&quot;&gt;Target&lt;/span&gt; &lt;span style=&quot;color: #ff0000&quot;&gt;Name&lt;/span&gt;=&lt;span style=&quot;color: #0000ff&quot;&gt;&quot;CopyWeb&quot;&lt;/span&gt;&lt;span style=&quot;color: #0000ff&quot;&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;&lt;pre style=&quot;font-size: 12px; font-family: consolas,&#39;Courier New&#39;,courier,monospace; margin: 0em; width: 100%; background-color: #eaeaea&quot;&gt; 19:     &lt;span style=&quot;color: #0000ff&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #800000&quot;&gt;Message&lt;/span&gt; &lt;span style=&quot;color: #ff0000&quot;&gt;Text&lt;/span&gt;=&lt;span style=&quot;color: #0000ff&quot;&gt;&quot;Copying project files from&quot;&lt;/span&gt; &lt;span style=&quot;color: #0000ff&quot;&gt;/&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;&lt;pre style=&quot;font-size: 12px; font-family: consolas,&#39;Courier New&#39;,courier,monospace; margin: 0em; width: 100%; background-color: #ffffff&quot;&gt; 20:     &lt;span style=&quot;color: #0000ff&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #800000&quot;&gt;ItemGroup&lt;/span&gt;&lt;span style=&quot;color: #0000ff&quot;&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;&lt;pre style=&quot;font-size: 12px; font-family: consolas,&#39;Courier New&#39;,courier,monospace; margin: 0em; width: 100%; background-color: #eaeaea&quot;&gt; 21:   &lt;span style=&quot;color: #0000ff&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #800000&quot;&gt;PackagedFiles&lt;/span&gt; &lt;span style=&quot;color: #ff0000&quot;&gt;Include&lt;/span&gt;=&lt;span style=&quot;color: #0000ff&quot;&gt;&quot;$(PackagedProjectDir)\**\*.*&quot;&lt;/span&gt;&lt;span style=&quot;color: #0000ff&quot;&gt;/&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;&lt;pre style=&quot;font-size: 12px; font-family: consolas,&#39;Courier New&#39;,courier,monospace; margin: 0em; width: 100%; background-color: #ffffff&quot;&gt; 22:     &lt;span style=&quot;color: #0000ff&quot;&gt;&amp;lt;/&lt;/span&gt;&lt;span style=&quot;color: #800000&quot;&gt;ItemGroup&lt;/span&gt;&lt;span style=&quot;color: #0000ff&quot;&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;&lt;pre style=&quot;font-size: 12px; font-family: consolas,&#39;Courier New&#39;,courier,monospace; margin: 0em; width: 100%; background-color: #eaeaea&quot;&gt; 23:     &lt;span style=&quot;color: #0000ff&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #800000&quot;&gt;Copy&lt;/span&gt; &lt;span style=&quot;color: #ff0000&quot;&gt;SourceFiles&lt;/span&gt;=&lt;span style=&quot;color: #0000ff&quot;&gt;&quot;@(PackagedFiles)&quot;&lt;/span&gt; &lt;span style=&quot;color: #ff0000&quot;&gt;DestinationFolder&lt;/span&gt;=&lt;span style=&quot;color: #0000ff&quot;&gt;&quot;$(DestinationPath)\%(RecursiveDir)&quot;&lt;/span&gt;&lt;span style=&quot;color: #0000ff&quot;&gt;/&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;&lt;pre style=&quot;font-size: 12px; font-family: consolas,&#39;Courier New&#39;,courier,monospace; margin: 0em; width: 100%; background-color: #ffffff&quot;&gt; 24: &lt;span style=&quot;color: #0000ff&quot;&gt;&amp;lt;/&lt;/span&gt;&lt;span style=&quot;color: #800000&quot;&gt;Target&lt;/span&gt;&lt;span style=&quot;color: #0000ff&quot;&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;&lt;pre style=&quot;font-size: 12px; font-family: consolas,&#39;Courier New&#39;,courier,monospace; margin: 0em; width: 100%; background-color: #eaeaea&quot;&gt; 25:   &lt;br /&gt;&lt;/pre&gt;&lt;pre style=&quot;font-size: 12px; font-family: consolas,&#39;Courier New&#39;,courier,monospace; margin: 0em; width: 100%; background-color: #ffffff&quot;&gt; 26: &lt;span style=&quot;color: #0000ff&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #800000&quot;&gt;Target&lt;/span&gt; &lt;span style=&quot;color: #ff0000&quot;&gt;Name&lt;/span&gt;=&lt;span style=&quot;color: #0000ff&quot;&gt;&quot;CopyConfigs&quot;&lt;/span&gt;&lt;span style=&quot;color: #0000ff&quot;&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;&lt;pre style=&quot;font-size: 12px; font-family: consolas,&#39;Courier New&#39;,courier,monospace; margin: 0em; width: 100%; background-color: #eaeaea&quot;&gt; 27:     &lt;span style=&quot;color: #0000ff&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #800000&quot;&gt;Message&lt;/span&gt; &lt;span style=&quot;color: #ff0000&quot;&gt;Text&lt;/span&gt;=&lt;span style=&quot;color: #0000ff&quot;&gt;&quot;Copying configuration files from $(PackagedProjectWebConfigDir) to $(DestinationPath)...&quot;&lt;/span&gt; &lt;span style=&quot;color: #0000ff&quot;&gt;/&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;&lt;pre style=&quot;font-size: 12px; font-family: consolas,&#39;Courier New&#39;,courier,monospace; margin: 0em; width: 100%; background-color: #ffffff&quot;&gt; 28:     &lt;span style=&quot;color: #0000ff&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #800000&quot;&gt;ItemGroup&lt;/span&gt;&lt;span style=&quot;color: #0000ff&quot;&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;&lt;pre style=&quot;font-size: 12px; font-family: consolas,&#39;Courier New&#39;,courier,monospace; margin: 0em; width: 100%; background-color: #eaeaea&quot;&gt; 29:   &lt;span style=&quot;color: #0000ff&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #800000&quot;&gt;ConfigFiles&lt;/span&gt; &lt;span style=&quot;color: #ff0000&quot;&gt;Include&lt;/span&gt;=&lt;span style=&quot;color: #0000ff&quot;&gt;&quot;$(PackagedProjectWebConfigDir)\**\*.*&quot;&lt;/span&gt;&lt;span style=&quot;color: #0000ff&quot;&gt;/&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;&lt;pre style=&quot;font-size: 12px; font-family: consolas,&#39;Courier New&#39;,courier,monospace; margin: 0em; width: 100%; background-color: #ffffff&quot;&gt; 30:     &lt;span style=&quot;color: #0000ff&quot;&gt;&amp;lt;/&lt;/span&gt;&lt;span style=&quot;color: #800000&quot;&gt;ItemGroup&lt;/span&gt;&lt;span style=&quot;color: #0000ff&quot;&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;&lt;pre style=&quot;font-size: 12px; font-family: consolas,&#39;Courier New&#39;,courier,monospace; margin: 0em; width: 100%; background-color: #eaeaea&quot;&gt; 31:     &lt;span style=&quot;color: #0000ff&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #800000&quot;&gt;Copy&lt;/span&gt; &lt;span style=&quot;color: #ff0000&quot;&gt;SourceFiles&lt;/span&gt;=&lt;span style=&quot;color: #0000ff&quot;&gt;&quot;@(ConfigFiles)&quot;&lt;/span&gt; &lt;span style=&quot;color: #ff0000&quot;&gt;DestinationFolder&lt;/span&gt;=&lt;span style=&quot;color: #0000ff&quot;&gt;&quot;$(DestinationPath)\%(RecursiveDir)&quot;&lt;/span&gt;&lt;span style=&quot;color: #0000ff&quot;&gt;/&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;&lt;pre style=&quot;font-size: 12px; font-family: consolas,&#39;Courier New&#39;,courier,monospace; margin: 0em; width: 100%; background-color: #ffffff&quot;&gt; 32: &lt;span style=&quot;color: #0000ff&quot;&gt;&amp;lt;/&lt;/span&gt;&lt;span style=&quot;color: #800000&quot;&gt;Target&lt;/span&gt;&lt;span style=&quot;color: #0000ff&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;/pre&gt;&lt;br /&gt;&lt;p&gt;Before committing the changes, just make sure to go to TeamCity and modify the Target setting of the deploy step so it matches our “DeployWeb” target, instead of the “DeployApp” we entered before. Commit the build script changes and let’s see how it goes.&lt;/p&gt;&lt;br /&gt;&lt;p&gt;&lt;a href=&quot;http://lh5.ggpht.com/-SlJiQo-phEw/UYe1hNcBkuI/AAAAAAAAEfg/g2pF3t5CnBA/s1600-h/TC_webdeploy_34%25255B3%25255D.png&quot;&gt;&lt;img title=&quot;TC_webdeploy_34&quot; style=&quot;float: none; margin-left: auto; display: block; margin-right: auto&quot; alt=&quot;TC_webdeploy_34&quot; src=&quot;http://lh6.ggpht.com/-4N6GXHAvXDQ/UYe1iblZaVI/AAAAAAAAEfo/-udb1AZvRzo/TC_webdeploy_34_thumb%25255B1%25255D.png?imgmax=800&quot; width=&quot;434&quot; height=&quot;147&quot;&gt;&lt;/a&gt;&lt;/p&gt;&lt;br /&gt;&lt;p&gt;Now when I committed this the first time, I got errors on the Build process referring to the target “Package” not being found. Banged my head against the wall several times while trying to figure out the issue. I even started to play around with &lt;a href=&quot;http://blogs.msdn.com/b/webdev/archive/2009/02/24/web-packaging-creating-web-packages-using-msbuild.aspx&quot;&gt;parameters for the MSBuild command line options&lt;/a&gt;, without success.&lt;br /&gt;&lt;p&gt;First, in VS2012 the package/deploy settings have changed. Now you need to &lt;a href=&quot;http://msdn.microsoft.com/en-us/library/dd465323.aspx&quot;&gt;create a publish package&lt;/a&gt; and enter the packaging details you want. Then you need to update the build script to introduce the new parameters. That done, I went ahead to create the package using MSBuild from the command line, which is what TeamCity will do behind the scenes.&lt;br /&gt;&lt;p&gt;&lt;a href=&quot;http://lh3.ggpht.com/-AO5CpixCftw/UYe1jYraRFI/AAAAAAAAEfw/9OtJcEO-_S8/s1600-h/TC_webdeploy_42%25255B3%25255D.png&quot;&gt;&lt;img title=&quot;TC_webdeploy_42&quot; style=&quot;float: none; margin-left: auto; display: block; margin-right: auto&quot; alt=&quot;TC_webdeploy_42&quot; src=&quot;http://lh5.ggpht.com/-2HHel1cFZP4/UYe1kvJ3rkI/AAAAAAAAEf4/0OmDgUy0GCc/TC_webdeploy_42_thumb%25255B1%25255D.png?imgmax=800&quot; width=&quot;342&quot; height=&quot;240&quot;&gt;&lt;/a&gt;&lt;br /&gt;&lt;p&gt;Then, I got the same error from the command line. Many suggest is a .NET framework issue, or the lack of having MSDeploy installed correctly, however, I’m sure that my development machine has the required tools and correct configuration.&lt;br /&gt;&lt;p&gt;It turns out, that the problem is trying to compile the entire solution, instead of just the web site project. Check &lt;a href=&quot;http://www.troyhunt.com/2010/10/why-target-package-does-not-exist-in.html&quot;&gt;this helpful article&lt;/a&gt; about this kind of issue.&lt;br /&gt;&lt;p&gt;&lt;strong&gt;Working Local command (from the app project directory):&lt;br&gt;&lt;/strong&gt;C:\Windows\Microsoft.NET\Framework\v4.0.30319\MSBuild.exe MvcApplication2.csproj /t:Package /p:PublishProfile=Package /p:Configuration=Release&lt;br /&gt;&lt;p&gt;&lt;a href=&quot;http://lh5.ggpht.com/-wJw12HV8b7k/UYe1l0G6HII/AAAAAAAAEf8/Yb4kkar8t_4/s1600-h/TC_webdeploy_43%25255B3%25255D.png&quot;&gt;&lt;img title=&quot;TC_webdeploy_43&quot; style=&quot;float: none; margin-left: auto; display: block; margin-right: auto&quot; alt=&quot;TC_webdeploy_43&quot; src=&quot;http://lh3.ggpht.com/-BI2LLCcMBo0/UYe1mwQURjI/AAAAAAAAEgE/spYQXXIV1_s/TC_webdeploy_43_thumb%25255B1%25255D.png?imgmax=800&quot; width=&quot;342&quot; height=&quot;240&quot;&gt;&lt;/a&gt;&lt;br&gt;Now, this worked locally, but unfortunately, I was getting the same error on the server. So now is time to make sure that the web deploy agent for VS2012 projects is actually installed on the server.&lt;a href=&quot;http://lh3.ggpht.com/-iENAYhZEXJA/UYe1n-TodTI/AAAAAAAAEgQ/ZXVhwlTiEeI/s1600-h/TC_webdeploy_44%25255B3%25255D.png&quot;&gt;&lt;br&gt;&lt;br&gt;&lt;img title=&quot;TC_webdeploy_44&quot; style=&quot;float: none; margin-left: auto; display: block; margin-right: auto&quot; alt=&quot;TC_webdeploy_44&quot; src=&quot;http://lh6.ggpht.com/-9RIcxkM3SF8/UYe1p2zfXjI/AAAAAAAAEgY/F-5ARipihBo/TC_webdeploy_44_thumb%25255B1%25255D.png?imgmax=800&quot; width=&quot;376&quot; height=&quot;240&quot;&gt;&lt;/a&gt;&lt;br&gt;Finally, I figure out that the problem was that the required WebApp deploy targets were not available. &lt;br&gt;&lt;br&gt;In one of the first related articles of the TeamCity series, we copied the webApplications folder from Visual Studio 11 but not the Web folder. &lt;br&gt;&lt;br&gt;The &lt;a href=&quot;http://stackoverflow.com/questions/2607428/msbuild-target-package-not-found&quot;&gt;solution&lt;/a&gt; is to copy the following folders to your server:&lt;br&gt;C:\Program Files (x86)\MSBuild\Microsoft\VisualStudio\v11.0\Web&lt;br&gt;C:\Program Files (x86)\MSBuild\Microsoft\VisualStudio\v11.0\WebApplications&lt;br&gt;&lt;br&gt;&lt;strong&gt;Working Server side command:&lt;br&gt;&lt;/strong&gt;C:\Windows\Microsoft.NET\Framework\v4.0.30319\MSBuild.exe MvcApplication2.csproj /t:Package /p:PublishProfile=Package /p:Configuration=Release&lt;br&gt;&lt;br&gt;&lt;a href=&quot;http://lh6.ggpht.com/-cAeGxJby8H0/UYe1rKmyahI/AAAAAAAAEgg/SXP-viA_r5Y/s1600-h/TC_webdeploy_53%25255B3%25255D.png&quot;&gt;&lt;img title=&quot;TC_webdeploy_53&quot; style=&quot;float: none; margin-left: auto; display: block; margin-right: auto&quot; alt=&quot;TC_webdeploy_53&quot; src=&quot;http://lh4.ggpht.com/--LJjjH4fGro/UYe1sas7aSI/AAAAAAAAEgk/SDhp-7YRuXU/TC_webdeploy_53_thumb%25255B1%25255D.png?imgmax=800&quot; width=&quot;376&quot; height=&quot;240&quot;&gt;&lt;/a&gt;&lt;br&gt;With the web deployment process now working, you can go ahead and run the entire Build process from TeamCity. &lt;br&gt;&lt;br&gt;The Build Workflow should be successful and do the following:&lt;br /&gt;&lt;blockquote&gt;&lt;br /&gt;&lt;p&gt;1. Retrieve latest changes from source control repo.&lt;br&gt;2. Compile the entire solution, including unit test project.&lt;br&gt;3. Run the entire unit test suite.&lt;br&gt;4. Package and deploy the web application files into the IIS corresponding directory.&lt;/p&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;p&gt;TeamCity Build Reports:&lt;a href=&quot;http://lh5.ggpht.com/-GaVc0S-PNR8/UYe1tgVPlEI/AAAAAAAAEgw/bt1HaV0Jlto/s1600-h/TC_webdeploy_45%25255B3%25255D.png&quot;&gt;&lt;br&gt;&lt;br&gt;&lt;img title=&quot;TC_webdeploy_45&quot; style=&quot;float: none; margin-left: auto; display: block; margin-right: auto&quot; alt=&quot;TC_webdeploy_45&quot; src=&quot;http://lh3.ggpht.com/-QNkAD7xhBLs/UYe1u-WYvWI/AAAAAAAAEg0/JEzRms_sFwY/TC_webdeploy_45_thumb%25255B1%25255D.png?imgmax=800&quot; width=&quot;434&quot; height=&quot;78&quot;&gt;&lt;/a&gt;&lt;br&gt;&lt;a href=&quot;http://lh6.ggpht.com/-dIt16HRrZqE/UYe1wbdRBvI/AAAAAAAAEhA/zIwDLiiW_2Q/s1600-h/TC_webdeploy_46%25255B3%25255D.png&quot;&gt;&lt;img title=&quot;TC_webdeploy_46&quot; style=&quot;float: none; margin-left: auto; display: block; margin-right: auto&quot; alt=&quot;TC_webdeploy_46&quot; src=&quot;http://lh5.ggpht.com/-6qCikIf7siM/UYe1xLzdWOI/AAAAAAAAEhI/ADWTEq4joz0/TC_webdeploy_46_thumb%25255B1%25255D.png?imgmax=800&quot; width=&quot;434&quot; height=&quot;139&quot;&gt;&lt;/a&gt;&lt;/p&gt;&lt;br /&gt;&lt;p&gt;Compiled and Packaged Files: &lt;a href=&quot;http://lh6.ggpht.com/-L606pqALmGk/UYe1ypCwrlI/AAAAAAAAEhQ/XAxTAMtfgng/s1600-h/TC_webdeploy_47%25255B3%25255D.png&quot;&gt;&lt;br&gt;&lt;br&gt;&lt;img title=&quot;TC_webdeploy_47&quot; style=&quot;float: none; margin-left: auto; display: block; margin-right: auto&quot; alt=&quot;TC_webdeploy_47&quot; src=&quot;http://lh5.ggpht.com/-eYEoaotOnVk/UYe1zvlX7nI/AAAAAAAAEhU/-moiXFWmSiQ/TC_webdeploy_47_thumb%25255B1%25255D.png?imgmax=800&quot; width=&quot;368&quot; height=&quot;240&quot;&gt;&lt;/a&gt;&lt;br&gt;&lt;a href=&quot;http://lh4.ggpht.com/-00MSlYdZggg/UYe11HKsKqI/AAAAAAAAEhg/_t4mB4VhPas/s1600-h/TC_webdeploy_48%25255B3%25255D.png&quot;&gt;&lt;img title=&quot;TC_webdeploy_48&quot; style=&quot;float: none; margin-left: auto; display: block; margin-right: auto&quot; alt=&quot;TC_webdeploy_48&quot; src=&quot;http://lh6.ggpht.com/-rCqIdqeQF1w/UYe12QMN7SI/AAAAAAAAEho/2N4LA0WEFEM/TC_webdeploy_48_thumb%25255B1%25255D.png?imgmax=800&quot; width=&quot;367&quot; height=&quot;240&quot;&gt;&lt;/a&gt;&lt;br&gt;&lt;a href=&quot;http://lh5.ggpht.com/-GO30PQvS24Q/UYe13ku39fI/AAAAAAAAEhw/har5FZJglWM/s1600-h/TC_webdeploy_49%25255B3%25255D.png&quot;&gt;&lt;img title=&quot;TC_webdeploy_49&quot; style=&quot;float: none; margin-left: auto; display: block; margin-right: auto&quot; alt=&quot;TC_webdeploy_49&quot; src=&quot;http://lh5.ggpht.com/-bXPcQv3mZqs/UYe15AGF6WI/AAAAAAAAEh4/0k4EIjxmeUo/TC_webdeploy_49_thumb%25255B1%25255D.png?imgmax=800&quot; width=&quot;368&quot; height=&quot;240&quot;&gt;&lt;/a&gt;&lt;br&gt;Deployed Files:&lt;br&gt;&lt;br&gt;&lt;a href=&quot;http://lh4.ggpht.com/-1IziqMAf9hY/UYe16j7i2HI/AAAAAAAAEiA/AqSoQmkkLcA/s1600-h/TC_webdeploy_50%25255B3%25255D.png&quot;&gt;&lt;img title=&quot;TC_webdeploy_50&quot; style=&quot;float: none; margin-left: auto; display: block; margin-right: auto&quot; alt=&quot;TC_webdeploy_50&quot; src=&quot;http://lh5.ggpht.com/-iAu7X4737zo/UYe17vnXTcI/AAAAAAAAEiI/zZSVrWuj8B4/TC_webdeploy_50_thumb%25255B1%25255D.png?imgmax=800&quot; width=&quot;339&quot; height=&quot;240&quot;&gt;&lt;/a&gt;&lt;br&gt;Verifying site in IIS:&lt;br&gt;&lt;br&gt;&lt;a href=&quot;http://lh4.ggpht.com/-siaoJwPA9rw/UYe19KPMaVI/AAAAAAAAEiQ/PkI0_zGb1RU/s1600-h/TC_webdeploy_51%25255B3%25255D.png&quot;&gt;&lt;img title=&quot;TC_webdeploy_51&quot; style=&quot;float: none; margin-left: auto; display: block; margin-right: auto&quot; alt=&quot;TC_webdeploy_51&quot; src=&quot;http://lh6.ggpht.com/-sOOG_9Nn82E/UYe1-R2p-0I/AAAAAAAAEiY/JWGBWYpc2YY/TC_webdeploy_51_thumb%25255B1%25255D.png?imgmax=800&quot; width=&quot;434&quot; height=&quot;237&quot;&gt;&lt;/a&gt;&lt;br&gt;Running Web App:&lt;br&gt;&lt;br&gt;&lt;a href=&quot;http://lh6.ggpht.com/-U1clUhjL8eU/UYe1_hp0GDI/AAAAAAAAEig/DZHc9oQRgMM/s1600-h/TC_webdeploy_52%25255B3%25255D.png&quot;&gt;&lt;img title=&quot;TC_webdeploy_52&quot; style=&quot;float: none; margin-left: auto; display: block; margin-right: auto&quot; alt=&quot;TC_webdeploy_52&quot; src=&quot;http://lh5.ggpht.com/-96lKSq1Y-XY/UYe2Az9O81I/AAAAAAAAEio/HS4KZfGlY28/TC_webdeploy_52_thumb%25255B1%25255D.png?imgmax=800&quot; width=&quot;356&quot; height=&quot;240&quot;&gt;&lt;/a&gt;&lt;br&gt;There you go. We have completed a full &lt;a href=&quot;http://blog.anthonybaker.me/search/label/Continuous%20Integration&quot;&gt;continuous integration and continuous deployment setup&lt;/a&gt; on a Windows Server machine with TeamCity and IIS for an ASP.NET MVC 4.0 application. &lt;br&gt;&lt;br&gt;I really hope this complete, detailed, step-by-step guide helps you as much as possible. Feel free to share your comments, issues, contributions or corrections.&lt;br&gt;&lt;br&gt;You can download the complete MVC sample application, including the build script from my Github repo &lt;a href=&quot;https://github.com/anthonybaker/WEB_CISampleMVCApp&quot;&gt;here&lt;/a&gt;.&lt;br&gt;&lt;br&gt;Here you can find some helpful articles with related topics:&lt;br&gt;&lt;br&gt;&lt;a href=&quot;http://cgeers.com/2011/08/21/web-config-transformation-using-teamcity/&quot;&gt;Web.config Transformation Using TeamCity&lt;/a&gt;&lt;br&gt;&lt;a href=&quot;http://www.troyhunt.com/2010/11/you-deploying-it-wrong-teamcity_11.html&quot;&gt;MSBuild and Deployable Packages&lt;/a&gt;&lt;/p&gt;  </content><link rel='replies' type='application/atom+xml' href='http://blog.anthonybaker.me/feeds/3762861140233760675/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://blog.anthonybaker.me/2013/05/how-to-automate-app-deployment-in_1352.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1811411750119502062/posts/default/3762861140233760675'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1811411750119502062/posts/default/3762861140233760675'/><link rel='alternate' type='text/html' href='http://blog.anthonybaker.me/2013/05/how-to-automate-app-deployment-in_1352.html' title='How to Automate App Deployment in TeamCity (Part 3)'/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/00141462441551416511</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://lh6.ggpht.com/-4N6GXHAvXDQ/UYe1iblZaVI/AAAAAAAAEfo/-udb1AZvRzo/s72-c/TC_webdeploy_34_thumb%25255B1%25255D.png?imgmax=800" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1811411750119502062.post-9021195416510833742</id><published>2013-05-06T14:37:00.001+01:00</published><updated>2013-05-06T15:06:28.594+01:00</updated><category scheme="http://www.blogger.com/atom/ns#" term=".NET"/><category scheme="http://www.blogger.com/atom/ns#" term="Agile"/><category scheme="http://www.blogger.com/atom/ns#" term="ASP.NET"/><category scheme="http://www.blogger.com/atom/ns#" term="Continuous Deployment"/><category scheme="http://www.blogger.com/atom/ns#" term="Continuous Integration"/><category scheme="http://www.blogger.com/atom/ns#" term="MVC"/><category scheme="http://www.blogger.com/atom/ns#" term="Source Control"/><category scheme="http://www.blogger.com/atom/ns#" term="TeamCity"/><category scheme="http://www.blogger.com/atom/ns#" term="Tips"/><category scheme="http://www.blogger.com/atom/ns#" term="Visual Studio"/><title type='text'>How to Automate App Deployment in TeamCity (Part 2)</title><content type='html'>&lt;p&gt;Please notice that this is a &lt;a href=&quot;http://blog.anthonybaker.me/2013/05/how-to-automate-app-deployment-in_1474.html&quot;&gt;multi-part, step-by-step guide&lt;/a&gt;, on how to automate application deployment in &lt;a href=&quot;http://www.jetbrains.com/teamcity/&quot;&gt;TeamCity CI Server&lt;/a&gt;. You can find the &lt;a href=&quot;http://blog.anthonybaker.me/2013/05/how-to-automate-app-deployment-in.html&quot;&gt;Part 1&lt;/a&gt; here. &lt;p&gt;&lt;strong&gt;Part 2: Configuring the Web Application in IIS7 &lt;/strong&gt;&lt;/p&gt; &lt;p&gt;To make the point and test what is the current outcome, we need to setup a web site in our IIS server. I’m using IIS7 for this scenario.&amp;nbsp; &lt;p&gt;Let’s run through a basic setup so we can actually test.  &lt;p&gt;1. Login into your server machine.&lt;br&gt;2. Run the IIS Manager. &lt;br&gt;3. Right click on Sites, and select Add New Website  &lt;p&gt;&lt;a href=&quot;http://lh5.ggpht.com/-iTLBHSZKCRQ/UYexjQhMrTI/AAAAAAAAEcE/G7_7-7qdJZI/s1600-h/TC_webdeploy_22%25255B5%25255D.png&quot;&gt;&lt;img title=&quot;TC_webdeploy_22&quot; style=&quot;float: none; margin-left: auto; display: block; margin-right: auto&quot; alt=&quot;TC_webdeploy_22&quot; src=&quot;http://lh6.ggpht.com/-U0GvG8FP2vM/UYexkqa8D8I/AAAAAAAAEcI/grwbG6QSO0E/TC_webdeploy_22_thumb%25255B3%25255D.png?imgmax=800&quot; width=&quot;331&quot; height=&quot;364&quot;&gt;&lt;/a&gt; &lt;p&gt;4. Fill in the new website details as you need. In my case I’m naming the site “&lt;em&gt;web.contoso.com&lt;/em&gt;”, letting IIS to create the corresponding application pool with the same name. Then enter the correct physical path, which is where the our deploy step is copying the files. I’m going to enter the same web site name as my domain name and leave it with the default IP Address and port.  &lt;p&gt;&lt;a href=&quot;http://lh3.ggpht.com/-8K93TFAzBm8/UYexlS_KUcI/AAAAAAAAEcQ/NWET2zr8IWU/s1600-h/TC_webdeploy_23%25255B4%25255D.png&quot;&gt;&lt;img title=&quot;TC_webdeploy_23&quot; style=&quot;float: none; margin-left: auto; display: block; margin-right: auto&quot; alt=&quot;TC_webdeploy_23&quot; src=&quot;http://lh4.ggpht.com/-lMPxScH5B0I/UYexmfovyxI/AAAAAAAAEcc/m-dFxknGNZM/TC_webdeploy_23_thumb%25255B2%25255D.png?imgmax=800&quot; width=&quot;340&quot; height=&quot;335&quot;&gt;&lt;/a&gt; &lt;p&gt;5. Click ok. The new website should be added. &lt;br&gt;6. Click on the Content View on the center view to make sure the website directory is pointing to the right location and app files are there.  &lt;p&gt;&lt;a href=&quot;http://lh6.ggpht.com/-Q24_tBRrQa0/UYexosQE7MI/AAAAAAAAEck/JX5kZvAJnaw/s1600-h/TC_webdeploy_25%25255B3%25255D.png&quot;&gt;&lt;img title=&quot;TC_webdeploy_25&quot; style=&quot;float: none; margin-left: auto; display: block; margin-right: auto&quot; alt=&quot;TC_webdeploy_25&quot; src=&quot;http://lh3.ggpht.com/-6G0VqjsTE8k/UYexp-Ggf1I/AAAAAAAAEco/N87UOKhElrY/TC_webdeploy_25_thumb%25255B1%25255D.png?imgmax=800&quot; width=&quot;434&quot; height=&quot;232&quot;&gt;&lt;/a&gt; &lt;p&gt;7. Now, since I don’t actually own that domain name, what I would do is configure a local domain setup. The site won’t be available publicly, but it will be available locally, so we can test. &lt;br&gt;8. To make the local domain work, you need to add a hosts record on the server machine. Open the hosts file, which is located at C:\Windows\System32\drivers\etc. Add the “web.contoso.com” record pointing to the localhost IP address: &lt;br&gt;&lt;strong&gt;127.0.0.1 web.contoso.com&lt;/strong&gt; &lt;br&gt; &lt;p&gt;&lt;a href=&quot;http://lh6.ggpht.com/-JBVMvbnFDOs/UYexq_TjwYI/AAAAAAAAEc0/K2lw3Lt7VPw/s1600-h/TC_webdeploy_24%25255B3%25255D.png&quot;&gt;&lt;img title=&quot;TC_webdeploy_24&quot; style=&quot;float: none; margin-left: auto; display: block; margin-right: auto&quot; alt=&quot;TC_webdeploy_24&quot; src=&quot;http://lh4.ggpht.com/-RJvy0RaApqE/UYexsNzMWxI/AAAAAAAAEc4/zkpfzz0l2PE/TC_webdeploy_24_thumb%25255B1%25255D.png?imgmax=800&quot; width=&quot;391&quot; height=&quot;240&quot;&gt;&lt;/a&gt; &lt;p&gt;9. Save the file. If Windows doesn’t allow you to save the file, you need to create a copy somewhere else, do the changes and then replace the original file with the modified one. &lt;br&gt;10. Now, on the IIS Manager, right click on the website you created, and select Manage Web Site/Browse to open the browser and browse to our web app.  &lt;p&gt;&lt;a href=&quot;http://lh3.ggpht.com/-4pWoR5gOvfs/UYextYhWWnI/AAAAAAAAEdE/6U-0wIwNG04/s1600-h/TC_webdeploy_26%25255B3%25255D.png&quot;&gt;&lt;img title=&quot;TC_webdeploy_26&quot; style=&quot;float: none; margin-left: auto; display: block; margin-right: auto&quot; alt=&quot;TC_webdeploy_26&quot; src=&quot;http://lh6.ggpht.com/-GmHncBDpX7w/UYexuWgNgBI/AAAAAAAAEdM/QQLrjD9z0Zw/TC_webdeploy_26_thumb%25255B1%25255D.png?imgmax=800&quot; width=&quot;329&quot; height=&quot;240&quot;&gt;&lt;/a&gt; &lt;p&gt;11. You will get a 403 HTTP Forbidden error. Basically, there’s no app to serve the web request, and the server won’t allow contents to be listed.  &lt;p&gt;&lt;a href=&quot;http://lh6.ggpht.com/-9sH5vijT6W8/UYexvh6IlcI/AAAAAAAAEdQ/h3kPtb-u92Q/s1600-h/TC_webdeploy_27%25255B3%25255D.png&quot;&gt;&lt;img title=&quot;TC_webdeploy_27&quot; style=&quot;float: none; margin-left: auto; display: block; margin-right: auto&quot; alt=&quot;TC_webdeploy_27&quot; src=&quot;http://lh6.ggpht.com/-MMaWR_TdDy8/UYexwtYEpeI/AAAAAAAAEdY/tS8GXy_rOi4/TC_webdeploy_27_thumb%25255B1%25255D.png?imgmax=800&quot; width=&quot;339&quot; height=&quot;240&quot;&gt;&lt;/a&gt; &lt;p&gt;If you want to actually test your web app files on your server real quick to make sure the IIS web site setup is correct, you can actually do a simple file system publish from Visual Studio to package and publish your app files.  &lt;p&gt;&lt;a href=&quot;http://lh3.ggpht.com/-Q3OabSacwGU/UYexxh31D3I/AAAAAAAAEdk/dVFTo7VZ22U/s1600-h/TC_webdeploy_32%25255B3%25255D.png&quot;&gt;&lt;img title=&quot;TC_webdeploy_32&quot; style=&quot;float: none; margin-left: auto; display: block; margin-right: auto&quot; alt=&quot;TC_webdeploy_32&quot; src=&quot;http://lh6.ggpht.com/-9HnsvFeDmh0/UYexymmk5II/AAAAAAAAEds/uS_urP1rTaY/TC_webdeploy_32_thumb%25255B1%25255D.png?imgmax=800&quot; width=&quot;330&quot; height=&quot;240&quot;&gt;&lt;/a&gt; &lt;p&gt;&lt;a href=&quot;http://lh6.ggpht.com/-sfpe3EoKroA/UYexzhfgSII/AAAAAAAAEd0/6dqJcxkn9Kg/s1600-h/TC_webdeploy_28%25255B3%25255D.png&quot;&gt;&lt;img title=&quot;TC_webdeploy_28&quot; style=&quot;float: none; margin-left: auto; display: block; margin-right: auto&quot; alt=&quot;TC_webdeploy_28&quot; src=&quot;http://lh4.ggpht.com/-tqFro-S56xg/UYex0nYGqjI/AAAAAAAAEd8/olItD2Kgr_s/TC_webdeploy_28_thumb%25255B1%25255D.png?imgmax=800&quot; width=&quot;306&quot; height=&quot;240&quot;&gt;&lt;/a&gt; &lt;p&gt;&lt;a href=&quot;http://lh4.ggpht.com/-prBhBRmWR0k/UYex1rDqlhI/AAAAAAAAEeE/hEEld-d1mXc/s1600-h/TC_webdeploy_29%25255B3%25255D.png&quot;&gt;&lt;img title=&quot;TC_webdeploy_29&quot; style=&quot;float: none; margin-left: auto; display: block; margin-right: auto&quot; alt=&quot;TC_webdeploy_29&quot; src=&quot;http://lh3.ggpht.com/-Zs5mhqarI3E/UYex2jzB2uI/AAAAAAAAEeM/SsPwliudS8I/TC_webdeploy_29_thumb%25255B1%25255D.png?imgmax=800&quot; width=&quot;306&quot; height=&quot;240&quot;&gt;&lt;/a&gt; &lt;p&gt;&lt;a href=&quot;http://lh5.ggpht.com/-l1MiNOUUH8M/UYex3_qqDKI/AAAAAAAAEeU/h97QuVd_osc/s1600-h/TC_webdeploy_30%25255B3%25255D.png&quot;&gt;&lt;img title=&quot;TC_webdeploy_30&quot; style=&quot;float: none; margin-left: auto; display: block; margin-right: auto&quot; alt=&quot;TC_webdeploy_30&quot; src=&quot;http://lh6.ggpht.com/-5fiOedmpX_M/UYex5Lsm12I/AAAAAAAAEeY/RX8zyIuNISM/TC_webdeploy_30_thumb%25255B1%25255D.png?imgmax=800&quot; width=&quot;306&quot; height=&quot;240&quot;&gt;&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&lt;a href=&quot;http://lh5.ggpht.com/-MXWyEQiCCP4/UYex530-4sI/AAAAAAAAEek/zWBfQR7XE50/s1600-h/TC_webdeploy_31%25255B3%25255D.png&quot;&gt;&lt;img title=&quot;TC_webdeploy_31&quot; style=&quot;float: none; margin-left: auto; display: block; margin-right: auto&quot; alt=&quot;TC_webdeploy_31&quot; src=&quot;http://lh5.ggpht.com/-TBhPp28D1Zk/UYex6z9WPjI/AAAAAAAAEes/rhv8SXWK2XU/TC_webdeploy_31_thumb%25255B1%25255D.png?imgmax=800&quot; width=&quot;306&quot; height=&quot;240&quot;&gt;&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&lt;a href=&quot;http://lh6.ggpht.com/-IVbszC0nPAc/UYex8vyYkeI/AAAAAAAAEe0/hr4JxYYrK2w/s1600-h/TC_webdeploy_39%25255B3%25255D.png&quot;&gt;&lt;img title=&quot;TC_webdeploy_39&quot; style=&quot;float: none; margin-left: auto; display: block; margin-right: auto&quot; alt=&quot;TC_webdeploy_39&quot; src=&quot;http://lh4.ggpht.com/-Rgo_YZ_VxdE/UYex96K5F3I/AAAAAAAAEe8/Tgj9SxsNBnA/TC_webdeploy_39_thumb%25255B1%25255D.png?imgmax=800&quot; width=&quot;434&quot; height=&quot;234&quot;&gt;&lt;/a&gt;&lt;/p&gt; &lt;p&gt;Then just delete the files on the server’s web site folder and copy the ones you published in your local machine.  &lt;p&gt;&lt;a href=&quot;http://lh4.ggpht.com/-acxGMAgZmSY/UYex_KG4BwI/AAAAAAAAEfE/SSEApSANOvE/s1600-h/TC_webdeploy_33%25255B3%25255D.png&quot;&gt;&lt;img title=&quot;TC_webdeploy_33&quot; style=&quot;float: none; margin-left: auto; display: block; margin-right: auto&quot; alt=&quot;TC_webdeploy_33&quot; src=&quot;http://lh5.ggpht.com/-R6Jh_8mHzjg/UYeyAYDsrOI/AAAAAAAAEfM/PvHF3OI4n_g/TC_webdeploy_33_thumb%25255B1%25255D.png?imgmax=800&quot; width=&quot;340&quot; height=&quot;240&quot;&gt;&lt;/a&gt; &lt;p&gt;Ok, so now we know that our basic deploy step is just a basic file copying step. This setup might be useful for other kind of apps, where just copying the compiled files might be enough. However, for our web app, we need to actually do a proper web deploy.  &lt;p&gt;&lt;strong&gt;Next Article: &lt;/strong&gt;&lt;a href=&quot;http://blog.anthonybaker.me/2013/05/how-to-automate-app-deployment-in_1352.html&quot;&gt;Part 3 – Completing the Web Deploy Configuration&lt;/a&gt;  </content><link rel='replies' type='application/atom+xml' href='http://blog.anthonybaker.me/feeds/9021195416510833742/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://blog.anthonybaker.me/2013/05/how-to-automate-app-deployment-in_6.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1811411750119502062/posts/default/9021195416510833742'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1811411750119502062/posts/default/9021195416510833742'/><link rel='alternate' type='text/html' href='http://blog.anthonybaker.me/2013/05/how-to-automate-app-deployment-in_6.html' title='How to Automate App Deployment in TeamCity (Part 2)'/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/00141462441551416511</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://lh6.ggpht.com/-U0GvG8FP2vM/UYexkqa8D8I/AAAAAAAAEcI/grwbG6QSO0E/s72-c/TC_webdeploy_22_thumb%25255B3%25255D.png?imgmax=800" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1811411750119502062.post-7754839216532708247</id><published>2013-05-06T14:27:00.001+01:00</published><updated>2013-05-06T15:04:24.207+01:00</updated><category scheme="http://www.blogger.com/atom/ns#" term=".NET"/><category scheme="http://www.blogger.com/atom/ns#" term="Agile"/><category scheme="http://www.blogger.com/atom/ns#" term="ASP.NET"/><category scheme="http://www.blogger.com/atom/ns#" term="Continuous Deployment"/><category scheme="http://www.blogger.com/atom/ns#" term="Continuous Integration"/><category scheme="http://www.blogger.com/atom/ns#" term="MVC"/><category scheme="http://www.blogger.com/atom/ns#" term="Source Control"/><category scheme="http://www.blogger.com/atom/ns#" term="TeamCity"/><category scheme="http://www.blogger.com/atom/ns#" term="Tips"/><category scheme="http://www.blogger.com/atom/ns#" term="Visual Studio"/><title type='text'>How to Automate App Deployment in TeamCity (Part 1)</title><content type='html'>&lt;p&gt;Please notice that this is a &lt;a href=&quot;http://blog.anthonybaker.me/2013/05/how-to-automate-app-deployment-in_1474.html&quot;&gt;multi-part, step-by-step guide&lt;/a&gt;, on how to automate application deployment in &lt;a href=&quot;http://www.jetbrains.com/teamcity/&quot;&gt;TeamCity CI Server&lt;/a&gt;.  &lt;p&gt;&lt;strong&gt;Part 1: Setting Up the Deploy Step in TeamCity&lt;/strong&gt;  &lt;p&gt;The first step is to modify our build script on our project to include the new steps, which will enable TeamCity to perform the deployment process.  &lt;ol&gt; &lt;li&gt;Let’s open our MVC application in Visual Studio.  &lt;li&gt;Let’s modify the &lt;a href=&quot;http://msdn.microsoft.com/en-us/library/0k6kkbsd.aspx&quot;&gt;MSBuild&lt;/a&gt; script of our project to include the deploy steps. To start we are just going to add a basic deploy application step, which will just copy the application files to an specified location.  &lt;li&gt;Save the script.&lt;/li&gt;&lt;/ol&gt;&lt;pre style=&quot;overflow: auto; border-top: #cecece 1px solid; border-right: #cecece 1px solid; border-bottom: #cecece 1px solid; padding-bottom: 5px; padding-top: 5px; padding-left: 5px; min-height: 40px; border-left: #cecece 1px solid; padding-right: 5px; width: 450px; background-color: #fbfbfb&quot;&gt;&lt;pre style=&quot;font-size: 12px; font-family: consolas,&#39;Courier New&#39;,courier,monospace; margin: 0em; width: 100%; background-color: #eaeaea&quot;&gt;  1: &lt;span style=&quot;color: #008000&quot;&gt;&amp;lt;!-- Copies the application files to the corresponding directory --&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;&lt;pre style=&quot;font-size: 12px; font-family: consolas,&#39;Courier New&#39;,courier,monospace; margin: 0em; width: 100%; background-color: #ffffff&quot;&gt;  2: &lt;span style=&quot;color: #0000ff&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #800000&quot;&gt;Target&lt;/span&gt; &lt;span style=&quot;color: #ff0000&quot;&gt;Name&lt;/span&gt;=&lt;span style=&quot;color: #0000ff&quot;&gt;&quot;DeployApp&quot;&lt;/span&gt;&lt;span style=&quot;color: #0000ff&quot;&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;&lt;pre style=&quot;font-size: 12px; font-family: consolas,&#39;Courier New&#39;,courier,monospace; margin: 0em; width: 100%; background-color: #eaeaea&quot;&gt;  3:     &lt;span style=&quot;color: #0000ff&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #800000&quot;&gt;Message&lt;/span&gt; &lt;span style=&quot;color: #ff0000&quot;&gt;Text&lt;/span&gt;=&lt;span style=&quot;color: #0000ff&quot;&gt;&quot;Copying application files...&quot;&lt;/span&gt; &lt;span style=&quot;color: #0000ff&quot;&gt;/&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;&lt;pre style=&quot;font-size: 12px; font-family: consolas,&#39;Courier New&#39;,courier,monospace; margin: 0em; width: 100%; background-color: #ffffff&quot;&gt;  4:     &lt;span style=&quot;color: #0000ff&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #800000&quot;&gt;ItemGroup&lt;/span&gt;&lt;span style=&quot;color: #0000ff&quot;&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;&lt;pre style=&quot;font-size: 12px; font-family: consolas,&#39;Courier New&#39;,courier,monospace; margin: 0em; width: 100%; background-color: #eaeaea&quot;&gt;  5:         &lt;span style=&quot;color: #0000ff&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #800000&quot;&gt;ApplicationFiles&lt;/span&gt; &lt;span style=&quot;color: #ff0000&quot;&gt;Include&lt;/span&gt;=&lt;span style=&quot;color: #0000ff&quot;&gt;&quot;$(ApplicationOutputDirectory)\**\*.*&quot;&lt;/span&gt; &lt;span style=&quot;color: #0000ff&quot;&gt;/&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;&lt;pre style=&quot;font-size: 12px; font-family: consolas,&#39;Courier New&#39;,courier,monospace; margin: 0em; width: 100%; background-color: #ffffff&quot;&gt;  6:     &lt;span style=&quot;color: #0000ff&quot;&gt;&amp;lt;/&lt;/span&gt;&lt;span style=&quot;color: #800000&quot;&gt;ItemGroup&lt;/span&gt;&lt;span style=&quot;color: #0000ff&quot;&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;&lt;pre style=&quot;font-size: 12px; font-family: consolas,&#39;Courier New&#39;,courier,monospace; margin: 0em; width: 100%; background-color: #eaeaea&quot;&gt;  7:     &lt;span style=&quot;color: #0000ff&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #800000&quot;&gt;Copy&lt;/span&gt; &lt;span style=&quot;color: #ff0000&quot;&gt;SourceFiles&lt;/span&gt;=&lt;span style=&quot;color: #0000ff&quot;&gt;&quot;@(ApplicationFiles)&quot;&lt;/span&gt; &lt;span style=&quot;color: #ff0000&quot;&gt;DestinationFolder&lt;/span&gt;=&lt;span style=&quot;color: #0000ff&quot;&gt;&quot;$(DestinationPath)\%(RecursiveDir)&quot;&lt;/span&gt;&lt;span style=&quot;color: #0000ff&quot;&gt;/&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;&lt;pre style=&quot;font-size: 12px; font-family: consolas,&#39;Courier New&#39;,courier,monospace; margin: 0em; width: 100%; background-color: #ffffff&quot;&gt;  8: &lt;span style=&quot;color: #0000ff&quot;&gt;&amp;lt;/&lt;/span&gt;&lt;span style=&quot;color: #800000&quot;&gt;Target&lt;/span&gt;&lt;span style=&quot;color: #0000ff&quot;&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;&lt;pre style=&quot;font-size: 12px; font-family: consolas,&#39;Courier New&#39;,courier,monospace; margin: 0em; width: 100%; background-color: #eaeaea&quot;&gt;  9: &lt;/pre&gt;&lt;/pre&gt;&lt;br /&gt;&lt;p&gt;&lt;br&gt;Before committing the changes, let’s add the deploy step to our project build configuration. &lt;br&gt;&lt;br&gt;1. Login into your TeamCity administration portal. &lt;/p&gt;&lt;br /&gt;&lt;p&gt;&lt;a href=&quot;http://lh5.ggpht.com/-9QurTyNQH24/UYevBFvBR9I/AAAAAAAAEXg/327kaaPsjfY/s1600-h/TC_webdeploy_024.png&quot;&gt;&lt;img title=&quot;TC_webdeploy_02&quot; style=&quot;float: none; margin-left: auto; display: block; margin-right: auto&quot; alt=&quot;TC_webdeploy_02&quot; src=&quot;http://lh6.ggpht.com/-3vP9_D6-XoI/UYevCHESzoI/AAAAAAAAEXk/2gvVmvv1-dE/TC_webdeploy_02_thumb2.png?imgmax=800&quot; width=&quot;434&quot; height=&quot;82&quot;&gt;&lt;/a&gt; &lt;br /&gt;&lt;p&gt;2. Click on the Build Configuration you are going to modify by adding the new deploy step. &lt;br /&gt;&lt;p&gt;&lt;a href=&quot;http://lh3.ggpht.com/-OQeb1sKfxZA/UYevDSpCOrI/AAAAAAAAEXw/vmJkTh5uU24/s1600-h/TC_webdeploy_033.png&quot;&gt;&lt;img title=&quot;TC_webdeploy_03&quot; style=&quot;float: none; margin-left: auto; display: block; margin-right: auto&quot; alt=&quot;TC_webdeploy_03&quot; src=&quot;http://lh5.ggpht.com/-RabU8G1qbjg/UYevEbRM25I/AAAAAAAAEX0/HzR12DYN5ns/TC_webdeploy_03_thumb1.png?imgmax=800&quot; width=&quot;434&quot; height=&quot;197&quot;&gt;&lt;/a&gt; &lt;br /&gt;&lt;p&gt;3. Click on the “Edit Configuration Settings” link at the top right corner, below the search box. &lt;br /&gt;&lt;p&gt;&lt;a href=&quot;http://lh5.ggpht.com/-IjgwWw4Ytns/UYevF2WKqQI/AAAAAAAAEYA/A9wtYS5PLJ0/s1600-h/TC_webdeploy_043.png&quot;&gt;&lt;img title=&quot;TC_webdeploy_04&quot; style=&quot;float: none; margin-left: auto; display: block; margin-right: auto&quot; alt=&quot;TC_webdeploy_04&quot; src=&quot;http://lh3.ggpht.com/-LQqJO_mVFFc/UYevG71Y-TI/AAAAAAAAEYI/ITKCNt1MvqQ/TC_webdeploy_04_thumb1.png?imgmax=800&quot; width=&quot;434&quot; height=&quot;197&quot;&gt;&lt;/a&gt; &lt;br /&gt;&lt;p&gt;&lt;a href=&quot;http://lh6.ggpht.com/-9chrYL-Oqzk/UYevI2Jn6PI/AAAAAAAAEYQ/Q3Nlx-cUBnU/s1600-h/TC_webdeploy_053.png&quot;&gt;&lt;img title=&quot;TC_webdeploy_05&quot; style=&quot;float: none; margin-left: auto; display: block; margin-right: auto&quot; alt=&quot;TC_webdeploy_05&quot; src=&quot;http://lh6.ggpht.com/-TMGpHXevsnA/UYevKJ22eVI/AAAAAAAAEYU/rYkSVGR_y2U/TC_webdeploy_05_thumb1.png?imgmax=800&quot; width=&quot;434&quot; height=&quot;239&quot;&gt;&lt;/a&gt; &lt;br /&gt;&lt;p&gt;4. Once in the configuration settings page, click on the “Build Steps” section of the panel on the right. &lt;br /&gt;&lt;p&gt;&lt;a href=&quot;http://lh5.ggpht.com/-eRo7VNBuoQ8/UYevRfIcUXI/AAAAAAAAEYg/N0t1x9998IQ/s1600-h/TC_webdeploy_063.png&quot;&gt;&lt;img title=&quot;TC_webdeploy_06&quot; style=&quot;float: none; margin-left: auto; display: block; margin-right: auto&quot; alt=&quot;TC_webdeploy_06&quot; src=&quot;http://lh3.ggpht.com/-vsuJIPyxIUM/UYevSeN2HrI/AAAAAAAAEYk/Wxp0ZvhnVcs/TC_webdeploy_06_thumb1.png?imgmax=800&quot; width=&quot;434&quot; height=&quot;239&quot;&gt;&lt;/a&gt; &lt;br /&gt;&lt;p&gt;&lt;a href=&quot;http://lh5.ggpht.com/-5-hJDTQ4CGQ/UYevTg9vG8I/AAAAAAAAEYw/FaT9_zol_cg/s1600-h/TC_webdeploy_073.png&quot;&gt;&lt;img title=&quot;TC_webdeploy_07&quot; style=&quot;float: none; margin-left: auto; display: block; margin-right: auto&quot; alt=&quot;TC_webdeploy_07&quot; src=&quot;http://lh5.ggpht.com/-w3c4MoAZCkA/UYevUWE8TCI/AAAAAAAAEY0/zd5Sn46wtHs/TC_webdeploy_07_thumb1.png?imgmax=800&quot; width=&quot;434&quot; height=&quot;152&quot;&gt;&lt;/a&gt; &lt;br /&gt;&lt;p&gt;5. Once in the build step sections, click on the “Add build step” below the listed steps, so we can add our new deploy step. &lt;br /&gt;&lt;p&gt;&lt;a href=&quot;http://lh6.ggpht.com/-AkzE9oP0uZE/UYevVRq9q1I/AAAAAAAAEZA/eCfwCfFAuhE/s1600-h/TC_webdeploy_083.png&quot;&gt;&lt;img title=&quot;TC_webdeploy_08&quot; style=&quot;float: none; margin-left: auto; display: block; margin-right: auto&quot; alt=&quot;TC_webdeploy_08&quot; src=&quot;http://lh5.ggpht.com/-utcPoCiMEAA/UYevWvXTilI/AAAAAAAAEZE/xV89XZ0H59I/TC_webdeploy_08_thumb1.png?imgmax=800&quot; width=&quot;434&quot; height=&quot;152&quot;&gt;&lt;/a&gt; &lt;br /&gt;&lt;p&gt;6. Since we will be using our MSBuild script, choose MSBuild as the runner type.&lt;br&gt;7. Enter the name of the step. &lt;br&gt;8. Enter the build script relative path.&lt;br&gt;9. Select the MSBuild version you are targeting.&lt;br&gt;10. Enter the Target variable (MSBuild script step name we just added – notice that you can actually target a parameter here, that you can then add in the parameters section, we will do that next time). &lt;br /&gt;&lt;p&gt;&lt;a href=&quot;http://lh4.ggpht.com/-uDltm8UmgC4/UYevX3OlFgI/AAAAAAAAEZQ/iCP5rmYsmnM/s1600-h/TC_webdeploy_093.png&quot;&gt;&lt;img title=&quot;TC_webdeploy_09&quot; style=&quot;float: none; margin-left: auto; display: block; margin-right: auto&quot; alt=&quot;TC_webdeploy_09&quot; src=&quot;http://lh5.ggpht.com/-lj3MmMVnakg/UYevZHpdVhI/AAAAAAAAEZU/iv6BCebk6E8/TC_webdeploy_09_thumb1.png?imgmax=800&quot; width=&quot;434&quot; height=&quot;238&quot;&gt;&lt;/a&gt; &lt;br /&gt;&lt;p&gt;11. Click save.&lt;br&gt;12. You should be redirected to the steps overview and the new deploy step should have been added. &lt;br /&gt;&lt;p&gt;&lt;a href=&quot;http://lh5.ggpht.com/-p7j5EEzMm3g/UYeva0hajRI/AAAAAAAAEZg/eNlvKnERGjc/s1600-h/TC_webdeploy_103.png&quot;&gt;&lt;img title=&quot;TC_webdeploy_10&quot; style=&quot;float: none; margin-left: auto; display: block; margin-right: auto&quot; alt=&quot;TC_webdeploy_10&quot; src=&quot;http://lh5.ggpht.com/-DHu6Y_dvD-w/UYevbvBbmMI/AAAAAAAAEZk/UON0saNmFLA/TC_webdeploy_10_thumb1.png?imgmax=800&quot; width=&quot;434&quot; height=&quot;238&quot;&gt;&lt;/a&gt; &lt;br /&gt;&lt;p&gt;13. Click on the Build parameters section so we can enter the deploy parameters we need. &lt;br /&gt;&lt;p&gt;&lt;a href=&quot;http://lh5.ggpht.com/-uln0qgu3398/UYevdayEUDI/AAAAAAAAEZw/5z2zj3RELYs/s1600-h/TC_webdeploy_113.png&quot;&gt;&lt;img title=&quot;TC_webdeploy_11&quot; style=&quot;float: none; margin-left: auto; display: block; margin-right: auto&quot; alt=&quot;TC_webdeploy_11&quot; src=&quot;http://lh6.ggpht.com/-04SA-JmqtEE/UYeverMMAUI/AAAAAAAAEZ4/I4I-PyWSDnw/TC_webdeploy_11_thumb1.png?imgmax=800&quot; width=&quot;434&quot; height=&quot;237&quot;&gt;&lt;/a&gt; &lt;br /&gt;&lt;p&gt;14. Click on the “Add new parameter” link at the top to add a new parameter.&lt;br&gt;15. The new parameter we need is the DestinationPath we specified in the MSBuild script. This is the path where the application files will be copied. &lt;br /&gt;&lt;p&gt;&lt;a href=&quot;http://lh3.ggpht.com/-Z6qCmMLEieQ/UYeviJxjnRI/AAAAAAAAEaA/MZDJcwTGqUA/s1600-h/TC_webdeploy_133.png&quot;&gt;&lt;img title=&quot;TC_webdeploy_13&quot; style=&quot;float: none; margin-left: auto; display: block; margin-right: auto&quot; alt=&quot;TC_webdeploy_13&quot; src=&quot;http://lh6.ggpht.com/-h1f6ag_kecw/UYevixvT3JI/AAAAAAAAEaI/xdyuWiKOZok/TC_webdeploy_13_thumb1.png?imgmax=800&quot; width=&quot;434&quot; height=&quot;202&quot;&gt;&lt;/a&gt;&lt;/p&gt;&lt;br /&gt;&lt;p&gt;16. Enter the value, which should be the folder path were you want the application files to be copied. In my case I’m entering D:\inetpub\web.contoso.com. &lt;br /&gt;&lt;p&gt;&lt;a href=&quot;http://lh3.ggpht.com/-J9Xh_mcP0z0/UYevj47cgaI/AAAAAAAAEaQ/cLjWFYVrEkg/s1600-h/TC_webdeploy_126.png&quot;&gt;&lt;img title=&quot;TC_webdeploy_12&quot; style=&quot;float: none; margin-left: auto; display: block; margin-right: auto&quot; alt=&quot;TC_webdeploy_12&quot; src=&quot;http://lh3.ggpht.com/-klNHC470AnM/UYevk5-UXCI/AAAAAAAAEaY/ZV35RlLXsTg/TC_webdeploy_12_thumb4.png?imgmax=800&quot; width=&quot;425&quot; height=&quot;308&quot;&gt;&lt;/a&gt; &lt;br /&gt;&lt;p&gt;17. Click save and make sure the new parameter was added correctly. &lt;br /&gt;&lt;p&gt;&lt;a href=&quot;http://lh4.ggpht.com/-uAxuGe_o4Pc/UYevmHfIDDI/AAAAAAAAEag/dPsfD8wekWc/s1600-h/TC_webdeploy_143.png&quot;&gt;&lt;img title=&quot;TC_webdeploy_14&quot; style=&quot;float: none; margin-left: auto; display: block; margin-right: auto&quot; alt=&quot;TC_webdeploy_14&quot; src=&quot;http://lh4.ggpht.com/-9anaHV3nqsQ/UYevnf3v0-I/AAAAAAAAEao/FMSJ8lZYoaA/TC_webdeploy_14_thumb1.png?imgmax=800&quot; width=&quot;434&quot; height=&quot;239&quot;&gt;&lt;/a&gt; &lt;br /&gt;&lt;p&gt;We are done configuring the new step. Let’s commit the changes to our project’s MSBuild script file and see if the TeamCity steps are executed correctly, and our app files deployed to the location we specified. &lt;br /&gt;&lt;p&gt;&lt;a href=&quot;http://lh6.ggpht.com/-HSa8Y6-yq2A/UYevoIJmgOI/AAAAAAAAEaw/tlYqjLh35CQ/s1600-h/TC_webdeploy_153.png&quot;&gt;&lt;img title=&quot;TC_webdeploy_15&quot; style=&quot;float: none; margin-left: auto; display: block; margin-right: auto&quot; alt=&quot;TC_webdeploy_15&quot; src=&quot;http://lh5.ggpht.com/-Si0A9vpT2i4/UYevpZwYLBI/AAAAAAAAEa0/aylL8VedoVg/TC_webdeploy_15_thumb1.png?imgmax=800&quot; width=&quot;434&quot; height=&quot;200&quot;&gt;&lt;/a&gt; &lt;br /&gt;&lt;p&gt;&lt;a href=&quot;http://lh5.ggpht.com/-8S4TaGmpxAU/UYevqP-9z2I/AAAAAAAAEbA/s2N8d4n4Zbg/s1600-h/TC_webdeploy_163.png&quot;&gt;&lt;img title=&quot;TC_webdeploy_16&quot; style=&quot;float: none; margin-left: auto; display: block; margin-right: auto&quot; alt=&quot;TC_webdeploy_16&quot; src=&quot;http://lh6.ggpht.com/-Sd6zmUEd9Xw/UYevrYdBljI/AAAAAAAAEbE/_W1frm2AZjY/TC_webdeploy_16_thumb1.png?imgmax=800&quot; width=&quot;434&quot; height=&quot;86&quot;&gt;&lt;/a&gt; &lt;br /&gt;&lt;p&gt;If you have problems where no files are being copied, review your build script top parameters, where paths are being defined. Make sure the “ApplicationOutputDirectory” parameter defined in the script and outputted in the build log actually exists on the server. &lt;br /&gt;&lt;p&gt;&lt;a href=&quot;http://lh3.ggpht.com/-ed_C_cxwb-w/UYevt_JwXNI/AAAAAAAAEbQ/zP2v2v6nfDo/s1600-h/TC_webdeploy_194.png&quot;&gt;&lt;img title=&quot;TC_webdeploy_19&quot; style=&quot;float: none; margin-left: auto; display: block; margin-right: auto&quot; alt=&quot;TC_webdeploy_19&quot; src=&quot;http://lh3.ggpht.com/-NvpMiV-5n0U/UYevvWTGZ1I/AAAAAAAAEbU/uyZNzvZQk-M/TC_webdeploy_19_thumb2.png?imgmax=800&quot; width=&quot;418&quot; height=&quot;265&quot;&gt;&lt;/a&gt; &lt;br /&gt;&lt;p&gt;If everything was correct, you should see the build log messages for all the files copied and if you open the deploy path, you should see the application files there. Job done. &lt;br /&gt;&lt;p&gt;&lt;a href=&quot;http://lh3.ggpht.com/-Pp3eWtBLBCI/UYevwfvWthI/AAAAAAAAEbg/yH3U3_2yRUI/s1600-h/TC_webdeploy_213.png&quot;&gt;&lt;img title=&quot;TC_webdeploy_21&quot; style=&quot;float: none; margin-left: auto; display: block; margin-right: auto&quot; alt=&quot;TC_webdeploy_21&quot; src=&quot;http://lh5.ggpht.com/-swzcIH8inq0/UYevxTtgJjI/AAAAAAAAEbk/9dFcyhVWym0/TC_webdeploy_21_thumb1.png?imgmax=800&quot; width=&quot;434&quot; height=&quot;115&quot;&gt;&lt;/a&gt; &lt;br /&gt;&lt;p&gt;&lt;a href=&quot;http://lh4.ggpht.com/-T8kgLj9FkP8/UYevzA-IpXI/AAAAAAAAEbw/0gAIJXcVDIU/s1600-h/TC_webdeploy_205.png&quot;&gt;&lt;img title=&quot;TC_webdeploy_20&quot; style=&quot;float: none; margin-left: auto; display: block; margin-right: auto&quot; alt=&quot;TC_webdeploy_20&quot; src=&quot;http://lh4.ggpht.com/-gHY9Zg3TlGE/UYev0XxHMWI/AAAAAAAAEb4/j42l0iV68J8/TC_webdeploy_20_thumb3.png?imgmax=800&quot; width=&quot;426&quot; height=&quot;423&quot;&gt;&lt;/a&gt; &lt;br /&gt;&lt;p&gt;If you haven’t realized it to this point, let me point out something quite important. What we have done in this step is actually deploy the application files, which is not the same as deploying our web application. This means that although we are able to build, test and copy the application files, we are not publishing our web app so it can be viewable on our web server. &lt;br /&gt;&lt;p&gt;In the next part, we will set up the IIS website configuration we need to deploy our web application package. &lt;br /&gt;&lt;p&gt;&lt;strong&gt;Next Article:&lt;/strong&gt; &lt;a href=&quot;http://blog.anthonybaker.me/2013/05/how-to-automate-app-deployment-in_6.html&quot;&gt;Part 2 – Configuring the Web Application in IIS7&lt;/a&gt;  </content><link rel='replies' type='application/atom+xml' href='http://blog.anthonybaker.me/feeds/7754839216532708247/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://blog.anthonybaker.me/2013/05/how-to-automate-app-deployment-in.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1811411750119502062/posts/default/7754839216532708247'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1811411750119502062/posts/default/7754839216532708247'/><link rel='alternate' type='text/html' href='http://blog.anthonybaker.me/2013/05/how-to-automate-app-deployment-in.html' title='How to Automate App Deployment in TeamCity (Part 1)'/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/00141462441551416511</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://lh6.ggpht.com/-3vP9_D6-XoI/UYevCHESzoI/AAAAAAAAEXk/2gvVmvv1-dE/s72-c/TC_webdeploy_02_thumb2.png?imgmax=800" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1811411750119502062.post-6261761944772217211</id><published>2013-05-06T12:40:00.001+01:00</published><updated>2013-05-06T12:40:47.482+01:00</updated><category scheme="http://www.blogger.com/atom/ns#" term=".NET"/><category scheme="http://www.blogger.com/atom/ns#" term="Agile"/><category scheme="http://www.blogger.com/atom/ns#" term="ASP.NET"/><category scheme="http://www.blogger.com/atom/ns#" term="C#"/><category scheme="http://www.blogger.com/atom/ns#" term="Continuous Deployment"/><category scheme="http://www.blogger.com/atom/ns#" term="Continuous Integration"/><category scheme="http://www.blogger.com/atom/ns#" term="Productivity"/><category scheme="http://www.blogger.com/atom/ns#" term="TeamCity"/><category scheme="http://www.blogger.com/atom/ns#" term="Tips"/><category scheme="http://www.blogger.com/atom/ns#" term="Visual Studio"/><title type='text'>How to Automate Unit Testing with TeamCity</title><content type='html'>&lt;p&gt;This is a multi-part, step-by-step guide, on how to automate software unit testing with TeamCity CI Server. This series is part of several other articles I have &lt;a href=&quot;http://blog.anthonybaker.me/search/label/Continuous%20Integration?max-results=20&quot;&gt;published about continuous integration&lt;/a&gt;.  &lt;p&gt;&lt;a href=&quot;http://www.jetbrains.com/teamcity/&quot;&gt;TeamCity&lt;/a&gt; is one of the favourite CI platforms for professional developers. It is accessible to everyone, supports most of the latest technology stacks, it is user-friendly and relatively easy to configure.  &lt;p&gt;In the last post about the subject, I shared a very detailed, step-by-step guide on how to automate your software builds with TeamCity on a remote server machine. Building your solutions on the server is just the first step. You need to setup a proper automated testing mechanism, and finally a robust automated deployment and distribution.  &lt;p&gt;This post is a step-by-step guide on how to set up your automated testing step. We will be using TeamCity CI process as in &lt;a href=&quot;http://blog.anthonybaker.me/search/label/Continuous%20Integration&quot;&gt;the previous posts&lt;/a&gt; and ASP.NET MVC 4. For the unit testing framework, we will be using MSTest, Microsoft’s unit testing suit.&amp;nbsp;&amp;nbsp; &lt;p&gt;This is the breakdown of the guide:  &lt;ul&gt; &lt;li&gt;&lt;a href=&quot;http://blog.anthonybaker.me/2013/05/how-to-automate-unit-testing-with.html&quot;&gt;Part 1: Creating the Sample Project (including unit test project)&lt;/a&gt;  &lt;li&gt;&lt;a href=&quot;http://blog.anthonybaker.me/2013/05/how-to-automate-unit-testing-with_6.html&quot;&gt;Part 2: Creating the TeamCity Build (building the unit test project)&lt;/a&gt;  &lt;li&gt;&lt;a href=&quot;http://blog.anthonybaker.me/2013/05/how-to-automate-unit-testing-with_6991.html&quot;&gt;Part 3: Configuring Automated Testing&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt; &lt;p&gt;The steps are more condensed, since I already covered a lot about TeamCity setups in previous articles. Hopefully, you are now familiar with the TeamCity interface, and are able to setup the configurations quicker.&lt;/p&gt; &lt;p&gt;Make sure to check out my posts on troubleshooting &lt;a href=&quot;http://blog.anthonybaker.me/2013/04/troubleshooting-msbuild-error-msb4019.html&quot;&gt;MSBuild&lt;/a&gt; and &lt;a href=&quot;http://blog.anthonybaker.me/2013/05/running-mstest-without-visual-studio.html&quot;&gt;MSTest&lt;/a&gt;. The easiest thing to do to avoid issues, is to have Visual Studio installed on your server. However, must of us prefer to have &lt;em&gt;vanilla&lt;/em&gt; server setups and certainly having a full Visual Studio installation on your server is overkill (although you might be required to do so because of licensing agreements).&lt;/p&gt; &lt;p&gt;I hope this series of articles help you and save you time. As usual, feel free to leave your comments and share your experience. Nothing better than a good tech conversation!&lt;/p&gt;  </content><link rel='replies' type='application/atom+xml' href='http://blog.anthonybaker.me/feeds/6261761944772217211/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://blog.anthonybaker.me/2013/05/how-to-automate-unit-testing-with_1119.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1811411750119502062/posts/default/6261761944772217211'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1811411750119502062/posts/default/6261761944772217211'/><link rel='alternate' type='text/html' href='http://blog.anthonybaker.me/2013/05/how-to-automate-unit-testing-with_1119.html' title='How to Automate Unit Testing with TeamCity'/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/00141462441551416511</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1811411750119502062.post-8498288797760957356</id><published>2013-05-06T12:34:00.001+01:00</published><updated>2013-05-06T12:44:04.738+01:00</updated><category scheme="http://www.blogger.com/atom/ns#" term=".NET"/><category scheme="http://www.blogger.com/atom/ns#" term="Agile"/><category scheme="http://www.blogger.com/atom/ns#" term="C#"/><category scheme="http://www.blogger.com/atom/ns#" term="Continuous Deployment"/><category scheme="http://www.blogger.com/atom/ns#" term="Continuous Integration"/><category scheme="http://www.blogger.com/atom/ns#" term="Productivity"/><category scheme="http://www.blogger.com/atom/ns#" term="Source Control"/><category scheme="http://www.blogger.com/atom/ns#" term="TeamCity"/><category scheme="http://www.blogger.com/atom/ns#" term="Tips"/><category scheme="http://www.blogger.com/atom/ns#" term="Visual Studio"/><title type='text'>How to Automate Unit Testing with TeamCity (Part 3)</title><content type='html'>&lt;p&gt;Please notice that this is a &lt;a href=&quot;http://blog.anthonybaker.me/2013/05/how-to-automate-unit-testing-with_1119.html&quot;&gt;multi-part, step-by-step guide&lt;/a&gt;, on how to automate builds in &lt;a href=&quot;http://www.jetbrains.com/teamcity/&quot;&gt;TeamCity CI Server&lt;/a&gt;. Follow the links for &lt;a href=&quot;http://blog.anthonybaker.me/2013/05/how-to-automate-unit-testing-with.html&quot;&gt;Part 1&lt;/a&gt; and &lt;a href=&quot;http://blog.anthonybaker.me/2013/05/how-to-automate-unit-testing-with_6.html&quot;&gt;Part 2&lt;/a&gt; of this series.&lt;/p&gt; &lt;p&gt;&lt;strong&gt;Part 3: Configuring Automated Testing&lt;/strong&gt; &lt;/p&gt; &lt;p&gt;Now that we have our MVC application and our corresponding test project building successfully, we can proceed to create our TEST step, where TeamCity will run our tests. Let&#39;s add now the Test step (&lt;a href=&quot;http://confluence.jetbrains.com/display/TCD7/MSTest&quot;&gt;here&lt;/a&gt; is the link to TeamCity MSTest short documentation).  &lt;p&gt;First, access the build configuration for the correct project (either the new MVC 2 app or the updated MVC app we created at the beginning).  &lt;ol&gt; &lt;li&gt;Login into your TeamCity server administration portal.  &lt;li&gt;Click on the Projects link, located in the top navigation menu. This will display the list of projects and the build status.  &lt;li&gt;Click on the build configuration you are adding the new build step. This will take you to the build&#39;s overview page.  &lt;li&gt;Once in the overview page, look for the &quot;Edit Configuration Settings&quot; on the top right corner, below the search box. Click on it to go to the build configuration page.&lt;a href=&quot;http://lh6.ggpht.com/-e1TVZzDLvU8/UYeUvVXtUzI/AAAAAAAAET4/XXS4Hs4jE7U/s1600-h/TC_build_web_843.png&quot;&gt;&lt;img title=&quot;TC_build_web_84&quot; style=&quot;float: none; margin-left: auto; display: block; margin-right: auto&quot; alt=&quot;TC_build_web_84&quot; src=&quot;http://lh6.ggpht.com/-VmNrcGNcRzs/UYeUwfBxnHI/AAAAAAAAET8/IhYbbePktdw/TC_build_web_84_thumb1.png?imgmax=800&quot; width=&quot;147&quot; height=&quot;240&quot;&gt;&lt;/a&gt;&lt;br&gt; &lt;li&gt;We are going to add a new build step, so click on the Build Step section on the right menu.&lt;br&gt;&lt;br&gt;&lt;a href=&quot;http://lh5.ggpht.com/--YH7T9uh0jg/UYeUxQZUaxI/AAAAAAAAEUE/mgAXPbipa7Y/s1600-h/TC_build_web_853.png&quot;&gt;&lt;img title=&quot;TC_build_web_85&quot; style=&quot;float: none; margin-left: auto; display: block; margin-right: auto&quot; alt=&quot;TC_build_web_85&quot; src=&quot;http://lh3.ggpht.com/-5V2XVN67zUg/UYeUyp-txHI/AAAAAAAAEUI/NIf8AiwL-ic/TC_build_web_85_thumb1.png?imgmax=800&quot; width=&quot;434&quot; height=&quot;135&quot;&gt;&lt;/a&gt;&lt;br&gt; &lt;li&gt;You will see the existing build steps for this configuration, which should display the &quot;BUILD&quot; step we created before to compile the solution. Now click on the &quot;Add build step&quot; to display the build step configuration wizard, were we will add the Test step.&lt;br&gt;&lt;br&gt;&lt;a href=&quot;http://lh6.ggpht.com/-IqMRcUq5A7c/UYeU0SNdFMI/AAAAAAAAEUU/FhimuqFYQzU/s1600-h/TC_build_web_864.png&quot;&gt;&lt;img title=&quot;TC_build_web_86&quot; style=&quot;float: none; margin-left: auto; display: block; margin-right: auto&quot; alt=&quot;TC_build_web_86&quot; src=&quot;http://lh4.ggpht.com/-P46wyM_3xUY/UYeU19sBNkI/AAAAAAAAEUY/vWFTzfPfEh8/TC_build_web_86_thumb2.png?imgmax=800&quot; width=&quot;379&quot; height=&quot;314&quot;&gt;&lt;/a&gt;&lt;br&gt; &lt;li&gt;Select MSTest from the Runner Type drop box.  &lt;li&gt;Enter the step name, in this case &quot;Test&quot;.  &lt;li&gt;Then you need to specify the path to MSTest.exe. You can choose from the default system paths or specify the path yourself. Try with the defaults depending on the Visual Studio version you are using. If that doesn&#39;t work, then try specifying the path yourself. Again, if the MSTest.exe file is not available on your TeamCity server, you might need to copy it from a machine who has it.  &lt;li&gt;Enter the list of assemblies that contain your tests. You can either add the relative path here, or you can actually enter a parameter, that we can then add in the build parameters, as we did for the build. The DLL file should be &quot;MvcApplication2.Tests.dll&quot; and should be located in the Big/Release folder of the compiled project. For now let&#39;s enter the name of the variable we will use. I used &quot;%env.TestAssemblies%&quot;.  &lt;li&gt;Leave the other spaces empty for now, and click the save button.&lt;/li&gt;&lt;/ol&gt; &lt;p&gt;&lt;a href=&quot;http://lh4.ggpht.com/-RPgdswEmnrI/UYeU23YdwAI/AAAAAAAAEUg/IX8q83GI2EM/s1600-h/TC_build_web_873.png&quot;&gt;&lt;img title=&quot;TC_build_web_87&quot; style=&quot;float: none; margin-left: auto; display: block; margin-right: auto&quot; alt=&quot;TC_build_web_87&quot; src=&quot;http://lh6.ggpht.com/-RzjRApdOBZs/UYeU4AQ2jBI/AAAAAAAAEUk/RhLiXZbnbQQ/TC_build_web_87_thumb1.png?imgmax=800&quot; width=&quot;434&quot; height=&quot;146&quot;&gt;&lt;/a&gt;  &lt;p&gt;You will be taken to the list of build steps, and now the new &quot;Test&quot; step should be there. Now, we need to enter the values of the new parameters we need for the Test step.  &lt;ol&gt; &lt;li&gt;Click on the Build Parameters section on the right panel.&lt;br&gt;&lt;br&gt;&lt;a href=&quot;http://lh6.ggpht.com/-HRD1EBvZMrY/UYeU5up4ikI/AAAAAAAAEUw/-DVUj9P2qJo/s1600-h/TC_build_web_883.png&quot;&gt;&lt;img title=&quot;TC_build_web_88&quot; style=&quot;float: none; margin-left: auto; display: block; margin-right: auto&quot; alt=&quot;TC_build_web_88&quot; src=&quot;http://lh4.ggpht.com/-H7saNnc8EIo/UYeU6of6pgI/AAAAAAAAEU4/WRodgJEoQCI/TC_build_web_88_thumb1.png?imgmax=800&quot; width=&quot;434&quot; height=&quot;150&quot;&gt;&lt;/a&gt;&lt;br&gt; &lt;li&gt;Notice that TeamCity already added the parameters we specified in the new build step, and now we are required to enter the values.&lt;br&gt;&lt;br&gt;&lt;a href=&quot;http://lh5.ggpht.com/-RZjgtiYqeno/UYeU7_VC-HI/AAAAAAAAEVA/-g_oNBrzEIY/s1600-h/TC_build_web_893.png&quot;&gt;&lt;img title=&quot;TC_build_web_89&quot; style=&quot;float: none; margin-left: auto; display: block; margin-right: auto&quot; alt=&quot;TC_build_web_89&quot; src=&quot;http://lh3.ggpht.com/-m8-TmervzU0/UYeU9MrjLVI/AAAAAAAAEVE/4AFn2aE2YzE/TC_build_web_89_thumb1.png?imgmax=800&quot; width=&quot;383&quot; height=&quot;240&quot;&gt;&lt;/a&gt;&lt;br&gt; &lt;li&gt;Let&#39;s add first the path to the test binary file. Click on the edit link for the &quot;env.TestAssemblies&quot; parameter, and add the assembly relative path. In my case it is &quot; web\MvcApplication2\MvcApplication2.Tests\bin\%env.Configuration%\MvcApplication2.Tests.dll &quot; because of my solution folder structure. Notice that I&#39;m using the %env.Configuration% which is actually another parameter that we can configure. For this build we already set that parameter to &quot;Release&quot;.  &lt;li&gt;Click save to add the new value.&lt;br&gt;&lt;br&gt;&lt;a href=&quot;http://lh6.ggpht.com/-pdE9RpJTwaM/UYeU-EdeUXI/AAAAAAAAEVM/fffG7kdJvzM/s1600-h/TC_build_web_903.png&quot;&gt;&lt;img title=&quot;TC_build_web_90&quot; style=&quot;float: none; margin-left: auto; display: block; margin-right: auto&quot; alt=&quot;TC_build_web_90&quot; src=&quot;http://lh6.ggpht.com/-Iajm73GeDPQ/UYeU_Izu-eI/AAAAAAAAEVU/f7x5aUbzmGI/TC_build_web_90_thumb1.png?imgmax=800&quot; width=&quot;381&quot; height=&quot;240&quot;&gt;&lt;/a&gt;&lt;br&gt; &lt;li&gt;Now do the same for the MSTest.exe path variable. Locate the app on the correct server path that matches the Visual Studio version. In my case, I&#39;m using Visual Studio 2012. On my dev machine, the app is located in the following path: C:\Program Files (x86)\Microsoft Visual Studio 11.0\Common7\IDE&lt;br&gt;On my current TeamCity version, the app is not available, so I need to copy it. Copy the files if needed.  &lt;li&gt;Now enter the correct server path to the MSBuild.test file and save the parameter value.&lt;br&gt;&lt;br&gt;&lt;a href=&quot;http://lh5.ggpht.com/-MEQ90yqs9hI/UYeVA14SSQI/AAAAAAAAEVc/5TdzRP8RQKk/s1600-h/TC_build_web_913.png&quot;&gt;&lt;img title=&quot;TC_build_web_91&quot; style=&quot;float: none; margin-left: auto; display: block; margin-right: auto&quot; alt=&quot;TC_build_web_91&quot; src=&quot;http://lh6.ggpht.com/-B6xgiWYalOg/UYeVCCLWubI/AAAAAAAAEVg/lzdFZ0Lc8Ak/TC_build_web_91_thumb1.png?imgmax=800&quot; width=&quot;434&quot; height=&quot;159&quot;&gt;&lt;/a&gt;&lt;br&gt; &lt;li&gt;Now we are ready to test our test step. &lt;/li&gt;&lt;/ol&gt; &lt;p&gt;You can actually run the build configuration manually from TeamCity, which is handy when creating and testing the configurations. Notice the &quot;Run&quot; button at the top right corner, below the search box. Let&#39;s run the configuration now.&lt;/p&gt; &lt;p&gt;&lt;a href=&quot;http://lh3.ggpht.com/-x78psesJ4zc/UYeVDqT1nII/AAAAAAAAEVs/rAO97DN6T9k/s1600-h/TC_build_web_1053.png&quot;&gt;&lt;img title=&quot;TC_build_web_105&quot; style=&quot;float: none; margin-left: auto; display: block; margin-right: auto&quot; alt=&quot;TC_build_web_105&quot; src=&quot;http://lh6.ggpht.com/-BWEOF4rfa7Y/UYeVE5DLx3I/AAAAAAAAEVw/Zeyl77ix5_c/TC_build_web_105_thumb1%25255B1%25255D.png?imgmax=800&quot; width=&quot;434&quot; height=&quot;101&quot;&gt;&lt;/a&gt;&lt;/p&gt; &lt;p&gt;Once you have you MSTest step setup and running, you can take advantage of TeamCity test views to get the most out of it.&lt;/p&gt; &lt;p&gt;The summary page will tell you if tests are executed or ignored:&lt;/p&gt; &lt;p&gt;&lt;a href=&quot;http://lh4.ggpht.com/-a_qYmOvWeqg/UYeVGL6s76I/AAAAAAAAEV4/mu_nyC4Dxy0/s1600-h/TC_build_web_973.png&quot;&gt;&lt;img title=&quot;TC_build_web_97&quot; style=&quot;float: none; margin-left: auto; display: block; margin-right: auto&quot; alt=&quot;TC_build_web_97&quot; src=&quot;http://lh5.ggpht.com/-C54euvO4rF8/UYeVHe8Mq2I/AAAAAAAAEV8/zzAO8wIRB3Y/TC_build_web_97_thumb1.png?imgmax=800&quot; width=&quot;434&quot; height=&quot;147&quot;&gt;&lt;/a&gt;&lt;/p&gt; &lt;p&gt;The overview summary will also quickly tell you if tests passed or not, and the status of the build.&lt;/p&gt; &lt;p&gt;&lt;br&gt;&lt;a href=&quot;http://lh4.ggpht.com/-H4icnn8LAWk/UYeVIivqVjI/AAAAAAAAEWI/RuUAUv1urHs/s1600-h/TC_build_web_1054.png&quot;&gt;&lt;img title=&quot;TC_build_web_105&quot; style=&quot;float: none; margin-left: auto; display: block; margin-right: auto&quot; alt=&quot;TC_build_web_105&quot; src=&quot;http://lh6.ggpht.com/-jqAuzxHWek0/UYeVJ3sbCWI/AAAAAAAAEWM/G0HK5b85LOM/TC_build_web_105_thumb1.png?imgmax=800&quot; width=&quot;434&quot; height=&quot;101&quot;&gt;&lt;/a&gt;&lt;/p&gt; &lt;p&gt;The output log of the build has detailed information for each step, including the run of the unit tests. If there are issues with the tests or the MSTest installation, you will see them here.&lt;/p&gt; &lt;p&gt;&lt;a href=&quot;http://lh4.ggpht.com/-9UwK1GVmeyg/UYeVLuiiUZI/AAAAAAAAEWY/-DYvj0VFX48/s1600-h/TC_build_web_1063.png&quot;&gt;&lt;img title=&quot;TC_build_web_106&quot; style=&quot;float: none; margin-left: auto; display: block; margin-right: auto&quot; alt=&quot;TC_build_web_106&quot; src=&quot;http://lh3.ggpht.com/-oADE7Rec7PA/UYeVM6j8nSI/AAAAAAAAEWc/_ULEyM0IxXE/TC_build_web_106_thumb1.png?imgmax=800&quot; width=&quot;434&quot; height=&quot;223&quot;&gt;&lt;/a&gt;&lt;/p&gt; &lt;p&gt;You can also check how long is each test taking.&lt;/p&gt; &lt;p&gt;&lt;a href=&quot;http://lh4.ggpht.com/-phorkEFOBpA/UYeVOPCsBEI/AAAAAAAAEWo/AwIUVr6IgBI/s1600-h/TC_build_web_1083.png&quot;&gt;&lt;img title=&quot;TC_build_web_108&quot; style=&quot;float: none; margin-left: auto; display: block; margin-right: auto&quot; alt=&quot;TC_build_web_108&quot; src=&quot;http://lh5.ggpht.com/-70Xk0kYKrRg/UYeVPatQnCI/AAAAAAAAEWs/wzvPFk-WixQ/TC_build_web_108_thumb1.png?imgmax=800&quot; width=&quot;434&quot; height=&quot;99&quot;&gt;&lt;/a&gt;&lt;/p&gt; &lt;p&gt;On top of that, you can see detailed information for each particular test, which might help in more advanced scenarios.&lt;/p&gt; &lt;p&gt;&lt;a href=&quot;http://lh4.ggpht.com/-j5f5K-xCrbA/UYeVQUProuI/AAAAAAAAEW0/bMAMddTf5dY/s1600-h/TC_build_web_1103.png&quot;&gt;&lt;img title=&quot;TC_build_web_110&quot; style=&quot;float: none; margin-left: auto; display: block; margin-right: auto&quot; alt=&quot;TC_build_web_110&quot; src=&quot;http://lh4.ggpht.com/-9o2QGlChraw/UYeVRqM-dtI/AAAAAAAAEW4/YkBSj5fRJuc/TC_build_web_110_thumb1.png?imgmax=800&quot; width=&quot;434&quot; height=&quot;195&quot;&gt;&lt;/a&gt;&lt;/p&gt; &lt;p&gt;If you have any issues running the unit tests, chances are that some dependency or binary associated with MSTest is not configured correctly. &lt;/p&gt; &lt;p&gt;&lt;a href=&quot;http://lh4.ggpht.com/-XFj-gxOQRt4/UYeVTO8ghjI/AAAAAAAAEW8/AljMLJHInGw/s1600-h/TC_build_web_793.png&quot;&gt;&lt;img title=&quot;TC_build_web_79&quot; style=&quot;float: none; margin-left: auto; display: block; margin-right: auto&quot; alt=&quot;TC_build_web_79&quot; src=&quot;http://lh5.ggpht.com/-MP0cQ4m7V5A/UYeVUa-k0cI/AAAAAAAAEXE/RPexQcPrxPc/TC_build_web_79_thumb1.png?imgmax=800&quot; width=&quot;434&quot; height=&quot;147&quot;&gt;&lt;/a&gt;&lt;/p&gt; &lt;p&gt;Make sure to &lt;a href=&quot;http://blog.anthonybaker.me/2013/05/running-mstest-without-visual-studio.html&quot;&gt;check my post on the subject&lt;/a&gt;. It will save you tons of time and wall-banging! &lt;/p&gt;  </content><link rel='replies' type='application/atom+xml' href='http://blog.anthonybaker.me/feeds/8498288797760957356/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://blog.anthonybaker.me/2013/05/how-to-automate-unit-testing-with_6991.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1811411750119502062/posts/default/8498288797760957356'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1811411750119502062/posts/default/8498288797760957356'/><link rel='alternate' type='text/html' href='http://blog.anthonybaker.me/2013/05/how-to-automate-unit-testing-with_6991.html' title='How to Automate Unit Testing with TeamCity (Part 3)'/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/00141462441551416511</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://lh6.ggpht.com/-VmNrcGNcRzs/UYeUwfBxnHI/AAAAAAAAET8/IhYbbePktdw/s72-c/TC_build_web_84_thumb1.png?imgmax=800" height="72" width="72"/><thr:total>1</thr:total></entry></feed>