tag:blogger.com,1999:blog-87897132024-03-14T01:36:10.670-06:00Jerry Nixon @WorkBuilding neat things.jerrynixonhttp://www.blogger.com/profile/06978720385628364065noreply@blogger.comBlogger533125tag:blogger.com,1999:blog-8789713.post-39643697794044744522023-03-29T09:24:00.005-06:002023-03-29T09:24:39.435-06:00Is AI really a Mind?<p>Just a dab of thinking on Artificial Intelligence & Reality.</p><p>If we attempt to decompose the human mind into categories and properties, we get obvious members like language, creativity, understanding, synthesis, reasoning, knowledge, and many more things. However, this is like defining "what is an elephant?" from a high-definition, three-dimensional hologram. We get members like trunk, head, body, legs, and skin, - maybe even respiration, movement, and instinct.</p><p>But even if we made the hologram much more detailed, we just can't decompose an elephant exhaustively with only observations. What we miss is what is inside, not just the organs but how hidden systems work on the macro, micro, and even quantum scales, and we miss those enigmatic and inimitable things like consciousness and just "being alive". We might conclude an elephant is alive, but that doesn't properly capture what it means to be alive and what makes it alive. That is to say, there are qualities of an elephant - critical qualities - which we recognize are present, but we cannot measure or properly observe regardless of effort or scientific precision.</p><p></p><p>What makes this important is that if we reassemble our observations in an attempt to create an elephant, the resulting facsimile will not be an elephant. It would be missing those added things which we cannot measure. However, if we attempt to qualify this new golem using only our meager observations, we could confidently - and wrongly - conclude "this is an elephant". And we would say it while inherently knowing what we were saying is not so.</p><p>This is similar to our decomposition of the human mind. We have large (and small), true categories that, like the observations of the elephant, define the mind in a way that is nonrepresentational of the subject. Like making an elephant, if we reassemble our categories of the mind into some new creation, we might say "this is a mind" while knowing our very words fall inanely short of the truth.</p><p>But this is what we mistakenly do with AI. We observe the qualities of AI and map those to the categories we have made of the mind. We consequently observe "AI has the qualities of the mind" then leap to the false conclusion that this assembly of categories somehow is: a mind.</p><p>The very misstep we make in concluding "this is an elephant" we incautiously repeat with AI. Is it a mind? Is it alive? Is it conscious? Does it think? Or are we too easily ascribing higher-ordered, ethereal, and foundational qualities to a thing that demonstrates only the simpler, perfunctory, and easily measurable attributes of the human mind?</p><p>Is any AI a mind? Yes, but only in the same lacking sense that an airplane is a bird, or a car is a horse, or a painting is really a mountain. If it simulates the broad qualities of a mind, we might conclude it is a mind. But is AI a mind - a real, thinking, living, and conscious mind? Yes, but only in the silliest sense.</p><p>So, then, I can't help but wonder why we are so willing to make this frequent mischaracterization? Are we just victims of fiction writers or clickbait titles? Or is there something else that makes us want to see more where there is actually less? I don't know.</p>jerrynixonhttp://www.blogger.com/profile/06978720385628364065noreply@blogger.comtag:blogger.com,1999:blog-8789713.post-57189533543889861632022-10-25T15:28:00.008-06:002022-10-26T11:14:54.885-06:00Waiting for Kestral<p><a href="https://learn.microsoft.com/en-us/aspnet/core/fundamentals/servers/kestrel?tabs=aspnetcore1x&view=aspnetcore-6.0">Kestrel</a> is the ASP.NET Core web server. You can call its endpoints only after it has started. Using the <a href="https://learn.microsoft.com/en-us/dotnet/api/microsoft.extensions.hosting.ihostapplicationlifetime?view=dotnet-plat-ext-7.0">IHostApplicationLifetime</a> interface, you can register a callback for when the server starts & stops. This prevents workarounds like Wait() or Sleep() or Delay() that, honestly, we have all tried. The callback is nice and clean and is deterministic and reliable. </p><p>Let's look at the IHostApplicationLifetime interface.</p><div class="separator" style="clear: both; text-align: left;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiNL3rhrmnG8av1amuZUy_NNyYwLeBqL9n1jYREmbv5BRnDWYGjtqv7GNKIKdS0mvWR_9Et6xGB_FxqGWCVmVpTWOUm017BZH9ntaBnDKW3CgEziYFS5dFgTGc7Xuiq2JwP4zIOqWOUsBwzUn4SZ5vLADXuaX1KcVDsWyTxXMWe_DpwvHPQGfo/s531/img1.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="189" data-original-width="531" height="114" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiNL3rhrmnG8av1amuZUy_NNyYwLeBqL9n1jYREmbv5BRnDWYGjtqv7GNKIKdS0mvWR_9Et6xGB_FxqGWCVmVpTWOUm017BZH9ntaBnDKW3CgEziYFS5dFgTGc7Xuiq2JwP4zIOqWOUsBwzUn4SZ5vLADXuaX1KcVDsWyTxXMWe_DpwvHPQGfo/s320/img1.png" width="320" /></a><span><a name='more'></a></span></div>The <a href="https://learn.microsoft.com/en-us/dotnet/api/microsoft.extensions.hosting.ihostapplicationlifetime?view=dotnet-plat-ext-7.0">IHostApplicationLifetime</a> service is available to you from the service provider. Once you have it you register callbacks to call the host without fear the server is not yet ready. <div><div class="separator" style="clear: both; text-align: left;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgqIfDSdRG-FLW8L4jIKPcRHucr5sT_ZioyWgZQqUaifTyodadhc6SXJ1aCCQi7yJ9OZMBO4Js5-gLtbj4u1jP-8k-uajvRSoYsc9cts-Clf2QdY1tETNM5Qeimn2kj_ApeivLTANcEZWz3NdOreX8WTSUPBQQ3bJ3SCJREbMm9rfliAy_58Sw/s545/image2.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="447" data-original-width="545" height="262" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgqIfDSdRG-FLW8L4jIKPcRHucr5sT_ZioyWgZQqUaifTyodadhc6SXJ1aCCQi7yJ9OZMBO4Js5-gLtbj4u1jP-8k-uajvRSoYsc9cts-Clf2QdY1tETNM5Qeimn2kj_ApeivLTANcEZWz3NdOreX8WTSUPBQQ3bJ3SCJREbMm9rfliAy_58Sw/s320/image2.png" width="320" /></a></div><div class="separator" style="clear: both; text-align: center;"><p style="text-align: left;">Knowing you can get IHostApplicationLifetime from the services collection is useful, but if you have local access to the WebApplicationinstance, you can access the same from the <a href="https://learn.microsoft.com/en-us/dotnet/api/microsoft.aspnetcore.builder.webapplication.lifetime?view=aspnetcore-6.0#microsoft-aspnetcore-builder-webapplication-lifetime" target="_blank">Lifetime property</a>. </p><div class="separator" style="clear: both; text-align: left;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjGOgI_P_L2rb0GDyPgd3kQMhLejf_7_M0IoqC2Uv-_29tH_OVNlPIicU1sbbZItihjCFdRiWuMi2cI9TDd99P09Y0aXzfnl8lychOHNMRmZaYeDckqEbipighT2Jd-nLwQBiVTn_pph0XE3iPfTdEcwUyHhkTYVVQLX4WjT5hMYEbkOqx6mR8/s572/img3.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="375" data-original-width="572" height="210" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjGOgI_P_L2rb0GDyPgd3kQMhLejf_7_M0IoqC2Uv-_29tH_OVNlPIicU1sbbZItihjCFdRiWuMi2cI9TDd99P09Y0aXzfnl8lychOHNMRmZaYeDckqEbipighT2Jd-nLwQBiVTn_pph0XE3iPfTdEcwUyHhkTYVVQLX4WjT5hMYEbkOqx6mR8/s320/img3.png" width="320" /></a></div><p style="text-align: left;">For a demo hosting and calling a <i>minimal </i>API from a single project - this is nice. But in the real world, access to the local instance of WebApplication is unlikely. In those cases, solve it with a retry policy. </p><p style="text-align: left;">Best of luck!</p></div></div>jerrynixonhttp://www.blogger.com/profile/06978720385628364065noreply@blogger.comtag:blogger.com,1999:blog-8789713.post-69273609084332912982022-01-31T16:48:00.001-07:002022-01-31T16:48:27.688-07:00Triple Edge Constraints in Graph DBs<p>What is an Edge? Good question. An Edge defines the relationship between two Nodes. A Node is a thing, noun, or concept – like <strong>Store</strong>. In my diagram below, the <strong>Wants</strong> Edge in between the <strong>Store</strong> and <strong>Product</strong> Nodes. You would write it as <font face="Courier New">Store–(Wants)->Product</font> and it means to define which <strong>Store</strong> <strong>Wants</strong> which <strong>Product</strong>. </p> <p>The puzzle here is the <strong>Must_Use</strong> Edge. In my diagram below, this Edge is between <strong>Store</strong> and <strong>Warehouse</strong> and it means to define which <strong>Warehouse</strong> a <strong>Store</strong> can use when ordering certain <strong>Products</strong>. This is special because it references three Nodes: <strong>Store</strong>, <strong>Warehouse</strong> and <strong>Product</strong>. To make this work, the <strong>Must_Use</strong> Edge must include a field referencing the relevant <strong>Product</strong> Id. </p> <p>Adding this value is easy, but it means the Edge rows multiply by the number of Products in the catalog – and with some businesses that can mean hundreds of thousands of products. It also introduces a kind of inferred relationship that doesn’t have a standard representation when drawing a Graph. In the diagram below, I indicate the special relationship in red. </p> <p><a href="https://drive.google.com/uc?id=1m7SCDRLxBhCJVB2zHGsWwE7Tx6XYIEcw"><img title="image" style="border: 0px currentcolor; display: inline; background-image: none;" border="0" alt="image" src="https://drive.google.com/uc?id=1x3WWL2aY2m8FrwiYt9-YTDY9kenqR8Uh" width="550" height="341" /></a></p> <a name='more'></a> <p><strong>How to maintain high performance with this pattern?</strong></p> <p>This is a worthwhile question because with so many more rows there is a potential impact. Here are the three things you can do to help:</p> <ol> <li>Add a Unique Clustered Index on <strong>Edge($from_id, $to_id)</strong></li> <li>Add an Unclustered Index on <strong>Edge(ProductId)</strong></li> <li>Add an Unclustered Index on <strong>Node(ProductId)</strong></li> </ol> <p>I want to say one quick thing about #1 in the list above, that is to add a Unique Clustered Index on the To/From columns of the Edge. Why do that? Developers might intuit that SQL Graph automatically adds this index on every Edge but it does not. It is an important Index to add to every single Edge, not just Edges in this unique scenario. Good tip!</p> <p>---</p> <h3><em>CODE SAMPLE. Here’s the </em><a href="https://gist.github.com/JerryNixon/c25183c65444a236a2e4a3690220091e"><em>Gist</em></a><em>. </em></h3> <p>---</p> <h4>Scenario</h4> <ol> <li>Every Store (wants) every Product </li> <li>Every Warehouse (Has) every Product </li> <li>Stores (Must_Use) certain Warehouses for certain Products.</li> </ol> <h4>Problem</h4> <ol> <li>A graph Edge only references two Nodes: from & to </li> <li>How can we constrain an Edge to a third Node (Product)</li> </ol> <h4>Solution</h4> <ol> <li>Add ProductId to Product Node </li> <li>Add ProductId to (Must_Use) Edge</li> </ol> <h4>Considerations</h4> <p>What if there are thousands of Stores, Hundreds of Warehouses, and Hundreds of Thousands of Products? The number of (Must_Use) Edge rows would be like # of Stores x # of Warehouses x # of Products. This could make the edge have millions of rows. With performance as a consideration, is this the only way? Answer: Yes, I think it is.</p> <p><a href="https://drive.google.com/uc?id=1wIpm9qAjz0YdKnm3dTLA5NAdWOipdHTM"><img title="image" style="border: 0px currentcolor; display: inline; background-image: none;" border="0" alt="image" src="https://drive.google.com/uc?id=1yS_HVt2j0JCtrmFuj0TB-8ZBvO-wkdDb" width="550" height="1031" /></a></p>jerrynixonhttp://www.blogger.com/profile/06978720385628364065noreply@blogger.comtag:blogger.com,1999:blog-8789713.post-8131453433721960712021-04-28T16:50:00.001-06:002021-04-28T16:50:15.633-06:00An Introduction to SQL Graph<p>Sometimes the easiest way to learn a new technology is to compare it to a technology you already know. Such is the case with Graph databases. When you hear about them or watch videos about them elsewhere they talk as if they can cure cancer and give you a foot massage all at the same time. </p> <a name='more'></a> <p>In an academic setting, graph databases can do some fun & esoteric things. But in the real world, where greenfield may never be on the menu, a hybrid RDBMS & graph makes far more sense. Letting the relational system do its thing while tapping into the value & capabilities of a graph in bite-sized chunks without any need for full adoption, big migrations, or system concessions.  </p> <p><strong>Getting started</strong></p> <p> <p>To that end, I have written a small sample that solves the same problem using relational tables (the part you probably already understand) and then graph tables using SQL graph. A kind of Rosetta Stone for graph databases in terms SQL developers can understand. <a href="https://drive.google.com/uc?id=1_B0Rmi3Hi9TSPlPP_ShPrngi3lzrRL58"><img title="image" style="border-width: 0px; display: inline; background-image: none;" border="0" alt="image" src="https://drive.google.com/uc?id=1iZrq2TiwVgiEiPDH1Dgr1dBSBS6gX7I6" width="550" height="289" /></a>The solution using tables.</p> <p><a href="https://drive.google.com/uc?id=15cnVGAIO9qJJjR7NaF_T8jDCh1CMUWOl"><img title="image" style="border-width: 0px; display: inline; background-image: none;" border="0" alt="image" src="https://drive.google.com/uc?id=1hr--7hzdVkdYRU6dVQxwo5qbReGgBLX8" width="550" height="284" /></a></p> <p>The solution using graph.</p> </p> <p><strong>What is the common question, you ask? </strong>It is to design a system which stores enough data on customers, products, sales, and recommendations to provide to a customer a recommendation of a new products. I know it seems simple, but a complicated sample sort of messes up the whole point of the exercise. </p> <p>Find the code here: <a href="https://gist.github.com/JerryNixon/d7052ef53feef964812bc83c206f107b">graph.ipynb (github.com)</a></p>jerrynixonhttp://www.blogger.com/profile/06978720385628364065noreply@blogger.comtag:blogger.com,1999:blog-8789713.post-42744177348465189042021-04-28T16:34:00.001-06:002021-04-28T16:34:20.888-06:00A list of online tools I use<p>Every developer has their list of tools. That list of things making me more productive. That list of things helping me remember, too. Today, I went through my list for my team & thought I would share. Who knows what my list will look like in another 3 or 4 years. Maybe no change at all. Who knows.</p> <a name='more'></a> <ol> <li>.NET tinkering <a href="https://dotnetfiddle.net/">https://dotnetfiddle.net/</a></li> <li>HTML/CSS/JS tinkering <a href="https://jsfiddle.net/">https://jsfiddle.net/</a></li> <li>TSQL tinkering <a href="http://sqlfiddle.com/">http://sqlfiddle.com/</a></li> <li>TSQL linting <a href="https://poorsql.com/">https://poorsql.com/</a></li> <li>Mermaid graphs <a href="https://mermaid-js.github.io/mermaid-live-editor">https://mermaid-js.github.io/mermaid-live-editor</a></li> <li>Snippets store <a href="https://gist.github.com">https://gist.github.com</a></li> <li>JWT decoder <a href="https://jwt.ms/">https://jwt.ms/</a></li> <li>Validate YAML <a href="https://freedevtools.net/yaml.html">https://freedevtools.net/yaml.html</a></li> <li>Beautify JSON <a href="https://jsonformatter.tool-kit.dev/">https://jsonformatter.tool-kit.dev/</a></li> <li>Beautify CSS <a href="https://www.cleancss.com/css-beautify/">https://www.cleancss.com/css-beautify/</a></li> <li>Regular expressions <a href="https://regex101.com/">https://regex101.com/</a></li> <li>Color tinkering <a href="https://color.cloudflare.design/">https://color.cloudflare.design/</a> & <a href="https://color.adobe.com/create/color-wheel">https://color.adobe.com/create/color-wheel</a></li> <li>Accessibility tester <a href="https://www.webaccessibility.com/">https://www.webaccessibility.com/</a></li> <li>Fake data generator <a href="https://lipsum.com/">https://lipsum.com/</a></li> <li>Image tinkering <a href="https://pixlr.com/x/">https://pixlr.com/x/</a></li> <li>CSS generator <a href="http://css3generator.com/">http://css3generator.com/</a></li> <li>Chart tinkering <a href="https://app.diagrams.net/">https://app.diagrams.net/</a></li> <li>Online brainstorming <a href="https://whiteboard.microsoft.com/">https://whiteboard.microsoft.com/</a></li> <li>Json mapping to classes <a href="https://json2csharp.com/">https://json2csharp.com/</a></li> <li>Azure icons <a href="https://iconcloud.design/browse/Azure%20Icons">https://iconcloud.design/browse/Azure%20Icons</a></li> <li>QR Code generator <a href="https://tools.fromdev.com/qr-code-generator.html">https://tools.fromdev.com/qr-code-generator.html</a></li> <li>Online distractions <a href="https://www.kobayashimaru.com/">https://www.kobayashimaru.com/</a> </li> </ol>jerrynixonhttp://www.blogger.com/profile/06978720385628364065noreply@blogger.comtag:blogger.com,1999:blog-8789713.post-85900179055380686072021-04-28T16:30:00.001-06:002021-04-28T16:30:13.287-06:00Utility scripts for SQL tables<p>The SQL Server sys.tables & sys.schemas tables are exceptionally handy to find & filter tables in the database. Quickly looping through a list of table commands to execute a delete, truncate, drop, update, disable constraint, enable constraint, or require data script is easy – just use a while loop, a cursor, or print the results to use in a larger script you are writing. Truth is, this little snippet helps you query for the tables, their schema and the boilerplate script syntax. I’ve used scripts just like this for years. </p> <p><a href="https://drive.google.com/uc?id=1_sRUFwV5O33gH7yucU488y9zpPfJCCa9"><img title="image" style="border: 0px currentcolor; display: inline; background-image: none;" border="0" alt="image" src="https://drive.google.com/uc?id=1VK8_1fERWdH6-k3Ayym-Ma0FXhDxTSoA" width="550" height="500" /></a></p> <p>Here it is on GitHub: <a href="https://gist.github.com/JerryNixon/ca4906f7f31972a5e6e2a43a63891dd0">link</a>. </p>jerrynixonhttp://www.blogger.com/profile/06978720385628364065noreply@blogger.comtag:blogger.com,1999:blog-8789713.post-1864199036966286272021-03-23T11:36:00.001-06:002021-03-23T11:36:15.658-06:00An Assert Schema for SQL Server<p>In C#, we use Assert to make a claim and to do a few utility operations. For example, we use Assert.Equal(one, two) to claim that one and two have the same values. If this is not true, Assert.Equal() throws an exception that is typically used by Unit Test runners to highlight failing tests. </p> <p>But in SQL Server, there is no Unit Test framework or runner. That doesn’t mean we can’t have similar behaviors to Assert in TSQL. We just have to write them ourselves. To that end, I have created a starter set of scripts to introduce Assert to SQL Server for database developers. </p> <p>You can find it here: <a href="https://gist.github.com/JerryNixon/22da61184b238dea5d38f0401b97a0da">An Assert Schema for SQL Server (github.com)</a></p> <a name='more'></a> <p> </p> <h4>EXEC Assert.Contain fragment, string, [message];</h4> <p>Use Contain to validate a string fragment is inside a larger string.</p> <ol> <li><code>fragment</code>: the string you want to find </li> <li><code>string</code>: the string you are searching in </li> <li><code>[message]</code>: (optional/default=null)</li> </ol> <p><strong>Syntax</strong></p> <pre><code>DECLARE @fragment VARCHAR(50) = 'Jerry';
DECLARE @string VARCHAR(50) = 'Jerry Nixon';
EXEC Assert.Contain @fragment, @string;
</code></pre>
<p><strong>Result</strong>
<br />An error is thrown if the fragment is not found.</p>
<hr />
<h4>EXEC Assert.Equal expected, actual, [message];</h4>
<p>Use Equal to validate two values are the same.</p>
<ol>
<li><code>expected</code>: the expected value </li>
<li><code>actual</code>: the actual value </li>
<li><code>message</code>: (optional/default=null)</li>
</ol>
<p><strong>Syntax</strong></p>
<pre><code>DECLARE @expected VARCHAR(50) = 'Jerry';
DECLARE @actual VARCHAR(50) = 'Jerry';
EXEC Assert.Equal @expected, @actual;
</code></pre>
<p><strong>Result</strong>
<br />An error is thrown if the two values are not Equal</p>
<hr />
<h4>SELECT Assert.Equals(expected, actual, message);</h4>
<p>Use Equals to validate two values are the same. Because it can be used in a SELECT, it returns ACTUAL.</p>
<ol>
<li><code>expected</code>: the expected value </li>
<li><code>actual</code>: the actual value </li>
<li><code>message</code>: (optional/default=null)</li>
</ol>
<p><strong>Syntax</strong></p>
<pre><code>SELECT Assert.Equals('Jerry', NAME_COLUMN, 'Name should equal Jerry') AS NAME_COLUMN
FROM USERS
</code></pre>
<p><strong>Result</strong>
<br />An error is thrown if the two values are not Equal.
<br />And Actual is returned if the two values are Equal.</p>
<hr />
<h4>EXEC Assert.NotEqual expected, actual, [message];</h4>
<p>Use NotEqual to validate two values are not t6he same.</p>
<ol>
<li><code>expected</code>: the expected value </li>
<li><code>actual</code>: the actual value </li>
<li><code>message</code>: (optional/default=null)</li>
</ol>
<p><strong>Syntax</strong></p>
<pre><code>DECLARE @expected VARCHAR(50) = 'Jerry';
DECLARE @actual VARCHAR(50) = 'Nixon';
EXEC Assert.NotEqual @expected, @actual;
</code></pre>
<p><strong>Result</strong>
<br />An error is thrown if the two values are Equal.</p>
<hr />
<h4>EXEC Assert.[Null] actual, [message];</h4>
<p>Use [Null] to validate a value is null. Note that [square brackets] are required since Null is a reserved word.</p>
<ol>
<li><code>actual</code>: the actual value that should be null </li>
<li><code>message</code>: (optional/default=null)</li>
</ol>
<p><strong>Syntax</strong></p>
<pre><code>DECLARE @actual VARCHAR(50) = NULL;
EXEC Assert.[Null] @actual;
</code></pre>
<p><strong>Result</strong>
<br />An error is thrown if the value is not null</p>
<hr />
<h4>EXEC Assert.NotNull actual, [message];</h4>
<p>Use NotNull to validate a value is not null.</p>
<ol>
<li><code>actual</code>: the actual value that should not be null </li>
<li><code>message</code>: (optional/default=null)</li>
</ol>
<p><strong>Syntax</strong></p>
<pre><code>DECLARE @actual VARCHAR(50) = 'Nixon';
EXEC Assert.NotNull @actual;
</code></pre>
<p><strong>Result</strong>
<br />An error is thrown if the value is null</p>
<hr />
<h4>EXEC Assert.Rows expected, [message];</h4>
<p>Use Rows to validate an operation impacts a certain number of rows.</p>
<ol>
<li><code>expected</code>: the expected number of rows returned </li>
<li><code>message</code>: (optional/default=null)</li>
</ol>
<p><strong>Syntax</strong></p>
<pre><code>SELECT * FROM TABLE
DECLARE @expected INT = 10;
EXEC Assert.Rows @expected;
</code></pre>
<p><strong>Result</strong>
<br />An error is thrown if the resulting rows do to equal the expected</p>
<hr />
<h4>EXEC Assert.Fail expected, actual, message, [number];</h4>
<p>Use Fail to manually cause a failure. Note that this is typically used by the other methods, internally.</p>
<ol>
<li><code>expected</code>: the expected value to report </li>
<li><code>actual</code>: the actual value to report </li>
<li><code>message</code>: the custom message to report </li>
<li><code>number</code>: (optional/default=50000)</li>
</ol>
<p><strong>Syntax</strong></p>
<pre><code>DECLARE @expected VARCHAR(50) = 'Jerry'
DECLARE @actual VARCHAR(50) = 'Nixon'
DECLARE @message VARCHAR(50) = 'Error Message'
EXEC Assert.Fail @expected, @actual, @message;
</code></pre>
<p><strong>Result</strong>
<br />An error is thrown. Every time.</p>
<hr />
<h4>EXEC Assert.Error [number], [contains], [message];</h4>
<p>Use Error to validate an error occurred with expected values.</p>
<ol>
<li><code>number</code>: (optional/default=do not test): the expected error number. </li>
<li><code>contains</code>: (optional/default=do not test): the expected error message fragment. </li>
<li><code>message</code>: (optional/default=null)</li>
</ol>
<p><strong>Syntax</strong></p>
<pre><code>BEGIN TRY
/* YOUR WORK */
END
BEGIN CATCH
DECLARE @number INT = 50000
DECLARE @contains VARCHAR(50) = 'DATA TYPE'
EXEC Assert.Error @number, @contains;
END
</code></pre>
<p><strong>Result</strong>
<br />An error is thrown if the current error context does not meet the criteria</p>
<hr />
<h4>EXEC Assert.[PrintLine] message, [withdate];</h4>
<p>Use PrintLine to simply print a message. Note that this prints with NOWAIT even when SQL server is actively processing.</p>
<ol>
<li><code>message</code>: the string to print/output </li>
<li><code>withdate</code>: (optional/default=true)</li>
</ol>
<p><strong>Syntax</strong></p>
<pre><code>DECLARE @message VARCHAR(50) = 'Jerry Nixon';
EXEC Assert.PrintLine @message;
</code></pre>
<p><strong>Result</strong>
<br />A string is written to console.</p>jerrynixonhttp://www.blogger.com/profile/06978720385628364065noreply@blogger.comtag:blogger.com,1999:blog-8789713.post-44415297890107990382019-03-16T16:30:00.001-06:002019-03-16T16:45:28.321-06:00A Kickstarter for features: It’s a Better kind of User Voice<div dir="ltr" style="text-align: left;" trbidi="on">
<br />
<div class="MsoNoSpacing">
For decades, I’ve watched users and developers long for
capabilities in Windows and .NET that never happen. Sites like Connect and User
Voice collect our ideas and votes <b>yet
backlogs rarely react</b>.</div>
<div class="MsoNoSpacing">
<o:p></o:p></div>
<div class="MsoNoSpacing">
<br /></div>
<div class="MsoNoSpacing">
I believe product teams often chase the next big feature,
forcing themselves to ignore <b style="mso-bidi-font-weight: normal;">small, love-creating
improvements or tweaks that would build tireless loyalty</b> from their user base.
<o:p></o:p></div>
<div class="MsoNoSpacing">
<br /></div>
<div class="MsoNoSpacing">
For this reason, I would like to propose a new idea. A
way to solicit, not feedback, but ideas from a user or developer community in a
way that gets results and creates wonder. </div>
<a name='more'></a><br />
<h2 style="text-align: left;">
What’s wrong with User Voice? </h2>
<div class="MsoNoSpacing">
<o:p></o:p></div>
<div class="MsoNoSpacing">
<b>This isn’t about
User Voice, per se.</b> The site’s fine. It’s about the reaching into a product
team and impacting their backlog. Giving great ideas a social momentum that gets
recognized as valuable.</div>
<div class="MsoNoSpacing">
<o:p></o:p></div>
<div class="MsoNoSpacing">
<br /></div>
<div class="MsoNoSpacing">
We know up-voting ideas for Visual Studio, .NET, Windows,
or anything else barely matters. I’m not being cynical but go look – the list of
outstanding ideas is astronomical. But, it’s reasonable. <o:p></o:p></div>
<div class="MsoNoSpacing">
<br /></div>
<div class="MsoNoSpacing">
<b style="mso-bidi-font-weight: normal;">Team capacity</b>.
There are only so many product managers and so many engineers on any team.
Their capacity to do anything has a real limit; asking for the moon is
sometimes simply impossible.<o:p></o:p></div>
<div class="MsoNoSpacing">
<br /></div>
<div class="MsoNoSpacing">
<b style="mso-bidi-font-weight: normal;">Team priorities</b>.
There are roadmaps follow and next versions to build. Sometimes the best ideas
simply don’t align with where a product is going; asking for THAT features just
doesn’t work.<o:p></o:p></div>
<div class="MsoNoSpacing">
<br /></div>
<div class="MsoNoSpacing">
<b style="mso-bidi-font-weight: normal;">Team turnover</b>.
There is velocity-crippling turnover to consider. People move on, change happens,
and the team might be rebuilding itself; asking for anything is crazy, just
staying afloat is job one. <o:p></o:p></div>
<div class="MsoNoSpacing">
<br /></div>
<div class="MsoNoSpacing">
<b style="mso-bidi-font-weight: normal;">Internal politics</b>.
There are many things far outside the control of a product team. Reorganizations,
changes in corporate priorities; asking for something might simply be
impossible, considering. <o:p></o:p></div>
<div class="MsoNoSpacing">
<br /></div>
<div class="MsoNoSpacing">
<b style="mso-bidi-font-weight: normal;">Market change</b>.
There’s a real need to survive. Sometimes companies like Microsoft over-correct
and create a brand-new problem; asking for something in this environment can be
a stalemate. <o:p></o:p></div>
<div class="MsoNoSpacing">
<br /></div>
<div class="MsoNoSpacing">
In the end, outside developers and users of a product are
important but are also a single voice in a chorus of influences pushing on the
priorities of a product team. That’s just reality.</div>
<h2 style="text-align: left;">
Side-effects</h2>
<div class="MsoNoSpacing">
<b style="mso-bidi-font-weight: normal;">The rise of open
source</b>, if you ask me, is, in part because of this. Developers frustrated with
expressing desires (to Microsoft) and not seeing an acceptable response, took
things into their own hands.<o:p></o:p></div>
<div class="MsoNoSpacing">
<br /></div>
<div class="MsoNoSpacing">
The rise of more-frequent product releases is another.
Product teams aching to deliver functionality to their community but hamstrung
by larger constraints found a workaround, for better or worse. <o:p></o:p></div>
<div class="MsoNoSpacing">
<br /></div>
<div class="MsoNoSpacing">
It’s also worth pointing out that, especially in
developer tooling, <b style="mso-bidi-font-weight: normal;">buckets of features
are released every quarter as a direct result of user feedback.</b> But nobody
is denying features are left on the table.<o:p></o:p></div>
<div class="MsoNoSpacing">
<br /></div>
<h2 style="text-align: left;">
Impacting priority</h2>
<div class="MsoNoSpacing">
We can’t change capacity. We can’t change reality. But we
can change priority – most of the time. This idea is rooted in a social contract
with Microsoft agreeing: <b>if the community does X, the team will do Y</b>.<o:p></o:p></div>
<div class="MsoNoSpacing">
<br /></div>
<div class="MsoNoSpacing">
<i>I assume you know what Kickstarter is. That side where
someone with an idea gets socially funded; a grass roots approach bypassing
traditional channels to get innovations and inventions realized. <o:p></o:p></i></div>
<div class="MsoNoSpacing">
<br /></div>
<div class="MsoNoSpacing">
Now imagine this: <b style="mso-bidi-font-weight: normal;">a
site like Kickstarter for features.</b> Where users or developers contribute to
the feature with real money, pushing toward a target that, if reached, the
product team agrees to deliver.<o:p></o:p></div>
<div class="MsoNoSpacing">
<br /></div>
<div class="MsoNoSpacing">
<b style="mso-bidi-font-weight: normal;">Where does the
money go?</b> Not to Microsoft. Every feature is a fund-raiser for a charity. <u>If
we raise $100,000 for breast cancer research, we’ll add a Purple Theme to Visual
Studio.</u><b style="mso-bidi-font-weight: normal;"> </b>See what I mean?<o:p></o:p></div>
<div class="MsoNoSpacing">
<br /></div>
<div class="MsoNoSpacing">
Here’s another one: <u>We’ll make Windows Forms work on Macs
if we raise $250,000 for Doctors without Borders.</u> <span style="mso-spacerun: yes;"> </span>Teams can target timely charities, too. The
point is, it’s a social agreement to do it. <o:p></o:p></div>
<div class="MsoNoSpacing">
<br /></div>
<div class="MsoNoSpacing">
Why would a product team do this? Because corporate
citizenship is real. Because diversity and inclusiveness matter to Microsoft. <b style="mso-bidi-font-weight: normal;">Because, doing something good is a true
motivator. </b><o:p></o:p></div>
<div class="MsoNoSpacing">
<br /></div>
<div class="MsoNoSpacing">
How much would a developer have to contribute? That’s the
beauty of this. If you contribute a single dollar, you’re a contributor. <b style="mso-bidi-font-weight: normal;">Visual Studio has nearly 5 million users a
month.</b> This is possible. <o:p></o:p></div>
<div class="MsoNoSpacing">
<br /></div>
<div class="MsoNoSpacing">
Let’s all agree on one more thing. Software developers
are not the lowest paid people on the planet. <b style="mso-bidi-font-weight: normal;">And why not do some good instead of complaining on Twitter?</b> It’s
twice the reward.<o:p></o:p></div>
<div class="MsoNoSpacing">
<br /></div>
<div class="MsoNoSpacing">
Well, do you think it could work?</div>
</div>
jerrynixonhttp://www.blogger.com/profile/06978720385628364065noreply@blogger.comtag:blogger.com,1999:blog-8789713.post-35346295732211574792019-03-13T15:55:00.001-06:002020-05-14T08:26:51.148-06:00Developer Evangelism’s Obvious Secret<div dir="ltr" style="text-align: left;" trbidi="on">
Hi. So, here’s another entry from my notes as an Evangelist. So many snippets I wrote to myself, translated here to blog articles helping, I hope, anyone finding themselves where I was. This one is the role of empathy. Perhaps it is not as obvious as you assume? <br />
For the sake of argument, and I think that’s a fine reason, let’s consider <em>Developer Evangelist</em>, Technical Evangelist, Developer Advocate, and any other variation of a Developer Relations title to be the same. For the most part, they are. For me, here, I will use Developer Evangelist because that’s the title I employed for just under a decade at Microsoft. And, I like it.
<br />
<a name='more'></a><h1>
What is an evangelist?</h1>
Let’s start with a simple question with a complicated answer: <em>what is a Developer Evangelist</em>? Hopefully you start with “brand ambassador” where like an edge-of-the-empire garrison represents the throne and is the throne because the king or queen will never travel this far from England, you are the brand. <br />
<br />
If you work as a Developer Evangelist for Acme, your role is to represent Acme to developers who will never otherwise connect with Acme. For this reason, being “on message” is critical. For this reason, the theater of evangelism is important and playing your role is imperative. You are not you, in a way. <br />
<br />
This is the foundation, but this is not the most important part. Developing rapport and influence with a developer or developer community requires that you connect in a way different than a walking blog. The hearts and minds of developers are your endgame; strategies to reach that goal are what matter.<br />
<h1>
Give it all away </h1>
The first tool in a Developer Evangelist’s toolbox is swag. I have a love/hate relationship with swag. On the one hand, I love to see an audience’s eyes brighten when you give them something that has little value, but somehow means a lot to them, individually. My favorite swag is baseball hats. <br />
<img height="334" src="https://news.microsoft.com/wp-content/uploads/2013/02/02-09SurfaceProGiveaway_Web.jpg" width="500" /><br />
The problem, of course, with swag is that it reaches the pleasure centers of a developer’s brain but doesn’t establish a long-term connection. Give me your thing and I go to the next guy for his thing. It’s over quite quickly, even if you make it complicated with surveys or games to play. <br />
If I have my way, I give swag to developers who are already my friends, already in my camp, already onboard. A sort of reward-swag, and not a bribe-swag. You’ll see the difference immediately in gratitude, plus your swag might even get some wear before it finds a trashcan or thrift shop. <br />
<h1>
The three other things</h1>
If swag doesn’t reach the hearts and minds of developers, what’s left in a Developer Evangelist’s toolbox? We have three things: Information, Validation, and Prescription. These are the things that really impact the behavior of a developer. Let me explain. <br />
<b>Information. </b>It’s only getting more difficult to keep up with changes in our industry. A Developer Evangelist has inside information unique and difficult to otherwise get. Insofar as information, presenting value to a developer is giving them something otherwise difficult to find or coalesce. <br />
This, by the way, is a key way to get your sessions accepted at conferences. Bringing unique or generally obviated information to an audience is compelling to attendees and conference coordinators. There’s an art to creating a session title but bringing new or unusual information is a good starting place.<br />
<b>Validation</b>. Developer and architects are suspicious of their own decisions. As a trusted resource, with more information than any developer investigating your product or technology, you have an edge. Providing validation to a developer’s work affirms them and makes them love you.<br />
When you come across a developer doing it all wrong, you’ll want to balance reproach with respect. Tomorrow you leave, but they stay in that job, with that manager, working for a raise to pay their bills. You want to advocate for the developer; don’t feed their imposter syndrome. They’ll love you for it.<br />
It’s worth following-up on this idea that as a Developer Evangelist, you have a sort of responsibility to ensure customers are implementing your product or technology correctly and on a path for success. First, earn the right to speak to a developer; then use that right to guide and correct cautiously. <br />
<b>Prescription</b>. Most developers are willing to figure things out. That said, most developers love to have prescriptive guidance that side-steps the “dumb tax” they might otherwise pay in the process. Your value to these audiences is an explanation of how to get started and where to go next.<br />
This type of information is ofttimes presented in case studies of other customers, sometimes we use phantom customers to get the point across. We can also get prescriptive guidance in developers’ hands through tutorials, technical white papers or personal odysseys of discovery we document.<br />
<h1>
Empathy</h1>
This is where empathy comes in. <strong>Understanding where a developer is on this scale is difficult. </strong>A kind of <a href="https://en.wikipedia.org/wiki/Cold_reading">cold reading</a> is an important part of personal interaction, and even reading the audience from on stage. It’s a mind-meld at scale. Changing your tone and intent on the fly is an important ingredient to successful Developer Evangelism. <br />
Remember, empathy is your ability to understand or feel the emotional state of another person. Sympathy, on the other hand, is responding to another person’s emotional state. I am not suggesting a Developer Evangelist needs sympathy (though it does not hurt) but that empathy is paramount. <br />
One of the most powerful ways to develop empathy of any type of developer is to live their life. It’s walking a mile in their shoes. If you wonder what a developer experiences when trying your product, try doing the process from scratch and documenting every single step along the way. It’s illuminating. <br />
Another important corollary could be inclusive design. To really understand how users feel when they are using your application without the use of their eyes, try to use your application with your monitor turned off (or covered) and see how you fair. Again, like above, it’s illuminating. <br />
<h1>
The magic</h1>
Communicating empathy is like magic. When you say things like “I know what you mean, the portal tells you to do it this way, but it never works, does it?” You are not betraying the good name of your product, you are empathizing with your audience. It’s the sort of warm rain to which everyone relates. <br />
<strong>It’s important to mention here that a Developer Evangelist can easily betray the good name of their product.</strong> Things like “Yeah, it’s not that stable” or “I’m sick of all these bugs, just like you” can undermine confidence or even the hope of confidence in a product. You might feel like you are being honest and genuine with your audience, but you are laying a foundation of distrust. <br />
Here’s the take-away. Most developers are struggling. When you hear yourself thinking, “It’s not that hard” or “Just use the docs” then you might be falling into the same trap Stack Overflow moderators do. You are forgetting that every developer is in a different place and your job is not to prod them to work harder, but to encourage toward hope and help their lives, today, be better and easier. <br />
Find ways to look at developers with empathy; a compassion that lets you be willing to talk slower, present 101 instead of 401 sessions, re-explain the very concept you have already explained a thousand times before, and look forward to their success, not yours. <br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br /></div>
jerrynixonhttp://www.blogger.com/profile/06978720385628364065noreply@blogger.comtag:blogger.com,1999:blog-8789713.post-68691744643406222232019-03-04T14:57:00.000-07:002019-03-04T15:30:51.530-07:00Three Reasons for Developer Evangelists to Engage<div style="text-align: left;" dir="ltr" trbidi="on">
<div class="MsoNoSpacing">
<img align="right" style="float: right; display: inline;" src="https://lh3.googleusercontent.com/Nad3KpALB3Uc6fvdP2I4cLTTIMq4WAyKwSAVcxEVt73-cPBBt_4EQLdl-RB7Jj12oUECSWsAQuDbq1UhSuOcFD083ZgWeyQEaCShyV8PPzOzvIZKoPF0_4Y6bwr5TxjNE2gSmNAsft2clqu4cMkMTxvS_px1PbcQsqLwonaQ12jpa_qj1OzJCWvVCZSHuyJRuIGScS_N3xZeONChNwIUWCtGKEhfuCxtsrKpALNsFo_RyBaUSp01yGmnCHGbXR4FmY0Q-oxUJoEY49YZIIWuXVBJAj4ZUB9Y-R13mTWWQsrDwp5u59I5ft0_pmb-Yke3CCOD8yXaWWrEAAGp4QSYTC7cUXLrDhfE5gI3UYg9eoEFjR_LJefJhOJa9YXe2t8tYyx_KN1uK2hwX3wa-cPtiQEx68dA27uQnaNSAZitR2ZdaYuYij06u5K7ob7QTF8Sx_bEGR08NOtLmRDv63WLYtr8OzjY69sRmyisFJ1I5ED07xw8sZ3OvgH7cg5jW6bx13FobcBfv-E9TRboHqi8MZ1hiPHNV0zkxJRPRt7O12iuL3cNtaB1xeV8RcXuSoISjN3WIdy_CP96x84bYHC0JEg5IiXA4QIgWVKgmucFE_GTgqnvoXz-rJz6rrunBnfu6srkp7mIsU2VNehpLzyK-zABy7dhrEqHZgs0nkkzP6s7uelyHVzEYDjbWJ-YWPWLyPuGutZbD3qkndcOLZY7fdARjQ=w300-h200-no"></div></div>
<div style="text-align: left;" dir="ltr" trbidi="on"><div class="MsoNoSpacing">I would like to talk about the reasons for a Developer
Evangelist to engage an audience. We already understand the three ways we can
engage: online, personal and onstage. </div>
<p class="tr_bq">
As a reminder, online engagement has the <i>greatest reach
</i>but the <i>least impact</i>, personal engagement has the <i>greatest impact </i>but the <i>least
reach</i>, and onstage engagement is a combination of the two with <i>varying results
</i>depending on skill, style, and approach. </p>
<div class="MsoNoSpacing">
<o:p></o:p></div>
<div class="MsoNoSpacing">
But when as you prepare your talk, ask yourself why: why
are you engaging in the first place. As you are driving to a conference or meetup
ask yourself why: why are you engaging in the first place? I would assert there
are three reasons for Developer Evangelism engagement.</div>
<a name="more"><a name='more'></a></a><br>
<div class="MsoNoSpacing">
<o:p></o:p></div>
<div class="MsoNoSpacing">
When it comes to persuasion or public speaking there is
only one reason for engagement. Developer Evangelism is a specialized
engagement strategy using persuasion or public speaking as a vehicle. Where
public speaking sees changed behavior as its goal, Developer Evangelism is more
nuanced.</div>
<div class="MsoNoSpacing"><br></div>
<h3 style="text-align: left;">
Here's the list</h3>
<div class="MsoNoSpacing">
It is fine to over-simplify at this point. Developer
Evangelism engage audiences to either 1) <u>introduce</u>, 2) <u>educate</u>, or 3) <u>inspire</u>. It
is not practical to approach any engagement with the goal of accomplishing all
three objectives. It is, however, reasonable to span more than one with some
planning. <o:p></o:p></div>
<div class="MsoNoSpacing"><br></div>
<div class="MsoNoSpacing">
<b style="mso-bidi-font-weight: normal;">Introduce.</b> One
of the most common deliverables of Developer Evangelism is to get the word out.
Companies with new products rely on these boots-on-the-ground to bring
awareness of those products to the correct communities. This is where breath matters,
and depth doesn’t. <o:p></o:p></div>
<div class="MsoNoSpacing"><br></div>
<div class="MsoNoSpacing">
In this phase the assumption is that most of your
audience has no idea of what you are about to say. The topics are targeted, simple,
with outcomes that are measured by interest, awareness, and possibly
registration. This can mean hard work, a lot of travel, and a massive
investment online. <o:p></o:p></div>
<div class="MsoNoSpacing"><br></div>
<div class="MsoNoSpacing">
On the whole, this is a banal use case for a Developer
Evangelism team. This approach often indicates short-sighted leadership chasing
metrics that, generally, are changing or artificial or unimportant. It’s an
okay place to start, but no team should consider this their destination, just
warming the engines. <span style="mso-spacerun: yes;"> </span><o:p></o:p></div>
<div class="MsoNoSpacing"><br></div>
<div class="MsoNoSpacing">
<b style="mso-bidi-font-weight: normal;">Educate.</b> Another
common deliverable of Developer Evangelism is spreading understanding. The
effort applied in this pillar is a direct reflection to the quality of
available documentation. In leu of excellent examples, tutorials and docs,
Developer Evangelism fills the gaps with education-oriented content.<o:p></o:p></div>
<div class="MsoNoSpacing"><br></div>
<div class="MsoNoSpacing">
The biggest problem with this aspect of Developer
Evangelism is that education is time-consuming, mundane, and distracting from
bigger, better strategies. It usually indicates the types of articles and
sessions requiring considerable preparation yet viewed by a limited few. <o:p></o:p></div>
<div class="MsoNoSpacing"><br></div>
<div class="MsoNoSpacing">
Developer Evangelists are overqualified to impact the
effectiveness of documentation. To that end, their involvement is very
important. They are not always the best technical writers or tutorial authors,
but they can be great. Still, the goal is to escape this strategy quickly. Get
it over with. <span style="mso-spacerun: yes;"> </span><o:p></o:p></div>
<div class="MsoNoSpacing"><br></div>
<div class="MsoNoSpacing">
<b style="mso-bidi-font-weight: normal;">Inspire.</b> The
highest form of Developer Evangelism is to present developers with a prototype
of what they could be like later in their career, or what they could be later
in a project’s cycle. Inspiration says, “I understand where you are” and challenges
developers with “can you imagine where you could be”?<o:p></o:p></div>
<div class="MsoNoSpacing"><br></div>
<div class="MsoNoSpacing">
These engagements span technologies, products, and
communities. They are relevant because they speak to the “why?” of a concept
before speaking to the “how?” of the same. It elevates a developer from
technical leadership to thought leadership, landing the Evangelist’s message as
a secondary win.<o:p></o:p></div>
<div class="MsoNoSpacing"><br></div>
<div class="MsoNoSpacing">
<b style="mso-bidi-font-weight: normal;">What do I mean?</b>
This is amazingly simple, yet illusive. Developer Evangelism is often explained
as recognizing where a developer is in their personal journey, meeting them there
and helping them succeed. Anyone can see this is noble, but this is also a very
small, shallow vision to cast. <o:p></o:p></div>
<div class="MsoNoSpacing"><br></div>
<div class="MsoNoSpacing">
As a Developer Evangelist, should you limit yourself to attaching
to a developer, you greatly confound your opportunity to succeed. We want to
understand where developers are only so we can go talk with them, but why we
talk to them is totally different. We talk to them to change their journey. <o:p></o:p></div>
<div class="MsoNoSpacing"><br></div>
<div class="MsoNoSpacing">
<b style="mso-bidi-font-weight: normal;">Inspiration is the
power to cast a vision into someone else’s life.</b> Yes, life. My goal is to
change your college major. My goal is to change your career goals. My goal is
to change your behavior and habits. That is, unless you and I are already
aligned – then my goal is to simply encourage you where you are. <o:p></o:p></div>
<div class="MsoNoSpacing"><br></div>
<div class="MsoNoSpacing">
Novice Developer Evangelists chase “awareness.” Great
Developer Evangelists are hamstrung by insufficient documentation. But when we
stop with “Hello world”, when we stop teaching class, we can start challenging developers
to be more. No Developer Evangelist fights for attention in that world. <o:p></o:p></div>
<div class="MsoNoSpacing"><br></div>
<div class="MsoNoSpacing">
<b style="mso-bidi-font-weight: normal;">How do you get
there? It’s easy. </b>Stop and ask yourself why you are about to engage. Is it
because you are chasing awareness? Because awareness isn’t important to the
developer. Is it because you are trying to teach an approach? Developers have
libraries of blogs for that. You need to refine your intent. <o:p></o:p></div>
<div class="MsoNoSpacing"><br></div>
<div class="MsoNoSpacing">
<i style="mso-bidi-font-style: normal;">You must find goals
that matter to developers without making yourself subject to their tactical
needs.<o:p></o:p></i></div>
<div class="MsoNoSpacing"><br></div>
<div class="MsoNoSpacing">
Engage to change. Engage to improve. Engage to inspire;
and, inspiration starts with vision-casting. The ability to paint a picture of something
that isn’t, but something that could be, and to challenge someone in a
realistic way to push toward that vision, that shared vision you created. <o:p></o:p></div>
<div class="MsoNoSpacing"><br></div>
<div class="MsoNoSpacing">
Let developers reframe your vision as theirs. Then show
them your tools that help them achieve that.<o:p></o:p></div>
<div class="MsoNoSpacing"><br></div>
<div class="MsoNoSpacing">
<b>Intentional engagement is powerful</b> and, in the end,
everyone wins. Give them a fish, teach them to fish, or show them a picture of
a fishing boat and inspire them to learn sailing and seafaring – don’t stop
with today when you should be showing them tomorrow. <o:p></o:p></div>
<div class="MsoNoSpacing"><br></div>
<div class="MsoNoSpacing">
Best of luck.</div>
</div>jerrynixonhttp://www.blogger.com/profile/06978720385628364065noreply@blogger.comtag:blogger.com,1999:blog-8789713.post-34294565357566674522019-01-01T13:34:00.001-07:002019-01-03T10:00:30.629-07:00Some goals for 2019<div style="text-align: left;" dir="ltr" trbidi="on">
<a href="https://lh3.googleusercontent.com/-utvcuMCRWPk/XCvYrlpkzDI/AAAAAAAARUU/JB-IK5k5BeMzTx2TunYSOMBsS9cbM3H9QCHMYCw/s1600-h/image%255B74%255D"><img width="320" height="226" title="image" align="right" style="margin: 0px 0px 10px 20px; border-image: none; float: right; display: inline; background-image: none;" alt="image" src="https://lh3.googleusercontent.com/-X1X-TcyjWWk/XCvYtLGPhTI/AAAAAAAARUY/Fy4mPPwfTEYcd0t-A9u0QQQUoiWiVbYvACHMYCw/image_thumb%255B58%255D?imgmax=800" border="0"></a>Hi. Today is the first day of 2019; I have a few goals for the coming year I will codify here so I can look back and see how I did. This is not a list for you, it’s for me. That said, I am satisfied for my list to influence your list, should it.<br><br>
</div><div style="text-align: left;" dir="ltr" trbidi="on">I have some big things afoot in my life and should waters stay smooth, these goals are both attainable and what I want. I should also point out <strong>this year’s goals resemble last year’s goals</strong>. I am certainly a creature of habit. Some of last year’s goals were reached. Some are carrying over. Some, however, always make my list in one form or another.
</div><a name='more'></a><div style="text-align: left;" dir="ltr" trbidi="on"><br>
<a name="more"></a></div><h3 style="text-align: left;" dir="ltr" trbidi="on">
<br>1. Re-watch Battlestar Galactica 2004</h3><div style="text-align: left;" dir="ltr" trbidi="on">
<img width="200" height="160" align="left" style="margin: 0px 0px 40px; float: left; display: inline;" alt="See the source image" src="http://pmctvline2.files.wordpress.com/2011/03/thelfer_jcallis_300110304081349.jpg">I am starting with a goal I have been wanting to do and likely will, regardless. Previously, I binge-watched the series with this rule: <strong>I can only watch the show if I am on my treadmill</strong>. I calculated nearly 400 miles by the finalé. I have forgotten the B storylines and should relish in, what I think is science fiction’s high-water mark. <strong>Star Trek is a wonderful universe</strong>, but Battlestar Galactica 2004 is the finest show science fiction fans have been given.<br><br>
</div><h3 style="text-align: left;" dir="ltr" trbidi="on">
2. Read the seven Harry Potter books</h3><div style="text-align: left;" dir="ltr" trbidi="on">
<img width="200" height="155" align="left" style="margin: 0px 0px 40px; float: left; display: inline;" alt="See the source image" src="http://www.theyoungfolks.com/wp-content/uploads/2012/02/harry-potter-books.jpg">It might seem impossible, but I have neither read the books nor seen the movies. It’s just one of those things. It’s been my intention to do both for some time; if for no other reason then to get the pop culture references that certainly go over my head today. So many friends adore them, I am surprised I have managed to wait this long. We’ll see if I get my own wand and plan a pilgrimage to Harry Potter world at Universal.<br><br>
</div><h3 style="text-align: left;" dir="ltr" trbidi="on">
3. Write twelve blog articles</h3><div style="text-align: left;" dir="ltr" trbidi="on">
<a href="https://lh3.googleusercontent.com/-NKCqXn9qu9Q/XCvYuXPEd6I/AAAAAAAARUc/jazoUgxZ6DYiu7DhbYom9IMTEts6sVzDwCHMYCw/s1600-h/image%255B4%255D"><img width="200" height="129" title="image" align="left" style="margin: 0px 0px 40px; border: 0px currentcolor; border-image: none; float: left; display: inline; background-image: none;" alt="image" src="https://lh3.googleusercontent.com/-6spDUXhqkSQ/XCvYu-es2RI/AAAAAAAARUg/hglgjFB9rPMj0Z0pxohn7A-mKCdHYCabQCHMYCw/image_thumb%255B2%255D?imgmax=800" border="0"></a>Once again, I am looking for attainable goals – after this article, I only need eleven more. <strong>It aligns with one article a month</strong>, and it’s more about writing and expression than anything else. Don’t expect only code walk-through articles, either. Why blogging has been declining is a matter of debate. I know mine has. But it’s great, helping me remember what I discover. I’m pleased to turn this back on.<br><br>
</div><h3 style="text-align: left;" dir="ltr" trbidi="on">
4. Pay for what I Torrent </h3><div style="text-align: left;" dir="ltr" trbidi="on">
<a href="https://lh3.googleusercontent.com/-FXDRAufGYH8/XCvYzG-gguI/AAAAAAAARUk/qpnBKYH2TMMl6whAA4QJd9Ecg7ZMM63EwCHMYCw/s1600-h/image%255B12%255D"><img width="200" height="165" title="image" align="left" style="border: 0px currentcolor; border-image: none; float: left; display: inline; background-image: none;" alt="image" src="https://lh3.googleusercontent.com/-PXCxE1GNd7s/XCvYzyOjEqI/AAAAAAAARUo/GW2uDxPSTmMjSjyhV0r7lyj5fdGuMT3XgCHMYCw/image_thumb%255B6%255D?imgmax=800" border="0"></a>We’re treading on an ethical issue for me. <strong>There are times when a Torrent of a movie or television show is not wrong. </strong>Not to me. For example, Star Trek Discovery launched only through CBS All Access. I signed up. But the CBS service and app were so bad, I had to torrent episodes to watch them without buffering. What did I do that was wrong? Nothing. Not to me.<br>
<br>
When I Torrent movies, for similar technical reasons, I turn around and rent them (later) from Microsoft Movies or Amazon Video. I’ll Torrent Netflix movies just the same, but I subscribe. <strong>Is it weird to Torrent movies and still pay for them?</strong> No. Not to me. There are two roads: a low road and a high road. This goal is less something I want to do in 2019 and more something I want to keep doing in 2019.<br><br>
</div><h3 style="text-align: left;" dir="ltr" trbidi="on">
5. Write the "Difference Between" draft</h3><div style="text-align: left;" dir="ltr" trbidi="on">
<a href="https://lh3.googleusercontent.com/-m-yTbrmgl1I/XCvY02bLb_I/AAAAAAAARUs/SP6kEHKXiIMJ1gZMY8DMVGoS7U9De5bjQCHMYCw/s1600-h/image%255B15%255D"><img width="200" height="159" title="image" align="left" style="margin: 0px 0px 40px; border: 0px currentcolor; border-image: none; float: left; display: inline; background-image: none;" alt="image" src="https://lh3.googleusercontent.com/-Hq8c3xRnKZE/XCvY15q2oZI/AAAAAAAARUw/Gt4g5K5r6NELg1PnsPT_RNyv9FqJDvn6ACHMYCw/image_thumb%255B7%255D?imgmax=800" border="0"></a>I’ve wanted to write a book for decades. So many novel ideas later, I’ve never written more than an outline and a few chapters. Difference Between is my latest, but <strong>it’s not a novel</strong>; it’s an etymology book addressing terms regularly misused in writing and speech. For example, Fate & Destiny or Hard & Difficult – terms we treat as synonyms, but they are not.<br>
<br>
The draft will be difficult, not hard. ;-)<br><br>
</div><h3 style="text-align: left;" dir="ltr" trbidi="on">
6. Publish my Star Trek Dreams Alexa skill</h3><div style="text-align: left;" dir="ltr" trbidi="on">
<a href="https://lh3.googleusercontent.com/-oykBFmyl420/XCzoO6DI2FI/AAAAAAAARWk/wqd-JNHGHFgerSFzWL3d7r9ZluyF4NIKACHMYCw/s1600-h/image19%255B1%255D"><img width="200" height="176" title="image" align="left" style="margin: 0px 0px 40px; border: 0px currentcolor; border-image: none; float: left; display: inline; background-image: none;" alt="image" src="https://lh3.googleusercontent.com/-7G-q2h66HbU/XCzoQXymnjI/AAAAAAAARWo/1qmMTWsth8o7lFiSrR22Bi381aWOFRgRQCHMYCw/image19_thumb?imgmax=800" border="0"></a>White noise is a staple at the Nixon house. My kids sleep to it, as do my wife and me. We don’t live near a highway, a train track, an airport, or a draw bridge. We live in the mountains – it is blisteringly quiet and white noise helps us sleep through strong winds or woodpeckers drilling into the siding. <strong>Star Trek Dreams</strong> is white noise, Star Trek-style. Version one is simply the TNG warp core gently beating all night. It's really for me. I see that.<br><br></div>
<h3 style="text-align: left;" dir="ltr" trbidi="on">
7. Read 48 books</h3><div style="text-align: left;" dir="ltr" trbidi="on"><strong>
</strong><a href="https://lh3.googleusercontent.com/-ziptDB6M44c/XC4_hZJnijI/AAAAAAAARXw/xMNzrQKHnJ83VwieG-47rpgktiuV3AazgCHMYCw/s1600-h/image24"><strong></strong></a><strong><a href="https://lh3.googleusercontent.com/-ENbMmlyaD1Q/XC4_rJALyZI/AAAAAAAARX0/vfLers6aA6Y9SugFHzALV1v12ZjoQyH5ACHMYCw/s1600-h/image221"><img width="200" height="172" title="image" align="left" style="margin: 0px 0px 40px; border: 0px currentcolor; border-image: none; float: left; display: inline; background-image: none;" alt="image" src="https://lh3.googleusercontent.com/-u1iYYNgXTJw/XCzoaDqnNbI/AAAAAAAARWw/7_hj2z2gqwc5ZVJ_0XxK16YAZFUJWOCgACHMYCw/image22_thumb?imgmax=800" border="0"></a></strong><strong>That’s four a month.</strong> It should be easy. My Harry Potter goal checks off seven. I love reading. Audio books are an easy way to shorten a long flight or drive. I love underlining in books and just holding them. I like philosophy books but not self-help; I like memoirs but not biographies; I love post-apocalyptic but not horror; I like science-fiction but not fantasy. And, I can tolerate history. </div><div style="text-align: left;" dir="ltr" trbidi="on"><br></div><div style="text-align: left;" dir="ltr" trbidi="on">I’m not all that picky. Not really.<br><br>
</div><h4 style="text-align: left;" dir="ltr" trbidi="on">
Here is my reading list from November and December 2018:<br> </h4><div style="text-align: left;" dir="ltr" trbidi="on">
<a href="https://lh3.googleusercontent.com/-vkHpMnohlOs/XCvZIxOn0II/AAAAAAAARVU/YFg6sfl8FuIXMbXWwY8TAHhVdPUNpyNGACHMYCw/s1600-h/image%255B36%255D"><img width="150" height="225" title="image" align="right" style="margin: 0px 0px 40px; border: 0px currentcolor; border-image: none; float: right; display: inline; background-image: none;" alt="image" src="https://lh3.googleusercontent.com/-80wU01R638M/XCvZKCYx4BI/AAAAAAAARVY/Y8WAck59kGQ5hKGko2M2XxuGy7vwC8NYQCHMYCw/image_thumb%255B16%255D?imgmax=800" border="0"></a><b>One Year After </b>& The Last Man by William R. Forstchen. These are the second & third books in the One Second After series. They started my ongoing love for post-apocalyptic novels years ago. There are no zombies. This is about how society survives without the internet, cell phones, and electricity.<br>
<br>
<b>Master of Formalities </b>by Scott Meyer. This galactic-scale science fiction novel follows the odd events around a century-old cold war between feuding kingdoms. It’s very long, but quite creative. It’s a wonderful treatment around the subtle use of language to control those around you.<br>
<br>
<b>God is the Gospel </b>by John Piper. Books challenging contemporary norms are my cup of tea. This book asks the question: “Could you be happy in heaven if Christ were not there?” It’s heavy. I stop about every chapter and just think about it a little. That’s what I like. Having to think.<br>
<br>
<a href="https://lh3.googleusercontent.com/-OgOiVjcfxtg/XCvZMDxJRyI/AAAAAAAARVc/nyIod7mAgUI1siPad-LyXVdeEolWi4SfQCHMYCw/s1600-h/image%255B34%255D"><img width="150" height="233" title="image" align="right" style="margin: 0px 0px 40px; border: 0px currentcolor; border-image: none; float: right; display: inline; background-image: none;" alt="image" src="https://lh3.googleusercontent.com/-EAHYzr8YJIU/XCvZM5rEljI/AAAAAAAARVg/X2tdOl5LeuosTzNaSvAGVkkoY-QDYNPTQCHMYCw/image_thumb%255B14%255D?imgmax=800" border="0"></a><b>You are not so smart </b>by David McRaney. This book is a lot like Do Gentlemen really prefer blonds by Jena Pincott. They are fascinating evolutionary biology studies. They make for interesting conversation. I also think these books give me an advantage when dealing with people. It almost feels like cheating.<br>
<br>
<b>The Dispatcher </b>by John Scalzi. This audio book was narrated by Zachary Quinto, who I like. In the future, inexplicably, anyone intentionally killed wakes up fine in their home. The Dispatcher is responsible to intentionally kill anyone dying any other way – like in surgery. It’s a short story. It was weird. I liked it.<br>
<br>
<b>Neverwhere </b>by Neil Gaiman. This is a fantasy book. I hate fantasy. This florid novel fell into my stack of books, so I read it anyway; I found myself surprised at how interesting and imaginative the story was. It basically followed the enigmatic, secret world under London & invisible to us normal mortals.<br>
<br>
<a href="https://lh3.googleusercontent.com/-hBdRPdD1LBw/XCvZRMkO3yI/AAAAAAAARVk/9cHf2wCSa24QHe_MraSJIH8awJKdGSaogCHMYCw/s1600-h/image%255B35%255D"><img width="150" height="229" title="image" align="right" style="margin: 0px 0px 40px; border: 0px currentcolor; border-image: none; float: right; display: inline; background-image: none;" alt="image" src="https://lh3.googleusercontent.com/-fh-hS_cvUxc/XCvZSbeVptI/AAAAAAAARVo/iGL6N8vZCQI81TTO5BS87dhTYYEEXZc0QCHMYCw/image_thumb%255B15%255D?imgmax=800" border="0"></a><b>The Long Haul </b>by Finn Murphy. This might be the best book I read in 2018. It follows the life story of a trucker whose thoughtful prose massively educated me on this opaque field with hilarious anecdotes. I still talk about this book all the time, and constantly looked forward to reading the next chapter.<br>
<br>
<b>Love Does </b>by Bob Goff. My wife read this book a few years back, so I felt I should, too. I am glad I did. It iterates the funny mishaps of a guy who retrospectively finds the meaning he couldn’t see at the time. It’s difficult to believe this many crazy things can happen to one person – and he would still be alive.<br>
<br>
<b>The Sherlockian </b>by Graham Moore. This blends two stories into one: one is a story from the life of Arthur Conan Doyle, the other is a contemporary mystery investigated by a Sherlock Holmes enthusiast.<br>
<br>
<b>House of Suns </b>by Alastair Reynolds. This is my kind of science fiction. A family of immortal clones observe the galaxy, getting together every 200,000 years to compare notes. Then something changes.<br>
<br>
<b>I suck at girls </b>by Justin Halpern, the guy who created S#!t my dad says. It’s Halpern’s coming of age memoirs with frequent insights from his dad. It’s tragically funny. I found myself looking forward to the occasions he would interact with his dad and skimming his own personal story. I laughed.<br><br>
</div><h3 style="text-align: left;" dir="ltr" trbidi="on">
8. Rewrite Free Timer in the Microsoft Store</h3><div style="text-align: left;" dir="ltr" trbidi="on">
<a href="https://lh3.googleusercontent.com/-1TaZx3XguFo/XCvZTH8zz7I/AAAAAAAARVs/6o5dUd62UDE53p8ibPh6gD6a1JZrhHaXACHMYCw/s1600-h/image%255B45%255D"><img width="200" height="202" title="image" align="left" style="margin: 0px 0px 40px; border: 0px currentcolor; border-image: none; float: left; display: inline; background-image: none;" alt="image" src="https://lh3.googleusercontent.com/-0zesTsnfbLk/XCvZTkcOELI/AAAAAAAARVw/XRHpIPiJH0YTtXVC_cepYMogJ5dUdRmsgCHMYCw/image_thumb%255B21%255D?imgmax=800" border="0"></a>I get two or three emails every week from Free Timer users. They are asking for new features that would be simple to add if I had not lost the source. ;-) <strong>It’s crazy how many people use this </strong>app. I have not updated it since Windows 8. It’s time. The interface is wonderful, but it looks just a little dated. I want to make it better and use the effort to sharpen any of my UWP skills that may have dulled.<br>
<br>
If I manage to get that updated,<strong> I’ll follow up with writing my Pomodoro app</strong>. It’s a powerful technique to focus and I’ve been wanting to write the app using the Desktop Bridge for a year. But, it’s one app at a time – Free Timer comes first. The Pomodoro app will exercise my Xamarin certification that’s just gathering dust while I spend most of my days writing bot and edge libraries. Should be fun.<br><br>
</div><h3 style="text-align: left;" dir="ltr" trbidi="on">
9. Dial back on the caffeine</h3><div style="text-align: left;" dir="ltr" trbidi="on">
<a href="https://lh3.googleusercontent.com/-505L2WoWqXw/XCvZU2aHGEI/AAAAAAAARV0/mLNqot8X-UYUcCJms64G6CO6aFRIAbSjwCHMYCw/s1600-h/image%255B53%255D"><img width="200" height="231" title="image" align="left" style="margin: 0px 0px 10px; border: 0px currentcolor; border-image: none; float: left; display: inline; background-image: none;" alt="image" src="https://lh3.googleusercontent.com/--_SlP888Rw8/XCvZWFThN-I/AAAAAAAARV8/hRN3USmLQoMn-lkbwsaZug5PTwZxqOjYACHMYCw/image_thumb%255B36%255D?imgmax=800" border="0"></a>When my doctor prescribes a drug, I hate it. I resist vitamins, supplements, even medicines for coughs and colds. It’s just my thing. I eat well and maintain a pretty healthy balance. Yet, I seem to look right past caffeine as a drug. It is. The amount of caffeine I consume might be less or more than what you consume, I don’t care; <strong>I’m ready to change my consumption habits. </strong></div><div style="text-align: left;" dir="ltr" trbidi="on"><br></div><div style="text-align: left;" dir="ltr" trbidi="on">My goal for 2019 is to change my caffeine consumption to the point where this goal (or anything like it) does not show up for 2020.<br><br>
</div><h3 style="text-align: left;" dir="ltr" trbidi="on">
10. Leave room</h3><div style="text-align: left;" dir="ltr" trbidi="on">
Because I have OCD tendencies, I am tempted to make this an even ten goals. But I am not, except to say this: I’ve rarely felt constrained by rules and I don’t want to be. It’s important for there to be order and consistency in life, but <strong>it’s equally important to leave room for change and the unexpected</strong>. I want to leave margin to not rush as I go or justify compromises in order to check a box. I’ll get done what I can, but the prime directive, rule zero, is to live. I don’t mind regrets, but I don’t want to add any new ones.</div><div style="text-align: left;" dir="ltr" trbidi="on"><br></div><div style="text-align: left;" dir="ltr" trbidi="on"><a href="https://lh3.googleusercontent.com/-w18lFF6Zdr0/XCvZcrOeSxI/AAAAAAAARWE/_JiBz4JXFzsNcHv4UfIBwX60YrORFefzQCHMYCw/s1600-h/image%255B60%255D"><img width="570" height="301" title="image" style="margin: 0px auto 40px; border: 0px currentcolor; border-image: none; float: none; display: block; background-image: none;" alt="image" src="https://lh3.googleusercontent.com/-SzcDcs9td3Q/XCvZfB32h6I/AAAAAAAARWI/HxHcyiaEE809AMc8XAus6he0seW-yX81gCHMYCw/image_thumb%255B41%255D?imgmax=800" border="0"></a><strong>
And so, we open 2019.</strong> Some of these goals are lofty. Some of them are silly. But they are all real, for me. And sitting here in January, this is what comes to me. This is what I want to see in this coming year. It will be interesting to see how these change as the months pass. Meanwhile, I will do what I can.<br>
<i></i><br>
<i>Happy new year.</i><br>
<i></i><br>
PS: I have some technical goals like learning Python and F#, but I am not adding them to the list. I have some personal goals like exercise and eating, but I am not adding them to the list. These seem a little too cliché and I didn’t want to create a cliché list of goals for 2019. <strong>I wanted to create this list.</strong></div>jerrynixonhttp://www.blogger.com/profile/06978720385628364065noreply@blogger.comtag:blogger.com,1999:blog-8789713.post-2033864680084254272018-02-08T18:42:00.000-07:002018-02-08T18:52:50.800-07:00The three pillars of Technical Evangelism<div dir="ltr" style="text-align: left;" trbidi="on">
<div class="MsoNoSpacing">
Terms like evangelism are funny. Etymogically, evangelism
is about converting and teaching. Where most of us are used to hearing it in
the context of theology, technical evangelism is about teaching and converting in
the context of technology, most usually software development.</div>
<div class="MsoNoSpacing">
<o:p></o:p></div>
<div class="MsoNoSpacing">
<br /></div>
<div class="MsoNoSpacing">
I am a Microsoft Evangelist. It’s my real title, and I
sometimes must show people my card before they believe me. As a Microsoft
Evangelist I am converting developers to Microsoft Technologies. I also teach, of
course, but it is a fundamental part of evangelism that teaching, though
important, is secondary.</div>
<a name='more'></a><o:p></o:p><br />
<div class="MsoNoSpacing">
<br /></div>
<div class="MsoNoSpacing">
Consider the haters. Every software developer has
preferences, but some idealize their own preferences while vilifying every
other. But that’s not the end of the story. That’s only the setup. You see, when
it comes to people, Evangelism is a secret weapon.<br />
</div>
<h3 style="text-align: left;">
What isn’t evangelism?</h3>
<div>
</div>
<div class="MsoNoSpacing">
<o:p></o:p></div>
<div class="MsoNoSpacing">
Evangelism isn’t when I go speak at conferences. I do go
speak at conferences, though; it extends my reach into professionals. Evangelism
isn’t when I go speak at schools. I do go speak at schools, though; it extends my
reach into curriculum. Evangelism isn’t when I run a booth at a science fair. I
do run booths at science fairs, though: it extends my reach into students.</div>
<div class="MsoNoSpacing">
<o:p></o:p></div>
<div class="MsoNoSpacing">
<br /></div>
<div class="MsoNoSpacing">
Speaking is important, yes, but it isn’t Evangelism – at least
not core evangelism. <o:p></o:p></div>
<div class="MsoNoSpacing">
<br /></div>
<div class="MsoNoSpacing">
There’s only one proven way to change the heart of a
hater. There’s only one proven way to influence the technical choice of a professional.
There’s only one proven way to change the major of a student. That is: meet them.
That’s because there is some wonder-working power in personal interaction. <o:p></o:p></div>
<div class="MsoNoSpacing">
<br /></div>
<div class="MsoNoSpacing">
I get in my car and I go to where they are. They will
never come to me. They will never read my documentation, my blog, or follow me
on Twitter. They hate Microsoft, and, to them, I am Microsoft. Worst yet, each hater
is an anti-evangelist, bloviating their opinion to whoever listens, personally.<br />
</div>
<h3 style="text-align: left;">
They are not who you think.</h3>
<div>
</div>
<div class="MsoNoSpacing">
Who are they? Well, haters surprise me. They are often
the most generous and contributing members of the development community: meetup
organizers, event speakers, even conference volunteers. The reason they feel
the way they do, the depth they do is unique to each one. But it’s generally somewhere
between some negative experience and a lack of direct exposure to the
technology.<o:p></o:p></div>
<div class="MsoNoSpacing">
<br /></div>
<div class="MsoNoSpacing">
Before you start, set in your mind the truth: First, they
aren’t bad, they just have an opinion. Second, they don’t hate you, they don’t
even hate the company, they hate the idea of it. And, third, you might not
change their mind. That last one is a rough one in our metrics-driven,
corporate reality. <o:p></o:p></div>
<div class="MsoNoSpacing">
<br /></div>
<div class="MsoNoSpacing">
A quick intervention goes something like this: a hater
might hate Microsoft, but do they hate Jerry (that’s me), right? Look, man, I’m
just a guy. Like you. I’m trying to be a good husband; I’m trying to be a good
dad; I want to do something right and get my mortgage paid each month. Honestly,
that usually does it. Putting a face to the faceless profoundly changes perception.
Usually, to the better.<br />
</div>
<h3 style="text-align: left;">
Don’t make friends.</h3>
<blockquote class="tr_bq">
Quick aside: I do like making friends. ;-)</blockquote>
<div class="MsoNoSpacing">
My goal is not to make friends. My goal is to lose
enemies. Let’s say their mantra today is “Microsoft sucks”. After some mindful
attention, if their mantra tomorrow is “Microsoft is okay for some people, but it’s
wrong for me”, that’s not just winning a battle, that’s winning the whole freaking
war.<o:p></o:p></div>
<div class="MsoNoSpacing">
<br /></div>
<div class="MsoNoSpacing">
It’s like stopping a leak. It impacts decisions. It
impacts sentiment. It impacts perception. It impacts adoption. And, honestly,
it impacts stock prices. When everyone around you is no longer trying to burn
down that bridge, you might just start investigating how to cross over it. <o:p></o:p></div>
<div class="MsoNoSpacing">
<br /></div>
<div class="MsoNoSpacing">
Google has Developer Advocates. Microsoft now has Cloud
Developer Advocates. These are good guys. But it’s worth teasing out the
difference between Advocates and Evangelists. I sum it up like this. Advocates
say: I’ll teach them to use it and hope to make a friend. Evangelists say: I’ll
make a friend then teach them to use what I ask them to use. These two are so
allied yet so different, it’s crazy.<br />
</div>
<h3 style="text-align: left;">
Make it personal.</h3>
<div>
</div>
<div class="MsoNoSpacing">
For me, it starts in my car. I must drive to get to
people. And, if I were completely honest, I don’t always like it. Meetups meet
at crazy times. I’m sick of eating so much pizza. Code camps are typically over
weekends. I have my own family. But if you don’t go where they are, they will
never come to you. Just remember that sometimes a single handshake is the butterfly
wing that changes everything.<o:p></o:p></div>
<div class="MsoNoSpacing">
<br /></div>
<div class="MsoNoSpacing">
When it comes to evangelism, it’s easy to dance around burnout.
Nobody is going to tell you to take time. Nobody is going to tell you to slow
down. And, most of us work from home: nobody is going to tell you to stop
working in the middle of the night. That said, time management and some aggressive
self-advocacy on your corporate calendar can be what holds the breaking point
at bay. <o:p></o:p></div>
<div class="MsoNoSpacing">
<br /></div>
<div class="MsoNoSpacing">
Evangelism is very rewarding, you see. The number of
people you meet. The inherent authority you carry with you. Your ability to truly
help people. It’s all the right side of how we all want to live. Speaking,
mingling, networking – and the real secret is that most evangelists are
introverts.<br />
</div>
<h3>
Only influence matters.</h3>
<div class="MsoNoSpacing">
<br />
The fast-track to influence is inspiration. Sometimes I
hear people insist evangelists must be excellent software developers. To be
fair, I am a software developer. Sometimes, excellent. Their faulty reasoning
usually reads like this: if you don’t have the technical chops then people will
not listen to you. <o:p></o:p></div>
<div class="MsoNoSpacing">
<br /></div>
<div class="MsoNoSpacing">
But, have you ever listened to the most junior voice on
your team? Even the one without the technical chops? Of course, you have. Can
you only learn from a professor? Isn’t the nature of diversity a recognition
that every voice has unexpected value? Why would we assume developer audiences
are so shallow, are so myopic, and are so ridiculous that they can only hear
the words of Nobel prize winners and scholars?<o:p></o:p></div>
<div class="MsoNoSpacing">
<br /></div>
<div class="MsoNoSpacing">
If you have ever been to a meetup, you know the opposite
is true. They are the proving ground that lackluster speakers and mediocre
developers miraculously impact the hearts and minds of their personal community
in measurable ways. Please. I hope you don’t fall into the trap that an evangelist
must only be the best of the best. Only influence matters. Influence is a
byproduct of inspiration. And inspiration comes from people like us. People we
relate to. People who are good. People who may not be great.<br />
</div>
<h3 style="text-align: left;">
Build a team</h3>
<div class="MsoNoSpacing">
<br />
If I were building a team of evangelists, I would start
every interview with one (silent) question about a person: Do I hate them? I
mean it. If you couldn’t even go camping with a guy without wanting to kill
him, how can we expect him to meaningfully inspire someone into action? The
best I could hope for is that nobody would ever get to know him. And, how
stupid is that?<o:p></o:p></div>
<div class="MsoNoSpacing">
<br /></div>
<div class="MsoNoSpacing">
Instead, the type of person I am looking for is the magnet.
You know the type. At dinner, everyone seems to be asking her all the
questions. At the bar, everyone seems to be standing in a circle around him. At
the meetup, she’s always got a line of people wanting to ask her a question. These
are the magnets. The ones that don’t have to ask to influence others, they are
being asked to do it.<o:p></o:p></div>
<div class="MsoNoSpacing">
<br /></div>
<div class="MsoNoSpacing">
Let’s step through a thought experiment: Who is the most
likely person to influence you? The person you like the most or the show off who
flies in to demo a product? Sometimes, it’s the latter. I know that. But, overall,
its your buddy: the one you like, the one you hang out with. If the goal of an
evangelist is to change the course of a decision, and it is, then you want an
evangelist that can do that. <o:p></o:p></div>
<div class="MsoNoSpacing">
<br /></div>
<div class="MsoNoSpacing">
Here’s a conundrum. What if all the influential people
are not engineers? I would never advocate someone who does not know software
development to be a Developer Evangelist. That’s lunacy. But I would never set
the bar of engineering higher than the bar of magnetism. And, since most
software developers have zero or no magnetism (some repel, I think) a great
engineer might even be a red flag.<br />
</div>
<h3 style="text-align: left;">
But, what are the three pillars of evangelism?</h3>
<div class="MsoNormal">
</div>
<div class="MsoNoSpacing">
<br />
Honestly, I forgot to get to those. Sort of chased a
rabbit there. Next time, I guess. Sorry.<o:p></o:p></div>
</div>
jerrynixonhttp://www.blogger.com/profile/06978720385628364065noreply@blogger.comtag:blogger.com,1999:blog-8789713.post-88403470489634406662018-02-03T14:41:00.002-07:002018-02-03T15:52:27.698-07:00Custom UWP-XAML attached properties<div dir="ltr" style="text-align: left;" trbidi="on">
Look, this article is for me. I keep forgetting the basics of XAML attached properties & some advanced syntax. If this helps you, too, great. <br />
<blockquote>
As the author of <a href="http://aka.ms/template10"><span style="color: #7830b0;">Template 10</span></a> (the <i>best</i> UWP framework) I keep on my UWP toes with XAML & WinRT. I may not be a XAML Jedi, but I’m on the path. You’d think after writing about this in my Navigation View article in <a href="https://msdn.microsoft.com/en-us/magazine/mt814416.aspx"><span style="color: #7830b0;">MSDN Magazine article</span></a> last month I would have it all locked in. But, I’m the type of guy who forgets things. Even stuff I mastered just last month. So, here goes.</blockquote>
<h3 style="text-align: left;">
Containing class</h3>
The only requirement for an attached property is that its containing class derive from <a href="https://docs.microsoft.com/en-us/uwp/api/Windows.UI.Xaml.DependencyObject"><span style="color: #7830b0;">DependecyObject</span></a>. The class cannot be static.<br />
<br />
<div class="separator" style="clear: both; text-align: left;">
<a href="https://3.bp.blogspot.com/-LChvZUs1KK0/WnYonvHW8GI/AAAAAAAARHw/7RofoBLqVVox6Zf6DO0N7bOpk94zL8BSQCLcBGAs/s1600/2018-02-03_14_16_32%2B%2528App4%2B-%2BMicrosoft%2BVisual%2BStudio%2529.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="84" data-original-width="369" src="https://3.bp.blogspot.com/-LChvZUs1KK0/WnYonvHW8GI/AAAAAAAARHw/7RofoBLqVVox6Zf6DO0N7bOpk94zL8BSQCLcBGAs/s1600/2018-02-03_14_16_32%2B%2528App4%2B-%2BMicrosoft%2BVisual%2BStudio%2529.png" /></a></div>
<a name='more'></a><br />
<br />
<h3 style="text-align: left;">
Basic property</h3>
A simple property holds a strongly-typed value. Every attached property must have a default value set in <a href="https://docs.microsoft.com/en-us/uwp/api/windows.ui.xaml.propertymetadata"><span style="color: #7830b0;">PropertyMetadata</span></a> during <a href="https://docs.microsoft.com/en-us/uwp/api/windows.ui.xaml.dependencyproperty#Windows_UI_Xaml_DependencyProperty_RegisterAttached_System_String_Windows_UI_Xaml_Interop_TypeName_Windows_UI_Xaml_Interop_TypeName_Windows_UI_Xaml_PropertyMetadata_"><span style="color: #7830b0;">RegisterAttached</span></a>.<br />
<br />
<div class="separator" style="clear: both; text-align: left;">
<a href="https://3.bp.blogspot.com/-mkPfIPHEZsc/WnYooC1W0CI/AAAAAAAARIc/76UVNF_--1MhKbzEMMoZJqWWaihPjw5RwCEwYBhgL/s1600/2018-02-03_14_17_17%2B%2528App4%2B-%2BMicrosoft%2BVisual%2BStudio%2529.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="213" data-original-width="511" src="https://3.bp.blogspot.com/-mkPfIPHEZsc/WnYooC1W0CI/AAAAAAAARIc/76UVNF_--1MhKbzEMMoZJqWWaihPjw5RwCEwYBhgL/s1600/2018-02-03_14_17_17%2B%2528App4%2B-%2BMicrosoft%2BVisual%2BStudio%2529.png" /></a></div>
<h3 style="text-align: left;">
Constraining to a type</h3>
An attached property is, by default, available to every Dependency Object. To limit this, change the signatures of the static Get()/Set() methods.<br />
<br />
<div class="separator" style="clear: both; text-align: left;">
<a href="https://2.bp.blogspot.com/-hchiC53ktBg/WnYoorMMhJI/AAAAAAAARIs/ERgwf6LYLlAw0aMJ33LZNVV_F9c2N0QZQCEwYBhgL/s1600/2018-02-03_14_17_43%2B%2528App4%2B-%2BMicrosoft%2BVisual%2BStudio%2529.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="260" data-original-width="536" src="https://2.bp.blogspot.com/-hchiC53ktBg/WnYoorMMhJI/AAAAAAAARIs/ERgwf6LYLlAw0aMJ33LZNVV_F9c2N0QZQCEwYBhgL/s1600/2018-02-03_14_17_43%2B%2528App4%2B-%2BMicrosoft%2BVisual%2BStudio%2529.png" /></a></div>
<h3 style="text-align: left;">
XAML syntax</h3>
After adding a namespace, you can use XAML’s simple and complex property syntax for attached properties. Each have type-safety.<br />
<b></b><i></i><u></u><sub></sub><sup></sup><strike></strike><br />
<div class="separator" style="clear: both; text-align: left;">
<a href="https://2.bp.blogspot.com/-neByVk9FW8k/WnYonNs5iHI/AAAAAAAARIc/nMY_uGHXg0g2JxmBI3IaxJL4fBMvhSqOQCEwYBhgL/s1600/2018-02-03_14_14_14%2B%2528App4%2B-%2BMicrosoft%2BVisual%2BStudio%2529.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="361" data-original-width="474" src="https://2.bp.blogspot.com/-neByVk9FW8k/WnYonNs5iHI/AAAAAAAARIc/nMY_uGHXg0g2JxmBI3IaxJL4fBMvhSqOQCEwYBhgL/s1600/2018-02-03_14_14_14%2B%2528App4%2B-%2BMicrosoft%2BVisual%2BStudio%2529.png" /></a></div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
<span style="background-color: transparent; color: black; display: inline; float: none; font-family: "times new roman"; font-size: 16px; font-style: normal; font-variant: normal; font-weight: 400; letter-spacing: normal; text-align: left; text-decoration: none; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px;">Note: The approach to data binding to attached properties is identical to databinding dependency properties directly on the control. Either syntax is supported.</span></div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<h3 style="text-align: left;">
Setting in Styles</h3>
It’s also possible to use style setters. The syntax is nearly the same.<br />
<br />
<div class="separator" style="clear: both; text-align: left;">
<a href="https://3.bp.blogspot.com/-0SfZuo02T1E/WnYovwoVP7I/AAAAAAAARIs/Ijkg4sengjEsPEQ0jAa3cKy7RXRMuLVtgCEwYBhgL/s1600/Style.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="124" data-original-width="545" src="https://3.bp.blogspot.com/-0SfZuo02T1E/WnYovwoVP7I/AAAAAAAARIs/Ijkg4sengjEsPEQ0jAa3cKy7RXRMuLVtgCEwYBhgL/s1600/Style.jpg" /></a></div>
<h3 style="text-align: left;">
Handling change</h3>
The most reliable approach to handling changed values is in the changed handler set in <a href="https://docs.microsoft.com/en-us/uwp/api/windows.ui.xaml.propertymetadata"><span style="color: #7830b0;">PropertyMetadata</span></a>. It’s already on the UI thread.<br />
<br />
<div class="separator" style="clear: both; text-align: left;">
<a href="https://1.bp.blogspot.com/-KhRuJ_prNTA/WnYopI7yvaI/AAAAAAAARIg/M4JKA8CbaVQZX3InBWOZU2AzWP8jJ69qACEwYBhgL/s1600/2018-02-03_14_18_59%2B%2528App4%2B-%2BMicrosoft%2BVisual%2BStudio%2529.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="319" data-original-width="512" src="https://1.bp.blogspot.com/-KhRuJ_prNTA/WnYopI7yvaI/AAAAAAAARIg/M4JKA8CbaVQZX3InBWOZU2AzWP8jJ69qACEwYBhgL/s1600/2018-02-03_14_18_59%2B%2528App4%2B-%2BMicrosoft%2BVisual%2BStudio%2529.png" /></a></div>
<b>Note</b>: You’ll need to cast both the sender and the e.NewValue (there is also an e.OldValue) to the correct types before you act on them.<br />
<br />
<h3 style="text-align: left;">
Updating controls</h3>
Sometimes properties are for updating controls. The constructor has no reference to the controls. Operations must execute during the Set() method.<br />
<br />
<div class="separator" style="clear: both; text-align: left;">
<a href="https://1.bp.blogspot.com/-GN5oWVK3e3U/WnYopgYz3sI/AAAAAAAARIg/yZgeMbe_i8sMKq0SkxfkBUJyBcyNoN28ACEwYBhgL/s1600/2018-02-03_14_20_22%2B%2528App4%2B-%2BMicrosoft%2BVisual%2BStudio%2529.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="385" data-original-width="516" src="https://1.bp.blogspot.com/-GN5oWVK3e3U/WnYopgYz3sI/AAAAAAAARIg/yZgeMbe_i8sMKq0SkxfkBUJyBcyNoN28ACEwYBhgL/s1600/2018-02-03_14_20_22%2B%2528App4%2B-%2BMicrosoft%2BVisual%2BStudio%2529.png" /></a></div>
<h3 style="text-align: left;">
Setting values in code-behind</h3>
Attached properties, like dependency properties are only a property bag, not real properties. As a result, they are stored as [object], not strong-types.<br />
<br />
<div class="separator" style="clear: both; text-align: left;">
<a href="https://2.bp.blogspot.com/-P_0sg7OYlJ8/WnYoqNa-GwI/AAAAAAAARIk/1BTU8qS3rfM8PBWpiHuNN8Vz9kg_nKm9ACEwYBhgL/s1600/2018-02-03_14_21_12%2B%2528App4%2B-%2BMicrosoft%2BVisual%2BStudio%2529.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="52" data-original-width="401" src="https://2.bp.blogspot.com/-P_0sg7OYlJ8/WnYoqNa-GwI/AAAAAAAARIk/1BTU8qS3rfM8PBWpiHuNN8Vz9kg_nKm9ACEwYBhgL/s1600/2018-02-03_14_21_12%2B%2528App4%2B-%2BMicrosoft%2BVisual%2BStudio%2529.png" /></a></div>
<h3 style="text-align: left;">
Reading values in code-behind</h3>
Reading the value of attached properties is the same as reading dependency properties. And like dependency properties, you need to cast the value.<br />
<br />
<div class="separator" style="clear: both; text-align: left;">
<a href="https://1.bp.blogspot.com/-E9p9TlD22-Q/WnYoqqoTFkI/AAAAAAAARIo/G8RrwvoI_c4vACNsqfmI8Lu678Isj4kygCEwYBhgL/s1600/2018-02-03_14_21_46%2B%2528App4%2B-%2BMicrosoft%2BVisual%2BStudio%2529.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="86" data-original-width="471" src="https://1.bp.blogspot.com/-E9p9TlD22-Q/WnYoqqoTFkI/AAAAAAAARIo/G8RrwvoI_c4vACNsqfmI8Lu678Isj4kygCEwYBhgL/s1600/2018-02-03_14_21_46%2B%2528App4%2B-%2BMicrosoft%2BVisual%2BStudio%2529.png" /></a></div>
<div class="separator" style="clear: both; text-align: center;">
</div>
<br />
<h3 style="text-align: left;">
Enumerable attached properties</h3>
Sometimes a scalar value isn’t enough, you want to store an IEnumerable<t>. Attached properties can do this natively: use <a href="https://msdn.microsoft.com/en-us/library/6sh2ey19(v=vs.110).aspx"><span style="color: #7830b0;">List<t></t></span></a>.</t><br />
<br />
<a href="https://3.bp.blogspot.com/-aWGKG-F7zUQ/WnYorLQG1qI/AAAAAAAARIo/B30Wk1XdAQwqzrJQSiShuTvNhcwcj8RDACEwYBhgL/s1600/2018-02-03_14_22_47%2B%2528App4%2B-%2BMicrosoft%2BVisual%2BStudio%2529.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="320" data-original-width="459" src="https://3.bp.blogspot.com/-aWGKG-F7zUQ/WnYorLQG1qI/AAAAAAAARIo/B30Wk1XdAQwqzrJQSiShuTvNhcwcj8RDACEwYBhgL/s1600/2018-02-03_14_22_47%2B%2528App4%2B-%2BMicrosoft%2BVisual%2BStudio%2529.png" /></a><br />
<br />
<b>Important</b>: it is up to you, the developer, to instantiate the list. In the Get() method, check if the value is null. If it is, create it, then return it.<br />
<br />
<h3 style="text-align: left;">
XAML Syntax</h3>
It’s simple to add items to an attached property of IEnumerable<t>. The XAML platform understands how to Add() for you, so there’s nothing special.</t><br />
<br />
<div class="separator" style="clear: both; text-align: left;">
<a href="https://2.bp.blogspot.com/-b6vepS_aLzs/WnYovzbe-OI/AAAAAAAARIo/pa_0-lF__log0K3GVNYHegpfp277P4RtQCEwYBhgL/s1600/2018-02-03_14_23_21%2B%2528App4%2B-%2BMicrosoft%2BVisual%2BStudio%2529.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="117" data-original-width="296" src="https://2.bp.blogspot.com/-b6vepS_aLzs/WnYovzbe-OI/AAAAAAAARIo/pa_0-lF__log0K3GVNYHegpfp277P4RtQCEwYBhgL/s1600/2018-02-03_14_23_21%2B%2528App4%2B-%2BMicrosoft%2BVisual%2BStudio%2529.png" /></a></div>
Note: the simple XAML syntax is not supported here. If you are binding to it, you skip the Get() changes and bind a List<t>, not its items. </t><br />
<h3 style="text-align: left;">
Handling list changes</h3>
A List<t> does not raise events when it is changed, and the attached property changed event will never raise. You need an <a href="https://docs.microsoft.com/en-us/dotnet/api/system.collections.objectmodel.observablecollection-1?view=netframework-4.7.1"><span style="color: #7830b0;">ObservableColelction<t></t></span></a>.</t><br />
<br />
That’s it.<br />
<h3 style="text-align: left;">
Question & Answer</h3>
<b>What about that literal string?</b><br />
<b><br /></b>
Unlike dependency properties, attached properties have no real object or member for to use <a href="https://docs.microsoft.com/en-us/dotnet/csharp/language-reference/keywords/nameof"><span style="color: #7830b0;">nameof</span></a>(). This means that literal string is required.<br />
<br />
<b>What do you call the control using the attached property?</b><br />
<b><br /></b>
According to the Microsoft Docs, that’s referred to as the “owning type”. See here: <a href="https://docs.microsoft.com/en-us/windows/uwp/xaml-platform/attached-properties-overview" title="https://docs.microsoft.com/en-us/windows/uwp/xaml-platform/attached-properties-overview"><span style="color: #7830b0;">https://docs.microsoft.com/</span></a><br />
<br />
<b>Can I iterate through all the owning types?</b><br />
<b><br /></b>
If on each Set() you store a control reverence in a static List<object> you can, but you have to wait for Set() to be called. Otherwise, no.</object><br />
<br />
<b>Can I put all my attached properties in a remote assembly?</b><br />
<b><br /></b>
Yep. You can put all of them or some of them. You just need to be able to create the namespace reference in your XAML declaration.<br />
<br />
<b>I assume the value is disposed when the owning type is disposed?</b><br />
<b><br /></b>
That’s what I assume. Yeah.<br />
<br />
<b>Are attached properties inherited like dependency properties?</b><br />
<b><br /></b>
Nope. That's one big difference.<br />
<br />
<b>What about the "Cannot add instance of type ObservableCollection" exception?</b><br />
<br />
That means you aren't constructing the list in the Set() method, dummy.<br />
<br />
// Best of luck.</div>
jerrynixonhttp://www.blogger.com/profile/06978720385628364065noreply@blogger.comtag:blogger.com,1999:blog-8789713.post-40801536866352695692017-09-21T11:41:00.001-06:002017-09-21T11:49:29.168-06:00A personal review of some Star Trek swag I have lying around.<p>I have a few Star Trek things sitting on my desk, in drawers, or around the house. This isn’t really a review as much as it is an excuse for me to talk about them. This is important since the first episode of Star Trek: Discovery is only 3 days away and I am getting anxious about the whole thing. Don’t think of this as a buyer’s guide as much as me, dreaming up an excuse to talk about Star Trek in anticipation of the new show. </p><p><a href="https://lh3.googleusercontent.com/-xRgc5Q4aFNk/WcP5eVQV8UI/AAAAAAAARA8/P1GKD7kJ1AYi2UAlxCq4sMr1QcBunl_CgCHMYCw/s1600-h/image%255B63%255D"><img width="550" height="275" title="image" style="display: inline;" alt="image" src="https://lh3.googleusercontent.com/-V3LPfWUPf7c/WcP5hZ6TNaI/AAAAAAAARBA/mE0G5rhDlFssQcBvycHtO8rc53Wv7GIqACHMYCw/image_thumb%255B25%255D?imgmax=800"></a></p><h3></h3>
<a name='more'></a>
<h3>The Star Trek Enterprise Pizza Cutter</h3><p><a href="https://lh3.googleusercontent.com/-UlUdL_s8iMM/WcP5jvKh_uI/AAAAAAAARBE/o5xmrxNvLXMoh28ntmGr1NM4DxgP6N1OwCHMYCw/s1600-h/image%255B2%255D"><img width="166" height="166" title="image" align="right" style="float: right; display: inline; background-image: none;" alt="image" src="https://lh3.googleusercontent.com/--dtlmBk9bzE/WcP5kCrfajI/AAAAAAAARBI/s1rOx_1lmJ0vB5m7uKD5BiVBLphFz3i-QCHMYCw/image_thumb?imgmax=800" border="0"></a>Four stars. Received it for Father’s Day and can’t stress enough the high quality of the item. It’s solid, shiny, and quite nice. As a pizza cutter, it does the job with one complaint, the saucer section can get gummed up with sauce. It’s a wonderful play on words, but sort of a pain in the neck to clean. Did I send it back, of course not. And, I store it in the cool black box it came in, not with the carrot peeler and paring knives. It feels special when I get it out. </p><h3>The Star Trek Cast Paying Cards</h3><p><a href="https://lh3.googleusercontent.com/-R3g8CRrdJbQ/WcP5lCXw_AI/AAAAAAAARBM/EkmxnW3rpg0MYSEBY6E0rOq1IH-_Di1AwCHMYCw/s1600-h/image%255B5%255D"><img width="166" height="166" title="image" align="right" style="float: right; display: inline; background-image: none;" alt="image" src="https://lh3.googleusercontent.com/-l1_-3X8cj1E/WcP5lWoeMsI/AAAAAAAARBQ/pV9iQDaoK-golCfN194ly6Hl2g2o7ZVywCHMYCw/image_thumb%255B1%255D?imgmax=800" border="0"></a>Three stars. This was an inevitable gift. My nephew gave it to me, actually, buying it at a novelty story when he saw them and thought of me. Good kid. The cards are not Bicycle cards, by which I mean they don’t have the texture or pliability of the industry standard. They are also quite a challenge to scan for number and suit. The pictures are not cast pictures you normally see or might even pick yourself. That being said, they are the deck I take on vacation and we have played many games with them. </p><h3>The Star Trek Original Commit Blanket</h3><p><a href="https://lh3.googleusercontent.com/-n-EPNDSapzE/WcP5mhtglXI/AAAAAAAARBU/iRt8k8_T-hssHRvZrBESry52zM-pU-uwQCHMYCw/s1600-h/image%255B8%255D"><img width="166" height="166" title="image" align="right" style="float: right; display: inline; background-image: none;" alt="image" src="https://lh3.googleusercontent.com/-aDJ6El-h8Cc/WcP5nKth9RI/AAAAAAAARBY/cWpCVCSPez0OdHrnNa-RoFY8nsoOUnzDACHMYCw/image_thumb%255B2%255D?imgmax=800" border="0"></a>Five stars. This beauty was a birthday present from my girls. I adore the Star Trek comics and have tons of them filling the cracks of the couch even now. This blanket is a cute snippet from those comics and is a perfect color, quality, size, and plush. If this blanket has anything going for it, it’s how wonderfully soft it is. I watch episodes of The Big Bank Theory cuddled in this little luxury. The girls might have given it to me, but they tend to find ways to take it for themselves. And, hey, I can’t blame them. </p><h3>Star Trek Black Command T-Shirt</h3><p><a href="https://lh3.googleusercontent.com/-yJod2lntnJ0/WcP5nyX-_JI/AAAAAAAARBc/0g2Yae5l8Qc1PqL4-hgK10tlET1qoSjhACHMYCw/s1600-h/image%255B14%255D"><img width="166" height="166" title="image" align="right" style="float: right; display: inline; background-image: none;" alt="image" src="https://lh3.googleusercontent.com/-hKN2JI1QJac/WcP5oSEDjYI/AAAAAAAARBg/VM04mfHlQFgYEzEkMd2xBjn3-wS-vjeXQCHMYCw/image_thumb%255B4%255D?imgmax=800" border="0"></a>Four stars. I am a fan, but sometimes a graphic T is just too much. A shirt like this fits the bill. Any other fan will immediately recognize the delta and even place the movie this shirt was introduced. My shirt arrived with the delta slightly too far left, it’s supposed to line up with the collar bone. I am not picky enough to send it back, so I kept it and will simply give it four stars here. </p><h3>Spock Crew Socks with Ears</h3><p><a href="https://lh3.googleusercontent.com/-xhj887ua4zs/WcP5o18AEYI/AAAAAAAARBk/-qd3ajZl_JI29bZhcY0x0UdNPQkt89LgQCHMYCw/s1600-h/image%255B17%255D"><img width="166" height="166" title="image" align="right" style="float: right; display: inline; background-image: none;" alt="image" src="https://lh3.googleusercontent.com/-9sY67-VVTyo/WcP5pVZzqbI/AAAAAAAARBo/v5VVchmZtFo2XzYsJC3RZHn8l71NOlffgCHMYCw/image_thumb%255B5%255D?imgmax=800" border="0"></a>Five stars. Here’s an easy Birthday gift. When I saw these come on sale, I knew it was only a matter of time. My sister-in-law must have a bookmark to Think Geek, because the week before every birthday, a box from them appears at my doorstep. This time, it had the Spock Socks. I was speaking at an event and mentioned I was a fan when a developer in the crowd showed his Trek shirt and asked, “Yeah but are you wearing the shirt?” I was pleased to be able to pull my pants leg and trump him with these beauties.</p><h3>United Federation of Planets Cuff Links</h3><p><a href="https://lh3.googleusercontent.com/-RPV_OHgNMNg/WcP5p_kU3QI/AAAAAAAARBs/rxRxMqeOxEQ0cIQnvaoNKHriIJ1yxICewCHMYCw/s1600-h/image%255B20%255D"><img width="166" height="166" title="image" align="right" style="float: right; display: inline; background-image: none;" alt="image" src="https://lh3.googleusercontent.com/--QDbFPF4n_Q/WcP5rccMp6I/AAAAAAAARBw/Y70upSilbE4DMZ2IXh_VGodIlCeK6tOZQCHMYCw/image_thumb%255B6%255D?imgmax=800" border="0"></a>Five stars. Something borrowed, something new, something borrowed, something Star Trek. It’s classic. I didn’t have these when I got married, but had I, these would have made an appearance. They are stunning, and the subtle Star Trek-factor is pretty small. Most people just they they are ornamental and decorative. The astute recognize that they represent an interstellar federal republic of planetary members. The backbone of the Star Trek universe. </p><h3>Star Trek Comics, Seatbelt Belt</h3><p><a href="https://lh3.googleusercontent.com/-ezLMsiD4JDE/WcP5rulzWeI/AAAAAAAARB0/poYcxlsorccIRdzgi_PozMsOwrcLqLS-gCHMYCw/s1600-h/image%255B26%255D"><img width="166" height="67" title="image" align="right" style="margin: 20px 0px; float: right; display: inline; background-image: none;" alt="image" src="https://lh3.googleusercontent.com/-n8vWoTEQXHM/WcP5sFEp8zI/AAAAAAAARB4/sgzEbwLTz90uX8BsKEy-Ipw7ij4QO0flACHMYCw/image_thumb%255B8%255D?imgmax=800" border="0"></a>Five stars. There are a few things in the collection that really stand out. not only does it depict the comics, which I love, but it’s unusual design makes it really stand out from the crowd. It was my go-to belt for nearly a year until I tired of taking it off in the airport. I travel. This sets off every metal detector.</p><h3>Star Trek Uno</h3><p><a href="https://lh3.googleusercontent.com/-Bu2V5_Ewf2k/WcP5sg6Ot0I/AAAAAAAARB8/LJ6qH9BCcjQtdQtYB3o5KJ_JclqPVCd7gCHMYCw/s1600-h/image%255B57%255D"><img width="145" height="166" title="image" align="right" style="float: right; display: inline;" alt="image" src="https://lh3.googleusercontent.com/-LCk6jekPa0Q/WcP5trKy3hI/AAAAAAAARCA/Otg8lNdidawT6FAxqcXXi9TXhhpJ8YmegCHMYCw/image_thumb%255B21%255D?imgmax=800"></a>Five Stars. Star Trek Uno is unlike normal Uno. It includes a Beam Me Up card that can get you out of any setup. My girls love it and we’ve played it a thousand times if not two. Uno is already quick, easy and fun – adding a Star Trek theme just makes it even better. We have house rules that let you play a Scotty on a Scotty and a Sulu on a Sulu, etc. It’s a fun variation when your travelling or something. There are actually two versions out there, and we have both. Generally, we prefer the classic version with just the Beam Me Up cards. </p><h3>The Star Trek Grill Set</h3><p><a href="https://lh3.googleusercontent.com/-s1PkQfB7nAE/WcP5uOYLfSI/AAAAAAAARCE/1izSzUw5bmMlWKg-TC0TEsSc10bShV7dwCHMYCw/s1600-h/image%255B29%255D"><img width="166" height="166" title="image" align="right" style="float: right; display: inline; background-image: none;" alt="image" src="https://lh3.googleusercontent.com/-dh161mPr08w/WcP5vMOWJsI/AAAAAAAARCI/6JaFVPnxpIAETDQkVKVJLafKNY9dKqseQCHMYCw/image_thumb%255B9%255D?imgmax=800" border="0"></a>One Star. Oh, I wanted this to work. Like most Father’s Days, a Star Trek something-something showed up under the tree (so to speak). Opening this set was a treat, it’s box and presentation is jaw-dropping. But the shape of the flipper, the weak tongs, the awkward fork, only the skewers are nice. When it comes to grilling, I take things seriously and can’t have half-baked equipment. This grilling set is beautiful, but completely useless. For the price, it’s a frustrating reality.</p><h3>Captain Kirk Grilling Apron</h3><p><a href="https://lh3.googleusercontent.com/-KcAybwNEH_c/WcP5vjUNULI/AAAAAAAARCM/6bWrSDhp8ssld3682nN6tHj6vwH26i7bwCHMYCw/s1600-h/image%255B32%255D"><img width="166" height="166" title="image" align="right" style="float: right; display: inline; background-image: none;" alt="image" src="https://lh3.googleusercontent.com/-YQGZpkQ0bSo/WcP5wBjZv3I/AAAAAAAARCQ/cO2gQ3JhV-wfrf9ppOkMRKdynyNPzkb6gCHMYCw/image_thumb%255B10%255D?imgmax=800" border="0"></a>Five Stars. If the grill set let me down, it was all made right by the Captain Kirk apron. A birthday present from my wife, this thing does the job of protecting my uniform from splashes, while ensuring would-be Klingons know who’s who. Even though I wish it were a little more thick, I have to say it’s basically just what I want in an apron – if a man has to wear an apron in the first place. </p><h3>Star Trek Electric Door Chime</h3><p><a href="https://lh3.googleusercontent.com/-S5mwzp_k9vQ/WcP5xvq5RgI/AAAAAAAARCU/xES4NIN0tswXuGwaN-qd6A4hgDBQ4y5pQCHMYCw/s1600-h/image%255B40%255D"><img width="166" height="166" title="image" align="right" style="float: right; display: inline;" alt="image" src="https://lh3.googleusercontent.com/-3NkeTOBlXEc/WcP5yTVPEkI/AAAAAAAARCY/rlYASfKjQgsgDGyoMFE6lLqzqYrqSHWMACHMYCw/image_thumb%255B14%255D?imgmax=800"></a>Five Stars. This little chime sits right outside my office. Pressing the little white button produces the boatswain whistle made commonplace by Star Trek and military movies through the ages. It also has a motion detector, but it takes about 5 minutes before you shut that feature off. It’s beautiful, fun, and an anchor aesthetic to our hallways. Had they made it a wireless intercom, well, that would have been near-nirvana. As it is, I just love it.</p><h3>Tea Earl Grey Hot Mug</h3><p><a href="https://lh3.googleusercontent.com/-LmzKGuzG8MY/WcP7oRkCw7I/AAAAAAAARC0/rP5Zxv3OtXYkryoHxDCZYTU_6JUfugafACHMYCw/s1600-h/image%255B66%255D"><img width="166" height="166" title="image" align="right" style="float: right; display: inline; background-image: none;" alt="image" src="https://lh3.googleusercontent.com/-iVUXZz3Ip7w/WcP7qLH-kFI/AAAAAAAARC4/bSR-vEDWa3ouuceJlI4bhWL9ZcdnX74jwCHMYCw/image_thumb%255B26%255D?imgmax=800" border="0"></a>Five stars. Nothing kicks off a morning like drinking from an LCARS mug. It turns out that Earl Grey really is the finest hot tea. Most of the people around me certainly assume I say that because of Star Trek, But I really believe it. Drinking Earl Grey from this mug makes it taste even sweeter. If it was good enough for Captain Picard, it is good enough for me. Or something like that. When we clean out our mug collection from time to time, this one is never considered. This one is, special.</p><h3>TOS Uniform (Science) Bathrobe</h3><p><a href="https://lh3.googleusercontent.com/-Mndbu-NmXMI/WcP5yxzTwGI/AAAAAAAARCc/SD1vtiKEv9M80FL1oaYs5ILlaFw1SsEgACHMYCw/s1600-h/image%255B46%255D"><img width="166" height="166" title="image" align="right" style="float: right; display: inline; background-image: none;" alt="image" src="https://lh3.googleusercontent.com/-cH6NhxILWsc/WcP5zn9w-uI/AAAAAAAARCg/0amE9xXy1Kg3tG6dh62DorYZD3mtrA09wCHMYCw/image_thumb%255B16%255D?imgmax=800" border="0"></a>Five stars. Here’s a classic. I’ve been wearing this beauty for years now. It’s thick and soft and awesome in a million ways. Since you have to wear a bathrobe anyway – like walking out to the hot tub, making Saturday pancakes, or whatever – why not do it in regulation specs? I’ve about work mine out, to be honest, but it’s the perfect Christmas present. Sure, I could have gotten gold/command colors, but this is Spock’s uniform and I like that most.</p><h3>Star Trek Catan</h3><p><a href="https://lh3.googleusercontent.com/-7JHvO-XBIBA/WcP52AgoMmI/AAAAAAAARCk/rMkPZwy1pXwoGc0FcWCJyjJqoa0gO2fcwCHMYCw/s1600-h/image%255B53%255D"><img width="166" height="166" title="image" align="right" style="float: right; display: inline;" alt="image" src="https://lh3.googleusercontent.com/-t1sraYdLYIQ/WcP52oecUFI/AAAAAAAARCo/Ry2x5iT8MBYZ-Z0hG_1ifrZHZzMA4dmIACHMYCw/image_thumb%255B19%255D?imgmax=800"></a>Five Stars. Catan is fun. You might not know that it was made to compete with Monopoly, but rigged so yo don’t endlessly accumulate, working to humiliate your playmates. It’s both strategic and based on luck. We can play for hours and last summer we lost many summer nights to it. If you like Star Trek and you like games, you should do yourself a favor and get Star Trek Catan. It’s fun to build starships and space docks, collect dilithium, and beat your kids.</p><h3>Conclusion</h3><p>Could I go on? Of course, but I wont. Do you know how many of my birthdays and Father’s Days have passed just this year? :-) Every one of them introduces a little bit more Star Trek into this house. And when the girls have a birthday, I make sure to tuck something Trek in their stocking, too. (so to speak) And, now, in three days, CBS is giving me a <em>present</em>, and it <em>only </em>costs me $10 a month, for the rest of the year. Could I torrent the episodes? Of course, but I wont. Could I wait and binge the episodes? Of course, but I wont. I love weekly shows. And, I really like Star Trek. It’s a cake and frosting sort of thing, and I am ready. I could even watch it in my bathrobe. Of course, but I wont. </p>jerrynixonhttp://www.blogger.com/profile/06978720385628364065noreply@blogger.comtag:blogger.com,1999:blog-8789713.post-26492217573669045382017-08-29T16:17:00.001-06:002017-08-30T11:24:03.205-06:00Cardinal XAML: a reflection<p>In 2014, at the VS Live in Chicago, <a href="http://www.bendewey.com/index.php/about">Ben Dewey</a>, a Microsoft MVP for Windows Client at the time, presented the session: <a href="https://onedrive.live.com/view.aspx?cid=473151cb8afe66ba&id=documents&resid=473151CB8AFE66BA%2114527&app=PowerPoint&authkey=ABGP7OkqB70gNHQ&&wdSlideId=258&wdModeSwitchTime=1504024711052">XAML Anti-patterns</a>. Not to be confused with Markus Egger’s excellent series with the same name in Code Magazine (also in 2014); Ben’s session had the playful subtext: The Seven Deadly Sins of XAML Development. </p><p>Between the two authors, they saw a regular set of common developer practices that harmed the efficiency and maintainability of XAML applications. In this article, I wanted to iterate those insights, consider the actuality of them, and review if they remain relevant to modern developers using newer, evolved XAML technologies and tooling.</p><p><a href="https://lh3.googleusercontent.com/-dj0cYHMSZiU/WaXnzSUbYZI/AAAAAAAAQ-o/w-NVyaA1w6APaJX5TySOWN8d0fvgFF_vwCHMYCw/s1600-h/image%255B10%255D"><img width="542" height="309" title="image" style="margin: 0px; display: inline; background-image: none;" alt="image" src="https://lh3.googleusercontent.com/-8itRm5oM3Ns/WaXn1Vx938I/AAAAAAAAQ-s/mLfHT3Hj9CwVl8n6MPww003WBP3LfpfewCHMYCw/image_thumb%255B4%255D?imgmax=800" border="0"></a></p>
<a name='more'></a>
<p>Okay. Before I start, it’s only fair to confess I also, in 2014, took the Biblical approach to software, presenting The Ten Commandments of MVVM at Dev Intersections, writing a never-published blog of the same title. </p><p><a href="https://lh3.googleusercontent.com/-CtMg6E11O4E/WaXn1y6vkmI/AAAAAAAAQ-w/uizGC9PKuok4ykKfVv84lGJw_H5a62lVwCHMYCw/s1600-h/image%255B13%255D"><img width="551" height="309" title="image" style="margin: 0px; display: inline; background-image: none;" alt="image" src="https://lh3.googleusercontent.com/-nJ1QxkEpwLU/WaXn2BetV6I/AAAAAAAAQ-0/VOEPKUUssKIpLLUseL8-DAWG5Te2DvO3gCHMYCw/image_thumb%255B5%255D?imgmax=800" border="0"></a></p><p>Let’s begin with my 10 commandments, evaluate their value today, then do the same for the other authors so long ago. </p><h2>1. Software delivery is job one</h2><h4>Still valid? yes, and it always will be</h4><p>You might be surprised to sit at a table of architects hearing them argue: “bad code makes software useless”. I think the argument goes: with architectural debt, a code base cannot be maintained or enhanced. Though true, this axiom is teaching the goal of software is the product, not architecture. The test of a good developer/architect is their balancing those competing factors. </p><h2>2. Reconsider MVVM altogether</h2><h4>Still valid? yes</h4><p>Every design pattern has a certain cost. Sometimes the cost is in size: constraining resources to the app’s physical or memory footprint. Sometimes it is in performance: requiring more code for the sake of the developer’s convenience. These aren’t always wrong, but this axiom is teaching that design patterns, even MVVM, should be added with mindfulness, not blindness. </p><h2>3. Choose MVVM for your own reasons</h2><h4>Still valid? yes</h4><p>One common reason to choose MVVM is unit-testability. But, if we were to be honest, many development teams aren’t motivated to employ unit tests – for whatever reason. If the value of MVVM is for unit testing, then those development teams might also misperceive the value of MVVM. This axiom is teaching that patterns solve different problems for different apps; we aren’t all the same. MVVM solves unit testing for you, but something else for me.</p><h2>4. Don’t build the model for the UI</h2><h4>Still valid? yes</h4><p><a href="https://lh3.googleusercontent.com/-tdXy67ISKRY/WaXn2isQGcI/AAAAAAAAQ-4/8bVO30KJgckdG--WzxHo-BdpEsMN9mMnwCHMYCw/s1600-h/image%255B55%255D"><img width="550" height="166" title="image" style="display: inline; background-image: none;" alt="image" src="https://lh3.googleusercontent.com/-hFHUfj1uNrM/WaXn3GgVIBI/AAAAAAAAQ-8/sZQTU6n2yGQYiCor7FQBgHcYo7z3RPTbwCHMYCw/image_thumb%255B29%255D?imgmax=800" border="0"></a></p><p>This is specifically referring to the model in your service layer. Many developers surface their service models in their UI, and when a UI-specific property is required, they add it to their service layer model. I’ve done it, but have <a href="https://stackoverflow.com/questions/45485665/mvvm-uwp-template-10-independency-of-model-from-view-technology/45551512#45551512">learned</a>. This axiom is teaching that models in your service layer are for your service layer and your UI layer needs its own models – reuse feels like we’re working smarter but we’re really working so much harder.</p><h2>5. Reference only in one direction</h2><h4>Still valid? yes</h4><p>This is referring to your view-model, that it should not reference your view. It continues that your model would not reference your view-model, though your view-model references your model. This ideal not only keeps things clean, it also prevents hard-coupling that makes new, future features difficult and expensive to add. This axiom is teaching that in MVVM, the view sees the view-model, and the view-model sees the model - not the opposite.</p><h2>6. Have only one view for one view-model</h2><h4>Still valid? yes</h4><p>Some views are nested in other views and have their own reusable view-models. Every view has a view-model, but what do you do when two views are nearly identical? Should they share a view-model. The argument against shared view-models follows the reasoning that views today might change tomorrow, and a single view-model fakes a kind of polymorphism to support it. This axiom is teaching to go ahead, bite the bullet, and create those near-identical view-models for the sake of clarity now and an unforeseen future. </p><h2>7. Use binding</h2><h4>Still valid? yes</h4><p>It’s difficult to imagine a XAML developer not using binding. Without MVVM, it is less relevant, but you can still use it against the code-behind file. Binding and commanding allows you to declare your UI in the XAML designer, minimizing the need for raw, custom code – which will need to be tested manually. This axiom is teaching binding, like several framework features, should be your default approach, not custom-building one.</p><p>I would like to follow-up that binding is notoriously costly when it comes to performance, especially in WPF. But in UWP, compiled binding “{x:Bind}” was introduced to solve the performance issue. With RS3, or the Creators Fall Update, of Windows 10, compiled binding is basically in feature-parity with classic binding “{Binding}” and should be your default, when possible.</p><p>I would also like to follow-up that Commanding, which is an artifact of the binding pattern, allows developers to bind to the Click event of a Button, while maintaining two-way control over the Enabled property of the same Button. With compiled binding, developers can now bind events directly to a method in their view-model fundamentally calling into question the overhead of ICommand. In fact, you’d work hard to convince me to use it (in UWP).</p><h2>8. User Experience trumps Developer Experience</h2><h4>Still valid? yes</h4><p>Well, this one is a painful one. There is an inverse relationship between the user experience and the developer experience. As we discussed above, many patterns introduce some type of cost – a cost almost universally paid by the user. Some patterns slow the app, some complicate the interface, some increase hardware demand. None of these are developer inconveniences. This axiom is teaching that when you weigh the cost/value of any experience, the user experience is, by default, the most important experience in the equation. </p><p>I want to follow-up here with a snippet from another talk I give: The Most Important Goals of Software – things like performance, security, user experience, and scalability. Spoiler alert, the most important is User Acceptance. Here’s the reality: if your users hate your app, your incredible architecture, perf., or devops-process won’t change their minds. You’ve failed.</p><h2>9. Discriminate against code-behind</h2><h4>Still valid? yes</h4><p>Oh, the frustration when talking to a die-hard MVVM developer. It’s a jihad against code-behind, shaming apps with it, banishing developers who do it. Of course, I exaggerate, but many developers lead with the false premise that MVVM is against code-behind. It isn’t. This axiom is teaching that code-behind can have its place, can solve real problems, but should not be preferred. That is to say, code-behind is wrong, except when it isn’t. </p><h2>10. There are no commandments</h2><h4>Still valid? yes</h4><p>Sort of like fanatics of agile methodologies, getting too dogmatic over a design pattern like MVVM doesn’t teach fundamental computer science principles to developers: it frustrates them. Still, MVVM more than most others, is one of the most flexible and fluid design patterns: your implementation and mine may vary vastly, but we are both using MVVM in our XAML apps. Remember, other than having a view-model manage your data, there’s no other fundamental requirement of the MVVM pattern. This axiom is simply teaching: chill out. </p><p>This brings us to the end of reviewing my Ten Commandments of MVVM. For the most part, I think we could agree these are still quite relevant, three years later. Most of them, I might add, will remain valid for a long time. </p><h1>Ben’s deadly sins</h1><p><a href="https://lh3.googleusercontent.com/-F_SSp2O2QIQ/WaXn4NlkSTI/AAAAAAAAQ_A/_NGOflloH1EsRMD3KQHHU8OyWtdc9Zi6gCHMYCw/s1600-h/image%255B7%255D"><img width="545" height="309" title="image" style="display: inline; background-image: none;" alt="image" src="https://lh3.googleusercontent.com/-TD9USqpcIiA/WaXn49P4fNI/AAAAAAAAQ_E/xQ0rAs2JvhkL0YqMG4BOHRQbzovW5n2eQCHMYCw/image_thumb%255B3%255D?imgmax=800" border="0"></a></p><p>Well, here we go, on to Ben Dewey’s deadly sins for XAML developers. These, you will find, are less about the architectural approach to the app, and more the real-world, practical approach by the developer in markup. They are very prescriptive and, as a result, very opinionated. Let’s dig in.</p><h2>1. Thou shalt not use inline styling</h2><h4>Still valid? was it ever?</h4><p>If you have code like this: <font face="Courier New"><TextBox FontSize="16" /></font> then he is recommending that you instead create either <font face="Courier New"><TextBox <font style="background-color: rgb(255, 255, 0);">FontSize="{StaticResource FontSize}"</font> /></font> or <font face="Courier New"><TextBox <font style="background-color: rgb(255, 255, 0);">Style="{StaticResource Size16TextBox}"</font> /></font>. All three approaches are semantically similar, producing the same result, but are not identical in their execution. I think it’s important to remember execution because it impacts the user’s experience the most directly.</p><p>The introduction of a static resource requires the framework to parse and build out that resource before it can assign it to any control’s property. For the sake of reuse, this can be quite valuable to a developer, but let’s not understate that with hundreds or several hundreds of varying controls with similar static styles, the cost to startup is consequential. Is it right to use styles and static resources? Of course. Yes. Should it be a certainty? No. </p><p><em>Aside: I am quite willing to acknowledge care can be taken to reduce the cost and impact of styles and static resources. But, as a general rule, those performance techniques are black magic to the everyday XAML developer, and will not be implemented. It’s because of the latter I think this can’t be a general rule of thumb worth keeping.</em> </p><h2>2. Thou shalt not use hardcode colors</h2><h4>Still valid? yes</h4><p>First of all, I could come up with several scenarios where an in-line, hard-coded color makes perfect sense. But generally speaking, the use of color is an intentional part of the user experience. Because user experiences can change based on Light, Dark, and High Contrast and impact theme resources injected at an application’s highest scope, those colors must not be static. Granted, Ben didn’t sell this rule based on the Themes we introduced to UWP a year after, he sold it based on reuse – a sort repeat of number one. But, that doesn’t matter: Theme resources make rule 2 more valid today than ever. </p><h2>3. Thou shalt not use bitmap icons</h2><h4>Still valid? amen</h4><p>Wow, this was a big problem in 2014 and it’s a bigger problem in 2017. Using bitmap images in your app for any reason introduces an amazing amount of complexity to handle them properly. Depending on the resolution and capability of your monitor, the built-in resource system in the Universal Windows Platform will self-select assets to render on the screen, meaning if you provide the right asset your app will look great and if you don’t it will blow chunks. </p><p><a href="https://lh3.googleusercontent.com/-LMSoj60yXjc/WaXn51jmohI/AAAAAAAAQ_I/JXCsoJHbwWM-quIf5v7OGqu3aqKE6GvYQCHMYCw/s1600-h/image%255B16%255D"><img width="552" height="236" title="image" style="margin: 0px; display: inline; background-image: none;" alt="image" src="https://lh3.googleusercontent.com/-nPMztrIsG3k/WaXn6VxsOOI/AAAAAAAAQ_M/6u0hrTJCNPMDUxWs4qgOT9UslyvCgFh2ACHMYCw/image_thumb%255B6%255D?imgmax=800" border="0"></a></p><p>The solution for bitmaps in UWP is far more elegant than UWP, but even that is a near-nightmare. You provide and decorate a bitmap in various scales, letting the PRI subsystem pick the best option. Windows Store can break scaled groups into separate, downloadable asset packs reducing your installation footprint or initial download size, but you need to know what you are doing. </p><p>There’s just something painful about the near-exponential feel of including the 100% scale, the 150% scale, the 200% scale, the 250% scale, and the 300% scale of every bitmap in your app over and over. I know, sometimes bitmaps are your only option, but in general, they suck donkey. </p><p>Then, using bitmaps in your app can also be dangerous as you gobble up available memory because you improperly decode your images. With RS2, the platform introduced the ability to decode images properly by setting the source of your <font face="Courier New"><Image/></font> tag to a BitmapImage with a DecodePixelType property.</p><blockquote><p><a href="https://docs.microsoft.com/en-us/uwp/api/windows.ui.xaml.media.imaging.bitmapimage#Properties_">MSDN</a>: <a href="https://docs.microsoft.com/en-us/uwp/api/windows.ui.xaml.media.imaging.bitmapimage#Windows_UI_Xaml_Media_Imaging_BitmapImage_DecodePixelType">DecodePixelType</a> can be set to <strong>Logical</strong> or <strong>Physical</strong>. The default value is <strong>Physical</strong>. If <a href="https://docs.microsoft.com/en-us/uwp/api/windows.ui.xaml.media.imaging.bitmapimage#Windows_UI_Xaml_Media_Imaging_BitmapImage_DecodePixelType">DecodePixelType</a> is not set, or set to <strong>Physical</strong>, the image is decoded using <a href="https://docs.microsoft.com/en-us/uwp/api/windows.ui.xaml.media.imaging.bitmapimage#Windows_UI_Xaml_Media_Imaging_BitmapImage_DecodePixelWidth">DecodePixelWidth</a> and <a href="https://docs.microsoft.com/en-us/uwp/api/windows.ui.xaml.media.imaging.bitmapimage#Windows_UI_Xaml_Media_Imaging_BitmapImage_DecodePixelHeight">DecodePixelHeight</a> values that represent physical pixels, and the decode operation uses these values directly. If <a href="https://docs.microsoft.com/en-us/uwp/api/windows.ui.xaml.media.imaging.bitmapimage#Windows_UI_Xaml_Media_Imaging_BitmapImage_DecodePixelType">DecodePixelType</a> is set to <strong>Logical</strong>, the image is decoded using <a href="https://docs.microsoft.com/en-us/uwp/api/windows.ui.xaml.media.imaging.bitmapimage#Windows_UI_Xaml_Media_Imaging_BitmapImage_DecodePixelWidth">DecodePixelWidth</a> and <a href="https://docs.microsoft.com/en-us/uwp/api/windows.ui.xaml.media.imaging.bitmapimage#Windows_UI_Xaml_Media_Imaging_BitmapImage_DecodePixelHeight">DecodePixelHeight</a> values that represent logical pixels. Internal logic converts the decode width and height based on device resolution info and how logical and physical pixels are factored on the target device.</p></blockquote><p>Whew.</p><p>The better approach today is to use PNG or vector XAML paths, but shortly the platform will introduce the capability to natively render SVG (even animated SVG) and eventually colored fonts which can scale endlessly without the need for extra assets, both inside your app and its tile/live tile. </p><h2>4. Thou shalt not set properties manually</h2><h4>Still valid? no</h4><p>The main idea is to not set properties from code-behind. If you read back a few pages, you’ll see my diatribe on code-behind – you can interpolate some of my conclusion from those statements, but setting properties from code-behind is generally wrong. It typically means you are doing things without a view model or, even worse, without using the Visual State Manager. This behavior short circuits the designers ability to help you, check you or preview for you. It also means you can’t use the additional tooling to manipulate the logical tree without potentially breaking your invisible code-behind. </p><p><a href="https://lh3.googleusercontent.com/-NQWFPoet0Jg/WaXn6lbIMwI/AAAAAAAAQ_Q/SarvRNq6VOYtYqO9GXdH0dSUZi7dFjnlwCHMYCw/s1600-h/image%255B20%255D"><img width="455" height="132" title="image" style="display: inline;" alt="image" src="https://lh3.googleusercontent.com/-P8ryDS1ZCBo/WaXn7Mlu4KI/AAAAAAAAQ_U/heLV8KKnK-4kz4lg_801Q1hpWPRbpfFpQCHMYCw/image_thumb%255B8%255D?imgmax=800"></a></p><p><em>Aside: this rule is effectively an argument for MVVM and view-models. As I stated above I love MVVM, but I also disagree that it is a requirement for an excellent XAML application. I will likely always use MVVM in my apps, but I can understand a mindful developer choosing not to, too.</em> </p><p>So, should you set property values of your XAML controls from your code-behind? <strong>Well, generally, no.</strong> But, a developer doesn’t have to introduce view-models, and with the introduction of Composition UI and its incredible, mesmerizing capabilities, many of which are only through code-behind, you can’t say “don’t do it” without a dozen attached caveats, which effectively invalidates the whole notion of a reusable axiom for XAML. </p><h2>5. Thou shalt not duplicate chunks of XAML</h2><h4>Still valid? mostly</h4><p>I would like to dispel a common developer statement: “Don’t repeat code.” This is best characterized as well-meaning stupidity. In a very narrow context, it makes plenty of sense. The more code you write the more code you need to test. Fine. But as a general rule, it coerces developers to introduce abstraction and encapsulation into the nooks and crannies of code, ad nauseam. </p><p>Consider, here, the needless complexity of Class01 over Class02:</p><p><a href="https://lh3.googleusercontent.com/-cNwkPLHVRbY/WaXn7cB9sWI/AAAAAAAAQ_Y/T1AGWe_hqwwVC2wM45vF9GT8d0cI6fgJQCHMYCw/s1600-h/image%255B33%255D"><img width="531" height="392" title="image" style="display: inline; background-image: none;" alt="image" src="https://lh3.googleusercontent.com/-3y-Hdbyt6cI/WaXn79wChGI/AAAAAAAAQ_c/i06TzF2LmuQnmezJRqvAYZqg-bJo_L2KgCHMYCw/image_thumb%255B17%255D?imgmax=800" border="0"></a></p><p>Don’t get me wrong: <em>if you are paid by the hour</em>, then I understand your desire and attraction to Class02, but generally, there’s nothing wrong with letting a developer write code; they are equally testable. And, should we look at real-world examples, we will find applications with so much freaking code abstraction that reasoning over their logic is nearly impossible, and the duplicity saved is measurably trivial. </p><p><strong>But, I digress. </strong></p><p>This XAML rule is based on the precept of not repeating code, which, at its heart is reasonable, just generally inapplicable. That being said, XAML markup is a voluminous syntax that, unless it is precompiled (another condition short-circuiting this axiom), must be read, parsed, loaded and rendered. This processing pipeline is relatively expensive and can be reduced by reusing XAML in user controls, just as this rule prescribes. To that end, this rule is dead on and I follow it myself. But there are too many caveats and asides. This is not a rule, just a good habit for developers to adopt as they code.</p><p><a href="https://lh3.googleusercontent.com/-uYkWEXWjACc/WaXn8d-fgcI/AAAAAAAAQ_g/qrwkBGodBfwPAvXRDXe8xEfkVXshTlCLQCHMYCw/s1600-h/image%255B51%255D"><img width="550" height="171" title="image" style="display: inline; background-image: none;" alt="image" src="https://lh3.googleusercontent.com/-VJ0h25QxG58/WaXn9f-rh6I/AAAAAAAAQ_k/4Sx1Fs03mMMmbZNE8pGlatv4eC2aggdwQCHMYCw/image_thumb%255B27%255D?imgmax=800" border="0"></a></p><p><em>Aside: part of the origin of this rule is a XAML developer’s natural addiction to binding. Because binding decouples logic, binding should be used as infrequently as possible. Yeah, you read that right. Use data binding for connecting your UI to your view-model and models, sure. But don’t go crazy with element binding because it ultimately frustrates real-world debugging of complex UI in significant applications. </em></p><h2>6. Thou shalt not wrap content repeatedly</h2><h4>Still valid? no</h4><p>One of the best qualities of XAML is its ability to re-template any control or container for to meet immediate needs of the UI. Not to be confused with data templates, these are control templates. Now to it: control templates are both XAML’s best feature and XAML’s worst feature. Why? I am glad you asked. </p><p>Have you ever wondered why the out-of-the-box toolbox in Visual Studio is not filled with even more controls than it already has? I mean, really, is it that hard to create a data grid? Well, it turns out, yes. That is to say, when a company like Microsoft makes a control they make it look great, they make it adaptive, they make it low memory, high performance, completely accessible, localizable, and more. Those requirements for first-party controls make their cost high and their construction slow. </p><p>I say all that to say this, when you re-template a control, there’s a 99% likelihood that you are going to mess it up – either the style, accessibility, localization, or the future update of the control’s template when the platform is revved a version or two. Again, we aren’t talking about data templates. It is for this likelihood that this rule that ultimately gravitates developers to the creation of custom controls is inherently problematic. We inevitably forestall the native capabilities of controls when we re-template them. </p><p><a href="https://lh3.googleusercontent.com/-cMRpDZkLYg8/WaXn9vSTJ1I/AAAAAAAAQ_o/GaVW80h8-LkMrSyekIPz2uUeXoVE4R5mwCHMYCw/s1600-h/image%255B37%255D"><img width="491" height="153" title="image" style="display: inline; background-image: none;" alt="image" src="https://lh3.googleusercontent.com/-8UgDDgcOCFo/WaXn9_weiPI/AAAAAAAAQ_s/c-cCG7ZbruooGfi8P6EV6-a19JkhmbDagCHMYCw/image_thumb%255B19%255D?imgmax=800" border="0"></a></p><p>A contrary rule would serve the general XAML community better. Something more like: use the built-in controls and try not to re-template them. They are faster than custom controls. They are more compliant than custom controls. They are, generally speaking, better than custom controls. </p><p><em>Aside: having said all that, if Microsoft can write a good control so can your development team. But, we can all agree ahead of time, such an endeavor is no small task to be “knocked out” in a sprint or two. And, inevitably it will require maintenance as the platform matures. </em></p><h2>7. Thou shalt not use absolute positioning</h2><h4>Still valid? yes</h4><p>Absolute positioning, in XAML, might be best understood as positioning a UI element from 0,0 (or the top-left corner of the viewport). Relative positioning, by contrast moves something closer to or farther from an existing object in an arbitrary location. The RelativePanel, introduced to UWP in Anniversary Update, is a wonderful panel for arranging elements relatively to the panel or siblings within it. Android developers might compare it to RelativeLayout.</p><p>The only times you usually see absolute positioning in XAML is when developers use Canvas (which actually <em>requires</em> absolute positioning) and when a UI element is relocated around the interface by changing its margin. </p><p><a href="https://lh3.googleusercontent.com/-JD_mYvIxynQ/WaXn-dv02qI/AAAAAAAAQ_w/2BO6H1qwfeQG1LiB3i8A2J0OG78I6mwGgCHMYCw/s1600-h/image%255B43%255D"><img width="331" height="52" title="image" style="border-image: none; display: inline;" alt="image" src="https://lh3.googleusercontent.com/-BEKRVeVtpBo/WaXn-6yzWlI/AAAAAAAAQ_0/2c9OpJn38_cyg7VGB08kLvOiPygBDp0xgCHMYCw/image_thumb%255B23%255D?imgmax=800"></a></p><p>We’ve all done it, there’s no reason to pretend I am better than you – especially here. The Visual Studio XAML designer actually does this by default and is sort of to blame for programming bad developer behavior. Once you also set the right and bottom margins, there’s no wonder new developers wrongly conclude that XAML is difficult and unpredictable. It’s a hot mess. </p><p>With the introduction of Windows 10 across various device types including Mobile, IoT, and HoloLens, the adaptive story of UWP apps was pushed to the foreground with force. Developers had to handle the changes of physical dimensions in ways WPF developers generally didn’t. The use of Visual States with the introduction of Adaptive Triggers for Visual States made the arduous task less brutal, but clarified the near-nemesis status of absolute positioning. </p><p>There are fewer and fewer games written in XAML. Frameworks like Unity have made it too simple to make compelling games cross-platform while enjoying C# and the Windows development environment. As a result, games, which were the primary use case for absolute positioning, rarely justify the practice; the presence of absolute positioning is generally a developer error. </p><p><em>Aside, the web has taught us developers a lot about how to build responsive and adaptive user interfaces. XAML has, built-in, corollaries of most of the conventions used on the web; it might even have more when you consider the scope and power of the Visual State Manager. The approach is basically the same – and the distain for absolute positioning is also in web development. </em></p><h1>Reversed</h1><p>I like that Ben turned the negative into positives, I will sign-off with his positive slide. The rules are the same, and the current validity remains the same, but it’s just nicer to be positive instead of negative. I think.</p><p><strong>I wish I could have agreed more. But, I can’t.</strong></p><p><a href="https://lh3.googleusercontent.com/-0KTVqvH1Adw/WaXn_lAFBwI/AAAAAAAAQ_4/vWXw1l334HsQui_29cOFQvKWFM0G6HQiwCHMYCw/s1600-h/image%255B4%255D"><img width="552" height="309" title="image" style="display: inline; background-image: none;" alt="image" src="https://lh3.googleusercontent.com/--jtXSch9DYM/WaXoArh0jHI/AAAAAAAAQ_8/vlseTvdjSBwtgsYiTbny1wsspkHx_SYrACHMYCw/image_thumb%255B2%255D?imgmax=800" border="0"></a></p><p>But wait, didn’t I say I would also discuss Markus Egger’s XAML Anti-Pattern article(s) from Code Magazine? Yes. Yes, I did. But, today is August 29, 2017 and Hurricane Harvey is screwing up Houston and that appears to include the Code Magazine servers, which are down right now. So, I will have to circle back and do it later. And, I think we all know, that means I will never do it. :)</p><p>Best of luck!</p>jerrynixonhttp://www.blogger.com/profile/06978720385628364065noreply@blogger.comtag:blogger.com,1999:blog-8789713.post-42369137949640681502017-08-01T11:53:00.001-06:002017-08-01T14:16:43.043-06:00What is a developer evangelist?<p>Much like asking what is the right way to develop software there are as many answers to that questions as there are people. But, developer evangelism or product evangelism has become a staple of companies wanting to reach a specific demographic in a particularly noisy marketplace. They speak, they listen, they code, they help, they advocate: but, what are they, really?<p><a href="https://lh3.googleusercontent.com/-YUVQdkfglOQ/WYC_VG1AV2I/AAAAAAAAQ7I/9ZqnRnRj2iYOBlNP7D8P5o0Cxvl4uOXewCHMYCw/s1600-h/image%255B8%255D"><img width="552" height="281" title="Microsoft Developer Evanglist, Jerry Nixon" style="display: inline; background-image: none;" alt="Microsoft Developer Evanglist, Jerry Nixon" src="https://lh3.googleusercontent.com/-weIp55iWwiY/WYC_WWAal6I/AAAAAAAAQ7M/11lspSBv_f4w27ZnaoimSr2S80xaV0vZACHMYCw/image_thumb%255B2%255D?imgmax=800" border="0"></a><p><a name='more'></a>
<p>Imagine walking through a food court, looking for lunch. The choices seem endless and the cacophony of smells confounds your palette. Then, you find yourself next to a smiling high school girl holding a sample plate of bourbon chicken. You taste something you might have otherwise missed. You appreciate its texture, its flavor, and you decide it will be your lunch. <p>That girl is an evangelist. <p><a href="https://lh3.googleusercontent.com/-PVSUTAOU-x0/WYC_ciS9CmI/AAAAAAAAQ7Q/j2KManqNhsYPs9HPTGiJs6wLYbEeWd9AgCHMYCw/s1600-h/image%255B2%255D"><img width="552" height="311" title="image" style="margin: 0px; display: inline; background-image: none;" alt="image" src="https://lh3.googleusercontent.com/-wvRqPG48u30/WYC_exhRf6I/AAAAAAAAQ7U/MdJXo_oJlJ8ErbSZTM3_SRfm2VgtVptiACHMYCw/image_thumb?imgmax=800" border="0"></a><p>Imagine strolling through an art museum. Your gaze is captured by the spectacle of a masterpiece. You lean in to appreciate the detail. You lean out to take in the scope. Then, the curator notices your interest. She approaches, explaining its history, the artist, his technique, and why the work is here; you see it for the first time. You even notice something else after she leaves. <p>That girl is an evangelist. <p><a href="https://lh3.googleusercontent.com/-XamoBlIV3XE/WYC_gdaNcHI/AAAAAAAAQ7Y/GXybqPjlClEf72df10RDBKZY4OV5-r92QCHMYCw/s1600-h/WP_20170730_16_51_23_Rich%255B2%255D"><img width="552" height="312" title="WP_20170730_16_51_23_Rich" style="display: inline; background-image: none;" alt="WP_20170730_16_51_23_Rich" src="https://lh3.googleusercontent.com/-ek9-uHqGpf0/WYC_hsiTRuI/AAAAAAAAQ7c/940YQzMxZKkIGwqVOG2RDm7V7qlC9BTVwCHMYCw/WP_20170730_16_51_23_Rich_thumb?imgmax=800" border="0"></a><p>Imagine hiking through the woods. This trail is not new to you, but you hate this next part: it’s perilously steep and slippery. You take a deep breath, but before you descend a ranger calls out from behind you. She explains a local boy scout troop recently constructed some stairs around back. It’s a better way to do the same thing and her suggestion has changed how you will hike this trail. <p>That girl is an evangelist. <p><a href="https://lh3.googleusercontent.com/-XqPAmNTdWh0/WYC_k9eLi0I/AAAAAAAAQ7g/NqQqLZ1TdRcrmhJRTtmi5Yy6rjPKlQFLQCHMYCw/s1600-h/image%255B20%255D"><img width="552" height="293" title="image" style="margin: 0px; display: inline; background-image: none;" alt="image" src="https://lh3.googleusercontent.com/-qBKf1obqel8/WYC_mt3eq2I/AAAAAAAAQ7k/9O6Qo_ube2EyyObiP55twJse1kcZXGmhgCHMYCw/image_thumb%255B6%255D?imgmax=800" border="0"></a><p>Imagine watching your friends bike in the park. You hold your new bike with misgivings – you don’t know how to ride. Your neighbor observes the scene and approaches with her own bike. She explains the parts of her bike and compares it to yours. She demonstrates how to balance, peddle, and brake. She challenges you to try it and waits while you do. Eventually, you get it. <p>That girl is an evangelist. <p><a href="https://lh3.googleusercontent.com/-3CFXySQXYmA/WYC_rK7ymxI/AAAAAAAAQ7o/B_M5jj1ICukjCHIa18EBNB8dMoXhKqvbwCHMYCw/s1600-h/image%255B14%255D"><img width="552" height="317" title="image" style="margin: 0px; display: inline; background-image: none;" alt="image" src="https://lh3.googleusercontent.com/-CBuxQPHrHTU/WYC_s-boHBI/AAAAAAAAQ7s/HTQHykxFh24tFocskzGRg2GWoyJbgrjNQCHMYCw/image_thumb%255B4%255D?imgmax=800" border="0"></a><p>Imagine you’ve decided to build a treehouse. You’re ready to start but aren’t sure how to properly support the flooring. Your friend down the street built her treehouse with her dad last summer. You explain your troubles to her on the bus. With her help and guidance, you know the flooring would be safe. She spends next weekend working with you. Your treehouse is awesome. <p>That girl is an evangelist. <p><a href="https://lh3.googleusercontent.com/-qm9n-175x1M/WYC_xureUhI/AAAAAAAAQ7w/hxZwlBL-oGITiOb8eOEVszD66CLb1xfLgCHMYCw/s1600-h/image%255B23%255D"><img width="552" height="320" title="image" style="margin: 0px; display: inline; background-image: none;" alt="image" src="https://lh3.googleusercontent.com/-02asZa-hwGE/WYC_0Pdj79I/AAAAAAAAQ70/54gfFYQpkpou76QkkoRIlt9lhwAirgFigCHMYCw/image_thumb%255B7%255D?imgmax=800" border="0"></a><p>Imagine fastening your ski boots. You’re about ready when a ski pro descends from on high, revealing the newly arrived demo skis. These aren’t cheap, but they offer more control and speed than any other. She explains and demonstrates their special bindings and unique parabola. You try them; you love them. Without her you would never have known they even existed. <p>That girl is an evangelist.<p><a href="https://lh3.googleusercontent.com/-p8PpS31pJbk/WYC_4q39d9I/AAAAAAAAQ74/9ZG1Z3MbVdUY6pL1zD_VbuX1VVpa06YGQCHMYCw/s1600-h/image%255B26%255D"><img width="552" height="311" title="image" style="margin: 0px; display: inline; background-image: none;" alt="image" src="https://lh3.googleusercontent.com/-u_Q842m33so/WYC_62yqFDI/AAAAAAAAQ78/GcWIkxsp6SI-OsKM6WI4Z38gl5ho_d4mACHMYCw/image_thumb%255B8%255D?imgmax=800" border="0"></a><p>So. What is an evangelist? That’s <em>tricky</em>; an evangelist is not just one thing. An evangelist reminds you of the bourbon chicken, expands your appreciation of a masterpiece, reveals the new way down a familiar trail. She gives you the training and confidence to ride your bike, the knowledge to build your treehouse, and the insight into new discoveries – like skis. What single definition captures all of that and allows for the rest?<p>And, did you notice who is the beneficiary of an evangelist? <p>The beneficiary was actually <em>you </em>in every scenario. So, what is the motivation of a developer evangelist? Is she just a good Samaritan roaming the hills in search of someone in distress? Of course, not. What isn’t obvious in the work of an evangelist is the intentionality of her engagement and the newfound influence earned from that encounter. There’s a deeper intent, but remember a secret agenda doesn’t mean it’s nefarious. A win-win scenario doesn’t mean someone cheated: it means someone worked harder.<p>Consider this. <p>If the food court girl said, “<em>If you like this be sure and taste the Orange Chicken, too</em>.” Would you try it, even if it meant you had to walk out of your way? Probably. If the museum curator said, “<em>If you like this work, be sure to see his magnum opus in the other room</em>.” Would you see it, even if you weren’t planning to visit that room? Probably. If the ranger said, “<em>Keep your eyes open for trash on the trail, there was a wind storm last night</em>.” Would you help the cleanup work? Probably, so. <p>If your neighbor said, “<em>Before you start to ride, be sure you get a helmet</em>.” Would you wear a helmet, even if you had to run home to get it? Probably. If your friend said, “<em>I want to use screws instead of nails on your treehouse</em>.” Would you use screws instead of nails? Probably. And, if the ski pro said, “<em>I’ve found these skis perform best with this kind of wax</em>.” Would you use the suggested wax? Probably. <p><a href="https://lh3.googleusercontent.com/-orBau6rSVRM/WYC_-PIi8sI/AAAAAAAAQ8A/l_l8d34wVwEZQrWPCDitx8Q1QxtG7nDwwCHMYCw/s1600-h/image%255B29%255D"><img width="552" height="319" title="image" style="display: inline; background-image: none;" alt="image" src="https://lh3.googleusercontent.com/-OYutImSGRyg/WYC__d9x3bI/AAAAAAAAQ8E/zprabKWdyr0MuM-xj0ghI7xd__W8H-ICACHMYCw/image_thumb%255B9%255D?imgmax=800" border="0"></a></p><p>Look closely and think. In each of those examples, the evangelist is influencing your behavior – not by threatening you, not by scaring you, not by trumping you, but instead by earning the right to ask. But it’s funny, what they want, you inexplicably also want. Your gratitude quells your hesitation; you are inexplicably compliant. You like the evangelist at this point. You are grateful, dialed-in, and willing. And, more importantly, you win. Right?<p>But, who’s the <em>real </em>beneficiary of an evangelist? Is it you or the fast food restaurant? Is it you or the museum? Is it you or the ranger’s agenda to pick up trash? Is it you or your neighbor’s goal of bicycle safety? And, so on. The answer to the question (who is the beneficiary?) is about as tricky as: What is an evangelist? Why? Because we are looking for a single, simple answer when it is complex and nuanced. Still, complex problems can be solved, and sophisticated terms can be defined. Let’s circle back to where we started.<p>What is an evangelist? </p><p><a href="https://lh3.googleusercontent.com/-EyWdYWMNUMc/WYDAFrnNl1I/AAAAAAAAQ8I/4fgsQIIh20QveKA0Fg9ZuSGml51M1lqKQCHMYCw/s1600-h/image%255B32%255D"><img width="552" height="331" title="image" style="display: inline; background-image: none;" alt="image" src="https://lh3.googleusercontent.com/-qTmegczNJDs/WYDAINUPdTI/AAAAAAAAQ8M/ym7iXCbJEfUMJfg397tCtTRc-NztjoOSACHMYCw/image_thumb%255B10%255D?imgmax=800" border="0"></a></p><p>Maybe an evangelist is someone who changes your behavior after they have earned the right to ask. Someone who inspires you to try harder and do better by demonstrating how. Someone who teaches what they know, while learning constantly so she has something to share. Someone with her ear to the ground and eye to the sky, keeping you informed and up-to-date to changes in the wind. Someone you enjoy having around, someone you listen to, someone you ask for help, someone you trust, and like. Someone who puts in the real effort, and is clearly on your side, wanting you to be better in ways that matter.<p>Or, maybe it’s something else. jerrynixonhttp://www.blogger.com/profile/06978720385628364065noreply@blogger.comtag:blogger.com,1999:blog-8789713.post-61059381799499331172017-07-25T16:02:00.001-06:002017-07-26T11:52:46.590-06:00Login to your UWP with your MSA<p>Here’s the idea, you want your UWP user to login with their MSA so you can get their information, access OneDrive, Outlook, Office, Rome devices or just their profile photo and name. Whatever the reason, it’s more simple than you think.</p><blockquote><p>Please note: <strong>the Live SDK </strong>we used to use for this has been deprecated and now we use <strong>Microsoft Graph </strong>for just about everything around authentication & access.</p></blockquote><p><strong>Here are your four easy steps to follow:</strong></p><ol><li>Register your app @ <a href="http://apps.dev.microsoft.com">http://apps.dev.microsoft.com</a></li><li>Add your ClientID & ReturnURL to app.xaml Resources</li><li>Copy <a href="https://gist.github.com/JerryNixon/66d5a235e5d394ec26272899f9231499">AuthenticationHelper.cs</a></li><li>Nuget packages</li><ol><li>PM> <font face="Courier New">Install-Package Microsoft.Graph</font></li><li>PM> <font face="Courier New">Install-Package Microsoft.Identity.Client –pre</font></li></ol></ol><p><strong></strong></p> <a name='more'></a> <p><strong>Step 1: Register your app</strong></p><p>Your app can’t do special things until you tell Microsoft’s developer portal your plans. This helps the app police turn off capabilities when malicious apps written by evil developers start to take advantage of naïve users. </p><p><a href="https://lh3.googleusercontent.com/-8Za0WVIyKKA/WXe_z6KXpBI/AAAAAAAAQ5g/sTLjCYUW7bA5Dgck3GfppYidLzfmPg9GACHMYCw/s1600-h/image%255B20%255D"><img width="552" height="491" title="image" style="border: 0px currentcolor; border-image: none; display: inline; background-image: none;" alt="image" src="https://lh3.googleusercontent.com/-eNvBUePV9-E/WXe_0oGE8uI/AAAAAAAAQ5k/oMYAnbIn_h0avuPXMNirolHGtRFvD5cMQCHMYCw/image_thumb%255B18%255D?imgmax=800" border="0"></a></p><p>This is all the information the portal asks. Pretty simple. Fill in your basic information here, and the portal will, in turn, give you credentials.</p><p><a href="https://lh3.googleusercontent.com/-aYHv4bKuhpk/WXe_0zoB2zI/AAAAAAAAQ5o/ioAds3INSvg9nkbBmJpvfr0TH7xfPUxhQCHMYCw/s1600-h/image%255B53%255D"><img width="552" height="524" title="image" style="display: inline; background-image: none;" alt="image" src="https://lh3.googleusercontent.com/-VWzHy3iEqfY/WXe_1sUD_RI/AAAAAAAAQ5s/Tvn09e3PUg0AksehCeR1xBQllyZNMC42ACHMYCw/image_thumb%255B29%255D?imgmax=800" border="0"></a></p><p>Make sure your app has a ReturnUrl by adding a Web platform and giving it a valid URI as the Redirect URL. You will need this for authentication.</p><p><a href="https://lh3.googleusercontent.com/-FkHDySlEZ_s/WXe_2KXy2qI/AAAAAAAAQ5w/VjVxxTMFWmgN1wm3nf81wsVQ_cGYNkSZwCHMYCw/s1600-h/image%255B43%255D"><img width="552" height="411" title="image" style="margin: 0px; display: inline; background-image: none;" alt="image" src="https://lh3.googleusercontent.com/-8m5bk9O1Q6w/WXe_2a-v_FI/AAAAAAAAQ50/E2YkwelDMjca1iQ9IZF8sdOeiLc6H7mHQCHMYCw/image_thumb%255B25%255D?imgmax=800" border="0"></a></p><p><strong>Step 2: Adding your ClientID and ReturnUrl to app.xaml</strong></p><p>The name of these resources is hard-coded in the SAL helper we will copy into our project later on. So, copy this exactly. Change it will require you change the SDK helper. That’s fine if you need to do it. But not necessary.</p><p><a href="https://lh3.googleusercontent.com/-O6wQd9byeRg/WXe_2vORmQI/AAAAAAAAQ54/Q7Bb9-03zyE6VojOqYSoAIVGrWlhhqOKACHMYCw/s1600-h/image%255B46%255D"><img width="552" height="85" title="image" style="margin: 0px; display: inline; background-image: none;" alt="image" src="https://lh3.googleusercontent.com/-V6BW4lYlw4o/WXe_3IbZquI/AAAAAAAAQ58/a7CIDB2zN9UTX1O01whZvQvcBhbelgrxgCHMYCw/image_thumb%255B26%255D?imgmax=800" border="0"></a></p><p><strong>Step 3: Copy AuthenticationHelper.cs</strong></p><p>I copy this into a /Microsoft folder. You can put it anywhere. In fact, you can just open it and steal all the helper code if that’s what you want. But remember, it works out of the box and change is not necessary.</p><p><a href="https://lh3.googleusercontent.com/-hLMZm8Rkhj4/WXe_4u84MDI/AAAAAAAAQ6A/bKQ8Tw5kb109iUBD8poyegp1iq_-iJRhwCHMYCw/s1600-h/image%255B49%255D"><img width="552" height="363" title="image" style="margin: 0px; display: inline; background-image: none;" alt="image" src="https://lh3.googleusercontent.com/-oxR3PSXDyaE/WXe_5GbKQuI/AAAAAAAAQ6E/ftbjPd6cb4klEcKykFxbkJO_hnbNfiD7QCHMYCw/image_thumb%255B27%255D?imgmax=800" border="0"></a></p><p>Get the code here: <a title="https://gist.github.com/JerryNixon/66d5a235e5d394ec26272899f9231499" href="https://gist.github.com/">https://gist.github.com/</a></p><p><strong>Step 3: Nuget things </strong></p><p>There are several things you need to add to make this work, including the Graph SDK. As of today (7/2017) the Microsoft.Identity.Client is in preview. So, make note of that since NuGet doesn’t pull preview items by default.</p><table width="550" bgcolor="black" border="10" cellspacing="0" cellpadding="10">
<tbody>
<tr>
<td valign="top"><font color="#ffffff" face="Courier New">PM> Install-Package Microsoft.Graph</font></td>
</tr>
</tbody>
</table>
<p>And, the other one.</p><table width="550" bgcolor="black" border="10" cellspacing="0" cellpadding="10"><tbody><tr><td valign="top"><font color="#ffffff" face="Courier New">PM> Install-Package Microsoft.Identity.Client –pre</font></td></tr></tbody></table><p>Step 4: Use it!</p><p>Here’s a simple little method I wrote to help with login, maybe this will help you, too. I made it a Try method because login doesn’t always work.</p><p> <a href="https://lh3.googleusercontent.com/-DtxqEu23mOE/WXe_5sbBbvI/AAAAAAAAQ6I/zaKJGUbg2u8coegW5hqYr2zA35aifXdVgCHMYCw/s1600-h/image%255B56%255D"><img width="552" height="303" title="image" style="margin: 0px; display: inline; background-image: none;" alt="image" src="https://lh3.googleusercontent.com/-eov7gFBXhhw/WXe_6GrB8pI/AAAAAAAAQ6M/TaJaactjNTYBwP-NMLXDewIAxahCTv0TQCHMYCw/image_thumb%255B30%255D?imgmax=800" border="0"></a></p><p>If it’s the user’s name you want, you can do it by requesting it from the client through the async method, like this: </p><p><a href="https://lh3.googleusercontent.com/-3Zgjg-uwgx0/WXe_6Ziby7I/AAAAAAAAQ6Q/hztBjN43XQ869aPVew8JRNto139S7O7vACHMYCw/s1600-h/image%255B59%255D"><img width="552" height="70" title="image" style="margin: 0px; display: inline; background-image: none;" alt="image" src="https://lh3.googleusercontent.com/-21-VKTHrgLs/WXe_6-OF6vI/AAAAAAAAQ6U/VbsSBmJanK0ThFKEBwINfSeRw7m7ESXbACHMYCw/image_thumb%255B31%255D?imgmax=800" border="0"></a></p><p><strong>Security</strong></p><p>If you app is ever compromised, you can always nuke it from the developer portal and remove all access and it’s associated secrets, just like I did with the sample app I created for this blog article. Be careful.</p><p><a href="https://lh3.googleusercontent.com/-vNXUPB5LSo4/WXe_7FEgEGI/AAAAAAAAQ6Y/5ro4QxbJW1Um2EtwY9TisO6eG7tHMWlOACHMYCw/s1600-h/image%255B62%255D"><img width="552" height="306" title="image" style="margin: 0px; display: inline; background-image: none;" alt="image" src="https://lh3.googleusercontent.com/-mGnYZloJ9Z8/WXe_7l0E_aI/AAAAAAAAQ6c/BGHO42kw3DE9B6xEdRz_BSLEIs5byjw1wCHMYCw/image_thumb%255B32%255D?imgmax=800" border="0"></a></p><p>Best of luck. Happy coding!</p>jerrynixonhttp://www.blogger.com/profile/06978720385628364065noreply@blogger.comtag:blogger.com,1999:blog-8789713.post-9126186297553550802016-10-24T15:55:00.001-06:002016-10-24T16:27:51.835-06:00Set up Xbox One for UWP development<p>Since Anniversary Update (Windows 10 1607) Xbox One has supported UWP developers and the Windows Store has supported UWP apps targeting Xbox One. You can use any Xbox One as a developer machine. This blog will walk you through the process of setting it up. It's a lot of steps, but pretty easy.</p> <h2>First, what are the prerequisites?</h2> <ol> <li>An Xbox One with local, shared network access</li> <li>Visual Studio 15 Preview 5 (or VS 2015 Update 3+) </li></ol> <h2>Search for the Dev Mode Activation app in the Store</h2> <p><a href="https://lh3.googleusercontent.com/-4bPshvPyCZQ/WA6Clj31n7I/AAAAAAAAQq0/_czw098nY8M/s1600-h/image%25255B7%25255D.png"><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; margin: 0px; display: inline; padding-right: 0px; border-top-width: 0px" border="0" alt="image" src="https://lh3.googleusercontent.com/-zxIxRchVtCo/WA6CmkIBCFI/AAAAAAAAQq4/w5Cc7lAZVog/image_thumb%25255B3%25255D.png?imgmax=800" width="548" height="316"></a></p> <a name='more'></a> <h2>Run the Dev Mode Activation app</h2> <p><a href="https://lh3.googleusercontent.com/-pr6b77rM4-w/WA6CoLx0MlI/AAAAAAAAQq8/xqeJxS0jSsk/s1600-h/image%25255B10%25255D.png"><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; margin: 0px; display: inline; padding-right: 0px; border-top-width: 0px" border="0" alt="image" src="https://lh3.googleusercontent.com/-JnZSm0xRKh0/WA6CpmPCE2I/AAAAAAAAQrA/4YMKwiqy9cI/image_thumb%25255B4%25255D.png?imgmax=800" width="550" height="297"></a></p> <h2>Read the legal disclaimers and stuff</h2> <p><a href="https://lh3.googleusercontent.com/-KLEUhHSV1UQ/WA6CrpZCLjI/AAAAAAAAQrE/6r0_E9kQ-J4/s1600-h/image%25255B13%25255D.png"><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; margin: 0px; display: inline; padding-right: 0px; border-top-width: 0px" border="0" alt="image" src="https://lh3.googleusercontent.com/-ODMsUevG6q4/WA6CtG0WCoI/AAAAAAAAQrI/TpxuIeX2SIc/image_thumb%25255B5%25255D.png?imgmax=800" width="550" height="308"></a></p> <h2>Make sure your PC is ready</h2> <p><a href="https://lh3.googleusercontent.com/-rSoZG9h65iY/WA6Cupkn5cI/AAAAAAAAQrM/QMKVrZZhz14/s1600-h/image%25255B16%25255D.png"><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; margin: 0px; display: inline; padding-right: 0px; border-top-width: 0px" border="0" alt="image" src="https://lh3.googleusercontent.com/-LehDfeB7L9o/WA6CxNxt9RI/AAAAAAAAQrQ/cTHEJT5dPS4/image_thumb%25255B6%25255D.png?imgmax=800" width="550" height="309"></a></p> <h2>Activate your console (on the Xbox)</h2> <p><a href="https://lh3.googleusercontent.com/-MnO5LhR0Q3o/WA6CyLLnc2I/AAAAAAAAQrU/vUQ1rTQd6iI/s1600-h/image%25255B19%25255D.png"><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="https://lh3.googleusercontent.com/-KT4M93oxym8/WA6Cz1cGyjI/AAAAAAAAQrY/OvD5dNQjJh0/image_thumb%25255B7%25255D.png?imgmax=800" width="550" height="309"></a></p> <h2>Activate your console (on the PC)</h2> <p><a href="https://developer.microsoft.com/xboxactivate">https://developer.microsoft.com/xboxactivate</a> </p> <p><a href="https://lh3.googleusercontent.com/-wRndrECduQw/WA6C1xSSm2I/AAAAAAAAQrc/J_82DsNrHJ0/s1600-h/image%25255B23%25255D.png"><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="https://lh3.googleusercontent.com/-4UMSriQTONU/WA6C4JxsZaI/AAAAAAAAQrg/49FjLE5nPiY/image_thumb%25255B9%25255D.png?imgmax=800" width="550" height="399"></a></p> <h2>Switch to developer mode</h2> <p><a href="https://lh3.googleusercontent.com/-o0tDNTmptNA/WA6C6FxHlRI/AAAAAAAAQrk/7ep6Ry-Gr48/s1600-h/image%25255B26%25255D.png"><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; margin: 0px; display: inline; padding-right: 0px; border-top-width: 0px" border="0" alt="image" src="https://lh3.googleusercontent.com/-YNx9rmJY1z0/WA6C8yladBI/AAAAAAAAQro/oS5oXmu0AfA/image_thumb%25255B10%25255D.png?imgmax=800" width="550" height="309"></a></p> <h2>After you reboot (this is a brand new environment)</h2> <ol> <li>Reconnect to your network (I use my wireless network)</li> <li>Sign-in again with your Xbox live account</li> <li>I chose a unique color (green)</li></ol> <p><a href="https://lh3.googleusercontent.com/-dNTH_Bb2hgU/WA6C-bKGWTI/AAAAAAAAQrs/w0kXX7eVk-I/s1600-h/image%25255B32%25255D.png"><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="https://lh3.googleusercontent.com/-kxcNBcxI8lU/WA6C_jxztRI/AAAAAAAAQrw/JVOJrIxlrMQ/image_thumb%25255B12%25255D.png?imgmax=800" width="550" height="309"></a></p> <h2>Launch Dev Home</h2> <p><a href="https://lh3.googleusercontent.com/-kSaIXcFVhcI/WA6DATcKjdI/AAAAAAAAQr0/JcdBDP43TTU/s1600-h/image%25255B35%25255D.png"><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; margin: 0px; display: inline; padding-right: 0px" border="0" alt="image" src="https://lh3.googleusercontent.com/-PXDXGJu6hBc/WA6DB2lny4I/AAAAAAAAQr4/iSdWSNP8u-M/image_thumb%25255B13%25255D.png?imgmax=800" width="550" height="309"></a></p> <h2>Remember your Xbox One IP address</h2> <p><a href="https://lh3.googleusercontent.com/-GzF_COsk50I/WA6DEomP2_I/AAAAAAAAQr8/tMImtJiwRVc/s1600-h/image%25255B58%25255D.png"><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; margin: 0px; display: inline; padding-right: 0px" border="0" alt="image" src="https://lh3.googleusercontent.com/-qn7r-hKzxEA/WA6DHmvZv1I/AAAAAAAAQsA/xD7NcgH8ShI/image_thumb%25255B22%25255D.png?imgmax=800" width="550" height="309"></a></p> <h2>Click Pair with Visual Studio</h2> <p><a href="https://lh3.googleusercontent.com/-8z2YtlZ3ADA/WA6DJ5BrEWI/AAAAAAAAQsE/oKTxYulLaHM/s1600-h/image%25255B65%25255D.png"><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; margin: 0px; display: inline; padding-right: 0px" border="0" alt="image" src="https://lh3.googleusercontent.com/-0zbexfK4uv8/WA6DKci3WqI/AAAAAAAAQsI/wAi8Qjnsv4A/image_thumb%25255B25%25255D.png?imgmax=800" width="550" height="309"></a></p> <h2>Remember the Visual Studio Pairing Pin</h2> <p>This value will actually timeout. You may need to repeat this step again, later if you are slow to get Visual Studio ready to pair with your Xbox One. It's okay.</p> <p><a href="https://lh3.googleusercontent.com/-0ur3MlMVHqo/WA6DKhaLBTI/AAAAAAAAQsM/E9qJlLP-ROc/s1600-h/image%25255B62%25255D.png"><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; margin: 0px; display: inline; padding-right: 0px" border="0" alt="image" src="https://lh3.googleusercontent.com/-PpiDxX8IHXo/WA6DLFYTGZI/AAAAAAAAQsQ/TlRtGE-hdMY/image_thumb%25255B24%25255D.png?imgmax=800" width="550" height="291"></a></p> <h2>(Back on your PC) Create a new UWP app</h2> <p><a href="https://lh3.googleusercontent.com/-f-NBcBNrYqw/WA6DMKhwSGI/AAAAAAAAQsU/SWUqPfhLAKc/s1600-h/image%25255B42%25255D.png"><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="https://lh3.googleusercontent.com/-rAf9EPU0EPE/WA6DMr2WnxI/AAAAAAAAQsY/Yepl2o1c6YE/image_thumb%25255B16%25255D.png?imgmax=800" width="550" height="381"></a></p> <h2>The target version must be set to 14393 or higher. </h2> <p><a href="https://lh3.googleusercontent.com/-cSYhoxXE33s/WA6DM_fq6gI/AAAAAAAAQsc/2sIBpH0bdJ4/s1600-h/image%25255B41%25255D.png"><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; margin: 0px; display: inline; padding-right: 0px" border="0" alt="image" src="https://lh3.googleusercontent.com/-f4YvU1HevPA/WA6DNjIr1ZI/AAAAAAAAQsg/k8YdD4VMx-g/image_thumb%25255B15%25255D.png?imgmax=800" width="550" height="222"></a></p> <h2>Change Project > Properties > Debug > Target Device to "Remote Machine"</h2> <p><a href="https://lh3.googleusercontent.com/-eN3syJ4-8Ng/WA6DOxQy4kI/AAAAAAAAQsk/WQGIJEXOhXI/s1600-h/image%25255B46%25255D.png"><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="https://lh3.googleusercontent.com/-cXN8irZDrTA/WA6DPiF39pI/AAAAAAAAQso/chKW_Y0hvXE/image_thumb%25255B18%25255D.png?imgmax=800" width="550" height="381"></a></p> <h2>Type in your Xbox One IP Address (from Dev Home) & click find</h2> <p><a href="https://lh3.googleusercontent.com/-UxK04uFTA4s/WA6DQgICzPI/AAAAAAAAQss/nfc54dqLXEI/s1600-h/image%25255B59%25255D.png"><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="https://lh3.googleusercontent.com/-c1cV5UpQwzY/WA6DReCnu-I/AAAAAAAAQsw/rmLagFS6rfs/image_thumb%25255B23%25255D.png?imgmax=800" width="550" height="381"></a></p> <h2>Hit F5 and enter your Pairing pin</h2> <p><a href="https://lh3.googleusercontent.com/-uotxyBP6gI0/WA6DSa2n8OI/AAAAAAAAQs0/lNoqZqrYB-U/s1600-h/image%25255B73%25255D.png"><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="https://lh3.googleusercontent.com/-DGs_hzi64Z0/WA6DS47jYiI/AAAAAAAAQs4/LRAMTMzGOaE/image_thumb%25255B29%25255D.png?imgmax=800" width="550" height="383"></a></p> <p>Your first UWP app will build, deploy and run. It will likely be plain white and won't be all that sexy to look at. But, you're running on an Xbox. </p> <p>Congratulations.</p>jerrynixonhttp://www.blogger.com/profile/06978720385628364065noreply@blogger.comtag:blogger.com,1999:blog-8789713.post-89212179314791931642016-08-26T22:51:00.001-06:002016-08-26T23:52:53.883-06:00Is Windows Phone still a good option?<p>There is considerable uncertainty around Windows phone. I would like to talk through some of that. And I would like to evaluate if Windows phone is still a good choice for me. Not you, me. I am thinking out loud here, hoping my thought process will help you as you contemplate switching to or from Windows phone. <img title="View source image" alt="Image result for microsoft windows 10 mobile " src="https://www.404techsupport.com/wp-content/uploads/2015/06/windows10.gif" width="560" height="312"></p> <a name='more'></a> <p><strong>Simpler support</strong></p> <p>My goal was to simplify my support calls. As the most technical member of my family, and an employee of Microsoft, I am generally the go-to tech support for every person in my family for phone, desktop, Xbox, thermostats, you name it. Since Windows phone 8, I have insisted on Windows phones to anyone in my family who wanted my help. Why? Because it is what I carry. </p> <p><strong>Easy to use</strong></p> <p>There was a beautiful side-effect to the Windows phone; it is extremely easy-to-use. As adults in my family started getting Windows phones, the support calls didn’t happen. It made sense. And, it’s simplicity made the occasional quirk easy to tolerate. Before I knew it, Christmas came around and people had installed games, were using camera lenses, and sharing through OneDrive. </p> <p><img title="View source image" alt="Image result for windows phone easy to use" src="http://i.stack.imgur.com/HCh0B.png" width="550" height="224"></p> <p>I might be willing to give an IPhone to my mom. It’s pretty easy to use, too. But I would not wish an Android on my worst enemy. Usability is the Achilles heel for Android. No thanks. </p> <p><strong>Family safety</strong></p> <p>For my kids, Windows phone was a no-brainer. They’re young. My goal was to keep them safe online, and every Windows device has Family Safety so I can trust devices in their hands. If they had IPads, Kindles, Androids, and an PS4 – I would need to figure out all those parental control systems. I would have missed something creating a hole. With a Surface, a Windows phone, and an Xbox my kids have one child account I can manage and monitor.</p> <p><img title="View source image" alt="Image result for microsoft family sfety" src="http://cdn5.howtogeek.com/wp-content/uploads/2014/11/sshot-3-2.png3.jpg" width="550" height="158"></p> <p>Does the IPhone have parental controls? You bet. So does Android and the Kindle. But do they coordinate? When I limit my kids to 1 hour a day, is that across devices? Yes, on Windows. </p> <blockquote> <p>Family safety: <a href="http://fss.live.com">http://fss.live.com</a> </p></blockquote> <p><strong>The right hardware</strong></p> <p>For my family, a $600 IPhone was never on the table. But a Lumia? No problem. Windows phones were always reasonable. Lumia devices ranged from premium flagships to $50 smartphones with nice hardware specifications. Most everyone carried the solid Lumia 920 for years and years. Even today, the Lumia 640 is only $150 running Windows 10 mobile. I currently carry the Microsoft Lumia 950 XL; my wife carries the Lumia 950, my father-in-law caries the 1020. </p> <p><img title="View source image" alt="Image result for lumia devices" src="http://www.windowsteca.net/wp-content/uploads/2013/01/NokiaLumiaDevicesWP7.8.jpg" width="550" height="405"></p> <p>You might want to argue that an IPhone is affordable. But because they are so fragile, I would argue they aren’t. I don’t think my kids have a friend with an IPhone that isn’t cracked. It’s certainly true that you can purchase a cheap Android. I have several. The emphasis is on cheap, though. Total crap. The most noticeable aspect of low-end Windows phones is how well they perform. It’s nice. </p> <p><strong>The right carrier</strong></p> <p>I live in the mountains of Colorado where Verizon typically has the best coverage. But I didn’t want Verizon. I wanted AT&T. They are more aggressive to adopt new hardware. I like that and LTE. Their expanding network and my internet-based micro cell soon made coverage issues moot. Today, LTE networks (like AT&T) support Windows phone the most. I lucked out there. Had I chosen Verizon early on, I would be wringing my hands to switch carriers. </p> <p><img title="View source image" alt="Image result for at&t store windows phone" src="http://collegetownrochesterny.com/wp-content/uploads/2014/12/ATT-Mobile-Phone-Wireless-Logo-Store-Window.jpg" width="550" height="313"></p> <p>An unlocked Windows phone can be used on basically any network except Verizon. For Verizon I would need to purchase a Lumia Icon. That’s a nice phone, but shamefully difficult to procure. We might never agree on AT&T. That would not be a show stopper, but it would sure limit options. </p> <p><strong>Groove music</strong></p> <p>Since Xbox Music first offered subscription music, I’ve been a paying customer. When it rebranded to Groove, I continued my patronage. The idea of unlimited music across millions of songs is awesome. Today, such a service is far less novel. But it used to be quite a parlor trick to have any song in my pocket anytime I wanted it. Because it worked on Windows and Xbox, it was a terrific service my whole family could enjoy. Today, Groove is on every platform including Windows. </p> <p><a href="https://lh3.googleusercontent.com/-oOuQJGNl9d8/V8EqH2AYLyI/AAAAAAAAQmY/dIvyaqcoIH8/s1600-h/image%25255B4%25255D.png"><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="https://lh3.googleusercontent.com/-PqoswuLnqhA/V8EqLXo4A4I/AAAAAAAAQmc/08yC3PTzXBM/image_thumb%25255B2%25255D.png?imgmax=800" width="550" height="240"></a></p> <p>Spotify is a fine service, by the way. Unlike Groove, a Spotify account can be shared within a family. That’s nice. I’m pretty sure a Microsoft Family pass is in the wings, but until we actually see Big Foot I won’t hold my breath. Aside from that, Groove is terrific. Apple’s subscription has a long way to compete, if you ask me. But it’s also the most recent entry. They will grow up fast. </p> <blockquote> <p>Groove: <a title="https://www.microsoft.com/groove" href="https://www.microsoft.com/groove">https://www.microsoft.com/groove</a></p></blockquote> <p><strong>Microsoft Office</strong></p> <p>I want Office on my phone. It’s only recently Office is available for IPhone or Android. The web version used to be weak; having native, mobile Office on my phone was downright handy. It was uncommon for me to edit a spreadsheet on my phone, but on more than one occasion I can recall actually doing it. How empowering. Today, because I speak so frequently I regularly do so with my phone, without a laptop. </p> <p><img title="View source image" alt="Image result for office 365 windows phone" src="http://gcits.com.au/wp-content/uploads/Office365WindowsPhoneApps.png" width="550" height="337"></p> <p>For a while, the IPhone and Android Office apps were better than the Windows phone versions of the same. Today, “Best on Windows” is undisputed. It was painful waiting for it. Now, from feature list to integration, Microsoft Office is a brilliant experience on almost every Windows device family. I could likely accomplish the same on any IPhone or Android device, but I’m a fan of integration. </p> <p><strong>OneDrive</strong></p> <p>I used to seriously envy DropBox users. But, those days are far behind me. The reliability of OneDrive is almost as nice as the ubiquity of it across all my devices and apps. I have Office 365 for Home, which gives all five of us Office 2016 and 1TB of OneDrive storage. It’s a lot. </p> <p>Even cooler is how I can drag music into my wife’s OneDrive and her Groove player instantly sees it and streams it. The same is true with videos and photos. And when they share with me, my quota doesn’t change. Shame on you DropBox. </p> <p><img title="View source image" alt="Image result for onedrive" src="http://teachthought.com/wp-content/uploads/2014/07/onedrive.jpg" width="550" height="312"></p> <p>There’s another feature of OneDrive that has really been a crowd-pleaser. After a week or weekend of adventure, I get an email from OneDrive – my event recap. Automatically, OneDrive generates a photo collage using the geoposition and timestamp from my photos to recognize and group them. It creates subject-focused thumbnails arranged in a thoughtful collage I can forward to my friends. Pretty cool.</p> <p><strong>Xbox</strong></p> <p>Life is a little too short to play video games. But my kids don’t think that way. They are constantly editing their avatar’s outfits on their tablets. When we play games our Xbox game score changes and our achievements are all in one place. If I have to play video games, I might as well get some props for how well I defend my base in Microsoft’s Geodefense Swarm on my phone. And, did I mention that Xbox is just another part of Family Safety? I can limit my kids’ gameplay and their in-app purchases, too. </p> <p><img title="View source image" alt="Image result for xbox smartglass" src="http://screenshots.en.sftcdn.net/en/scrn/69671000/69671822/xbox-one-smartglass-27-700x393.jpg" width="550" height="312"></p> <p>Xbox Smart Glass is basically a remote control for your Xbox. Because my kids watch movies and play games through our Xbox while I am on a date with my wife, I can pull up Smart Glass and look at what they are watching, even buy a movie for them without having to reveal my password over the phone. That’s not just a gimmick, that’s freaking handy. </p> <p><img title="View source image" alt="Image result for windows phone miracast" src="http://www.windowsclub.com.br/wp-content/uploads/2014/05/miracast-windows-phone-como-usar.jpg" width="550" height="355"></p> <p><strong>Cortana</strong></p> <p>Now that we have an Amazon Alexa in the house, Cortana isn’t quite the thrill she used to be. Can she tell me a joke? Yes. Can she manage my calendar? Yes. Is that worth it? Yes. I travel a lot, saying things like “Take a note, I parked on level 3” is important to me. Saying “Remind me to get plunger when I get to Home Depot” can be a matter of life and death in our household. Now that Cortana shares her notebook across all my Windows devices, it has relegated Alexa back to a $200 kitchen timer. </p> <p><img title="View source image" alt="Image result for windows phone cortana" src="https://i.ytimg.com/vi/nX9P6skzZNU/maxresdefault.jpg" width="550" height="310"></p> <p>There’s really no point in talking about Siri at this point. As handy as Siri can be on a discrete set of tasks on an IPhone, Siri is nothing compared to Alexa, let alone Cortana. I am glad IPhone users can make hands-free calls while driving. But there’s no comparison with the system integration and app extensibility of Cortana, especially when you consider the intense machine learning behind her. </p> <p><strong>Live tiles</strong></p> <p>You knew I would eventually get here, right? If there is one distinct user affordance on any Windows device, it’s live tiles. This is my ability to pin apps I use to my Start menu. But, more importantly, it’s an apps ability to push information to me so I don’t need to launch it. </p> <p>As handy as a push notification is (every platform has that) they are intrusive and transient. My primary and secondary live tiles collectively create a personalized dashboard of what I care about the most. It’s invaluable. </p> <p><img title="View source image" alt="Image result for lumia pureview" src="http://cdn.slashgear.com/wp-content/uploads/2013/05/nokia_lumia_925_pureview_camera.jpg" width="550" height="318"></p> <p>Over the years, other platforms have added numbers to their app icons. But consider how Apple implements theirs. The number on their email app represents how many unread items are in your inbox. That’s not useful. In Windows phone, the number represents new unread items since you last looked. That’s freaking awesome – and that’s the definition of useful. </p> <p>Android has also introduced little widgets you can add to their Start screen. These are nice, but they are missing one thing that Live tiles bring to Windows. Live tiles are efficient. They aren’t a drain. They aren’t a feature you go turn off because they are slowly killing your battery life and performance. Android widgets, on the other hand, are exactly that. </p> <p><strong>The pure view camera</strong></p> <p>I don’t carry a low-end Lumia. I carry a high-end device with Zeiss optics and Nokia’s Pure view technology. What does that mean? When I hold my camera up next to a friend’s IPhone and we take the same shot, mine is always better. Always. When it’s a low-light scenario, there’s no comparison. </p> <p>A Pure view camera can take a photo in any setting and come out beautiful. No kidding. When we go on vacation with friends, it’s my photos everyone wants to share and OneDrive makes that easy, too.</p> <p><img title="View source image" alt="Image result for lumia pureview" src="http://gadgetsloud.com/wp-content/uploads/2015/12/Lumia-PureView.jpg" width="550" height="312"></p> <p>Much of the processing technology used in the Pure view camera is also in a low-end Lumia. I can’t verify that’s actually true, but I can anecdotally say that the resulting image from a low-end Lumia is typically superior to most of the others in the room. Back with the 41MP Lumia 1020, the best camera phone ever made, Windows phone was synonymous with camera superiority. I believe it still is. </p> <p><img title="View source image" alt="Image result for onedrive photo recap email" src="http://winbeta.org/wp-content/uploads/2015/12/lumia-650-photo.jpg" width="550" height="346"></p> <p>There’s really no point in talking about Android here. Samsung is certainly the best Android camera you can buy and they are terrible. Recently, they announced a significant improvement to their camera. I haven’t been able to evaluate it yet, but they’re basically admitting the problem. That’s the first step, I guess.</p> <p><strong>The camera button</strong></p> <p>I’ve had people try to tell me they don’t miss the Windows phone camera button, but I only need to challenge them to take a picture and that sentiment dies. The dedicated hardware camera button on Windows phones means your phone is ready to take a photo faster than any other phone in the universe. It means your Pure view camera is setup and ready even if your phone was locked. Click.</p> <p><img title="View source image" alt="Image result for lumia dedicated camera button" src="http://www.techcabal.com/wp-content/uploads/2013/06/camera-button.jpg" width="550" height="367"></p> <p>I admit, Windows phones once struggled taking fast, sequential photos. The first photo was brilliantly fast but the second was painfully slow. Windows 10 mobile resolved that. I can take picture after picture as fast as I can vibrate my finger on the screen. Like every camera, remember, this isn’t true when there is a flash – you must wait to recharge any flash. </p> <blockquote> <p>When I want fast, sequential photos today I typically take a short 4k video and extract the perfect frames from that instead of individual photos. Either way, it’s great on my Lumia.</p></blockquote> <p><strong>Combined people</strong></p> <p>Windows phone has always been able to combine information from my Outlook, Skype, Facebook, Twitter, and LinkedIn to create unified contact records with complete information – including notes, photos and social activity history. This is still true. When I look at a phone contact, one number may be from Facebook while another is from my Outlook contact record. It’s brilliant.</p> <p><img title="View source image" alt="Image result for windows phone people hub " src="http://screenshots.en.sftcdn.net/blog/en/2012/10/Windows-Phone-8-people-hub.jpg" width="550" height="312"></p> <p>Both IPhone and Android do this now. Do they do it as well? Do they do it the same? I don’t know. I haven’t really investigated it, to be honest. What I do know is that Windows phone does it flawlessly. Where I should have 1,000 contacts, I only have 100 and they all have photos and the details I need. The best part is it’s also true on my desktop where the People app is basically a variant of phone. </p> <p><strong>Continuum</strong></p> <p>Does continuum matter to me? Yes and no. Yes, when I travel I love plugging my phone in to present PowerPoint presentations. But, do I use my phone as a computer? No. The simple video connection, including Miracast (wireless video) support, makes me happy – I feel like Buck Rogers. The actual dual-screen scenario isn’t a big appeal to me. I’ve tried it. I have it setup to work. I just don’t use it. </p> <p><img title="View source image" alt="Image result for windows phone continuum" src="http://3.bp.blogspot.com/-VG69rD15aU8/VhQFb2FTTFI/AAAAAAAANdE/qw2wMsfwFxg/s640/Microsoft-Lumia-950-XL-Continuum.jpg" width="550" height="480"></p> <p>I know some Androids support Miracast. Generally, I find their support unreliable. The IPhone supports a proprietary Miracast variant called AppleTV. Does it work? Yes. Does it prove the ease and simplicity of Miracast? Certainly not. Miracast is quite ubiquitous and finding it integrated in projectors is becoming common. Finding AppleTV integrated into projects is like a unicorn who sings opera. </p> <p><img title="View source image" alt="Image result for windows phone miracast" src="http://images.techhive.com/images/article/2014/11/microsoft-screensharing-two-photos-100528772-large.jpg" width="550" height="370"></p> <p>What I do like about Windows phone Continuum is that it brought with it Bluetooth keyboard and mouse support. While playing games, I have caught myself foregoing touch and using the accuracy of a mouse on my phone. It’s pretty sweet. I could say the same about Print Direct support in Windows 10 mobile; it’s just one of those edge cases that’s pretty nice to have in my pocket. </p> <p><strong>VPN</strong></p> <p>I access stuff inside the firewall all the time, and my phone is rarely physically inside our corporate network. Windows 8 introduced Direct Access as a sort of ambient VPN that makes internal resources appear local. The benefits of Direct Access are now part of Windows phone with Auto-VPN which invisibly connects to the Microsoft network for me, and gives me access to local resources without intervention. </p> <p>Add this to MDM workplace registration and my phone is a veritable laptop in my pocket. How do the other platforms handle VPN? Each has its own approach. I can attest to Windows phone and how stupid-simple and reliable it has been for me. </p> <p><img title="View source image" style="float: none; margin-left: auto; display: block; margin-right: auto" alt="Image result for windows phone auto vpn" src="http://cookbook.fortinet.com/wp-content/uploads/FortiGate/54/ipsec-vpn-for-windows-phone-10/E-WinPhone3.png" width="400" height="274"></p> <p><strong>Windows hello</strong></p> <p>Because I carry the Lumia 950 XL, my phone has an iris scanner to identify me. Does it work? You bet it does. It even sees through my sun glasses. In less than a second it recognizes me and unlocks my phone. The whole iris thing is a subsystem, but it leverages Windows Hello, a credential manager in Windows 10 that enables biometric authentication to unlock my identity on the device. This has enabled me to create a longer, more cryptic pin and to unlock my phone in front of my kids without them learning the code.</p> <p><img title="View source image" alt="Image result for windows phone iris scan" src="http://cdn1.tnwcdn.com/wp-content/blogs.dir/1/files/2015/03/Windows-10-Hello-520x245.jpg" width="550" height="265"></p> <p>The IPhone has a fingerprint reader. I don’t want to pretend that biometrics are only on the Windows phone. Certainly iris biometrics is only on the Windows phone, but iris identification isn’t the only good approach to identity. Frankly, I like fingerprint because you can do it in your pocket if you like. That being said, the iris scanner on my phone is a sexy feature I love to show off. </p> <p><strong>Lumia 950</strong></p> <p>The Lumia 950 XL is a terrific phone with an awesome 8 core, liquid-cooled processor, a discrete GPU, a huge 3340mAh battery, an iris scanner, the dedicated camera button, a 20MP Pure view camera with Zeiss optics, a dynamic 3 color LED flash, wireless charging, and a fast charging USB-C port that supports Continuum for around $500. </p> <p><img title="View source image" alt="Image result for onedrive event recap" src="http://winbeta.org/wp-content/uploads/2015/10/lumia950xl-store-780x445.jpg" width="550" height="317">It’s powerful, affordable, and terrific. Does it have a plastic back? Yes. Does that suck? You bet it does. Can I buy a better one? I suppose I can. Is that a show-stopper? Clearly not, I carry the 950 XL today. I happen to think the 950 is also great, and around $200 cheaper. </p> <p><strong>Apps</strong></p> <p>It’s my opinion that Windows phone comes with the best assortment of apps on any platform. Microsoft’s Email client is the high-water standard for every platform – bar none, and it ships with Windows phone. The same with Calendar and all of Office – all built-in. The Photos app started out as a pathetic attempt to show pictures, but today’s version is an amazing experience dwarfing IPhoto and whatever you get with this version of Android. </p> <p>Email, Calendar, People, Photo, Groove, Cortana, News, Xbox, Sports, Health, Weather, Money, Word, Excel, PowerPoint, OneDrive, Maps, Movies, and Skype are basically the bread and butter of my existence. Each is great, each is free, and each is built-in. </p> <p><img title="View source image" alt="Image result for windows 10 phone msn apps" src="http://winphone.ir/wp-content/uploads/2015/05/MSN-Apps-Tiles-Windows-10.jpg" width="550" height="414"></p> <p>But, I am not an idiot. I know SnapChat is not on Windows phone. And, I know many popular apps aren’t in the Windows store and some that are there are pretty weak – like Uber. Even with a quarter million apps in the Windows store, there are real gaps. What I ask myself is, “Do I even care?”. Remember, I’ve experienced this gap for years now. I’m not new to Windows phone. </p> <p>It turns out, I really can live without Tinder and a native US Bank app. You might wonder how this can be possible, but the ubiquity of high-quality mobile web sites has solved my occasional need for bank and retail store interactions. Is it the same experience? No. Is it a good experience? Yes. It really is. I get work done. </p> <p><img title="View source image" alt="Image result for windows phone live tiles" src="http://3.bp.blogspot.com/-SGZ7uXPR52M/ULuOcMA2BZI/AAAAAAAAAX4/Es9c1oL1YpU/s1600/Live-Tiles.jpg" width="550" height="329"></p> <p>A quick ode to the Windows store is appropriate here. Many ex-Windows phone users are not aware of how well fleshed out the Store is today, from utilities to games. It’s a worthy nod that the Windows team has gotten Facebook and Disney to go all-in on Windows 10, building their popular apps natively and explicitly for Windows 10, including Windows phone. </p> <p><strong>Universal apps</strong></p> <p>But there’s more. With the Universal Windows Platform, apps written for the desktop run on the phone. As a result, we’re seeing mainstream apps like Facebook and Starbucks who shunned Windows phone write Windows 10 desktop apps that also work on Windows phone. It’s not a flood of apps, I’m not pretending that. But it’s a hopeful future that the success of Windows 10 will drive UWP adoption and, consequently, unlock several missing apps for Windows phones. </p> <p><img title="View source image" alt="Image result for microsoft uwp" src="http://thisgengaming.com/wp-content/uploads/2016/05/windows10-uwp-728x409.jpg" width="550" height="312"></p> <p><strong>Anniversary update</strong></p> <p>There are several new features in Windows 10 Anniversary update that are very appealing. They include the integration of the Action Center, which means as text messages arrive in my Windows phone Action Center, they also appear on my desktop. I can reply or even create new texts on my desktop. </p> <p>The Windows team is calling Cortana on the lock screen, Ambient Cortana. Whatever it’s called it’s a sweet addition to let me do basic operations without messing around with my password first. Cortana’s shared notebook and the further-expanded shared settings across devices is pure happiness. </p> <p>Using Edge has also hit the viable point for me, too. With extensions and better favorites, I actually like it. Voice Recorder, Messaging, Movies, and Sticky Notes (more built-in apps I forgot to mention above) all got super-upgraded and that’s a treat. </p> <p><img title="View source image" alt="Image result for windows 10 mobile anniversary update" src="http://n4bb.com/wp-content/uploads/2016/08/WINDOWS-10-MOBILE-Anniversary-Update.jpg" width="550" height="311"></p> <p><strong>Commitment</strong></p> <p>Microsoft has laid off a lot of Nokia employees and it should make you ask "Is Microsoft getting out of the phone business?" For every feature and every control we have in Visual Studio, heavy investment is being put into optimizing them for phone. A dozen first-party Microsoft apps are being constantly enhanced for mobile consumption. Service partner after partner is being courted back to the platform. OEM partners have already announced their future Windows Phones, especially for business. Development APIs are thick with phone-specific functionality and capabilities. I am personal friends with the Windows phone team and and they are pushing out constant innovations for the forthcoming releases. </p> <p><img title="View source image" alt="Image result for microsoft windows 10 mobile " src="http://www.geeky-gadgets.com/wp-content/uploads/2015/11/Microsoft-Rolls-Out-New-Windows-10-Mobile-Build.jpg" width="550" height="380"></p> <p>That being said, there's no telling what the future holds. All the signs point to continued investment and tailored market engagements that leverage the signature experiences that make Windows better. I see plenty of signs that Microsoft isn't trying to confront the IPhone head on. I also see plenty of evidence that Windows phone remains important to the business. </p> <p><strong>The time is right</strong></p> <p>To me, Anniversary Update is the best version of Windows 10 and the best version of Windows. Now is the right time to start considering Windows phone. The apps have matured. The operating system has reached a happy place. The hardware is impressive. The work experience is just stellar. And, that’s what I think. </p> <p>Look, I know you are not me. Perhaps the way you manage your family is different. Perhaps the apps you need are different. Maybe you don’t even care about Office. This was about me. This was about what I am thinking, why I am making the choice I am making. Perhaps this will help you make the best decision for you. </p> <p><em>Good luck beautiful people. Choose wisely. Choose for you. </em></p> <p><strong>Post-script</strong></p> <p>This article is not intended to be a debate; it was intended to be a glimpse into my twisted mind. That being said, if you have your own good reason to consider Windows phone I would love to hear what your reason is. Please share it in the comments below. </p>jerrynixonhttp://www.blogger.com/profile/06978720385628364065noreply@blogger.comtag:blogger.com,1999:blog-8789713.post-16887464424377621562016-07-11T21:57:00.001-06:002016-07-11T21:57:12.194-06:00Understanding TargetDeviceFamily<p><a href="https://lh3.googleusercontent.com/-f8J3qtwAiRQ/V4RqcOqUEZI/AAAAAAAAQdY/CIXoXDF9GCw/s1600-h/image50.png"><img title="image" style="border-left-width: 0px; border-right-width: 0px; background-image: none; border-bottom-width: 0px; float: right; padding-top: 0px; padding-left: 0px; margin: 0px 0px 0px 15px; display: inline; padding-right: 0px; border-top-width: 0px" border="0" alt="image" src="https://lh3.googleusercontent.com/-18TGFuP7llM/V4RqdxjDjvI/AAAAAAAAQdc/Y96Hc8Bd9GQ/image_thumb30.png?imgmax=800" width="290" align="right" height="396"></a>If you are like me, you might spelunk from time to time in the bowels of your application's manifest file. But, "why?", you might ask, "Isn't everything in the manifest revealed in the graphical editor in Visual Studio?" Oh, you poor child. Allow me to enlighten you on this one: <em>No</em>. </p> <p>One such setting is the <strong><TargetDeviceFamily /></strong> node, the child of <Dependencies />, the child of <Package />. </p> <p>You can find it documented <a href="https://msdn.microsoft.com/en-us/library/windows/apps/dn986903.aspx">on MSDN</a> where it provides this illuminating prose: "Identifies the device family that your package targets." There are some examples, sure, but I wanted to take a moment and make it painstakingly clear. I want to remove any doubt and leave you with the confidence to look at your manifest and edit it without fear. </p> <p>Fact is, you set this when you create your project. The dialog above appears when you create a new Universal Windows Platform app. It's asking you the Target and Minimum version. But, of what? It is setting the initial versions of the "Windows.Universal" target device family.</p> <p><a href="https://lh3.googleusercontent.com/-A0S5nP9Lvqc/V4RqfMa9MzI/AAAAAAAAQdg/W3bV6LU7XFw/s1600-h/image5.png"><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="https://lh3.googleusercontent.com/-Xwb4J8j5ltY/V4RqgfTN1HI/AAAAAAAAQdk/hIv3f5ACQJs/image_thumb3.png?imgmax=800" width="554" height="226"></a></p> <a name='more'></a> <p>If you want to change the versions you have selected, you don't edit the manifest file, you edit your project file. Just right-click your project and select properties (or double-click the properties node in Solution Explorer). On the Application tab, you will find the following UI.</p> <p><a href="https://lh3.googleusercontent.com/-_mMQwJ3TT0A/V4RqgiHSCpI/AAAAAAAAQdo/xkAAliE2dpQ/s1600-h/image53.png"><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="https://lh3.googleusercontent.com/-B5GZyuo1pBM/V4RqhMsQIMI/AAAAAAAAQds/6I8ieK2KjH0/image_thumb33.png?imgmax=800" width="554" height="145"></a></p> <p>As interesting as this is, it's all about the version. Picking that can be a real test of your understanding of UWP by itself. But, what about Windows.Universal? </p> <h1>Scenario 1: Universal only</h1> <p><a href="https://lh3.googleusercontent.com/-R-C0sV736to/V4RqhVmPeJI/AAAAAAAAQdw/hsG7aYE89RY/s1600-h/image24.png"><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; margin: 0px; display: inline; padding-right: 0px; border-top-width: 0px" border="0" alt="image" src="https://lh3.googleusercontent.com/-Ucp1O7z2DO0/V4Rqhn8EICI/AAAAAAAAQd0/hnKlbAtaRaM/image_thumb14.png?imgmax=800" width="484" height="111"></a></p> <p><em>This is perfectly valid. </em></p> <p>The Universal Windows platform is an API surface common to all Windows apps across Device Families. Specifying, "Windows.Universal" is basically saying to the system that you want to use what's already there. But. this also means your Windows app can run on any device family. You are not limiting your app. Today's options include: Team (Surface hub), Desktop, Mobile (including Phone), Xbox, Holographic, IoT, and anything else we dream up down the road. </p> <h1>Scenario 2: Universal plus</h1> <p><a href="https://lh3.googleusercontent.com/-A_q2hORhOp4/V4RqiAYayRI/AAAAAAAAQd4/U51ieY6bgio/s1600-h/image21.png"><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="https://lh3.googleusercontent.com/-z5lFEfRQgJo/V4RqiaOzuEI/AAAAAAAAQd8/YmFrRDkBzTU/image_thumb13.png?imgmax=800" width="485" height="172"></a></p> <p><em>This is not valid.</em></p> <p>Why? Well, it's not valid because "Mobile" is already included in "Universal". It's like using a wildcard with a specific filter. You still get everything. If you include "Universal" There's no reason to include any other device family. This should make you ask: "What id I only included Mobile?"</p> <h1>Scenario 3: Just one</h1> <p><a href="https://lh3.googleusercontent.com/-tJgeycR2KXA/V4Rqi6keFsI/AAAAAAAAQeA/Er9RrR2XkEA/s1600-h/image29.png"><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="https://lh3.googleusercontent.com/-D0f5UzC3w4w/V4RqjFbekyI/AAAAAAAAQeE/kSoBrXfPU1g/image_thumb17.png?imgmax=800" width="475" height="110"></a></p> <p><em>Now, this is valid. </em></p> <p>In this scenario, I am indicating my Windows app still uses the Universal Windows Platform, but only on Mobile. Does it mean the API surface is different? No, the universal API surface is identical. What it means is that your Windows app is intended for Mobile, and only for Mobile. </p> <p>You might ask, "Can I install an app like this on Desktop?" And the answer is "No". The application is declaring its intention. In fact, hold on to the word "intention" because that's what the TargetDeviceFamily node is really all about. Not about capabilities. </p> <h1>Scenario 4: More than one</h1> <p><a href="https://lh3.googleusercontent.com/-qXRZzXtUMFU/V4RqjTT6LQI/AAAAAAAAQeI/ULlf93DMV9w/s1600-h/image34.png"><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="https://lh3.googleusercontent.com/-ky-S5fY2cMI/V4Rqj1ofcnI/AAAAAAAAQeM/OmCGSWY7o5E/image_thumb20.png?imgmax=800" width="530" height="172"></a></p> <p><em>This is also valid.</em></p> <p>In this scenario, I am indicating my Windows app is just like Scenario 3. That is, my app is intended for Windows.Mobile. But, I am also indicating my Windows app is intended for Xbox. If you try to install it on Desktop, then it will fail. That's because my Windows app has explicitly declared its intentions for only the Mobile and Xbox device families. </p> <p>Now, you might ask, does including all the device families in your TargetDeviceFamily node basically equate to using "Windows.Universal"? That's a good question. Something like this:</p> <h1>Scenario 5: All of them</h1> <p><a href="https://lh3.googleusercontent.com/-0x7M1fxlMeU/V4RqkOFlFaI/AAAAAAAAQeQ/yvIzgUo4Xss/s1600-h/image39.png"><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="https://lh3.googleusercontent.com/-V3kBsJ5_G4w/V4RqkgdUQ4I/AAAAAAAAQeU/rBkXORxPiZk/image_thumb23.png?imgmax=800" width="515" height="302"></a></p> <p><em>This is also valid. (though the version numbers aren't)</em></p> <p>You're right. Including all the possible device families is the same as using "Windows.Universal" except for this: this list is explicit and not implicit - should a device family ever be added, this will never include it. It's simply easier to use "Windows.Universal" if your app doesn't have a specific target.</p> <p>Aside: The upside of this approach is you can have unique versions for every family, if that is what is right for your Windows app. </p> <h1>Question 1</h1> <p>Can I use "Windows.Universal" but still limit my app to Desktop? </p> <p><em>The answer is yes. </em></p> <p>In the Microsoft DevCenter - what developers usually mean when they say the "Windows Store" - you can specify the target device family. Like this: </p> <p><a href="https://lh3.googleusercontent.com/-JBMqVNrL0xI/V4RqlLUuyoI/AAAAAAAAQeY/yip6fL7v-Eg/s1600-h/image44.png"><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="https://lh3.googleusercontent.com/-AKkoBzjQSiU/V4Rql_kOz2I/AAAAAAAAQec/c2mKHdG9FdU/image_thumb26.png?imgmax=800" width="550" height="331"></a></p> <p>Aside: this is also enforced during installation. An app marked as Desktop-only cannot be side-loaded on a Mobile device. But an app marked Universal can be side-loaded on Mobile, even if you mark it as Desktop-only in the Dev Center. </p> <h1>Question 2</h1> <p>Does the Store override my manifest? </p> <p><em>The answer is no.</em></p> <p>This does not override your manifest, by the way. Your manifest is saying, "I am writing this app for these device families" while the settings above are saying, "On what platforms should the Windows Store make my app available?" I hope you see the difference. The screenshot in Question 1 shows what it looks like with Windows.Universal, but an explicit manifest would reduce the options in the DevCenter to the options indicated in TargetDeviceFamily. </p> <p>Aside: What if you change your app from Universal to Mobile-only. Do previously installed versions on Desktop devices get uninstalled? The answer is no. We never uninstall an app from your device without your invoking it. </p> <h1>Question 3</h1> <p>I noticed each family has its own version. If one device family changes and breaks my app, is it the right thing to do to list that family explicitly with a tweaked min/target version number? </p> <p><em>The answer is yes. </em></p> <p>In a way, this is the real reason for the syntax in the first place. Perhaps one device family accelerates its capabilities faster than others, perhaps there is a bug in a certain version, or perhaps a device family is deprecated. The granularity of this syntax give you the control to specify what you need to make your Windows app work best. </p> <p>Aside: this doesn't mean the project properties graphical editor shows more than one device family. In fact, it shows Windows.Universal even when you only have a specific family like Mobile or Xbox. Let's call it a "feature" of the editor, and leave it at that. Change the versions like that and it's a magnificent crash. </p> <h1>Conclusion</h1> <p>That's it. The Universal Windows Platform is a single, reliable, consistent API surface across device families. Accessing a file on IoT is the same on HoloLens, is the same on Xbox, is the same on Desktop. UWP makes universal Windows apps possible, makes development simpler, and delivers a future-ready architecture. The TargetDeviceFamily node in your app's manifest is not about capabilities, it's about the developer's intention for the app - where do you want it to run, not what capabilities do you get. </p>jerrynixonhttp://www.blogger.com/profile/06978720385628364065noreply@blogger.comtag:blogger.com,1999:blog-8789713.post-31131594566214119902016-04-27T23:15:00.000-06:002016-04-27T23:15:42.352-06:00Build 2016 for the Windows developer<div dir="ltr" style="text-align: left;" trbidi="on">
<br />
<div class="MsoNormal" style="margin: 0in 0in 8pt;">
<span style="font-family: Calibri;">Windows developers rejoice, Build 2016 was a treasure chest
of updates and new features that will make your apps light up on the Windows platform
more and easier. With so many things released, let’s step through the big ones
to make your we get our heads wrapped around them. <o:p></o:p></span></div>
<iframe src="https://channel9.msdn.com/Shows/demooftheday/Build-2016-for-Windows-XAML-UWP-Developers/player" width="560" height="315" allowFullScreen frameBorder="0"></iframe>
</div>
jerrynixonhttp://www.blogger.com/profile/06978720385628364065noreply@blogger.comtag:blogger.com,1999:blog-8789713.post-78214877488234953712015-12-28T11:41:00.000-07:002016-01-27T10:25:49.823-07:00XAML Behaviors now open source<div dir="ltr" style="text-align: left;" trbidi="on">
XAML developers have enjoyed the reusable encapsulation and design-time experience of Behaviors since Windows Presentation Foundation. Just drag-and-drop onto the design-time canvas and you declaratively build out functionality without explicit code-behind. <a name='more'></a>
<br />
<br />
<h3>
New for Windows developers</h3>
For Universal Windows Platform (UWP) developers, XAML behaviors work the same way – though their implementation has been reduced from Behavior/Trigger/Action, to a simpler Behavior/Action. This easy approach allows developers to pump out custom Behaviors in a flash.
As Windows apps continue to leverage this candy, developers want to understand their implementation and expand the Behavior framework. As a result of, Microsoft’s Behaviors team has moved the Behaviors code base to GitHub, and placed it under an OSS license, accepting outside contributions.
<br />
<h4>
<span style="font-size: large;"><br />
What does this mean?</span></h4>
Open Sourcing Behaviors means developers can lift the covers and better understand the frameworks they are using. It means high-end customers can perform deeper, better security audits. And, it means developers who love the framework can add features to increase their own productivity.
<br />
<h4>
<span style="font-size: large;"><br />
About this interview</span></h4>
Microsoft’s DevRadio on Channel 9 is an ongoing video-podcast bringing developer content to the developer community. In this episode, I talk with the leads on the XAML Behaviors team. We discuss the motivations around OSS and the future of the XAML Behaviors framework.<br />
<br />
<span style="font-size: large;"><b>What do you need to know?</b></span><br />
First, XAML Behaviors have not changed – except that the package is no longer an Extension SDK through the platform, but a NuGet package that can be serviced frequently and easily. Second, the design-time experience in Visual Studio has not changed. And, third, you can find, review, and contribute to the framework at <a href="https://github.com/Microsoft/XamlBehaviors">https://github.com/Microsoft/XamlBehaviors</a>.<br />
<h4>
<br />
<span style="font-size: large;">
Who owns the code?</span></h4>
<h4>
<span style="font-weight: normal;">Because the XAML community is so active, vibrant, and engaged, community insiders and Microsoft MVPs are the core custodians of the framework. Microsoft still owns the integration into Visual Studio and the overall developer experience. But, this means the future of XAML Behaviors is truly in the hands of the developers who love it so much.</span></h4>
<h4>
<span style="font-size: large;">
<br />
Check out the interview:</span></h4>
<iframe allowfullscreen="" frameborder="0" height="315" src="https://channel9.msdn.com/Blogs/DevRadio/DR1628/player" width="560"></iframe>
<br />
<div>
<br /></div>
</div>
Unknownnoreply@blogger.comtag:blogger.com,1999:blog-8789713.post-12719892051952814752015-12-06T01:18:00.000-07:002015-12-28T11:48:01.986-07:00Inside the Code: What's New with Visual Studio<div dir="ltr" style="text-align: left;" trbidi="on">
<span style="color: #5a5a5a; font-family: "helvetica neue" , "arial" , "helvetica" , sans-serif;">Lots of great stuff has been happening recently with Visual Studio. While I've quickly recapped all the goodness for you in an <a href="http://www.microsoft.com/click/services/Redirect2.ashx?CR_CC=200728630" target="_blank">earlier post</a>, </span><span style="color: #5a5a5a; font-family: "helvetica neue" , "arial" , "helvetica" , sans-serif;">you might want to dig deeper into specific topics. You do? If you do, check out these cool links by my fellow developer evangelists as they compile in-depth coverage of specific topics</span><br />
<h3>
<br />
<span style="color: #5a5a5a; font-family: "calibri";"><span style="color: #3d85c6; font-family: "helvetica neue" , "arial" , "helvetica" , sans-serif; font-size: large;">Check these out!</span></span></h3>
<span style="color: #5a5a5a; font-family: "calibri";">
</span>
<div class="MsoTitle" style="margin: 0in 0in 0pt;">
<ul><span style="color: #5a5a5a; font-family: "calibri";">
<li><span calibri="" light=""><span style="font-family: "helvetica neue" , "arial" , "helvetica" , sans-serif;"><span style="font-family: "helvetica neue" , "arial" , "helvetica" , sans-serif;"><strong><span id="goog_404490507"></span><a href="http://www.microsoft.com/click/services/Redirect2.ashx?CR_CC=200728630" target="_blank">A Developer's guide to Visual Studio 2015 Update 1 & all the Connect(); 2015<span id="goog_404490508"></span> announcements</a> </strong>by Jerry Nixon</span></span></span></li>
<li><span calibri="" light=""><span style="font-family: "helvetica neue" , "arial" , "helvetica" , sans-serif;"><span style="font-family: "helvetica neue" , "arial" , "helvetica" , sans-serif;"><strong><a href="http://www.microsoft.com/click/services/Redirect2.ashx?CR_CC=200728189" target="_blank">Visual Studio Code goes Open Source</a></strong> by Jeremy Foster</span></span></span></li>
<li><span calibri="" light=""><span style="font-family: "helvetica neue" , "arial" , "helvetica" , sans-serif;"><span style="font-family: "helvetica neue" , "arial" , "helvetica" , sans-serif;"><b><a href="http://www.microsoft.com/click/services/Redirect2.ashx?CR_CC=200728638" target="_blank">An Intro to Visual Studio Dev Essentials</a></b> by Adam Tuliper</span></span></span></li>
<span style="color: #5a5a5a; font-family: "calibri";">
<li><span calibri="" light=""><span style="font-family: "helvetica neue" , "arial" , "helvetica" , sans-serif;"><span style="font-family: "helvetica neue" , "arial" , "helvetica" , sans-serif;"><b><a href="http://www.microsoft.com/click/services/Redirect2.ashx?CR_CC=200728728" target="_blank">What's new with VS Subscription</a> </b>by Daniel Egan</span></span></span></li>
<span style="color: #5a5a5a; font-family: "calibri";">
<li style="font-family: calibri;"><span style="font-family: "helvetica neue" , "arial" , "helvetica" , sans-serif;"><strong><a href="http://www.microsoft.com/click/services/Redirect2.ashx?CR_CC=200728190" target="_blank">Visual Studio 2015 IDE Improvements</a></strong> by Paul DeCarlo</span></li>
<span style="color: #5a5a5a; font-family: "calibri";">
<li style="font-family: calibri;"><span style="font-family: "helvetica neue" , "arial" , "helvetica" , sans-serif;"><strong><a href="http://www.microsoft.com/click/services/Redirect2.ashx?CR_CC=200728729" target="_blank">What's New with Application Insights</a></strong> by Bret Stateham</span></li>
<span style="color: #5a5a5a; font-family: "calibri";">
<li><span style="font-family: "helvetica neue" , "arial" , "helvetica" , sans-serif;"><b><a href="http://www.microsoft.com/click/services/Redirect2.ashx?CR_CC=200728639" target="_blank">Visual Studio Tools for Apache Cordova</a></b> by Adam Tuliper</span></li>
<span style="color: #5a5a5a; font-family: "calibri";">
<li><span style="font-family: "helvetica neue" , "arial" , "helvetica" , sans-serif;"><b><a href="http://www.microsoft.com/click/services/Redirect2.ashx?CR_CC=200728642" target="_blank">New C# REPL and scripting capabilities</a> </b>by Bret Stateham</span></li>
<span style="color: #5a5a5a; font-family: "calibri";"><span style="color: #5a5a5a; font-family: "calibri";">
<li style="font-family: calibri;"><span calibri="" light=""><span style="font-family: "helvetica neue" , "arial" , "helvetica" , sans-serif;"><span style="font-family: "helvetica neue" , "arial" , "helvetica" , sans-serif;"><strong><a href="http://www.microsoft.com/click/services/Redirect2.ashx?CR_CC=200728188" target="_blank">Visual Studio Code supports Extensions</a></strong> by Jeremy Foster</span></span></span></li>
<span style="color: #5a5a5a; font-family: "calibri";"><span style="color: #5a5a5a; font-family: "calibri";"><span style="color: #5a5a5a; font-family: "calibri";">
<li style="font-family: calibri;"><span style="font-family: "helvetica neue" , "arial" , "helvetica" , sans-serif;"><strong><a href="http://www.microsoft.com/click/services/Redirect2.ashx?CR_CC=200728727" target="_blank">HockeyApp</a></strong><b><a href="http://www.microsoft.com/click/services/Redirect2.ashx?CR_CC=200728727" target="_blank"> in VS Team Services</a> </b>by Daniel Egan</span></li>
<span style="color: #5a5a5a; font-family: "calibri";"><span style="color: #5a5a5a; font-family: "calibri";"><span style="color: #5a5a5a; font-family: "calibri";">
<li><span style="font-family: "helvetica neue" , "arial" , "helvetica" , sans-serif;"><b><a href="http://www.microsoft.com/click/services/Redirect2.ashx?CR_CC=200744899" target="_blank">Understanding ASP.NET 5 & .NET Core</a> </b>by Adam Tuliper</span></li>
<span style="color: #5a5a5a; font-family: "calibri";"><span style="color: #5a5a5a; font-family: "calibri";"><span style="color: #5a5a5a; font-family: "calibri";">
<li><a href="http://www.microsoft.com/click/services/Redirect2.ashx?CR_CC=200744898" target="_blank"><b style="font-family: 'helvetica neue', arial, helvetica, sans-serif;">XAML Behaviors</b><span style="font-family: 'helvetica neue', arial, helvetica, sans-serif;"> <b>and </b></span></a><b style="font-family: 'helvetica neue', arial, helvetica, sans-serif;"><a href="http://www.microsoft.com/click/services/Redirect2.ashx?CR_CC=200744898" target="_blank">Visual Studio 2015</a> </b><span style="font-family: 'helvetica neue', arial, helvetica, sans-serif;">by Jerry Nixon<br /></span></li>
</span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></ul>
</div>
<br />
<ul><span style="color: #5a5a5a; font-family: "calibri";">
</span></ul>
</div>
<iframe allowfullscreen="" frameborder="0" height="315" src="https://channel9.msdn.com/Blogs/DevRadio/DR1625/player" width="560"></iframe>jerrynixonhttp://www.blogger.com/profile/06978720385628364065noreply@blogger.comtag:blogger.com,1999:blog-8789713.post-62287694751457277842015-11-17T08:53:00.002-07:002015-11-30T15:51:31.437-07:00A Developer's guide to Visual Studio 2015 Update 1 and all the Connect() 2015 announcements<div dir="ltr" style="text-align: left;" trbidi="on">
<br />
<div class="MsoTitle" style="margin: 0in 0in 0pt;">
<span style="color: #5a5a5a;"><span style="font-family: "calibri";">They dunked Visual Studio 2015 in a bucket of
awesome-sauce and pulled out Update 1! This article will help step you through the update as well as the other details we announced @ Connect().</span></span></div>
<div class="MsoTitle" style="margin: 0in 0in 0pt;">
</div>
<span style="font-family: "calibri";">It’s Microsoft season! In July, we released our best Windows
ever – fast, secure, and super-personal, Windows 10 has than 110M consumer and
14M enterprise installations in as much time. November is the first major
update in this new Windows-as-a-service world; it coincides Visual Studio 2015
update, and in this article, we’ll try to make sense of the flurry of
announcements and updates.</span><br />
<h1 style="margin: 12pt 0in 0pt;">
<span style="font-size: large;"><span style="color: #2e74b5;"><span style="font-family: "calibri light";">What’s new for everybody but developers?<o:p></o:p></span></span></span></h1>
<span style="font-family: "calibri";">We might as well get this out of the way. It’s good to be
aware.<o:p></o:p></span><br />
<br />
<h2 style="margin: 2pt 0in 0pt;">
<span style="font-size: medium;"><span style="color: #2e74b5;"><span style="font-family: "calibri light";"><a name='more'></a>Consumer enhancements<o:p></o:p></span></span></span></h2>
<span style="font-family: "calibri";">Not every user of Windows is a developer in this
bring-your-own-device world. There’s candy for everyone. Windows Insiders have
already been enjoying the tweaks to the Start menu, integration with Windows
phone, and other aesthetic tweaks. That being said, overall, Windows 10 update
1 doesn’t introduce many significant interface changes – mostly just fit and
finish to Windows 10.<o:p></o:p></span><br />
<br />
<h2 style="margin: 2pt 0in 0pt;">
<span style="font-size: medium;"><span style="color: #2e74b5;"><span style="font-family: "calibri light";">Azure Active Directory join<o:p></o:p></span></span></span></h2>
<span style="font-family: "calibri";">Conversely, ITPros have been treated to a myriad pined features
– like Azure Active Directory join, the Windows Store for Business, and Mobile
Device Management for online enrollment of desktop machines. These features
enable group policy without VPN, volume license management for apps, private
apps, and provisioning remote devices while securing corporate data.<span style="mso-spacerun: yes;"> </span><o:p></o:p></span><br />
<br />
<h2 style="margin: 2pt 0in 0pt;">
<span style="font-size: medium;"><span style="color: #2e74b5;"><span style="font-family: "calibri light";">Windows Hello<o:p></o:p></span></span></span></h2>
<span style="font-family: "calibri";">Most notable is Windows Hello. This is a developer feature, you
know, since it simplifies the complexities of access; let me explain. At the
heart of authentication are security tokens granted to the user and safely
stored in the Trusted Platform Module (TPM), the same hardware-based
cryptography enabling BitLocker. For devices without a physical TPM, Windows
will securely virtualize one.</span><br />
<blockquote class="tr_bq">
In the recent past, we called the
Microsoft Account the Microsoft Passport. We renamed it to simplify consumer
understanding of our online properties. Windows Passport is not the same thing,
though it shares its name, but we have completely run out of product names and
had to re-provision this one. Just kidding.<o:p></o:p></blockquote>
<span style="font-family: "calibri";">Access to the TPM is enabled only by a suite of controlled
APIs we call Passport. Working together, this is a big step to single-sign-on
(SSO) nirvana – which, more practically, means I don’t have to keep signing-in
to Office 365 every time I click a SharePoint Online link. Passport, however,
is gated. Users must provide a personal pin, a personal pin that expires quite
quickly; enter Windows Hello. <o:p></o:p></span><br />
<br />
<div class="MsoNormal" style="margin: 0in 0in 8pt;">
<span style="font-family: "calibri";">Windows Hello is</span><span style="font-family: "calibri";"><span style="mso-spacerun: yes;"> </span>a pin management
subsystem of Windows 10. It includes support for passwords, numeric pins,
picture passwords, and biometrics including fingerprint, face recognition, and
iris scanning. It caches your pin, and conveniently prompts for transparent
re-authentication when that variable cache expires. It is a seriously big step
toward authenticated happiness.<o:p></o:p></span></div>
<span style="font-family: "calibri";">It’s important to know that biometrics require special
hardware. The Surface Pro 4 keyboard includes a fingerprint reader; it and the
Surface Book both include Intel’s ImageSense cameras for infrared, facial
recognitions. The Microsoft Lumia 950 and 950 XL both have iris scanners on
board. Meanwhile, our partners are (or shortly will) shipping their own Windows
Hello biometric devices. <o:p></o:p></span><br />
<br />
<h2 style="margin: 2pt 0in 0pt;">
<span style="font-size: medium;"><span style="color: #2e74b5;"><span style="font-family: "calibri light";">Lumia 950 and 950XL<o:p></o:p></span></span></span></h2>
<span style="font-family: "calibri";">The Lumia 950 and 950 XL Windows Phones include
liquid-cooled 6 and 8-core processors, respectively. No kidding. These little
rocket use the new Microsoft phone dock to enable Continuum-for-phone.
Continuum is a game-changer. With it, a phone physically or wirelessly connects
to a keyboard, mouse, and monitor – treating it like a PC with full Windows
capabilities, including apps like Office 2016 – features, add-ins, keyboard
shortcuts – everything you expect in a PC experience. </span><br />
<div>
<blockquote class="tr_bq">
Note: any phone that does NOT have a USB-C type connector (both the 950 and the 950 XL do) is not likely to support Continuum on Phone. Remember, it's a hardware feature not only with connectivity but also within the chipset. This is a new capability.</blockquote>
</div>
<br />
<h2 style="margin: 2pt 0in 0pt;">
<span style="font-size: medium;"><span style="color: #2e74b5;"><span style="font-family: "calibri light";">Microsoft Band SDK<o:p></o:p></span></span></span></h2>
<span style="font-family: "calibri";">Since we’re talking about Microsoft hardware, it’s worth
pointing out that the Band SDK now supports Microsoft Band 2 with features
like: streaming data from the band, connecting to multiple bands, creating
interactive tiles, messaging, and personalizing the band – all off-band and
across mobile platforms like Windows, iOS and Android.<span style="mso-spacerun: yes;"> </span>Friends with the Band is the Microsoft Health
Cloud where wearable data is centrally stored. Developers can use the Microsoft
Health API to request access and use that wealth of telemetry data. </span><br />
<h1 style="margin: 12pt 0in 0pt;">
<span style="font-size: large;"><span style="color: #2e74b5;"><span style="font-family: "calibri light";">Visual Studio cloud subscriptions <o:p></o:p></span></span></span></h1>
<span style="font-family: "calibri";">In the past, purchasing Visual Studio meant a significant
up-front investment. For Visual Studio Enterprise, businesses could easily drop
$10k per developer for the MSDN subscription that includes it. Introducing
Visual Studio cloud subscriptions. Now, developers and business can rent Visual
Studio for lower, easier monthly payments ranging from $45 to $250 per month.
For ad hoc teams, smaller businesses, and startups, this can reduce a barrier
of entry to a premium developer experience. <o:p></o:p></span><br />
<br />
<div class="MsoNormal" style="margin: 0in 0in 8pt;">
<span style="font-family: "calibri";">What’s interesting about Visual Studio cloud subscriptions
is the word “cloud” in the name. Why? It’s not just because you download from
the cloud – we’ve always done that. It’s because the entire purchasing
experience is accomplished through the emerging Azure Marketplace. <o:p></o:p></span></div>
<br />
<h2 style="margin: 2pt 0in 0pt;">
<span style="font-size: medium;"><span style="color: #2e74b5;"><span style="font-family: "calibri light";">The Azure Marketplace<o:p></o:p></span></span></span></h2>
<span style="font-family: "calibri";">The Azure Marketplace started life as the Azure Data
Marketplace, an easy place to purchase hosted data and services from premium
providers, like Bing translator and third-party providers. Today, the Azure
Marketplace is also a central place to purchase almost anything including
Salesforce, Oracle, and (now) Visual Studio 2015. What does this mean? It means
businesses get a single, simple bill for everything from development costs to
virtual machines and SQL Server online. </span><br />
<h1 style="margin: 12pt 0in 0pt;">
<span style="font-size: large;"><span style="color: #2e74b5;"><span style="font-family: "calibri light";">Visual Studio dev essentials<o:p></o:p></span></span></span></h1>
<span style="font-family: "calibri";">With Visual Studio 2013, developers were treated to roaming
settings for the very first time. It was a dream – jump from machine-to-machine
and your preferences follow you around like a puppy. This were enabled, in
part, by the Visual Studio profile. Using your Microsoft Account (MSA) sign-in
to Visual Studio and you were good to go. To the developers on the Visual
Studio team, thank you.<o:p></o:p></span><br />
<br />
<h2 style="margin: 2pt 0in 0pt;">
<span style="font-size: medium;"><span style="color: #2e74b5;"><span style="font-family: "calibri light";">The evolving profile<o:p></o:p></span></span></span></h2>
<span style="font-family: "calibri";">In Visual Studio 2015, even more settings roam and a
developer’s Visual Studio profile was even more important. It also allowed you
to seamlessly access remote source repositories like GitHub and Visual Studio
Online without having to monkey around with a litany of passwords. Plus, almost
every setting roamed for an awesome multi-machine experience. Once snippets
roam, I’m buying the whole team drinks. (Water, of course; with all they ice
and lemon you want – free refills).<o:p></o:p></span><br />
<br />
<h2 style="margin: 2pt 0in 0pt;">
<span style="font-size: medium;"><span style="color: #2e74b5;"><span style="font-family: "calibri light";">Dev essentials benefits<o:p></o:p></span></span></span></h2>
<span style="font-family: "calibri";">The Visual Studio profile is free – it doesn’t matter if you
are using Enterprise, Professional, Community, or even Express. And now, every
Visual Studio profile qualifies for Visual Studio dev essentials. This is a
toolbox of awesome benefits you get just for using Visual Studio. <o:p></o:p></span><br />
<br />
<div class="MsoNormal" style="margin: 0in 0in 8pt;">
<span style="font-family: "calibri";">The list includes tools like Visual Studio, Code, and even
Parallel for developers using a Mac. The list includes services like Visual
Studio source control, Application Insights, HockeyApp (a 2014 Microsoft
acquisition for cross-platform mobile applications), MacInCloud integration, and
even a $25 monthly Azure credit – yep, you read that right. In addition to all
that, Visual Studio developers get free access to subset of the training
catalogs for PluralSight and Wintellect, HackHands consultation, and priority
support through Microsoft. </span></div>
<h1 style="margin: 12pt 0in 0pt;">
<span style="font-size: large;"><span style="color: #2e74b5;"><span style="font-family: "calibri light";">Visual Studio Team Services<o:p></o:p></span></span></span></h1>
<span style="font-family: "calibri";">A rose by any other name is still a rose. Visual Studio Team
Services is the new name of Visual Studio Online. And, I for one could not be
happier. You know how you see some things happen and you think to yourself,
“That won’t last long.” Such was Visual Studio Online. I weighed in, warning
developers will think Visual Studio Online is a browser-based version of Visual
Studio – you know, an online version of Visual Studio, as the name implies. Alas,
I am but a small voice in a cacophonous crowd. And, so, here we are. Good
riddance Visual Studio Online, hello Team Services – our terrific source
control, project management, and automated build offering that was hidden
behind a silly name.<o:p></o:p></span><br />
<div>
<blockquote class="tr_bq">
Previously, we had Visual Studio
Team System. Don’t confuse that old moniker for the desktop tool with the
Visual Studio Team Services, its online compliment. <o:p></o:p></blockquote>
</div>
<br />
<h2 style="margin: 2pt 0in 0pt;">
<span style="font-size: medium;"><span style="color: #2e74b5;"><span style="font-family: "calibri light";">Test manager extension<o:p></o:p></span></span></span></h2>
<span style="font-family: "calibri";">This is important. Not because of the Test Manager extension
a suite of testing features in Visual Studio and Team Services for a monthly
fee of $52/developer; no. Because we are ushering in a new way to modify the
premium capabilities of Visual Studio without introducing a new Visual Studio
SKU. Remember Visual Studio Test Edition? Remember Visual Studio Online
Advanced? No more. Starting this week, we see Visual Studio getting premium
features simply by adding a Microsoft extension, like Test Manager.<o:p></o:p></span><br />
<br />
<h2 style="margin: 2pt 0in 0pt;">
<span style="font-size: medium;"><span style="color: #2e74b5;"><span style="font-family: "calibri light";">Visual Studio Marketplace<o:p></o:p></span></span></span></h2>
<span style="font-family: "calibri";">Part of Visual Studio Team Services is the next generation
of the Visual Studio Gallery called the Visual Studio Marketplace. The Visual
Studio Gallery was (is) the go-to place for Visual Studio extensions – both
free and paid. The Visual Studio Marketplace will ultimately replace the Visual
Studio Gallery, enabling not only easy access to extensions, but an easy mechanism
for extension authors to monetize their work. The old Visual Studio Gallery
was, basically, just a download site. <o:p></o:p></span><br />
<div>
<blockquote class="tr_bq">
It’s worth pointing out that third
party, paid extensions will be supported soon.<o:p></o:p></blockquote>
</div>
<span style="font-family: "calibri";">Aside: as the author of Template 10, an extension for universal
Windows apps on Windows 10, I can tell you that I welcome some love getting
injected into the Visual Studio Gallery. The gallery is a pretty pleasant
experience for the hundreds of thousands of developers consuming it, but the
experience for extension authors is anything but streamlined. With the
simplification of extension monetization, I am sure more third party authors
will be tempted to leverage it as a resource.<o:p></o:p></span><br />
<br />
<h2 style="margin: 2pt 0in 0pt;">
<span style="font-size: medium;"><span style="color: #2e74b5;"><span style="font-family: "calibri light";">Application Insights<o:p></o:p></span></span></span></h2>
<span style="font-family: "calibri";">I have a love/hate relationship with Application Insights.
On one hand, I love having simple access to app metrics. I also love the new
integration with Visual Studio and Power BI. That being said, I am hardly a fan
of any tool that highlights how horribly wrong I can get my code. </span><span style="font-family: "wingdings"; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-char-type: symbol; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin; mso-symbol-font-family: Wingdings;"><span style="mso-char-type: symbol; mso-symbol-font-family: Wingdings;">J</span></span><span style="font-family: "calibri";"> No kidding. <o:p></o:p></span><br />
<br />
<div class="MsoNormal" style="margin: 0in 0in 8pt;">
<span style="font-family: "calibri";">Well, anyway, Application Insights is now available for
every type of app, from WPF to web sites and mobile apps on every platform
including iOS and Android. If you can write it, we can handle it. All that data
is available for real-time analysis, as well as alerts, up on the Azure portal
or in your inbox. With a little insight and some developer love, your app
stability will be a feature, not a liability. <o:p></o:p></span></div>
<br />
<h2 style="margin: 2pt 0in 0pt;">
<span style="font-size: medium;"><span style="color: #2e74b5;"><span style="font-family: "calibri light";">Team Foundation Server<o:p></o:p></span></span></span></h2>
<span style="font-family: "calibri";">It’s still 100% viable for an organization to have an
on-premises source control and project management server.<span style="mso-spacerun: yes;"> </span>Team Foundation Server update 1 RTM was also
announced this week for download. It’s a long discussion to delineate the delta
between online and on-premises Visual Studio Team Foundation Server, but at
their hearts they are the same. </span><br />
<h1 style="margin: 12pt 0in 0pt;">
<span style="font-size: large;"><span style="color: #2e74b5;"><span style="font-family: "calibri light";">Visual Studio Code<o:p></o:p></span></span></span></h1>
<span style="font-family: "calibri";">Visual Studio Code is now open source on GitHub. If you
follow Microsoft’s embrace open source<span style="mso-spacerun: yes;"> </span>software (OSS), this is
probably something you saw coming. Open source means you can learn from our
investment and even submit your own pull request for that new feature.<o:p></o:p></span><br />
<br />
<h2 style="margin: 2pt 0in 0pt;">
<span style="font-size: medium;"><span style="color: #2e74b5;"><span style="font-family: "calibri light";">Open source<o:p></o:p></span></span></span></h2>
<span style="font-family: "calibri";">Microsoft’s open source agenda is complex. No question it’s
a move motivated by the fact that open source is unswervingly popular, but it’s
also a way of garnering good will in our business choices, good faith in our
code quality, and nod to the thousands of developers who genuinely love
Microsoft and want to contribute in some way – even if it’s just to brag to
their colleagues that they did it.<o:p></o:p></span><br />
<br />
<div class="MsoNormal" style="margin: 0in 0in 8pt;">
<span style="font-family: "calibri";">With .NET, ASP.Net, and now Code open source, Microsoft also
gets the advantage of unexpected innovation and transparency for security
audits that might have otherwise prevented our technology from being selected
by key partners, enterprises, and governments. We aren’t going to stop core
contribution, and we aren’t going to give up our intellectual property, but
we’re as open as a for-profit software company can be. <span style="mso-spacerun: yes;"> </span>And, it’s awesome.<o:p></o:p></span></div>
<br />
<h2 style="margin: 2pt 0in 0pt;">
<span style="font-size: medium;"><span style="color: #2e74b5;"><span style="font-family: "calibri light";">Extensions<o:p></o:p></span></span></span></h2>
<span style="font-family: "calibri";">Visual Studio Code now has long-awaited extension support. A
gallery of extensions is available within Code or at visualstudio.com for
developers wanting to make Code do more. Extensions can add additional
features, but can also apply custom themes and language support. It’s easy to
see that the developer community loves Code. With extensions, that’s only going
to grow. </span><br />
<h1 style="margin: 12pt 0in 0pt;">
<span style="font-size: large;"><span style="color: #2e74b5;"><span style="font-family: "calibri light";">Visual Studio 2015 update 1<o:p></o:p></span></span></span></h1>
<span style="font-family: "calibri";">And now to Visual Studio 2015 update 1. This is the first
update to Visual Studio 2015 since it went RTM back with Windows 10 in the
summer. <span style="mso-spacerun: yes;"> </span>But, let me set your
expectations, Visual Studio 2015 update 1 is an incremental update that cleans
up many things and only introduces a few. Nonetheless, let’s enumerate what’s
new.<o:p></o:p></span><br />
<br />
<h2 style="margin: 2pt 0in 0pt;">
<span style="font-size: medium;"><span style="color: #2e74b5;"><span style="font-family: "calibri light";">Universal Windows Platform<o:p></o:p></span></span></span></h2>
<span style="font-family: "calibri";">Last week, Windows 10 released update 1. Internally, we called
that Threshold 2 – because the first release of Windows 10 was codenamed
Threshold (the one is implied). And, since we can hardly bring ourselves to
type out full words, we simply called it TH2, or sometimes “the November
update”. To you, it’s just Windows 10 update 1. <o:p></o:p></span><br />
<br />
<div class="MsoNormal" style="margin: 0in 0in 8pt;">
<span style="font-family: "calibri";">With update 1, came an update to the Universal Windows
Platform (UWP); the previous version was 10240, the new version is XXX. Windows
apps can support both at the same time. Unlike the .NET framework, UWP is not a
runtime; it is a guaranteed, single API surface across every device that runs
Windows 10. This includes Windows Phone, Desktop, Surface Hub, IoT (Raspberry
Pi), HoloLens, and whatever else the engineers dream up supporting. <o:p></o:p></span></div>
<span style="font-family: "calibri";">This API surface is what enables universal Windows apps.
With Windows 10 (before the update) Visual Studio 2015 (before the update)
supported app development with the UWP SDK. With the update of both Windows 10
and Visual Studio 2015 comes the update to the UWP SDK for TH2 support. <o:p></o:p></span><br />
<br />
<h3 style="margin: 2pt 0in 0pt;">
<span style="font-size: small;"><span style="color: #1f4d78;"><span style="font-family: "calibri light";">So, what’s new? <o:p></o:p></span></span></span></h3>
<span style="font-family: "calibri";">Get it in your head that update 1 is a fit and finish
release. The developer story was already good. Now it’s even faster and more
stable. Although Windows 10 update 1 has several consumer-oriented user delight
features, like Windows Hello, the UWP side of things is pretty stable. We’re
basically leaving significant innovations to our next release, codenamed
Redstone. <o:p></o:p></span><br />
<br />
<h2 style="margin: 2pt 0in 0pt;">
<span style="font-size: medium;"><span style="color: #2e74b5;"><span style="font-family: "calibri light";">CSharp scripting<o:p></o:p></span></span></span></h2>
<span style="font-family: "calibri";">Every C# developer knows that while debugging an
application, you can open Visual Studio’s Immediate Window to write and run
arbitrary code within the context of the current application. It’s brilliant.
Outside of that and a BizTalk feature called inline scripts, however, C# was
trapped within the context of a compiled assembly. Until now. </span><br />
<div align="left" class="MsoQuote" style="margin: 10pt 0.6in 8pt; text-align: left;">
<em><span style="color: #404040;"><span style="font-family: "calibri";">Aside: it’s worth pointing
out that this technology has been used internally for some time in Azure
solutions, especially on the compute side of the house. It was mostly hidden
from developers, but these solutions drove its development.<o:p></o:p></span></span></em></div>
<br />
<div class="MsoNormal" style="margin: 0in 0in 8pt;">
<span style="font-family: "calibri";">With Visual Studio 2015 update 1, developers can how choose
File > New > File > CSharp Script. The resulting *.CSX file can be
executed headless, without compilation, by the new stand-alone CSharp
Interpreter (CSI.exe). It’s the CSharp you love, with type-safety and the .NET
framework, but without the overhead and memory requirements of the .NET
runtime.<o:p></o:p></span></div>
<br />
<h2 style="margin: 2pt 0in 0pt;">
<span style="font-size: medium;"><span style="color: #2e74b5;"><span style="font-family: "calibri light";">The REPL tool<o:p></o:p></span></span></span></h2>
<span style="font-family: "calibri";">Visual Studio’s Immediate Window can now be executed
stand-alone, too. The new REPL tool was demonstrated in 2009 and developers
have been waiting anxiously ever since. It allows developers to hack out CSharp
code without creating a project or compiling needing to it. This is useful for
all types of developers wanting to iterate quickly. However, the real winner
here is education. Students can write, learn and test code without having to be
first taught about the structure of proper projects. Moreover, this is an
obvious gateway to cross-platform coding. <o:p></o:p></span><br />
<br />
<div class="MsoNormal" style="margin: 0in 0in 8pt;">
<blockquote class="tr_bq">
What’s REPL stand for? Read-Eval-Print-Loop. And in Visual
Studio’s REPL developers get all the candy that comes with Roslyn – like
comprehensive Intellisense. It also allows a slightly expanded syntax of C# to
enable important REPL-tasks like seeding and defining methods. NuGet support is
coming soon. <o:p></o:p></blockquote>
</div>
<br />
<h2 style="margin: 2pt 0in 0pt;">
<span style="font-size: medium;"><span style="color: #2e74b5;"><span style="font-family: "calibri light";">XAML designer<o:p></o:p></span></span></span></h2>
<span style="font-family: "calibri";">For developers, the worst part of development is users.
Everything works so much better until they get involved. Similarly, for the
authors of developer tools, the worst part is developers. Everything works so
much better until they get involved. And, so it is with the XAML designer. <o:p></o:p></span><br />
<span style="font-family: "calibri";">The XAML designer enables developers to visually create
stunning user experiences in a simple and productive way. One incredible
feature of the designer is that it can execute project code (that’s the code
written by the developer) within the designer, giving developer/designers a
rich design-time experience with the data and behaviors they would expect to
see at runtime. <o:p></o:p></span><br />
<span style="font-family: "calibri";"></span><br />
<span style="font-family: "calibri";">Because developers can write some gnarly project code, the
designer’s stability and memory footprint is subject to its quality and
immensity of that code. XAML developers know, the designer can crash. You might
say, “Just make it work.” But developers chanting that trite repost just
highlight their own ignorance in the orthogonal complexities of the subject
task. <o:p></o:p></span><br />
<br />
<div class="MsoNormal" style="margin: 0in 0in 8pt;">
<span style="font-family: "calibri";">To address this issue, many developers use the global
setting disabling all project code in the designer. As a result, every design
experience is degraded – even the ones that might not have needed to be. With
Visual Studio 2015 update 1, you don’t need to use this setting. Now, developers
can disable project code on a per-view basis. The all-or-nothing approach still
exists, but that’s more like cracking nuts with a steamroller. The new per-XAML
file setting is a better, precision instrument – and you can toggle it from
within the designer. <o:p></o:p></span></div>
<br />
<h2 style="margin: 2pt 0in 0pt;">
<span style="font-size: medium;"><span style="color: #2e74b5;"><span style="font-family: "calibri light";">Edit and continue<o:p></o:p></span></span></span></h2>
<span style="font-family: "calibri";">How great is edit and continue in c#? Similarly, XAML
developers can use the Live Visual Tree feature of Visual Studio to select any
element in the XAML tree of a running app. Developers can view and edit the
in-memory property values, seeing what different property values do to the user
experience. Soon, in a forthcoming CTP of Visual Studio 2015, runtime edits will be persisted back to the
actual XAML, much like edit and continue in C#. This workflow helps deliver incredible
productivity to app development. <o:p></o:p></span><br />
<br />
<h2 style="margin: 2pt 0in 0pt;">
<span style="font-size: medium;"><span style="color: #2e74b5;"><span style="font-family: "calibri light";">XAML Behaviors open source<o:p></o:p></span></span></span></h2>
<span style="font-family: "calibri";">Because developers can declare their user interface, XAML is
incredibly productive, but because developers can declare the logic of their
interface using Behaviors, XAML is amazing. Declaring an application through
XAML means developers get a design-time experience, with visual checks and
parsers to validate their intent as well as their implementation. Behaviors
enable this and give us encapsulation and reuse on an epic scale.<o:p></o:p></span><br />
<span style="font-family: "calibri";"></span><br />
<span style="font-family: "calibri";">Behaviors are now open source and available through NuGet.
This is a huge improvement over being an Extension SDK in the Universal Windows
Platform. Why? Well, for one, you can learn how to use behaviors by
interrogating the open source repository. For two, you can contribute to the
behaviors library. And, best of all, the Behaviors SDK will be compatible with
UWP apps and no longer give us warnings when we build apps that reference it. <o:p></o:p></span><br />
<br />
<h2 style="margin: 2pt 0in 0pt;">
<span style="font-size: medium;"><span style="color: #2e74b5;"><span style="font-family: "calibri light";">Pull requests hub<o:p></o:p></span></span></span></h2>
<span style="font-family: "calibri";">There is certainly more candy for developers in Visual
Studio update 1. One worth mentioning is the Pull Request Hub. Interacting with
git repositories prior to update 1 was, basically, a command-line task. But
we’ve embraced git and realize how appropriate it is for certain types of
project. With Pull Request Hub, within Visual Studio Team Explorer, developers can
review, create, assign and reassign pull requests without leaving the comfort
of their IDE. This is a huge and welcome improvement. <span style="mso-spacerun: yes;"> </span><o:p></o:p></span><br />
<br />
<h2 style="margin: 2pt 0in 0pt;">
<span style="font-size: medium;"><span style="color: #2e74b5;"><span style="font-family: "calibri light";">Application Insights<o:p></o:p></span></span></span></h2>
<span style="font-family: "calibri";">You might notice Application Insights has made an appearance
twice in this list. Take that to heart. Application Insights is a big deal in
the Microsoft developer story. This time it’s because of new Visual Studio
integration. Yes, developers can search, filter and share Application Insights
data right from the IDE. We knew that was coming. But, with update 1,
Application Insights events now appear in the Visual Studio Diagnostics Hub as
they occur. This is a boon for developers leveraging these analytics to build
better and more stable applications.<o:p></o:p></span><br />
<br />
<h2 style="margin: 2pt 0in 0pt;">
<span style="font-size: medium;"><span style="color: #2e74b5;"><span style="font-family: "calibri light";">.NET Core 5 RC & ASP.Net 5 RC<o:p></o:p></span></span></span></h2>
<span style="font-family: "calibri";">Available on Linux, Windows, and OSX, .NET Core is an optimized
implementation of .NET allowing managed languages, side-by-side, across
platforms for modern apps. This week, we announced that .NET Core now includes
networking and localization APIs. Meanwhile, ASP.Net includes localization,
Entity Framework 7 and Lag helpers. All this with top notch tooling inside
Visual Studio. <o:p></o:p></span><br />
<br />
<div class="MsoNormal" style="margin: 0in 0in 8pt 0.5in;">
<span style="font-family: "calibri";">Aside: the .NET Framework 4.6
(typically called the full framework) on which hundreds of thousands of desktop
applications are written, is the superset of the .NET Core and, together, are
under the umbrella we call .NET 2015 and share compilers and tooling. <o:p></o:p></span></div>
<br />
<h2 style="margin: 2pt 0in 0pt;">
<span style="font-size: medium;"><span style="color: #2e74b5;"><span style="font-family: "calibri light";">TypeScript<o:p></o:p></span></span></span></h2>
<span style="font-family: "calibri";">Bringing sense to JavaScript, TypeScript has received
several new enhancements in this update. These include significantly be<span lang="EN" style="mso-ansi-language: EN;">tter editor support, improvements with
dynamic JavaScript code patterns, richer module support, an easier way to
manage library definitions, and support for React/JSX and Angular2.</span></span><br />
<h1 style="margin: 12pt 0in 0pt;">
<span style="font-size: large;"><span style="color: #2e74b5;"><span style="font-family: "calibri light";">Microsoft Office<o:p></o:p></span></span></span></h1>
<span style="font-family: "calibri";">There are tons of announcements around office. <o:p></o:p></span><br />
<br />
<h2 style="margin: 2pt 0in 0pt;">
<span style="font-size: medium;"><span style="color: #2e74b5;"><span style="font-family: "calibri light";">Microsoft Graph<o:p></o:p></span></span></span></h2>
<span style="font-family: "calibri";">The interconnected of social data is pretty astounding.
Finding what relates to what is now easier with our cloud-compiled Microsoft
Graph. With it you can access information about users, groups, files, messages,
calendar, contacts, notes, tasks, and more, all under a single endpoint. <o:p></o:p></span><br />
<br />
<h2 style="margin: 2pt 0in 0pt;">
<span style="font-size: medium;"><span style="color: #2e74b5;"><span style="font-family: "calibri light";">Office UI Fabric<o:p></o:p></span></span></span></h2>
<span style="font-family: "calibri";">We’ve all been
copying the look-and-feel of Office for years. Now that Office is on the web,
it would sure be handy if developers had some type of framework to enable that
special Office experience. Introducing the Office UI Fabric. <o:p></o:p></span><br />
<br />
<h2 style="margin: 2pt 0in 0pt;">
<span style="font-size: medium;"><span style="color: #2e74b5;"><span style="font-family: "calibri light";">Office Connectors<o:p></o:p></span></span></span></h2>
<span lang="EN" style="mso-ansi-language: EN;"><span style="font-family: "calibri";">Want to get your
data into Office 365? Developers can build against Office Connectors through
webhooks to generate rich connector cards. And web sites can add
"Connect to Office 365" functionality to enable users to connect to
Office 365 groups directly.<o:p></o:p></span></span><br />
<br />
<h2 style="margin: 2pt 0in 0pt;">
<span lang="EN" style="mso-ansi-language: EN;"><span style="font-size: medium;"><span style="color: #2e74b5;"><span style="font-family: "calibri light";">Outlook REST endpoints<o:p></o:p></span></span></span></span></h2>
<span lang="EN" style="mso-ansi-language: EN;"><span style="font-family: "calibri";">Accessing Mail,
Calendar, and Contact data for any Office 365 or outlook.com user just got a
whole lot easier. In version 2, developers can leverage new capabilities around
Webhooks, Photos, Reminders and Timezone.<o:p></o:p></span></span><br />
<br />
<h2 style="margin: 2pt 0in 0pt;">
<span lang="EN" style="mso-ansi-language: EN;"><span style="font-size: medium;"><span style="color: #2e74b5;"><span style="font-family: "calibri light";">Outlook in-client store<o:p></o:p></span></span></span></span></h2>
<span lang="EN" style="mso-ansi-language: EN;"><span style="font-family: "calibri";">We’re now
introducing a new in-client store for Outlook to purchase Office add-ins. This
greatly simplifies the experience for users while blowing wide open the
opportunity for add-in developers to get more exposure for their products. <o:p></o:p></span></span><br />
<br />
<h2 style="margin: 2pt 0in 0pt;">
<span lang="EN" style="mso-ansi-language: EN;"><span style="font-size: medium;"><span style="color: #2e74b5;"><span style="font-family: "calibri light";">Office 365 Task API<o:p></o:p></span></span></span></span></h2>
<span lang="EN" style="mso-ansi-language: EN;"><span style="font-family: "calibri";">If collaboration
is your game, then tasks are likely a central part of your workflow. With the
new public preview of the Task API, developers can leverage tasks along with
the Microsoft Graph to create compelling experiences to make your teams more
effective. <o:p></o:p></span></span><br />
<br />
<h2 style="margin: 2pt 0in 0pt;">
<span lang="EN" style="mso-ansi-language: EN;"><span style="font-size: medium;"><span style="color: #2e74b5;"><span style="font-family: "calibri light";">Add-in commands<o:p></o:p></span></span></span></span></h2>
<span lang="EN" style="mso-ansi-language: EN;"><span style="font-family: "calibri";">Building
cross-platform add-ins for Office can extend capabilities directly into your
enterprise. With add-in commands, you can extend office by adding buttons
(commands) directly to the Office ribbon. This immersive approach makes your
add-in feel like a natural part of the experience.</span></span><br />
<h1 style="margin: 12pt 0in 0pt;">
<span lang="EN" style="mso-ansi-language: EN;"><span style="font-size: large;"><span style="color: #2e74b5;"><span style="font-family: "calibri light";">Conclusion<o:p></o:p></span></span></span></span></h1>
<span lang="EN" style="mso-ansi-language: EN;"><span style="font-family: "calibri";">There are a lot
of moving parts when it comes to the Microsoft developer story. This week’s
announcements were exciting. As you start to dig in and learn more, you might
want to check out some in-depth coverage from other evangelists across the
country who are uncovering the candy that makes us more productive and happier
campers. <o:p></o:p></span></span></div>
jerrynixonhttp://www.blogger.com/profile/06978720385628364065noreply@blogger.comDenver, CO, USA39.7392358 -104.99025139.3486558 -105.635698 40.1298158 -104.344804tag:blogger.com,1999:blog-8789713.post-86765185437675547812015-09-01T10:35:00.001-06:002015-09-01T18:08:11.929-06:00Software lessons from a hybrid<p>About a month ago, I was in the camp of rolling my eyes at hybrids on the road. To me their motivation was to save the planet. Well, it’s a big planet and a few hybrids aren’t going to supplant the egregious impact of a single volcano’s eruption. But then I started calculating my monthly spend on gasoline. My oversized sport utility vehicle and my turbo-charged crossover were fun, but expensive. <p>It’s easy math; a hybrid with a pathetic 13-gallon tank can drive farther than both of my other cars combined. Even though nothing is really created equal, hybrids have advanced enough generations for most to be similar enough that the brand you buy is mostly preference and price. I do some serious driving, so I decided to treat this adventure like a science experiment. <p><a href="http://lh3.googleusercontent.com/-JOejyl5y_dU/VeXTtY7pYlI/AAAAAAAAQbk/RNwbE1TIfss/s1600-h/image%25255B5%25255D.png"><img title="image" style="display: inline" alt="image" src="http://lh3.googleusercontent.com/-4hJz_GaJ3E8/VeXTwrf0d4I/AAAAAAAAQbs/e7QUsU9q3hE/image_thumb%25255B1%25255D.png?imgmax=800" width="550" height="279"></a></p> <a name='more'></a> <p>Gas prices have nowhere to go but up. That’s what I think. And I think we all sort of know it’s true, too. They go up, they go down, but generally, they go up. Right now, it’s more than $75 to fill my truck’s tank. Even with the new fields in the Dakotas, I expect some new federal tax or offshore market manipulation to keep the trend higher than low. I’m no economist. It’s not writing on the wall or insider information, just a feeling. <p> <h2>Darth Vader’s bathroom</h2> <p>For such a modestly sized car at such a humble price, the onboard electronics are out of this world. I now carry with me wherever I drive the most sophisticated consumption measurement computer I have ever seen. It calculates the blending of kilowatts with the gasoline engine, tracks charging and cruising, and presents me with a user experience that’s more Star Trek than anything. <blockquote> <p>Did you read that Star Trek comment and wonder if I knew Darth Vader is actually in Star Wars? Did you think I confused them? Darth Vader’s bathroom is actually a quote from the original Knight Rider series and I hear myself saying it all the time.</p></blockquote> <p>But I like technology. More importantly, the in-dash systems are more than informative; they are changing the way I drive. It rewards me when I am more efficient, and shows the exact cost of every jackrabbit start I pull off at stoplights. No kidding, there’s even a <a href="http://www.bing.com/search?q=define+gamification">gamification</a> side to the whole thing where my driving can contribute to the growth or lumbering destruction of a virtual tree. <p><a href="http://lh3.googleusercontent.com/-EnRzwiCAnb4/VeXTzsmAKYI/AAAAAAAAQb0/OYdLW0sKd7Q/s1600-h/image%25255B2%25255D.png"><img title="image" style="margin: 0px; display: inline" alt="image" src="http://lh3.googleusercontent.com/-LbaftV8Im8A/VeXT2JHwVjI/AAAAAAAAQb8/1_gZa9ddPCA/image_thumb.png?imgmax=800" width="550" height="295"></a> <p>Driving down the road, those nifty green leaves grow and fall off based off the recent trend of your driving. My kids watch it like an Xbox. I watch it as a glance to see how things are going. Yep. It’s neat. <p> <h3>Power to the software developer</h3> <p>I simply marvel at the ability of these well thought out cartoons to manipulate the way I drive, and even the way I want to drive. It made me appreciate the power we, as developers, have to make a positive difference in our business and its efficiencies. How user experience can cause people to change their behavior and improve what they have been doing for years – without forcing them to do it. And, I acknowledge, even to make things worse. <p>That being said, there are a few lessons I have learned from my hybrid. Since I am normal American, hybrids weren’t on my radar. But, in a moment of fiduciary malaise, I found myself reconsidering what I had thought before and wondering if there might be something to all this “science”. <p>There’s plenty more to learn, I am sure, but I wanted to share some of my initial learnings with you here. <p> <h2>Speed is not your enemy</h2> <p>My assumption was the faster I go the worse my mileage. This is actually true, but only for excessive speeds. Normal highways speeds under 80 miles an hour are cruising speeds for a hybrid. This means that once I reach my desired speed, I can watch my real-time mileage progressively work its way back up to an unfathomably happy number. <p>The cost of speed, as a reminder, is influenced by several factors. My manual recommends that I don’t open my windows on the highway. It recommends that I maintain my tires and purchase mileage-oriented tires, too. The car is already aerodynamic, and I can only imagine that if I were really to obsess over this, I would insist my car be clean to boot. <p> <h2>Hills are not your enemy</h2><img style="src="file:///C:/Users/Jerry/AppData/Local/Temp/WindowsLiveWriter-429641856/9A23AAB90A85/image.png"" width="500" height="198"> <p>My assumption was, because I live in the mountains, my overall mileage per gallon would suck. But, as it turns out, everything that goes up must come down and hybrid cars greatly benefit from the cruising (coasting) and braking associated with downhill driving. Is my mileage terrible as I climb these mountains? Yes. Does it average out in the end? Yes. <p>It is enthralling to watch the onboard computer calculate a ridiculously high mileage as I am coasting 15 miles down my mountain. I could ride my bike without peddling the same path. But even downhill, I could drive in a crazy way, degrading the high that will average out my uphill return. The lesson is simple; you have to want good mileage to get it. <p> <h2>Acceleration is not your enemy</h2> <p>My assumption was acceleration would take the most expensive power from the engine. This is actually true, if I wish to reach the speed limit in 5 seconds. Aggressive acceleration is possible, it just requires the gasoline engine to turn on and deliver. If, however, I change my expectation from 5 seconds to 10 seconds, then the battery accelerates the car to the speed limit. <p><img src="http://physics.taskermilward.org.uk/KS4/additional/forces_and_motion/resultant_forces/car-cartoon%20(1).jpg"> <p>It’s worth noting that some acceleration cannot be accomplished without the gasoline engine. This is especially true when climbing hills with steep grades. It’s also true when you are merging into traffic and don’t have the luxury of a slow start. To me, I am happy the car can deliver this even if it is inefficient. Sometimes you just want to go, mileage to the wind. <p> <h2>Conclusion</h2> <p>I had decided to purchase the BMW X1 – a six cylinder turbo-charged, 300+ horsepower rocket ship that managed to burn a gallon of gasoline every ~17 miles. The brand gave me pause, to be honest. There is something about a luxury brand. Do I want to be that guy? In that moment of pause, I was vulnerable to the power of suggestion, the idea of something else. That’s when I first saw the hybrid. <p>My assumption that a hybrid was expensive was wiped away by its unassuming price. My assumption that a hybrid could not have traction control was wiped away by that and several other notable features. And, my assumption that a hybrid had no climbing power was wiped away by the respectable horsepower of its gasoline engine and the torque of its supplemental electric engine. <p><a href="http://lh3.googleusercontent.com/-M-c1MBCv7RY/VeXT3-yw8VI/AAAAAAAAQcE/1Rz_PRoWpIc/s1600-h/image%25255B8%25255D.png"><img title="image" style="margin: 0px; display: inline" alt="image" src="http://lh3.googleusercontent.com/-_VN71_QIy-Q/VeXT6qErLiI/AAAAAAAAQcM/BOf3LH3RjUI/image_thumb%25255B2%25255D.png?imgmax=800" width="550" height="181"></a> <p>This is only the first month of this science experiment. My only real concession was that this hybrid is not an all-wheel drive. If I am intentional in when I drive this and when I drive my SUV, will it make a difference? I’m excited about the possibilities. This could be a great new chapter or a horrible mistake. Only time will tell; but I am hopeful. jerrynixonhttp://www.blogger.com/profile/06978720385628364065noreply@blogger.com