https://www.poppastring.com/blog/images/zenicon.jpgMark Downie - PoppaStringhttps://www.poppastring.com/blog/My thoughts on software development, technology and design.https://www.poppastring.com/blog/images/zenicon.jpgMark Downie - PoppaStringhttps://www.poppastring.com/blog/Mark DownieMon, 18 Mar 2024 06:41:18 GMTadmin@poppastring.comadmin@poppastring.comhttps://www.poppastring.com/blog/feed/trackback/17b39d3a-8808-4758-9f14-adaeec9fa985https://www.poppastring.com/blog/feed/pingbackhttps://www.poppastring.com/blog/post/17b39d3a-8808-4758-9f14-adaeec9fa985Mark Downiehttps://www.poppastring.com/blog/homo-sapiens-10/comments#comments-starthttps://www.poppastring.com/blog/feed/rss/comments/17b39d3a-8808-4758-9f14-adaeec9fa985Homo sapiens 1.0https://www.poppastring.com/blog/post/17b39d3a-8808-4758-9f14-adaeec9fa985https://www.poppastring.com/blog/homo-sapiens-10Mon, 18 Mar 2024 06:41:18 GMT<div><p>By now you have probably noticed that <a href="https://microsoft.design/articles/a-change-of-typeface-microsoft-s-new-default-font-has-arrived" target="_blank">Microsoft has replaced its Calibri default font with Aptos</a>, a new sans-serif typeface inspired by mid-20th-century Swiss typography. This random update got me thinking about Bill Hill, a digital typography pioneer and one of the inventors of Microsoft’s ClearType font display technology. Here is one of my favorite quotes from him:</p><blockquote><p>“I always talk about this to folks at Microsoft, especially to developers. What’s the most important operating system you’ll write applications for? Ain’t Windows, or the Macintosh, or Linux. It’s Homo Sapiens version 1.0. It shipped about a hundred thousand years ago. There’s no upgrade in sight. But it’s the one that runs everything.” – Bill Hill</p></blockquote><p>I heard this quote on <a href="https://learn.microsoft.com/en-us/shows/ms-archives/bill-hill-windows-is-not-the-most-important-os" target="_blank">Channel 9 almost 20 years ago, and it is still available in the archive</a>, but now as a product owner rather than software developer I am finding this whole quote hits different.</p><p>As a developer I spent years nurturing what I assumed were good ideas, and further, I assumed that if the idea was not working it must be because there exists a flaw with the customer’s understanding that needs to be corrected rather than within the the idea itself. It’s dangerous circular trap, but when you spend a lot of time with an idea you can start to assume it is more important than the customer.</p><p>The Product Manager has to relentlessly and ruthlessly stress test the most important underlying hypothesis that influence the idea, feature or product. To do this successfully you must, by definition, be better at listening to your customer (in my case developers) than selling to them. You must be more devoted to your customer than your own idea, but to do that you have to understand the difference and give credence and deference to your customer first.</p><p>How to create products developers want to use is always at the heart of the work I am doing at Microsoft, and I use the following questions from <a href="https://www.strategyzer.com/vpd" target="_blank">Value Proposition Design</a> to help me ensure that my ideas remain fully consistent with developer needs:</p><ol><li>Is it embedded in a great business model?</li><li>Does it focus on the most important jobs, most extreme pains, and most essential gains?</li><li>Does it focus on unsatisfied jobs, unresolved pains, and unrealized gains?</li><li>Does it concentrate on only a few pain relievers and gain creators but does those extremely well?</li><li>Does it address functional, emotional, and social jobs all together?</li><li>Does it align with how customers measure success?</li><li>Does it focus on jobs, pains, or gains, that a large number of customers, or which a small number of are willing to pay a lot of money?</li><li>Does it differentiate from competition in a meaningful way?</li><li>Does it outperform competition substantially on at least one dimension?</li><li>Is it difficult to copy?</li></ol> <p><figure><a href="https://www.poppastring.com/blog/content/binary/Open-Live-Writer/504bd31b9176_F1BD/creative-consciousness-nick-stull_2.jpg"> <img width="1600" height="1268" title="Creative consciousness by Nick Stull" style="border: 0px currentcolor; border-image: none; display: inline; background-image: none;" alt="I woman with abstract blues and greens looking to the right with microchips and chemical equations swirling around her head." src="https://www.poppastring.com/blog/content/binary/Open-Live-Writer/504bd31b9176_F1BD/creative-consciousness-nick-stull_thumb.jpg" border="0"></a></figure></div>https://www.poppastring.com/blog/homo-sapiens-10/comments#comments-startMusingsProduct Managmenthttps://www.poppastring.com/blog/feed/trackback/1cbe5776-47e7-40b8-8e21-e553a85a176fhttps://www.poppastring.com/blog/feed/pingbackhttps://www.poppastring.com/blog/post/1cbe5776-47e7-40b8-8e21-e553a85a176fMark Downiehttps://www.poppastring.com/blog/a-better-vision-for-central-ohio/comments#comments-starthttps://www.poppastring.com/blog/feed/rss/comments/1cbe5776-47e7-40b8-8e21-e553a85a176fA better vision for Central Ohiohttps://www.poppastring.com/blog/post/1cbe5776-47e7-40b8-8e21-e553a85a176fhttps://www.poppastring.com/blog/a-better-vision-for-central-ohioWed, 28 Feb 2024 09:11:32 GMT<div><p><strong><a href="https://www.rapid5.org/"><strong>RAPID 5</strong> envisions</a></strong> a transformation of Central Ohio’s quality of life by leveraging our local waterways and vibrant green spaces. One of the chief goals is to redefine regional connectivity, aligning it with the natural geography defined by our local waterways. The goal is to connect all Franklin County residents to the region’s natural, cultural, and economic resources, fostering opportunities for recreation, commuting, commerce, education, and relaxation.</p> <div class="embed-container"> <iframe width="783" height="440" title="The Rapid 5 Project - The Vision Revealed" src="https://www.youtube.com/embed/3AAdaqrpJ0c" frameborder="0" allowfullscreen="" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share"></iframe> </div> <p>This vision resonated with me specifically because it appears to stand in contrast with the destruction caused by the <a href="https://www.history.com/topics/us-states/interstate-highway-system">Interstate Highway Act of the 1950s</a>. Over the next decade federal and state highway builders purposefully targeted black and brown communities to make way for the modern highways we see today. In some instances, they took homes by eminent domain, and claimed that these communities were not worth saving, when in most cases they were vibrant and even thriving.</p><p>This specifically <a href="https://www.aarp.org/livable-communities/getting-around/info-2023/before-the-highway-hanford-village-columbus-ohio-shirley-mixon.html">impacted the Hanford Village community</a> in Columbus, this suburb was developed in 1946 and became a haven for soldiers returning from World War II. It was explicitly marketed by the developer as “Homes for Negro families,” and the community attracted Tuskegee Airmen which were made up of the 332nd fighter group. The I-70 decimated the community, dividing it, and driving out home owners and business’ alike. Hanford Village was recognized recently by the National Register of Historic Places and a historic marker states, in part: <em>"Although the highway divides us, our memories are never lost.". </em></p><p>The RAPID 5 bravely envisions the process of untangling the damage of the highway system and stitching back together the fragmented and devastated neighborhood. To be clear this is all just a vision, an idea without a comprehensive plan, and very little funding. But hope is a powerful thing, sometimes the only thing.</p><figure><a href="https://www.poppastring.com/blog/content/binary/Open-Live-Writer/93f3e922bc99_130FB/high-splitting-neighbourhood_2.jpg"><img width="1400" height="880" title="A highway splittinga suburban neighbourhood" style="border: 0px currentcolor; border-image: none; display: inline; background-image: none;" alt="A highway splittinga suburban neighbourhood" src="https://www.poppastring.com/blog/content/binary/Open-Live-Writer/93f3e922bc99_130FB/high-splitting-neighbourhood_thumb.jpg" border="0"></a></figure></div>https://www.poppastring.com/blog/a-better-vision-for-central-ohio/comments#comments-startColumbusMusingshttps://www.poppastring.com/blog/feed/trackback/7db01f10-73e3-4d9a-930b-a3306b8d64e3https://www.poppastring.com/blog/feed/pingbackhttps://www.poppastring.com/blog/post/7db01f10-73e3-4d9a-930b-a3306b8d64e3Mark Downiehttps://www.poppastring.com/blog/the-gift-of-time/comments#comments-starthttps://www.poppastring.com/blog/feed/rss/comments/7db01f10-73e3-4d9a-930b-a3306b8d64e3The gift of timehttps://www.poppastring.com/blog/post/7db01f10-73e3-4d9a-930b-a3306b8d64e3https://www.poppastring.com/blog/the-gift-of-timeFri, 22 Dec 2023 07:26:36 GMT<div><p>As I get older I understand that my time is a precious and limited resource, and that whomever I choose to spend it with, and what I elect to be concerned about are important to prioritize. I have been inspired to revaluate those priorities again after reading <a href="https://www.bookloft.com/book/9780374529758">Rabbi Abraham Joshua Heschel’s <strong>The Sabbath</strong></a>. It challenges the value of productivity and suggests to balance it with the notion of sharing and giving time to yourself, community and God.</p><blockquote><p>To gain control of the world of space is certainly one of our tasks. The danger begins when in gaining power in the realm of space we forfeit all aspirations in the realm of time. There is a realm of time where the goal is not to have but to be, not to own but to give, not to control but to share, not to subdue but to be in accord. <em><strong>Life goes wrong when the control of space, the acquisition of things of space, becomes our sole concern.</strong></em></p><p><em><em>Abraham Joshua Heschel, The Sabbath</em></em></p></blockquote><p><figure><a href="https://www.poppastring.com/blog/content/binary/Open-Live-Writer/0320d978990b_10E4A/sunflower-hilliard-ohio_2.jpg"><img width="1400" height="1058" title="Sunflower picture taken in Central Ohio" style="border: 0px currentcolor; border-image: none; display: inline; background-image: none;" alt="A single bright yellow Sunflower" src="https://www.poppastring.com/blog/content/binary/Open-Live-Writer/0320d978990b_10E4A/sunflower-hilliard-ohio_thumb.jpg" border="0"></a></figure></div>https://www.poppastring.com/blog/the-gift-of-time/comments#comments-startMusingshttps://www.poppastring.com/blog/feed/trackback/447c0d9f-d9d7-4ea7-ac6d-73f0b606ee4ehttps://www.poppastring.com/blog/feed/pingbackhttps://www.poppastring.com/blog/post/447c0d9f-d9d7-4ea7-ac6d-73f0b606ee4eMark Downiehttps://www.poppastring.com/blog/api-testing-with-http-files-in-visual-studio/comments#comments-starthttps://www.poppastring.com/blog/feed/rss/comments/447c0d9f-d9d7-4ea7-ac6d-73f0b606ee4e5API testing with .http files in Visual Studiohttps://www.poppastring.com/blog/post/447c0d9f-d9d7-4ea7-ac6d-73f0b606ee4ehttps://www.poppastring.com/blog/api-testing-with-http-files-in-visual-studioThu, 21 Dec 2023 08:27:08 GMT<div><p>I really do not like using command line tools for everyday tasks, I just prefer to grab my mouse, and point and then click. For the longest I assumed there was no viable alternative to <strong><em>CURL</em></strong>, which I use to power most of my demos, especially for things like dotnet-monitor or to learn a new API surface. So I was taken completely by surprise when <a href="https://devblogs.microsoft.com/visualstudio/author/hass0002/">my colleague Sayed</a>, mentioned that <a href="https://devblogs.microsoft.com/visualstudio/web-api-development-in-visual-studio-2022/"><strong>Visual Studio supports .http files</strong></a>.</p><h3>Experimenting with the BlueSky API</h3><p>I thought a helpful way to investigate the <em>.http</em> file support in Visual Studio was by showing how it could work with the BlueSky API which uses the <a href="https://atproto.com/guides/overview"><strong>Authenticated Transfer Protocol</strong>, aka <strong>atproto</strong></a>. So let’s go through this example line by line:</p> <pre data-enlighter-language="" data-enlighter-linenumbers="true">@BLUESKY_HANDLE=poppastring.com @BLUESKY_APP_PASSWORD=xxxxxxxxxxx @ACCESS_JWT=********************************* @MESSAGE_RECORD={"text": "Hello world! I posted this via the API.", "createdAt": "{{$datetime iso8601}}" } ### Retrieve the Access JWT POST https://bsky.social/xrpc/com.atproto.server.createSession Content-Type: application/json { "identifier": "{{BLUESKY_HANDLE}}", "password": "{{BLUESKY_APP_PASSWORD}}" } ### Create a new post with the token POST https://bsky.social/xrpc/com.atproto.repo.createRecord Content-Type: application/json Authorization: Bearer {{ACCESS_JWT}} { "collection": "app.bsky.feed.post", "repo": "{{BLUESKY_HANDLE}}", "record": {{MESSAGE_RECORD}} } </pre> <p>The first four lines of the <em><strong>.http</strong></em> file are my variable declarations, each variable is defined using the <em>@</em> sign, and from what I can tell variables need to be declared at the start of the file. Each HTTP file can have multiple HTTP requests but they do need to be separated by 3 hashes (###). So the first request I have defined on line 7 is a HTTP post, and also note that the <em>Content-Type</em> header, and indeed all your headers, are defined immediately following the http request line.</p><p>BlueSky, like other social network APIs has the concept of an app password which is completely separate from your login password. However, in order to post to your timeline you need to first retrieve your JSON Web Token (JWT) from the first authentication. The first HTTP request can be sent by clicking the <strong>Send request</strong> text (just above the POST), or by right clicking the request line and clicking <em>Send request</em> in the context menu.</p><p><figure><a href="https://www.poppastring.com/blog/content/binary/Open-Live-Writer/014581d78d54_11F21/http-file-anatomy_2.png"><img width="1374" height="319" title="http-file-anatomy" style="border: 0px currentcolor; border-image: none; display: inline; max-width: 60%; background-image: none;" alt="HTTP file showing a POST, content-type with a JSON payload" src="https://www.poppastring.com/blog/content/binary/Open-Live-Writer/014581d78d54_11F21/http-file-anatomy_thumb.png" border="0"></a></figure><p>After grabbing the JWT token from this request I put the result on line 4 which is my JWT variable. I can now execute my second request which is also a POST, however, this one has an additional Authorization header with a bearer token and a JSON payload that includes the message for my timeline. <em>And voila, you are posting to BlueSky with .http files in Visual Studio!!!</em></p><p>I kept this fairly simple, but there is a lot more going on here, for example there is a really easy way to <em><a href="https://devblogs.microsoft.com/visualstudio/safely-use-secrets-in-http-requests-in-visual-studio-2022/#using-secrets">handle secrets in .http files that Sayed has documented here</a></em>. If you need more general details please check out the really comprehensive <a href="https://learn.microsoft.com/en-us/aspnet/core/test/http-files?view=aspnetcore-8.0"><strong>Visual Studio .http docs here</strong></a>.</p><p><figure><a href="https://www.poppastring.com/blog/content/binary/Open-Live-Writer/014581d78d54_11F21/cactus-volunteer-park-conservatory_2.jpg"><img width="1300" height="1272" title="Cactus volunteer park conservatory" class="hero-image" style="border: 0px currentcolor; border-image: none; display: inline; background-image: none;" alt="Cactus from Volunteer Park Conservatory near Seattle" src="https://www.poppastring.com/blog/content/binary/Open-Live-Writer/014581d78d54_11F21/cactus-volunteer-park-conservatory_thumb.jpg" border="0"></a></figure></div>https://www.poppastring.com/blog/api-testing-with-http-files-in-visual-studio/comments#comments-startAPIVisual Studiohttps://www.poppastring.com/blog/feed/trackback/0231817a-ad05-4f17-a38a-37f95e8f7450https://www.poppastring.com/blog/feed/pingbackhttps://www.poppastring.com/blog/post/0231817a-ad05-4f17-a38a-37f95e8f7450Mark Downiehttps://www.poppastring.com/blog/dasblogs-upgrade-to-net-8-is-ready/comments#comments-starthttps://www.poppastring.com/blog/feed/rss/comments/0231817a-ad05-4f17-a38a-37f95e8f7450DasBlog’s upgrade to .NET 8 is ready!https://www.poppastring.com/blog/post/0231817a-ad05-4f17-a38a-37f95e8f7450https://www.poppastring.com/blog/dasblogs-upgrade-to-net-8-is-readyWed, 06 Dec 2023 06:47:25 GMT<div><p>I am pleased to share that <a href="https://github.com/poppastring/dasblog-core">DasBlog has been upgraded to support .NET 8!</a> </p><p>It has been busy few weeks so it took me a while to get going on this task. However, the upgrade process process itself was simple and painless. It still somehow surprises me that a piece of software originally developed for Windows on the very first version of .NET is so easily upgraded and now supports all major OSes.</p><p>You may have also noticed that I skipped a few version numbers and we are in sync with the .NET LTS major version number. It just feels tidier somehow. </p><p>Here are a list of the very latest changes included in v8:</p><p><a href="https://github.com/poppastring/dasblog-core/pull/688"><strong>Implements static pages</strong></a> - You can now upload static html pages to your <strong><em>content/static</em></strong> folder and then navigate to those pages by file name (without the extension).</p><p><a href="https://github.com/poppastring/dasblog-core/pull/688"><strong>Define a hero image (with help from Copilot)</strong></a> – The main image of a blog post is implicitly defined as the first image found in HTML, we changed this to be more explicit. If you update the class name to contain “hero-image” it will be explicitly identified as the main post image.</p><p><a href="https://github.com/poppastring/dasblog-core/pull/693"><strong>Simplify the site initialization process</strong></a> - The assumption is that upon first deployment the site will start up without a root URL defined. You can now login and define the root URL through the web page. Some functions will still not work so this should still be the first thing you do.</p><p>For more details please check out the <a href="https://github.com/poppastring/dasblog-core/releases/tag/v8.0.1194">release notes here</a>. Enjoy!</p><p><figure><a href="https://www.poppastring.com/blog/content/binary/Open-Live-Writer/1117076fa908_1128C/heart-would-drift-would-4u-olga-ziemska_2.jpg"><img width="1300" height="813" title="Heart wood drift would 4u by Olga Ziemska" class="hero-image" style="border: 0px currentcolor; border-image: none; display: inline; background-image: none;" alt="Drift wood shaped in the characters of &quot;4U&quot;" src="https://www.poppastring.com/blog/content/binary/Open-Live-Writer/1117076fa908_1128C/heart-would-drift-would-4u-olga-ziemska_thumb.jpg" border="0"></a></figure></div>https://www.poppastring.com/blog/dasblogs-upgrade-to-net-8-is-ready/comments#comments-startDasBloghttps://www.poppastring.com/blog/feed/trackback/32671c33-b7f9-454f-8601-3e59ff27fdb8https://www.poppastring.com/blog/feed/pingbackhttps://www.poppastring.com/blog/post/32671c33-b7f9-454f-8601-3e59ff27fdb8Mark Downiehttps://www.poppastring.com/blog/hot-reload-for-c-dev-kit/comments#comments-starthttps://www.poppastring.com/blog/feed/rss/comments/32671c33-b7f9-454f-8601-3e59ff27fdb8Hot Reload for C# Dev Kithttps://www.poppastring.com/blog/post/32671c33-b7f9-454f-8601-3e59ff27fdb8https://www.poppastring.com/blog/hot-reload-for-c-dev-kitWed, 29 Nov 2023 09:16:32 GMT<div><p>With the C# Dev Kit extension installed in Visual Studio Code, the debugger allows you to apply C# code changes while debugging, this is what we have come to know as Hot Reload.</p><p><figure><a href="https://www.poppastring.com/blog/content/binary/Open-Live-Writer/C-Dev-Kit_12682/hotreload-toolbar_2.png"> <img width="446" height="128" title="hotreload-toolbar" style="border: 0px currentcolor; border-image: none; display: inline; max-width: 60%; background-image: none;" alt="hotreload-toolbar" src="https://www.poppastring.com/blog/content/binary/Open-Live-Writer/C-Dev-Kit_12682/hotreload-toolbar_thumb.png" border="0"> </a></figure><p>To get started with Hot Reload in VS Code you will need to update the <strong><em>csharp.experimental.debug.hotreload</em></strong> in<a href="https://code.visualstudio.com/docs/csharp/debugging#_user-settings">User settings</a> (under <strong>File</strong> &gt; <strong>Preferences</strong> &gt; <strong>Settings</strong>). You can of course explicitly apply changes by clicking the fire icon (or pressing <em>Ctrl-Shift-Enter),</em> alternatively you can automatically apply changes when you save a file by setting the <strong>csharp.debug.hotReloadOnSave</strong> setting to true.</p><h3>General limitations</h3><p>As of the date of this writing there are a couple of important differences in the feature set compared to the Visual Studio:- </p><ul><li>ASP.NET Core applications will not automatically refresh the browser after a change is made.</li><li>Code changes will only be applied while actively debugging.</li></ul><h3>Linux/macOS limitations</h3><p>Multi OS support for VS Code is a real strength, however, Hot Reload on Linux/Mac needed additional runtime support which means that .NET 8+ is required for Hot Reload on these operating systems. </p><p>Project types that support Hot Reload on Linux/Mac include:</p><ul><li><strong>ASP.NET Core</strong> (.cs files only)</li><li><strong>Console</strong></li><li><strong>Class Library</strong></li><li><strong>Test</strong></li></ul><p>Project types that do not support Hot Reload on Linux/Mac include:</p><ul><li><strong>Unity</strong></li><li><strong>Maui (coming soon)</strong></li></ul><p>For more details please <a href="https://code.visualstudio.com/docs/csharp/debugging#_hot-reload">check out the Hot Reload docs here</a>.</p><a href="https://www.poppastring.com/blog/content/binary/Open-Live-Writer/C-Dev-Kit_12682/paul-bulai-flame-unsplash_2.jpg"> <figure> <img width="1920" height="1280" title="paul-bulai-flame-unsplash" class="hero-image" style="border: 0px currentcolor; border-image: none; display: inline; background-image: none;" alt="paul-bulai-flame-unsplash" src="https://www.poppastring.com/blog/content/binary/Open-Live-Writer/C-Dev-Kit_12682/paul-bulai-flame-unsplash_thumb.jpg" border="0"></figure></a> <p align="center"> Photo by <a href="https://unsplash.com/@pcbulai?utm_content=creditCopyText&amp;utm_medium=referral&amp;utm_source=unsplash">Paul Bulai</a> on <a href="https://unsplash.com/photos/flame-illustration-XOQJa4OC8P0?utm_content=creditCopyText&amp;utm_medium=referral&amp;utm_source=unsplash">Unsplash</a></p></div>https://www.poppastring.com/blog/hot-reload-for-c-dev-kit/comments#comments-startDebuggingVS Codehttps://www.poppastring.com/blog/feed/trackback/85c36eef-fdde-46f3-b190-ba3f056b1953https://www.poppastring.com/blog/feed/pingbackhttps://www.poppastring.com/blog/post/85c36eef-fdde-46f3-b190-ba3f056b1953Mark Downiehttps://www.poppastring.com/blog/building-debugging-context-for-copilot-chat/comments#comments-starthttps://www.poppastring.com/blog/feed/rss/comments/85c36eef-fdde-46f3-b190-ba3f056b1953Building debugging context for Copilot Chathttps://www.poppastring.com/blog/post/85c36eef-fdde-46f3-b190-ba3f056b1953https://www.poppastring.com/blog/building-debugging-context-for-copilot-chatSat, 18 Nov 2023 09:40:46 GMT<div><p>The <strong><em>Copilot Chat extension (preview)</em></strong> for Visual Studio is available for download today, but I feel the need to emphasize something. While the main interaction layer is chat based, we know that the various diagnostics interruptions and pauses are filled with information that are not easily articulated with text. For example, how would you communicate the state of your apps threads? Or the value of all the locals? Or the call stack state? There is a host of data we might want to share with Copilot that should be conveniently packaged and shared for you while debugging issues.</p><p>Let me show you an example.</p><h3>Helping Exception Helper</h3><p>If you have spent much time in Visual Studio you would have invariably and inadvertently created an exception, and depending on how you handle the exception it might lead to a crash. There are many, many types of exceptions, so much so that no one can possibly be expected to know or even understand them all. The <strong>Exception Helper</strong> dialogue box (below) is a really convenient place for you to decide how to handle these situations, the debugger is providing a really convenient pause point before letting your app fail.</p><p><figure><a href="https://www.poppastring.com/blog/content/binary/Open-Live-Writer/Using-Copilot-with-the_B72E/exception-helper_4.png"> <img width="1667" height="663" title="exception-helper" style="border: 0px currentcolor; border-image: none; display: inline; background-image: none;" alt="exception-helper" src="https://www.poppastring.com/blog/content/binary/Open-Live-Writer/Using-Copilot-with-the_B72E/exception-helper_thumb_1.png" border="0"> </a></figure><p>You can at this point decide to ignore the Exception Thrown (or indeed all exceptions) completely, but with the Copilot extension installed you get a new <strong>Ask Copilot</strong> button which conveniently gathers data from the debugger to help you understand this exception in context. So when you ask the question you send a set of references to help Copilot provide a better answer. Why? because you are <a href="https://www.poppastring.com/blog/thriving-in-the-age-of-ai">grounding the question with a more complete context</a>. This currently include Exception information (Title, message), Call stack, and Locals as shown here.</p><p><figure><a href="https://www.poppastring.com/blog/content/binary/Open-Live-Writer/Using-Copilot-with-the_B72E/copilot-references_2.png"><img width="1236" height="431" title="copilot-references" style="border: 0px currentcolor; border-image: none; display: inline; max-width: 60%; background-image: none;" alt="copilot-references" src="https://www.poppastring.com/blog/content/binary/Open-Live-Writer/Using-Copilot-with-the_B72E/copilot-references_thumb.png" border="0"></a></figure><p>I am having a blast exploring the ways AI tools and platforms can be used to improve the experiences of developer workflows, we are actively listening and learning. My main focus is on debugging and diagnostics. So whether you are at a carefully placed breakpoint, or running the profiler looking for performance clues, I think each of these diagnostics interruptions provide a moment to gain clarity on the health and logic of your application.</p><p align="left">Please check out my talk with <a href="https://www.hanselman.com/blog/">Scott Hanselman</a> at Ignite where we discuss <a href="https://www.youtube.com/watch?v=5pbPLHYB6-0">GitHub Copilot and AI for Developers: Potential and Pitfalls</a>.</p></div>https://www.poppastring.com/blog/building-debugging-context-for-copilot-chat/comments#comments-startCopilotDebuggingVisual Studiohttps://www.poppastring.com/blog/feed/trackback/73b18701-e5cb-432b-9821-b480ebbf55c7https://www.poppastring.com/blog/feed/pingbackhttps://www.poppastring.com/blog/post/73b18701-e5cb-432b-9821-b480ebbf55c7Mark Downiehttps://www.poppastring.com/blog/thriving-in-the-age-of-ai/comments#comments-starthttps://www.poppastring.com/blog/feed/rss/comments/73b18701-e5cb-432b-9821-b480ebbf55c7Thriving in the age of AIhttps://www.poppastring.com/blog/post/73b18701-e5cb-432b-9821-b480ebbf55c7https://www.poppastring.com/blog/thriving-in-the-age-of-aiSat, 07 Oct 2023 07:14:51 GMT<div><p>I distinctly remember this enlightening David Bowie interview from circa 1999, most fascinating to me is the <a href="https://www.youtube.com/watch?v=FiK7s_0tGsg&amp;t=560s">discussion on the enigma and prodigious promise of the internet</a>. Here is the excerpt that caught my attention:</p><blockquote><p>I don't think we've even seen the tip of the iceberg. I think the potential of what the Internet is going to do to society, both good and bad, is unimaginable. I think we're actually on the cusp of something exhilarating and terrifying…</p></blockquote><p>The interviewer, Jeremy Paxman responded with a mixture of incredulity and confusion “It’s just a tool though isn’t it?”. Here again is Bowie’s response:</p><blockquote><p>I'm talking about the actual context and the state of content is going to be so different to anything that we can really envisage at the moment where the interplay between the user and the provider will be so in simpatico that it is going to crush our ideas of what mediums are all about.</p></blockquote><p>Rewatching this interview years later I am forced to acknowledge how little I understood about how the internet was changing our society, even though I was building some of the tools that would welcome and accelerate the change. Today, I again find myself building tools for a future that I cannot fully describe or predict. However, the age of the internet taught us some valuable lessons about <em>poorly designed guard rails</em> and <em>assuming good intentions</em>. We should neither surrender these precepts or forget the way bad actors undermine these systems. We can never forget that it took years before our social networks recognized the damage being done to the most vulnerable communities.</p><p>That said, a system built around AI, that provides answers based on non-determinism and probability can feel temperamental and volatile. Capriciousness is not helpful for something as structured as a programming language or compiler. However, at the center of all this information is you, an individual with a unique and orderly context. It is this context that brings the structure, and consistency to chance and disarray. <strong>In this regard the <a href="https://hanselminutes.com/484/systems-thinking-less-coding-more-thinking-with-kishau-rogers">System Thinking</a> you provide will not only survive this AI moment but will prove to be the capability that thrives within it.</strong></p><a href="https://www.poppastring.com/blog/content/binary/Open-Live-Writer/Thriving-in-the-age-of-AI_12758/google-deepmind-unsplash-min_2.png"><figure><img width="1600" height="699" title="google-deepmind-unsplash-min" style="border: 0px currentcolor; border-image: none; display: inline; background-image: none;" alt="google-deepmind-unsplash-min" src="https://www.poppastring.com/blog/content/binary/Open-Live-Writer/Thriving-in-the-age-of-AI_12758/google-deepmind-unsplash-min_thumb.png" border="0"></figure></a></div>https://www.poppastring.com/blog/thriving-in-the-age-of-ai/comments#comments-startArtificial Intelligencehttps://www.poppastring.com/blog/feed/trackback/0f84d527-997c-44c7-bde9-5df06615dbedhttps://www.poppastring.com/blog/feed/pingbackhttps://www.poppastring.com/blog/post/0f84d527-997c-44c7-bde9-5df06615dbedMark Downiehttps://www.poppastring.com/blog/real-music-and-authentic-voices/comments#comments-starthttps://www.poppastring.com/blog/feed/rss/comments/0f84d527-997c-44c7-bde9-5df06615dbedReal music and authentic voiceshttps://www.poppastring.com/blog/post/0f84d527-997c-44c7-bde9-5df06615dbedhttps://www.poppastring.com/blog/real-music-and-authentic-voicesSat, 09 Sep 2023 08:59:32 GMT<div><p>The question of “real music” has plagued and disrupted principled musical discourse for years. I have always seen it as both a defensive posture and a gatekeeping strategy deployed by older musicians. As such, I generally side step the question by appealing to our common goal, that is, “if it sounds good, it is good”.</p><p>However, the notion of “real” is being challenged along a different axis, as in, “If a song is generated by AI is it a ‘real’ song”. In a more direct challenge it appears that songs created by <a href="https://www.theverge.com/2023/5/1/23703087/ai-drake-the-weeknd-music-copyright-legal-battle-right-of-publicity">AI tools might be disqualified from Grammy consideration, the Recording Academy CEO Harvey Mason Jr, said the following</a>:</p><blockquote><p>“It’s all complicated, and it’s moving, really, really quickly. I’m sure things are going to continue to have to evolve and change…The Academy is here to support and advocate and protect and represent human artists, and human creators period.”</p></blockquote><p>The distinction here appears to be that only human creators produce “real music” and further that this is the only kind of music that is worthy of recognition by our institutions, but that does in turn beg the question what is the function of the “other” music? Is it really less entertaining? Or less memorable?</p><p>I am once again going to side step the notion of “real” and focus on the part that is the ultimate source of my consternation, <a href="https://www.theverge.com/2023/5/1/23703087/ai-drake-the-weeknd-music-copyright-legal-battle-right-of-publicity">it is just too easy appropriate and clone a voice:</a></p><blockquote><p>There’s Drake covering singer-songwriter Colbie Caillat, Michael Jackson covering The Weeknd, and Pop Smoke covering Ice Spice’s “In Ha Mood.” The artists don’t actually perform the songs — they’re all generated using artificial intelligence tools. And the resulting videos have racked up tens of millions of views.</p></blockquote><p>What is more disturbing here is that while the underlying songs are protected, cloning specific voices in this way is not explicitly protected by any law on the books today. An artist could create a new song and create a veritable choir of cloned voices from both the present and antiquity, and there does not appear to be a thing anyone could do about it.</p><p><a href="https://www.law.cornell.edu/wex/publicity">A person’s right of publicity (privacy)</a> is the closest statute but it’s, at best, generally enacted by state common or statutory law. If a person can establish an aspect of his or her identity as a <a href="https://www.law.cornell.edu/wex/Trademark">trademark, Federal law my provide protection</a>. Trademark protection ensures no one would dream of using the Nike or Adidas symbols, it is a seal that most people on the planet immediately recognize. I would then argue some voices have such specific tone and timbre that they are immediately recognizable and worthy of protection.</p><p>The age of AI disruption then is not so much about threatening the parameters of <strong><em>real music</em></strong>, but it could, without guard rails, help threaten the notion of <strong><em>authentic voices</em></strong>.</p><p><figure><a href="https://www.poppastring.com/blog/content/binary/Open-Live-Writer/Real-music_133ED/lake-ontario-sunset.jpg"> <img width="1400" height="610" title="Lake Ontario sunset" style="border: 0px currentcolor; border-image: none; display: inline; background-image: none;" alt="Sunset over Lake Ontario a couple of people are at the waters edge" src="https://www.poppastring.com/blog/content/binary/Open-Live-Writer/Real-music_133ED/lake-ontario-sunset_thumb.jpg" border="0"></a></figure></div>https://www.poppastring.com/blog/real-music-and-authentic-voices/comments#comments-startArtificial IntelligenceMusicMusingshttps://www.poppastring.com/blog/feed/trackback/1df6812d-527b-48a6-91c0-ccb178c0d7f3https://www.poppastring.com/blog/feed/pingbackhttps://www.poppastring.com/blog/post/1df6812d-527b-48a6-91c0-ccb178c0d7f3Mark Downiehttps://www.poppastring.com/blog/configure-dotnetmonitor-in-an-aks-cluster-for-managed-grafana/comments#comments-starthttps://www.poppastring.com/blog/feed/rss/comments/1df6812d-527b-48a6-91c0-ccb178c0d7f3Configure dotnet-monitor in an AKS cluster for Managed Grafanahttps://www.poppastring.com/blog/post/1df6812d-527b-48a6-91c0-ccb178c0d7f3https://www.poppastring.com/blog/configure-dotnetmonitor-in-an-aks-cluster-for-managed-grafanaFri, 04 Aug 2023 23:25:03 GMT<div><p><strong>dotnet-monitor</strong> provides snapshots of .NET metrics in the Prometheus exposition format, <a href="https://prometheus.io/docs/introduction/overview/">Prometheus</a> in turn collects metrics from targets by scraping metrics HTTP endpoints. In this post I am going to run down the steps for customizing metrics scraping for a Kubernetes cluster with the metrics addon in Azure Monitor and how to subsequently renders those metrics with Grafana in four easy steps.</p><p><a href="https://www.poppastring.com/blog/content/binary/Open-Live-Writer/Configure-dotnet-monitor-in-an-AKS-clust_B4C2/edward-howell-rose-flower-unsplash_4.jpg"><img width="956" height="618" title="Edward Howell Rose flower from Unsplash" style="border: 0px currentcolor; border-image: none; display: inline; background-image: none;" alt="A series of 6 rose from each subsequently blossoming a little more." src="https://www.poppastring.com/blog/content/binary/Open-Live-Writer/Configure-dotnet-monitor-in-an-AKS-clust_B4C2/edward-howell-rose-flower-unsplash_thumb_1.jpg" border="0"></a></p><h3>Step 1: dotnet monitor configuration</h3><p>The following settings ensure that the <a href="https://github.com/dotnet/dotnet-monitor/blob/main/documentation/configuration/metrics-configuration.md#metrics-urls">metrics endpoint is bound to an external address</a>, and not the internal localhost. We normally cache 3 metrics so that several metrics can be picked up in one scrape. However, we ran into some issues with timestamp inconsistencies from the scraper. Today we are recommending setting a fairly low scraping interval for the metric, ‘1’ in this example.</p> <pre data-enlighter-linenumbers="false" data-enlighter-language="yaml">Metrics__Endpoints: http://+:52325 Metrics__Endpoints: '1' </pre> <h3>Step 2: Include deployment annotations</h3> <p> You will need to update cluster deployment to scrape certain pods and specify the port, path, and scheme through annotations for the pod.</p> <pre data-enlighter-linenumbers="false" data-enlighter-language="yaml">annotations: prometheus.io/scrape: 'true' prometheus.io/path: '/metrics' prometheus.io/port: '52325' prometheus.io/scheme: 'http' </pre> <h3>Step 3: Apply ConfigMap</h3> <p>You can download this <a href="https://github.com/Azure/prometheus-collector/blob/main/otelcollector/configmaps/ama-metrics-settings-configmap.yaml">metrics settings config map file</a> and change the settings as appropriate. The <strong><em>podannotationnamespaceregex</em></strong> setting requires an update to ensure that it matches the namespace configured for your app (check your deployment). If your namespace is blank or undefined <strong><em>podannotationnamespaceregex</em></strong> will become 'default' as follows.</p> <pre data-enlighter-linenumbers="false" data-enlighter-language="yaml">podannotationnamespaceregex = "default" </pre> <p>Save your ConfigMap and apply/deploy to the kube-system namespace for your cluster as follows (only required once).</p> <pre data-enlighter-linenumbers="false" data-enlighter-language="yaml">kubectl apply -f .\ama-metrics-settings-configmap.yaml -n kube-system </pre> <p>This configures the Prometheus agent to check the default namespace for active pods and use the annotations in the pod (step 2) to scrape for Prometheus data, the scraping will occur on an interval defined in the ConfigMap.</p> <h3>Step 4: Configuring Azure Managed Grafana Dashboard</h3> <p>After creating your <a href="https://learn.microsoft.com/en-us/azure/managed-grafana/quickstart-managed-grafana-portal">Azure Managed Grafana instance</a> you can start designing dashboards based on the .NET metrics exposed via Prometheus. Navigate to the <strong><em>Dashboards</em></strong> page and select <strong><em>New-&gt;Import</em></strong>, this navigates to the import page where you can load a pre-configured dashboard. I created a <a href="https://grafana.com/grafana/dashboards/19297-dotnet-monitor-dashboard/"><strong>dotnet-monitor</strong> dashboard (19297)</a> to help quickly establish a good starting point with the default metrics shared through the Prometheus agent.</p> <p><figure><a href="https://www.poppastring.com/blog/content/binary/Open-Live-Writer/Configure-dotnet-monitor-in-an-AKS-clust_B4C2/grafana-import-dashboard_2.png"><img width="700" height="99" title="grafana-import-dashboard" style="border: 0px currentcolor; border-image: none; display: inline; max-width: 60%; background-image: none;" alt="grafana-import-dashboard" src="https://www.poppastring.com/blog/content/binary/Open-Live-Writer/Configure-dotnet-monitor-in-an-AKS-clust_B4C2/grafana-import-dashboard_thumb.png" border="0"></a></figure> <p>Select a `Folder` for your newly imported dashboard along with the `Managed Prometheus data source` configured earlier.</p> <p><figure><a href="https://www.poppastring.com/blog/content/binary/Open-Live-Writer/Configure-dotnet-monitor-in-an-AKS-clust_B4C2/grafana-import-dashboard-name-folder-id_2.png"><img width="800" height="559" title="grafana-import-dashboard-name-folder-id" style="border: 0px currentcolor; border-image: none; display: inline; max-width: 60%; background-image: none;" alt="grafana-import-dashboard-name-folder-id" src="https://www.poppastring.com/blog/content/binary/Open-Live-Writer/Configure-dotnet-monitor-in-an-AKS-clust_B4C2/grafana-import-dashboard-name-folder-id_thumb.png" border="0"></a></figure></div>https://www.poppastring.com/blog/configure-dotnetmonitor-in-an-aks-cluster-for-managed-grafana/comments#comments-startAzureDiagnosticsOpen Sourcehttps://www.poppastring.com/blog/feed/trackback/88fdf0ff-c4dc-4629-9e24-a262b8f552c9https://www.poppastring.com/blog/feed/pingbackhttps://www.poppastring.com/blog/post/88fdf0ff-c4dc-4629-9e24-a262b8f552c9Mark Downiehttps://www.poppastring.com/blog/we-shape-our-tools-thereafter-they-shape-us/comments#comments-starthttps://www.poppastring.com/blog/feed/rss/comments/88fdf0ff-c4dc-4629-9e24-a262b8f552c9We shape our tools thereafter they shape ushttps://www.poppastring.com/blog/post/88fdf0ff-c4dc-4629-9e24-a262b8f552c9https://www.poppastring.com/blog/we-shape-our-tools-thereafter-they-shape-usTue, 11 Jul 2023 07:37:21 GMT<div><p>I have had some productive push back from friends and ex-colleagues who have been trying to process the mostly mendacious AI news cycles. To be sure <a href="https://www.youtube.com/watch?v=jAHRbFetqII">there are many, many valid concerns for how AI is curated and implemented</a>, however, this particular concern appears to center around the idea that the upcoming wave of AI will negatively impact a large swathe of knowledge workers, so I am laying out my really high level thoughts to help counter some of that narrative.</p><p>Now most economists agree that the <em>efficiency of the production of goods and services is the main constraint on the pace of economic growth</em>. Additionally there is an assumed causal relationship between a growing economy and more hiring. In fact if we track the <a href="http://www.econlib.org/library/Enc/bios/Okun.html">relationship between jobs and growth using Okun’s Law</a> we see that <em>higher growth leads to lower unemployment</em>.</p><p>What I am hoping my friends (and hype driven media) have wrong about AIs impact on jobs is that <em>when you drive up productivity, a company is incentivized by profits to do way more of that profit making activity</em>, not less. My genuine, but unproven, opinion is that <em>making people more productive will encourage companies, at the macro level, to hire more people to meet the demands of a growing economy</em>.</p><p>AI will shape us but I am hopeful that it will not be in the way that our worst fears might suggest.</p><p><figure><a href="https://www.poppastring.com/blog/content/binary/Open-Live-Writer/We-shape-our-tools-thereafter-they-shape_132FC/matt-artz-lt2GzPlOAmc-unsplash_2.jpg"><img width="1400" height="981" title="matt-artz-lt2GzPlOAmc-unsplash" style="border: 0px currentcolor; border-image: none; display: inline; background-image: none;" alt="matt-artz-lt2GzPlOAmc-unsplash" src="https://www.poppastring.com/blog/content/binary/Open-Live-Writer/We-shape-our-tools-thereafter-they-shape_132FC/matt-artz-lt2GzPlOAmc-unsplash_thumb.jpg" border="0"></a></figure> <p align="center">Photo by <a href="https://unsplash.com/@mattartz?utm_source=unsplash&amp;utm_medium=referral&amp;utm_content=creditCopyText">Matt Artz</a> on <a href="https://unsplash.com/photos/lt2GzPlOAmc?utm_source=unsplash&amp;utm_medium=referral&amp;utm_content=creditCopyText">Unsplash</a></p></div>https://www.poppastring.com/blog/we-shape-our-tools-thereafter-they-shape-us/comments#comments-startArtificial IntelligenceProduct Managmenthttps://www.poppastring.com/blog/feed/trackback/ff0fb337-646f-460d-af50-a00b5414175chttps://www.poppastring.com/blog/feed/pingbackhttps://www.poppastring.com/blog/post/ff0fb337-646f-460d-af50-a00b5414175cMark Downiehttps://www.poppastring.com/blog/curiosity-unbounded/comments#comments-starthttps://www.poppastring.com/blog/feed/rss/comments/ff0fb337-646f-460d-af50-a00b5414175cCuriosity unboundedhttps://www.poppastring.com/blog/post/ff0fb337-646f-460d-af50-a00b5414175chttps://www.poppastring.com/blog/curiosity-unboundedThu, 29 Jun 2023 07:52:04 GMT<div><p>An excerpt from the speech given by <a href="https://www.technologyreview.com/2023/06/27/1073709/when-mit-met-sally/">Sally Kornbluth, MIT’s 18th president</a>:</p><blockquote><p><strong>“Curiosity is the passion to understand how things work and why, and how they can work better. Curiosity is also the one and only path to understanding one another—to empathy and appreciation and mutual respect. In effect, curiosity is the indispensable first step in both collaboration and community.”</strong></p></blockquote><p>When hiring developers in the past I made the mistake of searching explicitly for folks who confessed to working every waking hour on open source projects. In hindsight I realize how shallow that view of a “good” developer was. On reflection what I was actually looking for was a signal that demonstrated simple and pure curiosity. Today I would go further I would happily trade the gifted and clever mind for a curious one.</p><p><a href="https://www.poppastring.com/blog/content/binary/Open-Live-Writer/b2faf34564b7_139ED/coma-lego-land_2.jpg">c<img width="1400" height="607" title="COMA lego land exhbit" style="border: 0px currentcolor; border-image: none; display: inline; background-image: none;" alt="A lego set from the Columbus Museum of Art showing a Columbus street corner." src="https://www.poppastring.com/blog/content/binary/Open-Live-Writer/b2faf34564b7_139ED/coma-lego-land_thumb.jpg" border="0"></a></p></div>https://www.poppastring.com/blog/curiosity-unbounded/comments#comments-startMusingshttps://www.poppastring.com/blog/feed/trackback/93c82d6e-2e3f-49db-b182-47b5ec49ba6ahttps://www.poppastring.com/blog/feed/pingbackhttps://www.poppastring.com/blog/post/93c82d6e-2e3f-49db-b182-47b5ec49ba6aMark Downiehttps://www.poppastring.com/blog/identify-with-the-customer-problem/comments#comments-starthttps://www.poppastring.com/blog/feed/rss/comments/93c82d6e-2e3f-49db-b182-47b5ec49ba6aIdentify with the customer problemhttps://www.poppastring.com/blog/post/93c82d6e-2e3f-49db-b182-47b5ec49ba6ahttps://www.poppastring.com/blog/identify-with-the-customer-problemMon, 19 Jun 2023 05:39:32 GMT<div><p>I have been reflecting on my time at Microsoft and specifically what I consider my biggest mistakes, after some careful consideration I finally settled on a strategic fumble rather than an execution issue. I came into a product team focused almost exclusively on Visual Studio, a great team. However, by definition and mission we are focused on the solution provided within Visual Studio, but this is a solution oriented focus rather than a problem focus. <p>Ultimately you want to prepare yourself to tracks problems as broadly as possible, rather than being focused on a specific product or feature. Thankfully my purview has at times extended down to the framework and up to the cloud. My advice is to find a way to follow the customer friction wherever that leads, rather than focusing rigidly on a tool.<p><figure><a href="https://www.poppastring.com/blog/content/binary/Open-Live-Writer/Identify-with-the-customer-problem_106BF/tic-tac-toe_2.jpg"><img width="2313" height="906" title="tic-tac-toe" style="border: 0px currentcolor; border-image: none; display: inline; background-image: none;" alt="A tic-tac-toe board, pieces are metalic colored" src="https://www.poppastring.com/blog/content/binary/Open-Live-Writer/Identify-with-the-customer-problem_106BF/tic-tac-toe_thumb.jpg" border="0"></a></figure></div>https://www.poppastring.com/blog/identify-with-the-customer-problem/comments#comments-startProduct Managmenthttps://www.poppastring.com/blog/feed/trackback/66b9b873-4b33-49dc-ab21-4f898504d7eahttps://www.poppastring.com/blog/feed/pingbackhttps://www.poppastring.com/blog/post/66b9b873-4b33-49dc-ab21-4f898504d7eaMark Downiehttps://www.poppastring.com/blog/kubernetes-mutating-admission-webhook-for-dotnetmonitor/comments#comments-starthttps://www.poppastring.com/blog/feed/rss/comments/66b9b873-4b33-49dc-ab21-4f898504d7eaKubernetes mutating admission webhook for dotnet-monitor?https://www.poppastring.com/blog/post/66b9b873-4b33-49dc-ab21-4f898504d7eahttps://www.poppastring.com/blog/kubernetes-mutating-admission-webhook-for-dotnetmonitorSat, 17 Jun 2023 02:32:06 GMT<div><p>A couple of teams I am currently worked with on dotnet-monitor integration have expressed that there is a non-zero amount of friction when attempting to deploy dotnet-monitor into multiple environments. This friction is in the form of a bunch of duplicated configuration, and while that is not normally a problem, during an upgrade or modification of settings, it results in a ton of error prone copy paste work. </p><p>To help reduce this burden our team is attempting to validate if there is interest in using <a href="https://kubernetes.io/docs/reference/access-authn-authz/admission-controllers/#mutatingadmissionwebhook">Kubernetes mutating admission webhook</a> to aid in simplifying your Kubernetes deployments. Mutating admission can modify or accept/reject objects that are being created within Kubernetes. One typical use case is to inject a sidecar (like dotnet-monitor) to every pod that is being launched on a cluster. We are <a href="https://github.com/dotnet/dotnet-monitor/discussions/4672">soliciting feedback in this discussion here, <strong>please vote and comment</strong></a>.</p><p><figure><a href="https://www.poppastring.com/blog/content/binary/Open-Live-Writer/c096005fe1fa_E39B/xbox-controller_2.jpg"><img width="1400" height="1086" title="xbox-controller" style="border: 0px currentcolor; border-image: none; display: inline; background-image: none;" alt="xbox-controller" src="https://www.poppastring.com/blog/content/binary/Open-Live-Writer/c096005fe1fa_E39B/xbox-controller_thumb.jpg" border="0"></a></figure></div>https://www.poppastring.com/blog/kubernetes-mutating-admission-webhook-for-dotnetmonitor/comments#comments-start.NETDebuggingDiagnosticshttps://www.poppastring.com/blog/feed/trackback/88950390-e125-49ef-b76a-eca7d0c6285bhttps://www.poppastring.com/blog/feed/pingbackhttps://www.poppastring.com/blog/post/88950390-e125-49ef-b76a-eca7d0c6285bMark Downiehttps://www.poppastring.com/blog/building-the-arm64-visual-studio-experience/comments#comments-starthttps://www.poppastring.com/blog/feed/rss/comments/88950390-e125-49ef-b76a-eca7d0c6285bBuilding the Arm64 Visual Studio experiencehttps://www.poppastring.com/blog/post/88950390-e125-49ef-b76a-eca7d0c6285bhttps://www.poppastring.com/blog/building-the-arm64-visual-studio-experienceFri, 19 May 2023 08:30:46 GMT<div><p>When the native version of <a href="https://www.poppastring.com/blog/native-support-for-visual-studio-on-arm64-is-here">Arm64 Visual Studio</a> was released we knew that bringing along all the components and workloads in Visual Studio would take time. So I am really happy to share that the latest version of Visual Studio now support <a href="https://devblogs.microsoft.com/dotnet/dotnet-maui-dotnet-7/">MAUI</a>. This was <a href="https://developercommunity.visualstudio.com/t/Arm64-support-for-NET-Maui/10107707">driven by community requests</a> with lots of really compelling use cases for Project Volterra, Parallels on Mac, and of course, the venerable Surface Pro X.</p><p>But there is more to come, if you want the very latest workloads consider downloading the Preview, which now includes support for <strong>Node.js development</strong> (<a href="https://nodejs.org/en/blog/announcements/v20-release-announce">Node version 20</a>) and <strong>Linux and embedded development with C++</strong>.</p><p><a href="https://www.poppastring.com/blog/content/binary/Open-Live-Writer/Building-the-Arm64_13E1E/devblog-brand-visualstudio2022_2.png"><img width="560" height="350" title="devblog-brand-visualstudio2022" style="border: 0px currentcolor; border-image: none; display: inline; background-image: none;" alt="devblog-brand-visualstudio2022" src="https://www.poppastring.com/blog/content/binary/Open-Live-Writer/Building-the-Arm64_13E1E/devblog-brand-visualstudio2022_thumb.png" border="0"></a></p><p>Please note if you are using x64 Visual Studio emulated on Arm64 we will not auto upgrade you, and we do not support side by side installs of x64 and Arm64. To get the native experience uninstall x6 Visual Studio and grab the latest VS installer and it will auto install the correct version of Visual Studio for you.</p><p>p.s. <a href="https://support.microsoft.com/en-us/windows/options-for-using-windows-11-with-mac-computers-with-apple-m1-and-m2-chips-cd15fd62-9b34-4b78-b0bc-121baa3c568c">Parallels Desktop version 18 is now an official solution for running Arm versions of Windows 11 in a virtual environment on Apple M1/M2</a>. </p></div>https://www.poppastring.com/blog/building-the-arm64-visual-studio-experience/comments#comments-startArmVisual Studiohttps://www.poppastring.com/blog/feed/trackback/858ad44e-9f71-49ff-8c2c-81f2774a1f5ehttps://www.poppastring.com/blog/feed/pingbackhttps://www.poppastring.com/blog/post/858ad44e-9f71-49ff-8c2c-81f2774a1f5eMark Downiehttps://www.poppastring.com/blog/public-art-museums/comments#comments-starthttps://www.poppastring.com/blog/feed/rss/comments/858ad44e-9f71-49ff-8c2c-81f2774a1f5ePublic Art Museumshttps://www.poppastring.com/blog/post/858ad44e-9f71-49ff-8c2c-81f2774a1f5ehttps://www.poppastring.com/blog/public-art-museumsThu, 04 May 2023 07:52:21 GMT<div><p>I thoroughly enjoy museums, more specifically Art museums and I was taking inventory of some of the world class institution I have had the privilege to visit over the years. </p><p>Here is a list of the ones I have visited, in order, as best as I could recall.</p><ul><li><a href="https://www.kunsthaus.ch/">Kunsthaus Zürich, Switzerland</a></li><li><a href="https://www.wolverhamptonart.org.uk/">Wolverhampton Art Gallery, UK</a></li><li><a href="https://www.birminghammuseums.org.uk/">Birmingham Museum of Art, UK</a></li><li><a href="https://www.toledomuseum.org/">Toledo Museum of Art Museum</a></li><li><a href="https://www.columbusmuseum.org/">Columbus Museum of Art</a></li><li><a href="https://www.louvre.fr/en/">Louvre, France</a></li><li><a href="https://en.chateauversailles.fr/">Palace of Versailles, France</a></li><li><a href="https://www.cincinnatiartmuseum.org/">Cincinnati Art Museum</a></li><li><a href="https://www.clevelandart.org/">Cleveland Museum of Art</a></li><ul><!--StartFragment--> </ul><li><a href="https://ncartmuseum.org/">North Carolina Museum of Art</a></li><!--EndFragment--><li><a href="https://dia.org/">Detroit Institute of Arts</a></li><li><a href="https://www.seattleartmuseum.org/">Seattle Art Museum</a></li><li><a href="https://www.cocaseattle.org/">Center on Contemporary Art Seattle</a> </li><li><a href="https://www.artic.edu/">Art Institute of Chicago</a></li><li><a href="https://www.portlandmuseum.org/">Portland Museum of Art</a></li><li><a href="https://www.museivaticani.va/content/museivaticani/en.html">Vatican Museum, Italy</a></li><li><a href="http://www.basilicasanmarco.it/basilica/museo-marciano/?lang=en">St. Mark’s Museum, Italy</a></li><li><a href="https://www.musee-orsay.fr/en">Musée d'Orsay, France</a></li></ul><p>I am fully aware of the ways that many of these institutions can be problematic, and that many pieces on display or in storage <a href="https://www.bbc.co.uk/news/uk-england-cambridgeshire-58927240">represent stolen pieces of cultures from all across the globe</a>. For example:</p><blockquote><p>Almost 1,000 bronzes were taken after Benin City, in present-day Nigeria, was occupied by imperial troops in 1897, according to the British Museum. About 900 of those artefacts are housed in museums and collections around the world, including the British Museum.</p></blockquote><p>This is just one example, there are so many more. The consistent usage of the word <strong><a href="https://www.merriam-webster.com/dictionary/provenance">provenance</a></strong> in the western art world is not possible without a deep sense of irony.</p><p><em>Last update: June 8th, 2023</em></p> <figure><a href="https://www.poppastring.com/blog/content/binary/Open-Live-Writer/85115fe78a8c_13778/art-columbus-art-district_2.jpg"><img width="1499" height="668" title="Art statue in Columbus Ohio" style="border: 0px currentcolor; border-image: none; display: inline; background-image: none;" alt="Art statue in the Art District of Columbus as the sun is setting" src="https://www.poppastring.com/blog/content/binary/Open-Live-Writer/85115fe78a8c_13778/art-columbus-art-district_thumb.jpg" border="0"></a></figure></div>https://www.poppastring.com/blog/public-art-museums/comments#comments-startMusingshttps://www.poppastring.com/blog/feed/trackback/247979b1-6d93-4f8c-aa0d-c469630d0e03https://www.poppastring.com/blog/feed/pingbackhttps://www.poppastring.com/blog/post/247979b1-6d93-4f8c-aa0d-c469630d0e03Mark Downiehttps://www.poppastring.com/blog/the-return-of-windbg/comments#comments-starthttps://www.poppastring.com/blog/feed/rss/comments/247979b1-6d93-4f8c-aa0d-c469630d0e03The return of WinDbghttps://www.poppastring.com/blog/post/247979b1-6d93-4f8c-aa0d-c469630d0e03https://www.poppastring.com/blog/the-return-of-windbgSat, 15 Apr 2023 06:30:01 GMT<div><p>We finally have a <a href="https://learn.microsoft.com/windows-hardware/drivers/debugger/">new version of WinDbg</a> that is available outside of the Microsoft Store, and as an added bonus that Preview label is gone. This release also represents a welcome update to the UX architecture, to what I assume is WPF.</p><blockquote><p>This latest version features a more modern user experience with an updated interface, fully fledged scripting capabilities, an extensible debugging data model, built-in Time Travel Debugging (TTD) support, and many additional features.</p></blockquote><p>To get and stay on the latest release, <a href="https://learn.microsoft.com/windows-hardware/drivers/debugger/">install WinDbg as described here</a>. The version of WinDbg available from the Microsoft Store will no longer be updated.</p><p>One more hidden gem, <strong>this version officially supports Arm64!</strong></p><p><figure><a href="https://www.poppastring.com/blog/content/binary/Open-Live-Writer/85f5c7b7e907_1273F/analyzing-memory-by-bing-image-creator.jpg"><img width="1024" height="512" title="Analyzing memory generated by bing image creator" style="border: 0px currentcolor; border-image: none; display: inline; background-image: none;" alt="A magnifying glass over what looks like code." src="https://www.poppastring.com/blog/content/binary/Open-Live-Writer/85f5c7b7e907_1273F/analyzing-memory-by-bing-image-creator_thumb.jpg" border="0"></a></figure></div>https://www.poppastring.com/blog/the-return-of-windbg/comments#comments-startDebuggingDiagnosticsDump Analysishttps://www.poppastring.com/blog/feed/trackback/0d3cd127-e16b-4aa1-8b57-1df0a320ad8dhttps://www.poppastring.com/blog/feed/pingbackhttps://www.poppastring.com/blog/post/0d3cd127-e16b-4aa1-8b57-1df0a320ad8dMark Downiehttps://www.poppastring.com/blog/debugging-threads-with-the-parallel-stacks-window/comments#comments-starthttps://www.poppastring.com/blog/feed/rss/comments/0d3cd127-e16b-4aa1-8b57-1df0a320ad8dDebugging threads with the Parallel Stacks windowhttps://www.poppastring.com/blog/post/0d3cd127-e16b-4aa1-8b57-1df0a320ad8dhttps://www.poppastring.com/blog/debugging-threads-with-the-parallel-stacks-windowFri, 31 Mar 2023 21:59:17 GMT<div><p>For those of you who use the Parallel Stacks window I am really happy to share there are some really important improvements to watch out for over the next few releases. In this chat with Robert Green we show off the internal preview of our changes which include:</p> <p> <ul><li>New entry point to Parallel Stacks from the Call Stack window</li><li>New meta frames in Parallel Stacks and Call Stacks window</li><li>A <strong>Show External Code</strong> toggle</li><li>Double click on the Node header selects the entire stack</li><li>CTRL-C copies the Call Stacks and can be shared anywhere</li></ul> <div> <iframe width="560" height="315" title="YouTube video player" src="https://www.youtube.com/embed/L8DybIxiSvQ" frameborder="0" allowfullscreen="" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share"></iframe> </div> <p>Here is a link to the follow up interview on <a href="https://learn.microsoft.com/en-us/shows/visual-studio-toolbox/debugging-tasks-with-the-parallel-stacks-window">Debugging Tasks with the Parallel Stacks window</a>.</p><p>I am loving the work <a href="https://www.linkedin.com/in/ramkumar-ramesh-a358a89b/">Ram</a> is doing in this space, he is adding much needed features and removing frictions that exist in the product, especially when investigating processes with many threads and Task. By the way <a href="https://www.poppastring.com/blog/category/dump-analysis">this also works when analyzing dumps!</a> I cannot wait to get these improvements into the official build.</p><p><figure><a href="https://www.poppastring.com/blog/content/binary/Open-Live-Writer/Debugging-threads-with-the-Parallel-Stac_AF7E/parallel-threads-unsplash-min_2.jpg"><img width="1200" height="718" title="parallel-threads-unsplash-min" style="border: 0px currentcolor; border-image: none; display: inline; background-image: none;" alt="parallel-threads-unsplash-min" src="https://www.poppastring.com/blog/content/binary/Open-Live-Writer/Debugging-threads-with-the-Parallel-Stac_AF7E/parallel-threads-unsplash-min_thumb.jpg" border="0"></a></figure><p align="center">Photo by <a href="https://unsplash.com/@deepakrautela?utm_source=unsplash&amp;utm_medium=referral&amp;utm_content=creditCopyText">Deepak Rautela</a> on <a href="https://unsplash.com/s/photos/parallel?utm_source=unsplash&amp;utm_medium=referral&amp;utm_content=creditCopyText">Unsplash</a></p></div>https://www.poppastring.com/blog/debugging-threads-with-the-parallel-stacks-window/comments#comments-startDebuggingVisual Studiohttps://www.poppastring.com/blog/feed/trackback/22194e78-2ac8-4350-a895-64ce97d4f210https://www.poppastring.com/blog/feed/pingbackhttps://www.poppastring.com/blog/post/22194e78-2ac8-4350-a895-64ce97d4f210Mark Downiehttps://www.poppastring.com/blog/brt-for-columbus/comments#comments-starthttps://www.poppastring.com/blog/feed/rss/comments/22194e78-2ac8-4350-a895-64ce97d4f210BRT for Columbushttps://www.poppastring.com/blog/post/22194e78-2ac8-4350-a895-64ce97d4f210https://www.poppastring.com/blog/brt-for-columbusMon, 27 Mar 2023 09:13:44 GMT<div><p>Going to be honest when I linked to the <a href="https://www.poppastring.com/blog/columbus-fantasy-transit-map">aspirational Columbus Fantasy Map</a>, I was hoping for light rail in some distant future, something similar to the <a href="https://urbanrail.net/af/tunis/tunis.htm">Tunis Light Metro</a>. When in fact what Columbus is going for is <a href="https://en.wikipedia.org/wiki/Bus_rapid_transit">Bus Rapid Transit (BRT)</a>. BRT has grown in the U.S. over the last 15 years, the density of communities is forcing everyone to look for cost effective alternatives to rail systems. BRT systems operate in some of the largest cities including <a href="https://www.metro.net/about/brt/">Los Angeles</a> but is also finding footing in mid-sized metropolitan areas like <a href="https://www.metrolinemap.com/metro/cleveland/">Cleveland</a>.</p><p>The key feature of BRT is the integration and development of dedicated lanes, BRT is able to avoid the delays associated with normal traffic that slow cars and regular regular bus services. The <a href="https://cota.com/">Central Ohio Transit Authority (COTA)</a> has detailed plans for Bus Rapid Transit routes along a Northwest Corridor, linking the suburb of Dublin with downtown Columbus. </p><p>This corridor is incredibly important for many reasons, not least of which is the fact 30% of the people in the area do not have access to their own vehicles, additionally <a href="https://linkuscolumbus.com/northwest/">NW corridor contains</a>:</p><ul><li>30% of all jobs in Franklin County </li><li>3 of Central Ohio's largest employment hubs</li><li>Access to 5 of Columbus' largest sports and entertainment venues</li></ul><p>The following is a rendering for the new rapid transit line starting at the Ohio University campus in Dublin, along Olentangy River Road, which would connect downtown through The Ohio State University campus and north to Bethel Road.</p><p><figure><a href="https://www.poppastring.com/blog/content/binary/Open-Live-Writer/2bd66dff4ea0_140A7/brt-concept-phase-2_4.png"><img width="1200" height="666" title="Bus Rapid Transit Concept for Columbus Ohio" style="border: 0px currentcolor; border-image: none; display: inline; background-image: none;" alt="A series of buses in dedicated bus lanes, with wide sidewalks, buffered bike lanes and shared micromobility hubs." src="https://www.poppastring.com/blog/content/binary/Open-Live-Writer/2bd66dff4ea0_140A7/brt-concept-phase-2_thumb_1.png" border="0"></a></figure><p>For a variety of reasons I still would prefer Light Rail, however, given the years of lost broken promises, this feels like a genuine step in any direction. Community members who want to be notified of upcoming opportunities to participate can sign up for email notifications <a href="https://linkuscolumbus.com/contact/">here</a>.</p></div>https://www.poppastring.com/blog/brt-for-columbus/comments#comments-startColumbusMusingshttps://www.poppastring.com/blog/feed/trackback/31130c31-d1a6-4a64-925f-c60924e1d03ehttps://www.poppastring.com/blog/feed/pingbackhttps://www.poppastring.com/blog/post/31130c31-d1a6-4a64-925f-c60924e1d03eMark Downiehttps://www.poppastring.com/blog/columbus-fantasy-transit-map/comments#comments-starthttps://www.poppastring.com/blog/feed/rss/comments/31130c31-d1a6-4a64-925f-c60924e1d03eColumbus Fantasy Transit Maphttps://www.poppastring.com/blog/post/31130c31-d1a6-4a64-925f-c60924e1d03ehttps://www.poppastring.com/blog/columbus-fantasy-transit-mapSat, 04 Mar 2023 10:19:08 GMT<div><p>My hometown of Columbus, Ohio is the largest city in the US without any public rail based transit. However, new developments inspired by the <a href="https://www.whitehouse.gov/briefing-room/statements-releases/2021/11/06/fact-sheet-the-bipartisan-infrastructure-deal/">Bipartisan Infrastructure Act</a> and in conjunction with the Columbus’s <a href="https://linkuscolumbus.com/">LinkUS plan</a> may radically change the cities transportation outlook (<a href="https://www.youtube.com/watch?v=zJR_hAd0Hp4">check out the LinkUS animation</a>). </p> <p>This has great potential for our city, the current growth of the city is developing outside of the I-270 which means over the next few years the population will be more geographically dispersed, which in turn puts additional pressure on the city to invest in existing highways. My hope is that we greatly expand our bus routes, and create light rail options.</p><p>In the meantime I continue to be inspired by the vision of local designer <a href="https://tyznik.com/">Michael Tyznik</a>, here is an excerpt from his site:</p> <blockquote><p>I've been imagining new transit systems for Columbus my whole life, and I'm currently on my fourth iteration of the map. I hope with each map to create a more realistic, functional system, as well as a more refined and modern map.</p><p>My latest map, finished in 2018, incorporates Columbus's new CMAX bus rapid transit line, and elevates BRT to the same level of importance as light rail. The light rail system uses freight rail rights of way throughout the city, with new rights of way in areas like the airport. Inspired by Jarett Walker, I've also created a grid system of local bus lines to fill in gaps in service throughout the city.</p></blockquote><p><figure><a href="https://www.poppastring.com/blog/content/binary/Open-Live-Writer/ff07d03e6f62_14E37/columbus-map-light-rail-2018-downtown_4.png"><img width="1792" height="1202" title="Columbus Light Rail Map" style="border: 0px currentcolor; border-image: none; display: inline; background-image: none;" alt="Columbus map of a fantasy light rail system developed in 2018 by Michael Tyznik" src="https://www.poppastring.com/blog/content/binary/Open-Live-Writer/ff07d03e6f62_14E37/columbus-map-light-rail-2018-downtown_thumb_1.png" border="0"></a></figure> <p>For a more detailed map check out the full <a href="https://tyznik.com/work/columbus">Columbus Fantasy Transit Map</a> developed by Michael. Also check out this wonderful <a href="https://urbanists.video/w/374af261-51b1-4cd8-b493-61dab9fd0b96">video by Heartland Urbanist that summarizes the history and the opportunity of the biggest US city with no rail</a>.</div>https://www.poppastring.com/blog/columbus-fantasy-transit-map/comments#comments-startMusings