<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss2full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><rss xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rssdatehelper="urn:rssdatehelper" xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#" xmlns:creativeCommons="http://backend.userland.com/creativeCommonsRssModule" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" version="2.0"><channel><title>Pete Brown's Blog (POKE 53280,0)</title><link>http://10rem.net</link><pubDate /><description>Pete Brown writes on a variety of topics from XAML with the Windows Runtime (WinRT), .NET programming using C#, WPF, Silverlight, XNA, and Windows Phone, Microcontroller programming with .NET Microframework, .NET Gadgeteer and even plain old C, to raising two children in the suburbs of Maryland, woodworking, CNC and generally "making physical stuff". Oh, and Pete loves retro technology, especially Commodore (C64 and C128). If the content interests you, please subscribe using the subscription link to the right of every page.</description><generator>umbraco</generator><language>en-us</language><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/rss+xml" href="http://feeds.feedburner.com/PeteBrown" /><feedburner:info uri="petebrown" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><geo:lat>39.004</geo:lat><geo:long>-76.65264</geo:long><creativeCommons:license>http://creativecommons.org/licenses/by-nc-sa/3.0/</creativeCommons:license><image><link>http://10rem.net</link><url>http://10rem.net/pub/blog/pmb_headshot_full_square_black_bg_color_150.jpg</url><title>Pete Brown</title></image><feedburner:feedFlare href="http://add.my.yahoo.com/rss?url=http%3A%2F%2Ffeeds.feedburner.com%2FPeteBrown" src="http://us.i1.yimg.com/us.yimg.com/i/us/my/addtomyyahoo4.gif">Subscribe with My Yahoo!</feedburner:feedFlare><feedburner:feedFlare href="http://www.newsgator.com/ngs/subscriber/subext.aspx?url=http%3A%2F%2Ffeeds.feedburner.com%2FPeteBrown" src="http://www.newsgator.com/images/ngsub1.gif">Subscribe with NewsGator</feedburner:feedFlare><feedburner:feedFlare href="http://feeds.my.aol.com/add.jsp?url=http%3A%2F%2Ffeeds.feedburner.com%2FPeteBrown" src="http://o.aolcdn.com/favorites.my.aol.com/webmaster/ffclient/webroot/locale/en-US/images/myAOLButtonSmall.gif">Subscribe with My AOL</feedburner:feedFlare><feedburner:feedFlare href="http://www.bloglines.com/sub/http://feeds.feedburner.com/PeteBrown" src="http://www.bloglines.com/images/sub_modern11.gif">Subscribe with Bloglines</feedburner:feedFlare><feedburner:feedFlare href="http://www.netvibes.com/subscribe.php?url=http%3A%2F%2Ffeeds.feedburner.com%2FPeteBrown" src="http://www.netvibes.com/img/add2netvibes.gif">Subscribe with Netvibes</feedburner:feedFlare><feedburner:feedFlare href="http://fusion.google.com/add?feedurl=http%3A%2F%2Ffeeds.feedburner.com%2FPeteBrown" src="http://buttons.googlesyndication.com/fusion/add.gif">Subscribe with Google</feedburner:feedFlare><feedburner:feedFlare href="http://www.pageflakes.com/subscribe.aspx?url=http%3A%2F%2Ffeeds.feedburner.com%2FPeteBrown" src="http://www.pageflakes.com/ImageFile.ashx?instanceId=Static_4&amp;fileName=ATP_blu_91x17.gif">Subscribe with Pageflakes</feedburner:feedFlare><feedburner:feedFlare href="http://www.plusmo.com/add?url=http%3A%2F%2Ffeeds.feedburner.com%2FPeteBrown" src="http://plusmo.com/res/graphics/fbplusmo.gif">Subscribe with Plusmo</feedburner:feedFlare><feedburner:feedFlare href="http://www.thefreedictionary.com/_/hp/AddRSS.aspx?http%3A%2F%2Ffeeds.feedburner.com%2FPeteBrown" src="http://img.tfd.com/hp/addToTheFreeDictionary.gif">Subscribe with The Free Dictionary</feedburner:feedFlare><feedburner:feedFlare href="http://www.bitty.com/manual/?contenttype=rssfeed&amp;contentvalue=http%3A%2F%2Ffeeds.feedburner.com%2FPeteBrown" src="http://www.bitty.com/img/bittychicklet_91x17.gif">Subscribe with Bitty Browser</feedburner:feedFlare><feedburner:feedFlare href="http://www.newsalloy.com/?rss=http%3A%2F%2Ffeeds.feedburner.com%2FPeteBrown" src="http://www.newsalloy.com/subrss3.gif">Subscribe with NewsAlloy</feedburner:feedFlare><feedburner:feedFlare href="http://www.live.com/?add=http%3A%2F%2Ffeeds.feedburner.com%2FPeteBrown" src="http://tkfiles.storage.msn.com/x1piYkpqHC_35nIp1gLE68-wvzLZO8iXl_JMledmJQXP-XTBOLfmQv4zhj4MhcWEJh_GtoBIiAl1Mjh-ndp9k47If7hTaFno0mxW9_i3p_5qQw">Subscribe with Live.com</feedburner:feedFlare><feedburner:feedFlare href="http://mix.excite.eu/add?feedurl=http%3A%2F%2Ffeeds.feedburner.com%2FPeteBrown" src="http://image.excite.co.uk/mix/addtomix.gif">Subscribe with Excite MIX</feedburner:feedFlare><feedburner:feedFlare href="http://download.attensa.com/app/get_attensa.html?feedurl=http%3A%2F%2Ffeeds.feedburner.com%2FPeteBrown" src="http://www.attensa.com/blogs/attensa/WindowsLiveWriter/BadgeredintoBadges_10C02/attensa_feed_button5.gif">Subscribe with Attensa for Outlook</feedburner:feedFlare><feedburner:feedFlare href="http://www.webwag.com/wwgthis.php?url=http%3A%2F%2Ffeeds.feedburner.com%2FPeteBrown" src="http://www.webwag.com/images/wwgthis.gif">Subscribe with Webwag</feedburner:feedFlare><feedburner:feedFlare href="http://www.podcastready.com/oneclick_bookmark.php?url=http%3A%2F%2Ffeeds.feedburner.com%2FPeteBrown" src="http://www.podcastready.com/images/podcastready_button.gif">Subscribe with Podcast Ready</feedburner:feedFlare><feedburner:feedFlare href="http://www.flurry.com/pushRssFeed.do?r=fb&amp;url=http%3A%2F%2Ffeeds.feedburner.com%2FPeteBrown" src="http://www.flurry.com/images/flurry_rss_logo2.gif">Subscribe with Flurry</feedburner:feedFlare><feedburner:feedFlare href="http://www.wikio.com/subscribe?url=http%3A%2F%2Ffeeds.feedburner.com%2FPeteBrown" src="http://www.wikio.com/shared/img/add2wikio.gif">Subscribe with Wikio</feedburner:feedFlare><feedburner:feedFlare href="http://www.dailyrotation.com/index.php?feed=http%3A%2F%2Ffeeds.feedburner.com%2FPeteBrown" src="http://www.dailyrotation.com/rss-dr2.gif">Subscribe with Daily Rotation</feedburner:feedFlare><feedburner:browserFriendly>Sorry Outlook users. The Google Feedburner USM option is broken. You get a second http in there which hoses outlook. Recommend manually adding feed to outlook using the address in the address bar above.</feedburner:browserFriendly><item><title>TechEd India, the India developer communities, and the Taj Mahal</title><author>Pete Brown	</author><link>http://feedproxy.google.com/~r/PeteBrown/~3/8KsJ1Q2RyB8/teched-india-the-india-developer-communities-and-the-taj-mahal</link><pubDate>Mon, 15 Apr 2013 05:07:41 GMT</pubDate><guid isPermaLink="false">http://10rem.net/blog/2013/04/15/teched-india-the-india-developer-communities-and-the-taj-mahal</guid><description>&lt;p&gt;In the second half of March, I traveled to India (Bangalore,
Delhi, and Pune) to speak at TechEd India and TechDays Delhi about
Windows 8 app development.&lt;/p&gt;

&lt;p&gt;&lt;a
href="http://10rem.net/media/87999/Windows-Live-Writer_TechEd-India-and-the-India-developer-com_8692_image_17.png"
 target="_blank"&gt;&lt;img title="image"
style="border-left-width: 0px; border-right-width: 0px; background-image: none; border-bottom-width: 0px; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-top-width: 0px"
 border="0" alt="image"
src="http://10rem.net/media/88004/Windows-Live-Writer_TechEd-India-and-the-India-developer-com_8692_image_thumb_2.png"
 width="650" height="715" /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I flew from Dulles International in VA to Charles De Gaulle in
France, where I met up with my colleague Nisha Singh, who had flown
from Seattle. From there, we flew Air France to Bangalore for
TechEd India Bangalore, then hopped a Jet Airways flight to New
Delhi for TechDays Delhi. While there, I took a car to Agra over
the weekend (more on that shortly). Then another Jet Airways flight
from Delhi to Pune for TechEd India Pune. And finally, a short
flight from Pune to Mumbai before the 16 1/2 hour flight from
Mumbai to Newark NJ, and the prop plane from Newark to Dulles.&lt;/p&gt;

&lt;h3&gt;What I had expected&lt;/h3&gt;

&lt;p&gt;Before I went away to India, my only experience with developers
in India was the lowest-price outsourcing companies I often had to
clean up after as a consultant, the outsourced call center tech
support folks I'll sell a kidney to avoid, and the numerous "send
me the codes" emails I get. So, I had some pre-conceived notions as
to what to expect from the developer community.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;I'm happy to say I was completely wrong.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The developer community in India is strong,
professional, and enthusiastic.&lt;/strong&gt; The people I met at TechEd
India were serious developers, building awesome apps and the usual
bevvy of line of business apps internal to companies. The developer
community in Pune, for example, is huge. The Pune .NET user group
community (PUG) has membership in the mid 4 digits. Yep. That's
pretty big. I was lucky to have been able to meet with the leads
(my flight was delayed, so I arrived at the hotel just in
time.)&lt;/p&gt;

&lt;p&gt;&lt;a
href="http://10rem.net/media/88009/Windows-Live-Writer_TechEd-India-and-the-India-developer-com_8692_image_14.png"
 target="_blank"&gt;&lt;img title="image"
style="border-left-width: 0px; border-right-width: 0px; background-image: none; border-bottom-width: 0px; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-top-width: 0px"
 border="0" alt="image"
src="http://10rem.net/media/88014/Windows-Live-Writer_TechEd-India-and-the-India-developer-com_8692_image_thumb_1.png"
 width="650" height="248" /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Photo by Vikram Pendse&lt;/em&gt;&lt;/p&gt;

&lt;h3&gt;TechEd and TechDays&lt;/h3&gt;

&lt;p&gt;TechEd India covered Bangalore and Pune. TechDays India happened
in Delhi in between the two.&lt;/p&gt;

&lt;p&gt;These events are smaller than TechEd US and TechEd Europe, but
the production values are just as high, with even a few extras
thrown in. A couple years ago, a monkey snuck in the back door of
an event hall and perched on top of the screen, watching the demos.
The original code monkey :)&lt;/p&gt;

&lt;p&gt;Here's the keynote hall for TechEd Bangalore. This was located
in an outside stand-alone building.&lt;/p&gt;

&lt;p&gt;&lt;img title="image"
style="border-left-width: 0px; border-right-width: 0px; background-image: none; border-bottom-width: 0px; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-top-width: 0px"
 border="0" alt="image"
src="http://10rem.net/media/88019/Windows-Live-Writer_TechEd-India-and-the-India-developer-com_8692_image_12.png"
 width="650" height="242" /&gt;&lt;/p&gt;

&lt;p&gt;TechEd Pune was even larger, located inside a hotel: the JW
Marriott Pune. Here's Nisha presenting to a full house:&lt;/p&gt;

&lt;p&gt;&lt;img title="image"
style="border-top: 0px; border-right: 0px; background-image: none; border-bottom: 0px; padding-top: 0px; padding-left: 0px; border-left: 0px; display: inline; padding-right: 0px"
 border="0" alt="image"
src="http://10rem.net/media/88024/Windows-Live-Writer_TechEd-India-and-the-India-developer-com_8692_image_28.png"
 width="650" height="366" /&gt;&lt;/p&gt;

&lt;p&gt;I think this was from my talk on XAML performance. I must have
been explaining something pretty serious when this photo was taken
:)&lt;/p&gt;

&lt;p&gt;&lt;a
href="http://10rem.net/media/88029/Windows-Live-Writer_TechEd-India-and-the-India-developer-com_8692_image_21.png"
 target="_blank"&gt;&lt;img title="Dig the Zelda / LOTR mashup shirt."
style="border-left-width: 0px; border-right-width: 0px; background-image: none; border-bottom-width: 0px; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-top-width: 0px"
 border="0" alt="Dig the Zelda / LOTR mashup shirt."
src="http://10rem.net/media/88034/Windows-Live-Writer_TechEd-India-and-the-India-developer-com_8692_image_thumb_4.png"
 width="650" height="324" /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;(This photo from Bangalore was shared to me without
attribution. If you are the photographer, please let me
know.)&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;The "Stump the Speaker" panels were my favorite part. In this
photo, from Bangalore, I had so much Q&amp;amp;A at the end of my
session, I arrived late to the panel, and got the honorary tall
seat.&lt;/p&gt;

&lt;p&gt;&lt;img title="image"
style="border-left-width: 0px; border-right-width: 0px; background-image: none; border-bottom-width: 0px; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-top-width: 0px"
 border="0" alt="image"
src="http://10rem.net/media/88039/Windows-Live-Writer_TechEd-India-and-the-India-developer-com_8692_image_24.png"
 width="650" height="349" /&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Photograph by Microsoft, India&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;TechDays Delhi was a free event, so it attracted a lot of local
students. I was pleased to speak with this audience, as getting our
tools, and our guidance on quality apps in front of them is really
important. Students are responsible for some of the most exciting
startups and some of the coolest apps.&lt;/p&gt;

&lt;p&gt;Finally, one thing that I thought was done extremely well at
TechEd India was the keynote by four children. Take a moment and
watch it now.&lt;/p&gt;

&lt;div
id="scid:5737277B-5D6D-4f48-ABFC-DD9C333F4C5D:885a58c5-5bb7-4d11-ac22-b54e25fe0df3"
 class="wlWriterEditableSmartContent"
style="float: none; padding-bottom: 0px; padding-top: 0px; padding-left: 0px; margin: 0px; display: inline; padding-right: 0px"&gt;
&lt;div id="3ef2c6ed-982c-4033-b4b3-298208fe0adc"
style="margin: 0px; padding: 0px; display: inline;"&gt;&lt;a
href="http://www.youtube.com/watch?v=wiuY97sv8UA"
target="_new"&gt;&lt;img
src="http://10rem.net/media/88044/Windows-Live-Writer_TechEd-India-and-the-India-developer-com_8692_video5e5285468bf7.jpg"
 style="border-style: none" galleryimg="no"
onload="var downlevelDiv = document.getElementById('3ef2c6ed-982c-4033-b4b3-298208fe0adc'); downlevelDiv.innerHTML = &amp;quot;&amp;lt;div&amp;gt;&amp;lt;object width=\&amp;quot;645\&amp;quot; height=\&amp;quot;362\&amp;quot;&amp;gt;&amp;lt;param name=\&amp;quot;movie\&amp;quot; value=\&amp;quot;http://www.youtube.com/v/wiuY97sv8UA?hl=en&amp;amp;hd=1\&amp;quot;&amp;gt;&amp;lt;\/param&amp;gt;&amp;lt;embed src=\&amp;quot;http://www.youtube.com/v/wiuY97sv8UA?hl=en&amp;amp;hd=1\&amp;quot; type=\&amp;quot;application/x-shockwave-flash\&amp;quot; width=\&amp;quot;645\&amp;quot; height=\&amp;quot;362\&amp;quot;&amp;gt;&amp;lt;\/embed&amp;gt;&amp;lt;\/object&amp;gt;&amp;lt;\/div&amp;gt;&amp;quot;;"
 alt="" /&gt;&lt;/a&gt;&lt;/div&gt;

&lt;div style="width:645px;clear:both;font-size:.8em"&gt;The must-see
demo from TechEd India&lt;/div&gt;
&lt;/div&gt;

&lt;p&gt;My session decks for the TechEd events are available here: &lt;a
title="https://india.msteched.com/"
href="https://india.msteched.com/"&gt;https://india.msteched.com/&lt;/a&gt;
Click on "downloads" at the top right. My three sessions were:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Addressing Performance in Windows 8 XAML apps (day 1, architect
track)&lt;/li&gt;

&lt;li&gt;Tips and Techniques for Building High Quality Windows 8 apps
(day 2, Windows 8 track)&lt;/li&gt;

&lt;li&gt;Smoothly Navigating the Windows Store Submission,
Certification, and Listing Process (day 2, Windows 8 track)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Recordings will be up soon, as I understand it. I'd recommend
watching Bangalore, as Pune had to squeeze sessions to account for
keynote overrun, so the sessions are a bit compressed.&lt;/p&gt;

&lt;h3&gt;PCs and phones: an observation&lt;/h3&gt;

&lt;p&gt;Here are some interesting observations about PCs, phones, and
tablets in India:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Almost all developers have a smart phone&lt;/li&gt;

&lt;li&gt;iPhone is not the number one smart phone, or even the number
two smart phone in India, despite their advertising there. 

&lt;ul&gt;
&lt;li&gt;&lt;a
href="http://articles.economictimes.indiatimes.com/2012-01-24/news/30659420_1_nokia-smartphone-feature-phones"&gt;
Look who's doing well in India&lt;/a&gt; and more recent news&amp;nbsp; &lt;a
href="http://ibnlive.in.com/news/nokia-still-the-indian-mobile-phone-market-leader-with-218-pc-share/382650-11.html"&gt;
here&lt;/a&gt;&lt;/li&gt;

&lt;li&gt;I saw only a single iPhone at the events, and not a single
iPad. This includes the event the students attended.&lt;/li&gt;

&lt;li&gt;Total phone ownership is approximately 12x any sort of PC or
Mac ownership&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;

&lt;li&gt;For car drivers and non-IT folks, that little indestructible
Nokia was what I usually saw. Feature phones still dominate in
India.&lt;/li&gt;

&lt;li&gt;I saw a number of high end Android tablets and some Surface w/
Windows RT&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This data all came from the local folks and my personal
observations, so use it only as anecdotal data. I did see a number
of Windows Phones out in the wild, outside of the events. The HTC
8x in blue seems to be quite popular there (this also happens to be
the phone I own).&lt;/p&gt;

&lt;p&gt;Students generally get new PCs before they go to university, but
(anecdotally) rarely have them available to them at earlier
grades.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;All of this helps to show why India is more of a
producer of PC software than a consumer.&lt;/strong&gt;&lt;/p&gt;

&lt;h3&gt;Apps&lt;/h3&gt;

&lt;p&gt;There are some really well-designed apps which have come out of
India. I'm not going to list them all in this post, but here are a
couple I found compelling:&lt;/p&gt;

&lt;p&gt;Sweet 'N' Spicy&lt;/p&gt;

&lt;p&gt;&lt;img title="image"
style="border-left-width: 0px; border-right-width: 0px; background-image: none; border-bottom-width: 0px; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-top-width: 0px"
 border="0" alt="image"
src="http://10rem.net/media/88049/Windows-Live-Writer_TechEd-India-and-the-India-developer-com_8692_image_6.png"
 width="650" height="300" /&gt;&lt;/p&gt;

&lt;p&gt;And Tarla Dalal&lt;/p&gt;

&lt;p&gt;&lt;img title="image"
style="border-left-width: 0px; border-right-width: 0px; background-image: none; border-bottom-width: 0px; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-top-width: 0px"
 border="0" alt="image"
src="http://10rem.net/media/88054/Windows-Live-Writer_TechEd-India-and-the-India-developer-com_8692_image_9.png"
 width="650" height="366" /&gt;&lt;/p&gt;

&lt;p&gt;The fact that I absolutely love Indian food played no part in me
picking these two specific apps. Honestly ;) You can find them both
listed in most regions, including the US Windows Store.&lt;/p&gt;

&lt;h3&gt;Being a tourist&lt;/h3&gt;

&lt;p&gt;There is a lot to see in India, especially near New Delhi.&lt;/p&gt;

&lt;p&gt;I arranged ahead of time to have a driver pick me up at 4am at
the hotel on Saturday with instructions to bring me to the Taj
Mahal and the Red Fort of Agra, and to make sure it was a driver
who could speak and understand English. He then drove me the 4+
hours from Delhi to Agra. Once we arrived in Agra, he picked up my
tour guide for the day (I didn't know I was getting one, but this
turned out to be a good idea). They tried to stop for breakfast at
a place where the guide obviously had some business interests, but
it was too early, I convinced them to skip breakfast and to just
bring me right to the Taj. (I left at 4am, but if taking the
Delhi-&amp;gt;Agra highway, I recommend leaving even earlier, like
3:30, depending on traffic etc.)&lt;/p&gt;

&lt;p&gt;The Taj Mahal was everything I had hoped it would be, and much
larger. It always looks so small in the photos.&lt;/p&gt;

&lt;p&gt;&lt;a href="http://www.flickr.com/photos/psychlist1972/"&gt;&lt;img
title="image"
style="border-top: 0px; border-right: 0px; background-image: none; border-bottom: 0px; padding-top: 0px; padding-left: 0px; border-left: 0px; display: inline; padding-right: 0px"
 border="0" alt="image"
src="http://10rem.net/media/88059/Windows-Live-Writer_TechEd-India-and-the-India-developer-com_8692_image20.png"
 width="651" height="383" /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The Taj Mahal is also full of people looking to tap your wallet
a little. Just know it's all part of the experience and keep lots
of rupees on you. The photos, for example, will run you 10,000 to
20,000 rupee. They say it's 100 rupee per photo, but then take
close to 20 of them. Don't worry about whether or not you got the
best price or someone else was able to negotiate off 100 rupee more
than you. These folks are providing a service to tourists and by
western standards, it's pretty inexpensive regardless.&lt;/p&gt;

&lt;p&gt;The whole time the tour guide brought me around the Taj, he was
talking up the marble inlay. This is interesting, but understand
it's also them priming the pump for the trip to the state-owned
marble shop afterwards.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;TIP&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;When you're brought to the marble shop, you'll be face to face
with one or more extremely talented sales people. In my case, they
sat me down with hot tea and showed expensive marble tops first,
and afterwards the inexpensive stuff. Then, it was off to jewelry,
and then textiles, and (I insisted they leave this part out) rugs.
In the case of the marble, unless you really want a table top, just
ask to be shown the small things like statues, coasters, etc.
Seriously, these sales people are good. I've had less pressure at a
car dealer.&lt;/p&gt;

&lt;p&gt;Some of the marble goods are nice, though, especially at the
state-owned/certified shops. The one I was brought to was an
emporium. I tried negotiating for a bit, but they wouldn't do any
better than a small discount off the top. From speaking with
others, the emporiums are generally fixed price. The one I went to
was Cottage Industries, but oddly it also seems to go by the name
Cauvery Emporium, as I had receipts from both places for my
purchases inside the same building.&lt;/p&gt;

&lt;p&gt;Before going in the shop, set a firm budget in your mind, and
convert it to rupees so you don't have to do the math in front of
the sales people. That's the best way to avoid the pressure as you
can firmly say something is outside your budget. Remember, these
folks are good.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;a href="http://www.flickr.com/photos/psychlist1972/"
target="_blank"&gt;&lt;img title="image"
style="border-top: 0px; border-right: 0px; background-image: none; border-bottom: 0px; padding-top: 0px; padding-left: 0px; border-left: 0px; display: inline; padding-right: 0px"
 border="0" alt="image"
src="http://10rem.net/media/88064/Windows-Live-Writer_TechEd-India-and-the-India-developer-com_8692_image_37.png"
 width="650" height="325" /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="http://www.flickr.com/photos/psychlist1972/"
target="_blank"&gt;&lt;img title="image"
style="border-top: 0px; border-right: 0px; background-image: none; border-bottom: 0px; padding-top: 0px; padding-left: 0px; border-left: 0px; display: inline; padding-right: 0px"
 border="0" alt="image"
src="http://10rem.net/media/88069/Windows-Live-Writer_TechEd-India-and-the-India-developer-com_8692_image_40.png"
 width="650" height="490" /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The trip around the Taj Mahal took around 2 1/2 hours. I was
there nice and early, before the majority of the crows. The photo
above was taken on the way out as the place filled up. It was also
getting pretty hot by then.&lt;/p&gt;

&lt;p&gt;It also gets pretty hazy as the day goes on. Air pollution is
pretty bad, as is the dust.&lt;/p&gt;

&lt;p&gt;&lt;a href="http://www.flickr.com/photos/psychlist1972/"&gt;&lt;img
title="Did I mention the air pollution?"
style="border-top: 0px; border-right: 0px; background-image: none; border-bottom: 0px; padding-top: 0px; padding-left: 0px; border-left: 0px; display: inline; padding-right: 0px"
 border="0" alt="Did I mention the air pollution?"
src="http://10rem.net/media/88074/Windows-Live-Writer_TechEd-India-and-the-India-developer-com_8692_image_20.png"
 width="650" height="289" /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;After the trip to the Taj, we stopped for breakfast (extremely
inexpensive compared to the hotels, and very good) and then headed
over to the red fort.&lt;/p&gt;

&lt;p&gt;&lt;a href="http://www.flickr.com/photos/psychlist1972/"&gt;&lt;img
title="image"
style="border-top: 0px; border-right: 0px; background-image: none; border-bottom: 0px; padding-top: 0px; padding-left: 0px; border-left: 0px; display: inline; padding-right: 0px"
 border="0" alt="image"
src="http://10rem.net/media/88079/Windows-Live-Writer_TechEd-India-and-the-India-developer-com_8692_image_3.png"
 width="651" height="273" /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This part of the Agra fort had a fire on the inside, set by
invaders. That burned all the painting off the walls, and left a
smoky colored marble. Note the translucent marble near the
windows.&lt;/p&gt;

&lt;p&gt;&lt;a href="http://www.flickr.com/photos/psychlist1972/"&gt;&lt;img
title="Translucent marble"
style="border-top: 0px; border-right: 0px; background-image: none; border-bottom: 0px; padding-top: 0px; padding-left: 0px; border-left: 0px; display: inline; padding-right: 0px"
 border="0" alt="Translucent marble"
src="http://10rem.net/media/88084/Windows-Live-Writer_TechEd-India-and-the-India-developer-com_8692_image_31.png"
 width="650" height="404" /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The "forts" in India are the castles. Don't let the name "fort"
put you off, as these aren't US-style forts, and are fully worth
the trip. The Agra Fort, in particular, is impressive both in
construction and in history. Read up a bit on it before
visiting.&lt;/p&gt;

&lt;p&gt;&lt;a href="http://www.flickr.com/photos/psychlist1972/"&gt;&lt;img
title="image"
style="border-top: 0px; border-right: 0px; background-image: none; border-bottom: 0px; padding-top: 0px; padding-left: 0px; border-left: 0px; display: inline; padding-right: 0px"
 border="0" alt="image"
src="http://10rem.net/media/88089/Windows-Live-Writer_TechEd-India-and-the-India-developer-com_8692_image26_1.png"
 width="651" height="296" /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="http://www.flickr.com/photos/psychlist1972/"&gt;&lt;img
title="Where Shah Jahan was imprisoned"
style="border-top: 0px; border-right: 0px; background-image: none; border-bottom: 0px; padding-top: 0px; padding-left: 0px; border-left: 0px; display: inline; padding-right: 0px"
 border="0" alt="Where Shah Jahan was imprisoned"
src="http://10rem.net/media/88094/Windows-Live-Writer_TechEd-India-and-the-India-developer-com_8692_image_34.png"
 width="650" height="433" /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The drive back from Agra took quite a bit longer due to traffic.
It was over 5 hours as I recall. We also had to dodge, of all
things, stray cattle lying in the gutter in Agra. Imagine stray
cats and dogs in another nation and then add like 600-800 pounds.
They were just there, lying down in the street, in the middle of
the city. It was amusing mostly in that it seemed so normal. :)&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;TIP&lt;/strong&gt;&lt;br /&gt;
Don't get hung up over whether or not you tipped too much for your
tourguide, driver, etc. Tip what you think is fair for the service
you received, and if you go by Western standards, you'll almost
certainly be tipping more than enough. Keep small bills and coins
around for the dude in the bathroom who won't let you out without a
tip.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;While in Delhi, I also took an evening tour "Sound and lights
show" of the Delhi Fort. Seeing the Agra Fort afterwards helped &lt;a
href="http://en.wikipedia.org/wiki/Shah_jahan"&gt;complete the
story&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="http://www.flickr.com/photos/psychlist1972/"&gt;You can
find all of my photos from this trip on my Flickr page.&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;Poverty&lt;/h3&gt;

&lt;p&gt;Before I point out a few helpful tips, I wanted to mention the
poverty. I've seen slum-level poverty in the United States, but I
was unprepared for the type of poverty I saw on the outskirts of
the cities in India. Even the Delhi Airport had slum villages right
up against the walls. These villages are made from piles of debris,
trash, old signs, mud, dung and more. Basically, if it can be used
to put a roof over one's head, it will be. I was never able to get
a good photo as cars/planes never stop near the slums. The only
real photos I got were these washed out hazy ones (did I mention
the pollution?) from inside the plane at Mumbai Airport (click for
larger version). These were at least made of building materials.
Many were just hobbit holes in what appeared to be piles of trash
held together by mud along the side of the road.&lt;/p&gt;

&lt;p&gt;&lt;a
href="http://www.flickr.com/photos/psychlist1972/8650227247/in/set-72157633245850265"
 target="_blank"&gt;&lt;img title="image"
style="border-top: 0px; border-right: 0px; background-image: none; border-bottom: 0px; padding-top: 0px; padding-left: 0px; border-left: 0px; display: inline; padding-right: 0px"
 border="0" alt="image"
src="http://10rem.net/media/88099/Windows-Live-Writer_TechEd-India-and-the-India-developer-com_8692_image_45.png"
 width="650" height="229" /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a
href="http://www.flickr.com/photos/psychlist1972/8650227175/in/set-72157633245850265"
 target="_blank"&gt;&lt;img title="image"
style="border-top: 0px; border-right: 0px; background-image: none; border-bottom: 0px; padding-top: 0px; padding-left: 0px; border-left: 0px; display: inline; padding-right: 0px"
 border="0" alt="image"
src="http://10rem.net/media/88104/Windows-Live-Writer_TechEd-India-and-the-India-developer-com_8692_image_46.png"
 width="650" height="238" /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;You'll also see a LOT of buildings in various stages of
construction. Many seem abandoned before completion. Many are
concrete skeletons with exposed rebar on top, and bamboo
scaffolding. Such is the nature of a developing country.&lt;/p&gt;

&lt;p&gt;&lt;a
href="http://www.bing.com/images/search?q=mumbai+slums&amp;amp;FORM=HDRSC2"
 target="_blank"&gt;Here is an image search showing more of these
slums&lt;/a&gt;.&lt;/p&gt;

&lt;h3&gt;Some advice for fellow westerners visiting India&lt;/h3&gt;

&lt;p&gt;I've been to a number of places in Europe, but this was my first
time this far east. The culture really is quite different from
European culture, so be prepared.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Dress&lt;/li&gt;

&lt;li style="list-style: none"&gt;
&lt;ul&gt;
&lt;li&gt;Purchase really light cotton khakis before your visit. I
brought jeans (too hot) and shorts (not recommended, as only kids
wear shorts)&lt;/li&gt;

&lt;li&gt;Women should dress conservatively, especially at monuments. The
Taj Mahal grounds include an active mosque and a lot of local and
short shorts or low tops will likely get you unwanted attention
from folks who think you're being disrespectful or tacky, or from
people who want a closer look.&lt;/li&gt;

&lt;li&gt;Men, if you intend to visit any mosque, arms and legs must be
covered.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;

&lt;li&gt;Food&lt;/li&gt;

&lt;li style="list-style: none"&gt;
&lt;ul&gt;
&lt;li&gt;Unlike the US, don't expect to find water/snack vendors all
over the place. If you have Type 1 or other blood sugar control
issues, be sure to carry stuff with you, but also know that Taj
Mahal will not allow most of this in the monument&lt;/li&gt;

&lt;li&gt;If you don't like Indian food, you're really missing out.
:)&lt;/li&gt;

&lt;li&gt;Always drink bottled water. Even in the hotels, stick to
bottled. Avoid salads which have been washed in local water. Even
my India friends who have been away from India for a while found
the local water really upset their stomachs&lt;/li&gt;

&lt;li style="list-style: none"&gt;
&lt;ul&gt;
&lt;li&gt;Brush with bottled water as well.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;

&lt;li&gt;Purchasing&lt;/li&gt;

&lt;li style="list-style: none"&gt;
&lt;ul&gt;
&lt;li&gt;If you look western, expect the starting price for everything
on the street to be at least 2-3x what locals would even consider
paying. Negotiate what you can, but also keep in mind that this is
a relatively poor country, and you're doing your part to help out
in a fair exchange of goods and cash. Don't get taken, but don't
worry about nickels and dimes.&lt;/li&gt;

&lt;li&gt;Keep rupees on you. Outside of the western-style hotels, most
places are cash-only. Keep lots of small amounts too, as you'll
find 100 INR is far too large a tip for some things, and too small
for others.&lt;/li&gt;

&lt;li&gt;Use a credit card, not your debit card. You want some
protection.&lt;/li&gt;

&lt;!--EndFragment--&gt;&lt;/ul&gt;
&lt;/li&gt;

&lt;li&gt;Airports and Travel&lt;/li&gt;

&lt;li style="list-style: none"&gt;
&lt;ul&gt;
&lt;li&gt;Airport screenings segregate male / female&lt;/li&gt;

&lt;li&gt;Most airports require that you have a printed boarding pass
before you can even enter the airport. Some will take a PDF on your
phone, but that varies. Web check-in at the hotel.&lt;/li&gt;

&lt;li&gt;Use a hired car and driver. Don't even think of driving
yourself. Hired cars (from a reputable company - I used Car Club)
are very inexpensive. My whole trip to Agra (4am to 8pm) was around
$150 US plus tips. Considering I monopolized a driver from 4am to
8pm, that's pretty good. Trips between hotels and airports
typically ran around $15-$20 USD.&lt;/li&gt;

&lt;li&gt;If you use a video camera, realize that the monuments require
you to pay extra to bring them in, and some like the Taj Mahal,
make you pay to lock them up before entering the monument proper
(they do not allow them on the grounds). I use my video camera as
my still camera, but that didn't matter. Smart phones are fine as
it doesn't seem that Indian officials have caught on to the idea
that smart phones are also video cameras.&lt;/li&gt;

&lt;li&gt;If going on a business trip, make a point of seeing the
monuments close to where you're staying. There are lots of great
things around India, and the beauty can be breathtaking.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/PeteBrown?a=8KsJ1Q2RyB8:wRO53unOH7A:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PeteBrown?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/PeteBrown?a=8KsJ1Q2RyB8:wRO53unOH7A:I9og5sOYxJI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PeteBrown?d=I9og5sOYxJI" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/PeteBrown?a=8KsJ1Q2RyB8:wRO53unOH7A:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PeteBrown?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/PeteBrown?a=8KsJ1Q2RyB8:wRO53unOH7A:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PeteBrown?i=8KsJ1Q2RyB8:wRO53unOH7A:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/PeteBrown?a=8KsJ1Q2RyB8:wRO53unOH7A:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PeteBrown?i=8KsJ1Q2RyB8:wRO53unOH7A:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/PeteBrown?a=8KsJ1Q2RyB8:wRO53unOH7A:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PeteBrown?i=8KsJ1Q2RyB8:wRO53unOH7A:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/PeteBrown/~4/8KsJ1Q2RyB8" height="1" width="1"/&gt;</description><feedburner:origLink>http://10rem.net/blog/2013/04/15/teched-india-the-india-developer-communities-and-the-taj-mahal</feedburner:origLink></item><item><title>Maker Geek Roundup 018 for 3/12/2013</title><author>Pete Brown	</author><link>http://feedproxy.google.com/~r/PeteBrown/~3/K0i4XXZv1iY/maker-geek-roundup-018-for-3-12-2013</link><pubDate>Tue, 12 Mar 2013 06:25:58 GMT</pubDate><guid isPermaLink="false">http://10rem.net/blog/2013/03/12/maker-geek-roundup-018-for-3-12-2013</guid><description>&lt;p&gt;The Maker Geek Roundup aggregates information of interest to
makers everywhere. Topics include .NET Micro Framework, Arduino,
AVR and other MCUs, CNC, 3d Printing, Robotics, Microsoft Robotics
Studio, Electronics, General Maker stuff, and more. If you have
something interesting you've done or have run across, or you blog
regularly on the topics included here, please send me the URL and
brief description via the &lt;a href="http://10rem.net/contact"&gt;contact link&lt;/a&gt;.&lt;/p&gt;

&lt;h3&gt;3d Printing, CAD/CAM/CNC&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a
href="http://gizmodo.com/5989386/dude-has-75-percent-of-his-skull-replaced-by-3d+printed-replica"&gt;
Dude Has 75 Percent of His Skull Replaced By 3D-Printed Replica&lt;/a&gt;
(Gizmodo)&lt;/li&gt;

&lt;li&gt;&lt;a
href="http://www.kickstarter.com/projects/re3d/gigabot-3d-printing-this-is-huge"&gt;
Gigabot 3D Printing: This is Huge! by re:3D&lt;/a&gt; (Kickstarter)&lt;/li&gt;

&lt;li&gt;&lt;a
href="http://blog.ultimaker.com/2013/03/08/bio-coloured-pla/"&gt;Ecologically
colored PLA&lt;/a&gt; (Ultimaker)&lt;/li&gt;

&lt;li&gt;&lt;a
href="http://blog.ultimaker.com/2013/01/23/stop-motion-video-of-twizzler-by-artist-dizingof/"&gt;
Stop-motion video of 'Twizzler' by artist Dizingof&lt;/a&gt;
(Ultimaker)&lt;/li&gt;

&lt;li&gt;&lt;a
href="http://www.grassrootsengineering.com/blog/2013/03/06/wednesday-march-9th-1983-839pm-pst/"&gt;
The 30th Anniversary of the first ever 3d printed part&lt;/a&gt; (Grass
Roots Engineering)&lt;/li&gt;

&lt;li&gt;&lt;a
href="http://blog.ponoko.com/2013/02/27/3d-printing-how-far-weve-come/"&gt;
3D Printing: How Far We've Come&lt;/a&gt; (Ponoko)&lt;/li&gt;

&lt;li&gt;&lt;a
href="http://voxelfab.com/blog/2013/03/the-importance-of-the-lyman-extruder-filamaker-recyclebot-and-filabot-to-3d-printing/"&gt;
The importance of the Lyman Extruder, Filamaker, Recyclebot and
Filabot to 3D printing&lt;/a&gt; (VoxelFab)&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;Laser Cutting&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a
href="http://blog.ponoko.com/2013/03/07/rapid-3d-construction-with-laserorigami/"&gt;
Rapid 3D construction with LaserOrigami&lt;/a&gt; (Ponoko)&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;NETMF (.NET Gadgeteer and Netduino)&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a
href="http://www.robmiles.com/journal/2013/3/11/red-nose-door-of-mystery.html"&gt;
Red Nose Day Door of Mystery&lt;/a&gt; (robmiles.com)&lt;/li&gt;

&lt;li&gt;&lt;a
href="http://www.tinyclr.it/a-simple-yet-versatile-gdi-library-for-netduino.aspx"&gt;
A simple yet versatile GDI library for Netduino&lt;/a&gt;
(TinyCLR.it)&lt;/li&gt;

&lt;li style="list-style: none"&gt;
&lt;ul&gt;
&lt;li&gt;Also &lt;a
href="http://www.tinyclr.it/the-gdi-library-for-netduino-targets-a-lcd-module.aspx"&gt;
The GDI library for Netduino targets a LCD module&lt;/a&gt;&lt;/li&gt;

&lt;li&gt;Also &lt;a
href="http://www.tinyclr.it/animation-with-the-gdi-library-for-netduino.aspx"&gt;
Animation with the GDI library for Netduino&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;

&lt;li&gt;&lt;a
href="http://www.robmiles.com/journal/2013/3/8/gadgeteering-at-tech-days.html"&gt;
Gadgeteering at Tech Days&lt;/a&gt; (robmiles.com)&lt;/li&gt;

&lt;li&gt;&lt;a
href="http://highfieldtales.wordpress.com/2013/02/17/a-playable-invaders-like-game-with-a-netduino-plus-2/"&gt;
A playable Invaders-like game with a Netduino Plus 2&lt;/a&gt; (Highfield
Tales)&lt;/li&gt;

&lt;li&gt;&lt;a
href="http://www.tinyclr.it/sure-electronics-led-matrix-driver-for-netduino.aspx"&gt;
Sure Electronics Led-matrix driver for Netduino&lt;/a&gt;
(TinyCLR.it)&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;Arduino and AVR&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a
href="http://blog.ponoko.com/2013/03/11/the-ultimate-arduino-based-cat-litter-box/"&gt;
The ultimate Arduino-based cat litter box&lt;/a&gt; (Ponoko)&lt;/li&gt;

&lt;li&gt;&lt;a
href="http://blog.ponoko.com/2013/03/04/a-diy-digital-camera-made-with-cardboard-and-an-arduino/"&gt;
A DIY digital camera made with cardboard and an Arduino&lt;/a&gt;
(Ponoko)&lt;/li&gt;

&lt;li&gt;&lt;a
href="http://arduino.cc/blog/2013/03/06/wearable-soundscape/"&gt;Wearable
soundscape from Canada&lt;/a&gt; (Arduino Blog)&lt;/li&gt;

&lt;li&gt;&lt;a
href="http://tronixstuff.wordpress.com/2013/02/26/arduino-tutorial-15a-rfid-with-innovations-id-20/"&gt;
Arduino tutorial 15a - RFID with Innovations ID-20&lt;/a&gt;
(tronixstuff)&lt;/li&gt;

&lt;li&gt;&lt;a
href="http://tronixstuff.wordpress.com/2013/03/11/arduino-and-ktm-s1201-lcd-modules/"&gt;
Arduino and KTM-S1201 LCD modules&lt;/a&gt; (Arduino Blog)&lt;/li&gt;

&lt;li&gt;&lt;a
href="http://www.makermasters.com/duinobot-v1-2-child-proof-arduino-brain/"&gt;
Duinobot V1.2 Childproof Arduino Brain&lt;/a&gt; (Bill Griggs)&lt;/li&gt;

&lt;li&gt;&lt;a
href="http://blog.makezine.com/2013/03/11/arduino-helicopter-game-2/"&gt;
MAKE | Arduino Helicopter Game&lt;/a&gt; (Kevin Loney)&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;Other Microcontrollers (PIC, ARM, Raspberry PI, Parallax,
more)&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a
href="http://www.mikroe.com/news/view/565/new-usb-host-library-released/"&gt;
News - New USB Host Library Released!&lt;/a&gt; (MikroElektronika)&lt;/li&gt;

&lt;li&gt;&lt;a
href="http://www.bot-thoughts.com/2013/03/graphic-lcds-for-data-bus.html"&gt;
Graphic LCDs for Data Bus&lt;/a&gt; (Bot Thoughts)&lt;/li&gt;

&lt;li&gt;&lt;a
href="http://www.slickstreamer.info/2013/02/how-to-install-cloud-9-on-raspberry-pi.html"&gt;
How to install Cloud 9 on raspberry pi&lt;/a&gt; (slickstreamer)&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;General Electronics and Hardware Hacking&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.youtube.com/watch?v=sIV0icM_Ujo"
target="_blank"&gt;Eurocircuits - how to make a 4-layer PCB&lt;/a&gt;
(YouTube) (great manufacturing walkthrough)&lt;/li&gt;

&lt;li&gt;&lt;a
href="http://jaanus.tech-thing.org/small-projects/pcb-preheater-blazing-track/"&gt;
PCB Preheater - Blazing Track&lt;/a&gt; (Jaanus Kalde)&lt;/li&gt;

&lt;li&gt;&lt;a
href="http://www.bot-thoughts.com/2013/03/furby-disassembly-part-1.html"&gt;
Furby Disassembly: Part 1&lt;/a&gt; (Bot Thoughts)&lt;/li&gt;

&lt;li&gt;&lt;a
href="http://www.seeedstudio.com/blog/2013/03/06/4-layer-fusion-pcb-service-is-available-at-seeed/"&gt;
4-layer Fusion PCB Service is Available at Seeed!!&lt;/a&gt; (Seeed
Studio)&lt;/li&gt;

&lt;li&gt;&lt;a
href="http://blog.ianlee.info/2013/01/smd-manual-part-picker.html"&gt;SMD
Manual Part Picker&lt;/a&gt; (Software &amp;amp; Sawdust)&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;Robots, *Copters, and Robotics Studio&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a
href="http://robotgrrl.com/blog/2013/03/05/robobrrd-3d-printed-pieces-open-source-hardware/"&gt;
RoboBrrd 3D Printed Pieces&lt;/a&gt; (RobotGrrl)&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;General Maker&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a
href="http://blog.ponoko.com/2013/02/26/a-functional-mini-plotter-made-with-cardboard-glue-wire-and-tape/"&gt;
A functional mini plotter made with cardboard, glue, wire, and
tape&lt;/a&gt; (Ponoko)&lt;/li&gt;

&lt;li&gt;&lt;a
href="http://www.stephenhobley.com/blog/2013/03/04/a-goatskin-drum-bodhran/"&gt;
…a Goatskin drum (Bodhrán)&lt;/a&gt; (Steve Hobley)&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;Synthesizers, Music, and MIDI/OSC&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a
href="http://createdigitalmusic.com/2013/03/what-ni-was-teasing-monark-minimoog-modeling-synth-remade-battery-in-new-komplete/"&gt;
What NI Was Teasing: Monark Minimoog-Modeling Synth, Remade
Battery, in New Komplete&lt;/a&gt; (Peter Kirn)&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;Retro Computing and Commodore!&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a
href="http://amazingdiy.wordpress.com/2013/02/08/c64-s-video-mod/"&gt;C64
S-video mod&lt;/a&gt; (My Diy Blog)&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;Random stuff&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a
href="http://www.youtube.com/watch?v=4SIT0aU_FRw&amp;amp;feature=player_embedded"&gt;
Electric fence experiment ends as expected&lt;/a&gt; (YouTube)&lt;/li&gt;

&lt;li&gt;&lt;a
href="http://www.youtube.com/watch?v=hjCrOPFaQL4&amp;amp;feature=player_embedded"&gt;
Epic Fire Prank!!&lt;/a&gt; (YouTube)&lt;/li&gt;

&lt;li&gt;&lt;a
href="http://www.pleated-jeans.com/2013/03/08/meanwhile-in-heaven-19-pics/"&gt;
Meanwhile…In Heaven (19 Pics)&lt;/a&gt; (Pleated Jeans)&lt;/li&gt;
&lt;/ul&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/PeteBrown?a=K0i4XXZv1iY:tuHjVNSqe7c:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PeteBrown?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/PeteBrown?a=K0i4XXZv1iY:tuHjVNSqe7c:I9og5sOYxJI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PeteBrown?d=I9og5sOYxJI" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/PeteBrown?a=K0i4XXZv1iY:tuHjVNSqe7c:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PeteBrown?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/PeteBrown?a=K0i4XXZv1iY:tuHjVNSqe7c:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PeteBrown?i=K0i4XXZv1iY:tuHjVNSqe7c:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/PeteBrown?a=K0i4XXZv1iY:tuHjVNSqe7c:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PeteBrown?i=K0i4XXZv1iY:tuHjVNSqe7c:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/PeteBrown?a=K0i4XXZv1iY:tuHjVNSqe7c:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PeteBrown?i=K0i4XXZv1iY:tuHjVNSqe7c:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/PeteBrown/~4/K0i4XXZv1iY" height="1" width="1"/&gt;</description><feedburner:origLink>http://10rem.net/blog/2013/03/12/maker-geek-roundup-018-for-3-12-2013</feedburner:origLink></item><item><title>Disney Fairies: The evolution of hub screen box layout in Windows Store apps</title><author>Pete Brown	</author><link>http://feedproxy.google.com/~r/PeteBrown/~3/-1ZcVGEyRyw/disney-fairies-the-evolution-of-hub-screen-box-layout-in-windows-store-apps</link><pubDate>Thu, 07 Mar 2013 20:37:33 GMT</pubDate><guid isPermaLink="false">http://10rem.net/blog/2013/03/07/disney-fairies-the-evolution-of-hub-screen-box-layout-in-windows-store-apps</guid><description>&lt;p&gt;A large number of apps in the Windows Store follow the "bunch of
boxes in a GridView" approach to the hub screen.&lt;/p&gt;

&lt;p&gt;This can work in some cases, but I encourage developers and
designers to move beyond that look, and consider either evolutions
of it, or completely different approaches.&lt;/p&gt;

&lt;h3&gt;Boxes 1.0&lt;/h3&gt;

&lt;p&gt;For many, the basic box layout is a very workable layout. Here's
one of my essential apps: YouTube+ (viewed on my desktop).&lt;/p&gt;

&lt;p&gt;&lt;a
href="http://10rem.net/media/87880/Windows-Live-Writer_Disney-Fairies-An-interesting-take-on-bu_D78D_image_2.png"
 target="_blank"&gt;&lt;img src="http://10rem.net/media/87885/Windows-Live-Writer_Disney-Fairies-An-interesting-take-on-bu_D78D_image_thumb.png" width="652" height="408" alt="image" border="0" style="border-top: 0px; border-right: 0px; background-image: none; border-bottom: 0px; padding-top: 0px; padding-left: 0px; border-left: 0px; display: inline; padding-right: 0px"/&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The UI us very conservative but very functional. I don't think
anyone would disagree with me if I said it wasn't "beautiful" or
particularly creative, but as a third-party app that can't
necessarily use first-party branding, it works.&lt;/p&gt;

&lt;p&gt;As an aside, I love the snapped view for the YouTube+ app. It's
very workable, especially if you use it mostly for listening, as I
do.&lt;/p&gt;

&lt;h3&gt;Boxes 2.0&lt;/h3&gt;

&lt;p&gt;Some, such as the Xbox games, improve on the stock templates by
having a more varied layout. For example:&lt;/p&gt;

&lt;p&gt;&lt;a
href="http://10rem.net/media/87890/Windows-Live-Writer_Disney-Fairies-An-interesting-take-on-bu_D78D_image_4.png"
 target="_blank"&gt;&lt;img src="http://10rem.net/media/87895/Windows-Live-Writer_Disney-Fairies-An-interesting-take-on-bu_D78D_image_thumb_1.png" width="650" height="104" alt="image" border="0" style="border-top: 0px; border-right: 0px; background-image: none; border-bottom: 0px; padding-top: 0px; padding-left: 0px; border-left: 0px; display: inline; padding-right: 0px"/&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Many of the Xbox games follow this style. It's a great way to
show all the game styles, your achievements, and more. It requires
more effort to create this type of layout, as each of the groups
contains a different layout with different data. This is truly a
hub screen.&lt;/p&gt;

&lt;h3&gt;Boxes 3.0&lt;/h3&gt;

&lt;p&gt;Here's another example, from Adera. Though almost identical in
concept to the earlier Xbox games like Minesweeper, the hub screen
is more complex, requiring support for different chapters, and
in-app purchases. I usually play Adera on my Surface, but here's
what it looks like on my desktop. The background is textured, so
wouldn't look correct assembled into a single image.&lt;/p&gt;

&lt;p&gt;&lt;a
href="http://10rem.net/media/87900/Windows-Live-Writer_Disney-Fairies-An-interesting-take-on-bu_D78D_image_10.png"
 target="_blank"&gt;&lt;img src="http://10rem.net/media/87905/Windows-Live-Writer_Disney-Fairies-An-interesting-take-on-bu_D78D_image_thumb_4.png" width="215" height="134" alt="image" border="0" style="border-top: 0px; border-right: 0px; background-image: none; border-bottom: 0px; padding-top: 0px; padding-left: 0px; border-left: 0px; display: inline; padding-right: 0px"/&gt;&lt;/a&gt;&amp;nbsp;&lt;a
href="http://10rem.net/media/87910/Windows-Live-Writer_Disney-Fairies-An-interesting-take-on-bu_D78D_image_12.png"
 target="_blank"&gt;&lt;img src="http://10rem.net/media/87915/Windows-Live-Writer_Disney-Fairies-An-interesting-take-on-bu_D78D_image_thumb_5.png" width="215" height="134" alt="image" border="0" style="border-top: 0px; border-right: 0px; background-image: none; border-bottom: 0px; padding-top: 0px; padding-left: 0px; border-left: 0px; display: inline; padding-right: 0px"/&gt;&lt;/a&gt;&amp;nbsp;&lt;a
href="http://10rem.net/media/87920/Windows-Live-Writer_Disney-Fairies-An-interesting-take-on-bu_D78D_image_14.png"
 target="_blank"&gt;&lt;img src="http://10rem.net/media/87925/Windows-Live-Writer_Disney-Fairies-An-interesting-take-on-bu_D78D_image_thumb_6.png" width="215" height="134" alt="image" border="0" style="border-top: 0px; border-right: 0px; background-image: none; border-bottom: 0px; padding-top: 0px; padding-left: 0px; border-left: 0px; display: inline; padding-right: 0px"/&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The colors are darker, fitting the Adera theme. The use of
in-game images also really helps make the layout more appealing.
Note how we're still using boxes, but the overall interface is more
stylized and, to my eyes, more beautiful.&lt;/p&gt;

&lt;h3&gt;Boxes 4.0&lt;/h3&gt;

&lt;p&gt;That brings me to the game I installed yesterday. The latest
game to come through is Disney Fairies Hidden Treasures. As the
father of a 4 year old girl and a 7 year old boy, both of whom love
the Disney Fairy cartoons and franchise, I immediately purchased
it. When I ran it, I was pleasantly surprised by the hub screen.
Here, take a look:&lt;/p&gt;

&lt;p&gt;&lt;a
href="http://10rem.net/media/87930/Windows-Live-Writer_Disney-Fairies-An-interesting-take-on-bu_D78D_image_8.png"
 target="_blank"&gt;&lt;img src="http://10rem.net/media/87935/Windows-Live-Writer_Disney-Fairies-An-interesting-take-on-bu_D78D_image_thumb_3.png" width="320" height="200" alt="image" border="0" style="border-top: 0px; border-right: 0px; background-image: none; border-bottom: 0px; padding-top: 0px; padding-left: 0px; border-left: 0px; display: inline; padding-right: 0px"/&gt;&lt;/a&gt;&amp;nbsp;&lt;a
href="http://10rem.net/media/87940/Windows-Live-Writer_Disney-Fairies-An-interesting-take-on-bu_D78D_image_6.png"
 target="_blank"&gt;&lt;img src="http://10rem.net/media/87945/Windows-Live-Writer_Disney-Fairies-An-interesting-take-on-bu_D78D_image_thumb_2.png" width="320" height="200" alt="image" border="0" style="border-top: 0px; border-right: 0px; background-image: none; border-bottom: 0px; padding-top: 0px; padding-left: 0px; border-left: 0px; display: inline; padding-right: 0px"/&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This is a game which, I assume, is primarily targeted to young
children, typically girls. The gameplay is simple enough that young
kids will certainly enjoy it. As part of that targeting (and
overall branding), the design team has taken the boxes hub to the
next level. Check out the styling of the hub screen in this
close-up:&lt;/p&gt;

&lt;p&gt;&lt;img src="http://10rem.net/media/87950/Windows-Live-Writer_Disney-Fairies-An-interesting-take-on-bu_D78D_image_29.png" width="650" height="195" alt="image" border="0" style="border-top: 0px; border-right: 0px; background-image: none; border-bottom: 0px; padding-top: 0px; padding-left: 0px; border-left: 0px; display: inline; padding-right: 0px"/&gt;&lt;/p&gt;

&lt;p&gt;Yes, there's adornment around those boxes. However, it
completely works as it's minimal and appropriate both to the brand
and to the game itself. The layout follows well-known Windows
design patterns, but takes it to the next level.&lt;/p&gt;

&lt;p&gt;&lt;img src="http://10rem.net/media/87955/Windows-Live-Writer_Disney-Fairies-An-interesting-take-on-bu_D78D_image_28.png" width="310" height="147" alt="image" border="0" style="border-top: 0px; border-right: 0px; background-image: none; border-bottom: 0px; padding-top: 0px; padding-left: 0px; border-left: 0px; display: inline; padding-right: 0px"/&gt;&lt;/p&gt;

&lt;p&gt;You can see how the branding was brought forward from the game
tile.&lt;/p&gt;

&lt;p&gt;Now look at the same general section from Adera. You can make
out the same elements, but in a less stylized fashion. A stock font
is used, and the game itself doesn't have any real branding at the
top. Note also the use of color in the Fairies navigation chevrons
as compared to Adera. You can see how the use of color (and shading
in that case) helps those stand out. Adera does use some background
styling which, in this case, makes all the difference in helping
set the mood for the game.&lt;/p&gt;

&lt;p&gt;&lt;img src="http://10rem.net/media/87960/Windows-Live-Writer_Disney-Fairies-An-interesting-take-on-bu_D78D_image_27.png" width="650" height="177" alt="image" border="0" style="border-top: 0px; border-right: 0px; background-image: none; border-bottom: 0px; padding-top: 0px; padding-left: 0px; border-left: 0px; display: inline; padding-right: 0px"/&gt;&lt;/p&gt;

&lt;p&gt;It would be nice if they used the Adera branding at the top to
better tie in with their tile:&lt;/p&gt;

&lt;p&gt;&lt;img src="http://10rem.net/media/87965/Windows-Live-Writer_Disney-Fairies-An-interesting-take-on-bu_D78D_image_26.png" width="312" height="153" alt="image" border="0" style="border-top: 0px; border-right: 0px; background-image: none; border-bottom: 0px; padding-top: 0px; padding-left: 0px; border-left: 0px; display: inline; padding-right: 0px"/&gt;&lt;/p&gt;

&lt;p&gt;And now, a similar concept from Minesweeper. This is one of the
very early games, and it follows a conservative Windows style.
There's no texture in the background, and the fonts and branding
are all stock. Of course, this is Minesweeper, not something that
you'd expect to be heavily stylized or branded.&lt;/p&gt;

&lt;p&gt;&lt;img src="http://10rem.net/media/87970/Windows-Live-Writer_Disney-Fairies-An-interesting-take-on-bu_D78D_image_25.png" width="650" height="212" alt="image" border="0" style="border-top: 0px; border-right: 0px; background-image: none; border-bottom: 0px; padding-top: 0px; padding-left: 0px; border-left: 0px; display: inline; padding-right: 0px"/&gt;&lt;/p&gt;

&lt;p&gt;Do you see the progression between the three?&lt;/p&gt;

&lt;h3&gt;Some take-aways&lt;/h3&gt;

&lt;p&gt;I wouldn't expect everyone to have Disney-class design support
for their apps. However, there are some things we can take away
here.&lt;/p&gt;

&lt;p&gt;1. Branding is very important. Bring your brand forward in the
game, and be consistent in its use. Matching the branding used on
your tile is a good idea.&lt;/p&gt;

&lt;p&gt;2. Using a custom font as part of your branding can really work.
It needs to integrate with your branding and with the app as a
whole, but it doesn't need to be limited to Segoe UI.&lt;/p&gt;

&lt;p&gt;3. You don't need to limit yourself to box layout. If you do,
however, you can use additional design elements to help that layout
pop. Keep in mind that the content is the most important, so be
careful that the adornment is not the focus.&lt;/p&gt;

&lt;p&gt;4. Sometimes, a background texture can help change the UI from
something boring to something very interesting. You need to use
good design sense when doing this, and not slap any old darkened
stock photo in the background.&lt;/p&gt;

&lt;p&gt;Oh, and unofficial take-away number 5: if you have younger
children who like Disney Fairies, pick up Disney Fairies Hidden
Treasures. It's a great game for them.&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/PeteBrown?a=-1ZcVGEyRyw:hx4ap0A6g7A:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PeteBrown?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/PeteBrown?a=-1ZcVGEyRyw:hx4ap0A6g7A:I9og5sOYxJI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PeteBrown?d=I9og5sOYxJI" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/PeteBrown?a=-1ZcVGEyRyw:hx4ap0A6g7A:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PeteBrown?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/PeteBrown?a=-1ZcVGEyRyw:hx4ap0A6g7A:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PeteBrown?i=-1ZcVGEyRyw:hx4ap0A6g7A:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/PeteBrown?a=-1ZcVGEyRyw:hx4ap0A6g7A:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PeteBrown?i=-1ZcVGEyRyw:hx4ap0A6g7A:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/PeteBrown?a=-1ZcVGEyRyw:hx4ap0A6g7A:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PeteBrown?i=-1ZcVGEyRyw:hx4ap0A6g7A:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/PeteBrown/~4/-1ZcVGEyRyw" height="1" width="1"/&gt;</description><feedburner:origLink>http://10rem.net/blog/2013/03/07/disney-fairies-the-evolution-of-hub-screen-box-layout-in-windows-store-apps</feedburner:origLink></item><item><title>Do you really know what your kids are doing online and in games?</title><author>Pete Brown	</author><link>http://feedproxy.google.com/~r/PeteBrown/~3/nN_6KXSbXSI/do-you-really-know-what-your-kids-are-doing-online-and-in-games</link><pubDate>Fri, 01 Mar 2013 05:29:14 GMT</pubDate><guid isPermaLink="false">http://10rem.net/blog/2013/03/01/do-you-really-know-what-your-kids-are-doing-online-and-in-games</guid><description>&lt;p&gt;It seems that each generation is exposed to more mature or
serious situations at earlier ages than the one before it. There
are a lot more ways for kids to get in trouble online than just
running afoul of the creepily mustachioed basement dweller you see
on "that" episode of Special Victims Unit.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;tl;dr: A child was banned from Xbox live and that caused me to
investigate some things which, in turn, surfaced a lot of other
stuff. Unless you're really watching closely, you almost certainly
don't know what your kids are doing online. Kids are clever.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;I know a child, not my own, who is 9 years old. Let's call him
"Nine". He's a great kid, has excellent conduct scores in school
(never once has he had to be disciplined in school). He's fairly
shy and generally keeps to himself. He's really a great kid.&lt;/p&gt;

&lt;p&gt;One thing he does like doing is playing on his Xbox 360. He has
a neighbor friend who is 10 years old, who sometimes comes over and
plays on the same console. We'll call him "Ten". This 10 year old
"wants to be a hacker" when he grows up. He also has a 360 at his
house. From the sounds of it, he's also poorly supervised when it
comes to computer and gaming time.&lt;/p&gt;

&lt;p&gt;Recently, Ten manually updated his Xbox gamer profile and
changed his tenure and some of the avatar's appearance. At the same
time, he helped Nine change his avatar's appearance. Now,
understand that to do this, you have to go to some of the seedier
corners of the Internet and use tools which download your gamer
profile, update the file, and then re-upload it. The use of these
tools violate the Xbox terms of service and are considered an
offense worthy of a permanent ban.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Yep. Both kids were banned until 12/31/9999. 9999.
Harsh, I know, especially if you are an otherwise good 9 year
old.&lt;/strong&gt; That said, as bad as I feel for Nine, I completely
support it.&lt;/p&gt;

&lt;p&gt;&lt;img src="http://10rem.net/media/87758/Windows-Live-Writer_Safety-Your-children-your-childrens-frie_10B6F_image_15.png" width="550" height="309" alt="Bringing down the ban hammer" border="0" style="border-top: 0px; border-right: 0px; background-image: none; border-bottom: 0px; padding-top: 0px; padding-left: 0px; border-left: 0px; display: inline; padding-right: 0px"/&gt;&lt;/p&gt;

&lt;p&gt;They got a rather vague email from the &lt;a
href="http://www.youtube.com/watch?v=bhz9eTcL1h0&amp;amp;feature=player_embedded#!"
 target="_blank"&gt;Policy &amp;amp; Enforcement Team&lt;/a&gt; telling them
about the ban. Through the same channels as everyone else, I was
able to ask support for some (slight) clarification as to what
happened. That's how I found out they had modded the gamer profile.
(BTW, take a moment and watch that linked video. It's really
good)&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;As part of that ban, both kids completely forfeit their
remaining Xbox gold balance. (As well as everything else associated
with their gamer tag, the least of which are their &lt;a
href="http://channel9.msdn.com/Forums/Coffeehouse/Visual-Studio-Achievements-theyre-not-Xbox-live-right"
 target="_blank"&gt;Cheevos&lt;/a&gt;).&lt;/strong&gt; For Nine, that means the
$50 of birthday and Christmas money he saved up to get that 12
month subscription is now gone. Wasted. I'm not sure if he had
downloaded content or games, but I believe that gets lost as
well.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;My 7 year old son uses the Xbox under my Live account. After
seeing how the ban process works, you can bet that will stop once
he starts playing Xbox by himself, especially now that my gamer tag
reaches into my Windows 8 machines and my Windows Phone. There's a
lot to loose if you break the rules.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Mom of Nine had no real idea what happened, so I helped her
investigate. As part of this, I was able to see both Nine and Ten's
gamer history using public sites on the Internet (this is easily
discoverable online for accounts which don't keep it private). I
saw some things in there that made me sit back and question what
these kids are being allowed to play.&lt;/p&gt;

&lt;p&gt;That got me to thinking about what games are appropriate and how
much parents should watch what their children do. I also had a long
talk with Mom-of-Nine about some of these topics. This post is a
bunch of loosely related "stuff" that came up as part of this. I'll
start with games, but then get into privacy and security.&lt;/p&gt;

&lt;h3&gt;Game Appropriateness and Ratings&lt;/h3&gt;

&lt;p&gt;In both children's gamer tags I found, among a number of other
games, the following:&lt;/p&gt;

&lt;p&gt;&lt;img src="http://10rem.net/media/87763/Windows-Live-Writer_Safety-Your-children-your-childrens-frie_10B6F_image_31.png" width="284" height="400" alt="image" border="0" style="border-top: 0px; border-right: 0px; background-image: none; border-bottom: 0px; padding-top: 0px; padding-left: 0px; border-left: 0px; display: inline; padding-right: 0px"/&gt;&amp;nbsp;&lt;img src="http://10rem.net/media/87768/Windows-Live-Writer_Safety-Your-children-your-childrens-frie_10B6F_image_32.png" width="284" height="400" alt="image" border="0" style="border-top: 0px; border-right: 0px; background-image: none; border-bottom: 0px; padding-top: 0px; padding-left: 0px; border-left: 0px; display: inline; padding-right: 0px"/&gt;&lt;/p&gt;

&lt;p&gt;Both are rated M for mature, &lt;a
href="http://www.esrb.org/index-js.jsp" target="_blank"&gt;which
technically means 17+&lt;/a&gt;. The problem is, many otherwise fun and
arguably harmless games are rated M for mature, &lt;strong&gt;so the
on-box rating has become an almost meaningless mark&lt;/strong&gt; when
it comes to evaluating games for pre-teen, tween, and teen
kids.&lt;/p&gt;

&lt;p&gt;&lt;a href="http://www.esrb.org/index-js.jsp" target="_blank"&gt;&lt;img src="http://10rem.net/media/87773/Windows-Live-Writer_Safety-Your-children-your-childrens-frie_10B6F_image_18.png" width="300" height="415" alt="Not sure how many &amp;quot;mature&amp;quot; 17 year olds you know, but play along." border="0" style="border-top: 0px; border-right: 0px; background-image: none; border-bottom: 0px; padding-top: 0px; padding-left: 0px; border-left: 0px; display: inline; padding-right: 0px"/&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The real issue is that the Mature rating is a large bucket under
which a lot of stuff gets thrown. The Mature rating isn't alone in
this. For example, I let my 7 year old son and 4 year old daughter
together play the various LEGO games on the Xbox (Star Wars, Harry
Potter, Batman) -- those fall into the 10+ category.&lt;/p&gt;

&lt;p&gt;There are a number of sites online which do parental reviews of
video games. Some of them have agendas and biases, and some get
overrun by kids posting as adults, so you really just need to find
a site which fits with your own values and which appears to have
relevant reviews. My kids are not yet at an age where I've had to
research using one of these sites, but they're out there. For
example, here's the parents &lt;a
href="http://www.commonsensemedia.org/game-reviews/halo-4"
target="_blank"&gt;review for Halo 4&lt;/a&gt; and here's the &lt;a
href="http://www.commonsensemedia.org/game-reviews/grand-theft-auto-iv"
 target="_blank"&gt;review for Grand Theft Auto IV&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;I'm not going to make a value judgment for you, nor do I
want to start a discussion about what is appropriate for children
as we all have our own rules.&lt;/strong&gt; I'm also not trying to make
a martyr out of&amp;nbsp; particular game here, or suggest games can
corrupt or anything like that. Both games are considered excellent
games overall. That said, most parents put more effort into
selecting movies than in video games. (How many would let a 10 year
old see Goodfellas? A Tarantino film? Showgirls? Yet many are fine
with games of equivalent nature.)&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Halo is very violent (4 out of 5 points) and involves a lot of
battles typically in a "shoot the guy over there" first person
shooter style. The only sexual content is the scant cladding on one
character (1 out of 5 points for sex). There's no foul language or
drinking, drugs, or smoking.&lt;/li&gt;

&lt;li&gt;GTA IV is violent (5 out of 5 points), but also contains
"adult" language (5 out of 5 points), drug references (as part of
core gameplay - it got 5 out of 5 points here), calling police and
then shooting them when they arrive, killing drug dealers, and a
fair bit of sexual content (scored 4out of 5 points in that area),
prostitution, lap dances, porn shops etc. The violence itself is at
more of a "personal" level.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Again, both of them have the same rating. Depending upon what
you find concerning, you may disallow both, or just one of them, or
maybe you're fine with both (one parent of a 9yo on the reviews
said GTA IV is fine for her son). Regardless, you can't tell that
by looking at it on a store shelf; you need to read reviews of the
game. Interestingly, the reviews generally agree that GTA IV is
appropriate for 13+ and Halo 4 for 12+. Both of those are a far cry
from 17+.&lt;/p&gt;

&lt;p&gt;I'm of the camp which doesn't believe video games turn kids into
killers, but I also don't think that means one should expose their
kids to violence, sex, drugs, etc. before they are mature enough to
understand what they're looking at, and make appropriate real-life
decisions.&lt;/p&gt;

&lt;p&gt;As parents, we need to understand the nature and content of a
game before we purchase or allow the purchase of those games.
&lt;strong&gt;More importantly, we need to discuss the themes of the
games and get our children to think about what messages the games
are sending them. We often do this for television, games are even
more immersive.&lt;/strong&gt;&lt;/p&gt;

&lt;h3&gt;Dangerous Activity&lt;/h3&gt;

&lt;p&gt;There are lots of places where you can get in trouble online.
From viruses and malware to chatting with basement neckbeards, to
posting inappropriate photos of themselves. Kids are naturally
curious and also feel like they are impervious to harm. Combine
this with perceived anonymity of the Internet, and you can get into
all sorts of bad spots.&lt;/p&gt;

&lt;h4&gt;Dialogs&lt;/h4&gt;

&lt;p&gt;Teach your child not to click-through dialogs without reading
them (if they are old enough) or having you read them. Unless you
enjoy malware, extra toolbars, or other scary stuff on the
machines, this is essential.&lt;/p&gt;

&lt;p&gt;&lt;img src="http://10rem.net/media/87778/Windows-Live-Writer_Safety-Your-children-your-childrens-frie_10B6F_image_44.png" width="396" height="222" alt="Many people will fail this test." border="0" style="border-top: 0px; border-right: 0px; background-image: none; border-bottom: 0px; padding-top: 0px; padding-left: 0px; border-left: 0px; display: inline; padding-right: 0px"/&gt;&lt;/p&gt;

&lt;h4&gt;Chat and Email&lt;/h4&gt;

&lt;p&gt;If you've ever watched Law &amp;amp; Order, you know that chat can
be a bad place for kids to hang out. They're also a place where
kids can release private information in a way that is hard for you
to track. Same goes with Facebook chat and even email. The younger
the child, the more you need to control how these communication
mechanisms are used. &lt;strong&gt;My 7 year old son has an email
address, but only for sending email with me.&lt;/strong&gt; It helps his
typing and reading skills and it's fun. It has also helped him be
smarter about how to read email and how to judge. Eventually he'll
use it to email others (we'll start with a couple of his same aged
friends), but we'll shepherd him through that.&lt;/p&gt;

&lt;p&gt;&lt;img src="http://10rem.net/media/87783/Windows-Live-Writer_Safety-Your-children-your-childrens-frie_10B6F_image_21.png" width="650" height="296" alt="Seems legit" border="0" style="border-top: 0px; border-right: 0px; background-image: none; border-bottom: 0px; padding-top: 0px; padding-left: 0px; border-left: 0px; display: inline; padding-right: 0px"/&gt;&lt;/p&gt;

&lt;h4&gt;Pictures and webcam/video&lt;/h4&gt;

&lt;p&gt;When I was young, taking and sharing a photograph required
several steps:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;You had to decide that what you were taking a picture of was
actually worth the film it would use&lt;/li&gt;

&lt;li&gt;You had to wait for the film to be developed (the quickest was
typically an hour). A clerk *saw* the photos when they came off the
line, and if you had something illegal, you could be reported.&lt;/li&gt;

&lt;li&gt;If you wanted to share the photo, you had to physically show
the paper photo to someone.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Each of these was a possible inflection point which helped
prevent impulse decisions. A politician couldn't simply make an
impulse decision &lt;a
href="http://abcnews.go.com/US/sexting-scandal-rep-anthony-weiner-tweet-facebook-photos/story?id=13770641"
 target="_blank"&gt;to unzip, snap, and tweet all within a matter of
seconds&lt;/a&gt;. If you really wanted to expose yourself to someone, it
was easier to just go see them in person.&lt;/p&gt;

&lt;p&gt;In general, I tell people never to send to anyone else anything
they wouldn't be comfortable having broadly shared. This is
especially true of photos and video, especially *those* kinds of
photos and video. &lt;strong&gt;There have been many stories of
politicians sending photos of their junk to girls and assuming
those would somehow be kept secret. That takes a special kind of
stupid.&lt;/strong&gt; Even more common are photos shared with
boyfriends/girlfriends which become Internet fodder after a bad
breakup. They meant well, and in the heat of the moment, it felt
like a fun thing to do. However, it's rare to find someone who
marries their high school sweetheart, so just &lt;strong&gt;assume that
anything you share could become public in a couple months or a
couple years&lt;/strong&gt;. If you're uncomfortable with that, don't
share it with anyone, not even that special someone.&lt;/p&gt;

&lt;p&gt;&lt;a
href="http://www.geekalerts.com/embarrassing-photo-protective-sunglasses/"
 target="_blank"&gt;&lt;img src="http://10rem.net/media/87788/Windows-Live-Writer_Safety-Your-children-your-childrens-frie_10B6F_image_30.png" width="400" height="316" alt="These glasses made me lol" border="0" style="border-top: 0px; border-right: 0px; background-image: none; border-bottom: 0px; padding-top: 0px; padding-left: 0px; border-left: 0px; display: inline; padding-right: 0px"/&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;If you share it with anyone, you can't guarantee its
privacy&lt;/strong&gt;. Especially during childhood, kids who are friends
this week may be bitter enemies the next. That information you
shared with them? Those pictures? Expect them to show up on
facebook, or 4chan, or worse. Once something gets on the Internet,
it's almost impossible to remove it. Search engines index too
quickly and stuff goes viral faster than ever. The best way to keep
things private is not to share them.&lt;/p&gt;

&lt;h3&gt;Online Privacy&lt;/h3&gt;

&lt;p&gt;I'm calling privacy out separately, even though much of this
could easily fit under the heading of Dangerous Activity.&lt;/p&gt;

&lt;p&gt;Many of us have heard that when you get a new expensive device
(like a big screen TV), that you should &lt;a
href="http://www.kmov.com/news/editors-pick/Police-post-Christmas-trash-could-be-invitation-for-thieves-184858311.html"
 target="_blank"&gt;take the box directly to the dump and not leave it
on your curb&lt;/a&gt;. This is so potential thieves driving by your
house don't get a heads up to the new things you have inside. This
just seems like common sense … to an adult.&lt;/p&gt;

&lt;h4&gt;Many of us also know not to post information about these things
online. Even if you think a thief couldn't figure out your address,
it is surprisingly easy to do so. There are many address search
sites available, for one. For another, many people post their
addresses (or cities, or more) to social networking sites like
Facebook, or mention them in twitter. Usually all it takes is a
simple Google/Bing search to connect the dots.&lt;/h4&gt;

&lt;h4&gt;Kids breaching your privacy&lt;/h4&gt;

&lt;p&gt;&lt;img src="http://10rem.net/media/87793/Windows-Live-Writer_Safety-Your-children-your-childrens-frie_10B6F_image_38.png" width="400" height="545" alt="Ok, so this meme was a complete stretch. Sue me." border="0" style="border-top: 0px; border-right: 0px; background-image: none; border-bottom: 0px; padding-top: 0px; padding-left: 0px; border-left: 0px; display: inline; padding-right: 0px"/&gt;&lt;/p&gt;

&lt;p&gt;But maybe you're extremely careful. Maybe you don't have any of
that information online. That's awesome. But now your kids are
online - will they spill the beans on you? We worry about kids'
privacy, but what about what they do with *your* private
information?&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Do your kids know not to:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Mention the school they attend (this one is especially
hard)&lt;/li&gt;

&lt;li&gt;Put their address or phone number on anything&lt;/li&gt;

&lt;li&gt;Talk about what their parents do for a living or how much they
make&lt;/li&gt;

&lt;li&gt;Mention when their parents are or are not home&lt;/li&gt;

&lt;li&gt;Announce when the family is taking a vacation (this includes
tweeting or facebooking while on vacation)&lt;/li&gt;

&lt;li&gt;Talk about that cool big ticket item the family just
purchased&lt;/li&gt;

&lt;li&gt;Post photos of themselves online&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;"Hey, nobody is home" is a big one. &lt;strong&gt;For me, I generally
won't tweet or facebook about a vacation until I return. Sure,
that's not as fun as doing it live, but it's safer.&lt;/strong&gt; Plus,
if you're on vacation, get off the damn Internet and try to pay
some attention to your family. :)&lt;/p&gt;

&lt;h4&gt;Social networks&lt;/h4&gt;

&lt;p&gt;Those things can be hard, because kids naturally love talking
about stuff like that. The problem is, with services like Twitter,
and increasingly Facebook, it's hard to control who does or does
not see those things. &lt;strong&gt;The business models of most social
networks require them to offer as little privacy as
possible.&lt;/strong&gt; One even came right out and said it. &lt;a
href="http://www.bing.com/search?q=linked+in+%22privacy+is+for+old+people%22&amp;amp;qs=n&amp;amp;form=QBRE&amp;amp;pq=linked+in+%22privacy+is+for+old+people%22&amp;amp;sc=0-19&amp;amp;sp=-1&amp;amp;sk="
 target="_blank"&gt;(paraphrased) "Privacy is for old people"&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;img src="http://10rem.net/media/87798/Windows-Live-Writer_Safety-Your-children-your-childrens-frie_10B6F_image_35.png" width="400" height="400" alt="Here at XYZ Co. we care about your privacy. So, here are three pages of legal ways we'll share your info with others." border="0" style="border-top: 0px; border-right: 0px; background-image: none; border-bottom: 0px; padding-top: 0px; padding-left: 0px; border-left: 0px; display: inline; padding-right: 0px"/&gt;&lt;/p&gt;

&lt;p&gt;Think about it: Facebook needs you to share as much as possible.
It also needs to make your information available to advertisers,
and to the public web. If Facebook made everything private by
default, they would wither and die. Just like credit card companies
telling you your privacy is important to them (bull), know that
social networks don't have your privacy as their top priority.
Unfortunately, this makes it even harder to keep your kids safe,
and to make sure they're keeping you safe in turn.&lt;/p&gt;

&lt;p&gt;Each and every piece of information you post on line, no matter
how small, should be evaluated:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Could this information cause harm to anyone else if it got
out?&lt;/li&gt;

&lt;li&gt;If the wrong people saw this, could it cause me harm?&lt;/li&gt;

&lt;li&gt;Am I sharing information that is private to someone else? Is it
my secret to share?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;But what's that, you say? &lt;strong&gt;Your child doesn't have a
Facebook account? I wouldn't be so sure about that.&lt;/strong&gt;
Facebook may have a &lt;a
href="http://www.facebook.com/help/210644045634222/"
target="_blank"&gt;policy which requires you to be at least 13 years
old&lt;/a&gt; to sign up, but it relies on the honesty of the child. It's
completely unverifiable and unenforceable. I personally know a
number of kids who are on there who are well under 13, and I've
talked with parents who later found out their kids had facebook and
twitter accounts. Every day, parents find out their kids have
social network accounts, created without permission. Just like you
would talk to your kids about sex with the assumption they're not
going to ask your permission to mess around, you should talk to
them about social networks and privacy proactively.&lt;/p&gt;

&lt;h4&gt;Their personal brand&lt;/h4&gt;

&lt;p&gt;I encourage people to create "real" accounts for their kids, as
you don't want to have to start over at some designated age. That
has the fortunate, or perhaps unfortunate, effect of causing
someone's personal brand to start at an early age.&lt;/p&gt;

&lt;p&gt;I personally *do* want my things from ten or fifteen years ago
showing up on the Internet. I have had a lot of neat projects in
that time. But think of how many changes a kid goes through in the
same amount of time.&lt;/p&gt;

&lt;p&gt;Even today, I can search the usenet archive and find posts from
when I was 19. Those were embarrassing, but not horrible. Back
then, we didn't know this stuff would be around forever; the
Internet was relatively new and just recently opened to the public.
It's routine for employers to google/bing their prospective
employees before bringing them in for an interview. Sure, you may
think they'll take into account that they were ten years younger
when they posts that obnoxious rant, but reality is, they probably
won't even if you're lucky enough to have the material dated.
You're dealing with real people reviewing this material, and what
they see *will* color their opinion. &lt;strong&gt;Those
racist/sexist/offensive/obnoxious comments at age 13, written on
Facebook or Twitter? Yes, they will cause you problems in your job
search at age 23, and 33, and probably even 43&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;This can be an extremely difficult lesson to teach as a child or
teen is probably not going to understand (or care about) what a
professional profile should look like. As a parent, it'll be your
responsibility to help them with this so they don't ruin their
future chances at college.&lt;/p&gt;

&lt;p&gt;You may think that the best route would be to then create a
"temporary" profile. The problem is, when you go to transition them
to the "real" profile, they'll have too much invested in the old
one. Even if they are able to transition, they'll have to leave
lots of pointers and breadcrumbs linking the two, effectively
negating the effect of having a temporary profile to start
with.&lt;/p&gt;

&lt;h3&gt;Illegal Activity&lt;/h3&gt;

&lt;p&gt;Of course, most of us are aware of the illegal activity that
kids can participate on online. However, we're generally not aware
of how easy it is to do so.&lt;/p&gt;

&lt;h4&gt;Pirating and illegal downloads&lt;/h4&gt;

&lt;p&gt;I'm not making a statement here on DMCA or copyrights. As an
author, software developer, and employee of a very large software,
devices, and services company, I do my best to respect copyrights.
At the same time, I can see and understand some of the damaging
effects of over-long and overly strict copyrights both for
authors/artists, and for consumers.&lt;/p&gt;

&lt;p&gt;&lt;img src="http://10rem.net/media/87803/Windows-Live-Writer_Safety-Your-children-your-childrens-frie_10B6F_image_9.png" width="300" height="226" alt="image" border="0" style="border-top: 0px; border-right: 0px; background-image: none; border-bottom: 0px; padding-top: 0px; padding-left: 0px; border-left: 0px; display: inline; padding-right: 0px"/&gt;&lt;/p&gt;

&lt;p&gt;Groups like the RIAA have really cracked down on illegal
downloads of music and video. If caught, your child could cost you
jail time and a significant amount of cash. It's in your own best
interest to make sure your child knows not to download illegal
software or music. Question anything your child gets "for free".
Some things are legitimately for free, others are malware, and
others are warez/pirated and could land you in a heap of
trouble.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Regardless of your personal feelings on the DMCA and
whether software/music/etc. should be free, understand that you or
your kids breaking the law here can cost you dearly.&lt;/strong&gt; You
are responsible for what your children are doing and cannot claim
ignorance. And yes, the RIAA has gone after individuals.&lt;/p&gt;

&lt;h4&gt;Hacking&lt;/h4&gt;

&lt;p&gt;The first movie I saw which really connected with me with regard
to computers was WarGames. Even in that movie, hacking is very
glamorous. In later movies, hackers always had really cool &lt;a
href="http://fakeui.tumblr.com/" target="_blank"&gt;FUI&lt;/a&gt; with 3d
models and other cool representations of the "codes" they were
trying to crack. It looks like a lot of fun, until the feds come by
and throw you in a van.&lt;/p&gt;

&lt;p&gt;&lt;a href="http://fakeui.tumblr.com/" target="_blank"&gt;&lt;img src="http://10rem.net/media/87808/Windows-Live-Writer_Safety-Your-children-your-childrens-frie_10B6F_image_27.png" width="625" height="223" alt="image" border="0" style="border-top: 0px; border-right: 0px; background-image: none; border-bottom: 0px; padding-top: 0px; padding-left: 0px; border-left: 0px; display: inline; padding-right: 0px"/&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The reality is, hacking is typically either scary professional
crime organizations, or kids getting in over their heads messing
with stuff they never should, trying to be cool. The proliferation
of hacking "kits" makes it easy for even young kids to hack stuff.
Technically, the Xbox stunt which prompted this post is considered
hacking. Jailbreaking your phone? That's a type of hacking.
Stealing someone's facebook password? Yep.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Children should be taught to never try to get someone
else's password, to never access stuff they don't have explicit
permission to, and to always ask for your advice when it comes to
gray areas.&lt;/strong&gt; In general, if they need to download an
additional program to access "features" not otherwise present in
something, you should look closely at the source of that program
and whether or not it might violate any agreements in place.&lt;/p&gt;

&lt;p&gt;&lt;img src="http://10rem.net/media/87813/Windows-Live-Writer_Safety-Your-children-your-childrens-frie_10B6F_image_41.png" width="452" height="260" alt="I personally like the cat more than the iron." border="0" style="border-top: 0px; border-right: 0px; background-image: none; border-bottom: 0px; padding-top: 0px; padding-left: 0px; border-left: 0px; display: inline; padding-right: 0px"/&gt;&lt;/p&gt;

&lt;h4&gt;Bullying&lt;/h4&gt;

&lt;p&gt;Not too long ago, the idea of online dating was laughed at. But
then it took off, and is now a huge industry. Similarly, the idea
of online bullying used to be laughed at. (and if you call it
"Cyber Bullying", I'll laugh at it. Please stop using the term
"Cyber" unless you're talking about world-destroying robots.) Many
parents still don't consider online bullying "real" bullying until
their own child is a victim of it.&lt;/p&gt;

&lt;p&gt;&lt;img src="http://10rem.net/media/87818/Windows-Live-Writer_Safety-Your-children-your-childrens-frie_10B6F_image_47.png" width="650" height="226" alt="When I was in 7th and 8th grade, the biggest bullies were a group of gossiping girls." border="0" style="border-top: 0px; border-right: 0px; background-image: none; border-bottom: 0px; padding-top: 0px; padding-left: 0px; border-left: 0px; display: inline; padding-right: 0px"/&gt;&lt;/p&gt;

&lt;p&gt;Many schools and organizations have very strict bullying
policies in place. When I was younger, typically you'd get
suspended for fighting in school. These days, bullying can land you
and your child in deeper stuff, including the court system. Bullies
no longer need to be the over-hormoned kid who was kept back twice;
it can be the mousy girl in class, the nerd, the jock, anyone.
Online bullying also leaves an even easier to follow trail than
just beating someone up "behind the Kentucky Fried at 3:00" (that's
where everything happened in my junior high), which makes these
lawsuits even easier.&lt;/p&gt;

&lt;p&gt;I don't want to sound like an after-school special here, but
teaching your child about bullying, both to prevent them being a
victim but also to prevent them from being a bully themselves, is
an important part of the set of online tools you'll provide them.
&lt;strong&gt;Children need to be taught never to share private
information about others, and never to text/tweet/facebook/message
anything they wouldn't say to someone in person&lt;/strong&gt;. A good
rule of thumb is "Don't be mean".&lt;/p&gt;

&lt;h3&gt;What you should do&lt;/h3&gt;

&lt;p&gt;Despite me filling this post with things you should do, I'm not
here to tell parents what to do. Each parent has their own style
for raising their kids, and that style is typically a very personal
decision. As a concerned parent, and someone who stays up with
technology and software, I just want to make sure this information
is out there.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Please don't ban your kids from using these services. If you do,
they'll just do it out of your sight and out of your control.
That's how kids are. It's better to have them do it where you can
monitor and guide them. In all honesty, I'd much rather my son (or
daughter) stumble across porn on the computer at the kitchen table
rather than over a friend's house when the parents are gone.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;strong&gt;I think the worst thing you can do is shut down your
kid's access to online services, or set up some sort of Net Nanny
or other blocker.&lt;/strong&gt; In the former, your kid will simply take
their activities to places outside your sight (friends' houses,
school, the phone, etc.). In the latter, the nanny software will
simply be a challenge to the kid, and a false security for you.
Most on-computer blocking software is complete crap, and also
blocks legit content. Plus, kids will find a way to work around it.
&lt;strong&gt;My son got a Nintendo DS at the age of 6. Within a few
hours of me setting it, he brute force cracked the PIN which
disabled connectivity and 3d. Seriously, he just sat there and
tried number after number until it let him in. He was
6.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Instead, I encourage you to tell your kids the reasons behind
the decisions to restrict certain activities. And then, depending
on the child, you either need to actively monitor what they're
doing, or you trust but verify. For my kids (ages 7 and 4), they
are only allowed to use the computer in the public places in the
house (the kitchen table), and we routinely check on what they're
doing. More importantly, they know which places they are allowed to
go to, and know to ask permission to use anything else. We're not
so naïve as to think that will always work, but it's working well
enough for now. I can only hope that by the time their curiosity
gets the better of them, we've instilled enough knowledge and
values to help make up the difference. Well… a little, anyway
:)&lt;/p&gt;

&lt;h3&gt;What we should do as a community&lt;/h3&gt;

&lt;p&gt;In addition to the parental tasks, we should help the
non-technical parents. One fun way to do this might be to create a
package insert for new laptops. I recommend this in humor, but a
serious interpretation of this could be really useful as general
consumers are buying computers and phones for their kids without
realizing what can be done with them.&lt;/p&gt;

&lt;p&gt;&lt;a
href="http://www.collegehumor.com/article/6500868/sci-fi-ikea-manuals"
 target="_blank"&gt;&lt;img src="http://10rem.net/media/87823/Windows-Live-Writer_Safety-Your-children-your-childrens-frie_10B6F_image_12.png" width="450" height="461" alt="image" border="0" style="border-top: 0px; border-right: 0px; background-image: none; border-bottom: 0px; padding-top: 0px; padding-left: 0px; border-left: 0px; display: inline; padding-right: 0px"/&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;If you're good with graphics arts, I suggest that we should
create a universal &lt;a
href="http://www.collegehumor.com/article/6500868/sci-fi-ikea-manuals"
 target="_blank"&gt;Ikea-like diagram&lt;/a&gt; that is included with each
new computer and phone. It should include:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Don't let your kids post personal information&lt;/li&gt;

&lt;li&gt;Don't let them send nude photos&lt;/li&gt;

&lt;li&gt;Don't let them pirate stuff&lt;/li&gt;

&lt;li&gt;Don't bully or let others bully. Don't be mean. Don't lie about
others or spread lies.&lt;/li&gt;

&lt;li&gt;Monitor webcam usage&lt;/li&gt;

&lt;li&gt;Do keep tabs on what your kids are doing&lt;/li&gt;

&lt;li&gt;Do teach your kids what they should and should not do on a
computer&lt;/li&gt;

&lt;li&gt;Do assume your kids are clever enough to fool you&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I think everyone would be able to understand that. :)&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/PeteBrown?a=nN_6KXSbXSI:uU5qwwp4oPw:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PeteBrown?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/PeteBrown?a=nN_6KXSbXSI:uU5qwwp4oPw:I9og5sOYxJI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PeteBrown?d=I9og5sOYxJI" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/PeteBrown?a=nN_6KXSbXSI:uU5qwwp4oPw:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PeteBrown?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/PeteBrown?a=nN_6KXSbXSI:uU5qwwp4oPw:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PeteBrown?i=nN_6KXSbXSI:uU5qwwp4oPw:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/PeteBrown?a=nN_6KXSbXSI:uU5qwwp4oPw:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PeteBrown?i=nN_6KXSbXSI:uU5qwwp4oPw:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/PeteBrown?a=nN_6KXSbXSI:uU5qwwp4oPw:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PeteBrown?i=nN_6KXSbXSI:uU5qwwp4oPw:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/PeteBrown/~4/nN_6KXSbXSI" height="1" width="1"/&gt;</description><feedburner:origLink>http://10rem.net/blog/2013/03/01/do-you-really-know-what-your-kids-are-doing-online-and-in-games</feedburner:origLink></item><item><title>Using CallerMemberName for property change notification in XAML apps</title><author>Pete Brown	</author><link>http://feedproxy.google.com/~r/PeteBrown/~3/YOnUdpcrDF8/using-callermembername-for-property-change-notification-in-xaml-apps</link><pubDate>Mon, 25 Feb 2013 21:34:25 GMT</pubDate><guid isPermaLink="false">http://10rem.net/blog/2013/02/25/using-callermembername-for-property-change-notification-in-xaml-apps</guid><description>&lt;p&gt;.NET 4.5 quietly introduced several attributes which are useful
for debugging and error reporting: CallerMemberName, CallerFilePath
and CallerLineNumber, all collectively referred to as "&lt;a
href="http://msdn.microsoft.com/en-us/library/hh534540.aspx"
target="_blank"&gt;Caller Information&lt;/a&gt;". One of those,
CallerMemberName, is also very useful for MVVM apps and other apps
using INotifyPropertyChanged for change notifications.&lt;/p&gt;

&lt;h3&gt;Getting the calling function name&lt;/h3&gt;

&lt;p&gt;The &lt;a
href="http://msdn.microsoft.com/en-us/library/system.runtime.compilerservices.callermembernameattribute.aspx"
 target="_blank"&gt;CallerMemberName attribute&lt;/a&gt;, from the
System.Runtime.CompilerServices namespace, supplies the name of the
function which called the function with the attribute in its
parameter list. For example, if you have a function defined like
this:&lt;/p&gt;

&lt;pre class="brush: csharp;"&gt;
private void DoSomething([CallerMemberName] string callingFunction = null)&lt;br /&gt;
{&lt;br /&gt;
    if (callingFunction != null)&lt;br /&gt;
        Debug.WriteLine("Calling function name is " + callingFunction);&lt;br /&gt;
    else&lt;br /&gt;
        Debug.WriteLine("Calling function not supplied.");&lt;br /&gt;
}&lt;br /&gt;
&lt;/pre&gt;

&lt;p&gt;Then, you call it like this:&lt;/p&gt;

&lt;pre class="brush: csharp;"&gt;
private void CallSomething()&lt;br /&gt;
{&lt;br /&gt;
    DoSomething();&lt;br /&gt;
}
&lt;/pre&gt;

&lt;p&gt;The callingFunction parameter will be filled with the name of
the calling function. In this case, the output indicate that the
calling function is "CallSomething". This works because the
property uses the CallerMemberName attribute and has a default
value. The default value is a required part of this pattern.&lt;/p&gt;

&lt;h3&gt;Using CallerMemberName in property change notification&lt;/h3&gt;

&lt;p&gt;XAML uses an interface and event based property change
notification pattern to alert the binding system when a non-static
property has been changed. (WPF supports binding to static
properties, and although it uses the event, it does not use the
interface as there's no class instance.) The interface used is
INotifyPropertyChanged, and regardless of how you feel about the
requirement to use this interface for change notification, it seems
it is here to stay.&lt;/p&gt;

&lt;h4&gt;The problem&lt;/h4&gt;

&lt;p&gt;One real issue with INotifyPropertyChanged is the requirement to
pass in the name of the calling property as a string. Some time
ago, I spoke with the people who originally designed this approach,
and despite me not caring much for it, I'm convinced that it was,
in fact, the correct approach to use. It provides the best
performance and flexibility compared to other approaches, and
required no changes to the language specs or the CLR.&lt;/p&gt;

&lt;p&gt;Code using this approach, without the benefit of any MVVM
toolkits or other base classes, typically looked something like
this:&lt;/p&gt;

&lt;pre class="brush: csharp;"&gt;
public class PuzzleLevel : INotifyPropertyChanged&lt;br /&gt;
{&lt;br /&gt;
    private string _title;&lt;br /&gt;
    public string Title&lt;br /&gt;
    {&lt;br /&gt;
        get { return _title; }&lt;br /&gt;
        set&lt;br /&gt;
        {&lt;br /&gt;
            if (value != _title)&lt;br /&gt;
            {&lt;br /&gt;
                _title = value;&lt;br /&gt;
                OnPropertyChanged("Title");&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    // ...&lt;br /&gt;
&lt;br /&gt;
    public event PropertyChangedEventHandler PropertyChanged;&lt;br /&gt;
    protected void OnPropertyChanged(string propertyName)&lt;br /&gt;
    {&lt;br /&gt;
        if (PropertyChanged != null)&lt;br /&gt;
            PropertyChanged(this, new PropertyChangedEventArgs(propertyName));&lt;br /&gt;
    }&lt;br /&gt;
}
&lt;/pre&gt;

&lt;p&gt;This leads to countless problems when properties are refactored
and renamed, but the string (which is not verified by the compiler)
is not changed. For example, here' I've renamed the Title property
to Name. This will compile just fine:&lt;/p&gt;

&lt;pre class="brush: csharp; highlight: [12];"&gt;
public class PuzzleLevel : INotifyPropertyChanged&lt;br /&gt;
{&lt;br /&gt;
    private string _name;&lt;br /&gt;
    public string Name&lt;br /&gt;
    {&lt;br /&gt;
        get { return _name; }&lt;br /&gt;
        set&lt;br /&gt;
        {&lt;br /&gt;
            if (value != _name)&lt;br /&gt;
            {&lt;br /&gt;
                _name = value;&lt;br /&gt;
                OnPropertyChanged("Title");&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    // ...&lt;br /&gt;
&lt;br /&gt;
    public event PropertyChangedEventHandler PropertyChanged;&lt;br /&gt;
    protected void OnPropertyChanged(string propertyName)&lt;br /&gt;
    {&lt;br /&gt;
        if (PropertyChanged != null)&lt;br /&gt;
            PropertyChanged(this, new PropertyChangedEventArgs(propertyName));&lt;br /&gt;
    }&lt;br /&gt;
}
&lt;/pre&gt;

&lt;p&gt;Not only will this compile just fine, but it will run as well.
The only real indication of a problem will be the field not
updating in the UI when changed from someplace else in the code, or
another part of the UI. This can be really easy to miss in
testing.&lt;/p&gt;

&lt;h4&gt;The solution&lt;/h4&gt;

&lt;p&gt;There are multiple ways to solve this, but the newest, and
perhaps most elegant, is an approach using the CallerMemberName
attribute. This approach is used by the default Windows Store XAML
app templates in the BindableBase class:&lt;/p&gt;

&lt;pre class="brush: csharp;"&gt;
public abstract class BindableBase : INotifyPropertyChanged&lt;br /&gt;
{&lt;br /&gt;
    public event PropertyChangedEventHandler PropertyChanged;&lt;br /&gt;
&lt;br /&gt;
    protected bool SetProperty&amp;lt;T&amp;gt;(ref T storage, T value, [CallerMemberName] String propertyName = null)&lt;br /&gt;
    {&lt;br /&gt;
        if (object.Equals(storage, value)) return false;&lt;br /&gt;
&lt;br /&gt;
        storage = value;&lt;br /&gt;
        this.OnPropertyChanged(propertyName);&lt;br /&gt;
        return true;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    protected void OnPropertyChanged([CallerMemberName] string propertyName = null)&lt;br /&gt;
    {&lt;br /&gt;
        var eventHandler = this.PropertyChanged;&lt;br /&gt;
        if (eventHandler != null)&lt;br /&gt;
        {&lt;br /&gt;
            eventHandler(this, new PropertyChangedEventArgs(propertyName));&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}
&lt;/pre&gt;

&lt;p&gt;If you were passing in strings for property names before, this
base class will simplify your code and also save you from the
difficult-to-track binding bugs you'd get if you changed property
names without updating the string in the property change
notification call. Now, your setters can be as simple as this:&lt;/p&gt;

&lt;pre class="brush: csharp;"&gt;
public class PuzzleLevel : BindableBase&lt;br /&gt;
{&lt;br /&gt;
    private string _title;&lt;br /&gt;
    public string Title&lt;br /&gt;
    {&lt;br /&gt;
        get { return _title; }&lt;br /&gt;
        set { SetProperty(ref _title, value); }&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    private int _highScore;&lt;br /&gt;
    public int HighScore&lt;br /&gt;
    {&lt;br /&gt;
        get { return _highScore; }&lt;br /&gt;
        set { SetProperty(ref _highScore, value); }&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    private bool _isLocked;&lt;br /&gt;
    public bool IsLocked&lt;br /&gt;
    {&lt;br /&gt;
        get { return _isLocked; }&lt;br /&gt;
        set { SetProperty(ref _isLocked, value); }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;/pre&gt;

&lt;p&gt;There were other ways to do this, but they all involved more
steps and additional parameters. The use of third-party MVVM
toolkits and lambda expressions simplified that somewhat. Those
will still work and work well, but for new code, I recommend you
consider using the built-in CallerMemberName attribute
approach.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The CallerMemberName (and other Caller* functions) are
changed into literal values at &lt;span&gt;compile time&lt;/span&gt;, so
there's no runtime reflection lookup or similar performance hit
like that encountered by other methods.&lt;/strong&gt; This, combined
with its ease of use, makes it a no-brainer to use.&lt;/p&gt;

&lt;p&gt;This approach also works with VB with appropriate syntax
changes.&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/PeteBrown?a=YOnUdpcrDF8:o7ZqE_dT2vI:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PeteBrown?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/PeteBrown?a=YOnUdpcrDF8:o7ZqE_dT2vI:I9og5sOYxJI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PeteBrown?d=I9og5sOYxJI" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/PeteBrown?a=YOnUdpcrDF8:o7ZqE_dT2vI:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PeteBrown?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/PeteBrown?a=YOnUdpcrDF8:o7ZqE_dT2vI:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PeteBrown?i=YOnUdpcrDF8:o7ZqE_dT2vI:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/PeteBrown?a=YOnUdpcrDF8:o7ZqE_dT2vI:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PeteBrown?i=YOnUdpcrDF8:o7ZqE_dT2vI:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/PeteBrown?a=YOnUdpcrDF8:o7ZqE_dT2vI:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PeteBrown?i=YOnUdpcrDF8:o7ZqE_dT2vI:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/PeteBrown/~4/YOnUdpcrDF8" height="1" width="1"/&gt;</description><feedburner:origLink>http://10rem.net/blog/2013/02/25/using-callermembername-for-property-change-notification-in-xaml-apps</feedburner:origLink></item><item><title>Getting more visibility for your Windows Store app Part 1: Create great apps</title><author>Pete Brown	</author><link>http://feedproxy.google.com/~r/PeteBrown/~3/0axoQBgvn3s/getting-more-visibility-for-your-windows-store-app-part-1-create-great-apps</link><pubDate>Wed, 23 Jan 2013 07:47:29 GMT</pubDate><guid isPermaLink="false">http://10rem.net/blog/2013/01/23/getting-more-visibility-for-your-windows-store-app-part-1-create-great-apps</guid><description>&lt;p&gt;Many developers ask me how to get more visibility for their apps
in the Windows Store. Most do not realize, that even on the public
web, visibility is almost never organic. It's the result of hard
work on the part of all involved. In this first post I'll provide
some observations as to things that I personally think help
increase app visibility, specifically, app quality. In part 2, I'll
cover the listing and promotion side of the equation.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;DISCLAIMER: I'm not a marketing person, and I do not have inside
knowledge of the Windows Store ranking and sorting algorithms.
Additionally, I do not have metrics which empirically prove any of
these techniques work. This is just advice based on my own
observations, primarily targeted to people who are new to
publishing apps in an online store. This is not a replacement for
the &lt;a href="http://msdn.microsoft.com/en-US/windows/jj680887"
target="_blank"&gt;Develop Great Apps&lt;/a&gt; content on our dev
center.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;The single most important thing you can do to increase the
visibility of your app is to start with a great app. Full stop.
&lt;strong&gt;All other things equal, a great app will do better than a
mediocre app or a terrible app.&lt;/strong&gt; Here are some suggestions
for things which can help tip the scale from "meh" to "yeah!"&lt;/p&gt;

&lt;h3&gt;Don't create throwaways&lt;/h3&gt;

&lt;p&gt;Back when I used to work for Scott Hanselman, one recurring
piece of advice he'd give to the team was "Don't create
throwaways". He was talking about blog posts then, but the same
thing applies to apps. Throwaway apps can ruin your reputation with
customers and also with the Windows Store. The Windows Store is not
a great place to post things like little test projects or homework
apps. You can do those easily and share them with your testers
using documented side-load capabilities.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Each and every app you put in the Windows Store should
be an app you're proud of.&lt;/strong&gt; It should be something you
wouldn't hesitate to show your friends, family, and your
colleagues. It should be useful and engaging. In fact, the number
one requirement in the &lt;a
href="http://msdn.microsoft.com/en-us/library/windows/apps/hh694083.aspx"&gt;
Windows 8 app certification requirements&lt;/a&gt; is "Windows Store apps
provide value to the customer". Put another way: Your app needs to
be worth the download time and storage space, or else it's going to
get a bad review.&lt;/p&gt;

&lt;p&gt;&lt;a
href="http://msdn.microsoft.com/en-us/library/windows/apps/hh694083.aspx"
 target="_blank"&gt;&lt;img title="image"
style="border-top: 0px; border-right: 0px; background-image: none; border-bottom: 0px; padding-top: 0px; padding-left: 0px; border-left: 0px; display: inline; padding-right: 0px"
 border="0" alt="image"
src="http://10rem.net/media/87521/Windows-Live-Writer_Promoting-your-Windows-Store-apps-on-the_11350_image_42.png"
 width="650" height="51" /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Apps don't need to be perfect, or masterpieces, but they need to
be apps that will raise your overall reputation. If you thought of,
designed, and coded the app in an evening, chances are you can do
even better if you take a few more days :)&lt;/p&gt;

&lt;p&gt;Don't be tempted to put a rough draft out into the wild. As the
old saying goes, you only get one chance to make a first
impression. This is as true for apps as it is for dating.&lt;/p&gt;

&lt;h3&gt;Go beyond the stock templates&lt;/h3&gt;

&lt;p&gt;I do a lot with music both in the app world and with hardware
synthesizers. &lt;strong&gt;A common complaint is when a synthesizer
preset gets used by many different artists as-is, without any
substantive customization or modification.&lt;/strong&gt; It becomes the
only thing you hear in the song. Some get so over-used, even when
slightly modified (&lt;a
href="https://www.youtube.com/watch?v=YvbnVqIamS4"&gt;M1 Piano&lt;/a&gt;, &lt;a
href="https://www.youtube.com/watch?annotation_id=annotation_996860&amp;amp;feature=iv&amp;amp;src_vid=L-k7QhOVl4M&amp;amp;v=t1xEJccP6Zw"&gt;
DX7 E. Piano 1&lt;/a&gt; (&lt;a href="http://youtu.be/PfpCrd3LZZk?t=53s"&gt;and
this&lt;/a&gt;) and slap bass, &lt;a
href="https://www.youtube.com/watch?v=-Lh6Zk_YN60"&gt;D-50
Fantasia&lt;/a&gt;, &lt;a href="http://youtu.be/yPUn4Cxu-lA?t=48s"&gt;JP-8000
supersaw&lt;/a&gt; (which I still like, but that's besides the point), &lt;a
href="https://www.youtube.com/watch?v=M5OJvNoeBBA"&gt;Alpha Juno
"Hoover"&lt;/a&gt; etc.) that others start to rebel against them. The
recommendation is to start with stock patches, but to customize
them, or just create new ones from scratch. Otherwise you'll sound
pedestrian, dated, and maybe even like a copycat. Presets are in
synthesizers just to give you an idea of what the machine is
capable of, sound designers didn't expect to hear them on actual
records.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The built in templates in Visual Studio are a great
starting point for structuring your app. However, like the
synthesizer presets, they were never meant to be used exactly
as-is.&lt;/strong&gt; They are a starting point to help you get from zero
to working in a very short period of time.&lt;/p&gt;

&lt;p&gt;Here's a screen shot of one of the built-in templates running on
my 30" screen.&lt;/p&gt;

&lt;p&gt;&lt;a
href="http://10rem.net/media/87526/Windows-Live-Writer_Promoting-your-Windows-Store-apps-on-the_11350_image_24.png"
 target="_blank"&gt;&lt;img title="image"
style="border-top: 0px; border-right: 0px; background-image: none; border-bottom: 0px; padding-top: 0px; padding-left: 0px; border-left: 0px; display: inline; padding-right: 0px"
 border="0" alt="image"
src="http://10rem.net/media/87531/Windows-Live-Writer_Promoting-your-Windows-Store-apps-on-the_11350_image_thumb_11.png"
 width="650" height="406" /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Notice how each square is the same 250px with a text overlay at
the bottom. There's nothing there to mix it up. It's a starting
point - a preset. It's deliberately grayscale so that you don't
fixate on existing colors while you flesh out your ideas.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;The Windows design aesthetic doesn't limit you to a gray app
with a bunch of 250px squares with a text overlay at the bottom.
Think, erm, outside the 250px box.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Once you've proven that the functionality of your app works,
then you can get creative with the UI. Customize it with
appropriate branding and logos. Change the sizes of tiles, if you
decide to stick with a tile layout at all.&lt;/p&gt;

&lt;p&gt;Here are some apps which use simple box layouts, but do it in a
good way that is different from the stock templates. Some vary the
sizes of the boxes, some simply alter the layout of the main
screen. Both use branding and colors. This is a very conservative
approach which looks good, but relies on amazing content to carry
the app. Keep in mind that you're seeing these all on my huge
screen.&lt;/p&gt;

&lt;p&gt;&lt;a
href="http://10rem.net/media/87536/Windows-Live-Writer_Promoting-your-Windows-Store-apps-on-the_11350_image_36.png"
 target="_blank"&gt;&lt;img title="image"
style="border-top: 0px; border-right: 0px; background-image: none; border-bottom: 0px; padding-top: 0px; padding-left: 0px; border-left: 0px; display: inline; padding-right: 0px"
 border="0" alt="image"
src="http://10rem.net/media/87541/Windows-Live-Writer_Promoting-your-Windows-Store-apps-on-the_11350_image_thumb_16.png"
 width="322" height="201" /&gt;&lt;/a&gt;&amp;nbsp;&lt;a
href="http://10rem.net/media/87546/Windows-Live-Writer_Promoting-your-Windows-Store-apps-on-the_11350_image_37.png"
 target="_blank"&gt;&lt;img title="image"
style="border-top: 0px; border-right: 0px; background-image: none; border-bottom: 0px; padding-top: 0px; padding-left: 0px; border-left: 0px; display: inline; padding-right: 0px"
 border="0" alt="image"
src="http://10rem.net/media/87551/Windows-Live-Writer_Promoting-your-Windows-Store-apps-on-the_11350_image_thumb_17.png"
 width="322" height="201" /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I've seen an increasing number of apps in the store which use
rectangles and even the labels as shown in the stock templates, but
mix it up enough to be different and interesting. For example, most
of the Xbox games on Windows have a hub screen which is not quite
as conservative as the previous two, but still rooted in the same
design principles. Note the use of boxes which span more than one
row or column. Note the use of color. This is a simple design which
any developer could pull off.&lt;/p&gt;

&lt;p&gt;&lt;a
href="http://10rem.net/media/87556/Windows-Live-Writer_Promoting-your-Windows-Store-apps-on-the_11350_image_4.png"
 target="_blank"&gt;&lt;img title="image"
style="border-top: 0px; border-right: 0px; background-image: none; border-bottom: 0px; padding-top: 0px; padding-left: 0px; border-left: 0px; display: inline; padding-right: 0px"
 border="0" alt="image"
src="http://10rem.net/media/87561/Windows-Live-Writer_Promoting-your-Windows-Store-apps-on-the_11350_image_thumb_1.png"
 width="650" height="191" /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Xbox video takes a similar approach.&lt;/p&gt;

&lt;p&gt;&lt;a
href="http://10rem.net/media/87566/Windows-Live-Writer_Promoting-your-Windows-Store-apps-on-the_11350_image_26.png"
 target="_blank"&gt;&lt;img title="image"
style="border-top: 0px; border-right: 0px; background-image: none; border-bottom: 0px; padding-top: 0px; padding-left: 0px; border-left: 0px; display: inline; padding-right: 0px"
 border="0" alt="image"
src="http://10rem.net/media/87571/Windows-Live-Writer_Promoting-your-Windows-Store-apps-on-the_11350_image_thumb_12.png"
 width="650" height="252" /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Top Gear News from the BBC is another app which sticks with a
general box layout, but is far from being a template app. This is a
portal-type app where the content is highlighted in the app but
hosted on the web site.&lt;/p&gt;

&lt;p&gt;&lt;a
href="http://10rem.net/media/87576/Windows-Live-Writer_Promoting-your-Windows-Store-apps-on-the_11350_image_28.png"
 target="_blank"&gt;&lt;img title="image"
style="border-top: 0px; border-right: 0px; background-image: none; border-bottom: 0px; padding-top: 0px; padding-left: 0px; border-left: 0px; display: inline; padding-right: 0px"
 border="0" alt="image"
src="http://10rem.net/media/87581/Windows-Live-Writer_Promoting-your-Windows-Store-apps-on-the_11350_image_thumb_13.png"
 width="650" height="319" /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;(Please note that none of the above three are optimized for a
high resolution, low DPI screen like mine. More on that later):&lt;/p&gt;

&lt;p&gt;(The built-ion News app is another great app with a variation on
the box layout. No screen shot today, however, as it doesn't feel
right to post that with the headline story being about the college
shootings.)&lt;/p&gt;

&lt;p&gt;How about some other interesting boxes? The FX app leans towards
the boxes side of the design aesthetic, but manages to have an
engaging and very attractive UI, again, without sticking to a pure
template layout. The app also scales well to different
resolutions.&lt;/p&gt;

&lt;p&gt;&lt;a
href="http://10rem.net/media/87586/Windows-Live-Writer_Promoting-your-Windows-Store-apps-on-the_11350_image_22.png"
 target="_blank"&gt;&lt;img title="image"
style="border-top: 0px; border-right: 0px; background-image: none; border-bottom: 0px; padding-top: 0px; padding-left: 0px; border-left: 0px; display: inline; padding-right: 0px"
 border="0" alt="image"
src="http://10rem.net/media/87591/Windows-Live-Writer_Promoting-your-Windows-Store-apps-on-the_11350_image_thumb_10.png"
 width="650" height="406" /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;My wife and I share a Kindle account (we set it up before Kindle
supported sharing). Here's what the Kindle app hub page looks like
when you're signed in (I don't read books on this PC. I use my
Surface for that). It's not the same type of boxes we've seen
before, but it is appropriate to this app's audience. Notice also
the use of branding logos and colors on the top left.&lt;/p&gt;

&lt;p&gt;&lt;a
href="http://10rem.net/media/87596/Windows-Live-Writer_Promoting-your-Windows-Store-apps-on-the_11350_image_8.png"
 target="_blank"&gt;&lt;img title="image"
style="border-top: 0px; border-right: 0px; background-image: none; border-bottom: 0px; padding-top: 0px; padding-left: 0px; border-left: 0px; display: inline; padding-right: 0px"
 border="0" alt="image"
src="http://10rem.net/media/87601/Windows-Live-Writer_Promoting-your-Windows-Store-apps-on-the_11350_image_thumb_3.png"
 width="650" height="406" /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h4&gt;Enough with the boxes&lt;/h4&gt;

&lt;p&gt;Then you have other apps which eschew the boxes and &lt;a
href="https://www.youtube.com/watch?v=0GN2kpBoFs4"&gt;go their own
way&lt;/a&gt; (you can thank me for that, later). There's nothing in the
design aesthetic which mandates the use of boxes in your layout.
Grids are recommended, but we don't have any commandments you
absolutely must follow when laying out your content. As long as
you're consistent in modes of interaction and with system-provided
tools (app bar, charms, navigation), and the app is attractive and
usable from mouse, touch and keyboard, you should feel free to
experiment with design that is appropriate to the brand, domain,
and audience. An example of this is Nook. Notice that Nook also
takes advantage of the extra space on my huge screen.&lt;/p&gt;

&lt;p&gt;&lt;a
href="http://10rem.net/media/87606/Windows-Live-Writer_Promoting-your-Windows-Store-apps-on-the_11350_image_10.png"
 target="_blank"&gt;&lt;img title="image"
style="border-top: 0px; border-right: 0px; background-image: none; border-bottom: 0px; padding-top: 0px; padding-left: 0px; border-left: 0px; display: inline; padding-right: 0px"
 border="0" alt="image"
src="http://10rem.net/media/87611/Windows-Live-Writer_Promoting-your-Windows-Store-apps-on-the_11350_image_thumb_4.png"
 width="650" height="406" /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a
href="http://10rem.net/media/87616/Windows-Live-Writer_Promoting-your-Windows-Store-apps-on-the_11350_image_12.png"
 target="_blank"&gt;&lt;img title="image"
style="border-top: 0px; border-right: 0px; background-image: none; border-bottom: 0px; padding-top: 0px; padding-left: 0px; border-left: 0px; display: inline; padding-right: 0px"
 border="0" alt="image"
src="http://10rem.net/media/87621/Windows-Live-Writer_Promoting-your-Windows-Store-apps-on-the_11350_image_thumb_5.png"
 width="650" height="406" /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;They don't look like boxes, but we're still on a grid layout. We
still have side scrolling. How about a couple apps which move even
further away from the boxed layout design:&lt;/p&gt;

&lt;p&gt;&lt;a
href="http://10rem.net/media/87626/Windows-Live-Writer_Promoting-your-Windows-Store-apps-on-the_11350_image_14.png"
 target="_blank"&gt;&lt;img title="image"
style="border-top: 0px; border-right: 0px; background-image: none; border-bottom: 0px; padding-top: 0px; padding-left: 0px; border-left: 0px; display: inline; padding-right: 0px"
 border="0" alt="image"
src="http://10rem.net/media/87631/Windows-Live-Writer_Promoting-your-Windows-Store-apps-on-the_11350_image_thumb_6.png"
 width="322" height="201" /&gt;&lt;/a&gt;&amp;nbsp;&lt;a
href="http://10rem.net/media/87636/Windows-Live-Writer_Promoting-your-Windows-Store-apps-on-the_11350_image_16.png"
 target="_blank"&gt;&lt;img title="image"
style="border-top: 0px; border-right: 0px; background-image: none; border-bottom: 0px; padding-top: 0px; padding-left: 0px; border-left: 0px; display: inline; padding-right: 0px"
 border="0" alt="image"
src="http://10rem.net/media/87641/Windows-Live-Writer_Promoting-your-Windows-Store-apps-on-the_11350_image_thumb_7.png"
 width="322" height="201" /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;(Did I mention I have a four year old daughter? The dress-up
app isn't mine. Honest!)&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;The Disney app still uses side scrolling and has obvious touch
points. It just works well. The Lola math game has no such box
layout, but has obvious places where the user would interact with
the screen and works well with touch and mouse. My 4yo girl picked
it up without any problems at all.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;You can see that although most of these use the hub page
boxes-style layout, none of them look exactly like one of the
built-in templates.&lt;/strong&gt; Each has changes in color, styling,
branding, and most importantly, layout which works for that
specific app.&lt;/p&gt;

&lt;p&gt;Several of them (and many other apps) do, however, fall down a
bit when it comes to targeting people with giant screens like mine.
Let's look at that.&lt;/p&gt;

&lt;h3&gt;Be resolution and DPI aware&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;When you write apps for Windows 8, you're writing apps
for PCs.&lt;/strong&gt; Apps need to work on everything from 1024x768 all
the way up to low DPI 30" screens at 2560x1600, and smaller high
DPI screens running at similar resolutions. Much of the DPI work is
taken care of for you automatically by the runtime, and scaling to
different resolutions is easy.&lt;/p&gt;

&lt;h4&gt;High DPI&lt;/h4&gt;

&lt;p&gt;High DPI screens are ones where there's a high resolution but
small physical size. &lt;strong&gt;On these types of screens, Windows
typically installs at a higher DPI setting where one pixel in your
app is multiple physical pixels on screen.&lt;/strong&gt; The additional
pixels are used by vector graphics and fonts to make edges smoother
and crisper. But when it comes to bitmapped graphics, you need to
provide different DPI versions in order to maintain crispness in
the display. Luckily, this is REALLY easy to do by simply naming
your images following the scale naming convention. &lt;a
href="http://10rem.net/blog/2012/12/01/scaled-dpi-aware-image-assets-for-windows-8-apps-in-visual-studio-2012-update-1"
 target="_blank"&gt;Visual Studio even has support for this for the
logo graphics&lt;/a&gt;.&lt;/p&gt;

&lt;h4&gt;High Resolution&lt;/h4&gt;

&lt;p&gt;Higher resolution, low DPI screens take a little more thought on
your part. You generally have two choices:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Show more content on the screen&lt;/li&gt;

&lt;li&gt;Make everything bigger&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I've seen both done successfully. The second ("make everything
bigger") works well only when you have high resolution bitmap
graphics or you are using all vector content. In XAML, you can use
a ViewBox to make this happen for you. The former ("show more
content") works well only if you have sufficient content to fill
the screen. The stock itemscontrols (ListView, GridView) typically
work well in this scenario.&lt;/p&gt;

&lt;p&gt;Unfortunately, many apps take a third option: just center
everything in an area optimized for 1366x768. On a large screen,
this looks terrible. I won't pick on specific apps here as I'd
rather work constructively with those app authors to see how they
can make better use of screen space.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;While you're there making your app scale nicely, you can
use the same code and layout to make sure you support Portrait,
Landscape, Snapped, and Filled views.&lt;/strong&gt; The default
templates provide a great way to structure these notifications and
layout changes. Endeavor to make each view as functional as
possible.&lt;/p&gt;

&lt;h4&gt;Testing DPI and Resolution&lt;/h4&gt;

&lt;p&gt;We don't all have access to giant screens, or high DPI screens,
so we need to use the built-in tools. The Simulator in Visual
Studio lets you run your app at different resolutions and DPIs just
to verify that elements are laying out as you'd expect.&lt;/p&gt;

&lt;h3&gt;Support different processors&lt;/h3&gt;

&lt;p&gt;My desktop machine is a water-cooled overclocked processor with
6 cores and 12 logical processors and 12gb memory. I have a 16gb
quad core laptop as well. My son has an older netbook with
something like 2 or 3gb. My wife has a core i5 machine with 4gb
memory. I also have two surfaces, each with ARM processors running
Windows RT. &lt;strong&gt;All of those Windows 8 PCs are just in a single
house.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="http://www.flickr.com/photos/ideonexus/2187330273/"
target="_blank"&gt;&lt;img title="image"
style="border-top: 0px; border-right: 0px; background-image: none; border-bottom: 0px; padding-top: 0px; padding-left: 0px; border-left: 0px; display: inline; padding-right: 0px"
 border="0" alt="image"
src="http://10rem.net/media/87646/Windows-Live-Writer_Promoting-your-Windows-Store-apps-on-the_11350_image_45.png"
 width="650" height="433" /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The power of the Windows ecosystem is choice. There are
currently over 1,700 systems certified for Windows 8. Now, before
you think "holy crap that's a huge test matrix" consider that this
is no different from what PC manufacturers have had to test for in
the past, except we've made the API more uniform and have made the
OS version matrix far smaller.&lt;/p&gt;

&lt;p&gt;I'd encourage developers with serious apps to test on:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;A developer class desktop or laptop with high resolution
display. This should have discrete NVIDIA or AMD graphics, also
preferably an SSD. No touch.&lt;/li&gt;

&lt;li&gt;A typical laptop with integrated graphics and a spinning rust
hard drive, touch optional but a good idea.&lt;/li&gt;

&lt;li&gt;Possibly an older (2-3 years) laptop without touch.&lt;/li&gt;

&lt;li&gt;A Surface or other Windows RT device with touch.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;That, to me, provides a decent look at performance at a CPU
level. Now, if you're a game development house, you likely have a
much larger matrix, covering different makes of video cards with
different capabilities, for example. Again, we've made that easier
in Windows 8 and Windows RT, but you'll still want to continue that
practice.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;But what's the independent developer to do? For you, I
suggest testing on your development PC and a Windows RT
device.&lt;/strong&gt; Consider it a good excuse to get a lightweight and
low power tablet (I know I love mine). For other performance
testing, invite some friends with different laptops and side-load
the app on to their machines for testing. Make a party out of it
(but realize you'll get the most, umm, useful feedback before the
party gets too far along). It's easy to do and you'll get great
feedback not only on performance, but your friends will be blunt
with their assessment of your app as well.&lt;/p&gt;

&lt;p&gt;Many developers ask me "if I'm targeting ARM, do I really need a
Surface to test?" &lt;strong&gt;Yes, I consider a Windows RT device, such
as a Surface, essential for testing anything but the most basic of
apps.&lt;/strong&gt; We've done a ton of work to unify the development
model across all of Windows 8 and Windows RT, but at the end of the
day, ARM is a completely different architecture from x86/64. I've
worked with developers who discovered race conditions in their apps
that were masked on x86 but which showed up on ARM, for example.
Plus, for many developers, it would be their only touch device, and
you really do want to understand how your app performs on a true
touch device.&lt;/p&gt;

&lt;p&gt;If you can't pick up a Surface (or other Windows RT device)
yourself, you could solicit the help of local or international
friends who could test on their own Surface. The Internet is a
wonderful thing.&lt;/p&gt;

&lt;h3&gt;Don't be an island: support searching&lt;/h3&gt;

&lt;p&gt;Most apps have data which can be searched. Sometimes that data
is external, on the web. Sometimes that data is just files stored
on the file system. Sometimes that data is structured and stored in
a database. In all cases, these apps should support the search
contract.&lt;/p&gt;

&lt;p&gt;&lt;img title="image"
style="border-top: 0px; border-right: 0px; background-image: none; border-bottom: 0px; padding-top: 0px; padding-left: 0px; border-left: 0px; display: inline; padding-right: 0px"
 border="0" alt="image"
src="http://10rem.net/media/87651/Windows-Live-Writer_Promoting-your-Windows-Store-apps-on-the_11350_image_78.png"
 width="650" height="357" /&gt;&lt;/p&gt;

&lt;p&gt;Adding search contract support is quite easy, and you can use it
to replace any built-in search you were going to include in your
app anyway. &lt;a
href="http://msdn.microsoft.com/en-us/library/windows/apps/hh465231.aspx"&gt;
You can learn more about searching on MSDN&lt;/a&gt;, and also in my book
&lt;a href="http://manning.com/pbrown3/"&gt;Windows 8 XAML in
Action&lt;/a&gt;.&lt;/p&gt;

&lt;h3&gt;Use the built-in file pickers&lt;/h3&gt;

&lt;p&gt;The days of all the user's data existing on their local machine
are, if not already long gone, well on their way out. These days, a
file might exist locally, or on a server, or on a social network,
or cloud storage. Or maybe, just maybe, the file doesn't exist in a
physical form at all! WinRT provides an easy way for apps to
integrate with file pickers both as consumers and as owners of
content. You could, for example, provide a file picker interface
for your app which pulls data from a database and assembles a file
on-demand.&lt;/p&gt;

&lt;p&gt;Back to the music scenarios: imagine that you want to load a
sample or loop into your app. Another app could serve as a file
picker, but only for content you purchase. You could then easily
use that purchased content in your music creation app.&lt;/p&gt;

&lt;p&gt;&lt;img title="image"
style="border-top: 0px; border-right: 0px; background-image: none; border-bottom: 0px; padding-top: 0px; padding-left: 0px; border-left: 0px; display: inline; padding-right: 0px"
 border="0" alt="image"
src="http://10rem.net/media/87656/Windows-Live-Writer_Promoting-your-Windows-Store-apps-on-the_11350_image_50.png"
 width="650" height="457" /&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;(figure from Windows 8 XAML in Action)&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;By integrating with file pickers as a consumer, your app doesn't
need to know where the files came from, or how they got there. It
simply simply needs to work with the StorageItem class and the file
picker interfaces. These are your new OpenFileDialog and
SaveFileDialog, so get to know them well.&lt;/p&gt;

&lt;p&gt;&lt;a
href="http://msdn.microsoft.com/en-us/library/windows/apps/hh465174.aspx"&gt;
You can learn more about the File Open and File Save pickers on
MSDN&lt;/a&gt; (and, as with most of these topics, also in my book).&lt;/p&gt;

&lt;h3&gt;Sharing is as important now as it was in Kindergarten&lt;/h3&gt;

&lt;p&gt;One of the first things you're taught in Kindergarten is to
share with others. Why? Because it forces interaction with others
and helps take a bunch of loners and turn them into a
classroom.&lt;/p&gt;

&lt;p&gt;An app that can share to other apps will gain visibility through
that share. For example, if your app can share photos it creates
with other apps, there's a better chance those photos will show up
on social networks like Twitter and Facebook.&lt;/p&gt;

&lt;p&gt;&lt;a
href="http://10rem.net/media/87661/Windows-Live-Writer_Promoting-your-Windows-Store-apps-on-the_11350_image_54.png"
 target="_blank"&gt;&lt;img title="image"
style="border-top: 0px; border-right: 0px; background-image: none; border-bottom: 0px; padding-top: 0px; padding-left: 0px; border-left: 0px; display: inline; padding-right: 0px"
 border="0" alt="image"
src="http://10rem.net/media/87666/Windows-Live-Writer_Promoting-your-Windows-Store-apps-on-the_11350_image_thumb_24.png"
 width="650" height="308" /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;An app that can be the target of sharing will be indispensible
to users. For example, if your app can take shared music files and
post them to SoundCloud or MySpace or BandCamp, or shared videos
and post them to Vimeo or YouTube, the user will come to rely on
your app for those operations. &lt;strong&gt;Your app becomes an integral
part of the system, adding value to every other app in Windows, and
serving as an important gateway to outside services.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;There are a number of different formats which can be shared,
from simple URLs and text to whole files and HTML markup. Support
as many of these as makes sense in your app.&lt;/p&gt;

&lt;p&gt;&lt;a
href="http://msdn.microsoft.com/en-us/library/windows/apps/hh758314.aspx"
 target="_blank"&gt;You can learn more about sharing on MSDN.&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;Draw your user in&lt;/h3&gt;

&lt;p&gt;Let's assume for a moment that you were able to get the user to
download and install your app (the topic for the next post).
&lt;strong&gt;Once installed, a good app keeps the user coming back for
more.&lt;/strong&gt; It does this by keeping content fresh, if it is a
content app, or by just being an indispensible part of the user's
workflow.&lt;/p&gt;

&lt;h4&gt;The Start Screen Tile&lt;/h4&gt;

&lt;p&gt;An attractive tile is important to getting the user to use your
app. It needs to be obvious and clear. It should also be
attractive, and not look like it was a last-minute design asset
thrown together in Paint. :)&lt;/p&gt;

&lt;p&gt;&lt;a
href="http://10rem.net/media/87671/Windows-Live-Writer_Promoting-your-Windows-Store-apps-on-the_11350_image_73.png"
 target="_blank"&gt;&lt;img title="image"
style="border-top: 0px; border-right: 0px; background-image: none; border-bottom: 0px; padding-top: 0px; padding-left: 0px; border-left: 0px; display: inline; padding-right: 0px"
 border="0" alt="image"
src="http://10rem.net/media/87676/Windows-Live-Writer_Promoting-your-Windows-Store-apps-on-the_11350_image_thumb_31.png"
 width="650" height="136" /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Content apps and games can both take advantage of live tiles on
the Windows Start screen. Content apps can show slideshows of the
content, working under the assumption that it is the content that
is the draw, not the app itself. Games can, similarly, entice users
to continue playing by showing progress so far, how many steps to
the next level, etc.&lt;/p&gt;

&lt;p&gt;Make use of the available layouts in the &lt;a
href="http://msdn.microsoft.com/en-us/library/windows/apps/hh761491.aspx"
 target="_blank"&gt;tile template catalog&lt;/a&gt; and pick one which is
appropriate for your app. That page also has excellent guidance for
when to use each type of tile.&lt;/p&gt;

&lt;h4&gt;The Hub Page&lt;/h4&gt;

&lt;p&gt;If your app has a number of different options, different
categories of content, or has multiple projects the user may be
working in, a hub page may make sense. A hub page is the first page
the user sees - it provides an overview of what has been done so
far, and what remains to be done, as well as what new content is
available and more. The minesweeper screenshot near the start of
this post is an example of a hub page. It lets you switch themes,
see your achievements, and more.&lt;/p&gt;

&lt;p&gt;Many productivity apps on the desktop include a dialog which is
displayed when you first start the app. For example, when I open
Cubase 7, I get this dialog:&lt;/p&gt;

&lt;p&gt;&lt;img title="image"
style="border-top: 0px; border-right: 0px; background-image: none; border-bottom: 0px; padding-top: 0px; padding-left: 0px; border-left: 0px; display: inline; padding-right: 0px"
 border="0" alt="image"
src="http://10rem.net/media/87681/Windows-Live-Writer_Promoting-your-Windows-Store-apps-on-the_11350_image_66.png"
 width="650" height="409" /&gt;&lt;/p&gt;

&lt;p&gt;Formatted another way, this type of hub would be perfect for the
hub screen of a Windows 8 app.&lt;/p&gt;

&lt;p&gt;Similarly, when I open Premiere Pro and After Effects, I get
these screens:&lt;/p&gt;

&lt;p&gt;&lt;img title="image"
style="border-top: 0px; border-right: 0px; background-image: none; border-bottom: 0px; padding-top: 0px; padding-left: 0px; border-left: 0px; display: inline; padding-right: 0px"
 border="0" alt="image"
src="http://10rem.net/media/87686/Windows-Live-Writer_Promoting-your-Windows-Store-apps-on-the_11350_image_63.png"
 width="311" height="270" /&gt;&amp;nbsp;&lt;img title="image"
style="border-top: 0px; border-right: 0px; background-image: none; border-bottom: 0px; padding-top: 0px; padding-left: 0px; border-left: 0px; display: inline; padding-right: 0px"
 border="0" alt="image"
src="http://10rem.net/media/87691/Windows-Live-Writer_Promoting-your-Windows-Store-apps-on-the_11350_image_64.png"
 width="332" height="270" /&gt;&lt;/p&gt;

&lt;p&gt;And, of course, you're all familiar with the hub screen we see
almost every day:&lt;/p&gt;

&lt;p&gt;&lt;img title="image"
style="border-top: 0px; border-right: 0px; background-image: none; border-bottom: 0px; padding-top: 0px; padding-left: 0px; border-left: 0px; display: inline; padding-right: 0px"
 border="0" alt="image"
src="http://10rem.net/media/87696/Windows-Live-Writer_Promoting-your-Windows-Store-apps-on-the_11350_image_65.png"
 width="650" height="384" /&gt;&lt;/p&gt;

&lt;p&gt;If your app is complex enough to warrant it, or simply needs a
nice landing spot for the user before throwing them into the task,
consider putting a hub page. It will help you with discoverability
of features for your app, as well as make it easy for a new user to
navigate your UI.&lt;/p&gt;

&lt;p&gt;Music Maker Jam uses its hub page for selling content packs as
well as for loading existing projects and even a little advertising
on the side.&lt;/p&gt;

&lt;p&gt;&lt;a
href="http://10rem.net/media/87701/Windows-Live-Writer_Promoting-your-Windows-Store-apps-on-the_11350_image_75.png"
 target="_blank"&gt;&lt;img title="image"
style="border-top: 0px; border-right: 0px; background-image: none; border-bottom: 0px; padding-top: 0px; padding-left: 0px; border-left: 0px; display: inline; padding-right: 0px"
 border="0" alt="image"
src="http://10rem.net/media/87706/Windows-Live-Writer_Promoting-your-Windows-Store-apps-on-the_11350_image_thumb_32.png"
 width="650" height="238" /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;One of my favorite uses of a hub screen is in the episode-based
game Adera, shown here in a screen shot from my Surface. Notice how
it has the main tasks right there, but then additional engaging
information to the right, including achievements and collections.
Each group lets you drill down to see more episodes, items, and
more.&lt;/p&gt;

&lt;p&gt;&lt;a
href="http://10rem.net/media/87711/Windows-Live-Writer_Promoting-your-Windows-Store-apps-on-the_11350_image_77.png"
 target="_blank"&gt;&lt;img title="image"
style="border-top: 0px; border-right: 0px; background-image: none; border-bottom: 0px; padding-top: 0px; padding-left: 0px; border-left: 0px; display: inline; padding-right: 0px"
 border="0" alt="image"
src="http://10rem.net/media/87716/Windows-Live-Writer_Promoting-your-Windows-Store-apps-on-the_11350_image_thumb_33.png"
 width="650" height="366" /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;A good tile can attract the user's attention, and a good
hub screen can engage them them moment they launch your
app.&lt;/strong&gt;&lt;/p&gt;

&lt;h3&gt;Test, Test, Test&lt;/h3&gt;

&lt;p&gt;Finally, I can't say this enough: test your app. Test it on your
own machines, and then, if you don't have a formal testing group,
send side load versions to your friends to test. At a minimum, you
want to test on all processor architectures you support (x86 32, 64
and ARM). If your app makes use of peripherals like sound cards,
web cams, microphones, or others, you'll want to test using a
variety of those devices as well.&lt;/p&gt;

&lt;p&gt;Trust me, you don't want your app to earn one of these
stickers:&lt;/p&gt;

&lt;p&gt;&lt;a
href="http://shop.evilmadscientist.com/productsmenu/else/62-bugs-stickers"
 target="_blank"&gt;&lt;img title="image"
style="border-top: 0px; border-right: 0px; background-image: none; border-bottom: 0px; padding-top: 0px; padding-left: 0px; border-left: 0px; display: inline; padding-right: 0px"
 border="0" alt="image"
src="http://10rem.net/media/87721/Windows-Live-Writer_Promoting-your-Windows-Store-apps-on-the_11350_image_69.png"
 width="400" height="300" /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Just because an App seems smaller than an Application, don't
test it any less.&lt;/p&gt;

&lt;p&gt;In the next post, I'll provide some ideas for promoting your app
and for getting your user to get past the first hurdle: the initial
download.&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/PeteBrown?a=0axoQBgvn3s:-P-jATV3ot4:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PeteBrown?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/PeteBrown?a=0axoQBgvn3s:-P-jATV3ot4:I9og5sOYxJI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PeteBrown?d=I9og5sOYxJI" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/PeteBrown?a=0axoQBgvn3s:-P-jATV3ot4:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PeteBrown?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/PeteBrown?a=0axoQBgvn3s:-P-jATV3ot4:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PeteBrown?i=0axoQBgvn3s:-P-jATV3ot4:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/PeteBrown?a=0axoQBgvn3s:-P-jATV3ot4:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PeteBrown?i=0axoQBgvn3s:-P-jATV3ot4:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/PeteBrown?a=0axoQBgvn3s:-P-jATV3ot4:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PeteBrown?i=0axoQBgvn3s:-P-jATV3ot4:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/PeteBrown/~4/0axoQBgvn3s" height="1" width="1"/&gt;</description><feedburner:origLink>http://10rem.net/blog/2013/01/23/getting-more-visibility-for-your-windows-store-app-part-1-create-great-apps</feedburner:origLink></item><item><title>Maker Geek Roundup 017 for 1/22/2013</title><author>Pete Brown	</author><link>http://feedproxy.google.com/~r/PeteBrown/~3/O0WxvLJP6LA/maker-geek-roundup-017-for-1-22-2013</link><pubDate>Tue, 22 Jan 2013 04:14:21 GMT</pubDate><guid isPermaLink="false">http://10rem.net/blog/2013/01/22/maker-geek-roundup-017-for-1-22-2013</guid><description>&lt;p&gt;The Maker Geek Roundup aggregates information of interest to
makers everywhere. Topics include .NET Micro Framework, Arduino,
AVR and other MCUs, CNC, 3d Printing, Robotics, Microsoft Robotics
Studio, Electronics, General Maker stuff, and more. If you have
something interesting you've done or have run across, or you blog
regularly on the topics included here, please send me the URL and
brief description via the &lt;a href="http://10rem.net/contact"&gt;contact link&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;This fall I was swamped with my new position at work, all the
awesome Windows 8 launch work, plus &lt;a
href="http://channel9.msdn.com/Events/Build/2012/0-001"
target="_blank"&gt;my involvement in Build 2012&lt;/a&gt;, so I took a break
from the roundup. Lots of stuff to cover here.&lt;/p&gt;

&lt;h3&gt;3d Printing, CAD/CAM/CNC&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a
href="http://www.robmiles.com/journal/2013/1/20/printing-lumia-cases.html"&gt;
Printing Lumia Cases&lt;/a&gt; (based on templates Nokia themselves
released | Rob Miles)&lt;/li&gt;

&lt;li style="list-style: none"&gt;
&lt;ul&gt;
&lt;li&gt;and &lt;a
href="http://mynokiablog.com/2013/01/18/nokia-releases-3d-printing-templates-for-lumia-820-shells-allows-you-to-print-your-own-custom-shell/"&gt;
Nokia Releases 3D Printing Templates for Lumia 820 Shells; Allows
You To Print Your Own Custom Shell&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;

&lt;li&gt;&lt;a href="https://store.makerbot.com/replicator2x.html"&gt;MakerBot
Replicator™ 2X Desktop 3D Printer&lt;/a&gt; (MakerBot - Announced at
CES)&lt;/li&gt;

&lt;li style="list-style: none"&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a
href="http://www.makerbot.com/blog/2013/01/09/announcing-the-makerbot-replicator-2x-experimental-3d-printer/"&gt;
Announcing the MakerBot Replicator 2X Experimental 3D
Printer!&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;

&lt;li&gt;&lt;a href="http://www.cubify.com/cubex/"&gt;Cubify - Express
Yourself in 3D&lt;/a&gt; (CubeX - Announced at CES)&lt;/li&gt;

&lt;li&gt;&lt;a
href="http://www.3d-printers.com.au/2013/01/19/3d-printing-legislated/"&gt;
Will 3D Printing Be Legislated&lt;/a&gt; (3d Printers Australia)&lt;/li&gt;

&lt;li&gt;&lt;a
href="http://www.youtube.com/watch?v=sC-AHm6dS44&amp;amp;feature=player_embedded"&gt;
The Largest Ever 3D Printed Wrench!&lt;/a&gt; (YouTube | Objet)&lt;/li&gt;

&lt;li&gt;&lt;a
href="http://blog.ultimaker.com/2013/01/21/media-ultimaker-featured-in-science-program-dutch-de-wereld-leert-door/"&gt;
Ultimaker pivotal in Dutch medical research&lt;/a&gt; (Ultimaker)&lt;/li&gt;

&lt;li&gt;&lt;a href="http://www.youtube.com/watch?v=67cev_zcXJw"&gt;3D Printed
iPhone Case with Moving Gears!&lt;/a&gt; (YouTube | Objet)&lt;/li&gt;

&lt;li&gt;&lt;a
href="http://www.makerbot.com/blog/2013/01/18/design-unique-things-easily-with-makerbot-customizer/"&gt;
Design Unique Things Easily With MakerBot Customizer&lt;/a&gt;
(Makerbot)&lt;/li&gt;

&lt;li&gt;&lt;a
href="http://hydraraptor.blogspot.com/2012/12/mendel90-updates.html"&gt;
Mendel90 updates&lt;/a&gt; (HydraRaptor)&lt;/li&gt;

&lt;li&gt;&lt;a
href="http://vonkonow.com/wordpress/2012/08/bringing-a-12-year-old-roland-mdx-20-up-to-date/"&gt;
Bringing a 12 year old Roland MDX-20 up to date&lt;/a&gt; (Johan von
Konow)&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;Laser Cutting&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a
href="http://vonkonow.com/wordpress/2012/12/laser-cut-miniature-gingerbread-house/"&gt;
Laser cut gingerbread house&lt;/a&gt; (Johan von Konow)&lt;/li&gt;

&lt;li&gt;&lt;a
href="http://blog.ponoko.com/2013/01/20/laser-cut-layers-2/"&gt;Laser
cut layers&lt;/a&gt; (Ponoko)&lt;/li&gt;

&lt;li&gt;&lt;a
href="http://blog.ponoko.com/2013/01/16/laser-cut-paper-stained-glass-windows/"&gt;
Laser Cut Paper Stained Glass Windows&lt;/a&gt; (Ponoko)&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;NETMF (.NET Gadgeteer and Netduino)&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a
href="http://highfieldtales.wordpress.com/2013/01/05/how-to-get-our-netduino-running-faster/"&gt;
How to get our Netduino running faster&lt;/a&gt; (Highfield Tales)&lt;/li&gt;

&lt;li&gt;&lt;a
href="http://mikedodaro.net/2012/10/01/playing-with-mountaineer-ethernet-mainboard/"&gt;
Playing with Mountaineer Ethernet Mainboard&lt;/a&gt; (Marco
Minerva)&lt;/li&gt;

&lt;li&gt;&lt;a
href="http://highfieldtales.wordpress.com/2013/01/17/modbus-libraries-version-2-beta-are-out/"&gt;
Modbus libraries version 2 beta are out!&lt;/a&gt; (Highfield Tales)&lt;/li&gt;

&lt;li&gt;&lt;a
href="http://www.breakcontinue.com/2013/01/rick-dangerous-port-for-netmf.html"&gt;
Rick Dangerous Port for NETMF | Take a break&lt;/a&gt; (Valentin
Ivanov)&lt;/li&gt;

&lt;li&gt;&lt;a
href="http://mikedodaro.net/2012/09/17/gadgeteer-home-automation-system/"&gt;
Gadgeteer Home Automation System&lt;/a&gt; (Marco Minerva)&lt;/li&gt;

&lt;li&gt;&lt;a
href="http://mikedodaro.net/2012/07/23/creating-an-udp-server-with-net-gadgeteer/"&gt;
Creating an UDP Server with .NET Gadgeteer&lt;/a&gt; (Marco Minerva)&lt;/li&gt;

&lt;li&gt;&lt;a
href="http://blog.makezine.com/2013/01/21/netduino-2-faster-better-for-the-same-price/"&gt;
Netduino 2 - Faster &amp;amp; Better for the Same Price.&lt;/a&gt;
(Make)&lt;/li&gt;

&lt;li&gt;&lt;a
href="http://mcinnes01.blogspot.com/2012/09/netduino-optocoupler-testing.html"&gt;
Netduino - Optocoupler testing&lt;/a&gt; (My projects)&lt;/li&gt;

&lt;li&gt;&lt;a href="http://embedded-lab.com/blog/?p=6395"&gt;Netduino Day 3 -
Multiplexed Seven-Segment LED displays&lt;/a&gt; (Embedded Lab)&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;Arduino and AVR&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a
href="http://vonkonow.com/wordpress/2012/10/nanino-the-diy-friendly-arduino/"&gt;
Nanino - the DIY friendly Arduino&lt;/a&gt; (Johan von Konow)&lt;/li&gt;

&lt;li&gt;&lt;a
href="http://arduino.cc/blog/2013/01/10/an-arduino-based-adb-to-usb-adapter-for-next-keyboards/"&gt;
An Arduino-based ADB-to-USB adapter for NeXT keyboards&lt;/a&gt; (Arduino
Blog)&lt;/li&gt;

&lt;li&gt;&lt;a href="http://arduino.cc/blog/2013/01/12/my-rgb-lamp/"&gt;An
Arduino-controlled RGB lamp&lt;/a&gt; (Arduino Blog)&lt;/li&gt;

&lt;li&gt;&lt;a
href="http://dangerousprototypes.com/2013/01/22/rfid-multipass-spoof-using-attiny85/"&gt;
RFID Multipass spoof using ATTiny85&lt;/a&gt; (Dangerous Prototypes)&lt;/li&gt;

&lt;li&gt;&lt;a
href="http://forums.hackaday.com/viewtopic.php?f=3&amp;amp;t=3040"&gt;Cracking
an electronic safe using brute force&lt;/a&gt; (Hack-a-day forum)&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;Other Microcontrollers (PIC, ARM, Raspberry PI, Parallax,
more)&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a
href="http://jumptuck.com/2012/09/20/snake-game-arm-microcontroller/"&gt;
Snake game on an ARM microcontroller&lt;/a&gt; (Jumptuck)&lt;/li&gt;

&lt;li&gt;&lt;a
href="http://dangerousprototypes.com/2013/01/20/hive-retro-computer/"&gt;
Hive retro computer&lt;/a&gt; (Dangerous Prototypes | Classic computer
created with Parallax processors)&lt;/li&gt;

&lt;li&gt;(Also see Launchpad + Rapsberry PI link under
synthesizers/MIDI/OSC)&lt;/li&gt;

&lt;li&gt;&lt;a href="http://davidhunt.ie/?p=2826"&gt;Macro Pi - Focus Stacking
using Raspberry Pi&lt;/a&gt; (David Hunt Photography)&lt;/li&gt;

&lt;li&gt;&lt;a
href="http://tinkerlog.com/2012/12/21/raspberry-pi-with-rgb-pixels-and-node-js/"&gt;
Raspberry Pi with RGB-Pixels and node.js&lt;/a&gt; (Tinkerlog)&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;General Electronics and Hardware Hacking&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a
href="http://highfieldtales.wordpress.com/2012/12/28/an-example-of-an-hardware-problem-and-how-to-solve-it/"&gt;
An example of an hardware problem and how to solve it&lt;/a&gt;
(Highfield Tales)&lt;/li&gt;

&lt;li&gt;&lt;a
href="http://blog.ianlee.info/2013/01/quick-tip-soldering-resistors-to-leds.html"&gt;
Quick Tip - Soldering Resistors to LEDs&lt;/a&gt; (Ian Lee)&lt;/li&gt;

&lt;li&gt;&lt;a href="http://whiskeytangohotel.com/clockvm"&gt;Analog Clock
turned DC Voltmeter&lt;/a&gt; (WhiskeyTangoHotel)&lt;/li&gt;

&lt;li&gt;&lt;a
href="http://jomegat.wordpress.com/2013/01/20/oh-sting-where-art-thou-wifi/"&gt;
Oh Sting, Where Art Thou Wifi?&lt;/a&gt; (Jomegat)&lt;/li&gt;

&lt;li&gt;&lt;a
href="http://www.instructables.com/id/Make-a-Variable-Resister-with-1-Million-Settings/"&gt;
Make a Variable Resistor with 1 Million Settings&lt;/a&gt;
(Instructables)&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;Robots, *Copters, and Robotics Studio&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="http://petavolt.com/propel-helicopter/"&gt;Reverse
Engineering the Propel ExecuHeli IR Protocol&lt;/a&gt; (PetaVolt)&lt;/li&gt;

&lt;li&gt;&lt;a
href="http://robotgrrl.com/blog/2012/12/30/make-lego-and-arduino-projects-foreword/"&gt;
Make: Lego and Arduino Projects Foreword&lt;/a&gt; (Robotgrrl)&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;General Maker&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a
href="http://www.retrothing.com/2013/01/a-desktop-computer-for-the-ages.html"&gt;
A Desktop Computer For The Ages&lt;/a&gt; (Retro Thing)&lt;/li&gt;

&lt;li&gt;&lt;a
href="http://volpinprops.blogspot.com/2012/12/combat-shotgun-fallout.html"&gt;
Combat Shotgun, Fallout&lt;/a&gt; (Volpin Props)&lt;/li&gt;

&lt;li&gt;&lt;a
href="http://blog.ianlee.info/2013/01/princess-wands.html"&gt;Princess
Wands&lt;/a&gt; (Ian Lee)&lt;/li&gt;

&lt;li style="list-style: none"&gt;
&lt;ul&gt;
&lt;li&gt;plus: &lt;a
href="http://blog.ianlee.info/2012/09/birthday-badge.html"&gt;Birthday
Badges&lt;/a&gt;&lt;/li&gt;

&lt;!--EndFragment--&gt;
&lt;/ul&gt;
&lt;/li&gt;

&lt;li&gt;&lt;a
href="http://volpinprops.blogspot.com/2011/02/daft-punk-helmet-thomas-part-1.html"&gt;
Daft Punk Helmet (Thomas): Part 1&lt;/a&gt; (Volpin Props)&lt;/li&gt;

&lt;li&gt;&lt;a
href="http://www.toxel.com/tech/2013/01/21/heat-sensitive-table/"&gt;Heat
Sensitive Table&lt;/a&gt; (Toxel)&lt;/li&gt;

&lt;li&gt;&lt;a
href="http://volpinprops.blogspot.com/2012/04/skyrim-female-ancient-nord-helmet.html"&gt;
Skyrim Female Ancient Nord Helmet&lt;/a&gt; (Volpin Props)&lt;/li&gt;

&lt;li&gt;&lt;a
href="http://blog.makezine.com/2013/01/20/real-life-mario-kart-with-rfid-tagged-special-items/"&gt;
Real-life Mario Kart with RFID-Tagged Special Items&lt;/a&gt; (Make)&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;Synthesizers, Music, and MIDI/OSC&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a
href="http://atomolabs.blogspot.com/2013/01/new-atomosynth-mochikaxl-v22-dark-side.html"&gt;
NEW! AtomoSynth MochikaXL v2.2 "Dark side"&lt;/a&gt; (Atomosynth)&lt;/li&gt;

&lt;li&gt;&lt;a
href="http://createdigitalmusic.com/2013/01/the-monster-diy-project-looks-and-sounds-like-alien-spacecraft-control-panel/"&gt;
The Monster: DIY Project Looks, And Sounds, Like Alien Spacecraft
Control Panel&lt;/a&gt; (Create Digital Music)&lt;/li&gt;

&lt;li&gt;&lt;a href="http://www.illuminatedsounds.com/?p=2057"&gt;Launchpad +
Raspberry Pi&lt;/a&gt; (Illuminated Sounds)&lt;/li&gt;

&lt;li&gt;&lt;a
href="http://createdigitalmusic.com/2013/01/midi-fighter-spectra-crazy-sexy-arcade-buttons-us175-99-liveseratotraktor/"&gt;
Midi Fighter Spectra: Crazy-Sexy Arcade Buttons, US$175.99
[Live+Serato+Traktor]&lt;/a&gt; (Create Digital Music)&lt;/li&gt;

&lt;li&gt;&lt;a
href="http://www.moogmusic.com/news/introducing-sub-phatty"&gt;Moog
Sub Phatty Synthesizer Sets New Standard for Analog Sound
Design&lt;/a&gt; (Moog, introduced at CES)&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;Retro Computing and Commodore!&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;(see the "The Monster" link under synthesizers for some C64 +
SID action!)&lt;/li&gt;

&lt;li&gt;&lt;a
href="http://www.retrothing.com/2013/01/portable-commodore-64-turns-30-and-youre-invited-to-the-party.html"&gt;
Portable Commodore 64 Turns 30&lt;/a&gt; (Retro Thing)&lt;/li&gt;

&lt;li&gt;&lt;a
href="http://www.arcfn.com/2013/01/a-small-part-of-6502-chip-explained.html"&gt;
The 6502 CPU's overflow flag explained at the silicon level&lt;/a&gt;
(Ken Shirriff)&lt;/li&gt;

&lt;li&gt;&lt;a
href="http://www.mos6502.com/friday-commodore/strange-peripherals-the-triton-quick-disk/"&gt;
Strange peripherals… the Triton Quick Disk&lt;/a&gt; (MOS6502)&lt;/li&gt;

&lt;li&gt;&lt;a
href="http://www.mos6502.com/friday-commodore/strange-peripherals-the-soft-card/"&gt;
Strange peripherals… the Soft Card&lt;/a&gt; (MOS6502)&lt;/li&gt;

&lt;li&gt;&lt;a
href="http://amazingdiy.wordpress.com/2012/11/13/macintosh-plus/"&gt;Macintosh
Plus&lt;/a&gt; (Nice refurb | My DIY Blog)&lt;/li&gt;

&lt;li&gt;&lt;a
href="http://www.rgcd.co.uk/2012/12/sub-hunter-cartridge-available-c64.html"&gt;
Sub Hunter Cartridge Available! (C64)&lt;/a&gt; (RGCD)&lt;/li&gt;

&lt;li&gt;&lt;a
href="http://www.mos6502.com/friday-commodore/let-me-carry-your-c64/"&gt;
Let me carry your C64&lt;/a&gt; (MOS6502)&lt;/li&gt;

&lt;li&gt;&lt;a
href="http://www.mos6502.com/friday-commodore/there-and-back-again/"&gt;
There and back again&lt;/a&gt; (MOS6502)&lt;/li&gt;

&lt;li&gt;&lt;a
href="http://www.rgcd.co.uk/2012/10/space-lords-centaurus-available-c64.html"&gt;
Space Lords (Centaurus) Available! (C64)&lt;/a&gt; (RGCD)&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;Random stuff&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a
href="http://www.popsci.com/diy/article/2013-01/you-built-what-worlds-fastest-baby-carriage"&gt;
You Built What?!: The World's Fastest Baby Carriage&lt;/a&gt; (Popular
Science)&lt;/li&gt;

&lt;li&gt;&lt;a
href="http://www.toxel.com/inspiration/2013/01/16/toilet-paper-art/"&gt;
Bet you didn't do this well when you last TP'd a house&lt;/a&gt;
(Toxel)&lt;/li&gt;
&lt;/ul&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/PeteBrown?a=O0WxvLJP6LA:9Gkt9OsC3R8:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PeteBrown?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/PeteBrown?a=O0WxvLJP6LA:9Gkt9OsC3R8:I9og5sOYxJI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PeteBrown?d=I9og5sOYxJI" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/PeteBrown?a=O0WxvLJP6LA:9Gkt9OsC3R8:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PeteBrown?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/PeteBrown?a=O0WxvLJP6LA:9Gkt9OsC3R8:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PeteBrown?i=O0WxvLJP6LA:9Gkt9OsC3R8:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/PeteBrown?a=O0WxvLJP6LA:9Gkt9OsC3R8:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PeteBrown?i=O0WxvLJP6LA:9Gkt9OsC3R8:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/PeteBrown?a=O0WxvLJP6LA:9Gkt9OsC3R8:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PeteBrown?i=O0WxvLJP6LA:9Gkt9OsC3R8:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/PeteBrown/~4/O0WxvLJP6LA" height="1" width="1"/&gt;</description><feedburner:origLink>http://10rem.net/blog/2013/01/22/maker-geek-roundup-017-for-1-22-2013</feedburner:origLink></item><item><title>Traits of a good Windows Store app privacy policy</title><author>Pete Brown	</author><link>http://feedproxy.google.com/~r/PeteBrown/~3/Yx-y2jdoFm8/traits-of-a-good-windows-store-app-privacy-policy</link><pubDate>Mon, 21 Jan 2013 20:39:03 GMT</pubDate><guid isPermaLink="false">http://10rem.net/blog/2013/01/21/traits-of-a-good-windows-store-app-privacy-policy</guid><description>&lt;p&gt;A common cause of Windows Store app certification failures is a
missing or insufficient privacy policy. Many don't realize that a
network-enabled app must have a policy, or if they do, don't
realize exactly what needs to go into it. In this post, I'll talk
about some of my observations regarding what makes for a good
privacy policy for a Windows Store app.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;IMPORTANT&lt;/strong&gt;: &lt;strong&gt;This is neither official
guidance from Microsoft, nor legal advice from me.&lt;/strong&gt; I'm not
a lawyer - not even close. Privacy policies are legal documents
like licenses and should be crafted by a lawyer. When you speak to
your lawyer, however, you'll be better prepared because of the
information below. These are simply my suggestions based upon what
I have observed. I do not guarantee that a privacy policy written
as I recommend will pass store certification or be an appropriate
legal document. (Hopefully that's enough disclaimer.)&lt;/p&gt;

&lt;p&gt;Also, I am not on the Windows Store certification team. Please
don't come to me with "App X's privacy policy doesn't seem to
follow your instructions but it got in and I didn't" type of
questions. For those types of questions, there is the "Resolving
certification errors" page &lt;a
href="http://aka.ms/StoreFix"&gt;http://aka.ms/StoreFix&lt;/a&gt; and the
Windows Store support site &lt;a
href="http://aka.ms/StoreSupport"&gt;http://aka.ms/StoreSupport&lt;/a&gt; .
Also, for obvious legal reasons, I cannot review your privacy
policy and provide you with feedback on it.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Yes, the disclaimer is pretty big, but there's good reason
behind that. If you dig into the certification requirements, you'll
see that we don't recommend a privacy policy or provide any
templates for one, despite it being a fairly common request. That's
because Microsoft is not able to give legal advice and, as I
mentioned above, the privacy policy is a legal document.&lt;/p&gt;

&lt;p&gt;You should use a lawyer to help you write your privacy policy.
In reality, though, I know most independent developers will not
request the services of a lawyer, so let's talk a bit about what
should go into that policy regardless.&lt;/p&gt;

&lt;p&gt;First, please review &lt;a
href="http://msdn.microsoft.com/en-us/library/windows/apps/hh694083.aspx"
 target="_blank"&gt;these requirements&lt;/a&gt; (specifically requirement
4.1/4.1.1). The requirements are updated quite often to remove
ambiguities and provide further guidance, so if you see any
conflicts between what I'm writing here and what's in those
requirements, the requirements rule. The other important page is
the &lt;a href="http://aka.ms/StoreFix" target="_blank"&gt;Resolving
certification errors page&lt;/a&gt; which also includes information on
the privacy policy.&lt;/p&gt;

&lt;h3&gt;What is a privacy policy?&lt;/h3&gt;

&lt;p&gt;In the context of a Windows Store app, a privacy policy is a
legal document which details any privacy related aspects of the
app. It's intended to be transparent to the user and to allow them
to make informed decisions about what they share with the app, and
even if they want to install it to begin with.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;ASIDE&lt;/strong&gt;: When writing your policy, consider not
only how to explain the privacy aspects of the app, but also
whether the app even needs to the things it is using. For example,
does the server really need to store locale information about the
user? If not, go back to the app development team and request they
not keep that around. Your privacy and other legal obligations get
simpler the less you store. If you don't absolutely need it, don't
store it.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h3&gt;How to create a good privacy policy&lt;/h3&gt;

&lt;p&gt;A good privacy policy is clear, concise, and complete. It tells
the user exactly what is captured and what the app does it with. It
gives the user instructions to follow if they don't agree with
aspects of the policy (even if those instructions are to uninstall
the app and then email us at XYZ to delete the persisted data).&lt;/p&gt;

&lt;h4&gt;Make it specific&lt;/h4&gt;

&lt;p&gt;Many privacy policies fail in certification because the policy
isn't specific to the app. In most cases, the linked policy is a
generic one which is available on the company's web site. I
personally prefer to see a separate privacy policy just for the
app, but if that's not possible, you at least need to make sure the
policy has a section which very specifically details the named
Windows 8 app, what it collects, etc.&lt;/p&gt;

&lt;p&gt;Any app-specific section should have its heading on-screen,
without scrolling, when displayed at 1366x768 on a PC. In this way,
an end user will more easily find the content and what an end-user
can more easily find, so can a certification tester.&lt;/p&gt;

&lt;h4&gt;Make it comprehensive&lt;/h4&gt;

&lt;p&gt;The privacy policy needs to detail every piece of information
that is captured, and what you do with it. For example:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;IP Address&lt;/li&gt;

&lt;li&gt;Device ID&lt;/li&gt;

&lt;li&gt;User name from Windows&lt;/li&gt;

&lt;li&gt;Language information&lt;/li&gt;

&lt;li&gt;Third-party account information&lt;/li&gt;

&lt;li&gt;Webcam? Microphone?&lt;/li&gt;

&lt;li&gt;Documents?&lt;/li&gt;

&lt;li&gt;Contact information?&lt;/li&gt;

&lt;li&gt;Information collected by ads? (link to privacy policy for the
ad network)&lt;/li&gt;

&lt;li&gt;etc.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If any of those things are transmitted (IP address always is),
then you need to say what you do with it. For example, you may
point out that your server keeps a log of IP addresses which
contact the service, but that this information is not given to
third parties, is purged every X days (if it is), and would not be
released to any third parties except when required by law. You
must&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Explain what is collected&lt;/li&gt;

&lt;li&gt;Tell your users how it is used, stored, secured, and (if so)
disclosed&lt;/li&gt;

&lt;li&gt;Provide a way for the user to control the information&lt;/li&gt;

&lt;li&gt;Explain how users can access the information you've
collected&lt;/li&gt;

&lt;li&gt;Follow the law.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Although it is rare, if you don't collect or store anything,
just say so in your policy (for example, a peer-to-peer networking
app which stores nothing, not even the IP addresses, so server logs
don't even come into play). You still need to have a privacy policy
if you declare the Internet Client, Internet Client/Server or
Private Network Client/Server capabilities.&lt;/p&gt;

&lt;h4&gt;Make it comprehensible&lt;/h4&gt;

&lt;p&gt;Legal language is generally seen as pretty opaque to common
English readers. The language serves a good purpose, however, in
that the words chosen typically have well-understood legal
definitions and therefore help remove ambiguity. &lt;strong&gt;A common
mistake I've seen with EULAs and similar in the past, is a lay
person writes them using what they think looks like legal language.
The end results is often both incorrect and
incomprehensible.&lt;/strong&gt; To a lawyer, it sticks out like web page
code written by that spreadsheet guru in the accounting department
does to you.&lt;/p&gt;

&lt;p&gt;A privacy policy does not necessarily have to be written in
legalese. (Your lawyer can help you make this distinction if
necessary). In fact, I much prefer privacy policies that are short
and understandable and written in common language. If you are not a
lawyer, and are writing your policy yourself, just write it in
plain English (or the appropriate primary language for your app)
and don't pretend to be a legal expert.&lt;/p&gt;

&lt;h4&gt;Make it honest&lt;/h4&gt;

&lt;p&gt;Be honest about what you collect and what you do with it. If
there's anything which is even remotely a gray area, explicitly
call it out in the policy.&lt;/p&gt;

&lt;p&gt;If you update the privacy policy, include a revision date at the
top and then link to any previous versions. In general, unless
you've made the user opt in to a newer version of the policy, the
one that is in effect is the one that was out there when they
purchased the app. If there's any doubt, contact a lawyer for how
to proceed with revisions. Just don't try to slip them in there
with no notice.&lt;/p&gt;

&lt;p&gt;Don't be mean or sneaky. It &lt;strong&gt;will&lt;/strong&gt; catch up with
you.&lt;/p&gt;

&lt;h4&gt;Make it available&lt;/h4&gt;

&lt;p&gt;The privacy policy is linked to from the description page of
your Windows Store app listing, as well as from the charms bar
while the app is running. I'd also encourage you to make it
available as a link from your web site's standard privacy
policy.&lt;/p&gt;

&lt;p&gt;&lt;a
href="http://10rem.net/media/87465/Windows-Live-Writer_Traits-of-a-good-Windows-Store-app-priva_BBF2_image_2.png"
 target="_blank"&gt;&lt;img src="http://10rem.net/media/87470/Windows-Live-Writer_Traits-of-a-good-Windows-Store-app-priva_BBF2_image_thumb.png" width="650" height="252" alt="image" border="0" style="border-top: 0px; border-right: 0px; background-image: none; border-bottom: 0px; padding-top: 0px; padding-left: 0px; border-left: 0px; display: inline; padding-right: 0px"/&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;You can link to a web page with the privacy policy, or simply
include it in-line. I prefer to read it right on the screen, much
like the eBay app does, but either approach can be valid. Here's
the eBay app showing all of the points I've discussed so far.&lt;/p&gt;

&lt;p&gt;&lt;a
href="http://10rem.net/media/87475/Windows-Live-Writer_Traits-of-a-good-Windows-Store-app-priva_BBF2_image_6.png"
 target="_blank"&gt;&lt;img src="http://10rem.net/media/87480/Windows-Live-Writer_Traits-of-a-good-Windows-Store-app-priva_BBF2_image_thumb_2.png" width="650" height="448" alt="image" border="0" style="border-top: 0px; border-right: 0px; background-image: none; border-bottom: 0px; padding-top: 0px; padding-left: 0px; border-left: 0px; display: inline; padding-right: 0px"/&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I believe their policy is simply in an IFrame or webview in the
flyout. In that way, it is made available inside the app as well as
online.&lt;/p&gt;

&lt;p&gt;There are many other aspects of a good privacy policy, but these
were the ones that really stood out to me. Please consider them
when creating your own apps. Most of all, consider your user and
what is appropriate for them and fair to them. Put the user in
control of their data and their privacy, and don't make it
difficult for them to opt-out.&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/PeteBrown?a=Yx-y2jdoFm8:n4OXGW9ID7A:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PeteBrown?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/PeteBrown?a=Yx-y2jdoFm8:n4OXGW9ID7A:I9og5sOYxJI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PeteBrown?d=I9og5sOYxJI" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/PeteBrown?a=Yx-y2jdoFm8:n4OXGW9ID7A:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PeteBrown?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/PeteBrown?a=Yx-y2jdoFm8:n4OXGW9ID7A:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PeteBrown?i=Yx-y2jdoFm8:n4OXGW9ID7A:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/PeteBrown?a=Yx-y2jdoFm8:n4OXGW9ID7A:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PeteBrown?i=Yx-y2jdoFm8:n4OXGW9ID7A:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/PeteBrown?a=Yx-y2jdoFm8:n4OXGW9ID7A:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PeteBrown?i=Yx-y2jdoFm8:n4OXGW9ID7A:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/PeteBrown/~4/Yx-y2jdoFm8" height="1" width="1"/&gt;</description><feedburner:origLink>http://10rem.net/blog/2013/01/21/traits-of-a-good-windows-store-app-privacy-policy</feedburner:origLink></item><item><title>A simple bitcrusher and sample rate reducer in C++ for a Windows Store App</title><author>Pete Brown	</author><link>http://feedproxy.google.com/~r/PeteBrown/~3/MYHIzNFFZNs/a-simple-bitcrusher-and-sample-rate-reducer-in-cplusplus-for-a-windows-store-app</link><pubDate>Mon, 14 Jan 2013 00:10:45 GMT</pubDate><guid isPermaLink="false">http://10rem.net/blog/2013/01/13/a-simple-bitcrusher-and-sample-rate-reducer-in-cplusplus-for-a-windows-store-app</guid><description>&lt;p&gt;I'm working on a Windows 8 synthesizer app using XAudio2 and a
C++ + DirectX/XAML Windows Store app for Windows 8. As part of
this, I thought it would be fun to add a simple &lt;a
href="http://en.wikipedia.org/wiki/Bitcrusher" target="_blank"&gt;bit
crusher effect&lt;/a&gt; with included sample rate reducer. The point of
this effect is to make samples sound like they came from older
machines with lower bitrates and sample depth. To do that, I had to
do two things to the samples:&lt;/p&gt;

&lt;p&gt;1. Reduce the bit depth of the samples. This would control
vertical stepping as with a traditional bitcrusher.&lt;/p&gt;

&lt;p&gt;2. Reduce the bit rate of the samples. By default, this is 44100
or 48000 samples per second. Older systems did quite a bit less,
often 8192 samples, sometimes fewer like 4096 or 8192. I want to
get that old low-fi vibe as simply as possible.&lt;/p&gt;

&lt;p&gt;&lt;a href="http://en.wikipedia.org/wiki/Atari_2600"
target="_blank"&gt;&lt;img src="http://10rem.net/media/87355/Windows-Live-Writer_c94043a66209_109FA_image_17.png" width="288" height="166" alt="image" border="0" style="border-top: 0px; border-right: 0px; background-image: none; border-bottom: 0px; padding-top: 0px; padding-left: 0px; border-left: 0px; display: inline; padding-right: 0px"/&gt;&lt;/a&gt;&lt;a
href="http://en.wikipedia.org/wiki/Commodore_64"
target="_blank"&gt;&lt;img src="http://10rem.net/media/87360/Windows-Live-Writer_c94043a66209_109FA_image_20.png" width="337" height="166" alt="image" border="0" style="border-top: 0px; border-right: 0px; background-image: none; border-bottom: 0px; padding-top: 0px; padding-left: 0px; border-left: 0px; display: inline; padding-right: 0px"/&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I'm not plugging into the XAudio2 effects pipeline or otherwise
using any XAudio2 plumbing for the bit crusher effect here. The
algorithm would be given a buffer of stereo samples to process. The
buffer size will eventually be based on performance, but right now,
I just have a looping sample buffer. If you want to learn how to
create your own audio using XAudio2, please &lt;a
href="http://10rem.net/blog/2012/11/29/generating-sound-at-runtime-using-xaudio2-in-a-windows-store-app"
 target="_blank"&gt;refer to my older post on this topic&lt;/a&gt; (take
care to notice the comment at the bottom where I pointed out that I
didn't initialize one of the values).&lt;/p&gt;

&lt;p&gt;I'm not presenting a complete project here, but will post enough
source for you to have context for what I'm doing.&lt;/p&gt;

&lt;h3&gt;The StereoSample Structure&lt;/h3&gt;

&lt;p&gt;Each sample is actually a stereo pair. Stereo oscillators? How
cool :)&lt;/p&gt;

&lt;pre class="brush: cpp;"&gt;
struct StereoSample&lt;br /&gt;
{&lt;br /&gt;
public:&lt;br /&gt;
    SAMPLE_t Left;&lt;br /&gt;
    SAMPLE_t Right;&lt;br /&gt;
};
&lt;/pre&gt;

&lt;p&gt;SAMPLE_t is defined as float.&lt;/p&gt;

&lt;h3&gt;The Voice Class&lt;/h3&gt;

&lt;p&gt;The voice class represents a single voice in the synthesizer.
Among other things, it includes a collection of oscillators. Right
now, all three oscillators are configured to output exactly the
same thing. The Render function handles that output as well as
plugging in the bit crusher effect. Note that I apply the effect to
the output from all three oscillators, but in the real synth, this
is decoupled so I could apply it to a single oscillator in a single
voice.&lt;/p&gt;

&lt;pre class="brush: cpp;"&gt;
Voice::Voice(IXAudio2* audioEngine, int stereoBufferSize) :&lt;br /&gt;
    _audioEngine(audioEngine),&lt;br /&gt;
    _stereoBufferSize(stereoBufferSize)&lt;br /&gt;
{&lt;br /&gt;
    _bufferData = new StereoSample[stereoBufferSize];&lt;br /&gt;
&lt;br /&gt;
    for (int i = 0; i &amp;lt; MAX_OSCILLATORS; i++)&lt;br /&gt;
    {&lt;br /&gt;
        _oscillators.push_back(shared_ptr&amp;lt;Oscillator&amp;gt;(new Oscillator()));&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    // set up wave format using my good friend WAVEFORMATEX&lt;br /&gt;
    WAVEFORMATEX wfx;&lt;br /&gt;
    wfx.wBitsPerSample = SAMPLE_BITS;&lt;br /&gt;
    wfx.nAvgBytesPerSec = SAMPLE_RATE * SAMPLE_CHANNELS * SAMPLE_BITS / 8;&lt;br /&gt;
    wfx.nChannels = SAMPLE_CHANNELS;&lt;br /&gt;
    wfx.nBlockAlign = SAMPLE_CHANNELS * SAMPLE_BITS / 8;&lt;br /&gt;
    wfx.wFormatTag = WAVE_FORMAT_IEEE_FLOAT; // or could use WAVE_FORMAT_PCM&lt;br /&gt;
    wfx.nSamplesPerSec = SAMPLE_RATE;&lt;br /&gt;
    wfx.cbSize = 0;    // set to zero for PCM or IEEE float&lt;br /&gt;
&lt;br /&gt;
    DX::ThrowIfFailed(_audioEngine-&amp;gt;CreateSourceVoice(&lt;br /&gt;
        &amp;amp;_xavoice,&lt;br /&gt;
        (WAVEFORMATEX*)&amp;amp;wfx,&lt;br /&gt;
        0,&lt;br /&gt;
        XAUDIO2_DEFAULT_FREQ_RATIO,&lt;br /&gt;
        reinterpret_cast&amp;lt;IXAudio2VoiceCallback*&amp;gt;(&amp;amp;_voiceCallbackHandler),&lt;br /&gt;
        nullptr,&lt;br /&gt;
        nullptr));&lt;br /&gt;
}
&lt;/pre&gt;

&lt;pre class="brush: cpp;"&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
void Voice::Render(long phase, float noteFrequency)&lt;br /&gt;
{&lt;br /&gt;
    XAUDIO2_BUFFER buffer;&lt;br /&gt;
&lt;br /&gt;
    //int byteCount = sizeof(SAMPLE_t) * 2 * _stereoBufferSize;&lt;br /&gt;
    int byteCount =  sizeof(StereoSample) * _stereoBufferSize;&lt;br /&gt;
&lt;br /&gt;
    // zero all buffer data&lt;br /&gt;
    memset((byte*)_bufferData, 0, byteCount);&lt;br /&gt;
&lt;br /&gt;
    //_oscillators[0]-&amp;gt;Render(phase, noteFrequency, _bufferData, _stereoBufferSize);&lt;br /&gt;
    vector&amp;lt;shared_ptr&amp;lt;Oscillator&amp;gt;&amp;gt;::const_iterator cii;&lt;br /&gt;
    for (cii = _oscillators.begin(); cii &amp;lt; _oscillators.end(); cii++)&lt;br /&gt;
    {&lt;br /&gt;
        (*cii)-&amp;gt;Render(phase, noteFrequency, _bufferData, _stereoBufferSize);&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    // TEMP! Bit crunching to try out audio processing&lt;br /&gt;
    BitCruncher cruncher;&lt;br /&gt;
    cruncher.BitDepth = 24;&lt;br /&gt;
    cruncher.BitRate = 2048;&lt;br /&gt;
&lt;br /&gt;
    cruncher.ProcessSampleBuffer(phase, noteFrequency, _bufferData, _stereoBufferSize);&lt;br /&gt;
&lt;br /&gt;
    // TEMP Looping&lt;br /&gt;
    // the buffer will be looped infinitely&lt;br /&gt;
    buffer.AudioBytes = byteCount;&lt;br /&gt;
    buffer.PlayBegin = 0;&lt;br /&gt;
    buffer.PlayLength = 0;    // play entire buffer&lt;br /&gt;
    buffer.LoopBegin = 0;&lt;br /&gt;
    buffer.LoopLength = 0;    // loop entire buffer&lt;br /&gt;
    buffer.LoopCount = XAUDIO2_LOOP_INFINITE;&lt;br /&gt;
    buffer.pAudioData = (const BYTE *)_bufferData;&lt;br /&gt;
    buffer.pContext = NULL;&lt;br /&gt;
    buffer.Flags = 0;         // this is the value I left out in the previous post&lt;br /&gt;
&lt;br /&gt;
    // wire up the buffer&lt;br /&gt;
    DX::ThrowIfFailed(_xavoice-&amp;gt;SubmitSourceBuffer(&amp;amp;buffer));&lt;br /&gt;
&lt;br /&gt;
    // start playing sound.&lt;br /&gt;
    DX::ThrowIfFailed(_xavoice-&amp;gt;Start(0));&lt;br /&gt;
}
&lt;/pre&gt;

&lt;p&gt;My C++ isn't great yet, but I'm learning. I've even learned the
shared_ptr and vector templates :)&lt;/p&gt;

&lt;h3&gt;The Oscillators&lt;/h3&gt;

&lt;p&gt;The oscillators have a lot more to them, but the render
functions are the core:&lt;/p&gt;

&lt;pre class="brush: cpp;"&gt;
void Oscillator::RenderSine(long initialPhaseIncrement, float noteFrequency, StereoSample* buffer, long bufferCount)&lt;br /&gt;
{&lt;br /&gt;
    // fill the buffer&lt;br /&gt;
    for (int i = 0; i &amp;lt; bufferCount; i++)&lt;br /&gt;
    {&lt;br /&gt;
        float sample = (sin((i + initialPhaseIncrement) * 2 * PI * noteFrequency / SAMPLE_RATE));&lt;br /&gt;
&lt;br /&gt;
        // left audio or mono&lt;br /&gt;
        buffer-&amp;gt;Left += sample * this-&amp;gt;_volume;&lt;br /&gt;
&lt;br /&gt;
        // right audio&lt;br /&gt;
        buffer-&amp;gt;Right += sample * this-&amp;gt;_volume;&lt;br /&gt;
&lt;br /&gt;
        buffer++;&lt;br /&gt;
    }&lt;br /&gt;
}
&lt;/pre&gt;

&lt;p&gt;Volume is per-oscillator. Panning etc. is not implemented in
this listing. I have different render functions for each type of
waveform. They are switched using a function template to point to
the current render function. Thanks to everyone on Twitter last
night (especially Jeremiah Morrill) for helping me sort out how to
use the std::function type.&lt;/p&gt;

&lt;pre class="brush: cpp;"&gt;
RenderFunction = std::bind&amp;lt;void&amp;gt;(&lt;br /&gt;
    &amp;amp;Oscillator::RenderSine,    // function pointer&lt;br /&gt;
    this,                        // implicit this&lt;br /&gt;
    std::placeholders::_1,        // initialPhaseIncrement&lt;br /&gt;
    std::placeholders::_2,        // noteFrequency&lt;br /&gt;
    std::placeholders::_3,        // buffer&lt;br /&gt;
    std::placeholders::_4);        // bufferCount
&lt;/pre&gt;

&lt;p&gt;The entries in the Oscillator's class definition therefore look
like this:&lt;/p&gt;

&lt;pre class="brush: cpp;"&gt;
void RenderSine(long phaseIncrement, float noteFrequency, StereoSample* buffer, long bufferCount);&lt;br /&gt;
void RenderPulse(long phaseIncrement, float noteFrequency, StereoSample* buffer, long bufferCount);&lt;br /&gt;
void RenderTriangle(long phaseIncrement, float noteFrequency, StereoSample* buffer, long bufferCount);&lt;br /&gt;
void RenderSawtooth(long phaseIncrement, float noteFrequency, StereoSample* buffer, long bufferCount);&lt;br /&gt;
void RenderRamp(long phaseIncrement, float noteFrequency, StereoSample* buffer, long bufferCount);&lt;br /&gt;
void RenderMultiSaw(long phaseIncrement, float noteFrequency, StereoSample* buffer, long bufferCount);&lt;br /&gt;
void RenderNoise(long phaseIncrement, float noteFrequency, StereoSample* buffer, long bufferCount);&lt;br /&gt;
&lt;br /&gt;
typedef std::function&amp;lt;void(long, float, StereoSample*, const long)&amp;gt; RenderFunction_t;&lt;br /&gt;
RenderFunction_t RenderFunction;
&lt;/pre&gt;

&lt;p&gt;&amp;nbsp;&lt;/p&gt;

&lt;p&gt;The magic part is the std::function. (Aside: searching for
"std::anything" will get you a nice selection of STD testing ads in
the search engine sidebar).&lt;/p&gt;

&lt;p&gt;Now, just because it sounds so good with the bit crusher, here's
my noise implementation:&lt;/p&gt;

&lt;pre class="brush: cpp;"&gt;
void Oscillator::RenderNoise(long initialPhaseIncrement, float noteFrequency, StereoSample* buffer, long bufferCount)&lt;br /&gt;
{&lt;br /&gt;
    std::uniform_real_distribution&amp;lt;float&amp;gt; dist(-1.0f * _volume, 1.0f * _volume);&lt;br /&gt;
&lt;br /&gt;
    for (int i = 0; i &amp;lt; bufferCount; i++)&lt;br /&gt;
    {&lt;br /&gt;
        float sample = dist(_randomGenerator);&lt;br /&gt;
&lt;br /&gt;
        buffer-&amp;gt;Left = sample;&lt;br /&gt;
        buffer-&amp;gt;Right = sample;&lt;br /&gt;
   &lt;br /&gt;
        buffer++;&lt;br /&gt;
    }&lt;br /&gt;
}
&lt;/pre&gt;

&lt;p&gt;For that to work, you'll need to initialize the random number
generator elsewhere in the code. I do it in the constructor:&lt;/p&gt;

&lt;pre class="brush: cpp;"&gt;
Oscillator::Oscillator(void)&lt;br /&gt;
    : _randomGenerator(std::time(0))&lt;br /&gt;
{&lt;br /&gt;
    _volume = DEFAULT_OSCILLATOR_VOLUME;&lt;br /&gt;
&lt;br /&gt;
    _pan = 0.0f;&lt;br /&gt;
&lt;br /&gt;
    RenderFunction = std::bind&amp;lt;void&amp;gt;(&lt;br /&gt;
        &amp;amp;Oscillator::RenderSine,    // function pointer change to render function you want&lt;br /&gt;
        this,                        // implicit this&lt;br /&gt;
        std::placeholders::_1,        // initialPhaseIncrement&lt;br /&gt;
        std::placeholders::_2,        // noteFrequency&lt;br /&gt;
        std::placeholders::_3,        // buffer&lt;br /&gt;
        std::placeholders::_4);        // bufferCount&lt;br /&gt;
}&lt;br /&gt;
&lt;/pre&gt;

&lt;p&gt;x&lt;/p&gt;

&lt;h3&gt;The Bit Crusher/Cruncher&lt;/h3&gt;

&lt;p&gt;This simple class is the real point of this post. Here's the
class's header file. I call it "BitCruncher" because it does bit
crushing plus sample rate reduction.&lt;/p&gt;

&lt;pre class="brush: cpp;"&gt;
#pragma once&lt;br /&gt;
&lt;br /&gt;
class BitCruncher&lt;br /&gt;
{&lt;br /&gt;
public:&lt;br /&gt;
    int BitRate;        // for reducing the sample rate&lt;br /&gt;
    int BitDepth;        // for quantizing the sample values, for example, to make them 8 bit&lt;br /&gt;
&lt;br /&gt;
    BitCruncher(void);&lt;br /&gt;
    ~BitCruncher(void);&lt;br /&gt;
&lt;br /&gt;
    void ProcessSampleBuffer(long initialPhaseIncrement, float noteFrequency, StereoSample* buffer, long bufferCount);&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
&lt;/pre&gt;

&lt;p&gt;And here's the implementation. Details after the listing.&lt;/p&gt;

&lt;pre class="brush: cpp;"&gt;
#include "pch.h"&lt;br /&gt;
#include "BitCruncher.h"&lt;br /&gt;
#include &amp;lt;cmath&amp;gt;&lt;br /&gt;
&lt;br /&gt;
BitCruncher::BitCruncher(void) :&lt;br /&gt;
    BitDepth(4),&lt;br /&gt;
    BitRate(4096)&lt;br /&gt;
{&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
BitCruncher::~BitCruncher(void)&lt;br /&gt;
{&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
#define ROUND(f) ((float)((f &amp;gt; 0.0) ? floor(f + 0.5) : ceil(f - 0.5)))&lt;br /&gt;
&lt;br /&gt;
void BitCruncher::ProcessSampleBuffer(long initialPhaseIncrement, float noteFrequency, StereoSample* buffer, long bufferCount)&lt;br /&gt;
{&lt;br /&gt;
    int max = pow(2, BitDepth) - 1;&lt;br /&gt;
    int step = SAMPLE_RATE / BitRate;&lt;br /&gt;
&lt;br /&gt;
    int i = 0;&lt;br /&gt;
    while (i &amp;lt; bufferCount)&lt;br /&gt;
    {&lt;br /&gt;
        float leftFirstSample = ROUND((buffer-&amp;gt;Left + 1.0) * max) / max - 1.0;&lt;br /&gt;
        float rightFirstSample = ROUND((buffer-&amp;gt;Right + 1.0) * max) / max - 1.0;&lt;br /&gt;
&lt;br /&gt;
        // this loop causes us to simulate a down-sample to a lower sample rate&lt;br /&gt;
        for (int j = 0; j &amp;lt; step &amp;amp;&amp;amp; i &amp;lt; bufferCount; j++)&lt;br /&gt;
        {&lt;br /&gt;
            buffer-&amp;gt;Left = leftFirstSample;&lt;br /&gt;
            buffer-&amp;gt;Right = rightFirstSample;&lt;br /&gt;
&lt;br /&gt;
            // move on&lt;br /&gt;
            buffer++;&lt;br /&gt;
            i++;&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}
&lt;/pre&gt;

&lt;p&gt;For reducing the bit rate, the current algorithm is like a
sample and hold. It takes the first sample and holds it for however
many steps it needs to. In fact, on my modular synth, if I patch an
oscillator into the sample and hold unit, I can get pretty much the
same result.&lt;/p&gt;

&lt;p&gt;Note that this happens per-oscillator. Each voice has multiple
oscillators each of which may or may not be crushed, so I don't
simply submit a low bitrate buffer to XAudio2 and let it do the
expansion. I'm also working on a couple other algorithms in
addition to the current.&lt;/p&gt;

&lt;p&gt;The bit depth reduction is handled by the round statements.
Floating point samples are in the range of -1.0 to +1.0. I first
calculate the maximum number for the specified bit depth (first
statement with pow). Then, I add 1.0 to the sample to get it into
the range of 0..2.0. I then map that 0..2.0 to the "max" value
(which is 0..max"). Then, dividing by "max" I get back a now
rounded value in the range or 0..2.0, with at most "max" unique
possible values. Finally, I subtract 1.0 to get back in the range
of -1.0 to +1.0.&lt;/p&gt;

&lt;blockquote&gt;UPDATE: @c64_gio on twitter sent me some really great
tips for how I can improve this code. I especially like the
iteration approach and use of vectors instead of raw bytes. You can
see some of his comments here: &lt;a
href="http://pastebin.com/Q8HqHRDd"&gt;http://pastebin.com/Q8HqHRDd&lt;/a&gt;.&lt;/blockquote&gt;

&lt;p&gt;This algorithm appears to work, so let's take a look at the
results.&lt;/p&gt;

&lt;h3&gt;Results&lt;/h3&gt;

&lt;p&gt;I hooked up my Rigol to the main output of my sound card (a MOTU
828mk3) to take a look at the generated waveforms.&lt;/p&gt;

&lt;p&gt;&lt;a
href="http://10rem.net/media/87365/Windows-Live-Writer_c94043a66209_109FA_image_24.png"
 target="_blank"&gt;&lt;img src="http://10rem.net/media/87370/Windows-Live-Writer_c94043a66209_109FA_image_thumb_10.png" width="550" height="395" alt="image" border="0" style="border-top: 0px; border-right: 0px; background-image: none; border-bottom: 0px; padding-top: 0px; padding-left: 0px; border-left: 0px; display: inline; padding-right: 0px"/&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;What follows are the configurations set on the BitCruncher class
and a photo of the resulting wave forms.&lt;/p&gt;

&lt;p&gt;&amp;nbsp;&lt;/p&gt;

&lt;p&gt;BitDepth 24, BitRate, 44100. This is about as good as it gets in
terms of the scope's resolution.&lt;/p&gt;

&lt;p&gt;&lt;a
href="http://10rem.net/media/87375/Windows-Live-Writer_c94043a66209_109FA_image_2.png"
 target="_blank"&gt;&lt;img src="http://10rem.net/media/87380/Windows-Live-Writer_c94043a66209_109FA_image_thumb.png" width="550" height="413" alt="image" border="0" style="border-top: 0px; border-right: 0px; background-image: none; border-bottom: 0px; padding-top: 0px; padding-left: 0px; border-left: 0px; display: inline; padding-right: 0px"/&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&amp;nbsp;&lt;/p&gt;

&lt;p&gt;BitDepth 24, BitRate 8192 (very slight stepping)&lt;/p&gt;

&lt;p&gt;&lt;a
href="http://10rem.net/media/87385/Windows-Live-Writer_c94043a66209_109FA_image_4.png"
 target="_blank"&gt;&lt;img src="http://10rem.net/media/87390/Windows-Live-Writer_c94043a66209_109FA_image_thumb_1.png" width="550" height="413" alt="image" border="0" style="border-top: 0px; border-right: 0px; background-image: none; border-bottom: 0px; padding-top: 0px; padding-left: 0px; border-left: 0px; display: inline; padding-right: 0px"/&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;(note that the frequency is warbling a bit between 110 and 220.
I think my Rigol is confused, possibly due to me not completing
cycles in the buffer)&lt;/p&gt;

&lt;p&gt;&amp;nbsp;&lt;/p&gt;

&lt;p&gt;BitDepth 24, BitRate 4096 (more stepping)&lt;/p&gt;

&lt;p&gt;&lt;a
href="http://10rem.net/media/87395/Windows-Live-Writer_c94043a66209_109FA_image_6.png"
 target="_blank"&gt;&lt;img src="http://10rem.net/media/87400/Windows-Live-Writer_c94043a66209_109FA_image_thumb_2.png" width="550" height="413" alt="image" border="0" style="border-top: 0px; border-right: 0px; background-image: none; border-bottom: 0px; padding-top: 0px; padding-left: 0px; border-left: 0px; display: inline; padding-right: 0px"/&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&amp;nbsp;&lt;/p&gt;

&lt;p&gt;BitDepth 24, BitRate 2048 (a whole lot of stepping). This sounds
like a sine wave with whistling harmonics over it. It reminds me
(only louder) of the overtones from some 8 bit synth chips from
80's computers.&lt;/p&gt;

&lt;p&gt;&lt;a
href="http://10rem.net/media/87405/Windows-Live-Writer_c94043a66209_109FA_image_22.png"
 target="_blank"&gt;&lt;img src="http://10rem.net/media/87410/Windows-Live-Writer_c94043a66209_109FA_image_thumb_9.png" width="550" height="413" alt="image" border="0" style="border-top: 0px; border-right: 0px; background-image: none; border-bottom: 0px; padding-top: 0px; padding-left: 0px; border-left: 0px; display: inline; padding-right: 0px"/&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&amp;nbsp;&lt;/p&gt;

&lt;p&gt;I believe this one was BitDepth 4 and BitRate 44100. Notice the
flats at the peaks. This is due to rounding and contributes a
square-wave overtone to the sound.&lt;/p&gt;

&lt;p&gt;&lt;a
href="http://10rem.net/media/87425/Windows-Live-Writer_c94043a66209_109FA_image_14.png"
 target="_blank"&gt;&lt;img src="http://10rem.net/media/87430/Windows-Live-Writer_c94043a66209_109FA_image_thumb_6.png" width="550" height="413" alt="image" border="0" style="border-top: 0px; border-right: 0px; background-image: none; border-bottom: 0px; padding-top: 0px; padding-left: 0px; border-left: 0px; display: inline; padding-right: 0px"/&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&amp;nbsp;&lt;/p&gt;

&lt;p&gt;BitDepth 2, BitRate 2048 (this sounds much more like a square
wave). This one had a fair bit of jitter to it, presumably because
44100 is not evenly divisible by 2048, and for the final output,
I'm simply looping a buffer of 44100 * 5 seconds.&lt;/p&gt;

&lt;p&gt;&lt;a
href="http://10rem.net/media/87435/Windows-Live-Writer_c94043a66209_109FA_image_12.png"
 target="_blank"&gt;&lt;img src="http://10rem.net/media/87440/Windows-Live-Writer_c94043a66209_109FA_image_thumb_5.png" width="550" height="413" alt="image" border="0" style="border-top: 0px; border-right: 0px; background-image: none; border-bottom: 0px; padding-top: 0px; padding-left: 0px; border-left: 0px; display: inline; padding-right: 0px"/&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&amp;nbsp;&lt;/p&gt;

&lt;p&gt;The bitrate reduction is especially interesting when applied to
white noise. You totally get the Atari/C64 vibe from it.&lt;/p&gt;

&lt;p&gt;As I do other interesting things with this synthesizer project,
which will hopefully be in the Windows Store when I complete it,
I'll continue to post about them here.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;No downloadable source code for this
project.&lt;/strong&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/PeteBrown?a=MYHIzNFFZNs:IjzXc3PnAXk:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PeteBrown?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/PeteBrown?a=MYHIzNFFZNs:IjzXc3PnAXk:I9og5sOYxJI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PeteBrown?d=I9og5sOYxJI" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/PeteBrown?a=MYHIzNFFZNs:IjzXc3PnAXk:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PeteBrown?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/PeteBrown?a=MYHIzNFFZNs:IjzXc3PnAXk:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PeteBrown?i=MYHIzNFFZNs:IjzXc3PnAXk:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/PeteBrown?a=MYHIzNFFZNs:IjzXc3PnAXk:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PeteBrown?i=MYHIzNFFZNs:IjzXc3PnAXk:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/PeteBrown?a=MYHIzNFFZNs:IjzXc3PnAXk:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PeteBrown?i=MYHIzNFFZNs:IjzXc3PnAXk:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/PeteBrown/~4/MYHIzNFFZNs" height="1" width="1"/&gt;</description><feedburner:origLink>http://10rem.net/blog/2013/01/13/a-simple-bitcrusher-and-sample-rate-reducer-in-cplusplus-for-a-windows-store-app</feedburner:origLink></item><item><title>Installing Unsigned Drivers on Windows 8 64 bit (or: how to get STM ST-Link working)</title><author>Pete Brown	</author><link>http://feedproxy.google.com/~r/PeteBrown/~3/1bVioWhu84w/installing-unsigned-drivers-on-windows-8-64-bit-or-how-to-get-stm-st-link-working</link><pubDate>Mon, 07 Jan 2013 22:40:44 GMT</pubDate><guid isPermaLink="false">http://10rem.net/blog/2013/01/07/installing-unsigned-drivers-on-windows-8-64-bit-or-how-to-get-stm-st-link-working</guid><description>&lt;p&gt;I recently did &lt;a
href="http://10rem.net/blog/2012/12/31/a-midi-clock-pulse-to-analog-sync-voltage-converter"
 target="_blank"&gt;some work on my MikroElektronika ARM development
board&lt;/a&gt;. This was the first time I fired up the board on my
Windows 8 system. Everything in the IDE worked fine until I tried
to do some deploying and debugging on the board itself. It was then
that I realized the board's driver wasn't correctly installed. I
looked in the device manager and, sure enough, the board had the
little exclamation point next to it. It was recognized, just not
available.&lt;/p&gt;

&lt;p&gt;The first thing I did was reinstall the driver using the
Mikroelektronika installer. Everything &lt;strong&gt;appeared&lt;/strong&gt; to
work, but the driver never actually installed. In fact, the
directly the installer created was empty.&lt;/p&gt;

&lt;p&gt;I install a lot of really strange hardware the average user will
never see. Because of that, I've noticed a number of device driver
installers not handling failure at all - they simply complete and
return "success" regardless of what happens. &lt;strong&gt;People, fix
your installers!&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;So, I unpacked the driver installer and tried to manually
install it. Windows then told me it couldn't install the driver
because it's unsigned. Aha!&lt;/p&gt;

&lt;p&gt;With Windows 7, we started requiring all 64 bit drivers to be
signed. Before that, it was a recommendation. With Windows 7,
however, it was relatively easy for a power user to bypass this
requirement and install unsigned drivers. With Windows 8, we've
raised the bar to help make sure manufacturers only give you
trusted, verified code. This helps prevent malicious folks from
offering you drivers. (How many times have you searched for a
driver and found 300 shady-looking sites that purport to have the
driver? Yeah, like I'd install that.)&lt;/p&gt;

&lt;p&gt;Now, that said, there are still some manufacturers who haven't
yet signed their drivers. For those, this post will describe how to
install anyway. Again, this is a workaround for the OEM not
properly signing stuff. &lt;strong&gt;You should only run into this when
testing beta stuff for them. If you run into it with production
drivers, let the OEM know.&lt;/strong&gt;&lt;/p&gt;

&lt;h3&gt;Rebooting in Advanced Mode&lt;/h3&gt;

&lt;p&gt;With previous versions of Windows, the advanced startup options
required you to press a function key as the computer is booting.
With Windows 8 and UFE boot, the boot (especially on a machine with
a fast SSD), boot time is just too short to be able to press that
key. Instead, Windows 8 handles the advanced boot from within
Windows. One of the advanced boot options is the one to let you
install unsigned drivers.&lt;/p&gt;

&lt;p&gt;For me, the easiest way to get to the advanced boot menu is to
shut down from the command prompt. Using Windows + X (or
right-click the bottom left of the screen), get the power user
menu. From that menu, choose "Command Prompt (Admin)" as shown
here:&lt;/p&gt;

&lt;p&gt;&lt;a
href="http://10rem.net/media/87287/Windows-Live-Writer_2f774109e3b0_EFF7_image_8.png"
 target="_blank"&gt;&lt;img src="http://10rem.net/media/87292/Windows-Live-Writer_2f774109e3b0_EFF7_image_thumb_3.png" width="515" height="394" alt="image" border="0" style="border-left-width: 0px; border-right-width: 0px; background-image: none; border-bottom-width: 0px; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-top-width: 0px"/&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Then, at the administrator command prompt, type shutdown /r /o.
The /r is for reboot, the /o is for the advanced boot options.&lt;/p&gt;

&lt;p&gt;&lt;a
href="http://10rem.net/media/87297/Windows-Live-Writer_2f774109e3b0_EFF7_image_10.png"
 target="_blank"&gt;&lt;img src="http://10rem.net/media/87302/Windows-Live-Writer_2f774109e3b0_EFF7_image_thumb_4.png" width="650" height="317" alt="image" border="0" style="border-left-width: 0px; border-right-width: 0px; background-image: none; border-bottom-width: 0px; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-top-width: 0px"/&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Now, I can't screenshot the advanced boot menu on this PC
without a remote desktop session or something. Windows + Print
Screen doesn't work there. So, here's the progression.&lt;/p&gt;

&lt;p&gt;First, Windows will prompt you asking for what kind of action
you want to take. Select the following:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Troubleshoot&lt;/li&gt;

&lt;li&gt;Then Advanced Options&lt;/li&gt;

&lt;li&gt;Then Startup Settings&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Then press the restart button. Your PC will then reboot. Once it
reboots, you'll get the Advanced Startup Options menu. From that,
you want to pick the "Disable driver signature enforcement" option.
On my desktop machine, that is #7.&lt;/p&gt;

&lt;p&gt;Windows will then boot normally, but with the option in
place.&lt;/p&gt;

&lt;h3&gt;Installing the unsigned driver&lt;/h3&gt;

&lt;p&gt;Once you pick the option to allow unsigned drivers, then you can
perform the installation as usual (using the installer or the
.inf). Don't worry, it'll stick around after another reboot - it's
not a safe mode, just a lifting of a restriction.&lt;/p&gt;

&lt;p&gt;You'll still receive a warning, but this time, you get the
option to perform the install anyway.&lt;/p&gt;

&lt;p&gt;&lt;a
href="http://10rem.net/media/87307/Windows-Live-Writer_2f774109e3b0_EFF7_image_2.png"
 target="_blank"&gt;&lt;img src="http://10rem.net/media/87312/Windows-Live-Writer_2f774109e3b0_EFF7_image_thumb.png" width="516" height="309" alt="image" border="0" style="border-left-width: 0px; border-right-width: 0px; background-image: none; border-bottom-width: 0px; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-top-width: 0px"/&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;As long as you are sure the driver is from a trusted
publisher, and that you're using the latest driver, go ahead and
install it. If you are unsure at this point, then unsigned driver
installs are not for you.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Once I did this, my STLink programmer (that's what the
MikroElektronika programmer shows up as) showed up just fine, and
began working:&lt;/p&gt;

&lt;p&gt;&lt;a
href="http://10rem.net/media/87317/Windows-Live-Writer_2f774109e3b0_EFF7_image_6.png"
 target="_blank"&gt;&lt;img src="http://10rem.net/media/87322/Windows-Live-Writer_2f774109e3b0_EFF7_image_thumb_2.png" width="513" height="593" alt="image" border="0" style="border-left-width: 0px; border-right-width: 0px; background-image: none; border-bottom-width: 0px; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-top-width: 0px"/&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;That's all there is to it.&lt;/h3&gt;

&lt;p&gt;If you run into this, I highly encourage you to inform the OEM
about the unsigned driver issue, and encourage them to sign their
driver. If they then release a properly signed version, be sure to
update directly to that so you no longer have any exceptions to the
driver policy on your machine. This will certainly make future
updates smoother for you.&lt;/p&gt;

&lt;p&gt;Also, there are "tips" out there to permanently enable the
advanced boot options. I discourage you from using this on a
day-to-day machine as it will both promote bad practices and also
make your boot time that much longer.&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/PeteBrown?a=1bVioWhu84w:APbNoC_r60g:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PeteBrown?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/PeteBrown?a=1bVioWhu84w:APbNoC_r60g:I9og5sOYxJI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PeteBrown?d=I9og5sOYxJI" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/PeteBrown?a=1bVioWhu84w:APbNoC_r60g:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PeteBrown?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/PeteBrown?a=1bVioWhu84w:APbNoC_r60g:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PeteBrown?i=1bVioWhu84w:APbNoC_r60g:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/PeteBrown?a=1bVioWhu84w:APbNoC_r60g:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PeteBrown?i=1bVioWhu84w:APbNoC_r60g:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/PeteBrown?a=1bVioWhu84w:APbNoC_r60g:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PeteBrown?i=1bVioWhu84w:APbNoC_r60g:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/PeteBrown/~4/1bVioWhu84w" height="1" width="1"/&gt;</description><feedburner:origLink>http://10rem.net/blog/2013/01/07/installing-unsigned-drivers-on-windows-8-64-bit-or-how-to-get-stm-st-link-working</feedburner:origLink></item><item><title>A MIDI clock pulse to analog sync voltage converter</title><author>Pete Brown	</author><link>http://feedproxy.google.com/~r/PeteBrown/~3/pYLAxjaSe2k/a-midi-clock-pulse-to-analog-sync-voltage-converter</link><pubDate>Tue, 01 Jan 2013 00:10:22 GMT</pubDate><guid isPermaLink="false">http://10rem.net/blog/2012/12/31/a-midi-clock-pulse-to-analog-sync-voltage-converter</guid><description>&lt;p&gt;I have a few pieces of analog gear which either don't support
MIDI, or simply work better with voltage control. This makes
including them in a sequence difficult as timing of arpeggios or
sequences will drift away from the rest of the performance. Not to
mention that synchronizing them by ear is not a simple task in any
case, and impossible to do in real-time if you want to adjust the
tempo during the performance.&lt;/p&gt;

&lt;p&gt;One such piece is my little Korg Monotribe. This is a
combination drum machine and step sequencer built into a very
inexpensive package.&lt;/p&gt;

&lt;p&gt;The Monotribe doesn't have MIDI support (although you can build
a conversion for MIDI), but it does accept a sync pulse. The &lt;a
href="http://www.arturia.com/evolution/en/products/minibrute/intro.html"
 target="_blank"&gt;Aturia Minibrute&lt;/a&gt; doesn't send an analog clock
pulse, so there was no way to synchronize the two. However, the
Minibrute *does* accept MIDI clock pulses from an external source,
so I knew I could build on that.&lt;/p&gt;

&lt;p&gt;Hybrid Analog/Digital sequencers like the &lt;a
href="http://www.analoguehaven.com/doepfer/darktime/"
target="_blank"&gt;Doepfer Dark Time&lt;/a&gt; will handle this
synchronization for you, but for a price. I already have one &lt;a
href="http://synthesizers.com/q119.html" target="_blank"&gt;analog
sequencer on order&lt;/a&gt;, one &lt;a
href="http://shop.hexinverter.net/product.php?id_product=25"
target="_blank"&gt;small one mostly built&lt;/a&gt;, and another &lt;a
href="http://musicfromouterspace.com/index.php?MAINTAB=SYNTHDIY&amp;amp;PROJARG=SEQUENCER_VARICLOCK/SEQUENCER_VARICLOCK.php&amp;amp;VPW=1449&amp;amp;VPH=1270"
 target="_blank"&gt;ready to be built&lt;/a&gt;, so I didn't want a third
one right now.&lt;/p&gt;

&lt;h3&gt;The Goal&lt;/h3&gt;

&lt;p&gt;So the goal is to drive both analog gear as well as more modern
MIDI gear from an external MIDI clock. In my case, I decided to use
Cubase 7 on my PC as the clock source. The completed setup looks
like this:&lt;/p&gt;

&lt;p&gt;&lt;a
href="http://10rem.net/media/87220/Windows-Live-Writer_A-MIDI-clock-pulse-to_FDE0_image_2.png"
 target="_blank"&gt;&lt;img src="http://10rem.net/media/87225/Windows-Live-Writer_A-MIDI-clock-pulse-to_FDE0_image_thumb.png" width="650" height="406" alt="image" border="0" style="border-top: 0px; border-right: 0px; background-image: none; border-bottom: 0px; padding-top: 0px; padding-left: 0px; border-left: 0px; display: inline; padding-right: 0px"/&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;All the straight MIDI communication just works. The rest of this
post will focus on the development of the MIDI to analog sync
signal part. First, however, a little background on
synchronization.&lt;/p&gt;

&lt;h3&gt;MIDI sync&lt;/h3&gt;

&lt;p&gt;MIDI master clocks send out 8 bit synchronization messages at
the rate of 24 for every quarter note. At a typical BPM of 120,
that means that there are 24 * 120 = 2880 clock messages per
minute, or 48 clock messages per second.&lt;/p&gt;

&lt;p&gt;The standard MIDI protocol itself is a 5v serial protocol
running at 31,250 bits per second with 8 data bits, no parity bits,
and 1 stop bit. Most messages are two or three bytes in length, but
a number of important messages, such as the real-time messages, are
only one byte in length. Also note that messages can be interrupted
by real-time messages. So, you could get the "note on" message, and
then the clock byte, and then the note on message's data. Any code
which parses these messages must handle this gracefully.&lt;/p&gt;

&lt;h3&gt;Analog Sync&lt;/h3&gt;

&lt;p&gt;Analog sync pre-dates MIDI clock signals, so there are a number
of standards. Roland used a &lt;a
href="http://en.wikipedia.org/wiki/DIN_sync" target="_blank"&gt;DIN
sync for drum machines, TB-303, and others&lt;/a&gt;. This is a 5 pin
cable which looks like MIDI, but is actually carrying completely
different analog signals.&lt;/p&gt;

&lt;p&gt;Even older than that is the modular approach of clock pulses.
This is typically a 5v square pulse which is used to move a
sequencer to the next step. This is the way most analog sequencers
synchronize with each other, all sharing a common clock/sync
source.&lt;/p&gt;

&lt;p&gt;The &lt;a href="http://www.korg.com/monotribe" target="_blank"&gt;Korg
monotrib&lt;/a&gt;e is a new design, but follows older analog principles.
In this case, the sync signal doesn't need to be 5v. In fact, there
are phone apps which use audio level signals from the headphone
jack to generate sync pulses for the monotribe. Much like the
classic analog approach, the monotribe sync approach is used to
move the sequencer from one step to the next.&lt;/p&gt;

&lt;p&gt;There are many other devices which can synchronize with signals
like this. For example, the &lt;a
href="https://soundcloud.com/psychlist1972/nova-drone-2"
target="_blank"&gt;Nova Drone drone synth&lt;/a&gt; includes LFO sync which
should work with this type of signal. (I haven't tried it yet,
though).&lt;/p&gt;

&lt;p&gt;&lt;a
href="http://10rem.net/media/87230/Windows-Live-Writer_A-MIDI-clock-pulse-to_FDE0_image_10.png"
 target="_blank"&gt;&lt;img src="http://10rem.net/media/87235/Windows-Live-Writer_A-MIDI-clock-pulse-to_FDE0_image_thumb_4.png" width="650" height="662" alt="image" border="0" style="border-top: 0px; border-right: 0px; background-image: none; border-bottom: 0px; padding-top: 0px; padding-left: 0px; border-left: 0px; display: inline; padding-right: 0px"/&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;(Yes, that's a Cthulhu mug. I know I just floored you with the
awesomeness of this photo)&lt;/p&gt;

&lt;h3&gt;Implementation&lt;/h3&gt;

&lt;p&gt;I've done a fair bit with MIDI hardware, so I knew generally how
to parse messages and otherwise deal with the data. I also have a
MIDI module which, although designed for .NET Gadgeteer, includes
pins so I can use it with any microcontroller. Real-time processing
of MIDI messages like this has proven to be too intense for
interpreted code like NETMF, so I turned to my ARM development
board. Sure, this is something which could have been easily
accomplished on Arduino, but I've been getting into ARM lately, and
have had larger plans for the processor.&lt;/p&gt;

&lt;p&gt;The development board I used is my &lt;a
href="http://www.mikroe.com/easymx-pro/stm32/"
target="_blank"&gt;Mikroelektronika EasyMX Pro v7 for STM32&lt;/a&gt;. the C
IDE is a mess compared to Visual Studio, but I can't praise this
board enough. It's super easy to develop and debug on it, all over
USB.&lt;/p&gt;

&lt;p&gt;Because the monotribe runs perfectly fine on low amplitude
pulses, the 3.3v signal level from the ARM processor works fine. If
you use this approach with other analog gear, you'll likely need to
scale the output up to 5v (again, not an issue if you use classic
Arduino or AVR which both natively support 5v signals).&lt;/p&gt;

&lt;p&gt;Initially, I based the pulses on 64 for some reason. I
originally thought MIDI used 64 pulses and not 24. &lt;strong&gt;Because
of this, the code below is not quite correct&lt;/strong&gt; (it works,
but doesn't correspond to actual beats, so the divisions aren't as
useful as they should be).&lt;/p&gt;

&lt;pre class="brush: cpp;"&gt;
#define MIDI_TIMING_CLOCK 0xF8&lt;br /&gt;
#define ANALOG_CLOCK_PULSE_DURATION_MS 1&lt;br /&gt;
#define MAX_TICKS 64;&lt;br /&gt;
&lt;br /&gt;
// USART2 TX is PA2&lt;br /&gt;
// USART2 RX is PA3&lt;br /&gt;
&lt;br /&gt;
#define GPIO_BASE           GPIOD_BASE&lt;br /&gt;
#define ODR                 GPIOD_ODR&lt;br /&gt;
&lt;br /&gt;
#define SetAllPinsLow()     ODR = 0;&lt;br /&gt;
#define SetPins(pinMask)    ODR = pinMask&lt;br /&gt;
&lt;br /&gt;
char _uartReadByte;&lt;br /&gt;
&lt;br /&gt;
void main() {&lt;br /&gt;
    unsigned short currentTick = 0;&lt;br /&gt;
    unsigned short pinsHigh = 0;&lt;br /&gt;
&lt;br /&gt;
    GPIO_Digital_Output(&amp;amp;GPIO_BASE, _GPIO_PINMASK_LOW); // Set pins as digital output&lt;br /&gt;
&lt;br /&gt;
    UART2_Init_Advanced(31250, _UART_8_BIT_DATA, _UART_NOPARITY, _UART_ONE_STOPBIT, &amp;amp;_GPIO_MODULE_USART2_PA23);&lt;br /&gt;
&lt;br /&gt;
    Delay_ms(100);                  // Wait for UART module to stabilize&lt;br /&gt;
&lt;br /&gt;
    while (1) {&lt;br /&gt;
      if (UART2_Data_Ready()) {&lt;br /&gt;
         _uartReadByte = UART2_Read();     // read the received byte&lt;br /&gt;
    &lt;br /&gt;
         if (_uartReadByte == MIDI_TIMING_CLOCK) {           // if MIDI clock message&lt;br /&gt;
       &lt;br /&gt;
            pinsHigh=1;    // always output full clock on first pin&lt;br /&gt;
          &lt;br /&gt;
            if (currentTick % 2 == 0) {&lt;br /&gt;
               pinsHigh |= (1 &amp;lt;&amp;lt; 1);&lt;br /&gt;
             &lt;br /&gt;
               if (currentTick % 4 == 0) {&lt;br /&gt;
                  pinsHigh |= (1 &amp;lt;&amp;lt; 2);&lt;br /&gt;
                &lt;br /&gt;
                  if (currentTick % 8 == 0) {&lt;br /&gt;
                     pinsHigh |= (1 &amp;lt;&amp;lt; 3);&lt;br /&gt;
                   &lt;br /&gt;
                     if (currentTick % 16 == 0) {&lt;br /&gt;
                        pinsHigh |= (1 &amp;lt;&amp;lt; 4);&lt;br /&gt;
                      &lt;br /&gt;
                        if (currentTick % 32 == 0) {&lt;br /&gt;
                           pinsHigh |= (1 &amp;lt;&amp;lt; 5);&lt;br /&gt;
                         &lt;br /&gt;
                           if (currentTick % 64 == 0) {&lt;br /&gt;
                              pinsHigh |= (1 &amp;lt;&amp;lt; 6);&lt;br /&gt;
                           }&lt;br /&gt;
                        }&lt;br /&gt;
                     }&lt;br /&gt;
                  }&lt;br /&gt;
               }&lt;br /&gt;
            }&lt;br /&gt;
&lt;br /&gt;
            if (pinsHigh) {&lt;br /&gt;
               SetPins(pinsHigh);&lt;br /&gt;
             &lt;br /&gt;
               Delay_ms(ANALOG_CLOCK_PULSE_DURATION_MS);&lt;br /&gt;
          &lt;br /&gt;
               SetAllPinsLow();&lt;br /&gt;
             &lt;br /&gt;
               pinsHigh = 0;&lt;br /&gt;
            }&lt;br /&gt;
&lt;br /&gt;
            currentTick = (currentTick + 1) % MAX_TICKS;&lt;br /&gt;
         }&lt;br /&gt;
&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;/pre&gt;

&lt;p&gt;I hate that K&amp;amp;R style of brace indentation, but like I said,
the IDE is a mess. If you deviate from that style of indentation,
the tabs and whatnot get really screwed up. In fact, they get a
little screwed up anyway. IDEs in the microcontroller world are a
long way from what we're used to for more mainstream
development.&lt;/p&gt;

&lt;p&gt;&lt;img src="http://10rem.net/media/87240/Windows-Live-Writer_A-MIDI-clock-pulse-to_FDE0_image_16.png" width="400" height="291" alt="image" border="0" style="border-top: 0px; border-right: 0px; background-image: none; border-bottom: 0px; padding-top: 0px; padding-left: 0px; border-left: 0px; display: inline; padding-right: 0px"/&gt;&lt;/p&gt;

&lt;p&gt;Essentially, the code gets each incoming byte and checks to see
if it is a clock message. If so, it checks the current tick to see
where we are in the timing and then sets a bitmask to set the pins
on a port to high based on that step. It then sets the pins high,
sleeps for 1ms, then sets them low again.&lt;/p&gt;

&lt;p&gt;When I ran the code, I looked at the pulses using my &lt;a
href="http://www.saleae.com/logic" target="_blank"&gt;Saleae Logic 8
channel USB logic analyzer&lt;/a&gt; (something which is absolutely
indispensible for work like this) and, after some debugging, got
the right results:&lt;/p&gt;

&lt;p&gt;&lt;a
href="http://10rem.net/media/87245/Windows-Live-Writer_A-MIDI-clock-pulse-to_FDE0_image_4.png"
 target="_blank"&gt;&lt;img src="http://10rem.net/media/87250/Windows-Live-Writer_A-MIDI-clock-pulse-to_FDE0_image_thumb_1.png" width="650" height="367" alt="image" border="0" style="border-top: 0px; border-right: 0px; background-image: none; border-bottom: 0px; padding-top: 0px; padding-left: 0px; border-left: 0px; display: inline; padding-right: 0px"/&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;When you code this low to the metal, timing can be really spot
on. I love that!&lt;/p&gt;

&lt;p&gt;Here's the full device setup on my mess of a desk:&lt;/p&gt;

&lt;p&gt;&lt;a
href="http://10rem.net/media/87255/Windows-Live-Writer_A-MIDI-clock-pulse-to_FDE0_image_6.png"
 target="_blank"&gt;&lt;img src="http://10rem.net/media/87260/Windows-Live-Writer_A-MIDI-clock-pulse-to_FDE0_image_thumb_2.png" width="650" height="387" alt="image" border="0" style="border-top: 0px; border-right: 0px; background-image: none; border-bottom: 0px; padding-top: 0px; padding-left: 0px; border-left: 0px; display: inline; padding-right: 0px"/&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;And here's a full set of timing pulses, without the MIDI clock
signal visible:&lt;/p&gt;

&lt;p&gt;&lt;a
href="http://10rem.net/media/87265/Windows-Live-Writer_A-MIDI-clock-pulse-to_FDE0_image_8.png"
 target="_blank"&gt;&lt;img src="http://10rem.net/media/87270/Windows-Live-Writer_A-MIDI-clock-pulse-to_FDE0_image_thumb_3.png" width="650" height="326" alt="image" border="0" style="border-top: 0px; border-right: 0px; background-image: none; border-bottom: 0px; padding-top: 0px; padding-left: 0px; border-left: 0px; display: inline; padding-right: 0px"/&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;You can see that each row has a period twice that of the row
above it. By connecting to different signal divisions, you can
speed up or slow down the slave sequencer, but still keep it in
time with the rest of the performance. (Remember, I need to change
it to be based on 24, not 64 clocks per quarter note)&lt;/p&gt;

&lt;h3&gt;What's Next?&lt;/h3&gt;

&lt;p&gt;I'm going to correct the timing and then develop an inexpensive
board around this, possibly including support for TB-303/&lt;a
href="http://www.willzyx.com/collections/x0xb0x"
target="_blank"&gt;x0xb0x&lt;/a&gt; style DIN sync (including stop/start) in
addition to the analog sync. I'll keep a couple around for my
studio, but have others for sale. If you're interested, drop me a
line via the contact link here and let me know.&lt;/p&gt;

&lt;p&gt;I'll also post a recording of the sync working on &lt;a
href="https://soundcloud.com/psychlist1972" target="_blank"&gt;my
Soundcloud page&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Update: Recording is here:&lt;/strong&gt; &lt;a
href="https://soundcloud.com/psychlist1972/monotribe-and-modular-sync-test"&gt;
&lt;strong&gt;https://soundcloud.com/psychlist1972/monotribe-and-modular-sync-test&lt;/strong&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/PeteBrown?a=pYLAxjaSe2k:j9hjXWevQwU:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PeteBrown?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/PeteBrown?a=pYLAxjaSe2k:j9hjXWevQwU:I9og5sOYxJI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PeteBrown?d=I9og5sOYxJI" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/PeteBrown?a=pYLAxjaSe2k:j9hjXWevQwU:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PeteBrown?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/PeteBrown?a=pYLAxjaSe2k:j9hjXWevQwU:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PeteBrown?i=pYLAxjaSe2k:j9hjXWevQwU:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/PeteBrown?a=pYLAxjaSe2k:j9hjXWevQwU:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PeteBrown?i=pYLAxjaSe2k:j9hjXWevQwU:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/PeteBrown?a=pYLAxjaSe2k:j9hjXWevQwU:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PeteBrown?i=pYLAxjaSe2k:j9hjXWevQwU:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/PeteBrown/~4/pYLAxjaSe2k" height="1" width="1"/&gt;</description><feedburner:origLink>http://10rem.net/blog/2012/12/31/a-midi-clock-pulse-to-analog-sync-voltage-converter</feedburner:origLink></item><item><title>The importance of app submission notes in the Windows Store</title><author>Pete Brown	</author><link>http://feedproxy.google.com/~r/PeteBrown/~3/OMuX-WNTXCo/the-importance-of-app-submission-notes-in-the-windows-store</link><pubDate>Mon, 10 Dec 2012 18:19:13 GMT</pubDate><guid isPermaLink="false">http://10rem.net/blog/2012/12/10/the-importance-of-app-submission-notes-in-the-windows-store</guid><description>&lt;p&gt;Windows Store apps go through both automated tests and human
testing. The automated testing uses a process similar to what you
use on the client in the form of the &lt;a
href="http://10rem.net/blog/2012/11/20/the-update-windows-sdk-and-windows-app-certification-kit-tool-now-checks-branding-images"
 target="_blank"&gt;WACK tool&lt;/a&gt;. This tool verifies the basics: does
it crash? does it have the right images? does it spin up in time?
etc.&lt;/p&gt;

&lt;p&gt;No one likes to waste time by going through the submission and
certification process multiple times. Many apps also require
additional credentials or specific information that users of the
apps would normally have access to. This is one spot where we see
rejections that could be very easily avoided.&lt;/p&gt;

&lt;p&gt;When submitting apps to the Windows Store there is a section
titled "Notes to testers". This section is absolutely crucial to
help ensure your app makes it through certification testing. In it,
you need to provide:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Usage notes if the app's usage isn't obvious (also: reconsider
your UI if this is the case)&lt;/li&gt;

&lt;li&gt;Every userid/password required in the app. For example, I
recently saw an app where the initial login information was
provided, but the user needed a PIN to access an account beyond
that. You need to have test accounts set up for every part of the
app, and provide the information required to access them.&lt;/li&gt;

&lt;li&gt;Every piece of crucial test data to make it through a scenario.
(For example: if a phone number must be in a particular set of
area/country codes, provide that information)&lt;/li&gt;

&lt;li&gt;Ideally, don't make the tester create a new account. Give them
login credentials for a dedicated dummy account, pre-populated with
test data.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Remember, &lt;a
href="http://msdn.microsoft.com/en-us/library/windows/apps/hh694071.aspx"
 target="_blank"&gt;humans read the instructions&lt;/a&gt;. If you're unsure
what information is needed, give the app to a friend who has never
used your app (or the back-end services it uses) and ask them to go
through each page. Write down everything they ask you to provide,
and then include that in the notes.&lt;/p&gt;

&lt;p&gt;For more information on submitting your apps to the store, see
the &lt;a
href="http://msdn.microsoft.com/en-us/library/windows/apps/hh694062.aspx"
 target="_blank"&gt;App submission checklist on MSDN&lt;/a&gt;.&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/PeteBrown?a=OMuX-WNTXCo:LUukyW8ibWA:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PeteBrown?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/PeteBrown?a=OMuX-WNTXCo:LUukyW8ibWA:I9og5sOYxJI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PeteBrown?d=I9og5sOYxJI" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/PeteBrown?a=OMuX-WNTXCo:LUukyW8ibWA:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PeteBrown?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/PeteBrown?a=OMuX-WNTXCo:LUukyW8ibWA:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PeteBrown?i=OMuX-WNTXCo:LUukyW8ibWA:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/PeteBrown?a=OMuX-WNTXCo:LUukyW8ibWA:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PeteBrown?i=OMuX-WNTXCo:LUukyW8ibWA:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/PeteBrown?a=OMuX-WNTXCo:LUukyW8ibWA:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PeteBrown?i=OMuX-WNTXCo:LUukyW8ibWA:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/PeteBrown/~4/OMuX-WNTXCo" height="1" width="1"/&gt;</description><feedburner:origLink>http://10rem.net/blog/2012/12/10/the-importance-of-app-submission-notes-in-the-windows-store</feedburner:origLink></item><item><title>A windows 8 trick: Protocol activation of apps (and the nick app)</title><author>Pete Brown	</author><link>http://feedproxy.google.com/~r/PeteBrown/~3/v3z_fnmXqYA/a-windows-8-trick-protocol-activation-of-apps-and-the-nick-app</link><pubDate>Wed, 05 Dec 2012 19:45:54 GMT</pubDate><guid isPermaLink="false">http://10rem.net/blog/2012/12/05/a-windows-8-trick-protocol-activation-of-apps-and-the-nick-app</guid><description>&lt;p&gt;I have a four year old girl and an almost seven year old boy.
From time to time, my son will play games on the nick jr web site,
or watch a video.&lt;/p&gt;

&lt;p&gt;&lt;a
href="http://apps.microsoft.com/webpdp/en-US/app/nick/dc4ba50b-cad2-4e07-8373-9437fa706102"
 target="_blank"&gt;Nick has a portal-style app for Windows 8&lt;/a&gt;.
This app provides access to videos and photos, as well as links out
to games. Notice how even on my low DPI 30" screen, the tiles are
large and everything is nicely scaled on the hub page. I've seen
apps which have just a tiny bit of the screen filled, and that
makes me sad -- this is a better implementation for almost zero
extra effort.&lt;/p&gt;

&lt;p&gt;&lt;a
href="http://10rem.net/media/87072/Windows-Live-Writer_f83f3d17530b_C926_image_4.png"
 target="_blank"&gt;&lt;img title="image"
style="border-top: 0px; border-right: 0px; background-image: none; border-bottom: 0px; padding-top: 0px; padding-left: 0px; border-left: 0px; display: inline; padding-right: 0px"
 border="0" alt="image"
src="http://10rem.net/media/87077/Windows-Live-Writer_f83f3d17530b_C926_image_thumb_1.png"
 width="550" height="343" /&gt;&lt;/a&gt;&amp;nbsp;&lt;/p&gt;

&lt;p&gt;That bit of green slime at the top? Besides being a classic
Nickelodeon item, it's also something which invites you to
click/touch. (Well, it does to a kid anyway.) What happens when you
click it? It displays the navigation app bar. Pretty clever.&lt;/p&gt;

&lt;p&gt;&lt;a
href="http://10rem.net/media/87082/Windows-Live-Writer_f83f3d17530b_C926_image_22.png"
 target="_blank"&gt;&lt;img title="image"
style="border-top: 0px; border-right: 0px; background-image: none; border-bottom: 0px; padding-top: 0px; padding-left: 0px; border-left: 0px; display: inline; padding-right: 0px"
 border="0" alt="image"
src="http://10rem.net/media/87087/Windows-Live-Writer_f83f3d17530b_C926_image_thumb_10.png"
 width="550" height="343" /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;One of the Nickelodeon properties my kids both like is SpongeBob
SquarePants. He has his own second level hub page as shown
here.&lt;/p&gt;

&lt;p&gt;&lt;a
href="http://10rem.net/media/87092/Windows-Live-Writer_f83f3d17530b_C926_image_20.png"
 target="_blank"&gt;&lt;img title="image"
style="border-top: 0px; border-right: 0px; background-image: none; border-bottom: 0px; padding-top: 0px; padding-left: 0px; border-left: 0px; display: inline; padding-right: 0px"
 border="0" alt="image"
src="http://10rem.net/media/87097/Windows-Live-Writer_f83f3d17530b_C926_image_thumb_9.png"
 width="550" height="343" /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Everything is appropriately branded, and kid-friendly (assuming
you consider spongebob "kid-friendly". I know opinions differ
there). This may at first seem like a typical "bunch of boxes" app,
but it does it in a way which is appropriate to the properties and
audience.&lt;/p&gt;

&lt;p&gt;When you click on a video, it plays directly in the app, full
screen.&lt;/p&gt;

&lt;p&gt;&lt;a
href="http://10rem.net/media/87102/Windows-Live-Writer_f83f3d17530b_C926_image_6.png"
 target="_blank"&gt;&lt;img title="image"
style="border-top: 0px; border-right: 0px; background-image: none; border-bottom: 0px; padding-top: 0px; padding-left: 0px; border-left: 0px; display: inline; padding-right: 0px"
 border="0" alt="image"
src="http://10rem.net/media/87107/Windows-Live-Writer_f83f3d17530b_C926_image_thumb_2.png"
 width="266" height="166" /&gt;&lt;/a&gt;&amp;nbsp;&lt;a
href="http://10rem.net/media/87112/Windows-Live-Writer_f83f3d17530b_C926_image_8.png"
 target="_blank"&gt;&lt;img title="image"
style="border-top: 0px; border-right: 0px; background-image: none; border-bottom: 0px; padding-top: 0px; padding-left: 0px; border-left: 0px; display: inline; padding-right: 0px"
 border="0" alt="image"
src="http://10rem.net/media/87117/Windows-Live-Writer_f83f3d17530b_C926_image_thumb_3.png"
 width="266" height="166" /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Winx club is another interesting property for Nickelodeon, and
another that my kids both like. It's a bit like Disney Fairies meet
Bratz or Monster High or something else I've seen in that aisle at
the store during Christmas shopping.&lt;/p&gt;

&lt;p&gt;&lt;a
href="http://10rem.net/media/87122/Windows-Live-Writer_f83f3d17530b_C926_image_10.png"
 target="_blank"&gt;&lt;img title="image"
style="border-top: 0px; border-right: 0px; background-image: none; border-bottom: 0px; padding-top: 0px; padding-left: 0px; border-left: 0px; display: inline; padding-right: 0px"
 border="0" alt="image"
src="http://10rem.net/media/87127/Windows-Live-Writer_f83f3d17530b_C926_image_thumb_4.png"
 width="550" height="343" /&gt;&lt;/a&gt;&amp;nbsp;&lt;/p&gt;

&lt;p&gt;As with SpongeBob, the video player is inline. The overlays are
there only for a second or two and only if you move the mouse or
touch the screen. The fairy with the red hair is actually pleased
to get that gift, but I think she's too cool to show it ;)&lt;/p&gt;

&lt;p&gt;&lt;a
href="http://10rem.net/media/87132/Windows-Live-Writer_f83f3d17530b_C926_image_12.png"
 target="_blank"&gt;&lt;img title="image"
style="border-top: 0px; border-right: 0px; background-image: none; border-bottom: 0px; padding-top: 0px; padding-left: 0px; border-left: 0px; display: inline; padding-right: 0px"
 border="0" alt="image"
src="http://10rem.net/media/87137/Windows-Live-Writer_f83f3d17530b_C926_image_thumb_5.png"
 width="550" height="343" /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;So, overall, a typical media portal experience target to kids.
It's simple and well-done.&lt;/p&gt;

&lt;h3&gt;Games and the browser&lt;/h3&gt;

&lt;p&gt;What's really interesting to me is what happens when you launch
a game. Nickelodeon didn't port their games to Windows 8, but
instead decided to leverage their existing games and launch them in
the browser, directly from the app. The upside to this is the
obvious savings in effort. The downside is that the game is really
tiny on my giant screen. In their defense, it's rare to find a
child with a 30" screen running at 256ox1600 :). On a smaller
screen, it looks just fine, but I'd like to see them do a little
scaling in a future update.&lt;/p&gt;

When the nick app launches the game, this is an example of the URL
they use: &lt;br /&gt;
&lt;a
title="http://www.nick.com/games/nickapp/winx-club-dress-me-up.html?callbackPage=StarDetailPageViewModel&amp;amp;callbackParam=hs_winx_club"
 href="http://www.nick.com/games/nickapp/winx-club-dress-me-up.html?callbackPage=StarDetailPageViewModel&amp;amp;callbackParam=hs_winx_club"&gt;
http://www.nick.com/games/nickapp/winx-club-dress-me-up.html?callbackPage=StarDetailPageViewModel&amp;amp;callbackParam=hs_winx_club&lt;/a&gt;


&lt;p&gt;&lt;a
href="http://10rem.net/media/87142/Windows-Live-Writer_f83f3d17530b_C926_image_14.png"
 target="_blank"&gt;&lt;img title="image"
style="border-top: 0px; border-right: 0px; background-image: none; border-bottom: 0px; padding-top: 0px; padding-left: 0px; border-left: 0px; display: inline; padding-right: 0px"
 border="0" alt="image"
src="http://10rem.net/media/87147/Windows-Live-Writer_f83f3d17530b_C926_image_thumb_6.png"
 width="266" height="166" /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;See that little "Close game" button on the top right? That
(after a prompt) closes the browser and returns you to the page you
were on in the nick app. How does it do that?&lt;/p&gt;

&lt;h3&gt;Protocol activation of apps&lt;/h3&gt;

&lt;p&gt;Nickelodeon is using protocol activation, as you can see from
the markup in this listing.&lt;/p&gt;

&lt;p&gt;&lt;a
href="http://10rem.net/media/87152/Windows-Live-Writer_f83f3d17530b_C926_image_18.png"
 target="_blank"&gt;&lt;img title="image"
style="border-top: 0px; border-right: 0px; background-image: none; border-bottom: 0px; padding-top: 0px; padding-left: 0px; border-left: 0px; display: inline; padding-right: 0px"
 border="0" alt="image"
src="http://10rem.net/media/87157/Windows-Live-Writer_f83f3d17530b_C926_image_thumb_8.png"
 width="204" height="166" /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Specifically, this is the URI format that they're using:&lt;/p&gt;

&lt;pre class="brush: xml;"&gt;
&amp;lt;div id="metro-game-header"&lt;br /&gt;
     url="nickmetroapp://www.nick.com/callback?page=StarDetailPageViewModel&amp;amp;amp;param=hs_winx_club"&amp;gt;&amp;lt;div class="header-container"&amp;gt;&amp;lt;img width="569" height="128" id="header-logo" alt="Nickelodeon" src="http://images3.nick.com/nick-assets/games/nick-metro-app/nick-logo.png?height=128&amp;amp;amp;width=569&amp;amp;amp;quality=0.75"&amp;gt;&amp;lt;img width="93" height="128" id="header-slime" src="http://images2.nick.com/nick-assets/games/nick-metro-app/slime-drop.png?height=128&amp;amp;amp;width=93&amp;amp;amp;quality=0.75"&amp;gt;&amp;lt;img width="300" height="81" id="header-button" onclick="NICK.games.metro.appCallTriggered();" alt="Close Game" src="http://images2.nick.com/nick-assets/games/nick-metro-app/close-back-button.png?height=81&amp;amp;amp;width=300&amp;amp;amp;quality=0.75"&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;
&lt;/pre&gt;

&lt;p&gt;The parameter information comes from the URL that the app
originally sent over.&lt;/p&gt;

&lt;p&gt;If you have the nick app installed, click this link in your
browser: &lt;a
title="nickmetroapp://www.nick.com/callback?page=StarDetailPageViewModel&amp;amp;param=hs_winx_club"
 href="nickmetroapp://www.nick.com/callback?page=StarDetailPageViewModel&amp;amp;param=hs_winx_club"&gt;
nickmetroapp://www.nick.com/callback?page=StarDetailPageViewModel&amp;amp;param=hs_winx_club&lt;/a&gt;
. It will pull up the nick app, just as you expect. Because of the
parameter passed, it will even navigate to the specific page.&lt;/p&gt;

&lt;p&gt;This works because apps can register protocols that they respond
to. The primary reason this exists is to support things like
browsers which respond to http and voip apps which need to respond
to their own call-to protocols, but you can use it in your own
apps.&lt;/p&gt;

&lt;p&gt;Protocols are registered in the appxmanifest for the project. In
this screen grab, I'm registering the
&lt;strong&gt;pete-brown://&lt;/strong&gt; protocol. (For obvious reasons,
there are a number of reserved protocols which you cannot register
for your app. You can find them listed in &lt;a
href="http://msdn.microsoft.com/en-us/library/windows/apps/xaml/Hh779670(v=win.10).aspx"
 target="_blank"&gt;this MSDN article&lt;/a&gt;.)&lt;/p&gt;

&lt;p&gt;&lt;a
href="http://10rem.net/media/87162/Windows-Live-Writer_f83f3d17530b_C926_image_24.png"
 target="_blank"&gt;&lt;img title="image"
style="border-top: 0px; border-right: 0px; background-image: none; border-bottom: 0px; padding-top: 0px; padding-left: 0px; border-left: 0px; display: inline; padding-right: 0px"
 border="0" alt="image"
src="http://10rem.net/media/87167/Windows-Live-Writer_f83f3d17530b_C926_image_thumb_11.png"
 width="650" height="249" /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Once I deploy this app, if anyone enters
"pete-brown://something_or_other" it will launch or activate my
app. More on that in a moment.&lt;/p&gt;

&lt;h3&gt;What about multiple apps registering the protocol?&lt;/h3&gt;

&lt;p&gt;In Windows 8, the user is always in control. It's up to the user
to decide which apps they will use to open specific file types or
protocols. Via the prompts that come up when you open a file or URI
(The "you have new apps which can open this type of file" prompt)
and via the default programs in Control Panel, the user can decide
which apps will be associated with the type.&lt;/p&gt;

&lt;p&gt;Most users won't need to use this control panel section, but
it's good to know it's there.&lt;/p&gt;

&lt;p&gt;&lt;a
href="http://10rem.net/media/87172/Windows-Live-Writer_f83f3d17530b_C926_image_26.png"
 target="_blank"&gt;&lt;img title="image"
style="border-top: 0px; border-right: 0px; background-image: none; border-bottom: 0px; padding-top: 0px; padding-left: 0px; border-left: 0px; display: inline; padding-right: 0px"
 border="0" alt="image"
src="http://10rem.net/media/87177/Windows-Live-Writer_f83f3d17530b_C926_image_thumb_12.png"
 width="650" height="385" /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a
href="http://10rem.net/media/87182/Windows-Live-Writer_f83f3d17530b_C926_image_28.png"
 target="_blank"&gt;&lt;img title="image"
style="border-top: 0px; border-right: 0px; background-image: none; border-bottom: 0px; padding-top: 0px; padding-left: 0px; border-left: 0px; display: inline; padding-right: 0px"
 border="0" alt="image"
src="http://10rem.net/media/87187/Windows-Live-Writer_f83f3d17530b_C926_image_thumb_13.png"
 width="650" height="375" /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;It's one thing to allow your app to be activated with just any
random URI with your app's scheme/prefix, but what about passing
parameters and whatnot?&lt;/p&gt;

&lt;h3&gt;Intelligently handling activation&lt;/h3&gt;

&lt;p&gt;Your app is in control of the URI format. You'll want to stick
within the rules for URI formatting in general, but how you
interpret what you see is up to you.&lt;/p&gt;

&lt;p&gt;Inside App.xaml, override the OnActivated method and handle the
case of protocol activation as shown here:&lt;/p&gt;

&lt;pre class="brush: csharp;"&gt;
protected override void OnActivated(IActivatedEventArgs args)&lt;br /&gt;
{&lt;br /&gt;
    if (args.Kind == ActivationKind.Protocol)&lt;br /&gt;
    {&lt;br /&gt;
        var protocolArgs = args as ProtocolActivatedEventArgs;&lt;br /&gt;
&lt;br /&gt;
        var fullUri = protocolArgs.Uri;&lt;br /&gt;
               &lt;br /&gt;
        // todo: parse the URI and navigate to the appropriate&lt;br /&gt;
        // page, or perform an action&lt;br /&gt;
&lt;br /&gt;
    }&lt;br /&gt;
}
&lt;/pre&gt;

&lt;p&gt;Once you have the Uri, you can break it into its component
pieces.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;NOTE&lt;/p&gt;

&lt;p&gt;When you handle this type of activation, your app may already be
running, or it may be a brand new activation and launch. Be sure to
handle each case appropriately.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h3&gt;What could you use it for?&lt;/h3&gt;

&lt;p&gt;It's increasingly common for apps to provide deep links to their
data. Contacts stores need to provide ways to link to specific
contacts, for example.&lt;/p&gt;

&lt;p&gt;This is especially important when it comes to implementing the
Share contract. In that case, when you share something like a
contact, you may want to simply provide a deep link to that
contact's information in your app. This will allow you to share the
link with anyone who already has that app. Same concept applies to
customer information, or invoices, or other potentially useful app
information.&lt;/p&gt;

&lt;p&gt;One thing that makes Windows Store apps powerful is that they
all play together to make the sum greater than the parts. The Share
contract is a huge part of that, but so is protocol activation.
Consider implementing it in your next Windows Store app.&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/PeteBrown?a=v3z_fnmXqYA:oeTMx1iXNPM:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PeteBrown?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/PeteBrown?a=v3z_fnmXqYA:oeTMx1iXNPM:I9og5sOYxJI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PeteBrown?d=I9og5sOYxJI" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/PeteBrown?a=v3z_fnmXqYA:oeTMx1iXNPM:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PeteBrown?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/PeteBrown?a=v3z_fnmXqYA:oeTMx1iXNPM:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PeteBrown?i=v3z_fnmXqYA:oeTMx1iXNPM:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/PeteBrown?a=v3z_fnmXqYA:oeTMx1iXNPM:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PeteBrown?i=v3z_fnmXqYA:oeTMx1iXNPM:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/PeteBrown?a=v3z_fnmXqYA:oeTMx1iXNPM:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PeteBrown?i=v3z_fnmXqYA:oeTMx1iXNPM:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/PeteBrown/~4/v3z_fnmXqYA" height="1" width="1"/&gt;</description><feedburner:origLink>http://10rem.net/blog/2012/12/05/a-windows-8-trick-protocol-activation-of-apps-and-the-nick-app</feedburner:origLink></item><item><title>Scaled DPI-aware image assets for Windows 8 Apps in Visual Studio 2012 Update 1</title><author>Pete Brown	</author><link>http://feedproxy.google.com/~r/PeteBrown/~3/suu2Bupi_UI/scaled-dpi-aware-image-assets-for-windows-8-apps-in-visual-studio-2012-update-1</link><pubDate>Sat, 01 Dec 2012 18:32:19 GMT</pubDate><guid isPermaLink="false">http://10rem.net/blog/2012/12/01/scaled-dpi-aware-image-assets-for-windows-8-apps-in-visual-studio-2012-update-1</guid><description>&lt;p&gt;With the latest update to Visual Studio 2012, the mechanism for
specifying and verifying DPI-aware images has just gotten
easier.&lt;/p&gt;

&lt;p&gt;I've written and spoken about automatic DPI-aware image assets
in Windows 8 apps in my book Windows 8 XAML in Action, and also at
events. &lt;a
href="http://msdn.microsoft.com/en-us/library/windows/apps/Hh965372.aspx"
 target="_blank"&gt;Here are the details&lt;/a&gt;, but in a nutshell, if
you use a specific naming convention for images in your Windows
Store app, for example logo.scale-100.png and logo.scale-180.png,
your code can simply reference the root name (logo.png) and the
runtime will handle pulling in the correct image for that DPI.&lt;/p&gt;

&lt;h3&gt;Specifying images&lt;/h3&gt;

&lt;p&gt;In base Visual Studio 2012, the file picker in the app manifest
didn't quite understand this convention. To pull in DPI-aware
images, you had to simply type the root file name in the textbox.
Everything worked beyond that. In Update 1, the appxmanifest
designer has been updated to better support these types of image
assets:&lt;/p&gt;

&lt;p&gt;&lt;a
href="http://10rem.net/media/86999/Windows-Live-Writer_Scaled-image-assets-for-Windows-8-Apps-i_BD79_image_2.png"
 target="_blank"&gt;&lt;img
title="Not how I didn't say the section had been &amp;quot;re-imagined&amp;quot;"
 style="border-top: 0px; border-right: 0px; background-image: none; border-bottom: 0px; padding-top: 0px; padding-left: 0px; border-left: 0px; display: inline; padding-right: 0px"
 border="0"
alt="Not how I didn't say the section had been &amp;quot;re-imagined&amp;quot;"
 src="http://10rem.net/media/87004/Windows-Live-Writer_Scaled-image-assets-for-Windows-8-Apps-i_BD79_image_thumb.png"
 width="650" height="394" /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Another nice change is that the "store logo" entry has been
moved from the last tab to the first tab. This is a huge deal as
the &lt;a
href="http://10rem.net/blog/2012/11/20/the-update-windows-sdk-and-windows-app-certification-kit-tool-now-checks-branding-images"
 target="_blank"&gt;latest version of WACK now checks to make sure you
have that logo in place&lt;/a&gt;. Those X logos you see in the Windows
Store? That's from folks forgetting to update this logo. With it
now on the first tab, it's much more "in your face".&lt;/p&gt;

&lt;p&gt;Here's one of the examples from my book, created with the base
Visual Studio 2012, and brought into Update 1 without me changing
anything. It just works (the .scale-80 image was left out by me).
the small numbers at the top right of the logo are to illustrate
which image is chosen when run in the simulator.&lt;/p&gt;

&lt;p&gt;&lt;a
href="http://10rem.net/media/87009/Windows-Live-Writer_Scaled-image-assets-for-Windows-8-Apps-i_BD79_image_4.png"
 target="_blank"&gt;&lt;img title="image"
style="border-top: 0px; border-right: 0px; background-image: none; border-bottom: 0px; padding-top: 0px; padding-left: 0px; border-left: 0px; display: inline; padding-right: 0px"
 border="0" alt="image"
src="http://10rem.net/media/87014/Windows-Live-Writer_Scaled-image-assets-for-Windows-8-Apps-i_BD79_image_thumb_1.png"
 width="650" height="459" /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Note that the appxmanifest itself only includes an entry for the
base file name:&lt;/p&gt;

&lt;pre class="brush: xml; highlight: [7,20,21,27,29];"&gt;
&amp;lt;?xml version="1.0" encoding="utf-8"?&amp;gt;&lt;br /&gt;
&amp;lt;Package xmlns="http://schemas.microsoft.com/appx/2010/manifest"&amp;gt;&lt;br /&gt;
  &amp;lt;Identity Name="7bb30b0f-fd80-4ea2-a0e6-c619d20c83fe" Publisher="CN=Pete" Version="1.0.0.0" /&amp;gt;&lt;br /&gt;
  &amp;lt;Properties&amp;gt;&lt;br /&gt;
    &amp;lt;DisplayName&amp;gt;PhotoBrowser&amp;lt;/DisplayName&amp;gt;&lt;br /&gt;
    &amp;lt;PublisherDisplayName&amp;gt;Pete&amp;lt;/PublisherDisplayName&amp;gt;&lt;br /&gt;
    &amp;lt;Logo&amp;gt;Assets\StoreLogo.png&amp;lt;/Logo&amp;gt;&lt;br /&gt;
    &amp;lt;Description&amp;gt;PhotoBrowser&amp;lt;/Description&amp;gt;&lt;br /&gt;
  &amp;lt;/Properties&amp;gt;&lt;br /&gt;
  &amp;lt;Prerequisites&amp;gt;&lt;br /&gt;
    &amp;lt;OSMinVersion&amp;gt;6.2.1&amp;lt;/OSMinVersion&amp;gt;&lt;br /&gt;
    &amp;lt;OSMaxVersionTested&amp;gt;6.2.1&amp;lt;/OSMaxVersionTested&amp;gt;&lt;br /&gt;
  &amp;lt;/Prerequisites&amp;gt;&lt;br /&gt;
  &amp;lt;Resources&amp;gt;&lt;br /&gt;
    &amp;lt;Resource Language="x-generate" /&amp;gt;&lt;br /&gt;
  &amp;lt;/Resources&amp;gt;&lt;br /&gt;
  &amp;lt;Applications&amp;gt;&lt;br /&gt;
    &amp;lt;Application Id="App" Executable="$targetnametoken$.exe" EntryPoint="PhotoBrowser.App"&amp;gt;&lt;br /&gt;
      &amp;lt;VisualElements DisplayName="Photo Browser by Pete"&lt;br /&gt;
                      Logo="Assets\Logo.png"&lt;br /&gt;
                      SmallLogo="Assets\SmallLogo.png"&lt;br /&gt;
                      Description="Photo Browser sample app for my book Windows 8 XAML in Action"&lt;br /&gt;
                      ForegroundText="light"&lt;br /&gt;
                      BackgroundColor="#003060"&lt;br /&gt;
                      ToastCapable="true"&amp;gt;&lt;br /&gt;
        &amp;lt;DefaultTile ShowName="logoOnly"&lt;br /&gt;
                     WideLogo="Assets\WideLogo.png"&lt;br /&gt;
                     ShortName="Photo Browser" /&amp;gt;&lt;br /&gt;
        &amp;lt;SplashScreen Image="Assets\SplashScreen.png"&lt;br /&gt;
                      BackgroundColor="#003060" /&amp;gt;&lt;br /&gt;
      &amp;lt;/VisualElements&amp;gt;&lt;br /&gt;
    &amp;lt;/Application&amp;gt;&lt;br /&gt;
  &amp;lt;/Applications&amp;gt;&lt;br /&gt;
&amp;lt;/Package&amp;gt;
&lt;/pre&gt;

&lt;p&gt;In the project itself, I have images named with the
system-recognized naming convention.&lt;/p&gt;

&lt;p&gt;&lt;img title="image"
style="border-top: 0px; border-right: 0px; background-image: none; border-bottom: 0px; padding-top: 0px; padding-left: 0px; border-left: 0px; display: inline; padding-right: 0px"
 border="0" alt="image"
src="http://10rem.net/media/87019/Windows-Live-Writer_Scaled-image-assets-for-Windows-8-Apps-i_BD79_image_12.png"
 width="650" height="650" /&gt;&lt;/p&gt;

&lt;h3&gt;Testing your images&lt;/h3&gt;

&lt;p&gt;If you have multiple machines with different DPI screens, that's
a great way to test, as you'll see exactly what the images look
like. For most people, however, that's not the case. To test out
the images, use the simulator. The simulator will do its best to
show what the images will look like, but of course, without the
available DPI on the host machine, the level of detail won't be the
same.&lt;/p&gt;

&lt;p&gt;&lt;a
href="http://10rem.net/media/87024/Windows-Live-Writer_Scaled-image-assets-for-Windows-8-Apps-i_BD79_image_11.png"
 target="_blank"&gt;&lt;img title="image"
style="border-top: 0px; border-right: 0px; background-image: none; border-bottom: 0px; padding-top: 0px; padding-left: 0px; border-left: 0px; display: inline; padding-right: 0px"
 border="0" alt="image"
src="http://10rem.net/media/87029/Windows-Live-Writer_Scaled-image-assets-for-Windows-8-Apps-i_BD79_image_thumb_4.png"
 width="650" height="326" /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;It's a small change to Visual Studio 2012, but a welcome one. As
a result of this, I expect to see more developers using dpi-aware
images, and fewer developers leaving out the store logo.&lt;/p&gt;

&lt;h3&gt;Related links&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a
href="http://blogs.msdn.com/b/somasegar/archive/2012/11/26/visual-studio-2012-update-1-now-available.aspx"
 target="_blank"&gt;More about Visual Studio 2012 Update 1&lt;/a&gt;&lt;/li&gt;

&lt;li&gt;&lt;a
href="http://www.microsoft.com/visualstudio/eng/visual-studio-update"
 target="_blank"&gt;Download Visual Studio 2012 Update 1&lt;/a&gt;&lt;/li&gt;

&lt;li&gt;&lt;a
href="http://msdn.microsoft.com/en-us/library/windows/apps/Hh965372.aspx"
 target="_blank"&gt;Information on DPI-aware images (MSDN)&lt;/a&gt;&lt;/li&gt;

&lt;li&gt;&lt;a
href="http://10rem.net/blog/2012/11/20/the-update-windows-sdk-and-windows-app-certification-kit-tool-now-checks-branding-images"
 target="_blank"&gt;Updated Windows 8 SDK and WACK tool&lt;/a&gt;&lt;/li&gt;

&lt;li&gt;&lt;a
href="http://10rem.net/blog/2012/11/12/building-quality-windows-8-apps-important-pre-submission-checks-for-your-windows-store-apps"
 target="_blank"&gt;Building quality Windows 8 apps: Important
pre-submission checks&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/PeteBrown?a=suu2Bupi_UI:lYirLCTD_p0:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PeteBrown?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/PeteBrown?a=suu2Bupi_UI:lYirLCTD_p0:I9og5sOYxJI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PeteBrown?d=I9og5sOYxJI" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/PeteBrown?a=suu2Bupi_UI:lYirLCTD_p0:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PeteBrown?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/PeteBrown?a=suu2Bupi_UI:lYirLCTD_p0:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PeteBrown?i=suu2Bupi_UI:lYirLCTD_p0:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/PeteBrown?a=suu2Bupi_UI:lYirLCTD_p0:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PeteBrown?i=suu2Bupi_UI:lYirLCTD_p0:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/PeteBrown?a=suu2Bupi_UI:lYirLCTD_p0:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PeteBrown?i=suu2Bupi_UI:lYirLCTD_p0:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/PeteBrown/~4/suu2Bupi_UI" height="1" width="1"/&gt;</description><feedburner:origLink>http://10rem.net/blog/2012/12/01/scaled-dpi-aware-image-assets-for-windows-8-apps-in-visual-studio-2012-update-1</feedburner:origLink></item><item><title>Teaching a six (well, almost seven) year old to solder</title><author>Pete Brown	</author><link>http://feedproxy.google.com/~r/PeteBrown/~3/_d1e_RHx1b4/teaching-a-six-well-almost-seven-year-old-to-solder</link><pubDate>Fri, 30 Nov 2012 01:38:34 GMT</pubDate><guid isPermaLink="false">http://10rem.net/blog/2012/11/29/teaching-a-six-well-almost-seven-year-old-to-solder</guid><description>&lt;p&gt;As a geek, there are a number of milestones or rites of passage
for children:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;First drawing of any vehicle with more than three guns&lt;/li&gt;

&lt;li&gt;First original LEGO model&lt;/li&gt;

&lt;li&gt;First time you figure out how to turn on the Xbox and get into
a game without help&lt;/li&gt;

&lt;li&gt;First time you solder something&lt;/li&gt;

&lt;li&gt;First program written&lt;/li&gt;

&lt;li&gt;First cosplay at a geek convention&lt;/li&gt;

&lt;li&gt;First computer you build from parts&lt;/li&gt;

&lt;li&gt;First date with someone who tolerates nerds or even out-nerds
you&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;There are many, many more, especially depending upon the class
of nerd/geek. Anyway, you get the picture. :)&lt;/p&gt;

&lt;p&gt;My son sees me solder things all the time, and has always been
interested. However, a soldering iron is something that, like your
first pocketknife, requires a level of respect and
self-preservation when using.&lt;/p&gt;

&lt;p&gt;Tonight, I felt he was ready for it, so we worked on his first
soldering project.&amp;nbsp; The kit chosen is the &lt;a
href="http://www.parallax.com/StoreSearchResults/tabid/768/txtSearch/28236/List/0/SortField/4/ProductID/832/Default.aspx"
 target="_blank"&gt;Parallax S2 Robot Badge&lt;/a&gt;. This is a nice little
"learn to solder" kit which gives you something interesting at the
end: a model robot with a button that you press to make an RGB LED
cycle through colors.&lt;/p&gt;

&lt;p&gt;There are lots of other "learn to solder" kits, but most of them
are more like practicing your writing by repeating scores of the
same letter on a page until your hand cramps up; at the end, what
you have to show for it is hardly inspiring and not even remotely
interesting.&lt;/p&gt;

&lt;p&gt;This kit has a grand total of nine solder joints, including some
challenges:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;LEDs are easy to burn out if you heat them up too long&lt;/li&gt;

&lt;li&gt;The large metal battery holder is a giant heat sink, so it
takes a totally different soldering style.&lt;/li&gt;

&lt;li&gt;All the joints are small with relatively small solder pads
(except on the opposite sides .. the large pads on on the wrong
side, oddly)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;But, what you get out of it at the end is this:&lt;/p&gt;

&lt;p&gt;&lt;a
href="http://10rem.net/media/86941/Windows-Live-Writer_Teaching-a-six-well-almost-seven-year-ol_12C0E_image_2.png"
 target="_blank"&gt;&lt;img title="image"
style="border-top: 0px; border-right: 0px; background-image: none; border-bottom: 0px; padding-top: 0px; padding-left: 0px; border-left: 0px; display: inline; padding-right: 0px"
 border="0" alt="image"
src="http://10rem.net/media/86946/Windows-Live-Writer_Teaching-a-six-well-almost-seven-year-ol_12C0E_image_thumb.png"
 width="307" height="238" /&gt;&lt;/a&gt;&amp;nbsp;&lt;a
href="http://10rem.net/media/86951/Windows-Live-Writer_Teaching-a-six-well-almost-seven-year-ol_12C0E_image_4.png"
 target="_blank"&gt;&lt;img title="image"
style="border-top: 0px; border-right: 0px; background-image: none; border-bottom: 0px; padding-top: 0px; padding-left: 0px; border-left: 0px; display: inline; padding-right: 0px"
 border="0" alt="image"
src="http://10rem.net/media/86956/Windows-Live-Writer_Teaching-a-six-well-almost-seven-year-ol_12C0E_image_thumb_1.png"
 width="327" height="238" /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;And more importantly, this:&lt;/p&gt;

&lt;p&gt;&lt;a
href="http://10rem.net/media/86961/Windows-Live-Writer_Teaching-a-six-well-almost-seven-year-ol_12C0E_image_6.png"
 target="_blank"&gt;&lt;img title="image"
style="border-top: 0px; border-right: 0px; background-image: none; border-bottom: 0px; padding-top: 0px; padding-left: 0px; border-left: 0px; display: inline; padding-right: 0px"
 border="0" alt="image"
src="http://10rem.net/media/86966/Windows-Live-Writer_Teaching-a-six-well-almost-seven-year-ol_12C0E_image_thumb_2.png"
 width="210" height="279" /&gt;&lt;/a&gt;&amp;nbsp;&lt;a
href="http://10rem.net/media/86971/Windows-Live-Writer_Teaching-a-six-well-almost-seven-year-ol_12C0E_image_8.png"
 target="_blank"&gt;&lt;img title="image"
style="border-top: 0px; border-right: 0px; background-image: none; border-bottom: 0px; padding-top: 0px; padding-left: 0px; border-left: 0px; display: inline; padding-right: 0px"
 border="0" alt="image"
src="http://10rem.net/media/86976/Windows-Live-Writer_Teaching-a-six-well-almost-seven-year-ol_12C0E_image_thumb_3.png"
 width="210" height="279" /&gt;&lt;/a&gt;&amp;nbsp;&lt;a
href="http://10rem.net/media/86981/Windows-Live-Writer_Teaching-a-six-well-almost-seven-year-ol_12C0E_image_10.png"
 target="_blank"&gt;&lt;img title="image"
style="border-top: 0px; border-right: 0px; background-image: none; border-bottom: 0px; padding-top: 0px; padding-left: 0px; border-left: 0px; display: inline; padding-right: 0px"
 border="0" alt="image"
src="http://10rem.net/media/86986/Windows-Live-Writer_Teaching-a-six-well-almost-seven-year-ol_12C0E_image_thumb_4.png"
 width="210" height="279" /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Note that I did only one solder joint myself. Ben did the rest,
including clipping the leads, all under my close supervision. The
only thing he needed me to do was push the wheels on because
they're a pretty tight fit (note that they don't rotate).&lt;/p&gt;

&lt;p&gt;Before building this, I showed him how to solder using a
resistor and a broken PCB I had. I did one side, he did the other.
That was the only prep other than discussing the safe use of the
iron (never take your eye off the tip, always place it in the
holder when done, never get distracted, never drop it or put it
down on the table, etc.)&lt;/p&gt;

&lt;p&gt;All in all, a very worthwhile experiment that he showed
surprising aptitude at.&lt;/p&gt;

&lt;p&gt;If you're looking for a good kit to use to learn to solder, this
kit, plus a fine tip iron and fine solder, is a really good choice
and a very fine geek bonding moment.&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/PeteBrown?a=_d1e_RHx1b4:I3wwOBlmtVw:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PeteBrown?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/PeteBrown?a=_d1e_RHx1b4:I3wwOBlmtVw:I9og5sOYxJI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PeteBrown?d=I9og5sOYxJI" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/PeteBrown?a=_d1e_RHx1b4:I3wwOBlmtVw:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PeteBrown?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/PeteBrown?a=_d1e_RHx1b4:I3wwOBlmtVw:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PeteBrown?i=_d1e_RHx1b4:I3wwOBlmtVw:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/PeteBrown?a=_d1e_RHx1b4:I3wwOBlmtVw:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PeteBrown?i=_d1e_RHx1b4:I3wwOBlmtVw:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/PeteBrown?a=_d1e_RHx1b4:I3wwOBlmtVw:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PeteBrown?i=_d1e_RHx1b4:I3wwOBlmtVw:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/PeteBrown/~4/_d1e_RHx1b4" height="1" width="1"/&gt;</description><feedburner:origLink>http://10rem.net/blog/2012/11/29/teaching-a-six-well-almost-seven-year-old-to-solder</feedburner:origLink></item><item><title>Generating sound at runtime using XAudio2 in a Windows Store app</title><author>Pete Brown	</author><link>http://feedproxy.google.com/~r/PeteBrown/~3/TLaTYBuB4uA/generating-sound-at-runtime-using-xaudio2-in-a-windows-store-app</link><pubDate>Thu, 29 Nov 2012 07:11:43 GMT</pubDate><guid isPermaLink="false">http://10rem.net/blog/2012/11/29/generating-sound-at-runtime-using-xaudio2-in-a-windows-store-app</guid><description>&lt;p&gt;In this post, I'll briefly explain how to generate sound in real
time in a Windows Store C++ app using XAudio2.&lt;/p&gt;

&lt;p&gt;I've always liked messing around with synthesizers. Quite some
time ago, I built a &lt;a href="http://10rem.net/lab/silverlight-synthesizer"
target="_blank"&gt;simple synthesizer&lt;/a&gt; using Silverlight. It was
cool, but very processor intensive. All the sound was generated in
real time, and was then pushed into buffers which were read by the
media pipeline. The pipeline was never meant for that type of sound
generation so although it worked well, it had a fair bit of
lag.&lt;/p&gt;

&lt;p&gt;For a project I'm working on in my spare time, I need to be able
to generate sound in real time for a Windows Store app. The user
interface for this app also has to be really intuitive. It may have
some interesting visualizations, but it'll be mostly standard UI
type controls. I figured this was a good time to try out C++ with
XAML in the Windows Store.&lt;/p&gt;

&lt;h3&gt;The project&lt;/h3&gt;

&lt;p&gt;So, I created a new Windows Store C++ plus XAML plus DirectX
app. There are a couple different audio pipelines I could use. I
decided to go with XAudio2 rather than WASAPI, as XAudio2 is much
easier to get into, and has decent performance. Is XAudio2 fast
enough for real-time sound generation? It has been shown to be so
for many apps. In fact, the MorphWiz and Tachyon apps that Jordan
&lt;a href="http://channel9.msdn.com/Events/Build/2012/0-001"
target="_blank"&gt;Rudess played before Build 2012&lt;/a&gt; used XAudio2
(although the developer may have converted to WASAPI by now in
order to eek out some extra performance).&lt;/p&gt;

&lt;p&gt;I added a single class named "Synthesizer". It's a bit much for
me to call this a "synthesizer", but hey. :)&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Keep in mind that I'm not a good C++ programmer; I'm
still re-learning. The code here is shown just as a proof of
concept, not best practices or anything like that.&lt;/strong&gt;&lt;/p&gt;

&lt;h3&gt;The Synthesizer header file&lt;/h3&gt;

&lt;pre class="brush: cpp;"&gt;
#pragma once&lt;br /&gt;
&lt;br /&gt;
//#include &amp;lt;wrl.h&amp;gt;&lt;br /&gt;
#include &amp;lt;pch.h&amp;gt;&lt;br /&gt;
#include &amp;lt;xaudio2.h&amp;gt;&lt;br /&gt;
#include &amp;lt;xaudio2fx.h&amp;gt;&lt;br /&gt;
//#include &amp;lt;mmreg.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
#define VOICE_BUFFER_SAMPLE_COUNT (44100 * 2)&lt;br /&gt;
&lt;br /&gt;
ref class Synthesizer sealed&lt;br /&gt;
{&lt;br /&gt;
private:&lt;br /&gt;
    int m_sampleBits;&lt;br /&gt;
&lt;br /&gt;
    IXAudio2MasteringVoice* m_masterVoice;    // cannot use ComPtr for this&lt;br /&gt;
    IXAudio2* m_audioEngine;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
    // this is temp stuff which will be rolled into another class&lt;br /&gt;
    IXAudio2SourceVoice* m_voice;&lt;br /&gt;
    XAUDIO2_BUFFER m_buffer;&lt;br /&gt;
    float m_bufferData[VOICE_BUFFER_SAMPLE_COUNT];&lt;br /&gt;
&lt;br /&gt;
public:&lt;br /&gt;
    Synthesizer(uint32 sampleRate);&lt;br /&gt;
&lt;br /&gt;
};
&lt;/pre&gt;

&lt;p&gt;There's nothing overly exciting going on in that class right
now. The thing that took me the longest to figure out was that I
couldn't reference any of the IXAudio2* interfaces (other than the
main one) using a ComPtr. The error was suitably cryptic for a noob
like me.&lt;/p&gt;

&lt;p&gt;The Synthesizer Class has a single XAudio2 voice (you can have
multiple voices). And no: no destructor, I don't even clean up
after myself. Remember what I said about this not showing best
practices?&lt;/p&gt;

&lt;h3&gt;Synthesizer class file&lt;/h3&gt;

&lt;pre class="brush: cpp;"&gt;
#include &amp;lt;pch.h&amp;gt;&lt;br /&gt;
#include &amp;lt;math.h&amp;gt;&lt;br /&gt;
#include &amp;lt;Synthesizer.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Synthesizer::Synthesizer(uint32 sampleRate)&lt;br /&gt;
{&lt;br /&gt;
    m_sampleBits = 32;    // 32 for IEEE float&lt;br /&gt;
&lt;br /&gt;
    // initialize XAudio 2&lt;br /&gt;
    DX::ThrowIfFailed(XAudio2Create(&amp;amp;m_audioEngine, 0, XAUDIO2_DEFAULT_PROCESSOR));&lt;br /&gt;
    DX::ThrowIfFailed(m_audioEngine-&amp;gt;CreateMasteringVoice(&amp;amp;m_masterVoice, XAUDIO2_DEFAULT_CHANNELS, sampleRate));&lt;br /&gt;
&lt;br /&gt;
    // 2 channels because this is stereo&lt;br /&gt;
    int channels = 2;&lt;br /&gt;
&lt;br /&gt;
    // set up wave format using my good friend WAVEFORMATEX&lt;br /&gt;
    WAVEFORMATEX wfx;&lt;br /&gt;
    wfx.wBitsPerSample = m_sampleBits;&lt;br /&gt;
    wfx.nAvgBytesPerSec = sampleRate * channels * m_sampleBits / 8;&lt;br /&gt;
    wfx.nChannels = channels;&lt;br /&gt;
    wfx.nBlockAlign = channels * m_sampleBits / 8;&lt;br /&gt;
    wfx.wFormatTag = WAVE_FORMAT_IEEE_FLOAT; // or could use WAVE_FORMAT_PCM&lt;br /&gt;
    wfx.nSamplesPerSec = sampleRate;&lt;br /&gt;
    wfx.cbSize = 0;    // set to zero for PCM or IEEE float&lt;br /&gt;
&lt;br /&gt;
    DX::ThrowIfFailed(m_audioEngine-&amp;gt;CreateSourceVoice(&amp;amp;m_voice, (WAVEFORMATEX*)&amp;amp;wfx));&lt;br /&gt;
&lt;br /&gt;
    //float noteFrequency = 22.5;    // A0&lt;br /&gt;
    float noteFrequency = 55;    // A1&lt;br /&gt;
    //float noteFrequency = 110;    // A2&lt;br /&gt;
    //float noteFrequency = 220;    // A3&lt;br /&gt;
    //float noteFrequency = 440;    // A4&lt;br /&gt;
&lt;br /&gt;
    // there's probably a #define for this somewhere&lt;br /&gt;
    float pi = 3.14159265;&lt;br /&gt;
&lt;br /&gt;
    // fill the buffer&lt;br /&gt;
    for (int i = 0; i &amp;lt; VOICE_BUFFER_SAMPLE_COUNT; i+=2)&lt;br /&gt;
    {&lt;br /&gt;
        m_bufferData[i] = sin(i * 2 * pi * noteFrequency/sampleRate);&lt;br /&gt;
&lt;br /&gt;
        // stereo buffer. Slight detuning of the second tone&lt;br /&gt;
        m_bufferData[i+1] = sin(i * 2 * pi * (noteFrequency + 2)/sampleRate);&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    // the buffer will be looped infinitely&lt;br /&gt;
    m_buffer.AudioBytes = VOICE_BUFFER_SAMPLE_COUNT * m_sampleBits / 8;&lt;br /&gt;
    m_buffer.PlayBegin = 0;&lt;br /&gt;
    m_buffer.PlayLength = 0;    // play entire buffer&lt;br /&gt;
    m_buffer.LoopBegin = 0;&lt;br /&gt;
    m_buffer.LoopLength = 0;    // loop entire buffer&lt;br /&gt;
    m_buffer.LoopCount = XAUDIO2_LOOP_INFINITE;&lt;br /&gt;
    m_buffer.pAudioData = (BYTE *)&amp;amp;m_bufferData;&lt;br /&gt;
    m_buffer.pContext = NULL;&lt;br /&gt;
&lt;br /&gt;
    // wire up the buffer&lt;br /&gt;
    DX::ThrowIfFailed(m_voice-&amp;gt;SubmitSourceBuffer(&amp;amp;m_buffer));&lt;br /&gt;
&lt;br /&gt;
    // start playing sound. Yeah, this is in the constructor. Yeah, I know.&lt;br /&gt;
    DX::ThrowIfFailed(m_voice-&amp;gt;Start(0));&lt;br /&gt;
}&lt;br /&gt;
&lt;/pre&gt;

&lt;p&gt;The code is commented in-line and should be reasonably easy to
follow. Basically all I do is initialize XAudio2, fill a buffer
with samples of a sine wave, then tell XAudio2 to play that buffer,
looping it forever.&lt;/p&gt;

&lt;p&gt;References&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a
href="http://msdn.microsoft.com/en-us/library/windows/desktop/ff538799(v=vs.85).aspx"
 target="_blank"&gt;WAVEFORMATEX&lt;/a&gt;&lt;/li&gt;

&lt;li&gt;&lt;a
href="http://msdn.microsoft.com/en-us/library/windows/desktop/microsoft.directx_sdk.xaudio2.xaudio2_buffer(v=vs.85).aspx"
 target="_blank"&gt;XAUDIO2_BUFFER&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Then, I added a synth instance to the header file for the main
XAML page, and then from the main XAML page's constructor, I simply
created an instance:&lt;/p&gt;

&lt;h3&gt;DirectXPage.xaml.cpp header addition&lt;/h3&gt;

&lt;pre class="brush: cpp;"&gt;
#pragma once&lt;br /&gt;
&lt;br /&gt;
#include "DirectXPage.g.h"&lt;br /&gt;
#include "SimpleTextRenderer.h"&lt;br /&gt;
#include "BasicTimer.h"&lt;br /&gt;
#include &amp;lt;Synthesizer.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
namespace PeteBrown_DroneSynthApp&lt;br /&gt;
{&lt;br /&gt;
    /// &amp;lt;summary&amp;gt;&lt;br /&gt;
    /// A DirectX page that can be used on its own.  Note that it may not be used within a Frame.&lt;br /&gt;
    /// &amp;lt;/summary&amp;gt;&lt;br /&gt;
    [Windows::Foundation::Metadata::WebHostHidden]&lt;br /&gt;
    public ref class DirectXPage sealed&lt;br /&gt;
    {&lt;br /&gt;
    public:&lt;br /&gt;
            ...&lt;br /&gt;
&lt;br /&gt;
    private:&lt;br /&gt;
            ...&lt;br /&gt;
&lt;br /&gt;
        Synthesizer^ m_synth;&lt;br /&gt;
    };&lt;br /&gt;
}&lt;br /&gt;
&lt;/pre&gt;

&lt;h3&gt;DirectXPage.xaml.cpp constructor addition&lt;/h3&gt;

&lt;pre class="brush: cpp;"&gt;
DirectXPage::DirectXPage() :&lt;br /&gt;
    m_renderNeeded(true),&lt;br /&gt;
    m_lastPointValid(false)&lt;br /&gt;
{&lt;br /&gt;
    InitializeComponent();&lt;br /&gt;
&lt;br /&gt;
...&lt;br /&gt;
&lt;br /&gt;
    m_synth = ref new Synthesizer(44100);   &lt;br /&gt;
}
&lt;/pre&gt;

&lt;p&gt;Once again, yeah, I know I'm doing all this from the
constructor. Don't shoot me :)&lt;/p&gt;

&lt;p&gt;I then ran the app, and got the wonderful DX + XAML UI (two bits
of text) with what sounds like a hearing test playing in the
background. Clearly you can take this much further and do all sorts
of neat things with audio generation in real time.&amp;nbsp; For me,
this was just a little proof-of-concept I had to work through
before investing any real time in this side project. Concept
proven, I'll move on to some other parts of the app.&lt;/p&gt;

&lt;p&gt;For more &lt;a
href="http://msdn.microsoft.com/en-us/library/windows/desktop/ee415762(v=vs.85).aspx"
 target="_blank"&gt;information on XAudio2 on Windows, see MSDN&lt;/a&gt;.
XAudio2 is a technology shared with the Windows Store (x86, 64, and
ARM), the desktop, Xbox 360, and with Windows Phone 8, so once you
learn it, you can apply it in all three places. For more
information on &lt;a
href="http://msdn.microsoft.com/en-us/library/windowsphone/develop/jj206944(v=vs.105).aspx"
 target="_blank"&gt;XAudio2 on Windows Phone 8, see this MSDN
page&lt;/a&gt;.&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/PeteBrown?a=TLaTYBuB4uA:mp29s-KvPTk:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PeteBrown?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/PeteBrown?a=TLaTYBuB4uA:mp29s-KvPTk:I9og5sOYxJI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PeteBrown?d=I9og5sOYxJI" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/PeteBrown?a=TLaTYBuB4uA:mp29s-KvPTk:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PeteBrown?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/PeteBrown?a=TLaTYBuB4uA:mp29s-KvPTk:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PeteBrown?i=TLaTYBuB4uA:mp29s-KvPTk:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/PeteBrown?a=TLaTYBuB4uA:mp29s-KvPTk:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PeteBrown?i=TLaTYBuB4uA:mp29s-KvPTk:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/PeteBrown?a=TLaTYBuB4uA:mp29s-KvPTk:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PeteBrown?i=TLaTYBuB4uA:mp29s-KvPTk:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/PeteBrown/~4/TLaTYBuB4uA" height="1" width="1"/&gt;</description><feedburner:origLink>http://10rem.net/blog/2012/11/29/generating-sound-at-runtime-using-xaudio2-in-a-windows-store-app</feedburner:origLink></item><item><title>The update Windows SDK and Windows App Certification Kit tool (now checks branding images)</title><author>Pete Brown	</author><link>http://feedproxy.google.com/~r/PeteBrown/~3/RVjUkOWPJ1o/the-update-windows-sdk-and-windows-app-certification-kit-tool-now-checks-branding-images</link><pubDate>Tue, 20 Nov 2012 20:50:31 GMT</pubDate><guid isPermaLink="false">http://10rem.net/blog/2012/11/20/the-update-windows-sdk-and-windows-app-certification-kit-tool-now-checks-branding-images</guid><description>&lt;p&gt;A new version of the Windows Software Development Kit for
Windows 8 was published last week. A new version of the Windows App
Certification Kit (WACK) tool is included as part of this.&lt;/p&gt;

&lt;h3&gt;Installation&lt;/h3&gt;

&lt;p&gt;You can &lt;a
href="http://msdn.microsoft.com/en-US/windows/desktop/hh852363"
target="_blank"&gt;download the Windows 8 SDK from MSDN, here&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;The installation is simple. I'll include the screenshots here so
you can see what's included. Also, I encourage you to enable the
Customer Experience Improvement Program as it really does help the
product teams make better products.&lt;/p&gt;

&lt;p&gt;&lt;a
href="http://10rem.net/media/86820/Windows-Live-Writer_The-update-Windows-SDK-and-Windows-App-C_E53A_image_2.png"
 target="_blank"&gt;&lt;img title="image"
style="border-top: 0px; border-right: 0px; background-image: none; border-bottom: 0px; padding-top: 0px; padding-left: 0px; margin: 0px; border-left: 0px; display: inline; padding-right: 0px"
 border="0" alt="image"
src="http://10rem.net/media/86825/Windows-Live-Writer_The-update-Windows-SDK-and-Windows-App-C_E53A_image_thumb.png"
 width="225" height="166" /&gt;&lt;/a&gt;&amp;nbsp;&lt;a
href="http://10rem.net/media/86830/Windows-Live-Writer_The-update-Windows-SDK-and-Windows-App-C_E53A_image_4.png"
 target="_blank"&gt;&lt;img title="image"
style="border-top: 0px; border-right: 0px; background-image: none; border-bottom: 0px; padding-top: 0px; padding-left: 0px; margin: 0px; border-left: 0px; display: inline; padding-right: 0px"
 border="0" alt="image"
src="http://10rem.net/media/86835/Windows-Live-Writer_The-update-Windows-SDK-and-Windows-App-C_E53A_image_thumb_1.png"
 width="225" height="166" /&gt;&lt;/a&gt;&amp;nbsp;&lt;a
href="http://10rem.net/media/86840/Windows-Live-Writer_The-update-Windows-SDK-and-Windows-App-C_E53A_image_6.png"
 target="_blank"&gt;&lt;img title="image"
style="border-top: 0px; border-right: 0px; background-image: none; border-bottom: 0px; padding-top: 0px; padding-left: 0px; margin: 0px; border-left: 0px; display: inline; padding-right: 0px"
 border="0" alt="image"
src="http://10rem.net/media/86845/Windows-Live-Writer_The-update-Windows-SDK-and-Windows-App-C_E53A_image_thumb_2.png"
 width="225" height="166" /&gt;&lt;/a&gt;&amp;nbsp;&lt;a
href="http://10rem.net/media/86850/Windows-Live-Writer_The-update-Windows-SDK-and-Windows-App-C_E53A_image_8.png"
 target="_blank"&gt;&lt;img title="image"
style="border-top: 0px; border-right: 0px; background-image: none; border-bottom: 0px; padding-top: 0px; padding-left: 0px; margin: 0px; border-left: 0px; display: inline; padding-right: 0px"
 border="0" alt="image"
src="http://10rem.net/media/86855/Windows-Live-Writer_The-update-Windows-SDK-and-Windows-App-C_E53A_image_thumb_3.png"
 width="225" height="166" /&gt;&lt;/a&gt;&amp;nbsp;&lt;a
href="http://10rem.net/media/86860/Windows-Live-Writer_The-update-Windows-SDK-and-Windows-App-C_E53A_image_10.png"
 target="_blank"&gt;&lt;img title="image"
style="border-top: 0px; border-right: 0px; background-image: none; border-bottom: 0px; padding-top: 0px; padding-left: 0px; margin: 0px; border-left: 0px; display: inline; padding-right: 0px"
 border="0" alt="image"
src="http://10rem.net/media/86865/Windows-Live-Writer_The-update-Windows-SDK-and-Windows-App-C_E53A_image_thumb_4.png"
 width="225" height="166" /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;The updated WACK tool&lt;/h3&gt;

&lt;p&gt;The WACK tool is an essential part of Windows Store app
development. It's something which you should run not just at the
end of development, but throughout the development process, or at
least at milestones.&lt;/p&gt;

&lt;p&gt;I'm going to check a Windows Store app created using the default
templates, with no additional functionality added. The tile for the
app (named App2) can be seen in this snip from my Start page.&lt;/p&gt;

&lt;p&gt;&lt;img title="image"
style="border-top: 0px; border-right: 0px; background-image: none; border-bottom: 0px; padding-top: 0px; padding-left: 0px; border-left: 0px; display: inline; padding-right: 0px"
 border="0" alt="image"
src="http://10rem.net/media/86870/Windows-Live-Writer_The-update-Windows-SDK-and-Windows-App-C_E53A_image_18.png"
 width="645" height="323" /&gt;&lt;/p&gt;

&lt;p&gt;You can see I forgot to update the app tile. I also failed to
update the splash screen and store listing image.&lt;/p&gt;

&lt;p&gt;The Barnyard Mahjong and cake stacking games are for my kids.
Honest!&lt;/p&gt;

&lt;p&gt;Now, we'll run the new version of WACK. The Windows App Cert kit
shows up in your Start Page. It's quickest to find it if you just
type "app cert" on the Start Page and then click the resulting
item.&lt;/p&gt;

&lt;p&gt;&lt;a
href="http://10rem.net/media/86875/Windows-Live-Writer_The-update-Windows-SDK-and-Windows-App-C_E53A_image_25.png"
 target="_blank"&gt;&lt;img title="image"
style="border-top: 0px; border-right: 0px; background-image: none; border-bottom: 0px; padding-top: 0px; padding-left: 0px; margin: 0px; border-left: 0px; display: inline; padding-right: 0px"
 border="0" alt="image"
src="http://10rem.net/media/86880/Windows-Live-Writer_The-update-Windows-SDK-and-Windows-App-C_E53A_image_thumb_10.png"
 width="620" height="263" /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;You'll then be prompted to pick a Windows Store app, Desktop app
or Desktop Device app. The Desktop App one is for desktop apps that
can be listed in the store by business accounts. The Device App is
for OEMs and device manufacturers.&lt;/p&gt;

&lt;p&gt;Pick Windows Store App and then select the app you are going to
verify. Note that the app must be compiled/deployed to the local
machine.&lt;/p&gt;

&lt;p&gt;&lt;a
href="http://10rem.net/media/86885/Windows-Live-Writer_The-update-Windows-SDK-and-Windows-App-C_E53A_image_23.png"
 target="_blank"&gt;&lt;img title="image"
style="border-top: 0px; border-right: 0px; background-image: none; border-bottom: 0px; padding-top: 0px; padding-left: 0px; border-left: 0px; display: inline; padding-right: 0px"
 border="0" alt="image"
src="http://10rem.net/media/86890/Windows-Live-Writer_The-update-Windows-SDK-and-Windows-App-C_E53A_image_thumb_9.png"
 width="302" height="212" /&gt;&lt;/a&gt;&amp;nbsp;&lt;a
href="http://10rem.net/media/86895/Windows-Live-Writer_The-update-Windows-SDK-and-Windows-App-C_E53A_image_20.png"
 target="_blank"&gt;&lt;img title="image"
style="border-top: 0px; border-right: 0px; background-image: none; border-bottom: 0px; padding-top: 0px; padding-left: 0px; border-left: 0px; display: inline; padding-right: 0px"
 border="0" alt="image"
src="http://10rem.net/media/86900/Windows-Live-Writer_The-update-Windows-SDK-and-Windows-App-C_E53A_image_thumb_8.png"
 width="302" height="212" /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The tool took several minutes to run. While it is running, leave
the PC alone, and don't interact with the app, even if it looks
like it is stuck.&lt;/p&gt;

&lt;p&gt;As you can see, my default app failed. This is new - in the
previous version of WACK it would have passed.&lt;/p&gt;

&lt;p&gt;&lt;a
href="http://10rem.net/media/86905/Windows-Live-Writer_The-update-Windows-SDK-and-Windows-App-C_E53A_image_27.png"
 target="_blank"&gt;&lt;img title="image"
style="border-top: 0px; border-right: 0px; background-image: none; border-bottom: 0px; padding-top: 0px; padding-left: 0px; border-left: 0px; display: inline; padding-right: 0px"
 border="0" alt="image"
src="http://10rem.net/media/86910/Windows-Live-Writer_The-update-Windows-SDK-and-Windows-App-C_E53A_image_thumb_11.png"
 width="607" height="425" /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;WACK now fails your app if you use the default branding
images&lt;/h3&gt;

&lt;p&gt;Let's see why it failed. Aha! I forgot to update all those logo
images.&lt;/p&gt;

&lt;p&gt;&lt;a
href="http://10rem.net/media/86915/Windows-Live-Writer_The-update-Windows-SDK-and-Windows-App-C_E53A_image_29.png"
 target="_blank"&gt;&lt;img title="image"
style="border-top: 0px; border-right: 0px; background-image: none; border-bottom: 0px; padding-top: 0px; padding-left: 0px; border-left: 0px; display: inline; padding-right: 0px"
 border="0" alt="image"
src="http://10rem.net/media/86920/Windows-Live-Writer_The-update-Windows-SDK-and-Windows-App-C_E53A_image_thumb_12.png"
 width="607" height="302" /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This is great because WACK is something you can run locally, and
is also something that is used by the Windows Store team as their
first pass verification of your app.&lt;/p&gt;

&lt;p&gt;For other tips on how to get your quality app submitted
successfully, see these posts:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a
href="http://blogs.msdn.com/b/windowsstore/archive/2012/11/19/5-tips-to-getting-your-apps-certified-quickly.aspx"
 target="_blank"&gt;5 tips to get your apps certified quickly&lt;/a&gt;
(Windows Store for developers blog)&lt;/li&gt;

&lt;li&gt;&lt;a
href="http://10rem.net/blog/2012/11/12/building-quality-windows-8-apps-important-pre-submission-checks-for-your-windows-store-apps"
 target="_blank"&gt;Building quality Windows 8 apps: Important
pre-submission checks for your Windows Store apps&lt;/a&gt; (me)&lt;/li&gt;
&lt;/ul&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/PeteBrown?a=RVjUkOWPJ1o:-l1idTvbCyQ:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PeteBrown?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/PeteBrown?a=RVjUkOWPJ1o:-l1idTvbCyQ:I9og5sOYxJI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PeteBrown?d=I9og5sOYxJI" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/PeteBrown?a=RVjUkOWPJ1o:-l1idTvbCyQ:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PeteBrown?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/PeteBrown?a=RVjUkOWPJ1o:-l1idTvbCyQ:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PeteBrown?i=RVjUkOWPJ1o:-l1idTvbCyQ:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/PeteBrown?a=RVjUkOWPJ1o:-l1idTvbCyQ:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PeteBrown?i=RVjUkOWPJ1o:-l1idTvbCyQ:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/PeteBrown?a=RVjUkOWPJ1o:-l1idTvbCyQ:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PeteBrown?i=RVjUkOWPJ1o:-l1idTvbCyQ:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/PeteBrown/~4/RVjUkOWPJ1o" height="1" width="1"/&gt;</description><feedburner:origLink>http://10rem.net/blog/2012/11/20/the-update-windows-sdk-and-windows-app-certification-kit-tool-now-checks-branding-images</feedburner:origLink></item><item><title>Building quality Windows 8 apps: Important pre-submission checks for your Windows Store apps</title><author>Pete Brown	</author><link>http://feedproxy.google.com/~r/PeteBrown/~3/lqvH_AaqJ3M/building-quality-windows-8-apps-important-pre-submission-checks-for-your-windows-store-apps</link><pubDate>Mon, 12 Nov 2012 05:01:51 GMT</pubDate><guid isPermaLink="false">http://10rem.net/blog/2012/11/12/building-quality-windows-8-apps-important-pre-submission-checks-for-your-windows-store-apps</guid><description>&lt;p&gt;When you get ready to submit your app to the store, you'll run
it through the &lt;a
href="http://msdn.microsoft.com/en-us/library/windows/desktop/hh848075(v=vs.85).aspx"
 target="_blank"&gt;WACK (Windows App Certification Kit) tool&lt;/a&gt;.
That tool will report to you the most egregious errors, but it
doesn't catch everything you'll want to do to finalize your app. In
this post, I have a number of suggestions ranging from the most
simple to some more interesting system integration ideas.&lt;/p&gt;

&lt;h3&gt;Have you checked the policies and certification
requirements?&lt;/h3&gt;

&lt;p&gt;After running the WACK tool, you should manually check the &lt;a
href="http://msdn.microsoft.com/en-us/library/windows/apps/hh694083.aspx"
 target="_blank"&gt;Windows app certification requirements&lt;/a&gt;, as the
Store submission process will do both, but WACK won't catch
everything. For example, WACK won't catch apps that provide little
value, or which are duplicates of other submissions. These
certification requirements should be your minimum bar for producing
a great app.&lt;/p&gt;

&lt;h3&gt;Did you set the right store colors and logo?&lt;/h3&gt;

&lt;p&gt;You set your splash screen and app tile colors. You have a
normal and wide tile for the start screen. You've been seeing them
all throughout the development cycle. However, &lt;strong&gt;did you set
the store logo?&lt;/strong&gt; It's easy to skip over this as it's in the
packaging tab in the appxmanifest, the last tab, separate from the
other logos.&lt;/p&gt;

&lt;p&gt;By default, the icon is a white boxed X on a transparent
background. That's not what you want to see in the store.&lt;/p&gt;

&lt;p&gt;&lt;img title="image"
style="border-top: 0px; border-right: 0px; background-image: none; border-bottom: 0px; padding-top: 0px; padding-left: 0px; border-left: 0px; display: inline; padding-right: 0px"
 border="0" alt="image"
src="http://10rem.net/media/86727/Windows-Live-Writer_445829d5982c_136D9_image_23.png"
 width="400" height="395" /&gt;&lt;/p&gt;

&lt;p&gt;Update the StoreLogo.png file, or add a new one and set it on
the last tab of the appxmanifest:&lt;/p&gt;

&lt;p&gt;&lt;a
href="http://10rem.net/media/86732/Windows-Live-Writer_445829d5982c_136D9_image_20.png"
 target="_blank"&gt;&lt;img title="image"
style="border-top: 0px; border-right: 0px; background-image: none; border-bottom: 0px; padding-top: 0px; padding-left: 0px; border-left: 0px; display: inline; padding-right: 0px"
 border="0" alt="image"
src="http://10rem.net/media/86737/Windows-Live-Writer_445829d5982c_136D9_image_thumb_8.png"
 width="650" height="226" /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Be sure to update this logo. You don't want to have to resubmit
your app just to fix the ugly X.&lt;/p&gt;

&lt;h3&gt;Looks great on your tablet, but how does it look on big
displays?&lt;/h3&gt;

&lt;p&gt;The most popular devices for Windows 8 are initially likely to
be touch tablets and hybrids which naturally have relatively small
displays. If you want your app to see uptake in the world of
developers and other people with big high resolution but low DPI
desktop displays (I have two 30" displays, others have 24" or 27"
displays), you'll want to make sure your app looks good at all
resolutions. The world doesn't stop at 1366x768 or 1920x1080.&lt;/p&gt;

&lt;p&gt;&lt;a
href="http://10rem.net/media/86742/Windows-Live-Writer_445829d5982c_136D9_image_2.png"
 target="_blank"&gt;&lt;img title="image"
style="border-top: 0px; border-right: 0px; background-image: none; border-bottom: 0px; padding-top: 0px; padding-left: 0px; border-left: 0px; display: inline; padding-right: 0px"
 border="0" alt="image"
src="http://10rem.net/media/86747/Windows-Live-Writer_445829d5982c_136D9_image_thumb.png"
 width="650" height="396" /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Not everyone has an 84" touch display available to them, but
many businesses eventually will. A much more common display will be
something like my 30" Dell at 2560x1600, or all-in-one PCs, like
the Dell 27" which runs at 2560x1440, or even my Lenovo W520 laptop
running at 1920x1080, but (by default) at 125% DPI.&lt;/p&gt;

&lt;p&gt;&lt;a
href="http://10rem.net/media/86752/Windows-Live-Writer_445829d5982c_136D9_image_4.png"
 target="_blank"&gt;&lt;img title="image"
style="border-top: 0px; border-right: 0px; background-image: none; border-bottom: 0px; padding-top: 0px; padding-left: 0px; border-left: 0px; display: inline; padding-right: 0px"
 border="0" alt="image"
src="http://10rem.net/media/86757/Windows-Live-Writer_445829d5982c_136D9_image_thumb_1.png"
 width="650" height="295" /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This is really easy to test inside Visual Studio. You can use
the device pane (see next topic), or simply run your app in the
simulator.&lt;/p&gt;

&lt;p&gt;&lt;img title="image"
style="border-top: 0px; border-right: 0px; background-image: none; border-bottom: 0px; padding-top: 0px; padding-left: 0px; border-left: 0px; display: inline; padding-right: 0px"
 border="0" alt="image"
src="http://10rem.net/media/86762/Windows-Live-Writer_445829d5982c_136D9_image_14.png"
 width="529" height="239" /&gt;&lt;/p&gt;

&lt;p&gt;When you run in the simulator, you'll get to try out the app at
several different common resolutions and DPI settings.&lt;/p&gt;

&lt;p&gt;&lt;a
href="http://10rem.net/media/86767/Windows-Live-Writer_445829d5982c_136D9_image_16.png"
 target="_blank"&gt;&lt;img title="image"
style="border-top: 0px; border-right: 0px; background-image: none; border-bottom: 0px; padding-top: 0px; padding-left: 0px; border-left: 0px; display: inline; padding-right: 0px"
 border="0" alt="image"
src="http://10rem.net/media/86772/Windows-Live-Writer_445829d5982c_136D9_image_thumb_6.png"
 width="650" height="355" /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a
href="http://10rem.net/media/86777/Windows-Live-Writer_445829d5982c_136D9_image_18.png"
 target="_blank"&gt;&lt;img title="image"
style="border-top: 0px; border-right: 0px; background-image: none; border-bottom: 0px; padding-top: 0px; padding-left: 0px; border-left: 0px; display: inline; padding-right: 0px"
 border="0" alt="image"
src="http://10rem.net/media/86782/Windows-Live-Writer_445829d5982c_136D9_image_thumb_7.png"
 width="650" height="356" /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;You want to make sure your content flows well and makes good use
of the available real-estate. As the owner of a large screen, apps
which have a lot of side scrolling but which don't expand to fill
the available vertical space make me sad.&lt;/p&gt;

&lt;h3&gt;Are you supporting snapped and filled state? Rotation?&lt;/h3&gt;

&lt;p&gt;All apps in the Windows Store need to support a Snapped view
(the 320px view you get when you snap an app to the left or right),
a Filled View (the minimum 1024x768 view that remains when another
app is snapped), and the full view. This falls under store policy
3.6 "Your app must use the mechanisms provided by the system for
those features that have them". Apps should also support rotation.
Here's the set of states using an illustration I created for &lt;a
href="http://manning.com/pbrown3/" target="_blank"&gt;Windows 8 XAML
in Action&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="http://manning.com/pbrown3/" target="_blank"&gt;&lt;img
title="image"
style="border-top: 0px; border-right: 0px; background-image: none; border-bottom: 0px; padding-top: 0px; padding-left: 0px; border-left: 0px; display: inline; padding-right: 0px"
 border="0" alt="image"
src="http://10rem.net/media/86787/Windows-Live-Writer_445829d5982c_136D9_image_11.png"
 width="650" height="519" /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This is also very easy to test inside Visual Studio, as long as
you follow the patterns used in the default templates.
Specifically, if you use the named Visual States for the different
views, you can use the device pane in Visual Studio to try them out
at design time. The device pane lets you switch between full,
filled, snapped, and portrait. Behind the scenes, it sets the
appropriate visual state and updates the view in the designer.&lt;/p&gt;

&lt;p&gt;&lt;a
href="http://10rem.net/media/86792/Windows-Live-Writer_445829d5982c_136D9_image_6.png"
 target="_blank"&gt;&lt;img title="image"
style="border-top: 0px; border-right: 0px; background-image: none; border-bottom: 0px; padding-top: 0px; padding-left: 0px; border-left: 0px; display: inline; padding-right: 0px"
 border="0" alt="image"
src="http://10rem.net/media/86797/Windows-Live-Writer_445829d5982c_136D9_image_thumb_2.png"
 width="650" height="321" /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Note that the device pane also lets you change the display
resolution and DPI to make sure you look good on different types of
displays.&lt;/p&gt;

&lt;h3&gt;Do you support all three primary input types? Touch,
Mouse/Touchpad, Keyboard?&lt;/h3&gt;

&lt;p&gt;Store policy 3.5 states "Your app must fully support touch
input, and fully support keyboard and mouse input". This means you
cannot have hover or right-click as the only mechanisms by which
you can get to certain functionality. Similarly, requiring a pinch
gesture without providing an equivalent for mouse and keyboard
would also be a violation of this policy.&lt;/p&gt;

&lt;p&gt;It's tempting to also make related assumptions. For example:
assuming that if the user has touch, they also have an
accelerometer. Sure, that's true for almost all tablets, but not
for touch desktops like the Dell XPS and Lenovo A720. Similarly,
assuming that keyboard is available if accelerometer is not
completely ignores kiosk-like scenarios.&lt;/p&gt;

&lt;h3&gt;Do you have data? Have you made it searchable? Do you share
it?&lt;/h3&gt;

&lt;p&gt;Most apps have data in the form of traditional data, contact
information, timelines, images, files, or more. Don't let your app
be an island, instead, let it provide value to other apps in the
system by making the data sharable. In fact, if your app because an
essential source of data (or a good place to send data), people
will use it again and again.&lt;/p&gt;

&lt;p&gt;The &lt;a
href="http://msdn.microsoft.com/en-us/library/windows/apps/xaml/Hh871373(v=win.10).aspx"
 target="_blank"&gt;Share Source and Share Target contracts&lt;/a&gt; are
both easy to implement and provide a lot of value.&lt;/p&gt;

&lt;p&gt;While you're there, &lt;a
href="http://msdn.microsoft.com/en-us/library/windows/apps/xaml/JJ130767(v=win.10).aspx"
 target="_blank"&gt;make that data searchable&lt;/a&gt;. Again, if the user
can search inside your app, they're more likely to use it. Don't
provide a separate and unrelated search feature inside your app.
Instead, integrate with the search charm.&lt;/p&gt;

&lt;h3&gt;How is your performance on ARM?&lt;/h3&gt;

&lt;p&gt;ARM processors are optimized for a balance of performance,
portability, and low power. When compared to the typical developer
workstation, ARM devices are going to have significantly less power
and memory. Additionally, although the operating system abstracts
away almost all of this, how the processor works internally is
different from how an Intel x86 compatible processor works. For
those reasons, you'll definitely want to test your apps on
ARM-based devices. You may find that you need to flatten your
visual trees a bit, or load fewer items in that ListView, or
perhaps make more aggressive use of virtualization in panels. When
working with DirectX, you'll need to make sure you're using the
correct level of DX supported on ARM devices.&lt;/p&gt;

&lt;p&gt;Start testing on ARM-based devices early on and you'll avoid
headaches down the road.&lt;/p&gt;

&lt;h3&gt;Turn off unused capabilities&lt;/h3&gt;

&lt;p&gt;Declaring a capability but not using it can cause your app to be
rejected from the Windows Store. By default, all apps have Internet
capability checked. If you don't use the Internet in the app,
uncheck this. Same thing if you did some testing with, for example,
the webcam and later decided not to use it.&lt;/p&gt;

&lt;p&gt;&lt;a
href="http://10rem.net/media/86802/Windows-Live-Writer_445829d5982c_136D9_image_25.png"
 target="_blank"&gt;&lt;img title="image"
style="border-top: 0px; border-right: 0px; background-image: none; border-bottom: 0px; padding-top: 0px; padding-left: 0px; border-left: 0px; display: inline; padding-right: 0px"
 border="0" alt="image"
src="http://10rem.net/media/86807/Windows-Live-Writer_445829d5982c_136D9_image_thumb_10.png"
 width="650" height="315" /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;Final word: take testing seriously&lt;/h3&gt;

&lt;p&gt;Submitting your app can sometimes be a lengthy process,
especially in busy times such as around the launch of Windows 8.
You want to minimize the number of times your app is rejected.
Ideally, you want to submit once and then just start making money
(or gaining fame).&lt;/p&gt;

&lt;p&gt;Just because Windows Store apps are typically simpler and
smaller than desktop apps doesn't mean you should pay less
attention to the details when putting them in front of the public.
In fact, due to the increased visibility offered by the store and
the user-centered ratings system, and the external review
mechanisms, you'll want to pay &lt;strong&gt;more&lt;/strong&gt; attention than
ever.&lt;/p&gt;

&lt;p&gt;Finally, &lt;a
href="http://10rem.net/blog/2012/10/03/windows-store-app-development-include-that-privacy-policy"
 target="_blank"&gt;don't forget that privacy policy&lt;/a&gt;.&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/PeteBrown?a=lqvH_AaqJ3M:2qZfqhwXX3U:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PeteBrown?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/PeteBrown?a=lqvH_AaqJ3M:2qZfqhwXX3U:I9og5sOYxJI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PeteBrown?d=I9og5sOYxJI" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/PeteBrown?a=lqvH_AaqJ3M:2qZfqhwXX3U:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PeteBrown?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/PeteBrown?a=lqvH_AaqJ3M:2qZfqhwXX3U:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PeteBrown?i=lqvH_AaqJ3M:2qZfqhwXX3U:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/PeteBrown?a=lqvH_AaqJ3M:2qZfqhwXX3U:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PeteBrown?i=lqvH_AaqJ3M:2qZfqhwXX3U:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/PeteBrown?a=lqvH_AaqJ3M:2qZfqhwXX3U:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PeteBrown?i=lqvH_AaqJ3M:2qZfqhwXX3U:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/PeteBrown/~4/lqvH_AaqJ3M" height="1" width="1"/&gt;</description><feedburner:origLink>http://10rem.net/blog/2012/11/12/building-quality-windows-8-apps-important-pre-submission-checks-for-your-windows-store-apps</feedburner:origLink></item><item><title>How-to: Name Start Page groups in Windows 8</title><author>Pete Brown	</author><link>http://feedproxy.google.com/~r/PeteBrown/~3/8-MYNXL9SkE/how-to-name-start-page-groups-in-windows-8</link><pubDate>Mon, 12 Nov 2012 03:26:46 GMT</pubDate><guid isPermaLink="false">http://10rem.net/blog/2012/11/11/how-to-name-start-page-groups-in-windows-8</guid><description>&lt;p&gt;By default, your Windows 8 Start Page appears as a base group of
standard apps, plus a group of desktop apps (if you upgraded) or
Office apps (if Surface with Windows RT). Most of us create a
number of additional groups beyond those. Those groups are not
named for you automatically. Did you know you could name those
groups to make organization easier?&lt;/p&gt;

&lt;p&gt;Here's how.&lt;/p&gt;

&lt;p&gt;On the Start Page, use Semantic Zoom to zoom out and get a
higher-level view of your groups. If a touch screen or multi-touch
pad, use a pinch gesture to invoke semantic zoom. If using a mouse
or older style touch pad, move to the bottom right corner and click
the "-" you see next to the scroll bar.&lt;/p&gt;

&lt;p&gt;&lt;img title="image"
style="border-top: 0px; border-right: 0px; background-image: none; border-bottom: 0px; padding-top: 0px; padding-left: 0px; border-left: 0px; display: inline; padding-right: 0px"
 border="0" alt="image"
src="http://10rem.net/media/86674/Windows-Live-Writer_Naming-Start-Page-groups-in-Windows-8_14191_image_5.png"
 width="650" height="86" /&gt;&lt;/p&gt;

&lt;p&gt;What you'll then see is the zoomed-out view of your start page.
Note that semantic zoom works in many apps, like the People app and
photos apps.&lt;/p&gt;

&lt;p&gt;&lt;a
href="http://10rem.net/media/86679/Windows-Live-Writer_Naming-Start-Page-groups-in-Windows-8_14191_image_7.png"
 target="_blank"&gt;&lt;img title="image"
style="border-top: 0px; border-right: 0px; background-image: none; border-bottom: 0px; padding-top: 0px; padding-left: 0px; border-left: 0px; display: inline; padding-right: 0px"
 border="0" alt="image"
src="http://10rem.net/media/86684/Windows-Live-Writer_Naming-Start-Page-groups-in-Windows-8_14191_image_thumb_2.png"
 width="650" height="406" /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Right-click to select a group (or pull-down if touch screen).
You'll see a checkmark appear on the selected group The app bar
should automatically appear, but you can also pull it up by swiping
up from the bottom or right-clicking on the page.&lt;/p&gt;

&lt;p&gt;&lt;a
href="http://10rem.net/media/86689/Windows-Live-Writer_Naming-Start-Page-groups-in-Windows-8_14191_image_9.png"
 target="_blank"&gt;&lt;img title="image"
style="border-top: 0px; border-right: 0px; background-image: none; border-bottom: 0px; padding-top: 0px; padding-left: 0px; border-left: 0px; display: inline; padding-right: 0px"
 border="0" alt="image"
src="http://10rem.net/media/86694/Windows-Live-Writer_Naming-Start-Page-groups-in-Windows-8_14191_image_thumb_3.png"
 width="650" height="406" /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Click or tap the "name group" button on the bottom left. In this
case, I'm going to name the group "Kids" because it's a set of
games and apps for when my kids sit with me in my office.&lt;/p&gt;

&lt;p&gt;&lt;a
href="http://10rem.net/media/86699/Windows-Live-Writer_Naming-Start-Page-groups-in-Windows-8_14191_image_13.png"
 target="_blank"&gt;&lt;img title="image"
style="border-top: 0px; border-right: 0px; background-image: none; border-bottom: 0px; padding-top: 0px; padding-left: 0px; border-left: 0px; display: inline; padding-right: 0px"
 border="0" alt="image"
src="http://10rem.net/media/86704/Windows-Live-Writer_Naming-Start-Page-groups-in-Windows-8_14191_image_thumb_5.png"
 width="650" height="490" /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Repeat for each group you want to name (you don't need to name
all of them). Now you have named groups.&lt;/p&gt;

&lt;p&gt;&lt;a
href="http://10rem.net/media/86709/Windows-Live-Writer_Naming-Start-Page-groups-in-Windows-8_14191_image_15.png"
 target="_blank"&gt;&lt;img title="image"
style="border-top: 0px; border-right: 0px; background-image: none; border-bottom: 0px; padding-top: 0px; padding-left: 0px; border-left: 0px; display: inline; padding-right: 0px"
 border="0" alt="image"
src="http://10rem.net/media/86714/Windows-Live-Writer_Naming-Start-Page-groups-in-Windows-8_14191_image_thumb_6.png"
 width="650" height="406" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/PeteBrown?a=8-MYNXL9SkE:Jpumpqrwp5Q:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PeteBrown?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/PeteBrown?a=8-MYNXL9SkE:Jpumpqrwp5Q:I9og5sOYxJI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PeteBrown?d=I9og5sOYxJI" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/PeteBrown?a=8-MYNXL9SkE:Jpumpqrwp5Q:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PeteBrown?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/PeteBrown?a=8-MYNXL9SkE:Jpumpqrwp5Q:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PeteBrown?i=8-MYNXL9SkE:Jpumpqrwp5Q:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/PeteBrown?a=8-MYNXL9SkE:Jpumpqrwp5Q:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PeteBrown?i=8-MYNXL9SkE:Jpumpqrwp5Q:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/PeteBrown?a=8-MYNXL9SkE:Jpumpqrwp5Q:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PeteBrown?i=8-MYNXL9SkE:Jpumpqrwp5Q:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/PeteBrown/~4/8-MYNXL9SkE" height="1" width="1"/&gt;</description><feedburner:origLink>http://10rem.net/blog/2012/11/11/how-to-name-start-page-groups-in-windows-8</feedburner:origLink></item><item><title>Sometimes coding a solution is faster than finding one: Simple Webcam app in Silverlight 5</title><author>Pete Brown	</author><link>http://feedproxy.google.com/~r/PeteBrown/~3/fFY6wdtoiy0/sometimes-coding-a-solution-is-faster-than-finding-one-simple-webcam-app-in-silverlight-5</link><pubDate>Sun, 11 Nov 2012 20:08:26 GMT</pubDate><guid isPermaLink="false">http://10rem.net/blog/2012/11/11/sometimes-coding-a-solution-is-faster-than-finding-one-simple-webcam-app-in-silverlight-5</guid><description>&lt;p&gt;I recently upgraded my main desktop PC to Windows 8. When I did
that, the Microsoft LifeCam software stopped working. It was
recognized as incompatible with Windows 8. For most people, this is
not an issue, as it works perfectly fine with the built-in Windows
8 camera app.&lt;/p&gt;

&lt;p&gt;For me, however, I need a small camera app sitting on my desktop
so I can see the hallway leading to my office. I call it the
heart-attack preventer, as it makes it difficult for my children to
sneak up on me when I'm heads-down at work. This is because I'm
surrounded by displays and simply can't see over them. My home
office is in the basement, with a combined TV room and play room
(plus a bunch of storage) surrounding it, so the kids often sneak
in here to say "Hi".&lt;/p&gt;

&lt;p&gt;I installed the latest version of the LifeCam software, and it
doesn't install the desktop camera app at all. Bummer. I quickly
checked, and this is a common observation about that install.&lt;/p&gt;

&lt;p&gt;Rather than spend all afternoon looking for a solution, I
figured it would be easier to code my own in 15 minutes. I
considered using WPF 4.5, but WebCam access in WPF requires
third-party toolkits or DirectX code (or Win32 API calls), so that
wouldn't do it. Coding a solution as a Windows Store app wouldn't
do, as I need a very tiny window on my desktop, not a snapped app.
I sometimes snap other apps and wouldn't want the webcam app to
limit that, or take up that amount of room.&lt;/p&gt;

&lt;p&gt;&lt;a
href="http://10rem.net/media/86652/Windows-Live-Writer_Sometimes-coding-a-solution-is-faster-th_D691_image_6.png"
 target="_blank"&gt;&lt;img src="http://10rem.net/media/86657/Windows-Live-Writer_Sometimes-coding-a-solution-is-faster-th_D691_image_thumb_2.png" width="650" height="341" alt="image" border="0" style="border-top: 0px; border-right: 0px; background-image: none; border-bottom: 0px; padding-top: 0px; padding-left: 0px; border-left: 0px; display: inline; padding-right: 0px"/&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Silverlight has always had extremely simple WebCam APIs that are
quick to use. (WinRT's APIs are just as easy if not easier).&lt;/p&gt;

&lt;p&gt;I created a quick Silverlight 5 project in Visual Studio 2012.
Made it an out-of-browser app with elevated permissions, and put
this as the MainPage.xaml markup&lt;/p&gt;

&lt;pre class="brush: xml;"&gt;
&amp;lt;UserControl x:Class="SimpleWebcamSL.MainPage"&lt;br /&gt;
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"&lt;br /&gt;
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"&lt;br /&gt;
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008"&lt;br /&gt;
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"&lt;br /&gt;
    mc:Ignorable="d"&lt;br /&gt;
    d:DesignHeight="300" d:DesignWidth="400"&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;Grid x:Name="LayoutRoot" Background="White"&amp;gt;&lt;br /&gt;
        &amp;lt;Rectangle x:Name="VideoOutput"&lt;br /&gt;
                   HorizontalAlignment="Stretch"&lt;br /&gt;
                   VerticalAlignment="Stretch" MouseLeftButtonDown="VideoOutput_MouseLeftButtonDown_1" /&amp;gt;&lt;br /&gt;
    &amp;lt;/Grid&amp;gt;&lt;br /&gt;
&amp;lt;/UserControl&amp;gt;
&lt;/pre&gt;

&lt;p&gt;And this as the code-behind:&lt;/p&gt;

&lt;pre class="brush: csharp;"&gt;
using System;&lt;br /&gt;
using System.Collections.Generic;&lt;br /&gt;
using System.Collections.ObjectModel;&lt;br /&gt;
using System.Linq;&lt;br /&gt;
using System.Net;&lt;br /&gt;
using System.Windows;&lt;br /&gt;
using System.Windows.Controls;&lt;br /&gt;
using System.Windows.Documents;&lt;br /&gt;
using System.Windows.Input;&lt;br /&gt;
using System.Windows.Media;&lt;br /&gt;
using System.Windows.Media.Animation;&lt;br /&gt;
using System.Windows.Shapes;&lt;br /&gt;
&lt;br /&gt;
namespace SimpleWebcamSL&lt;br /&gt;
{&lt;br /&gt;
    public partial class MainPage : UserControl&lt;br /&gt;
    {&lt;br /&gt;
        public MainPage()&lt;br /&gt;
        {&lt;br /&gt;
            InitializeComponent();&lt;br /&gt;
&lt;br /&gt;
            Loaded += MainPage_Loaded;&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        ReadOnlyCollection&amp;lt;VideoCaptureDevice&amp;gt; _devices;&lt;br /&gt;
&lt;br /&gt;
        void MainPage_Loaded(object sender, RoutedEventArgs e)&lt;br /&gt;
        {&lt;br /&gt;
            _devices = CaptureDeviceConfiguration.GetAvailableVideoCaptureDevices();&lt;br /&gt;
&lt;br /&gt;
            // specific to my system. Camera 1 is the one that points&lt;br /&gt;
            // out of my home office. Camera 0 points at me.&lt;br /&gt;
            if (_devices.Count &amp;gt; 1)&lt;br /&gt;
                SetCaptureDevice(_devices[1]);&lt;br /&gt;
            else if (_devices.Count &amp;gt; 0)&lt;br /&gt;
                SetCaptureDevice(_devices[0]);&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
        private void SetCaptureDevice(VideoCaptureDevice device)&lt;br /&gt;
        {&lt;br /&gt;
            var source = new CaptureSource();&lt;br /&gt;
            source.VideoCaptureDevice = device;&lt;br /&gt;
&lt;br /&gt;
            var brush = new VideoBrush();&lt;br /&gt;
            brush.Stretch = Stretch.UniformToFill;&lt;br /&gt;
            brush.SetSource(source);&lt;br /&gt;
            VideoOutput.Fill = brush;&lt;br /&gt;
&lt;br /&gt;
            source.Start();&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        private void VideoOutput_MouseLeftButtonDown_1(object sender, MouseButtonEventArgs e)&lt;br /&gt;
        {&lt;br /&gt;
            Application.Current.MainWindow.DragMove();&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;/pre&gt;

&lt;p&gt;I set the project properties for out of browser, no window
border, and elevated permissions (all covered in &lt;a
href="http://manning.com/pbrown2" target="_blank"&gt;my Silverlight 5
book&lt;/a&gt;) and then installed the app. All done in about 15 minutes.
It took longer to write this post than it did to create the
app.&lt;/p&gt;

&lt;p&gt;This is hard-coded to my specific situation (second camera is
the camera which points away from my desk). I didn't bother with
icons, camera switching, or anything beyond what I needed for this
specific situation.&lt;/p&gt;

&lt;p&gt;As a woodworker, I find it's sometimes quicker for me to build
something as opposed to search stores to find what I'm looking for.
&lt;strong&gt;As a programmer, sometimes it's faster just to code your
own solution rather than search the internet all day for
workarounds. :)&lt;/strong&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/PeteBrown?a=fFY6wdtoiy0:6lmIqWHIUgw:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PeteBrown?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/PeteBrown?a=fFY6wdtoiy0:6lmIqWHIUgw:I9og5sOYxJI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PeteBrown?d=I9og5sOYxJI" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/PeteBrown?a=fFY6wdtoiy0:6lmIqWHIUgw:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PeteBrown?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/PeteBrown?a=fFY6wdtoiy0:6lmIqWHIUgw:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PeteBrown?i=fFY6wdtoiy0:6lmIqWHIUgw:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/PeteBrown?a=fFY6wdtoiy0:6lmIqWHIUgw:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PeteBrown?i=fFY6wdtoiy0:6lmIqWHIUgw:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/PeteBrown?a=fFY6wdtoiy0:6lmIqWHIUgw:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PeteBrown?i=fFY6wdtoiy0:6lmIqWHIUgw:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/PeteBrown/~4/fFY6wdtoiy0" height="1" width="1"/&gt;</description><feedburner:origLink>http://10rem.net/blog/2012/11/11/sometimes-coding-a-solution-is-faster-than-finding-one-simple-webcam-app-in-silverlight-5</feedburner:origLink></item></channel></rss>
