<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:blogger='http://schemas.google.com/blogger/2008' xmlns:georss='http://www.georss.org/georss' xmlns:gd="http://schemas.google.com/g/2005" xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-8789713</id><updated>2026-05-29T19:53:08.609-06:00</updated><category term="Win8"/><category term="Technique"/><category term="Microsoft"/><category term="Windows"/><category term="XAML"/><category term="WP7"/><category term="Screencast"/><category term="Community"/><category term="Metro"/><category term="Sample"/><category term="DevRadio"/><category term="Design"/><category term="Language"/><category term="SQL"/><category term="WP8"/><category term="Colleague"/><category term="Azure"/><category term="Personal"/><category term="Bing"/><category term="Mobile"/><category term="Office"/><category term="WPF"/><category term="Apple"/><category term="Helper"/><category term="Patterns"/><category term="WCF"/><category term="Surface"/><category term="UWP"/><category term="Wes"/><category term="Win10"/><category term="Xbox"/><category term="Academic"/><category term="Build"/><category term="Web"/><category term="ARM"/><category term="EF4"/><category term="Halo"/><category term="Projects"/><category term="ShawnKendrot"/><category term="TFS"/><title type='text'>Jerry Nixon @Work</title><subtitle type='html'>Building neat things.</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://blog.jerrynixon.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8789713/posts/default?redirect=false'/><link rel='alternate' type='text/html' href='http://blog.jerrynixon.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><link rel='next' type='application/atom+xml' href='http://www.blogger.com/feeds/8789713/posts/default?start-index=26&amp;max-results=25&amp;redirect=false'/><author><name>jerrynixon</name><uri>http://www.blogger.com/profile/06978720385628364065</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>543</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-8789713.post-199241158714411436</id><published>2025-10-02T14:57:00.001-06:00</published><updated>2025-10-02T14:57:00.126-06:00</updated><title type='text'>Floods, Tornadoes, Hurricanes, and Wildfires</title><content type='html'>&lt;p&gt;In the U.S., we’ve always had floods, tornadoes, hurricanes, and wildfires. What’s new is how many people now live in the paths of those risks. Cheap housing, job growth, and lifestyle have pulled people into places that once were left alone. I get it. But the storms still come.&lt;/p&gt;
&lt;p&gt;It’s very possible, even likely, that the rising cost of storm damage isn’t just about stronger storms. It’s about what we’ve built in their way. Since 1980, the U.S. has seen nearly 400 billion-dollar disasters. Climate change grabs the headlines, but many experts agree the real cost driver is us.&lt;/p&gt;
&lt;p&gt;We’ve packed more homes, businesses, and infrastructure into risky zones. Florida is a good example. The fifteen counties hit by Hurricane Milton grew from 3.7 million people in 1980 to over 9.1 million in 2023. Their economic output more than quadrupled.&lt;/p&gt;
&lt;p&gt;The same story plays out with wildfires. From 1990 to 2020, homes in fire-prone areas rose by 47 percent. That is not just bad planning. It is stacking kindling.&lt;/p&gt;
&lt;p&gt;Look at Hurricane Helene. Damages reached $250 billion. Not just because it was strong, but because there was more to destroy. Our choices, more than the climate, drove the cost.&lt;/p&gt;
&lt;p&gt;California shows it too. In early 2025, the Palisades Fire tore through Los Angeles, destroying more than 16,000 structures and forcing 200,000 people to evacuate. Estimated losses hit $275 billion. That may be the most expensive natural disaster in U.S. history. Again, it was not just the fire. It was what we built in its path.&lt;/p&gt;
&lt;p&gt;North Carolina tells the same story. When Helene stalled over the mountains in 2024, record rainfall overwhelmed rivers and flooded towns like Asheville, built in the floodplain.&lt;/p&gt;
&lt;p&gt;Now the Midwest is getting hit. Over Easter weekend, a slow-moving storm dropped tornadoes, hail, and flooding rains across Oklahoma and Texas. It used to be trailer parks and shanties that took the worst of it. Now it is McMansions and standard suburbs built in places that probably should never have been neighborhoods.&lt;/p&gt;
&lt;p&gt;Since 1980, the U.S. population has grown from 227 million to more than 344 million. That is a 50 percent jump. Much of that growth has been in high-risk zones: coastal counties, floodplains, and fire-prone hills.&lt;/p&gt;
&lt;p&gt;Today, nearly 40 percent of Americans live near the coast. The number of people in high fire hazard zones grew from one million in 1990 to 2.6 million by 2010. In 2023, high-risk metro areas grew 35 percent faster than low-risk ones. As more people move into vulnerable places, the cost of storms keeps climbing.&lt;/p&gt;
&lt;p&gt;Unless we rethink where and how we build, the financial toll will only rise.&lt;/p&gt;
&lt;p&gt;It is easy to blame climate change for expensive storms. But the truth is more complicated. It is both nature and human choice. And if we are honest, the largest factor is not temperature. It is us.&lt;/p&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8789713/posts/default/199241158714411436'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8789713/posts/default/199241158714411436'/><link rel='alternate' type='text/html' href='http://blog.jerrynixon.com/2025/10/floods-tornadoes-hurricanes-and.html' title='Floods, Tornadoes, Hurricanes, and Wildfires'/><author><name>jerrynixon</name><uri>http://www.blogger.com/profile/06978720385628364065</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-8789713.post-3161755857360370081</id><published>2025-10-01T14:54:00.001-06:00</published><updated>2025-10-01T14:54:24.729-06:00</updated><title type='text'>Plates Weighing 130 Shekels</title><content type='html'>&lt;p&gt;This morning I learned something. When I read “each silver plate weighing 130 shekels” in Numbers 7:85, it hit me that I had always thought a shekel was only a currency. Turns out it started as a unit of weight, and that sent me down a rabbit trail.&lt;/p&gt;&lt;p&gt;A shekel equaled about 11.4 grams of silver, or 0.025 pounds. A coin that weighed one shekel became worth one shekel. Value matched weight.&lt;/p&gt;&lt;p&gt;The shekel began in Mesopotamia around 2000 BC as a unit for trade. By the time it entered Israelite life around 1000 BC, it was standardized for religious use. “The shekel of the sanctuary” referred to the official temple weight, probably kept by priests to keep offerings fair. Later, during the Persian and Hellenistic periods, silver shekel coins were minted and circulated across the region. The shekel faded after the Roman era but came back in 1985 as the New Israeli Shekel (NIS), Israel’s current currency.&lt;/p&gt;&lt;p&gt;The British pound followed a similar path. It also began as a unit of weight. One pound of sterling silver equals 16 ounces, 7,000 grains, or 453.6 grams. That pound was divided into 240 pennies. So one ounce was valued at 20 pence. Why 20? There’s no clear law or decree. The Roman system divided a pound into 12 ounces, and over time each ounce came to be valued at 20 pence. It seems to have been a practical convention that stuck.&lt;/p&gt;&lt;p&gt;The old British system included shillings, crowns, and farthings. One pound was 20 shillings, one shilling was 12 pence. A crown was worth 5 shillings (60 pence). A farthing was one-fourth of a penny. It was layered, but people worked it out.&lt;/p&gt;&lt;p&gt;The official weight standard was literally stored in the Tower of London. All coins were compared against it to ensure they were honest. That was the physical “pound sterling.” In 1971, the UK switched to decimal: one pound = 100 new pence.&lt;/p&gt;&lt;p&gt;By contrast, today the metric system defines standards differently. The gram used to be defined by a platinum-iridium cylinder stored in France, but since 2019 it is tied to the Planck constant, a fixed value in physics, measured with a Kibble balance. No more chunks of metal in vaults. Now it is universal and grounded in nature itself. Honestly, I thought it was still physical until today.&lt;/p&gt;&lt;p&gt;So what about the pound today? In the US and UK, the pound is now officially defined by the metric system: exactly 0.45359237 kilograms. Ironically, the old imperial unit now depends on the very metric system it once resisted. No reference bar, no coin, just math.&lt;/p&gt;&lt;p&gt;Now you know what I know. Good morning.&lt;/p&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8789713/posts/default/3161755857360370081'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8789713/posts/default/3161755857360370081'/><link rel='alternate' type='text/html' href='http://blog.jerrynixon.com/2025/10/plates-weighing-130-shekels.html' title='Plates Weighing 130 Shekels'/><author><name>jerrynixon</name><uri>http://www.blogger.com/profile/06978720385628364065</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-8789713.post-4247748393987077304</id><published>2025-10-01T10:15:00.001-06:00</published><updated>2025-10-01T10:15:52.750-06:00</updated><title type='text'>Dolus specialis and Genocide</title><content type='html'>&lt;h1 style=&quot;text-align: left;&quot;&gt;TIL: Dolus specialis.&lt;/h1&gt;
&lt;p&gt;Dolus specialis is a Latin legal term used in international criminal law. It refers to a special form of intent, one not satisfied by general criminal intent alone but requiring a heightened intent directed at achieving a particular prohibited outcome.&lt;/p&gt;
&lt;h3 style=&quot;text-align: left;&quot;&gt;Etymology:&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;b&gt;dolus &lt;/b&gt;= intent, deceit, intentional wrongdoing&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;b&gt;specialis &lt;/b&gt;= particular, distinguished from othe&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;Together, dolus specialis means “special intent.”&lt;br /&gt;&lt;ul&gt;
&lt;/ul&gt;
&lt;p&gt;In law, this concept is crucial. Ordinary crimes may only require dolus generalis (general intent), such as intending to commit an act regardless of any larger purpose. But some crimes, like genocide, require dolus specialis: the specific intent to destroy, in whole or in part, a national, ethnical, racial, or religious group. That extra layer of intent distinguishes genocide from the many other horrors of war.&lt;/p&gt;
&lt;h4 style=&quot;text-align: left;&quot;&gt;This is very relevant to what’s happening in Israel right now.&lt;/h4&gt;
&lt;h2 style=&quot;text-align: left;&quot;&gt;Legal Accusation&lt;/h2&gt;
&lt;p&gt;Several UN bodies, human rights groups, and governments have argued that Israel’s military response in Gaza since October 7, 2023, meets the definition of genocide. They cite the enormous civilian death toll (over 40,000 according to Gaza authorities), widespread destruction of infrastructure, and mass displacement of more than 90% of Gaza’s population. They also highlight incendiary public statements by some Israeli officials, which appear to show an intent to destroy Palestinians “as such.”&lt;/p&gt;
&lt;p&gt;South Africa’s case before the International Court of Justice (ICJ) in December 2023 crystallized these accusations. It alleged that Israel’s actions, including bombings, ground operations, and restrictions on food and medicine, constitute genocide under the 1948 Convention. The ICJ, while not ruling on the merits yet, has issued provisional measures three times, finding there is a “plausible risk” of genocide. These measures require Israel to allow humanitarian aid and prevent genocidal acts, though they stop short of declaring that genocide is actually occurring.&lt;/p&gt;
&lt;h2 style=&quot;text-align: left;&quot;&gt;Intent Debate&amp;nbsp;&lt;/h2&gt;
&lt;p&gt;The heart of the debate lies in &lt;i&gt;dolus specialis&lt;/i&gt;. Genocide requires more than death, destruction, or suffering. It requires proof of specific intent to eliminate a group. Historically, genocides like the Holocaust, Rwanda, or Cambodia revealed that intent unmistakably through death camps, organized massacres, written policies, and systematic targeting of a group’s very existence.&lt;/p&gt;
&lt;h4 style=&quot;text-align: left;&quot;&gt;By contrast, the situation in Gaza is complex.&amp;nbsp;&lt;/h4&gt;&lt;p&gt;Most Palestinian deaths have occurred through urban warfare, bombardments, and military strikes, not systematic roundups, executions, or extermination camps. Israel has made evacuation warnings, facilitated some humanitarian aid, and targeted its rhetoric toward defeating Hamas rather than Palestinians as a whole. These facts complicate the assertion of dolus specialis.&lt;/p&gt;
&lt;p&gt;On the other hand, Israeli officials’ extreme statements, such as calls to “erase Gaza” or referring to Palestinians as “human animals,” are cited as evidence of genocidal incitement. Critics argue that even if Israel’s official war aim is the destruction of Hamas, the sheer scale of civilian harm combined with such rhetoric amounts to intent by conduct.&lt;/p&gt;
&lt;h2 style=&quot;text-align: left;&quot;&gt;Comparisons&lt;/h2&gt;
&lt;p&gt;&lt;b&gt;Genocide archetypes: &lt;/b&gt;The Holocaust used extermination camps. Rwanda saw systematic machete massacres. Cambodia carried out forced starvation and executions. In each, the intent to annihilate was unmistakable.&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Gaza context: &lt;/b&gt;Civilian deaths are enormous, but largely as collateral damage from war against an entrenched militant group that embeds itself in civilian infrastructure. The devastation is real but different in method and arguably in intent.&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Aid and survival: &lt;/b&gt;Israel’s allowance of some humanitarian aid, however limited, is sometimes viewed as contradicting genocidal intent, since genocide traditionally involves total deprivation of survival needs. Others argue this allowance is merely tactical and does not absolve intent if the broader conduct shows destruction.&lt;/p&gt;
&lt;h2 style=&quot;text-align: left;&quot;&gt;Hamas and Dolus Specialis&lt;/h2&gt;
&lt;p&gt;It is also worth noting that many legal scholars point out Hamas’s intent toward Israelis reflects dolus specialis more clearly. The October 7, 2023, attacks deliberately targeted civilians, including systematic killings, kidnappings, and massacres. Hamas’s founding covenant and public statements call for the elimination of Israel and Jews, aligning directly with genocidal intent. Scholars from The Atlantic, The New Yorker, and security experts describe this as genocidal rhetoric and action, with antisemitic tropes echoing Nazi-like propaganda.&lt;/p&gt;
&lt;h4 style=&quot;text-align: left;&quot;&gt;This contrast highlights the difficulty.&amp;nbsp;&lt;/h4&gt;&lt;p&gt;Israel is accused of genocide largely by inference, while Hamas openly declares it.&lt;/p&gt;
&lt;h2 style=&quot;text-align: left;&quot;&gt;Political Context&lt;/h2&gt;
&lt;p&gt;The debate is inflamed by the geopolitical stage. The U.S. continues to back Israel with military aid and diplomatic cover, citing security concerns and alliance commitments. Some states and international bodies use genocide language both as legal argument and political pressure. Meanwhile, accusations of genocide have historically been misapplied to Israel, such as in 1948 and 1967, making some observers cautious of political motives behind the charge.&lt;/p&gt;
&lt;p&gt;Inside Israel, the accusation of genocide is largely rejected, viewed as unthinkable given Jewish history. For Jews worldwide, the charge resonates painfully, especially as antisemitic attacks increase in other countries.&lt;/p&gt;
&lt;h2 style=&quot;text-align: left;&quot;&gt;Bigger Picture&lt;/h2&gt;
&lt;h4 style=&quot;text-align: left;&quot;&gt;Genocide is not simply a synonym for mass suffering.&amp;nbsp;&lt;/h4&gt;&lt;p&gt;It is a precise legal term requiring proof of special intent to destroy a group as such. The ongoing case at the ICJ shows that proving this intent is far harder than recognizing devastation.&lt;/p&gt;
&lt;h4 style=&quot;text-align: left;&quot;&gt;Applying the word genocide to Israel’s actions may be reductive.&amp;nbsp;&lt;/h4&gt;&lt;p&gt;It risks collapsing the complexity of war, strategy, propaganda, and tragedy into a single trigger word. The result can be less about legal precision and more about political weaponization.&lt;/p&gt;
&lt;h4 style=&quot;text-align: left;&quot;&gt;None of this diminishes the suffering in Gaza.&amp;nbsp;&lt;/h4&gt;&lt;p&gt;The civilian toll, the displacement, the destruction of homes and hospitals, all are catastrophic and cry out for an end. But whether those realities constitute genocide is a distinct and difficult legal question.&lt;/p&gt;
&lt;h2 style=&quot;text-align: left;&quot;&gt;We Must Hold&lt;/h2&gt;
&lt;h4 style=&quot;text-align: left;&quot;&gt;We can affirm two truths:&lt;/h4&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;That applying “genocide” simplistically may be more about echo chambers, programming, and propaganda than about legal accuracy.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;That the devastation in Gaza is intolerable, that Israeli sovereignty matters, and that Jewish communities face precarious dangers as antisemitism rises globally.&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h4 style=&quot;text-align: left;&quot;&gt;Word matters, but so does the reality.&amp;nbsp;&lt;/h4&gt;&lt;p&gt;What matters most of all is the desire to see this end, for Palestinians, for Israelis, and for the stability of a region where peace feels impossible yet remains essential.&lt;/p&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8789713/posts/default/4247748393987077304'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8789713/posts/default/4247748393987077304'/><link rel='alternate' type='text/html' href='http://blog.jerrynixon.com/2025/10/dolus-specialis-and-genocide.html' title='Dolus specialis and Genocide'/><author><name>jerrynixon</name><uri>http://www.blogger.com/profile/06978720385628364065</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-8789713.post-2538116342422492807</id><published>2025-09-30T12:27:00.005-06:00</published><updated>2025-09-30T12:27:25.620-06:00</updated><title type='text'>Just a thought on Senator Kennedy</title><content type='html'>&lt;p&gt;I am trying to resist the tidal wave of programming pushed at me about Secretary Kennedy. I hear friends and family parroting anti-everything talking points that gloss over reality and try to dehumanize and derail every word he says. Instead, I pause and actually listen. I want context, not spin.&lt;/p&gt;
&lt;p&gt;Please don’t get triggered. I’m just trying to explain what I feel when I hear the Secretary announce this and that. It’s not as black and white as the talking heads want you to believe.&lt;/p&gt;
&lt;p&gt;We’ve never experienced someone in this kind of position with his level of passion combined with his level of carte blanche authority. I don’t think he’s trying to get rich, and people saying he is stupid are clearly pawns of backroom propaganda.&lt;/p&gt;
&lt;p&gt;If anti-vax, anti-science, or undermining the medical establishment are the first things you hear when his name comes up, you may need to ask yourself whether you’ve absorbed programming you didn’t realize.&lt;/p&gt;
&lt;p&gt;Honestly, I think he’s in the position of his life and seems imbued with a level of urgency that might actually result in change. He really seems to be on the side of the American public and unpartisan in that sense. It’s not something we’ve experienced much of, so I understand why people are suspicious to a degree.&lt;/p&gt;
&lt;p&gt;These propaganda machines make no sense to me, and neither does the susceptibility of people drinking it all up. They push vapid claims, unredeemable vitriol, and out-of-context clips to insinuate manufactured nonsense for someone who hasn’t earned that treatment.&lt;/p&gt;
&lt;p&gt;As for me, I’m cautiously optimistic that the status quo, which we can all agree is problematic in so many ways, might finally be at risk. If Kennedy is wrong, whatever he accomplishes can be undone. And frankly, once he is out of office, the powers against him will likely undo everything he manages to accomplish anyway. Sigh.&lt;/p&gt;&lt;p&gt;Ref:&amp;nbsp;&lt;a href=&quot;https://x.com/i/status/1973066020471341312&quot; target=&quot;_blank&quot;&gt;https://x.com/i/status/1973066020471341312&lt;/a&gt;&amp;nbsp;&lt;/p&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8789713/posts/default/2538116342422492807'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8789713/posts/default/2538116342422492807'/><link rel='alternate' type='text/html' href='http://blog.jerrynixon.com/2025/09/just-thought-on-senator-kennedy.html' title='Just a thought on Senator Kennedy'/><author><name>jerrynixon</name><uri>http://www.blogger.com/profile/06978720385628364065</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-8789713.post-7011324539938608881</id><published>2025-09-15T20:54:00.004-06:00</published><updated>2025-09-15T20:54:50.664-06:00</updated><title type='text'>The weariness of caring deeply</title><content type='html'>&lt;p&gt;It’s been three days since Charlie Kirk was shot. I have to admit I never watched his show, listened to one of his speeches, or followed him online. My only exposure was the “change my mind” meme and the occasional short clip of a Q&amp;amp;A with a student. Honestly, I’m not sure I would have recognized him in a crowd. It was only this week that I learned Turning Point was his production company.&lt;/p&gt;&lt;p&gt;Still, I’ve been thinking about this event a lot. As I’ve learned more about his life, his faith in Christ, and his relationship with his wife, the weight of it has grown heavier. I feel disappointment. Disappointment in the behavior of the young shooter, disappointment in the loss of Charlie’s voice, and disappointment in the irreverent hostility of so many who clearly do not understand what he actually said or what this actually means.&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: right; float: right; margin-bottom: 1em; margin-left: 1em; text-align: center;&quot;&gt;&lt;img alt=&quot;&quot; data-original-height=&quot;683&quot; data-original-width=&quot;1024&quot; height=&quot;213&quot; src=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEiwzPPxtVdtexLMCOk0qdFoYqQrtsp25B5kn2sSHunrQUka5txqvuVDgf59j83MOUBgS1hMRcgzj63n9Tap3YfbUWuqCVbROOiRS6fw4h7rznjSHxMIYgYE-GV2v1If8rn9TNiNJ7oCwr0rDqVYYmcWOskAKTOU8TRQWcDbUYX_CwKZ7h4sPKWh9A&quot; width=&quot;320&quot; /&gt;&lt;/div&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;Yet disappointment is not the strongest feeling. At first, I wondered if I was sad or even depressed. But watching how some gladly smear a lifetime of faithfulness for a moment of political gain, I realized it is not depression. It is exhaustion. Exhaustion from constantly pushing back, holding back, and keeping in the pressure not to react in some terrible way. Exhaustion from refusing to let go of integrity, even when everything around seems to encourage cynicism or cruelty.&lt;/p&gt;&lt;p&gt;I suspect many of my friends who say they feel depressed over recent events are really feeling the same thing: exhaustion. The broken part of us looks for a chance to rise up in moments like this, to take advantage of our weakness.&lt;/p&gt;&lt;p&gt;Well. It will not be today.&lt;/p&gt;&lt;p&gt;Roy F. Baumeister, a social psychologist, described this as ego depletion, the idea that self-control draws from a limited pool of mental resources. Using willpower in one area temporarily reduces our capacity in others. He compared willpower to a muscle: it can be fatigued when overused, but it can also be strengthened through practice.&lt;/p&gt;&lt;p&gt;Perhaps today is a kind of spiritual leg day at the gym.&lt;/p&gt;&lt;p&gt;I believe this puts a fine point on the reason God so frequently brings up the idea of rest. Rest is not just idleness but a spiritual discipline that renews strength, clears perspective, and recharges the soul. Without it, exhaustion makes us vulnerable to despair and rash reaction. With it, we remember who we are, whose we are, and that the battle is not ours to win in our own strength.&lt;/p&gt;&lt;p&gt;Matthew 11:28 “Come to me, all you who are weary and burdened, and I will give you rest. Take my yoke upon you and learn from me, for I am gentle and humble in heart, and you will find rest for your souls. For my yoke is easy and my burden is light.”&lt;/p&gt;&lt;p&gt;I have always felt encouragement when I consider that Jesus Christ was the man who literally had the weight of not only the entire world on his shoulders, but the weight of the entire world through all of time. How he could refer to the weight he had to bear as light and easy. In that moment he let slip not just how important he is, not just how serious he is, but how unimaginably powerful he is.&lt;/p&gt;&lt;p&gt;









&lt;/p&gt;&lt;p&gt;Why someone like that, the King of the universe, would condescend and take a knee just so he could look someone like me, his mortal enemy, in the eye and express his tireless love still strikes me. Why he would willingly proceed to the cross for my sake. Why he would willingly suffer on the cross for my sake. Perhaps I will never fully understand. But at the least, I will believe him.&lt;/p&gt;&lt;blockquote&gt;&lt;p&gt;Romans 12:14-21 &quot;Bless those who persecute you; bless and do not curse. 15 Rejoice with those who rejoice; mourn with those who mourn. 16 Live in harmony with one another. Do not be proud, but be willing to associate with people of low position. Do not be conceited. 17 Do not repay anyone evil for evil. Be careful to do what is right in the eyes of everyone. 18 If it is possible, as far as it depends on you, live at peace with everyone. 19 Do not take revenge, my dear friends, but leave room for God’s wrath, for it is written: “It is mine to avenge; I will repay,” says the Lord. 20 On the contrary: “If your enemy is hungry, feed him; if he is thirsty, give him something to drink. In doing this, you will heap burning coals on his head.” 21 Do not be overcome by evil, but overcome evil with good.&quot;&lt;/p&gt;&lt;/blockquote&gt;&lt;p&gt;We often comment that Jesus’ economy is an upside-down economy. What we see in this world almost always works the opposite and stands in opposition to what Jesus actually teaches. But if he is anything, he is consistent. From Genesis to Revelation, God constantly expresses his love for us in the context of just how much he wants to handle our difficult moments.&lt;/p&gt;&lt;p&gt;God does not want his children chasing vengeance or waving the banner of bitterness. Though we were designed for great things, it is not just that we cannot carry this weight, it is that we were never supposed to carry it. He is the one offering us rest; he is not asking for rest from us. Some of the most difficult moments of obedience are the ones where we thoughtfully and intentionally do nothing at all. It is a new banner to fly, one that declares we trust and obey, that he will do what he says he will do. There is no other way.&lt;/p&gt;&lt;p&gt;

&lt;/p&gt;&lt;p&gt;Surrender on the battlefield is different than this kind of surrender. Our shallow, vapid, and almost silly version of justice cannot deliver; it is enthroned with failure and so often becomes the recipe for the deepest injustice. We do not even mean well, we simply want to be right. But when we surrender to God’s justice and abandon our own nonsense, we are surrendering to what may be the finest of all things, the most emblazoned jewel in the crown of the King.&lt;/p&gt;What amazes me is how we are told to do this. The fundamental blueprint for the Christian life is simple: read the Bible, obey the Bible, and share the Bible. Yet as we read, the Scriptures practically shout another command that runs right alongside those three. That command is prayer.&lt;blockquote&gt;&lt;div&gt;Philippians 4:6-7 &quot;6 Do not be anxious about anything, but in every situation, by prayer and petition, with thanksgiving, present your requests to God. 7 And the peace of God, which transcends all understanding, will guard your hearts and your minds in Christ Jesus.&quot;&lt;/div&gt;&lt;/blockquote&gt;&lt;div&gt;&lt;p&gt;I grew up in a home where prayer was more formal than familiar, but I have since learned it can be both without conflict. As I have grown older, I have come to see that many of the so-called paradoxes of the faith only appear that way because of my own narrow, single-minded perspective. I once fought hard to reduce competing and cacophonous ideas down to one, thinking simplicity meant truth. But the longer I walk with God, the more I see that true theological harmony comes when I accept the mystery and allow multiple notes to fill the room.&amp;nbsp;&lt;/p&gt;&lt;p&gt;Paradoxes reveal the glory of God and our own. The sparks of iron sharpening iron are not meant to push me to erase complexity simply because it confounds me, but to help me embrace the joy of knowing that God will never fit into a neat little box. 1 Corinthians 2:7 &quot;7 No, we declare God’s wisdom, a mystery that has been hidden and that God destined for our glory before time began.&quot;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;blockquote&gt;Oh Lord my God &lt;br /&gt;When I in awesome wonder &lt;br /&gt;Consider all the worlds &lt;br /&gt;Thy hands have made &lt;br /&gt;I see the stars &lt;br /&gt;I hear the rolling thunder &lt;br /&gt;Thy power throughout &lt;br /&gt;The universe displayed&lt;/blockquote&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;Prayer is speaking to God in a way that not only he hears, but we hear too. It is the spiritual communication that forms the foundation of our relationship with him. Just as Jesus wept at Lazarus’ tomb, even though he knew he would raise him in moments, God wants to hear from us even though he already knows our every thought and counts every hair on our heads.&lt;/p&gt;&lt;p&gt;Prayer also humbles us mentally, verbally, and physically, drawing us into a posture that moves us toward repentance. On the one hand, our personal engagement with him as we lean in and listen reminds us of his everlasting and inexplicable love for us. We experience his goodness. And as Romans 2:4 reminds us, God’s kindness leads us to repentance. And what is repentance other than the first step in reconciliation, the finest of all the good things we can ever experience in this short life.&lt;/p&gt;&lt;p&gt;


&lt;/p&gt;&lt;p&gt;Then again, think of it like baptism; it is a public commitment to Christ, just as a wedding is a public commitment to a spouse. In the same way, prayer reminds us and renews our commitment to put our full weight on God. Even the vaporous whisper under our breath in the dark, shrouded in tears, is a spoken declaration of our true circumstance, our actual need, and our reliance on Jesus to ransom and rescue us from this dark world of our own making.&lt;/p&gt;Sometimes we don&#39;t know what to say and we use liturgies or prayer formulas to get us through the night. Sometimes we don&#39;t know what to say and the Spirit of God steps in and speak son our behalf. All of this reminds me of a favorite song, Better than a Hallelujah. It&#39;s haunting chorus sings:&amp;nbsp;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;blockquote style=&quot;border: none; margin: 0px 0px 0px 40px; padding: 0px; text-align: left;&quot;&gt;&lt;div&gt;We pour out our miseries&lt;/div&gt;&lt;/blockquote&gt;&lt;blockquote style=&quot;border: none; margin: 0px 0px 0px 40px; padding: 0px; text-align: left;&quot;&gt;&lt;div&gt;God just hears a melody&lt;/div&gt;&lt;/blockquote&gt;&lt;blockquote style=&quot;border: none; margin: 0px 0px 0px 40px; padding: 0px; text-align: left;&quot;&gt;&lt;div&gt;Beautiful, the mess we are&lt;/div&gt;&lt;/blockquote&gt;&lt;blockquote style=&quot;border: none; margin: 0px 0px 0px 40px; padding: 0px; text-align: left;&quot;&gt;&lt;div&gt;The honest cries of breaking hearts&lt;/div&gt;&lt;div&gt;Are better than a Hallelujah. Sometimes.&lt;/div&gt;&lt;/blockquote&gt;&lt;div&gt;&lt;p&gt;Looking back, regrets, I’ve had a few. And if I am honest, far too many to mention. I have never subscribed to the sad notion that we should live with “no regrets.” Even God had regrets. The Lord told Samuel he regretted making Saul king, and in Genesis, just before the flood, he regretted making human beings on the earth. Where God regrets the choices we made, my regrets are the choices I made.&lt;/p&gt;&lt;p&gt;
&lt;/p&gt;&lt;p&gt;For me, though, a big one is the lack of faith I showed when I didn’t turn to prayer. Here’s what I mean: if I truly believed, I wouldn’t have been able to stop. Like jumping out of an airplane without a parachute, I ran into this broken world with nothing but my bare hands, and I wasn’t ready. The truth is, I could never be ready to do it all on my own. The showcase of all my regrets is that I haven&#39;t believed enough in God’s faithfulness to make prayer an unceasing part of my life.&lt;/p&gt;&lt;p&gt;And so, we circle back to the beginning. How tired am I of trying to do it all on my own? With the assassination of Charlie Kirk, I feel pulled into the whiles of my own imagination, inventing remedies born out of logic and reason as if they could fix what is broken. But how foolish I have been, and how deeply exhausted it has made me.&lt;/p&gt;&lt;p&gt;
&lt;/p&gt;&lt;p&gt;What I need, what we all need, is not more striving but more surrender. Not more clever answers, but more prayer. Not more weight on my shoulders, but more trust in the one who already carried it all to the cross. If there is anything this moment teaches me, it is that my exhaustion is not meant to push me on over that cliff, but to pull me back to King Jesus.&amp;nbsp;&lt;br /&gt;&lt;/p&gt;&lt;/div&gt;&lt;blockquote&gt;What a friend we have in Jesus &lt;br /&gt;All our sins and griefs to bear&lt;br /&gt;What a privilege to carry&lt;br /&gt;Everything to God in prayer&lt;br /&gt;&lt;/blockquote&gt;&lt;blockquote&gt;Oh what peace we often forfeit&lt;br /&gt;Oh what needless pain we bear&lt;br /&gt;All because we do not carry&lt;br /&gt;Everything to God in prayer&lt;/blockquote&gt;It is the glory of God to conceal a matter;&amp;nbsp;to search out a matter is the glory of kings.</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8789713/posts/default/7011324539938608881'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8789713/posts/default/7011324539938608881'/><link rel='alternate' type='text/html' href='http://blog.jerrynixon.com/2025/09/the-weariness-of-caring-deeply.html' title='The weariness of caring deeply'/><author><name>jerrynixon</name><uri>http://www.blogger.com/profile/06978720385628364065</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/a/AVvXsEiwzPPxtVdtexLMCOk0qdFoYqQrtsp25B5kn2sSHunrQUka5txqvuVDgf59j83MOUBgS1hMRcgzj63n9Tap3YfbUWuqCVbROOiRS6fw4h7rznjSHxMIYgYE-GV2v1If8rn9TNiNJ7oCwr0rDqVYYmcWOskAKTOU8TRQWcDbUYX_CwKZ7h4sPKWh9A=s72-c" height="72" width="72"/></entry><entry><id>tag:blogger.com,1999:blog-8789713.post-5038675498571673350</id><published>2025-03-28T15:01:00.001-06:00</published><updated>2025-10-01T15:03:04.208-06:00</updated><title type='text'>The English Word: Secretary</title><content type='html'>&lt;p&gt;With all the recent headlines about government secretaries, I found myself wondering how secret and secretary are related. As it turns out, they are very closely connected.&lt;/p&gt;
&lt;p&gt;Both words trace back to the Latin root secretum, meaning something set apart, hidden, or private.&lt;/p&gt;
&lt;p&gt;Originally, a secretary was not simply someone who typed letters or kept calendars. A secretary was a trusted person who managed confidential matters, literally someone entrusted with secrets. In Medieval Latin, the term secretarius referred to an official handling private affairs for a ruler or noble. By both title and function, secretaries were keepers of secrets.&lt;/p&gt;
&lt;p&gt;Over time, the word shifted. Today, we no longer use secretary as a professional title in most contexts, except in government. In business, secretary has been replaced with roles like assistant or executive administrator. This kind of linguistic recategorization can be frustrating for English learners, much like when “stewardess” gave way to “flight attendant.”&lt;/p&gt;
&lt;p&gt;Still, to be the Secretary of State or Secretary of Defense carries no diminishment. The title signals authority and responsibility, not clerical support. Likewise, the UK’s Minister of Foreign Affairs is not assumed to be a religious figure. Both words are shaped by history and context.&lt;/p&gt;
&lt;p&gt;Minister itself comes from the Latin minus, meaning lesser or subordinate. A minister, whether in government or religion, is one who serves a higher purpose, whether that is the state, the public, or God.&lt;/p&gt;
&lt;p&gt;And what about secrete? It also comes from the same Latin root, with the sense of “to separate.” The word took on a biological meaning and has been stuck there ever since. It may be an etymological cousin, but one that lives in a very different neighborhood.&lt;/p&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8789713/posts/default/5038675498571673350'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8789713/posts/default/5038675498571673350'/><link rel='alternate' type='text/html' href='http://blog.jerrynixon.com/2025/03/the-english-word-secretary.html' title='The English Word: Secretary'/><author><name>jerrynixon</name><uri>http://www.blogger.com/profile/06978720385628364065</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-8789713.post-6759533191924316852</id><published>2025-03-24T15:03:00.001-06:00</published><updated>2025-10-01T15:04:40.181-06:00</updated><title type='text'>About $4.3 Trillion in New Investments?</title><content type='html'>&lt;p&gt;&amp;nbsp;Last week I mentioned that major economic growth engines are being spun up in the U.S. with new investments on a massive scale. Here is a list of the biggest announcements so far. Together they add up to about $4.3 trillion in new investment beginning in 2025. The list keeps growing, but even now it gives a clear sense of the scale.&lt;/p&gt;
&lt;p&gt;If you are trying to decide whether the next several years will lean bearish or bullish, this might help.&lt;/p&gt;
&lt;p&gt;United Arab Emirates: $1.4 trillion, a 10-year investment framework targeting U.S. sectors such as AI infrastructure, semiconductors, energy, and manufacturing.&lt;/p&gt;
&lt;p&gt;Hyundai Motor Group: $20 billion, including a $5.8 billion steel plant in Louisiana, designed to localize production and reduce the impact of future tariffs on foreign-made metals.&lt;/p&gt;
&lt;p&gt;Taiwan Semiconductor Manufacturing Company (TSMC): $100 billion to establish three new advanced semiconductor plants, greatly expanding domestic chip manufacturing capacity.&lt;/p&gt;
&lt;p&gt;Saudi Arabia: $600 billion over four years, pledged by Crown Prince Mohammed bin Salman to President Donald Trump, aimed at strengthening economic ties and diversifying Saudi investments.&lt;/p&gt;
&lt;p&gt;Apple Inc.: More than $500 billion over the next four years to expand U.S. manufacturing and research, including a new AI server facility in Texas.&lt;/p&gt;
&lt;p&gt;Eli Lilly and Company: $27 billion in additional investment to increase domestic drug production, bringing its total U.S. manufacturing commitments since 2020 to more than $50 billion.&lt;/p&gt;
&lt;p&gt;GE Aerospace: Nearly $1 billion to reinforce U.S. manufacturing and supply chains, along with hiring 5,000 American workers.&lt;/p&gt;
&lt;p&gt;Stellantis: $5 billion into its U.S. manufacturing network to expand vehicle production.&lt;/p&gt;
&lt;p&gt;India: Companies such as ReNew are expanding exports to the U.S. to help fill the gap created by China’s exclusion from the U.S. solar market.&lt;/p&gt;
&lt;p&gt;Japan: $1 trillion pledged to U.S. industries, including defense and AI, in a move to reinforce U.S. military partnerships in the region.&lt;/p&gt;
&lt;p&gt;Australia: $798 million payment to the U.S. under the AUKUS deal, strengthening the defense industrial partnership and supporting nuclear-powered submarines.&lt;/p&gt;
&lt;p&gt;Nippon Steel Corporation: $14.9 billion proposed acquisition of U.S. Steel, aimed at bolstering American steel production.&lt;/p&gt;
&lt;p&gt;OpenAI: $500 billion Stargate project in partnership with SoftBank, Oracle, and MGX to build U.S. AI infrastructure by 2029. SoftBank is also investing up to $25 billion in a Japan-focused joint venture.&lt;/p&gt;
&lt;p&gt;Microsoft: $110.3 billion to build an AI hub and data center campus in Wisconsin, along with partnerships with BlackRock, Nvidia, and MGX to expand U.S. AI infrastructure.&lt;/p&gt;
&lt;p&gt;Maersk Line: $2 billion redirected to expand East Coast port capacity, spurred by lower shipping costs and fewer delays compared to Panama Canal routes.&lt;/p&gt;
&lt;p&gt;Boeing: $4 billion in new assembly and logistics facilities, capitalizing on rerouted shipping that avoids Panama Canal bottlenecks.&lt;/p&gt;
&lt;p&gt;Delta Air Lines: $1.2 billion fleet upgrade to more fuel-efficient aircraft, supported by stabilized U.S. supply chains and increased air cargo activity.&lt;/p&gt;
&lt;p&gt;Hanwha Aerospace (South Korea): $2.5 billion share sale to fund international expansion, including new U.S. manufacturing bases, to meet rising defense demand.&lt;/p&gt;
&lt;p&gt;These announcements also ride on short-term policy factors. Reduced regulations and a lighter corporate tax environment have combined with global instability to redirect capital into the U.S. The bet is that American manufacturing and innovation will accelerate.&lt;/p&gt;
&lt;p&gt;The next few years could see job growth, stronger infrastructure, and a new wave of technological leadership.&lt;/p&gt;
&lt;p&gt;With plenty of caveats, of course.&lt;/p&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8789713/posts/default/6759533191924316852'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8789713/posts/default/6759533191924316852'/><link rel='alternate' type='text/html' href='http://blog.jerrynixon.com/2025/03/about-43-trillion-in-new-investments.html' title='About $4.3 Trillion in New Investments?'/><author><name>jerrynixon</name><uri>http://www.blogger.com/profile/06978720385628364065</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-8789713.post-8213917717171360147</id><published>2025-03-05T15:09:00.001-07:00</published><updated>2025-10-01T15:11:04.148-06:00</updated><title type='text'>The Battlefield of Language</title><content type='html'>&lt;p&gt;I am writing this with my teeth clenched, my eyes squinted, and my fingers striking the keys harder than they should. I know only the choir will hear this sermon, yet I write it anyway. If nothing else, it is a vent.&lt;/p&gt;&lt;p&gt;The English language today has been weaponized. Ordinary words have become dog whistles, ideological tests, or verbal traps that make honest conversation nearly impossible. In trying to control the narrative, we have stripped words of their utility.&lt;/p&gt;&lt;p&gt;Talking about discrimination is risky. Words like racism, sexism, colorism, sizeism, ageism, ableism, marginalized, disadvantaged, and oppression now signal ideology more than reality. Terms like underrepresented, bias, orientation, identity, race, gender, intersectionality, POC, descent, and minority shift meaning depending on the speaker. Discourse becomes a minefield.&lt;/p&gt;&lt;p&gt;Other words demand ideological conformity. Microaggressions, allyship, diversity, inclusion, equity, systemic, white supremacy, colonialism, decolonization, and land acknowledgment are wielded as litmus tests. Even merit, fair play, and quota are reinterpreted as either oppressive tools or necessary correctives.&lt;/p&gt;&lt;p&gt;Critiques of social structures such as heteronormativity, cisnormativity, patriarchy, transphobia, homophobia, xenophobia, Islamophobia, and anti-Semitism serve to sort people into categories of enlightened or irredeemable. Activist language like neurodiversity, environmental justice, restorative justice, trigger warning, safe space, cultural appropriation, and performative activism mark tribal boundaries more than they solve problems.&lt;/p&gt;&lt;p&gt;The same is true in psychology and gender. Gaslighting, implicit bias, intersectional feminism, non-binary, genderqueer, misogyny, misogynoir, anti-racism, critical race theory, whiteness, Latinx, BIPOC, QTPOC, deadnaming, misgendering, and gender dysphoria have been weaponized to demand allegiance. Disagreement is treated as bigotry.&lt;/p&gt;&lt;p&gt;Activism itself is saturated with loaded terms. Body positivity, slacktivism, virtue signaling, call-out culture, cancel culture, emotional labor, food justice, health equity, indigenous rights—all of these words are used as shields or swords, depending on who wields them. Even resistance and protest, once celebrated as pillars of democracy, now mean entirely different things depending on who is marching and why.&lt;/p&gt;&lt;p&gt;Health and medicine are not exempt. Political labels such as democracy, fascism, authoritarianism, Christian nationalism, and insurrection are deployed to create fear, not dialogue. Nations themselves have become triggers: Russia, Ukraine, Israel, China, even Canada. Mention Trump, Biden, Putin, Congress, or Elon Musk, and discussion collapses. The figure becomes either idol or villain, with nothing in between.&lt;/p&gt;&lt;p&gt;Even moral language has been tainted. Virtue, tradition, submission, family, homemaking, happiness, good and evil, right and wrong were once pillars of meaning but are now recast as political signals.&lt;/p&gt;&lt;p&gt;So how do we move toward understanding and compromise when the vocabulary itself is a battlefield? Words once meant for clarity and connection are now weapons. The wrong word at the wrong moment is no longer a slip; it is a declaration.&lt;/p&gt;&lt;p&gt;We need to start rejecting the machinery of triggers, not as private sensitivities but as deliberate schemes to fracture society. If we must be intolerant of anything, let it be the forces that back us into corners where division and hostility are the only possible outcomes.&lt;/p&gt;&lt;p&gt;Reject justice that requires a victim. Reject hatred and disparagement as solutions.&lt;/p&gt;&lt;p&gt;











&lt;/p&gt;&lt;p&gt;If our words cannot heal, they will continue to wound. And if we allow language to remain a battlefield, we will keep losing, not to our enemies, but to ourselves.&lt;/p&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8789713/posts/default/8213917717171360147'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8789713/posts/default/8213917717171360147'/><link rel='alternate' type='text/html' href='http://blog.jerrynixon.com/2025/03/the-battlefield-of-language.html' title='The Battlefield of Language'/><author><name>jerrynixon</name><uri>http://www.blogger.com/profile/06978720385628364065</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-8789713.post-5911919860718428870</id><published>2025-02-14T15:12:00.002-07:00</published><updated>2025-10-01T15:14:32.915-06:00</updated><title type='text'> AI Will Not Replace Human Engineers</title><content type='html'>&lt;p&gt;&amp;nbsp;AI will not replace human engineers unless it can do a better job than they can. Simply being faster is not enough, because engineering is not just about producing code. It is about solving problems, anticipating failure, designing for scale, and making trade-offs that affect real people and businesses.&lt;/p&gt;
&lt;p&gt;In expansive systems, human engineers bring something AI cannot replicate: the ability to anticipate problems before they occur. That ability is not magic. It comes from years of experience across many contexts, seeing where things have broken in the past, and recognizing subtle signals of risk. A human can zoom out to see the full system and zoom in to identify a single faulty assumption. That combination of depth and breadth is what turns programming into engineering.&lt;/p&gt;
&lt;p&gt;From my own experience using AI as a coding partner, I have found it helpful for small, isolated tasks. It can produce snippets, boilerplate, or quick scaffolding. But as models grow larger and supposedly more advanced, their practical coding skills do not show the same trajectory. It feels like we have hit a plateau.&lt;/p&gt;
&lt;p&gt;Too often, I find myself correcting the model. I end up teaching it about syntax, approach, or even the very concepts it is meant to apply. Without my intervention, the task would stall. In other words, if I were not in the loop, the work would not get done. The AI is only useful because I am present to steer, guide, and validate.&lt;/p&gt;
&lt;p&gt;This is why the casual claim that “AI will replace engineers, it’s just a matter of time” falls flat. Such statements reduce engineering to code generation, as if software were nothing more than lines of syntax strung together. They also reveal that the speaker probably is not using AI to write real, production-quality code. Anyone working with it daily sees both its promise and its limits.&lt;/p&gt;
&lt;p&gt;Engineering is not simply about writing correct code. It is about weighing competing requirements, designing for maintainability, balancing performance with cost, and coordinating teams that bring a project to life. It is about debugging ambiguous failures and making judgment calls where no amount of pattern matching can substitute for lived experience.&lt;/p&gt;
&lt;p&gt;AI will not replace human engineers unless it can perform across this full spectrum. That means more than passing coding tests or solving toy problems. It means the ability to reason through systems, handle ambiguity, and carry responsibility for outcomes. Until AI can do that better than humans, engineers will remain not only relevant but indispensable.&lt;/p&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8789713/posts/default/5911919860718428870'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8789713/posts/default/5911919860718428870'/><link rel='alternate' type='text/html' href='http://blog.jerrynixon.com/2025/02/ai-will-not-replace-human-engineers.html' title=' AI Will Not Replace Human Engineers'/><author><name>jerrynixon</name><uri>http://www.blogger.com/profile/06978720385628364065</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-8789713.post-3041967144657539345</id><published>2025-02-12T15:14:00.001-07:00</published><updated>2025-10-01T15:15:21.050-06:00</updated><title type='text'>TIL: Pareidolia vs Apophenia</title><content type='html'>&lt;p&gt;Pareidolia and apophenia are two big words that both describe our brain’s habit of seeing patterns where none exist. They sound alike, and they overlap, but they are not the same.&lt;/p&gt;
&lt;p&gt;Pareidolia is sensory. It is when you see or hear something familiar in random noise. A face in the clouds. A figure in tree bark. A voice hidden in static. Our brains are wired to recognize shapes, especially faces, so they over-apply that skill even when there is nothing there.&lt;/p&gt;
&lt;p&gt;Apophenia is broader. It is when we connect unrelated dots and decide they form a picture. A lucky shirt “causing” a team to win. A string of coincidences that feel like fate. Stock market moves treated like signs of destiny. It is not just about what we see or hear, but how we interpret events and weave them into a story.&lt;/p&gt;
&lt;p&gt;In short: pareidolia is faces in clouds. Apophenia is meaning in chance. One is about perception, the other about interpretation. Both remind us that our minds are pattern-making machines, sometimes too eager for their own good.&lt;/p&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8789713/posts/default/3041967144657539345'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8789713/posts/default/3041967144657539345'/><link rel='alternate' type='text/html' href='http://blog.jerrynixon.com/2025/02/til-pareidolia-vs-apophenia.html' title='TIL: Pareidolia vs Apophenia'/><author><name>jerrynixon</name><uri>http://www.blogger.com/profile/06978720385628364065</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-8789713.post-3964369779404474452</id><published>2023-03-29T09:24:00.006-06:00</published><updated>2025-09-15T20:58:38.554-06:00</updated><title type='text'>Is AI really a Mind?</title><content type='html'>&lt;p&gt;Just a dab of thinking on Artificial Intelligence and Reality.&lt;/p&gt;&lt;p&gt;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. 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.&lt;/p&gt;&lt;p&gt;But even if we made the hologram much more detailed, we still could not decompose an elephant exhaustively with observations alone. 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 simply “being alive.” We might conclude an elephant is alive, but that does not properly capture what it means to be alive and what makes it alive. In other words, there are qualities of an elephant, critical qualities, which we recognize are present but cannot measure or properly observe, regardless of effort or scientific precision.&lt;/p&gt;&lt;p&gt;This matters because if we reassemble our observations in an attempt to create an elephant, the resulting facsimile will not be an elephant. It would lack those added things we cannot measure. Yet if we 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 it is not so.&lt;/p&gt;&lt;p&gt;The same problem exists when we decompose the human mind. We have large and small categories that, like the observations of the elephant, define the mind in ways that are nonrepresentational of the subject. And 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.&lt;/p&gt;&lt;p&gt;But this is exactly what we do with AI. We observe the qualities of AI and map them to the categories we have made of the mind. We then observe, “AI has the qualities of the mind,” and leap to the false conclusion that this assembly of categories somehow is a mind.&lt;/p&gt;&lt;p&gt;The very misstep we make in concluding “this is an elephant” we repeat with AI. Is it a mind? Is it alive? Is it conscious? Does it think? Or are we too easily ascribing higher-order, ethereal, and foundational qualities to a thing that demonstrates only the simpler, perfunctory, and easily measurable attributes of the human mind?&lt;/p&gt;&lt;p&gt;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.&lt;/p&gt;&lt;p&gt;







&lt;/p&gt;&lt;p&gt;So, then, I cannot 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 do not know.&lt;/p&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8789713/posts/default/3964369779404474452'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8789713/posts/default/3964369779404474452'/><link rel='alternate' type='text/html' href='http://blog.jerrynixon.com/2023/03/is-ai-really-mind.html' title='Is AI really a Mind?'/><author><name>jerrynixon</name><uri>http://www.blogger.com/profile/06978720385628364065</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-8789713.post-5718953354388986163</id><published>2022-10-25T15:28:00.008-06:00</published><updated>2022-10-26T11:14:54.885-06:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Web"/><title type='text'>Waiting for Kestral</title><content type='html'>&lt;p&gt;&lt;a href=&quot;https://learn.microsoft.com/en-us/aspnet/core/fundamentals/servers/kestrel?tabs=aspnetcore1x&amp;amp;view=aspnetcore-6.0&quot;&gt;Kestrel&lt;/a&gt; is the ASP.NET Core web server. You can call its endpoints only after it has started. Using the &lt;a href=&quot;https://learn.microsoft.com/en-us/dotnet/api/microsoft.extensions.hosting.ihostapplicationlifetime?view=dotnet-plat-ext-7.0&quot;&gt;IHostApplicationLifetime&lt;/a&gt; interface, you can register a callback for when the server starts &amp;amp; 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.&amp;nbsp;&lt;/p&gt;&lt;p&gt;Let&#39;s look at the IHostApplicationLifetime interface.&lt;/p&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiNL3rhrmnG8av1amuZUy_NNyYwLeBqL9n1jYREmbv5BRnDWYGjtqv7GNKIKdS0mvWR_9Et6xGB_FxqGWCVmVpTWOUm017BZH9ntaBnDKW3CgEziYFS5dFgTGc7Xuiq2JwP4zIOqWOUsBwzUn4SZ5vLADXuaX1KcVDsWyTxXMWe_DpwvHPQGfo/s531/img1.png&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;189&quot; data-original-width=&quot;531&quot; height=&quot;114&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiNL3rhrmnG8av1amuZUy_NNyYwLeBqL9n1jYREmbv5BRnDWYGjtqv7GNKIKdS0mvWR_9Et6xGB_FxqGWCVmVpTWOUm017BZH9ntaBnDKW3CgEziYFS5dFgTGc7Xuiq2JwP4zIOqWOUsBwzUn4SZ5vLADXuaX1KcVDsWyTxXMWe_DpwvHPQGfo/s320/img1.png&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;span&gt;&lt;a name=&#39;more&#39;&gt;&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;The&amp;nbsp;&lt;a href=&quot;https://learn.microsoft.com/en-us/dotnet/api/microsoft.extensions.hosting.ihostapplicationlifetime?view=dotnet-plat-ext-7.0&quot;&gt;IHostApplicationLifetime&lt;/a&gt;&amp;nbsp;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.&amp;nbsp;&lt;div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgqIfDSdRG-FLW8L4jIKPcRHucr5sT_ZioyWgZQqUaifTyodadhc6SXJ1aCCQi7yJ9OZMBO4Js5-gLtbj4u1jP-8k-uajvRSoYsc9cts-Clf2QdY1tETNM5Qeimn2kj_ApeivLTANcEZWz3NdOreX8WTSUPBQQ3bJ3SCJREbMm9rfliAy_58Sw/s545/image2.png&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;447&quot; data-original-width=&quot;545&quot; height=&quot;262&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgqIfDSdRG-FLW8L4jIKPcRHucr5sT_ZioyWgZQqUaifTyodadhc6SXJ1aCCQi7yJ9OZMBO4Js5-gLtbj4u1jP-8k-uajvRSoYsc9cts-Clf2QdY1tETNM5Qeimn2kj_ApeivLTANcEZWz3NdOreX8WTSUPBQQ3bJ3SCJREbMm9rfliAy_58Sw/s320/image2.png&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;p style=&quot;text-align: left;&quot;&gt;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 &lt;a href=&quot;https://learn.microsoft.com/en-us/dotnet/api/microsoft.aspnetcore.builder.webapplication.lifetime?view=aspnetcore-6.0#microsoft-aspnetcore-builder-webapplication-lifetime&quot; target=&quot;_blank&quot;&gt;Lifetime property&lt;/a&gt;.&amp;nbsp;&lt;/p&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjGOgI_P_L2rb0GDyPgd3kQMhLejf_7_M0IoqC2Uv-_29tH_OVNlPIicU1sbbZItihjCFdRiWuMi2cI9TDd99P09Y0aXzfnl8lychOHNMRmZaYeDckqEbipighT2Jd-nLwQBiVTn_pph0XE3iPfTdEcwUyHhkTYVVQLX4WjT5hMYEbkOqx6mR8/s572/img3.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;375&quot; data-original-width=&quot;572&quot; height=&quot;210&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjGOgI_P_L2rb0GDyPgd3kQMhLejf_7_M0IoqC2Uv-_29tH_OVNlPIicU1sbbZItihjCFdRiWuMi2cI9TDd99P09Y0aXzfnl8lychOHNMRmZaYeDckqEbipighT2Jd-nLwQBiVTn_pph0XE3iPfTdEcwUyHhkTYVVQLX4WjT5hMYEbkOqx6mR8/s320/img3.png&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;p style=&quot;text-align: left;&quot;&gt;For a demo hosting and calling a &lt;i&gt;minimal &lt;/i&gt;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.&amp;nbsp;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;Best of luck!&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8789713/posts/default/5718953354388986163'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8789713/posts/default/5718953354388986163'/><link rel='alternate' type='text/html' href='http://blog.jerrynixon.com/2022/10/waiting-for-ketral.html' title='Waiting for Kestral'/><author><name>jerrynixon</name><uri>http://www.blogger.com/profile/06978720385628364065</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiNL3rhrmnG8av1amuZUy_NNyYwLeBqL9n1jYREmbv5BRnDWYGjtqv7GNKIKdS0mvWR_9Et6xGB_FxqGWCVmVpTWOUm017BZH9ntaBnDKW3CgEziYFS5dFgTGc7Xuiq2JwP4zIOqWOUsBwzUn4SZ5vLADXuaX1KcVDsWyTxXMWe_DpwvHPQGfo/s72-c/img1.png" height="72" width="72"/></entry><entry><id>tag:blogger.com,1999:blog-8789713.post-6927360908433291298</id><published>2022-01-31T16:48:00.001-07:00</published><updated>2022-01-31T16:48:27.688-07:00</updated><title type='text'>Triple Edge Constraints in Graph DBs</title><content type='html'>&lt;p&gt;What is an Edge? Good question. An Edge defines the relationship between two Nodes. A Node is a thing, noun, or concept – like &lt;strong&gt;Store&lt;/strong&gt;. In my diagram below, the &lt;strong&gt;Wants&lt;/strong&gt; Edge in between the &lt;strong&gt;Store&lt;/strong&gt; and &lt;strong&gt;Product&lt;/strong&gt; Nodes. You would write it as &lt;font face=&quot;Courier New&quot;&gt;Store–(Wants)-&amp;gt;Product&lt;/font&gt; and it means to define which &lt;strong&gt;Store&lt;/strong&gt; &lt;strong&gt;Wants&lt;/strong&gt; which &lt;strong&gt;Product&lt;/strong&gt;. &lt;/p&gt;  &lt;p&gt;The puzzle here is the &lt;strong&gt;Must_Use&lt;/strong&gt; Edge. In my diagram below, this Edge is between &lt;strong&gt;Store&lt;/strong&gt; and &lt;strong&gt;Warehouse&lt;/strong&gt; and it means to define which &lt;strong&gt;Warehouse&lt;/strong&gt; a &lt;strong&gt;Store&lt;/strong&gt; can use when ordering certain &lt;strong&gt;Products&lt;/strong&gt;. This is special because it references three Nodes: &lt;strong&gt;Store&lt;/strong&gt;, &lt;strong&gt;Warehouse&lt;/strong&gt; and &lt;strong&gt;Product&lt;/strong&gt;. To make this work, the &lt;strong&gt;Must_Use&lt;/strong&gt; Edge must include a field referencing the relevant &lt;strong&gt;Product&lt;/strong&gt; Id. &lt;/p&gt;  &lt;p&gt;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. &lt;/p&gt;  &lt;p&gt;&lt;a href=&quot;https://drive.google.com/uc?id=1m7SCDRLxBhCJVB2zHGsWwE7Tx6XYIEcw&quot;&gt;&lt;img title=&quot;image&quot; style=&quot;border: 0px currentcolor; display: inline; background-image: none;&quot; border=&quot;0&quot; alt=&quot;image&quot; src=&quot;https://drive.google.com/uc?id=1x3WWL2aY2m8FrwiYt9-YTDY9kenqR8Uh&quot; width=&quot;550&quot; height=&quot;341&quot; /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;a name=&#39;more&#39;&gt;&lt;/a&gt;  &lt;p&gt;&lt;strong&gt;How to maintain high performance with this pattern?&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;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:&lt;/p&gt;  &lt;ol&gt;   &lt;li&gt;Add a Unique Clustered Index on &lt;strong&gt;Edge($from_id, $to_id)&lt;/strong&gt;&lt;/li&gt;    &lt;li&gt;Add an Unclustered Index on &lt;strong&gt;Edge(ProductId)&lt;/strong&gt;&lt;/li&gt;    &lt;li&gt;Add an Unclustered Index on &lt;strong&gt;Node(ProductId)&lt;/strong&gt;&lt;/li&gt; &lt;/ol&gt;  &lt;p&gt;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!&lt;/p&gt;  &lt;p&gt;---&lt;/p&gt;  &lt;h3&gt;&lt;em&gt;CODE SAMPLE. Here’s the &lt;/em&gt;&lt;a href=&quot;https://gist.github.com/JerryNixon/c25183c65444a236a2e4a3690220091e&quot;&gt;&lt;em&gt;Gist&lt;/em&gt;&lt;/a&gt;&lt;em&gt;. &lt;/em&gt;&lt;/h3&gt;  &lt;p&gt;---&lt;/p&gt;  &lt;h4&gt;Scenario&lt;/h4&gt;  &lt;ol&gt;   &lt;li&gt;Every Store (wants) every Product &lt;/li&gt;    &lt;li&gt;Every Warehouse (Has) every Product &lt;/li&gt;    &lt;li&gt;Stores (Must_Use) certain Warehouses for certain Products.&lt;/li&gt; &lt;/ol&gt;  &lt;h4&gt;Problem&lt;/h4&gt;  &lt;ol&gt;   &lt;li&gt;A graph Edge only references two Nodes: from &amp;amp; to &lt;/li&gt;    &lt;li&gt;How can we constrain an Edge to a third Node (Product)&lt;/li&gt; &lt;/ol&gt;  &lt;h4&gt;Solution&lt;/h4&gt;  &lt;ol&gt;   &lt;li&gt;Add ProductId to Product Node &lt;/li&gt;    &lt;li&gt;Add ProductId to (Must_Use) Edge&lt;/li&gt; &lt;/ol&gt;  &lt;h4&gt;Considerations&lt;/h4&gt;  &lt;p&gt;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.&lt;/p&gt;  &lt;p&gt;&lt;a href=&quot;https://drive.google.com/uc?id=1wIpm9qAjz0YdKnm3dTLA5NAdWOipdHTM&quot;&gt;&lt;img title=&quot;image&quot; style=&quot;border: 0px currentcolor; display: inline; background-image: none;&quot; border=&quot;0&quot; alt=&quot;image&quot; src=&quot;https://drive.google.com/uc?id=1yS_HVt2j0JCtrmFuj0TB-8ZBvO-wkdDb&quot; width=&quot;550&quot; height=&quot;1031&quot; /&gt;&lt;/a&gt;&lt;/p&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8789713/posts/default/6927360908433291298'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8789713/posts/default/6927360908433291298'/><link rel='alternate' type='text/html' href='http://blog.jerrynixon.com/2022/01/triple-edge-constraints-in-graph-dbs.html' title='Triple Edge Constraints in Graph DBs'/><author><name>jerrynixon</name><uri>http://www.blogger.com/profile/06978720385628364065</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-8789713.post-813145343372196071</id><published>2021-04-28T16:50:00.001-06:00</published><updated>2021-04-28T16:50:15.633-06:00</updated><title type='text'>An Introduction to SQL Graph</title><content type='html'>&lt;p&gt;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. &lt;/p&gt;  &lt;a name=&#39;more&#39;&gt;&lt;/a&gt;  &lt;p&gt;In an academic setting, graph databases can do some fun &amp;amp; esoteric things. But in the real world, where greenfield may never be on the menu, a hybrid RDBMS &amp;amp; graph makes far more sense. Letting the relational system do its thing while tapping into the value &amp;amp; capabilities of a graph in bite-sized chunks without any need for full adoption, big migrations, or system concessions.&amp;#160; &lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Getting started&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;   &lt;p&gt;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. &lt;a href=&quot;https://drive.google.com/uc?id=1_B0Rmi3Hi9TSPlPP_ShPrngi3lzrRL58&quot;&gt;&lt;img title=&quot;image&quot; style=&quot;border-width: 0px; display: inline; background-image: none;&quot; border=&quot;0&quot; alt=&quot;image&quot; src=&quot;https://drive.google.com/uc?id=1iZrq2TiwVgiEiPDH1Dgr1dBSBS6gX7I6&quot; width=&quot;550&quot; height=&quot;289&quot; /&gt;&lt;/a&gt;The solution using tables.&lt;/p&gt;    &lt;p&gt;&lt;a href=&quot;https://drive.google.com/uc?id=15cnVGAIO9qJJjR7NaF_T8jDCh1CMUWOl&quot;&gt;&lt;img title=&quot;image&quot; style=&quot;border-width: 0px; display: inline; background-image: none;&quot; border=&quot;0&quot; alt=&quot;image&quot; src=&quot;https://drive.google.com/uc?id=1hr--7hzdVkdYRU6dVQxwo5qbReGgBLX8&quot; width=&quot;550&quot; height=&quot;284&quot; /&gt;&lt;/a&gt;&lt;/p&gt;    &lt;p&gt;The solution using graph.&lt;/p&gt; &lt;/p&gt;  &lt;p&gt;&lt;strong&gt;What is the common question, you ask? &lt;/strong&gt;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. &lt;/p&gt;  &lt;p&gt;Find the code here: &lt;a href=&quot;https://gist.github.com/JerryNixon/d7052ef53feef964812bc83c206f107b&quot;&gt;graph.ipynb (github.com)&lt;/a&gt;&lt;/p&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8789713/posts/default/813145343372196071'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8789713/posts/default/813145343372196071'/><link rel='alternate' type='text/html' href='http://blog.jerrynixon.com/2021/04/an-introduction-to-sql-graph.html' title='An Introduction to SQL Graph'/><author><name>jerrynixon</name><uri>http://www.blogger.com/profile/06978720385628364065</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-8789713.post-4274417734846518904</id><published>2021-04-28T16:34:00.001-06:00</published><updated>2021-04-28T16:34:20.888-06:00</updated><title type='text'>A list of online tools I use</title><content type='html'>&lt;p&gt;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 &amp;amp; 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.&lt;/p&gt;  &lt;a name=&#39;more&#39;&gt;&lt;/a&gt;  &lt;ol&gt;   &lt;li&gt;.NET tinkering &lt;a href=&quot;https://dotnetfiddle.net/&quot;&gt;https://dotnetfiddle.net/&lt;/a&gt;&lt;/li&gt;    &lt;li&gt;HTML/CSS/JS tinkering &lt;a href=&quot;https://jsfiddle.net/&quot;&gt;https://jsfiddle.net/&lt;/a&gt;&lt;/li&gt;    &lt;li&gt;TSQL tinkering &lt;a href=&quot;http://sqlfiddle.com/&quot;&gt;http://sqlfiddle.com/&lt;/a&gt;&lt;/li&gt;    &lt;li&gt;TSQL linting &lt;a href=&quot;https://poorsql.com/&quot;&gt;https://poorsql.com/&lt;/a&gt;&lt;/li&gt;    &lt;li&gt;Mermaid graphs &lt;a href=&quot;https://mermaid-js.github.io/mermaid-live-editor&quot;&gt;https://mermaid-js.github.io/mermaid-live-editor&lt;/a&gt;&lt;/li&gt;    &lt;li&gt;Snippets store &lt;a href=&quot;https://gist.github.com&quot;&gt;https://gist.github.com&lt;/a&gt;&lt;/li&gt;    &lt;li&gt;JWT decoder &lt;a href=&quot;https://jwt.ms/&quot;&gt;https://jwt.ms/&lt;/a&gt;&lt;/li&gt;    &lt;li&gt;Validate YAML &lt;a href=&quot;https://freedevtools.net/yaml.html&quot;&gt;https://freedevtools.net/yaml.html&lt;/a&gt;&lt;/li&gt;    &lt;li&gt;Beautify JSON &lt;a href=&quot;https://jsonformatter.tool-kit.dev/&quot;&gt;https://jsonformatter.tool-kit.dev/&lt;/a&gt;&lt;/li&gt;    &lt;li&gt;Beautify CSS &lt;a href=&quot;https://www.cleancss.com/css-beautify/&quot;&gt;https://www.cleancss.com/css-beautify/&lt;/a&gt;&lt;/li&gt;    &lt;li&gt;Regular expressions &lt;a href=&quot;https://regex101.com/&quot;&gt;https://regex101.com/&lt;/a&gt;&lt;/li&gt;    &lt;li&gt;Color tinkering &lt;a href=&quot;https://color.cloudflare.design/&quot;&gt;https://color.cloudflare.design/&lt;/a&gt; &amp;amp; &lt;a href=&quot;https://color.adobe.com/create/color-wheel&quot;&gt;https://color.adobe.com/create/color-wheel&lt;/a&gt;&lt;/li&gt;    &lt;li&gt;Accessibility tester &lt;a href=&quot;https://www.webaccessibility.com/&quot;&gt;https://www.webaccessibility.com/&lt;/a&gt;&lt;/li&gt;    &lt;li&gt;Fake data generator &lt;a href=&quot;https://lipsum.com/&quot;&gt;https://lipsum.com/&lt;/a&gt;&lt;/li&gt;    &lt;li&gt;Image tinkering &lt;a href=&quot;https://pixlr.com/x/&quot;&gt;https://pixlr.com/x/&lt;/a&gt;&lt;/li&gt;    &lt;li&gt;CSS generator &lt;a href=&quot;http://css3generator.com/&quot;&gt;http://css3generator.com/&lt;/a&gt;&lt;/li&gt;    &lt;li&gt;Chart tinkering &lt;a href=&quot;https://app.diagrams.net/&quot;&gt;https://app.diagrams.net/&lt;/a&gt;&lt;/li&gt;    &lt;li&gt;Online brainstorming &lt;a href=&quot;https://whiteboard.microsoft.com/&quot;&gt;https://whiteboard.microsoft.com/&lt;/a&gt;&lt;/li&gt;    &lt;li&gt;Json mapping to classes &lt;a href=&quot;https://json2csharp.com/&quot;&gt;https://json2csharp.com/&lt;/a&gt;&lt;/li&gt;    &lt;li&gt;Azure icons &lt;a href=&quot;https://iconcloud.design/browse/Azure%20Icons&quot;&gt;https://iconcloud.design/browse/Azure%20Icons&lt;/a&gt;&lt;/li&gt;    &lt;li&gt;QR Code generator &lt;a href=&quot;https://tools.fromdev.com/qr-code-generator.html&quot;&gt;https://tools.fromdev.com/qr-code-generator.html&lt;/a&gt;&lt;/li&gt;    &lt;li&gt;Online distractions &lt;a href=&quot;https://www.kobayashimaru.com/&quot;&gt;https://www.kobayashimaru.com/&lt;/a&gt; &lt;/li&gt; &lt;/ol&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8789713/posts/default/4274417734846518904'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8789713/posts/default/4274417734846518904'/><link rel='alternate' type='text/html' href='http://blog.jerrynixon.com/2021/04/a-list-of-online-tools-i-use.html' title='A list of online tools I use'/><author><name>jerrynixon</name><uri>http://www.blogger.com/profile/06978720385628364065</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-8789713.post-8590017905538068607</id><published>2021-04-28T16:30:00.001-06:00</published><updated>2021-04-28T16:30:13.287-06:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="SQL"/><title type='text'>Utility scripts for SQL tables</title><content type='html'>&lt;p&gt;The SQL Server sys.tables &amp;amp; sys.schemas tables are exceptionally handy to find &amp;amp; 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. &lt;/p&gt;  &lt;p&gt;&lt;a href=&quot;https://drive.google.com/uc?id=1_sRUFwV5O33gH7yucU488y9zpPfJCCa9&quot;&gt;&lt;img title=&quot;image&quot; style=&quot;border: 0px currentcolor; display: inline; background-image: none;&quot; border=&quot;0&quot; alt=&quot;image&quot; src=&quot;https://drive.google.com/uc?id=1VK8_1fERWdH6-k3Ayym-Ma0FXhDxTSoA&quot; width=&quot;550&quot; height=&quot;500&quot; /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Here it is on GitHub: &lt;a href=&quot;https://gist.github.com/JerryNixon/ca4906f7f31972a5e6e2a43a63891dd0&quot;&gt;link&lt;/a&gt;. &lt;/p&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8789713/posts/default/8590017905538068607'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8789713/posts/default/8590017905538068607'/><link rel='alternate' type='text/html' href='http://blog.jerrynixon.com/2021/04/utility-scripts-for-sql-tables.html' title='Utility scripts for SQL tables'/><author><name>jerrynixon</name><uri>http://www.blogger.com/profile/06978720385628364065</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-8789713.post-186419903696628627</id><published>2021-03-23T11:36:00.001-06:00</published><updated>2021-03-23T11:36:15.658-06:00</updated><title type='text'>An Assert Schema for SQL Server</title><content type='html'>&lt;p&gt;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. &lt;/p&gt;  &lt;p&gt;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. &lt;/p&gt;  &lt;p&gt;You can find it here: &lt;a href=&quot;https://gist.github.com/JerryNixon/22da61184b238dea5d38f0401b97a0da&quot;&gt;An Assert Schema for SQL Server (github.com)&lt;/a&gt;&lt;/p&gt;  &lt;a name=&#39;more&#39;&gt;&lt;/a&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;h4&gt;EXEC Assert.Contain fragment, string, [message];&lt;/h4&gt;  &lt;p&gt;Use Contain to validate a string fragment is inside a larger string.&lt;/p&gt;  &lt;ol&gt;   &lt;li&gt;&lt;code&gt;fragment&lt;/code&gt;: the string you want to find &lt;/li&gt;    &lt;li&gt;&lt;code&gt;string&lt;/code&gt;: the string you are searching in &lt;/li&gt;    &lt;li&gt;&lt;code&gt;[message]&lt;/code&gt;: (optional/default=null)&lt;/li&gt; &lt;/ol&gt;  &lt;p&gt;&lt;strong&gt;Syntax&lt;/strong&gt;&lt;/p&gt;  &lt;pre&gt;&lt;code&gt;DECLARE @fragment VARCHAR(50) = &#39;Jerry&#39;;
DECLARE @string VARCHAR(50) = &#39;Jerry Nixon&#39;;
EXEC Assert.Contain @fragment, @string;
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;&lt;strong&gt;Result&lt;/strong&gt;

  &lt;br /&gt;An error is thrown if the fragment is not found.&lt;/p&gt;

&lt;hr /&gt;

&lt;h4&gt;EXEC Assert.Equal expected, actual, [message];&lt;/h4&gt;

&lt;p&gt;Use Equal to validate two values are the same.&lt;/p&gt;

&lt;ol&gt;
  &lt;li&gt;&lt;code&gt;expected&lt;/code&gt;: the expected value &lt;/li&gt;

  &lt;li&gt;&lt;code&gt;actual&lt;/code&gt;: the actual value &lt;/li&gt;

  &lt;li&gt;&lt;code&gt;message&lt;/code&gt;: (optional/default=null)&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;strong&gt;Syntax&lt;/strong&gt;&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;DECLARE @expected VARCHAR(50) = &#39;Jerry&#39;;
DECLARE @actual VARCHAR(50) = &#39;Jerry&#39;;
EXEC Assert.Equal @expected, @actual;
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;&lt;strong&gt;Result&lt;/strong&gt;

  &lt;br /&gt;An error is thrown if the two values are not Equal&lt;/p&gt;

&lt;hr /&gt;

&lt;h4&gt;SELECT Assert.Equals(expected, actual, message);&lt;/h4&gt;

&lt;p&gt;Use Equals to validate two values are the same. Because it can be used in a SELECT, it returns ACTUAL.&lt;/p&gt;

&lt;ol&gt;
  &lt;li&gt;&lt;code&gt;expected&lt;/code&gt;: the expected value &lt;/li&gt;

  &lt;li&gt;&lt;code&gt;actual&lt;/code&gt;: the actual value &lt;/li&gt;

  &lt;li&gt;&lt;code&gt;message&lt;/code&gt;: (optional/default=null)&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;strong&gt;Syntax&lt;/strong&gt;&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;SELECT Assert.Equals(&#39;Jerry&#39;, NAME_COLUMN, &#39;Name should equal Jerry&#39;) AS NAME_COLUMN 
FROM USERS
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;&lt;strong&gt;Result&lt;/strong&gt;

  &lt;br /&gt;An error is thrown if the two values are not Equal.

  &lt;br /&gt;And Actual is returned if the two values are Equal.&lt;/p&gt;

&lt;hr /&gt;

&lt;h4&gt;EXEC Assert.NotEqual expected, actual, [message];&lt;/h4&gt;

&lt;p&gt;Use NotEqual to validate two values are not t6he same.&lt;/p&gt;

&lt;ol&gt;
  &lt;li&gt;&lt;code&gt;expected&lt;/code&gt;: the expected value &lt;/li&gt;

  &lt;li&gt;&lt;code&gt;actual&lt;/code&gt;: the actual value &lt;/li&gt;

  &lt;li&gt;&lt;code&gt;message&lt;/code&gt;: (optional/default=null)&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;strong&gt;Syntax&lt;/strong&gt;&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;DECLARE @expected VARCHAR(50) = &#39;Jerry&#39;;
DECLARE @actual VARCHAR(50) = &#39;Nixon&#39;;
EXEC Assert.NotEqual @expected, @actual;
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;&lt;strong&gt;Result&lt;/strong&gt;

  &lt;br /&gt;An error is thrown if the two values are Equal.&lt;/p&gt;

&lt;hr /&gt;

&lt;h4&gt;EXEC Assert.[Null] actual, [message];&lt;/h4&gt;

&lt;p&gt;Use [Null] to validate a value is null. Note that [square brackets] are required since Null is a reserved word.&lt;/p&gt;

&lt;ol&gt;
  &lt;li&gt;&lt;code&gt;actual&lt;/code&gt;: the actual value that should be null &lt;/li&gt;

  &lt;li&gt;&lt;code&gt;message&lt;/code&gt;: (optional/default=null)&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;strong&gt;Syntax&lt;/strong&gt;&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;DECLARE @actual VARCHAR(50) = NULL;
EXEC Assert.[Null] @actual;
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;&lt;strong&gt;Result&lt;/strong&gt;

  &lt;br /&gt;An error is thrown if the value is not null&lt;/p&gt;

&lt;hr /&gt;

&lt;h4&gt;EXEC Assert.NotNull actual, [message];&lt;/h4&gt;

&lt;p&gt;Use NotNull to validate a value is not null.&lt;/p&gt;

&lt;ol&gt;
  &lt;li&gt;&lt;code&gt;actual&lt;/code&gt;: the actual value that should not be null &lt;/li&gt;

  &lt;li&gt;&lt;code&gt;message&lt;/code&gt;: (optional/default=null)&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;strong&gt;Syntax&lt;/strong&gt;&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;DECLARE @actual VARCHAR(50) = &#39;Nixon&#39;;
EXEC Assert.NotNull @actual;
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;&lt;strong&gt;Result&lt;/strong&gt;

  &lt;br /&gt;An error is thrown if the value is null&lt;/p&gt;

&lt;hr /&gt;

&lt;h4&gt;EXEC Assert.Rows expected, [message];&lt;/h4&gt;

&lt;p&gt;Use Rows to validate an operation impacts a certain number of rows.&lt;/p&gt;

&lt;ol&gt;
  &lt;li&gt;&lt;code&gt;expected&lt;/code&gt;: the expected number of rows returned &lt;/li&gt;

  &lt;li&gt;&lt;code&gt;message&lt;/code&gt;: (optional/default=null)&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;strong&gt;Syntax&lt;/strong&gt;&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;SELECT * FROM TABLE
DECLARE @expected INT = 10;
EXEC Assert.Rows @expected;
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;&lt;strong&gt;Result&lt;/strong&gt;

  &lt;br /&gt;An error is thrown if the resulting rows do to equal the expected&lt;/p&gt;

&lt;hr /&gt;

&lt;h4&gt;EXEC Assert.Fail expected, actual, message, [number];&lt;/h4&gt;

&lt;p&gt;Use Fail to manually cause a failure. Note that this is typically used by the other methods, internally.&lt;/p&gt;

&lt;ol&gt;
  &lt;li&gt;&lt;code&gt;expected&lt;/code&gt;: the expected value to report &lt;/li&gt;

  &lt;li&gt;&lt;code&gt;actual&lt;/code&gt;: the actual value to report &lt;/li&gt;

  &lt;li&gt;&lt;code&gt;message&lt;/code&gt;: the custom message to report &lt;/li&gt;

  &lt;li&gt;&lt;code&gt;number&lt;/code&gt;: (optional/default=50000)&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;strong&gt;Syntax&lt;/strong&gt;&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;DECLARE @expected VARCHAR(50) = &#39;Jerry&#39;
DECLARE @actual VARCHAR(50) = &#39;Nixon&#39;
DECLARE @message VARCHAR(50) = &#39;Error Message&#39;
EXEC Assert.Fail @expected, @actual, @message;
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;&lt;strong&gt;Result&lt;/strong&gt;

  &lt;br /&gt;An error is thrown. Every time.&lt;/p&gt;

&lt;hr /&gt;

&lt;h4&gt;EXEC Assert.Error [number], [contains], [message];&lt;/h4&gt;

&lt;p&gt;Use Error to validate an error occurred with expected values.&lt;/p&gt;

&lt;ol&gt;
  &lt;li&gt;&lt;code&gt;number&lt;/code&gt;: (optional/default=do not test): the expected error number. &lt;/li&gt;

  &lt;li&gt;&lt;code&gt;contains&lt;/code&gt;: (optional/default=do not test): the expected error message fragment. &lt;/li&gt;

  &lt;li&gt;&lt;code&gt;message&lt;/code&gt;: (optional/default=null)&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;strong&gt;Syntax&lt;/strong&gt;&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;BEGIN TRY
  /* YOUR WORK */
END
BEGIN CATCH
  DECLARE @number INT = 50000
  DECLARE @contains VARCHAR(50) = &#39;DATA TYPE&#39;
  EXEC Assert.Error @number, @contains;
END
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;&lt;strong&gt;Result&lt;/strong&gt;

  &lt;br /&gt;An error is thrown if the current error context does not meet the criteria&lt;/p&gt;

&lt;hr /&gt;

&lt;h4&gt;EXEC Assert.[PrintLine] message, [withdate];&lt;/h4&gt;

&lt;p&gt;Use PrintLine to simply print a message. Note that this prints with NOWAIT even when SQL server is actively processing.&lt;/p&gt;

&lt;ol&gt;
  &lt;li&gt;&lt;code&gt;message&lt;/code&gt;: the string to print/output &lt;/li&gt;

  &lt;li&gt;&lt;code&gt;withdate&lt;/code&gt;: (optional/default=true)&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;strong&gt;Syntax&lt;/strong&gt;&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;DECLARE @message VARCHAR(50) = &#39;Jerry Nixon&#39;;
EXEC Assert.PrintLine @message;
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;&lt;strong&gt;Result&lt;/strong&gt;

  &lt;br /&gt;A string is written to console.&lt;/p&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8789713/posts/default/186419903696628627'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8789713/posts/default/186419903696628627'/><link rel='alternate' type='text/html' href='http://blog.jerrynixon.com/2021/03/an-assert-schema-for-sql-server.html' title='An Assert Schema for SQL Server'/><author><name>jerrynixon</name><uri>http://www.blogger.com/profile/06978720385628364065</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-8789713.post-4441529789010799038</id><published>2019-03-16T16:30:00.001-06:00</published><updated>2019-03-16T16:45:28.321-06:00</updated><title type='text'>A Kickstarter for features: It’s a Better kind of User Voice</title><content type='html'>&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;
&lt;br /&gt;
&lt;div class=&quot;MsoNoSpacing&quot;&gt;
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 &lt;b&gt;yet
backlogs rarely react&lt;/b&gt;.&lt;/div&gt;
&lt;div class=&quot;MsoNoSpacing&quot;&gt;
&lt;o:p&gt;&lt;/o:p&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNoSpacing&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNoSpacing&quot;&gt;
I believe product teams often chase the next big feature,
forcing themselves to ignore &lt;b style=&quot;mso-bidi-font-weight: normal;&quot;&gt;small, love-creating
improvements or tweaks that would build tireless loyalty&lt;/b&gt; from their user base.
&lt;o:p&gt;&lt;/o:p&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNoSpacing&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNoSpacing&quot;&gt;
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.&amp;nbsp;&lt;/div&gt;
&lt;a name=&#39;more&#39;&gt;&lt;/a&gt;&lt;br /&gt;
&lt;h2 style=&quot;text-align: left;&quot;&gt;
What’s wrong with User Voice? &lt;/h2&gt;
&lt;div class=&quot;MsoNoSpacing&quot;&gt;
&lt;o:p&gt;&lt;/o:p&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNoSpacing&quot;&gt;
&lt;b&gt;This isn’t about
User Voice, per se.&lt;/b&gt; 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.&lt;/div&gt;
&lt;div class=&quot;MsoNoSpacing&quot;&gt;
&lt;o:p&gt;&lt;/o:p&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNoSpacing&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNoSpacing&quot;&gt;
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. &lt;o:p&gt;&lt;/o:p&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNoSpacing&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNoSpacing&quot;&gt;
&lt;b style=&quot;mso-bidi-font-weight: normal;&quot;&gt;Team capacity&lt;/b&gt;.
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.&lt;o:p&gt;&lt;/o:p&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNoSpacing&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNoSpacing&quot;&gt;
&lt;b style=&quot;mso-bidi-font-weight: normal;&quot;&gt;Team priorities&lt;/b&gt;.
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.&lt;o:p&gt;&lt;/o:p&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNoSpacing&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNoSpacing&quot;&gt;
&lt;b style=&quot;mso-bidi-font-weight: normal;&quot;&gt;Team turnover&lt;/b&gt;.
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. &lt;o:p&gt;&lt;/o:p&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNoSpacing&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNoSpacing&quot;&gt;
&lt;b style=&quot;mso-bidi-font-weight: normal;&quot;&gt;Internal politics&lt;/b&gt;.
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. &lt;o:p&gt;&lt;/o:p&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNoSpacing&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNoSpacing&quot;&gt;
&lt;b style=&quot;mso-bidi-font-weight: normal;&quot;&gt;Market change&lt;/b&gt;.
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. &lt;o:p&gt;&lt;/o:p&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNoSpacing&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNoSpacing&quot;&gt;
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.&lt;/div&gt;
&lt;h2 style=&quot;text-align: left;&quot;&gt;
Side-effects&lt;/h2&gt;
&lt;div class=&quot;MsoNoSpacing&quot;&gt;
&lt;b style=&quot;mso-bidi-font-weight: normal;&quot;&gt;The rise of open
source&lt;/b&gt;, 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.&lt;o:p&gt;&lt;/o:p&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNoSpacing&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNoSpacing&quot;&gt;
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. &lt;o:p&gt;&lt;/o:p&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNoSpacing&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNoSpacing&quot;&gt;
It’s also worth pointing out that, especially in
developer tooling, &lt;b style=&quot;mso-bidi-font-weight: normal;&quot;&gt;buckets of features
are released every quarter as a direct result of user feedback.&lt;/b&gt; But nobody
is denying features are left on the table.&lt;o:p&gt;&lt;/o:p&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNoSpacing&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;h2 style=&quot;text-align: left;&quot;&gt;
Impacting priority&lt;/h2&gt;
&lt;div class=&quot;MsoNoSpacing&quot;&gt;
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: &lt;b&gt;if the community does X, the team will do Y&lt;/b&gt;.&lt;o:p&gt;&lt;/o:p&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNoSpacing&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNoSpacing&quot;&gt;
&lt;i&gt;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. &lt;o:p&gt;&lt;/o:p&gt;&lt;/i&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNoSpacing&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNoSpacing&quot;&gt;
Now imagine this: &lt;b style=&quot;mso-bidi-font-weight: normal;&quot;&gt;a
site like Kickstarter for features.&lt;/b&gt; Where users or developers contribute to
the feature with real money, pushing toward a target that, if reached, the
product team agrees to deliver.&lt;o:p&gt;&lt;/o:p&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNoSpacing&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNoSpacing&quot;&gt;
&lt;b style=&quot;mso-bidi-font-weight: normal;&quot;&gt;Where does the
money go?&lt;/b&gt; Not to Microsoft. Every feature is a fund-raiser for a charity. &lt;u&gt;If
we raise $100,000 for breast cancer research, we’ll add a Purple Theme to Visual
Studio.&lt;/u&gt;&lt;b style=&quot;mso-bidi-font-weight: normal;&quot;&gt; &lt;/b&gt;See what I mean?&lt;o:p&gt;&lt;/o:p&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNoSpacing&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNoSpacing&quot;&gt;
Here’s another one: &lt;u&gt;We’ll make Windows Forms work on Macs
if we raise $250,000 for Doctors without Borders.&lt;/u&gt; &lt;span style=&quot;mso-spacerun: yes;&quot;&gt;&amp;nbsp;&lt;/span&gt;Teams can target timely charities, too. The
point is, it’s a social agreement to do it. &lt;o:p&gt;&lt;/o:p&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNoSpacing&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNoSpacing&quot;&gt;
Why would a product team do this? Because corporate
citizenship is real. Because diversity and inclusiveness matter to Microsoft. &lt;b style=&quot;mso-bidi-font-weight: normal;&quot;&gt;Because, doing something good is a true
motivator. &lt;/b&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNoSpacing&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNoSpacing&quot;&gt;
How much would a developer have to contribute? That’s the
beauty of this. If you contribute a single dollar, you’re a contributor. &lt;b style=&quot;mso-bidi-font-weight: normal;&quot;&gt;Visual Studio has nearly 5 million users a
month.&lt;/b&gt; This is possible. &lt;o:p&gt;&lt;/o:p&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNoSpacing&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNoSpacing&quot;&gt;
Let’s all agree on one more thing. Software developers
are not the lowest paid people on the planet. &lt;b style=&quot;mso-bidi-font-weight: normal;&quot;&gt;And why not do some good instead of complaining on Twitter?&lt;/b&gt; It’s
twice the reward.&lt;o:p&gt;&lt;/o:p&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNoSpacing&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNoSpacing&quot;&gt;
Well, do you think it could work?&lt;/div&gt;
&lt;/div&gt;
</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8789713/posts/default/4441529789010799038'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8789713/posts/default/4441529789010799038'/><link rel='alternate' type='text/html' href='http://blog.jerrynixon.com/2019/03/a-kickstarter-for-features-its-better.html' title='A Kickstarter for features: It’s a Better kind of User Voice'/><author><name>jerrynixon</name><uri>http://www.blogger.com/profile/06978720385628364065</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-8789713.post-3534629573221157479</id><published>2019-03-13T15:55:00.002-06:00</published><updated>2025-09-15T21:06:20.256-06:00</updated><title type='text'>Developer Evangelism’s Obvious Secret</title><content type='html'>&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;&lt;p data-end=&quot;298&quot; data-start=&quot;0&quot;&gt;Hi. So, here’s another entry from my notes as an Evangelist. Many of the snippets I once wrote to myself I have now translated into blog articles that I hope will help anyone who finds themselves where I once was. This one is about the role of empathy. Perhaps it is not as obvious as you assume.&lt;/p&gt;
&lt;p data-end=&quot;647&quot; data-start=&quot;300&quot;&gt;For the sake of argument, and I think that is reason enough, let’s treat Developer Evangelist, Technical Evangelist, Developer Advocate, and any other variation of a Developer Relations title as the same. For the most part, they are. Here, I will use Developer Evangelist, since that was my title for nearly a decade at Microsoft. And I like it.&lt;span&gt;&lt;/span&gt;&lt;/p&gt;&lt;a name=&#39;more&#39;&gt;&lt;/a&gt;&lt;p&gt;&lt;/p&gt;
&lt;h3 data-end=&quot;677&quot; data-start=&quot;649&quot;&gt;What is an evangelist?&lt;/h3&gt;
&lt;p data-end=&quot;965&quot; data-start=&quot;678&quot;&gt;Let’s start with a simple question that has a complicated answer: what is a Developer Evangelist? Hopefully, you start with “brand ambassador.” Like a garrison at the edge of the empire that represents the throne because the king or queen will never travel that far, you are the brand.&lt;/p&gt;
&lt;p data-end=&quot;1276&quot; data-start=&quot;967&quot;&gt;If you work as a Developer Evangelist for Acme, your role is to represent Acme to developers who would otherwise never 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. In a way, you are not you.&lt;/p&gt;
&lt;p data-end=&quot;298&quot; data-start=&quot;0&quot;&gt;This is the foundation, but it is not the most important part. Building rapport and influence with developers and their communities requires connecting in ways that go beyond being a walking blog. The hearts and minds of developers are your endgame. The strategies to reach that goal are what matter.&lt;/p&gt;&lt;h3 data-end=&quot;1604&quot; data-start=&quot;1582&quot;&gt;Give it all away&lt;/h3&gt;
&lt;p data-end=&quot;1887&quot; data-start=&quot;1605&quot;&gt;&lt;/p&gt;&lt;p data-end=&quot;298&quot; data-start=&quot;0&quot; style=&quot;clear: right; float: right; margin-bottom: 1em; margin-left: 1em;&quot;&gt;&lt;img height=&quot;251&quot; src=&quot;https://news.microsoft.com/wp-content/uploads/2013/02/02-09SurfaceProGiveaway_Web.jpg&quot; style=&quot;font-family: inherit;&quot; width=&quot;375&quot; /&gt;&lt;/p&gt;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 seeing an audience’s eyes brighten when you give them something that has little value but somehow means a lot to them. My favorite swag is baseball hats.&lt;p&gt;&lt;/p&gt;
&lt;p data-end=&quot;2161&quot; data-start=&quot;1889&quot;&gt;The problem with swag, of course, is that it triggers the pleasure centers of a developer’s brain but does not build a long-term connection. Give me your thing and I will go to the next person for theirs. It ends quickly, even if you complicate it with surveys or games.&lt;/p&gt;
&lt;p data-end=&quot;2467&quot; data-start=&quot;2163&quot;&gt;If I had my way, I would give swag only to developers who are already my friends, already in my camp, already onboard. A sort of reward-swag, not a bribe-swag. You will notice the difference immediately in gratitude, and your swag might even get some use before it ends up in a trashcan or thrift shop.&lt;/p&gt;
&lt;h3 data-end=&quot;2497&quot; data-start=&quot;2469&quot;&gt;The three other things&lt;/h3&gt;
&lt;p data-end=&quot;2698&quot; data-start=&quot;2498&quot;&gt;If swag does not reach the hearts and minds of developers, what does? A Developer Evangelist has three real tools: Information, Validation, and Prescription. These are what truly influence behavior.&lt;/p&gt;
&lt;p data-end=&quot;3157&quot; data-start=&quot;2700&quot;&gt;&lt;strong data-end=&quot;2716&quot; data-start=&quot;2700&quot;&gt;Information.&lt;/strong&gt; It is getting harder to keep up with the pace of our industry. A Developer Evangelist has inside information that is unique and difficult to otherwise find. Bringing that value to developers means giving them something they could not easily discover or piece together on their own. This is also a key way to get your talks accepted at conferences. Bringing unusual or overlooked information is compelling to both attendees and organizers.&lt;/p&gt;
&lt;p data-end=&quot;3820&quot; data-start=&quot;3159&quot;&gt;&lt;strong data-end=&quot;3174&quot; data-start=&quot;3159&quot;&gt;Validation.&lt;/strong&gt; Developers and architects are often suspicious of their own decisions. As someone with more information than most, you can provide validation. Affirming their work builds trust and affection. When you find a developer doing something “wrong,” balance reproach with respect. You will leave tomorrow, but they remain in that job, with that manager, working for that raise. Your role is to advocate for developers, not fuel their imposter syndrome. They will love you for it. You also carry some responsibility to make sure customers are on a correct path with your technology. First earn the right to speak into their work, then guide carefully.&lt;/p&gt;
&lt;p data-end=&quot;4191&quot; data-start=&quot;3822&quot;&gt;&lt;strong data-end=&quot;3839&quot; data-start=&quot;3822&quot;&gt;Prescription.&lt;/strong&gt; Many developers are happy to figure things out, but they love prescriptive guidance that helps them avoid the “dumb tax.” Your value is in showing how to get started and where to go next. Sometimes this comes in case studies, sometimes in made-up scenarios, sometimes in tutorials or white papers, sometimes in personal journeys you have documented.&lt;/p&gt;
&lt;h3 data-end=&quot;4206&quot; data-start=&quot;4193&quot;&gt;Empathy&lt;/h3&gt;
&lt;p data-end=&quot;4540&quot; data-start=&quot;4207&quot;&gt;This is where empathy comes in. Understanding where a developer is on this scale is difficult. A kind of cold reading becomes part of personal interaction, even when reading an audience from a stage. It is a mind-meld at scale. Changing your tone and intent on the fly is an important ingredient in successful Developer Evangelism.&lt;/p&gt;
&lt;p data-end=&quot;4803&quot; data-start=&quot;4542&quot;&gt;Remember, empathy is your ability to understand or feel another person’s emotional state. Sympathy, on the other hand, is responding to that state. I am not suggesting a Developer Evangelist must have sympathy, though it never hurts, but empathy is essential.&lt;/p&gt;
&lt;p data-end=&quot;5057&quot; data-start=&quot;4805&quot;&gt;One of the most powerful ways to build empathy for developers is to live their life. Walk a mile in their shoes. If you wonder what a developer experiences when using your product, start from scratch and document every single step. It is eye-opening.&lt;/p&gt;
&lt;p data-end=&quot;5253&quot; data-start=&quot;5059&quot;&gt;Another exercise is inclusive design. To understand how users feel when they cannot see, try using your application with the monitor turned off. See how far you get. That, too, is eye-opening.&lt;/p&gt;
&lt;h3 data-end=&quot;5270&quot; data-start=&quot;5255&quot;&gt;The magic&lt;/h3&gt;
&lt;p data-end=&quot;5521&quot; data-start=&quot;5271&quot;&gt;Communicating empathy is like magic. Saying things like, “I know what you mean. The portal tells you to do it this way, but it never works, does it?” is not betraying your product; it is empathizing. It is the kind of warm rain everyone relates to.&lt;/p&gt;
&lt;p data-end=&quot;5837&quot; data-start=&quot;5523&quot;&gt;It is worth pointing out, however, that you can easily betray your product. Saying, “Yeah, it’s not stable,” or “I’m sick of all these bugs, just like you,” can crush confidence in a product and create distrust. You might feel like you are being real with your audience, but you are laying a foundation of doubt.&lt;/p&gt;
&lt;p data-end=&quot;6234&quot; data-start=&quot;5839&quot;&gt;Here’s the takeaway: most developers are struggling. When you catch yourself thinking, “It’s not that hard,” or “Just use the docs,” you may be falling into the same trap as a Stack Overflow moderator. You are forgetting that every developer is at a different place. Your job is not to prod them to work harder but to encourage them toward hope and to make their lives better and easier today.&lt;/p&gt;
&lt;p data-end=&quot;6476&quot; data-is-last-node=&quot;&quot; data-is-only-node=&quot;&quot; data-start=&quot;6236&quot;&gt;Find ways to look at developers with empathy, with a compassion that helps you slow down, present 101 instead of 401 sessions, re-explain a concept you have already explained a thousand times, and look forward to their success, not yours.&lt;/p&gt;&lt;/div&gt;
</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8789713/posts/default/3534629573221157479'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8789713/posts/default/3534629573221157479'/><link rel='alternate' type='text/html' href='http://blog.jerrynixon.com/2019/03/developer-evangelisms-obvious-secret.html' title='Developer Evangelism’s Obvious Secret'/><author><name>jerrynixon</name><uri>http://www.blogger.com/profile/06978720385628364065</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-8789713.post-6869174464340622223</id><published>2019-03-04T14:57:00.001-07:00</published><updated>2025-09-15T21:12:06.338-06:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Community"/><title type='text'>Three Reasons for Developer Evangelists to Engage</title><content type='html'>&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;

&lt;/div&gt;


&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;&lt;div class=&quot;MsoNoSpacing&quot;&gt;&lt;div class=&quot;MsoNoSpacing&quot;&gt;
&lt;img align=&quot;right&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiHvC20tyjEoVdXcpMyHU9a1KVGMx8Y88Kcyhu4C9r5gsaCiiX6a9DekzyBA2lQF_2S8VHBGyJ-ZeoUGjhDJ_WTAQUIvlwM9pEII1qPdIkhaiAwZl6Oylx27GUQ7Dv3MZRqd7p1Ug/w300-h200-no/&quot; style=&quot;display: inline; float: right;&quot; /&gt;&lt;/div&gt;&lt;p data-end=&quot;173&quot; data-start=&quot;0&quot;&gt;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.&lt;/p&gt;
&lt;p data-end=&quot;432&quot; data-start=&quot;175&quot;&gt;As a reminder, online engagement has the greatest reach but the least impact, personal engagement has the greatest impact but the least reach, and onstage engagement is a combination of the two with varying results depending on skill, style, and approach.&lt;/p&gt;
&lt;p data-end=&quot;688&quot; data-start=&quot;434&quot;&gt;But 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 again: why are you engaging? I would assert there are three reasons for Developer Evangelism engagement.&lt;/p&gt;
&lt;p data-end=&quot;978&quot; data-start=&quot;690&quot;&gt;When it comes to persuasion or public speaking, there is only one reason for engagement. Developer Evangelism is a specialized engagement strategy that uses persuasion or public speaking as a vehicle. Where public speaking aims at changed behavior, Developer Evangelism is more nuanced.&lt;span&gt;&lt;/span&gt;&lt;/p&gt;&lt;a name=&#39;more&#39;&gt;&lt;/a&gt;&lt;p&gt;&lt;/p&gt;
&lt;h3 data-end=&quot;1001&quot; data-start=&quot;980&quot;&gt;Here’s the list&lt;/h3&gt;
&lt;p data-end=&quot;1293&quot; data-start=&quot;1002&quot;&gt;It is fine to oversimplify at this point. Developer Evangelists engage audiences to either 1) introduce, 2) educate, or 3) inspire. It is not practical to approach any engagement with the goal of accomplishing all three. It is, however, reasonable to span more than one with some planning.&lt;/p&gt;
&lt;p data-end=&quot;1555&quot; data-start=&quot;1295&quot;&gt;&lt;strong data-end=&quot;1309&quot; data-start=&quot;1295&quot;&gt;Introduce.&lt;/strong&gt; One of the most common tasks 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 right communities. This is where breadth matters, not depth.&lt;/p&gt;
&lt;p data-end=&quot;1840&quot; data-start=&quot;1557&quot;&gt;In this phase, the assumption is that most of your audience has no idea what you are about to say. The topics are targeted and simple, with outcomes measured by interest, awareness, and possibly registration. This can mean hard work, a lot of travel, and a large online investment.&lt;/p&gt;
&lt;p data-end=&quot;2148&quot; data-start=&quot;1842&quot;&gt;On the whole, this is a basic use case for a Developer Evangelism team. It often signals short-sighted leadership chasing metrics that are usually artificial, changing, or unimportant. It is an acceptable place to start, but no team should consider this their destination. It is only warming the engines.&lt;/p&gt;
&lt;p data-end=&quot;2445&quot; data-start=&quot;2150&quot;&gt;&lt;strong data-end=&quot;2162&quot; data-start=&quot;2150&quot;&gt;Educate.&lt;/strong&gt; Another common task of Developer Evangelism is spreading understanding. The effort applied here is directly related to the quality of available documentation. In place of excellent examples, tutorials, and docs, Developer Evangelism fills the gaps with education-oriented content.&lt;/p&gt;
&lt;p data-end=&quot;2688&quot; data-start=&quot;2447&quot;&gt;The biggest problem with this aspect is that education is time-consuming, mundane, and distracting from bigger, better strategies. It usually results in articles and sessions that require significant preparation yet are seen by only a few.&lt;/p&gt;
&lt;p data-end=&quot;2981&quot; data-start=&quot;2690&quot;&gt;Developer Evangelists are overqualified to impact the effectiveness of documentation, but their involvement is very important. They are not always the best technical writers or tutorial authors, though they can be. Still, the goal is to move beyond this strategy quickly. Get it over with.&lt;/p&gt;
&lt;p data-end=&quot;3259&quot; data-start=&quot;2983&quot;&gt;&lt;strong data-end=&quot;2995&quot; data-start=&quot;2983&quot;&gt;Inspire.&lt;/strong&gt; The highest form of Developer Evangelism is to present developers with a prototype of what they could become later in their career or later in a project’s cycle. Inspiration says, “I understand where you are” and then asks, “Can you imagine where you could be?”&lt;/p&gt;
&lt;p data-end=&quot;3517&quot; data-start=&quot;3261&quot;&gt;These engagements span technologies, products, and communities. They are relevant because they speak to the “why” before the “how.” They elevate a developer from technical leadership to thought leadership, making the Evangelist’s message a secondary win.&lt;/p&gt;
&lt;p data-end=&quot;3780&quot; data-start=&quot;3519&quot;&gt;What do I mean? This is simple, yet elusive. Developer Evangelism is often explained as recognizing where a developer is in their personal journey, meeting them there, and helping them succeed. That is noble, but it is also too small and too shallow a vision.&lt;/p&gt;
&lt;p data-end=&quot;4063&quot; data-start=&quot;3782&quot;&gt;As a Developer Evangelist, if you only attach to a developer’s current situation, you limit your own opportunity to succeed. We want to understand where developers are so we can talk with them, but the reason we talk to them is different. We talk to them to change their journey.&lt;/p&gt;
&lt;p data-end=&quot;4369&quot; data-start=&quot;4065&quot;&gt;Inspiration is the power to cast vision into someone else’s life. 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 your habits. Unless you and I are already aligned, then my goal is simply to encourage you where you are.&lt;/p&gt;
&lt;p data-end=&quot;4688&quot; data-start=&quot;4371&quot;&gt;Novice Developer Evangelists chase “awareness.” Great Developer Evangelists can get stuck filling the gap of poor documentation. But when we stop at “Hello World,” when we stop teaching class, we miss the chance to challenge developers to be more. No Developer Evangelist needs to fight for attention at that level.&lt;/p&gt;
&lt;p data-end=&quot;4990&quot; data-start=&quot;4690&quot;&gt;How do you get there? It is easy. Stop and ask yourself why you are about to engage. Is it because you are chasing awareness? Awareness is not 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.&lt;/p&gt;
&lt;p data-end=&quot;5096&quot; data-start=&quot;4992&quot;&gt;You must find goals that matter to developers without making yourself captive to their tactical needs.&lt;/p&gt;
&lt;p data-end=&quot;5380&quot; data-start=&quot;5098&quot;&gt;Engage to change. Engage to improve. Engage to inspire. And inspiration begins with vision casting, the ability to paint a picture of something that is not yet real but could be, then challenge someone in a realistic way to pursue that vision, that shared vision you have created.&lt;/p&gt;
&lt;p data-end=&quot;5485&quot; data-start=&quot;5382&quot;&gt;Let developers reframe your vision as theirs. Then show them the tools that can help them achieve it.&lt;/p&gt;
&lt;p data-end=&quot;5748&quot; data-start=&quot;5487&quot;&gt;Intentional engagement is powerful, 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. Do not stop with today when you should be showing them tomorrow.&lt;/p&gt;
&lt;p data-end=&quot;5765&quot; data-is-last-node=&quot;&quot; data-is-only-node=&quot;&quot; data-start=&quot;5750&quot;&gt;Best of luck.&lt;/p&gt;&lt;/div&gt;
&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8789713/posts/default/6869174464340622223'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8789713/posts/default/6869174464340622223'/><link rel='alternate' type='text/html' href='http://blog.jerrynixon.com/2019/03/three-reasons-for-developer-evangelists.html' title='Three Reasons for Developer Evangelists to Engage'/><author><name>jerrynixon</name><uri>http://www.blogger.com/profile/06978720385628364065</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiHvC20tyjEoVdXcpMyHU9a1KVGMx8Y88Kcyhu4C9r5gsaCiiX6a9DekzyBA2lQF_2S8VHBGyJ-ZeoUGjhDJ_WTAQUIvlwM9pEII1qPdIkhaiAwZl6Oylx27GUQ7Dv3MZRqd7p1Ug/s72-w300-h200-c-no/" height="72" width="72"/></entry><entry><id>tag:blogger.com,1999:blog-8789713.post-3429456535756667452</id><published>2019-01-01T13:34:00.001-07:00</published><updated>2019-01-03T10:00:30.629-07:00</updated><title type='text'>Some goals for 2019</title><content type='html'>&lt;div style=&quot;text-align: left;&quot; dir=&quot;ltr&quot; trbidi=&quot;on&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgCqfp8ZBL0b3E9iXPFYMUPwLLMheIpnT7e98LqZSOmbgjrjnpQOYoTqipK3GBXDA7HOSvjGJGhwbzPPeRq1mfPvy92Ln3wTCqVkGZTgPwCcW-GdKAXqOMtefHOHDZEcQJ0_dwPuw/s1600-h/image%255B74%255D&quot;&gt;&lt;img width=&quot;320&quot; height=&quot;226&quot; title=&quot;image&quot; align=&quot;right&quot; style=&quot;margin: 0px 0px 10px 20px; border-image: none; float: right; display: inline; background-image: none;&quot; alt=&quot;image&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjRcreEZvgDERg2qK7SpOjBNLrAyb-TQOuMxno-D24dChHzIocdYpLbIHQB_cESV7T09qP30JzOmBN-ATynWyGj6-wSldOLzgDtF9JnU_KSWrFKU5FfUPm8PJ1qCdhzvBfy9bSrAQ/?imgmax=800&quot; border=&quot;0&quot;&gt;&lt;/a&gt;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.&lt;br&gt;&lt;br&gt;
&lt;/div&gt;&lt;div style=&quot;text-align: left;&quot; dir=&quot;ltr&quot; trbidi=&quot;on&quot;&gt;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 &lt;strong&gt;this year’s goals resemble last year’s goals&lt;/strong&gt;. 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.
&lt;/div&gt;&lt;a name=&#39;more&#39;&gt;&lt;/a&gt;&lt;div style=&quot;text-align: left;&quot; dir=&quot;ltr&quot; trbidi=&quot;on&quot;&gt;&lt;br&gt;
&lt;a name=&quot;more&quot;&gt;&lt;/a&gt;&lt;/div&gt;&lt;h3 style=&quot;text-align: left;&quot; dir=&quot;ltr&quot; trbidi=&quot;on&quot;&gt;
&lt;br&gt;1. Re-watch Battlestar Galactica 2004&lt;/h3&gt;&lt;div style=&quot;text-align: left;&quot; dir=&quot;ltr&quot; trbidi=&quot;on&quot;&gt;
&lt;img width=&quot;200&quot; height=&quot;160&quot; align=&quot;left&quot; style=&quot;margin: 0px 0px 40px; float: left; display: inline;&quot; alt=&quot;See the source image&quot; src=&quot;http://pmctvline2.files.wordpress.com/2011/03/thelfer_jcallis_300110304081349.jpg&quot;&gt;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: &lt;strong&gt;I can only watch the show if I am on my treadmill&lt;/strong&gt;. 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. &lt;strong&gt;Star Trek is a wonderful universe&lt;/strong&gt;, but Battlestar Galactica 2004 is the finest show science fiction fans have been given.&lt;br&gt;&lt;br&gt;
&lt;/div&gt;&lt;h3 style=&quot;text-align: left;&quot; dir=&quot;ltr&quot; trbidi=&quot;on&quot;&gt;
2. Read the seven Harry Potter books&lt;/h3&gt;&lt;div style=&quot;text-align: left;&quot; dir=&quot;ltr&quot; trbidi=&quot;on&quot;&gt;
&lt;img width=&quot;200&quot; height=&quot;155&quot; align=&quot;left&quot; style=&quot;margin: 0px 0px 40px; float: left; display: inline;&quot; alt=&quot;See the source image&quot; src=&quot;http://www.theyoungfolks.com/wp-content/uploads/2012/02/harry-potter-books.jpg&quot;&gt;It might seem impossible, but I have neither read the books nor seen the movies. It’s just one of those things.&amp;nbsp; 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.&lt;br&gt;&lt;br&gt;
&lt;/div&gt;&lt;h3 style=&quot;text-align: left;&quot; dir=&quot;ltr&quot; trbidi=&quot;on&quot;&gt;
3. Write twelve blog articles&lt;/h3&gt;&lt;div style=&quot;text-align: left;&quot; dir=&quot;ltr&quot; trbidi=&quot;on&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiscZNDZ2LlNqCRw9w2pmnhLO631nMnml_1FZ3WlZ-lsiFYwwuyqXKUO1gR4ETvO6zW-ILbwARXMYcqgl5jXff8qUuIgEHaD7CY6Gg8_gCFslCj9UM-qxzsqvJEUl2LDSWan_Ejvg/s1600-h/image%255B4%255D&quot;&gt;&lt;img width=&quot;200&quot; height=&quot;129&quot; title=&quot;image&quot; align=&quot;left&quot; style=&quot;margin: 0px 0px 40px; border: 0px currentcolor; border-image: none; float: left; display: inline; background-image: none;&quot; alt=&quot;image&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhkjWtuQPrUQ4ikYY9aoJ7_CD3WCFsQ249sx7kp2zZSEJyR-P4TWHkgV0Ml45KsB_ltne82mEUViWybbRVlqwvZl-ZlGOuFbixHY8WG0wptkwqwoXAIJ5RcmwqYkMzOeUXIrEx3ug/?imgmax=800&quot; border=&quot;0&quot;&gt;&lt;/a&gt;Once again, I am looking for attainable goals – after this article, I only need eleven more. &lt;strong&gt;It aligns with one article a month&lt;/strong&gt;, 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.&lt;br&gt;&lt;br&gt;
&lt;/div&gt;&lt;h3 style=&quot;text-align: left;&quot; dir=&quot;ltr&quot; trbidi=&quot;on&quot;&gt;
4. Pay for what I Torrent &lt;/h3&gt;&lt;div style=&quot;text-align: left;&quot; dir=&quot;ltr&quot; trbidi=&quot;on&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiEvr5_05fKgDmXNCbGob7jrANcBxS7ZejPoor6l__3imTesDo78E3Jp_7cZAeRjjPPJV6LOSqqrCpQV6d7B6kBrvGH-N-OXU7Rg8vAbaXx4zmlQYOpWg6C2Z73nTJ3CJoi-Qq_og/s1600-h/image%255B12%255D&quot;&gt;&lt;img width=&quot;200&quot; height=&quot;165&quot; title=&quot;image&quot; align=&quot;left&quot; style=&quot;border: 0px currentcolor; border-image: none; float: left; display: inline; background-image: none;&quot; alt=&quot;image&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi6Fd0oXNoE9OBJ-hRXOg25e6LMTwgWuRPIUt4TXKByzvsnKmuxJa1oRBI6KZq8wTt7ERyf0fNxkXBu7fwmjtk641sUtkolq-oattvaLhpYrVElW4XJcj-GK92s8o4UziPZ8TISRw/?imgmax=800&quot; border=&quot;0&quot;&gt;&lt;/a&gt;We’re treading on an ethical issue for me. &lt;strong&gt;There are times when a Torrent of a movie or television show is not wrong. &lt;/strong&gt;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.&lt;br&gt;
&lt;br&gt;
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. &lt;strong&gt;Is it weird to Torrent movies and still pay for them?&lt;/strong&gt; 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.&lt;br&gt;&lt;br&gt;
&lt;/div&gt;&lt;h3 style=&quot;text-align: left;&quot; dir=&quot;ltr&quot; trbidi=&quot;on&quot;&gt;
5. Write the &quot;Difference Between&quot; draft&lt;/h3&gt;&lt;div style=&quot;text-align: left;&quot; dir=&quot;ltr&quot; trbidi=&quot;on&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiyb5bp-9dDHcWs6dBtLa70ddJmHSU4xv_7Bpy2NIyF6PX2CDXdveK8iTvgF8lyOGgMAj1wKoPM_N4zqOx9gFpuFCmJseZVIl_5UcdMRRYA1H3GKL68h2HNaT7Eyw9pvNGwoPtiHw/s1600-h/image%255B15%255D&quot;&gt;&lt;img width=&quot;200&quot; height=&quot;159&quot; title=&quot;image&quot; align=&quot;left&quot; style=&quot;margin: 0px 0px 40px; border: 0px currentcolor; border-image: none; float: left; display: inline; background-image: none;&quot; alt=&quot;image&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjPlmDf9-n91PiVxQnOq258sxaXPAUAOM4S-hIkTmQaAwlHuVyFyH_BgytiZPLpJVxjKhQ-G_cmn-vhDb-kVZs6h4Vdw21jwzsZlrj0CvQenRPRIsE5Lh71M6pyIuwj-gpsKE5QJA/?imgmax=800&quot; border=&quot;0&quot;&gt;&lt;/a&gt;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 &lt;strong&gt;it’s not a novel&lt;/strong&gt;; it’s an etymology book addressing terms regularly misused in writing and speech. For example, Fate &amp;amp; Destiny or Hard &amp;amp; Difficult – terms we treat as synonyms, but they are not.&lt;br&gt;
&lt;br&gt;
The draft will be difficult, not hard. ;-)&lt;br&gt;&lt;br&gt;
&lt;/div&gt;&lt;h3 style=&quot;text-align: left;&quot; dir=&quot;ltr&quot; trbidi=&quot;on&quot;&gt;
6. Publish my Star Trek Dreams Alexa skill&lt;/h3&gt;&lt;div style=&quot;text-align: left;&quot; dir=&quot;ltr&quot; trbidi=&quot;on&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiOmiUgw70TGYy1njJeVWF25h-hws-77SqwObh0uTALBxMrPOBJhAvOXWCG7p1NJq7ZhQhiNoqoxl27e23zCRdXS3I3t52E1s61RVoSz0GWQXzV74c3jepuzpMr8x1QmyYbZBACtg/s1600-h/image19%255B1%255D&quot;&gt;&lt;img width=&quot;200&quot; height=&quot;176&quot; title=&quot;image&quot; align=&quot;left&quot; style=&quot;margin: 0px 0px 40px; border: 0px currentcolor; border-image: none; float: left; display: inline; background-image: none;&quot; alt=&quot;image&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjb66kQlr6nMk3yDuuZIjZlDwqgTufiJM0CTAk6NRjo_Y2e1f1w3jbF-RB-tgy8DKeEQgYNm72Y63X3AF-EHYbrGTDc7mHg_AFrTEo_068ze0b_7aub0r3bBa_3rVZQxSKpx24aew/?imgmax=800&quot; border=&quot;0&quot;&gt;&lt;/a&gt;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. &lt;strong&gt;Star Trek Dreams&lt;/strong&gt; is white noise, Star Trek-style. Version one is simply the TNG warp core gently beating all night. It&#39;s really for me. I see that.&lt;br&gt;&lt;br&gt;&lt;/div&gt;
&lt;h3 style=&quot;text-align: left;&quot; dir=&quot;ltr&quot; trbidi=&quot;on&quot;&gt;
7. Read 48 books&lt;/h3&gt;&lt;div style=&quot;text-align: left;&quot; dir=&quot;ltr&quot; trbidi=&quot;on&quot;&gt;&lt;strong&gt;
&lt;/strong&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg5xG1znFzEj_EyuOmcgCbJMFvd5hgKeEhNPQgoorLaPdjqz7BZ8lTuKv37xBkdDuMg2p36Na8mE3euS7uacSNaaTqnARUeH8Mvmvlo4OQe4P2GYd0usyubPJmobRJZm4CJJ1cLfw/s1600-h/image24&quot;&gt;&lt;strong&gt;&lt;/strong&gt;&lt;/a&gt;&lt;strong&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi-Y7C8MtF2ylsF6Juehq8e7e0A1KzpYuuhPlN5_QaFCTaYPlyy5jbpV6salB5VMZ-3Jb_i1dCtTB0K1BMyirC5mSEZI3MqqsYAMJJLrK6APQbLXySKwUnijnQK1XG68VbcuejgvA/s1600-h/image221&quot;&gt;&lt;img width=&quot;200&quot; height=&quot;172&quot; title=&quot;image&quot; align=&quot;left&quot; style=&quot;margin: 0px 0px 40px; border: 0px currentcolor; border-image: none; float: left; display: inline; background-image: none;&quot; alt=&quot;image&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgqDFZEXt6sreRUC-SSr0MczkimVktcbaZque1QoZBL2Z4eMvF1Zb050NkTDKkCca6T4og0XRReONBWI2O70lF61TcwV8XCB_mjXq_RZ2IpJ_RLL2dcoh3l8f0kbN2cqHKMSJI04Q/?imgmax=800&quot; border=&quot;0&quot;&gt;&lt;/a&gt;&lt;/strong&gt;&lt;strong&gt;That’s four a month.&lt;/strong&gt; 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. &lt;/div&gt;&lt;div style=&quot;text-align: left;&quot; dir=&quot;ltr&quot; trbidi=&quot;on&quot;&gt;&lt;br&gt;&lt;/div&gt;&lt;div style=&quot;text-align: left;&quot; dir=&quot;ltr&quot; trbidi=&quot;on&quot;&gt;I’m not all that picky. Not really.&lt;br&gt;&lt;br&gt;
&lt;/div&gt;&lt;h4 style=&quot;text-align: left;&quot; dir=&quot;ltr&quot; trbidi=&quot;on&quot;&gt;
Here is my reading list from November and December 2018:&lt;br&gt;&amp;nbsp;&lt;/h4&gt;&lt;div style=&quot;text-align: left;&quot; dir=&quot;ltr&quot; trbidi=&quot;on&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjznNl5h6rCWCClYAxHXIfJ8ec8FsvmYUUoODW_s4RcuSfZKhb99sD6Hg5qMQvNxsiJnYZtLcAxN37gaAbvGJTsrbS4zZNplYcKjpAjE4J1-M40VB9nCb3F_uYvZGkQbB9zckUasw/s1600-h/image%255B36%255D&quot;&gt;&lt;img width=&quot;150&quot; height=&quot;225&quot; title=&quot;image&quot; align=&quot;right&quot; style=&quot;margin: 0px 0px 40px; border: 0px currentcolor; border-image: none; float: right; display: inline; background-image: none;&quot; alt=&quot;image&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhL6UlpCfCoIkfg4jpaOhHVho_g13W1ww4KBgXdw-2i5Ha9rkFTyipRIDS1O-gD67nKMsPsLYU48yq5CbLj1d5b8JWSVBxipSs43097Vuc5saUpCxUUb9fx-LKjKtIYcbv-TfbrYA/?imgmax=800&quot; border=&quot;0&quot;&gt;&lt;/a&gt;&lt;b&gt;One Year After &lt;/b&gt;&amp;amp; The Last Man by William R. Forstchen. These are the second &amp;amp; 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.&lt;br&gt;
&lt;br&gt;
&lt;b&gt;Master of Formalities &lt;/b&gt;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.&lt;br&gt;
&lt;br&gt;
&lt;b&gt;God is the Gospel &lt;/b&gt;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.&lt;br&gt;
&lt;br&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgUfpo8PxYT0ji_igrzo99swNtmS4jx0UZiTaZdcG2ORWZTCeg1nfeCEM1Nc-hLRHAPfZjN9cPAnl-JjNm3S3mmiVXZ7WsX0c7TqMorIhw0c4rqAitx06RbIFwzLJsf6lw1D87LHg/s1600-h/image%255B34%255D&quot;&gt;&lt;img width=&quot;150&quot; height=&quot;233&quot; title=&quot;image&quot; align=&quot;right&quot; style=&quot;margin: 0px 0px 40px; border: 0px currentcolor; border-image: none; float: right; display: inline; background-image: none;&quot; alt=&quot;image&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjlTAl-qAeCUDP3A3wdiUv8GxPAfcsnBRJcXZSMWgnuC_lz8T6XLuz5EJs7gER-Rd0RmWZMbSweYnh5fu0hzhC3aqRB1ia1YPvNOWSLjC4Zkxy_XQv0yiCHVOkL98qN8xCesM3WJg/?imgmax=800&quot; border=&quot;0&quot;&gt;&lt;/a&gt;&lt;b&gt;You are not so smart &lt;/b&gt;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.&lt;br&gt;
&lt;br&gt;
&lt;b&gt;The Dispatcher &lt;/b&gt;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.&lt;br&gt;
&lt;br&gt;
&lt;b&gt;Neverwhere &lt;/b&gt;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 &amp;amp; invisible to us normal mortals.&lt;br&gt;
&lt;br&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgBkTYl48kcOsxnFXibFfvNxsADt6D4fxY_eLyWuqo4X0RMBSu52Itj6F6sWvt9B65a9q9YxlkJTbJj0iKNBdFcCryR_ZuhZGFoLwGdk99DxG97Oo66LW6XtSmfCkEElh0veKsdCw/s1600-h/image%255B35%255D&quot;&gt;&lt;img width=&quot;150&quot; height=&quot;229&quot; title=&quot;image&quot; align=&quot;right&quot; style=&quot;margin: 0px 0px 40px; border: 0px currentcolor; border-image: none; float: right; display: inline; background-image: none;&quot; alt=&quot;image&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjw6GSA4n7XZm4oL1lGbjeDPhY7GYc3tMoZX4-IQGgpLPu5rgc86IcEComed6gUoVIYqz56tcFMIgRGL2ubyb_ORDVnBg6-c0_jUjuV_TWD5V2HTEDT55reSLHOyOrH9atc-pj1pQ/?imgmax=800&quot; border=&quot;0&quot;&gt;&lt;/a&gt;&lt;b&gt;The Long Haul &lt;/b&gt;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.&lt;br&gt;
&lt;br&gt;
&lt;b&gt;Love Does &lt;/b&gt;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.&lt;br&gt;
&lt;br&gt;
&lt;b&gt;The Sherlockian &lt;/b&gt;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.&lt;br&gt;
&lt;br&gt;
&lt;b&gt;House of Suns &lt;/b&gt;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.&lt;br&gt;
&lt;br&gt;
&lt;b&gt;I suck at girls &lt;/b&gt;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.&lt;br&gt;&lt;br&gt;
&lt;/div&gt;&lt;h3 style=&quot;text-align: left;&quot; dir=&quot;ltr&quot; trbidi=&quot;on&quot;&gt;
8. Rewrite Free Timer in the Microsoft Store&lt;/h3&gt;&lt;div style=&quot;text-align: left;&quot; dir=&quot;ltr&quot; trbidi=&quot;on&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjZTGxRAiLYDSwC6O7yNGVzaCNFo8IrwKJpgx3PkgkHUpx_BDSuv3mCRbyRy0fNdOxBL3REh3ka8MLGpOJ5nd2B1XOijLvH1wQSJGR83ZYJyN0n52s6c3s4yRLPvUTS9BS2TOX93w/s1600-h/image%255B45%255D&quot;&gt;&lt;img width=&quot;200&quot; height=&quot;202&quot; title=&quot;image&quot; align=&quot;left&quot; style=&quot;margin: 0px 0px 40px; border: 0px currentcolor; border-image: none; float: left; display: inline; background-image: none;&quot; alt=&quot;image&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjHMLT8_Qmi8_qbJ_oW7h3u5J8JFxJp0CUKpl5pgYU40Ey5OpBLJhVBDTFOhWxbSpth6AAAr9QcMY2M0-B91zu5Ngk3Z1GEhCgYTEvXgQ_DCzqNeSDcSCX8DTsdEYf4-gihrMhdqg/?imgmax=800&quot; border=&quot;0&quot;&gt;&lt;/a&gt;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. ;-) &lt;strong&gt;It’s crazy how many people use this &lt;/strong&gt;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.&lt;br&gt;
&lt;br&gt;
If I manage to get that updated,&lt;strong&gt; I’ll follow up with writing my Pomodoro app&lt;/strong&gt;. 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.&lt;br&gt;&lt;br&gt;
&lt;/div&gt;&lt;h3 style=&quot;text-align: left;&quot; dir=&quot;ltr&quot; trbidi=&quot;on&quot;&gt;
9. Dial back on the caffeine&lt;/h3&gt;&lt;div style=&quot;text-align: left;&quot; dir=&quot;ltr&quot; trbidi=&quot;on&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjm-VRIu5gugslvK7eAivUf0NVjNAacABpIAYUppNf_Lra_cqJ4l6OGK_m8bI2iLUVigrIkyyZ30__ROo5cST5aO8EG_Y02soHH_MlkhXVkSfyLzvIFNPmq9f2FyB6swwWB8VF7SA/s1600-h/image%255B53%255D&quot;&gt;&lt;img width=&quot;200&quot; height=&quot;231&quot; title=&quot;image&quot; align=&quot;left&quot; style=&quot;margin: 0px 0px 10px; border: 0px currentcolor; border-image: none; float: left; display: inline; background-image: none;&quot; alt=&quot;image&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi0dHyq4MZPqR3SBuVaJL3wPMnPM7uc1uIwc7IJhlPZnpxU4-Hc370jeUMkLqVryVHXBHOsDT4JHFDgOiUG-WxEcWzzEFfr9HHyoeQYBnPnp8OlnnqQdxujU6oGcsTgKTgahcexKQ/?imgmax=800&quot; border=&quot;0&quot;&gt;&lt;/a&gt;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; &lt;strong&gt;I’m ready to change my consumption habits. &lt;/strong&gt;&lt;/div&gt;&lt;div style=&quot;text-align: left;&quot; dir=&quot;ltr&quot; trbidi=&quot;on&quot;&gt;&lt;br&gt;&lt;/div&gt;&lt;div style=&quot;text-align: left;&quot; dir=&quot;ltr&quot; trbidi=&quot;on&quot;&gt;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.&lt;br&gt;&lt;br&gt;
&lt;/div&gt;&lt;h3 style=&quot;text-align: left;&quot; dir=&quot;ltr&quot; trbidi=&quot;on&quot;&gt;
10. Leave room&lt;/h3&gt;&lt;div style=&quot;text-align: left;&quot; dir=&quot;ltr&quot; trbidi=&quot;on&quot;&gt;
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 &lt;strong&gt;it’s equally important to leave room for change and the unexpected&lt;/strong&gt;. 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.&lt;/div&gt;&lt;div style=&quot;text-align: left;&quot; dir=&quot;ltr&quot; trbidi=&quot;on&quot;&gt;&lt;br&gt;&lt;/div&gt;&lt;div style=&quot;text-align: left;&quot; dir=&quot;ltr&quot; trbidi=&quot;on&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjmxKzXzFs5Scn9XBcGxPjfqFcrKbbzh-5XH2IucTtSuZGReJ5xb2mNGbTlockQKO5xZFzjyTsdazq8DZcnd0cs94jRUX-ssLhvmXxHKd0RsnHi7r1tSuwemTbZgGhFBF5Za-kDdA/s1600-h/image%255B60%255D&quot;&gt;&lt;img width=&quot;570&quot; height=&quot;301&quot; title=&quot;image&quot; style=&quot;margin: 0px auto 40px; border: 0px currentcolor; border-image: none; float: none; display: block; background-image: none;&quot; alt=&quot;image&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj8flIOf3yl9vz0jDSOepg7WWKaUAqDFOkoCfYGVGOYo_cfbpKfqx1LQK-k_Wn8XcuKaVJjG6jw8UPp7tAIYXg21_WKuO0LhxVRFZh5qgzusUzFqJLfPE8pxKIFzR6Pd8Ct8OWLkg/?imgmax=800&quot; border=&quot;0&quot;&gt;&lt;/a&gt;&lt;strong&gt;

And so, we open 2019.&lt;/strong&gt; 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.&lt;br&gt;
&lt;i&gt;&lt;/i&gt;&lt;br&gt;
&lt;i&gt;Happy new year.&lt;/i&gt;&lt;br&gt;
&lt;i&gt;&lt;/i&gt;&lt;br&gt;
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. &lt;strong&gt;I wanted to create this list.&lt;/strong&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8789713/posts/default/3429456535756667452'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8789713/posts/default/3429456535756667452'/><link rel='alternate' type='text/html' href='http://blog.jerrynixon.com/2019/01/some-goals-for-2019.html' title='Some goals for 2019'/><author><name>jerrynixon</name><uri>http://www.blogger.com/profile/06978720385628364065</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjRcreEZvgDERg2qK7SpOjBNLrAyb-TQOuMxno-D24dChHzIocdYpLbIHQB_cESV7T09qP30JzOmBN-ATynWyGj6-wSldOLzgDtF9JnU_KSWrFKU5FfUPm8PJ1qCdhzvBfy9bSrAQ/s72-c?imgmax=800" height="72" width="72"/></entry><entry><id>tag:blogger.com,1999:blog-8789713.post-203386468008425427</id><published>2018-02-08T18:42:00.000-07:00</published><updated>2018-02-08T18:52:50.800-07:00</updated><title type='text'>The three pillars of Technical Evangelism</title><content type='html'>&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;
&lt;div class=&quot;MsoNoSpacing&quot;&gt;
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.&lt;/div&gt;
&lt;div class=&quot;MsoNoSpacing&quot;&gt;
&lt;o:p&gt;&lt;/o:p&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNoSpacing&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNoSpacing&quot;&gt;
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.&lt;/div&gt;
&lt;a name=&#39;more&#39;&gt;&lt;/a&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;br /&gt;
&lt;div class=&quot;MsoNoSpacing&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNoSpacing&quot;&gt;
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.&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&lt;/div&gt;
&lt;h3 style=&quot;text-align: left;&quot;&gt;
What isn’t evangelism?&lt;/h3&gt;
&lt;div&gt;
&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;MsoNoSpacing&quot;&gt;
&lt;o:p&gt;&lt;/o:p&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNoSpacing&quot;&gt;
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.&lt;/div&gt;
&lt;div class=&quot;MsoNoSpacing&quot;&gt;
&lt;o:p&gt;&lt;/o:p&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNoSpacing&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNoSpacing&quot;&gt;
Speaking is important, yes, but it isn’t Evangelism – at least
not core evangelism. &lt;o:p&gt;&lt;/o:p&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNoSpacing&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNoSpacing&quot;&gt;
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. &lt;o:p&gt;&lt;/o:p&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNoSpacing&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNoSpacing&quot;&gt;
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.&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&lt;/div&gt;
&lt;h3 style=&quot;text-align: left;&quot;&gt;
They are not who you think.&lt;/h3&gt;
&lt;div&gt;
&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;MsoNoSpacing&quot;&gt;
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.&lt;o:p&gt;&lt;/o:p&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNoSpacing&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNoSpacing&quot;&gt;
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. &lt;o:p&gt;&lt;/o:p&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNoSpacing&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNoSpacing&quot;&gt;
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.&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&lt;/div&gt;
&lt;h3 style=&quot;text-align: left;&quot;&gt;
Don’t make friends.&lt;/h3&gt;
&lt;blockquote class=&quot;tr_bq&quot;&gt;
Quick aside: I do like making friends. ;-)&lt;/blockquote&gt;
&lt;div class=&quot;MsoNoSpacing&quot;&gt;
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.&lt;o:p&gt;&lt;/o:p&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNoSpacing&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNoSpacing&quot;&gt;
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. &lt;o:p&gt;&lt;/o:p&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNoSpacing&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNoSpacing&quot;&gt;
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.&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&lt;/div&gt;
&lt;h3 style=&quot;text-align: left;&quot;&gt;
Make it personal.&lt;/h3&gt;
&lt;div&gt;
&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;MsoNoSpacing&quot;&gt;
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.&lt;o:p&gt;&lt;/o:p&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNoSpacing&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNoSpacing&quot;&gt;
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. &lt;o:p&gt;&lt;/o:p&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNoSpacing&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNoSpacing&quot;&gt;
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.&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&lt;/div&gt;
&lt;h3&gt;
Only influence matters.&lt;/h3&gt;
&lt;div class=&quot;MsoNoSpacing&quot;&gt;
&lt;br /&gt;
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. &lt;o:p&gt;&lt;/o:p&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNoSpacing&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNoSpacing&quot;&gt;
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?&lt;o:p&gt;&lt;/o:p&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNoSpacing&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNoSpacing&quot;&gt;
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.&lt;br /&gt;
&amp;nbsp; &amp;nbsp;&lt;/div&gt;
&lt;h3 style=&quot;text-align: left;&quot;&gt;
Build a team&lt;/h3&gt;
&lt;div class=&quot;MsoNoSpacing&quot;&gt;
&lt;br /&gt;
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?&lt;o:p&gt;&lt;/o:p&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNoSpacing&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNoSpacing&quot;&gt;
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.&lt;o:p&gt;&lt;/o:p&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNoSpacing&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNoSpacing&quot;&gt;
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. &lt;o:p&gt;&lt;/o:p&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNoSpacing&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNoSpacing&quot;&gt;
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.&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&lt;/div&gt;
&lt;h3 style=&quot;text-align: left;&quot;&gt;
But, what are the three pillars of evangelism?&lt;/h3&gt;
&lt;div class=&quot;MsoNormal&quot;&gt;
&lt;/div&gt;
&lt;div class=&quot;MsoNoSpacing&quot;&gt;
&lt;br /&gt;
Honestly, I forgot to get to those. Sort of chased a
rabbit there. Next time, I guess. Sorry.&lt;o:p&gt;&lt;/o:p&gt;&lt;/div&gt;
&lt;/div&gt;
</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8789713/posts/default/203386468008425427'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8789713/posts/default/203386468008425427'/><link rel='alternate' type='text/html' href='http://blog.jerrynixon.com/2018/02/the-three-pillars-of-technical.html' title='The three pillars of Technical Evangelism'/><author><name>jerrynixon</name><uri>http://www.blogger.com/profile/06978720385628364065</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-8789713.post-8840347048963440666</id><published>2018-02-03T14:41:00.002-07:00</published><updated>2018-02-03T15:52:27.698-07:00</updated><title type='text'>Custom UWP-XAML attached properties</title><content type='html'>&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;
Look, this article is for me. I keep forgetting the basics of XAML attached properties &amp;amp; some advanced syntax. If this helps you, too, great.&amp;nbsp; &lt;br /&gt;
&lt;blockquote&gt;
As the author of &lt;a href=&quot;http://aka.ms/template10&quot;&gt;&lt;span style=&quot;color: #7830b0;&quot;&gt;Template 10&lt;/span&gt;&lt;/a&gt; (the &lt;i&gt;best&lt;/i&gt; UWP framework) I keep on my UWP toes with XAML &amp;amp; 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 &lt;a href=&quot;https://msdn.microsoft.com/en-us/magazine/mt814416.aspx&quot;&gt;&lt;span style=&quot;color: #7830b0;&quot;&gt;MSDN Magazine article&lt;/span&gt;&lt;/a&gt; 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.&lt;/blockquote&gt;
&lt;h3 style=&quot;text-align: left;&quot;&gt;
Containing class&lt;/h3&gt;
The only requirement for an attached property is that its containing class derive from &lt;a href=&quot;https://docs.microsoft.com/en-us/uwp/api/Windows.UI.Xaml.DependencyObject&quot;&gt;&lt;span style=&quot;color: #7830b0;&quot;&gt;DependecyObject&lt;/span&gt;&lt;/a&gt;. The class cannot be static.&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi8_3Lhf0-bvJnbiqQJvl8COxdTTmhLiZ__y_K9wPySZBEoLhQQjr4yGGtIleyKoeLmz-jKsqnPlVvfQCkPQbVZtqqkncBof-z-sOQyJFRTgOJMq4zkGNLIEmbi-UashLId3-gp-g/s1600/2018-02-03_14_16_32+%2528App4+-+Microsoft+Visual+Studio%2529.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;84&quot; data-original-width=&quot;369&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi8_3Lhf0-bvJnbiqQJvl8COxdTTmhLiZ__y_K9wPySZBEoLhQQjr4yGGtIleyKoeLmz-jKsqnPlVvfQCkPQbVZtqqkncBof-z-sOQyJFRTgOJMq4zkGNLIEmbi-UashLId3-gp-g/s1600/2018-02-03_14_16_32+%2528App4+-+Microsoft+Visual+Studio%2529.png&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;a name=&#39;more&#39;&gt;&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;h3 style=&quot;text-align: left;&quot;&gt;
Basic property&lt;/h3&gt;
A simple property holds a strongly-typed value. Every attached property must have a default value set in &lt;a href=&quot;https://docs.microsoft.com/en-us/uwp/api/windows.ui.xaml.propertymetadata&quot;&gt;&lt;span style=&quot;color: #7830b0;&quot;&gt;PropertyMetadata&lt;/span&gt;&lt;/a&gt; during &lt;a href=&quot;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_&quot;&gt;&lt;span style=&quot;color: #7830b0;&quot;&gt;RegisterAttached&lt;/span&gt;&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiBeig5RykUjYTiwAoE5Oo-9EW70gwDrrXJVgCT7FSqpWC1NU4QFV9NCStbD6xgDPt3389_OQB_t_VgXSEI3hA5DRZjIHm6Y_D3pYX5ujG_KBmJGgsQZqL9NNY-bhhJrA1wOc3RLQ/s1600/2018-02-03_14_17_17+%2528App4+-+Microsoft+Visual+Studio%2529.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;213&quot; data-original-width=&quot;511&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiBeig5RykUjYTiwAoE5Oo-9EW70gwDrrXJVgCT7FSqpWC1NU4QFV9NCStbD6xgDPt3389_OQB_t_VgXSEI3hA5DRZjIHm6Y_D3pYX5ujG_KBmJGgsQZqL9NNY-bhhJrA1wOc3RLQ/s1600/2018-02-03_14_17_17+%2528App4+-+Microsoft+Visual+Studio%2529.png&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;h3 style=&quot;text-align: left;&quot;&gt;
Constraining to a type&lt;/h3&gt;
An attached property is, by default, available to every Dependency Object. To limit this, change the signatures of the static Get()/Set() methods.&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgCEBWkCfDzj3-FhOb-AGbncui3_HDpOy85p-P6trZWKGsguP6_BcnLVahBNxcZDzzZd_Gy3tpXuP0uyKA-6F2M1gyIWJTeQ7mqI1OqbMBbZmw1v9geK9CB7xv7MZKlKR9mia23GA/s1600/2018-02-03_14_17_43+%2528App4+-+Microsoft+Visual+Studio%2529.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;260&quot; data-original-width=&quot;536&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgCEBWkCfDzj3-FhOb-AGbncui3_HDpOy85p-P6trZWKGsguP6_BcnLVahBNxcZDzzZd_Gy3tpXuP0uyKA-6F2M1gyIWJTeQ7mqI1OqbMBbZmw1v9geK9CB7xv7MZKlKR9mia23GA/s1600/2018-02-03_14_17_43+%2528App4+-+Microsoft+Visual+Studio%2529.png&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;h3 style=&quot;text-align: left;&quot;&gt;
XAML syntax&lt;/h3&gt;
After adding a namespace, you can use XAML’s simple and complex property syntax for attached properties. Each have type-safety.&lt;br /&gt;
&lt;b&gt;&lt;/b&gt;&lt;i&gt;&lt;/i&gt;&lt;u&gt;&lt;/u&gt;&lt;sub&gt;&lt;/sub&gt;&lt;sup&gt;&lt;/sup&gt;&lt;strike&gt;&lt;/strike&gt;&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgwMpV057JJ1OcGtG4acO3_gendVm9zrDqL_H9WubbIycf2O3zCExFHZjGIAue7fCRThf77QXPPkqEwiKYXd6n5N1aEEAUvZG-w2Numk3ifE2QWdowA59O1MgKPWRPYLpqC_jUfUw/s1600/2018-02-03_14_14_14+%2528App4+-+Microsoft+Visual+Studio%2529.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;361&quot; data-original-width=&quot;474&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgwMpV057JJ1OcGtG4acO3_gendVm9zrDqL_H9WubbIycf2O3zCExFHZjGIAue7fCRThf77QXPPkqEwiKYXd6n5N1aEEAUvZG-w2Numk3ifE2QWdowA59O1MgKPWRPYLpqC_jUfUw/s1600/2018-02-03_14_14_14+%2528App4+-+Microsoft+Visual+Studio%2529.png&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;
&lt;span style=&quot;background-color: transparent; color: black; display: inline; float: none; font-family: &amp;quot;times new roman&amp;quot;; 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;&quot;&gt;Note: The approach to data binding to attached properties is identical to databinding dependency properties directly on the control. Either syntax is supported.&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;h3 style=&quot;text-align: left;&quot;&gt;
Setting in Styles&lt;/h3&gt;
It’s also possible to use style setters. The syntax is nearly the same.&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiTpTaAKo5sThMW5lbPrImdi1aAZwkO6pcjJkrRJed1LkIbAtiCCnzwtPWaa8N_EHZHQtxqsF8guW25MjnGi54q_A5bsAcVoBQXFN-eaY_hyphenhyphenlYnS-6yuJbQwbFLdPjzrqCphLm6uQ/s1600/Style.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;124&quot; data-original-width=&quot;545&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiTpTaAKo5sThMW5lbPrImdi1aAZwkO6pcjJkrRJed1LkIbAtiCCnzwtPWaa8N_EHZHQtxqsF8guW25MjnGi54q_A5bsAcVoBQXFN-eaY_hyphenhyphenlYnS-6yuJbQwbFLdPjzrqCphLm6uQ/s1600/Style.jpg&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;h3 style=&quot;text-align: left;&quot;&gt;
Handling change&lt;/h3&gt;
The most reliable approach to handling changed values is in the changed handler set in &lt;a href=&quot;https://docs.microsoft.com/en-us/uwp/api/windows.ui.xaml.propertymetadata&quot;&gt;&lt;span style=&quot;color: #7830b0;&quot;&gt;PropertyMetadata&lt;/span&gt;&lt;/a&gt;. It’s already on the UI thread.&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhGCnNha6EZayHIeDhf6zF12IXsDfLeQoYsGpTwxJwkiKNI1qYxN5aE2KwgzfiC5tmkuz0FLIf_H5CAgBWkaJVklVUBNuypnI3PZuB1ILHwAe1zBJ3ChStgUewCNLtEuuI2VOOaKg/s1600/2018-02-03_14_18_59+%2528App4+-+Microsoft+Visual+Studio%2529.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;319&quot; data-original-width=&quot;512&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhGCnNha6EZayHIeDhf6zF12IXsDfLeQoYsGpTwxJwkiKNI1qYxN5aE2KwgzfiC5tmkuz0FLIf_H5CAgBWkaJVklVUBNuypnI3PZuB1ILHwAe1zBJ3ChStgUewCNLtEuuI2VOOaKg/s1600/2018-02-03_14_18_59+%2528App4+-+Microsoft+Visual+Studio%2529.png&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;b&gt;Note&lt;/b&gt;: 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.&lt;br /&gt;
&lt;br /&gt;
&lt;h3 style=&quot;text-align: left;&quot;&gt;
Updating controls&lt;/h3&gt;
Sometimes properties are for updating controls. The constructor has no reference to the controls. Operations must execute during the Set() method.&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiNoJ3eXne6WdjwEau70Iu69CB1fi5pa2QtqGZg8wF9O2klHhIX00ZyUJ7oP_C0SG9J8fHTnyZQG8riPRU2wFsREDnqpjAWvKb6JQwSvDZDScpq9IMD0ethBy106njmyjUopGmPBQ/s1600/2018-02-03_14_20_22+%2528App4+-+Microsoft+Visual+Studio%2529.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;385&quot; data-original-width=&quot;516&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiNoJ3eXne6WdjwEau70Iu69CB1fi5pa2QtqGZg8wF9O2klHhIX00ZyUJ7oP_C0SG9J8fHTnyZQG8riPRU2wFsREDnqpjAWvKb6JQwSvDZDScpq9IMD0ethBy106njmyjUopGmPBQ/s1600/2018-02-03_14_20_22+%2528App4+-+Microsoft+Visual+Studio%2529.png&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;h3 style=&quot;text-align: left;&quot;&gt;
Setting values in code-behind&lt;/h3&gt;
Attached properties, like dependency properties are only a property bag, not real properties. As a result, they are stored as [object], not strong-types.&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhSPtuOH08KsNcK7x3jq3kMGeI_CmUVaSkkulkdkbe8hiI6uc1mUEU8G47SbwC4r5vCv6h4_OZ85vScxLgsHDqXkD6IuHf91DMPYirnwiG4I01klzZrrgueUe9AKNK2nx8U3C9mxg/s1600/2018-02-03_14_21_12+%2528App4+-+Microsoft+Visual+Studio%2529.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;52&quot; data-original-width=&quot;401&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhSPtuOH08KsNcK7x3jq3kMGeI_CmUVaSkkulkdkbe8hiI6uc1mUEU8G47SbwC4r5vCv6h4_OZ85vScxLgsHDqXkD6IuHf91DMPYirnwiG4I01klzZrrgueUe9AKNK2nx8U3C9mxg/s1600/2018-02-03_14_21_12+%2528App4+-+Microsoft+Visual+Studio%2529.png&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;h3 style=&quot;text-align: left;&quot;&gt;
Reading values in code-behind&lt;/h3&gt;
Reading the value of attached properties is the same as reading dependency properties. And like dependency properties, you need to cast the value.&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjWtBv9spyy6VZJ8TFHh9TZfm5WVPQlqLSSj5dXGTl8Ey6DSvcEC-fhcqUpZH6x8zVZy3LygykfPEFHmR-FF-CvgLnaES_mr_WV-TOM9MnOUxpec69isOXB6HObg8lxAsH5gla5rw/s1600/2018-02-03_14_21_46+%2528App4+-+Microsoft+Visual+Studio%2529.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;86&quot; data-original-width=&quot;471&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjWtBv9spyy6VZJ8TFHh9TZfm5WVPQlqLSSj5dXGTl8Ey6DSvcEC-fhcqUpZH6x8zVZy3LygykfPEFHmR-FF-CvgLnaES_mr_WV-TOM9MnOUxpec69isOXB6HObg8lxAsH5gla5rw/s1600/2018-02-03_14_21_46+%2528App4+-+Microsoft+Visual+Studio%2529.png&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;/div&gt;
&lt;br /&gt;
&lt;h3 style=&quot;text-align: left;&quot;&gt;
Enumerable attached properties&lt;/h3&gt;
Sometimes a scalar value isn’t enough, you want to store an IEnumerable&lt;t&gt;. Attached properties can do this natively: use &lt;a href=&quot;https://msdn.microsoft.com/en-us/library/6sh2ey19(v=vs.110).aspx&quot;&gt;&lt;span style=&quot;color: #7830b0;&quot;&gt;List&lt;t&gt;&lt;/t&gt;&lt;/span&gt;&lt;/a&gt;.&lt;/t&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgQzhPvH2k9DPFReK8Y6lYT_DSVhLk22m61c666v16ed5AcvcvCHqdtp-Fge67iVjsFJ1qtmZJNGz5cAlNa_7JawqigW6Z8K9V6vrpbN_zI_S3GLraibQmCgdLxBI01A4OvZDKSyw/s1600/2018-02-03_14_22_47+%2528App4+-+Microsoft+Visual+Studio%2529.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;320&quot; data-original-width=&quot;459&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgQzhPvH2k9DPFReK8Y6lYT_DSVhLk22m61c666v16ed5AcvcvCHqdtp-Fge67iVjsFJ1qtmZJNGz5cAlNa_7JawqigW6Z8K9V6vrpbN_zI_S3GLraibQmCgdLxBI01A4OvZDKSyw/s1600/2018-02-03_14_22_47+%2528App4+-+Microsoft+Visual+Studio%2529.png&quot; /&gt;&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Important&lt;/b&gt;: 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.&lt;br /&gt;
&lt;br /&gt;
&lt;h3 style=&quot;text-align: left;&quot;&gt;
XAML Syntax&lt;/h3&gt;
It’s simple to add items to an attached property of IEnumerable&lt;t&gt;. The XAML platform understands how to Add() for you, so there’s nothing special.&lt;/t&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhfULE0xms9lwiyq5K-Stwspk3HMUmsAjho78brsJ7qfbud2jIIP2jO6XFgyQBCQMcR526sTqqnScyhAaolRs_JrWYDGhdgKLi5M8vpe7zk-qUXdsO6HBMf2AcuAMFELvZpUEwTkA/s1600/2018-02-03_14_23_21+%2528App4+-+Microsoft+Visual+Studio%2529.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;117&quot; data-original-width=&quot;296&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhfULE0xms9lwiyq5K-Stwspk3HMUmsAjho78brsJ7qfbud2jIIP2jO6XFgyQBCQMcR526sTqqnScyhAaolRs_JrWYDGhdgKLi5M8vpe7zk-qUXdsO6HBMf2AcuAMFELvZpUEwTkA/s1600/2018-02-03_14_23_21+%2528App4+-+Microsoft+Visual+Studio%2529.png&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
Note: the simple XAML syntax is not supported here. If you are binding to it, you skip the Get() changes and bind a List&lt;t&gt;, not its items. &lt;/t&gt;&lt;br /&gt;
&lt;h3 style=&quot;text-align: left;&quot;&gt;
Handling list changes&lt;/h3&gt;
A List&lt;t&gt; does not raise events when it is changed, and the attached property changed event will never raise. You need an &lt;a href=&quot;https://docs.microsoft.com/en-us/dotnet/api/system.collections.objectmodel.observablecollection-1?view=netframework-4.7.1&quot;&gt;&lt;span style=&quot;color: #7830b0;&quot;&gt;ObservableColelction&lt;t&gt;&lt;/t&gt;&lt;/span&gt;&lt;/a&gt;.&lt;/t&gt;&lt;br /&gt;
&lt;br /&gt;
That’s it.&lt;br /&gt;
&lt;h3 style=&quot;text-align: left;&quot;&gt;
Question &amp;amp; Answer&lt;/h3&gt;
&lt;b&gt;What about that literal string?&lt;/b&gt;&lt;br /&gt;
&lt;b&gt;&lt;br /&gt;&lt;/b&gt;
Unlike dependency properties, attached properties have no real object or member for to use &lt;a href=&quot;https://docs.microsoft.com/en-us/dotnet/csharp/language-reference/keywords/nameof&quot;&gt;&lt;span style=&quot;color: #7830b0;&quot;&gt;nameof&lt;/span&gt;&lt;/a&gt;(). This means that literal string is required.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;What do you call the control using the attached property?&lt;/b&gt;&lt;br /&gt;
&lt;b&gt;&lt;br /&gt;&lt;/b&gt;
According to the Microsoft Docs, that’s referred to as the “owning type”. See here: &lt;a href=&quot;https://docs.microsoft.com/en-us/windows/uwp/xaml-platform/attached-properties-overview&quot; title=&quot;https://docs.microsoft.com/en-us/windows/uwp/xaml-platform/attached-properties-overview&quot;&gt;&lt;span style=&quot;color: #7830b0;&quot;&gt;https://docs.microsoft.com/&lt;/span&gt;&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Can I iterate through all the owning types?&lt;/b&gt;&lt;br /&gt;
&lt;b&gt;&lt;br /&gt;&lt;/b&gt;
If on each Set() you store a control reverence in a static List&lt;object&gt; you can, but you have to wait for Set() to be called. Otherwise, no.&lt;/object&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Can I put all my attached properties in a remote assembly?&lt;/b&gt;&lt;br /&gt;
&lt;b&gt;&lt;br /&gt;&lt;/b&gt;
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.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;I assume the value is disposed when the owning type is disposed?&lt;/b&gt;&lt;br /&gt;
&lt;b&gt;&lt;br /&gt;&lt;/b&gt;
That’s what I assume. Yeah.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Are attached properties inherited like dependency properties?&lt;/b&gt;&lt;br /&gt;
&lt;b&gt;&lt;br /&gt;&lt;/b&gt;
Nope. That&#39;s one big difference.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;What about the &quot;Cannot add instance of type ObservableCollection&quot;&amp;nbsp; exception?&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
That means you aren&#39;t constructing the list in the Set() method, dummy.&lt;br /&gt;
&lt;br /&gt;
// Best of luck.&lt;/div&gt;
</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8789713/posts/default/8840347048963440666'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8789713/posts/default/8840347048963440666'/><link rel='alternate' type='text/html' href='http://blog.jerrynixon.com/2018/02/look-this-article-is-for-me.html' title='Custom UWP-XAML attached properties'/><author><name>jerrynixon</name><uri>http://www.blogger.com/profile/06978720385628364065</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi8_3Lhf0-bvJnbiqQJvl8COxdTTmhLiZ__y_K9wPySZBEoLhQQjr4yGGtIleyKoeLmz-jKsqnPlVvfQCkPQbVZtqqkncBof-z-sOQyJFRTgOJMq4zkGNLIEmbi-UashLId3-gp-g/s72-c/2018-02-03_14_16_32+%2528App4+-+Microsoft+Visual+Studio%2529.png" height="72" width="72"/></entry><entry><id>tag:blogger.com,1999:blog-8789713.post-4080153686635269569</id><published>2017-09-21T11:41:00.001-06:00</published><updated>2017-09-21T11:49:29.168-06:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Personal"/><title type='text'>A personal review of some Star Trek swag I have lying around.</title><content type='html'>&lt;p&gt;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. &lt;/p&gt;&lt;p&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiYQbrt7QrIrZ5L5QaFvGW4B9iG6QAZbyMAN_7gWlZiX25t_ifPRNcFD6MyxVIdKLaE6eeXjirKXm9qtIPyms8rLaNNAXHoOBw-0R6pdle2Yg-x-_4ioRieeUaPk3fRH-7Ney4ppA/s1600-h/image%255B63%255D&quot;&gt;&lt;img width=&quot;550&quot; height=&quot;275&quot; title=&quot;image&quot; style=&quot;display: inline;&quot; alt=&quot;image&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh1uJrw6z2bD_i09Nuffc3g76ccua6qXX6NEzv2mNm4OHogIj3D87TrcdL2y2tQqTA_4rIbP-pg-SVpNe-JqyTlwnFSeVfQOUf1BDQMyD1uNo5BA_sJK2XNS_JKKFqiqNgvrOszjw/?imgmax=800&quot;&gt;&lt;/a&gt;&lt;/p&gt;&lt;h3&gt;&lt;/h3&gt;
&lt;a name=&#39;more&#39;&gt;&lt;/a&gt;
&lt;h3&gt;The Star Trek Enterprise Pizza Cutter&lt;/h3&gt;&lt;p&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjIJ9gP9ZRJE3h0gSFuFCb7McZl2SLuo4a8sXRI1Lfob5QlWYG9p_LisnGlQ6sNMD1W77HB6oQ74HAXlDivt2Y_B7aHUL-FHtTNhptiJ-4qBAW2txSByJO1tnNbtjtt26vIezxonA/s1600-h/image%255B2%255D&quot;&gt;&lt;img width=&quot;166&quot; height=&quot;166&quot; title=&quot;image&quot; align=&quot;right&quot; style=&quot;float: right; display: inline; background-image: none;&quot; alt=&quot;image&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgZcvMZXdvQDK0nr4af1cYOH5louIl4pwyuXpruX9N3zZu_DYm2Wz7F_wrjoYpgDMbWqdu6eMiZO_XspbaQQYays9MVZO2qcdRrphD0nRoQYivltVqgW3t4esqksvu-Yu-NdzPHvQ/?imgmax=800&quot; border=&quot;0&quot;&gt;&lt;/a&gt;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. &lt;/p&gt;&lt;h3&gt;The Star Trek Cast Paying Cards&lt;/h3&gt;&lt;p&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgSEqqs6xleRIe7QrxwUkCsIzHWVg9tyayRPEAuPZIiYSkWPYNo9czvWgvVGqf1slGk5iTGTuMyhTc7X4KzTAoLXnlHK_r8Og038B1WGld2AIrqQ0iNjb_mybm_CrHU3TNbBNtMww/s1600-h/image%255B5%255D&quot;&gt;&lt;img width=&quot;166&quot; height=&quot;166&quot; title=&quot;image&quot; align=&quot;right&quot; style=&quot;float: right; display: inline; background-image: none;&quot; alt=&quot;image&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjI4f3m82QQ105uWQjmOqTHR8xI4k2_TPprTzmuGkvq-wVgO9wpffdB9oarm5dQcOtpFm6JTq9fVb39-U6tUYocwQllzNv4ffax29ZXhT7oDwRH8KwTk3Euc1HCl8h6i-ffm2txog/?imgmax=800&quot; border=&quot;0&quot;&gt;&lt;/a&gt;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. &lt;/p&gt;&lt;h3&gt;The Star Trek Original Commit Blanket&lt;/h3&gt;&lt;p&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjcdpeq3riYBxZG5YktABRAZ49NCGJTP9AzrdC72Cv1LgTdsejNYGUSadQAmY3L63d3gxCrr1T15QQ9fjRp8mnY6MSxCBFSkspzUlH9RSQrKoFepUuLtNpzcpgeG7ItJmI02ggPTA/s1600-h/image%255B8%255D&quot;&gt;&lt;img width=&quot;166&quot; height=&quot;166&quot; title=&quot;image&quot; align=&quot;right&quot; style=&quot;float: right; display: inline; background-image: none;&quot; alt=&quot;image&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgtAYgePzffVagqJdMLgfKQ8gpkCRFdZr5klCf8vedSDPUdBJ3dd7UEKMJBvx74PzXXe08wCgoi73Om3cJ7zonm2-X29LpCWpNwmWcsUCeActqJJU6K5PjVUGMFCzvk2hWBpP9oaQ/?imgmax=800&quot; border=&quot;0&quot;&gt;&lt;/a&gt;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. &lt;/p&gt;&lt;h3&gt;Star Trek Black Command T-Shirt&lt;/h3&gt;&lt;p&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiigqTh8cHVhPR3sebggdD0IRS8kiwFYhWDWtNc4lpWt6TEdcttbFQ7aGVMDJ3BpkVNmQKm24R8J-s-FMZzweXTlCV429_4Lr4b1BM7Z5IcMivxlmnGMrrbMOMq5qR9gebTV0H8Ag/s1600-h/image%255B14%255D&quot;&gt;&lt;img width=&quot;166&quot; height=&quot;166&quot; title=&quot;image&quot; align=&quot;right&quot; style=&quot;float: right; display: inline; background-image: none;&quot; alt=&quot;image&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhC4Y8LG6o8Vikp-UhrylB-DdMpzDBmbnQAuBd9-ErxiaL6LMdyMyx0H9pdi1mlxLAUMPk1gsaQInVRSkyrf8sCGEpMFxuHS4KPrVkEGoMsExi_w5dccm90OVFc4aF8dFnl-tocLw/?imgmax=800&quot; border=&quot;0&quot;&gt;&lt;/a&gt;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. &lt;/p&gt;&lt;h3&gt;Spock Crew Socks with Ears&lt;/h3&gt;&lt;p&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEitY9tpSvuttEtpR4mCLUYTrLF5Vve__IjOOWkbs8TDhJNi4cPpObA9dt1ctjV4EtNTGxswAFNopk5UrXyjZLKApDrKwj1OhuTitLTZAvkJars8DrcEd_H0nvo5z1ahdyAqn-xfCg/s1600-h/image%255B17%255D&quot;&gt;&lt;img width=&quot;166&quot; height=&quot;166&quot; title=&quot;image&quot; align=&quot;right&quot; style=&quot;float: right; display: inline; background-image: none;&quot; alt=&quot;image&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhnlR1yf_EZxvc6OG4npYxeuK5xz3St7FKyh0p2ynCPeQCBBgOVR-HMmu0QurLhuDPOPRIowKwyHYiFA9FI911t3qNtlbJ1fEVXscQS_f1QoSxCWa7Ql4Fg6VyujigIznezTdK_7g/?imgmax=800&quot; border=&quot;0&quot;&gt;&lt;/a&gt;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.&lt;/p&gt;&lt;h3&gt;United Federation of Planets Cuff Links&lt;/h3&gt;&lt;p&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhcmskSxJBCzvf1WW_G0i2FOMZ6nzguq4OJreb3f5N_zueKb5Z9jyKHeQz1y8PxM3OJP46zF-cIPr_26YIWu32X4Hxw7YHj4AvnTcDyeskybgEaFRKFbNIC_lOIh1wxq6vDVn9oVg/s1600-h/image%255B20%255D&quot;&gt;&lt;img width=&quot;166&quot; height=&quot;166&quot; title=&quot;image&quot; align=&quot;right&quot; style=&quot;float: right; display: inline; background-image: none;&quot; alt=&quot;image&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgw0McHvftKLF2TK8Yx5UTF2MoQDkiCG-v6CvTohoYF_ntVXZ0pCd6Mc1N8mSBhUY81L0KGoOhwwxFvchDMoInwUn3oOHU7mQLB6JPf0l2MnrT4hV7kzFfDRjGPwYgvEEazpFRVyA/?imgmax=800&quot; border=&quot;0&quot;&gt;&lt;/a&gt;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. &lt;/p&gt;&lt;h3&gt;Star Trek Comics, Seatbelt Belt&lt;/h3&gt;&lt;p&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjMHMqyy2P6nwdhCBZziJNFclZUpYwLKGwXWM2MApYB-kWOHB-u-2gJrBm9G-F0J_eh13CJLfQ28AxrmZ1ssO3JQcV9vyIRuyGX2LyUJvS4Gp_AA6AJ8i5IMi_zOzOmoIcfS-EOjw/s1600-h/image%255B26%255D&quot;&gt;&lt;img width=&quot;166&quot; height=&quot;67&quot; title=&quot;image&quot; align=&quot;right&quot; style=&quot;margin: 20px 0px; float: right; display: inline; background-image: none;&quot; alt=&quot;image&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEijPPz9vNcQUpQwf84MULCu0w2IPoLFXq5kvlbkPlH9Zb75tW2v6R3uYjnPP9vch0LrvZJTSTEZv2AbznPRTBSie_dCFMTNAqg_0eUVrscQgg8buU-gV-uHYHUQBvKqQH65HcMWSA/?imgmax=800&quot; border=&quot;0&quot;&gt;&lt;/a&gt;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.&lt;/p&gt;&lt;h3&gt;Star Trek Uno&lt;/h3&gt;&lt;p&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhwYsSb53RyGbKAY1j1IwNdH5GbnpHpit4VxBFc2A_sAKEntg-vBzbAtsZ56Vh1V0Y5MPsUc5RblqTFVBQMvlX-ZxMXRcCSgUdqw6WdmGxMqK27Gx9Qjvfgg4-QrhHFcfEu6OcvZQ/s1600-h/image%255B57%255D&quot;&gt;&lt;img width=&quot;145&quot; height=&quot;166&quot; title=&quot;image&quot; align=&quot;right&quot; style=&quot;float: right; display: inline;&quot; alt=&quot;image&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh8yL6Fquzst5kP3a2bvy8EPLb1P_pUvYWps2TE4BjIssQTwvgmAADwIPONRaxJU8PsLqgmc7-7GKihwwmAtT1FDnx0uip9eL4iiNLhoUVRR-n1Hrp2RrSv_9V7E6SpQcj7T8yV2w/?imgmax=800&quot;&gt;&lt;/a&gt;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. &lt;/p&gt;&lt;h3&gt;The Star Trek Grill Set&lt;/h3&gt;&lt;p&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj-JyHpMrMMBhhG5MbwLaQW8hXrhzBHmGIjsEnNGrFeISueK1BHmS-hhZH7ab-dl5QskyKJEIttRLUgTzuZhMXOnoENXUphgzWGkX-6Ko38G2OKzxinrhr4OTwOnnMogOfGYtxR7A/s1600-h/image%255B29%255D&quot;&gt;&lt;img width=&quot;166&quot; height=&quot;166&quot; title=&quot;image&quot; align=&quot;right&quot; style=&quot;float: right; display: inline; background-image: none;&quot; alt=&quot;image&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg-NWptlksBdPdXC44gIGvmkfbvvoG-I0sjx0vMnJrVxqSHCdqxS__07rYLaFOGEog7LVc6o9Ke-6mqgTBKFNAWT7Zuz7YQM-GpgRs3CxnalDJpxX9HI9NYbmGs36n1fVhYjM4dIA/?imgmax=800&quot; border=&quot;0&quot;&gt;&lt;/a&gt;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.&lt;/p&gt;&lt;h3&gt;Captain Kirk Grilling Apron&lt;/h3&gt;&lt;p&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg4BbxO4B3XyrHT8jzhoFg1KU2r3ysXOn-UZrlGO80f53cF2fzkwkGRRjU4dLPCLniCH4DZTDBPC2-8xE5YNSxb8tl-4GFH577sQiK1wFYDigkqdDiH6nHbsCYJPRE0hvZUrGb_Bw/s1600-h/image%255B32%255D&quot;&gt;&lt;img width=&quot;166&quot; height=&quot;166&quot; title=&quot;image&quot; align=&quot;right&quot; style=&quot;float: right; display: inline; background-image: none;&quot; alt=&quot;image&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh7s7bES1hSfqPul3pBxqE4fg_cBbAksHmc_KPunA3-9mJP6iCrYqm_9rM5uWq0TPPGsANPi5IY80f1A7JWi7y6PX0Co-EhXHGarmjPoWishAnYU2VGompC1F1d856sOXyyNKi8ew/?imgmax=800&quot; border=&quot;0&quot;&gt;&lt;/a&gt;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. &lt;/p&gt;&lt;h3&gt;Star Trek Electric Door Chime&lt;/h3&gt;&lt;p&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhO7auJH498w7SFLsxGDR1uttQfd_csYfmyikymNq5ml6ivd9uF-fhxqpjym9WGwrb4SmFs_DuTqYxn_3BOVRxi5T_H1ZQgEYnggjQQm0kJvp5n1ow4UxhKZPqwpyV6_v9aSXejPQ/s1600-h/image%255B40%255D&quot;&gt;&lt;img width=&quot;166&quot; height=&quot;166&quot; title=&quot;image&quot; align=&quot;right&quot; style=&quot;float: right; display: inline;&quot; alt=&quot;image&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEivYTUPIgQ0Br1W74wgs7bOGwQ8xZdr_1rAyLYanxlcFcNQ2J5TC19UkeTmVF6rpfnRm8kfgsbNGPoyrk-9rFXXzEoE3L1nvf_J0gIAFz_ZrLM403wtDVpY4GBXnqJCj621JdnB9Q/?imgmax=800&quot;&gt;&lt;/a&gt;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.&lt;/p&gt;&lt;h3&gt;Tea Earl Grey Hot Mug&lt;/h3&gt;&lt;p&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjTRyzspntxVZGdkIgyJd-U6f8lDgs09qVfYgI0xwBfgIcS2fX3zF86vDsAeZe4KVvz1m9-nZLwbrrcrt2zEP9OAcGts5comODtE7OwzvA2JD2RvEgO46txn1ic-0t0WtwNZrfICw/s1600-h/image%255B66%255D&quot;&gt;&lt;img width=&quot;166&quot; height=&quot;166&quot; title=&quot;image&quot; align=&quot;right&quot; style=&quot;float: right; display: inline; background-image: none;&quot; alt=&quot;image&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgdaj1nrPxfhZgIUxxAmepI4Snm2eBFJ4yVPvW1klvxxN2ChE8r_FVZQ3ivVOrHg2RNMlHSlFRL1-ubw_zAAHPPhICmdLbTdgwq1XlAk-5W-Cumz1Ayul1FJT_KydT9mhle1Y4Suw/?imgmax=800&quot; border=&quot;0&quot;&gt;&lt;/a&gt;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.&lt;/p&gt;&lt;h3&gt;TOS Uniform (Science) Bathrobe&lt;/h3&gt;&lt;p&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgwZpSAPBRTmuJufEwcmMlB3Xg0SEsLMJiKYzd0cPZxWnQgtsLIaXJrqliOmlVKtGPDOXSngu4SlwoEvU4KnaCepp0nx6Z0qhiod5hMUPmkUQFcpEonKdI2Yv5Odldcqzc2dZ24zg/s1600-h/image%255B46%255D&quot;&gt;&lt;img width=&quot;166&quot; height=&quot;166&quot; title=&quot;image&quot; align=&quot;right&quot; style=&quot;float: right; display: inline; background-image: none;&quot; alt=&quot;image&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg6TKgmh_yJXSBKIT3cTYKrf99RJUEh4w3WGRK4QyNUmCFa3bubcbsYKIz5ctctI0jfRGvBuX_CQaJOCBiegWTW1_0mkWlTLI_BpNYqgsInqPEZDWHtsgHTbS4Jp4fWDKPnqfoMsg/?imgmax=800&quot; border=&quot;0&quot;&gt;&lt;/a&gt;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.&lt;/p&gt;&lt;h3&gt;Star Trek Catan&lt;/h3&gt;&lt;p&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjghIaIT3DQrvsRXrD2KADBkLYqzYCclqLXSFzA_hp4qILOYSua7XHyY2gckX0uVzq32DRRuvhxrMALRswT6FMCHxq_8cwYOrK1hLbdD0sWahAtVK8ljUCIaq1KG74Ee5pnCLrg7Q/s1600-h/image%255B53%255D&quot;&gt;&lt;img width=&quot;166&quot; height=&quot;166&quot; title=&quot;image&quot; align=&quot;right&quot; style=&quot;float: right; display: inline;&quot; alt=&quot;image&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh5Xf4xC1hJwCKYlklF0YP7D1t2C0SsbcUxj7A_KxiYl3WELBK27wvev507e6xioj9Fqq56_6kuJuVTinyrHbqhXLzzo_U79RSSf2htsNklj6o_deDRj-7TTzNOKk5JhYXam4cbbA/?imgmax=800&quot;&gt;&lt;/a&gt;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.&lt;/p&gt;&lt;h3&gt;Conclusion&lt;/h3&gt;&lt;p&gt;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 &lt;em&gt;present&lt;/em&gt;, and it &lt;em&gt;only &lt;/em&gt;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. &lt;/p&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8789713/posts/default/4080153686635269569'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8789713/posts/default/4080153686635269569'/><link rel='alternate' type='text/html' href='http://blog.jerrynixon.com/2017/09/a-personal-review-of-some-star-trek.html' title='A personal review of some Star Trek swag I have lying around.'/><author><name>jerrynixon</name><uri>http://www.blogger.com/profile/06978720385628364065</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh1uJrw6z2bD_i09Nuffc3g76ccua6qXX6NEzv2mNm4OHogIj3D87TrcdL2y2tQqTA_4rIbP-pg-SVpNe-JqyTlwnFSeVfQOUf1BDQMyD1uNo5BA_sJK2XNS_JKKFqiqNgvrOszjw/s72-c?imgmax=800" height="72" width="72"/></entry><entry><id>tag:blogger.com,1999:blog-8789713.post-2649221757366904538</id><published>2017-08-29T16:17:00.001-06:00</published><updated>2017-08-30T11:24:03.205-06:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Technique"/><category scheme="http://www.blogger.com/atom/ns#" term="Win10"/><category scheme="http://www.blogger.com/atom/ns#" term="XAML"/><title type='text'>Cardinal XAML: a reflection</title><content type='html'>&lt;p&gt;In 2014, at the VS Live in Chicago, &lt;a href=&quot;http://www.bendewey.com/index.php/about&quot;&gt;Ben Dewey&lt;/a&gt;, a Microsoft MVP for Windows Client at the time, presented the session: &lt;a href=&quot;https://onedrive.live.com/view.aspx?cid=473151cb8afe66ba&amp;amp;id=documents&amp;amp;resid=473151CB8AFE66BA%2114527&amp;amp;app=PowerPoint&amp;amp;authkey=ABGP7OkqB70gNHQ&amp;amp;&amp;amp;wdSlideId=258&amp;amp;wdModeSwitchTime=1504024711052&quot;&gt;XAML Anti-patterns&lt;/a&gt;. 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. &lt;/p&gt;&lt;p&gt;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.&lt;/p&gt;&lt;p&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgU_h2JkNhAGAK3nXx-Uw2La1bHzzIQ8SzoL7SbfYlduvnc-_Eeahtgj5nt4RTadFBOOEpnJg6WCHx-2eD2rkFkAecaKkFCCGSXF7Ms8SELKHO68o_k91Swa29WA2hYkQfSygv8Dw/s1600-h/image%255B10%255D&quot;&gt;&lt;img width=&quot;542&quot; height=&quot;309&quot; title=&quot;image&quot; style=&quot;margin: 0px; display: inline; background-image: none;&quot; alt=&quot;image&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiN8Lq22BClpfpQxVLjliHrbfTTPM6fv2YW6m2P7nCT6D1MaIV-10_sPeGgJSQ2MgnTcMbEeU4qFj2EAj0oZihRiV3JJS5dtUShYYy3bb_HwI-_e0YG7Pjt7r31kNgnUQ4infvSlA/?imgmax=800&quot; border=&quot;0&quot;&gt;&lt;/a&gt;&lt;/p&gt;

&lt;a name=&#39;more&#39;&gt;&lt;/a&gt;

&lt;p&gt;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. &lt;/p&gt;&lt;p&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgR_ex8VYcbj6wMIz7gHGtAn54YVEylB7MPVRaCEpKX6WehCC43L8EluGzjJ-VJ6eaRBgd7dNTwN7QpnsmZmlCz-caC0B-hpSL4FwKpUnWXvBH1s6fexNrf9hN10yAxJ_j5X985ow/s1600-h/image%255B13%255D&quot;&gt;&lt;img width=&quot;551&quot; height=&quot;309&quot; title=&quot;image&quot; style=&quot;margin: 0px; display: inline; background-image: none;&quot; alt=&quot;image&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEik1iJP8kVhC-HciLqLe0EK1vpSKbYg8V4Xkw_qZA7HE057bHhIAYAMqXRcQ1wkbR-ruJiPxduroGxqd_hXFdZo9FAx17XQvtk9ERMNxu9cwhL9rF_Dg1-q44XUptIlrYCwyBhr3w/?imgmax=800&quot; border=&quot;0&quot;&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;Let’s begin with my 10 commandments, evaluate their value today, then do the same for the other authors so long ago. &lt;/p&gt;&lt;h2&gt;1. Software delivery is job one&lt;/h2&gt;&lt;h4&gt;Still valid? yes, and it always will be&lt;/h4&gt;&lt;p&gt;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. &lt;/p&gt;&lt;h2&gt;2. Reconsider MVVM altogether&lt;/h2&gt;&lt;h4&gt;Still valid? yes&lt;/h4&gt;&lt;p&gt;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. &lt;/p&gt;&lt;h2&gt;3. Choose MVVM for your own reasons&lt;/h2&gt;&lt;h4&gt;Still valid? yes&lt;/h4&gt;&lt;p&gt;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.&lt;/p&gt;&lt;h2&gt;4. Don’t build the model for the UI&lt;/h2&gt;&lt;h4&gt;Still valid? yes&lt;/h4&gt;&lt;p&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgrfd-jeYqKsj5PzBOBfD6coHMUs3sPCjLUByDF9WtPAsREEVvvtncQR2ZxkMQBlRfdZo2zSW-uGblxMEi3yqaGKW4hvr0r_luTjYNFbZhEeplWyBvV3j4wImz9jurjEDuZ8DaR5g/s1600-h/image%255B55%255D&quot;&gt;&lt;img width=&quot;550&quot; height=&quot;166&quot; title=&quot;image&quot; style=&quot;display: inline; background-image: none;&quot; alt=&quot;image&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh_uoPhiFqZaspPez3tFQoyCkf0AGsXDlqtiElPB4seo7KVdKjXzIZ9Nybl4r8hIPn1EMHSYQkDDbsbYgqTKH8vsWaNxn_EHgOL85B0BPVNY-KLS5-cHH_cgJxk2tJd8QzKZmzx0A/?imgmax=800&quot; border=&quot;0&quot;&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;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 &lt;a href=&quot;https://stackoverflow.com/questions/45485665/mvvm-uwp-template-10-independency-of-model-from-view-technology/45551512#45551512&quot;&gt;learned&lt;/a&gt;. 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.&lt;/p&gt;&lt;h2&gt;5. Reference only in one direction&lt;/h2&gt;&lt;h4&gt;Still valid? yes&lt;/h4&gt;&lt;p&gt;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.&lt;/p&gt;&lt;h2&gt;6. Have only one view for one view-model&lt;/h2&gt;&lt;h4&gt;Still valid? yes&lt;/h4&gt;&lt;p&gt;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. &lt;/p&gt;&lt;h2&gt;7. Use binding&lt;/h2&gt;&lt;h4&gt;Still valid? yes&lt;/h4&gt;&lt;p&gt;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.&lt;/p&gt;&lt;p&gt;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.&lt;/p&gt;&lt;p&gt;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).&lt;/p&gt;&lt;h2&gt;8. User Experience trumps Developer Experience&lt;/h2&gt;&lt;h4&gt;Still valid? yes&lt;/h4&gt;&lt;p&gt;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. &lt;/p&gt;&lt;p&gt;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.&lt;/p&gt;&lt;h2&gt;9. Discriminate against code-behind&lt;/h2&gt;&lt;h4&gt;Still valid? yes&lt;/h4&gt;&lt;p&gt;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. &lt;/p&gt;&lt;h2&gt;10. There are no commandments&lt;/h2&gt;&lt;h4&gt;Still valid? yes&lt;/h4&gt;&lt;p&gt;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. &lt;/p&gt;&lt;p&gt;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. &lt;/p&gt;&lt;h1&gt;Ben’s deadly sins&lt;/h1&gt;&lt;p&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjVBF24ek4oEGBj1TNKlnvgyasuejHaVU6BRBc0KZfLFMHirbI-qCRHQIERhRMUt4k3tre3-i5fbupu_AzaSq3y2kAJiGZblHwFiTlcz_c9Q8DQi_dfVRqLm6se7uELzq1Ue1DUrQ/s1600-h/image%255B7%255D&quot;&gt;&lt;img width=&quot;545&quot; height=&quot;309&quot; title=&quot;image&quot; style=&quot;display: inline; background-image: none;&quot; alt=&quot;image&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEher8-0ZhVNF2FNpuSlyHu7cmf_jnA7FfleZ1Pjpq07J6-l_V_z3lxrzRKLf-B8xvAMyfGvJyBh03dKqeiUh59qOIt29hO_aMymkGFRKpHl1eykhn3CKuMwt2cDu9_RmRu1z-y4dQ/?imgmax=800&quot; border=&quot;0&quot;&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;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.&lt;/p&gt;&lt;h2&gt;1. Thou shalt not use inline styling&lt;/h2&gt;&lt;h4&gt;Still valid? was it ever?&lt;/h4&gt;&lt;p&gt;If you have code like this: &lt;font face=&quot;Courier New&quot;&gt;&amp;lt;TextBox FontSize=&quot;16&quot; /&amp;gt;&lt;/font&gt; then he is recommending that you instead create either &lt;font face=&quot;Courier New&quot;&gt;&amp;lt;TextBox &lt;font style=&quot;background-color: rgb(255, 255, 0);&quot;&gt;FontSize=&quot;{StaticResource FontSize}&quot;&lt;/font&gt; /&amp;gt;&lt;/font&gt; or &lt;font face=&quot;Courier New&quot;&gt;&amp;lt;TextBox &lt;font style=&quot;background-color: rgb(255, 255, 0);&quot;&gt;Style=&quot;{StaticResource Size16TextBox}&quot;&lt;/font&gt; /&amp;gt;&lt;/font&gt;. 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.&lt;/p&gt;&lt;p&gt;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. &lt;/p&gt;&lt;p&gt;&lt;em&gt;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.&lt;/em&gt; &lt;/p&gt;&lt;h2&gt;2. Thou shalt not use hardcode colors&lt;/h2&gt;&lt;h4&gt;Still valid? yes&lt;/h4&gt;&lt;p&gt;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. &lt;/p&gt;&lt;h2&gt;3. Thou shalt not use bitmap icons&lt;/h2&gt;&lt;h4&gt;Still valid? amen&lt;/h4&gt;&lt;p&gt;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. &lt;/p&gt;&lt;p&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjPcgF_LllK-u35h5gAq8_8k8BY37Ujgp3hiFfR9jLGuzOI5-CMUAU42d2CBj3QQCymGYxn-M4rzhKO4-GJ5Zf7EPJ1LK-yZ0Kz9uenuYd1Vg6WbEjW4_-ynh047CJukB-EDCchkg/s1600-h/image%255B16%255D&quot;&gt;&lt;img width=&quot;552&quot; height=&quot;236&quot; title=&quot;image&quot; style=&quot;margin: 0px; display: inline; background-image: none;&quot; alt=&quot;image&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjfxxJYGrw-92lV1Ez-MiBA_oUDIv6pFZnFmioWN5tyfIziHapQ-bpSQBz9PgJcOeF_zQ2U-pIyJCpfm-aHX2Lea0d85RwetepQn3B-_i00uLBcnJgPKvGaz68ewTPLqwsuc3JxMQ/?imgmax=800&quot; border=&quot;0&quot;&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;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. &lt;/p&gt;&lt;p&gt;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. &lt;/p&gt;&lt;p&gt;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 &lt;font face=&quot;Courier New&quot;&gt;&amp;lt;Image/&amp;gt;&lt;/font&gt; tag to a BitmapImage with a DecodePixelType property.&lt;/p&gt;&lt;blockquote&gt;&lt;p&gt;&lt;a href=&quot;https://docs.microsoft.com/en-us/uwp/api/windows.ui.xaml.media.imaging.bitmapimage#Properties_&quot;&gt;MSDN&lt;/a&gt;: &lt;a href=&quot;https://docs.microsoft.com/en-us/uwp/api/windows.ui.xaml.media.imaging.bitmapimage#Windows_UI_Xaml_Media_Imaging_BitmapImage_DecodePixelType&quot;&gt;DecodePixelType&lt;/a&gt; can be set to &lt;strong&gt;Logical&lt;/strong&gt; or &lt;strong&gt;Physical&lt;/strong&gt;. The default value is &lt;strong&gt;Physical&lt;/strong&gt;. If &lt;a href=&quot;https://docs.microsoft.com/en-us/uwp/api/windows.ui.xaml.media.imaging.bitmapimage#Windows_UI_Xaml_Media_Imaging_BitmapImage_DecodePixelType&quot;&gt;DecodePixelType&lt;/a&gt; is not set, or set to &lt;strong&gt;Physical&lt;/strong&gt;, the image is decoded using &lt;a href=&quot;https://docs.microsoft.com/en-us/uwp/api/windows.ui.xaml.media.imaging.bitmapimage#Windows_UI_Xaml_Media_Imaging_BitmapImage_DecodePixelWidth&quot;&gt;DecodePixelWidth&lt;/a&gt; and &lt;a href=&quot;https://docs.microsoft.com/en-us/uwp/api/windows.ui.xaml.media.imaging.bitmapimage#Windows_UI_Xaml_Media_Imaging_BitmapImage_DecodePixelHeight&quot;&gt;DecodePixelHeight&lt;/a&gt; values that represent physical pixels, and the decode operation uses these values directly. If &lt;a href=&quot;https://docs.microsoft.com/en-us/uwp/api/windows.ui.xaml.media.imaging.bitmapimage#Windows_UI_Xaml_Media_Imaging_BitmapImage_DecodePixelType&quot;&gt;DecodePixelType&lt;/a&gt; is set to &lt;strong&gt;Logical&lt;/strong&gt;, the image is decoded using &lt;a href=&quot;https://docs.microsoft.com/en-us/uwp/api/windows.ui.xaml.media.imaging.bitmapimage#Windows_UI_Xaml_Media_Imaging_BitmapImage_DecodePixelWidth&quot;&gt;DecodePixelWidth&lt;/a&gt; and &lt;a href=&quot;https://docs.microsoft.com/en-us/uwp/api/windows.ui.xaml.media.imaging.bitmapimage#Windows_UI_Xaml_Media_Imaging_BitmapImage_DecodePixelHeight&quot;&gt;DecodePixelHeight&lt;/a&gt; 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.&lt;/p&gt;&lt;/blockquote&gt;&lt;p&gt;Whew.&lt;/p&gt;&lt;p&gt;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. &lt;/p&gt;&lt;h2&gt;4. Thou shalt not set properties manually&lt;/h2&gt;&lt;h4&gt;Still valid? no&lt;/h4&gt;&lt;p&gt;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. &lt;/p&gt;&lt;p&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg3xGNKJelz5WeMhSOAxcUBU9s3O6WR9TrARCmZ0iwMK4XS9W2BFtnoM1oJlsMYH8rkeiV7xNtU3diHX2sLbCp0qQboWIytW7LQ-6MFczTdv5UUkFl6mR6AztnAFqVN8RVGnSr4iQ/s1600-h/image%255B20%255D&quot;&gt;&lt;img width=&quot;455&quot; height=&quot;132&quot; title=&quot;image&quot; style=&quot;display: inline;&quot; alt=&quot;image&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjufXeDF2L8oWAelz3swHfsTYRlKUuNhMnYY9YDFxIlHuXfIk_5ED13BsWIVwOW4ELjXbNsZLg67hnKeFlwVBsLKdEhmyvvKNOFHf_dMwFypcWVZzjcm4IYzx-hW9Niap2SmDGzhQ/?imgmax=800&quot;&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;em&gt;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.&lt;/em&gt; &lt;/p&gt;&lt;p&gt;So, should you set property values of your XAML controls from your code-behind? &lt;strong&gt;Well, generally, no.&lt;/strong&gt; 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. &lt;/p&gt;&lt;h2&gt;5. Thou shalt not duplicate chunks of XAML&lt;/h2&gt;&lt;h4&gt;Still valid? mostly&lt;/h4&gt;&lt;p&gt;I would like to dispel a common developer statement:&amp;nbsp; “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. &lt;/p&gt;&lt;p&gt;Consider, here, the needless complexity of Class01 over Class02:&lt;/p&gt;&lt;p&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhPe84LSyBJIQk5L5DZR4lKAxNTm8UVJPO9WCSVfiTrWMx9dHnQfXPN8TM6IRMUmLDDtQNDcajMZ8_wyK_K1lr_PMKVFhF0xWqemyG6H1NSU2RhbIleU9Cqd15dGTwY6MKBbZMTrA/s1600-h/image%255B33%255D&quot;&gt;&lt;img width=&quot;531&quot; height=&quot;392&quot; title=&quot;image&quot; style=&quot;display: inline; background-image: none;&quot; alt=&quot;image&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgKTU8zPzi0hLwK7YP6JMaXON0EFAoccH2tQV1DVbMPEWwDuh109uhcxLox-uF4WW71MRO8ePmMJWm5VPxmXCkXkaBgnTEPoy32TGb62zUInhFkaxHcqS9Jyqr2zm9rXMnKU1GqZg/?imgmax=800&quot; border=&quot;0&quot;&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;Don’t get me wrong: &lt;em&gt;if you are paid by the hour&lt;/em&gt;, 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. &lt;/p&gt;&lt;p&gt;&lt;strong&gt;But, I digress. &lt;/strong&gt;&lt;/p&gt;&lt;p&gt;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.&lt;/p&gt;&lt;p&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjBs35ScW7HcMuja6MLwLy9aispqeoJlgXbJB6c-reVupOqocAFaPaR8z749ifTQ-bDYhuOk3tSYeKFtpNNc0eXPeoTqGcIcYLHLhLaoFyNzawYfVO2ZAJCJ_KQ4uFi6MapvCWm5Q/s1600-h/image%255B51%255D&quot;&gt;&lt;img width=&quot;550&quot; height=&quot;171&quot; title=&quot;image&quot; style=&quot;display: inline; background-image: none;&quot; alt=&quot;image&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEglKSLaOJkRILcSydZWBkXkJsEWuOwZsa3AKMAJt9Ng3Dmwqs-zSjFjhQITsYrqX_dbll4nGx6rx_VjitzR_Fqm_nWXOrdcbzD4Hsw7jlP-rTyVwN6GfJyp1U5ZrHkE3saNqrT6qw/?imgmax=800&quot; border=&quot;0&quot;&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;em&gt;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. &lt;/em&gt;&lt;/p&gt;&lt;h2&gt;6. Thou shalt not wrap content repeatedly&lt;/h2&gt;&lt;h4&gt;Still valid? no&lt;/h4&gt;&lt;p&gt;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. &lt;/p&gt;&lt;p&gt;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. &lt;/p&gt;&lt;p&gt;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. &lt;/p&gt;&lt;p&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgUNUooPoUDwpmMGNj93izS3aUx4_Y9l_aRxOUez6HUcPQBd4Ygje3CBu-fnJJ5LHWuNAVL8Xhi8_so0FSPYVH_CaLwtLSl3bSeiG-9wLp8wKDvxAyucDSViyffQv-uXPRERILMaQ/s1600-h/image%255B37%255D&quot;&gt;&lt;img width=&quot;491&quot; height=&quot;153&quot; title=&quot;image&quot; style=&quot;display: inline; background-image: none;&quot; alt=&quot;image&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEieznJKtgeCdsKwCfT2ypC3UJK-cxXzLlU63lXbqrlwwmF-TN-8FF_5iLEbbBPQXtnUcpreOvcC3tiBRS6JtIGUTBhcn-zHxbPGO3go_Dgry7dddt1HzFdUgTXFwxeJg9wZqPVtFw/?imgmax=800&quot; border=&quot;0&quot;&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;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. &lt;/p&gt;&lt;p&gt;&lt;em&gt;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. &lt;/em&gt;&lt;/p&gt;&lt;h2&gt;7. Thou shalt not use absolute positioning&lt;/h2&gt;&lt;h4&gt;Still valid? yes&lt;/h4&gt;&lt;p&gt;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.&lt;/p&gt;&lt;p&gt;The only times you usually see absolute positioning in XAML is when developers use Canvas (which actually &lt;em&gt;requires&lt;/em&gt; absolute positioning) and when a UI element is relocated around the interface by changing its margin. &lt;/p&gt;&lt;p&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh7EiGxf3WRYEMRXgVRvDxgGzJgDph3PVym4NfcXYRr-xW1s_xMxL_zl_c1smUiaRvACtzy1T4WqsNb1-sh9U7zyasUivCjs4Yr3vYh-uZB53uME5lUip6VlDoYTYbkg9GfsOhHNA/s1600-h/image%255B43%255D&quot;&gt;&lt;img width=&quot;331&quot; height=&quot;52&quot; title=&quot;image&quot; style=&quot;border-image: none; display: inline;&quot; alt=&quot;image&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgAmtRP2PDqXOmAiQvkTcC7zC9ZE_UF7RV6T-UHsalTpZiR-ZP_GMLhAw97AJTxlmvWJHWOpYFDrbbvWGTb-zgK4gOs6cyWpVV2dKm3Lv41kOnB11QzQdYukzZq4EJRW_8kU1ynIg/?imgmax=800&quot;&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;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. &lt;/p&gt;&lt;p&gt;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. &lt;/p&gt;&lt;p&gt;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. &lt;/p&gt;&lt;p&gt;&lt;em&gt;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. &lt;/em&gt;&lt;/p&gt;&lt;h1&gt;Reversed&lt;/h1&gt;&lt;p&gt;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.&lt;/p&gt;&lt;p&gt;&lt;strong&gt;I wish I could have agreed more. But, I can’t.&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi0c9_DndER5pagawoIegDSbKyN9AAq2ec_pLPBBQ1-LvfETi1woRD5JosQvPu2eBOUaGiXHN3oMrxwbb1sJ6WVOVPlZYbI72ptKKSA-p1hV6-jJV2rwFkcx4jZTHrDgOKiUlHFAw/s1600-h/image%255B4%255D&quot;&gt;&lt;img width=&quot;552&quot; height=&quot;309&quot; title=&quot;image&quot; style=&quot;display: inline; background-image: none;&quot; alt=&quot;image&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhmRwKsDrmX3__G7wg4CFHNNmnRmnzxUwtQ7sVULWoHuleLGK8-_WVrGO07yJdOzoeIc7yq-P8RQAOJF5b0fcQ7PsPgngynZWl1tE7GRdfygP7YTy0pNSxLVn0kgnV2cONG6-RC6g/?imgmax=800&quot; border=&quot;0&quot;&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;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. :)&lt;/p&gt;&lt;p&gt;Best of luck!&lt;/p&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8789713/posts/default/2649221757366904538'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8789713/posts/default/2649221757366904538'/><link rel='alternate' type='text/html' href='http://blog.jerrynixon.com/2017/08/cardinal-xaml-reflection.html' title='Cardinal XAML: a reflection'/><author><name>jerrynixon</name><uri>http://www.blogger.com/profile/06978720385628364065</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiN8Lq22BClpfpQxVLjliHrbfTTPM6fv2YW6m2P7nCT6D1MaIV-10_sPeGgJSQ2MgnTcMbEeU4qFj2EAj0oZihRiV3JJS5dtUShYYy3bb_HwI-_e0YG7Pjt7r31kNgnUQ4infvSlA/s72-c?imgmax=800" height="72" width="72"/></entry></feed>