<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0" xmlns:cc="http://cyber.law.harvard.edu/rss/creativeCommonsRssModule.html">
    <channel>
        <title><![CDATA[Stories by Derek Comartin on Medium]]></title>
        <description><![CDATA[Stories by Derek Comartin on Medium]]></description>
        <link>https://medium.com/@codeopinion?source=rss-c5506f7683aa------2</link>
        <image>
            <url>https://cdn-images-1.medium.com/fit/c/150/150/1*To_I0Ars8xBHgI0xh-F0mg.jpeg</url>
            <title>Stories by Derek Comartin on Medium</title>
            <link>https://medium.com/@codeopinion?source=rss-c5506f7683aa------2</link>
        </image>
        <generator>Medium</generator>
        <lastBuildDate>Fri, 22 May 2026 13:31:36 GMT</lastBuildDate>
        <atom:link href="https://medium.com/@codeopinion/feed" rel="self" type="application/rss+xml"/>
        <webMaster><![CDATA[yourfriends@medium.com]]></webMaster>
        <atom:link href="http://medium.superfeedr.com" rel="hub"/>
        <item>
            <title><![CDATA[Roundup #32]]></title>
            <link>https://medium.com/@codeopinion/roundup-32-2e3b0c722c89?source=rss-c5506f7683aa------2</link>
            <guid isPermaLink="false">https://medium.com/p/2e3b0c722c89</guid>
            <dc:creator><![CDATA[Derek Comartin]]></dc:creator>
            <pubDate>Thu, 17 Jan 2019 21:55:03 GMT</pubDate>
            <atom:updated>2019-01-17T21:59:24.360Z</atom:updated>
            <content:encoded><![CDATA[<p>Here are the things that caught my eye this week in .NET. I’d love to hear what you found most interesting this week. Let me know in the comments or on Twitter.</p><p><a href="https://twitter.com/codeopinion?ref_src=twsrc%5Etfw">Follow @codeopinion</a></p><h4><a href="https://www.youtube.com/watch?v=1koWtKkKb_o">High Performance IO with System.IO.Pipelines</a></h4><blockquote>Pipelines was born from the work the .NET Core team was doing to make it easier to do high performance IO in .NET.</blockquote><blockquote>In this episode, Pavel Krymets (@pakrym) and David Fowler (@davidfowl) come on the show to give us an overview of how the Pipelines programming model works, as well as give show us a few demos on how to use the API.</blockquote><iframe src="https://cdn.embedly.com/widgets/media.html?src=https%3A%2F%2Fwww.youtube.com%2Fembed%2F1koWtKkKb_o%3Ffeature%3Doembed&amp;url=http%3A%2F%2Fwww.youtube.com%2Fwatch%3Fv%3D1koWtKkKb_o&amp;image=https%3A%2F%2Fi.ytimg.com%2Fvi%2F1koWtKkKb_o%2Fhqdefault.jpg&amp;key=a19fcc184b9711e1b4764040d3dc5c07&amp;type=text%2Fhtml&amp;schema=youtube" width="854" height="480" frameborder="0" scrolling="no"><a href="https://medium.com/media/b1fa694b48271a5b3baf3b2d6034e1cd/href">https://medium.com/media/b1fa694b48271a5b3baf3b2d6034e1cd/href</a></iframe><p>Link: <a href="https://www.youtube.com/watch?v=1koWtKkKb_o">https://www.youtube.com/watch?v=1koWtKkKb_o</a></p><h4><a href="https://6figuredev.com/podcast/episode-074-libraries-vs-frameworks-w-dennis-doomen/">Libraries vs Frameworks w/ Dennis Doomen</a></h4><blockquote>Dennis Doomen is on an everlasting quest for better solutions that will significantly improve the efficiency, the quality and the productivity of your software development teams.</blockquote><p>And among other things he is the author of Fluent Assertions, an API for asserting the results of unit tests in .NET.</p><p>Link: <a href="https://6figuredev.com/podcast/episode-074-libraries-vs-frameworks-w-dennis-doomen/">https://6figuredev.com/podcast/episode-074-libraries-vs-frameworks-w-dennis-doomen/</a></p><h3><a href="https://blog.jetbrains.com/dotnet/2019/01/17/performance-profiling-rider-2018-3-whats-new/">Performance Profiling in Rider</a></h3><blockquote>If you’re an active Rider 2018.3 user or just follow our blog, you probably know that Rider just got an integrated performance profiler based on JetBrains dotTrace. Though we’ve already reviewed the <a href="https://blog.jetbrains.com/dotnet/2018/10/22/performance-profiling-net-code-rider-integrated-dottrace/">profiler features on the EAP stage</a>, the release version brings some important changes, especially concerning profiling session configuration. Read this post to learn more about the changes.</blockquote><p>Link: <a href="https://blog.jetbrains.com/dotnet/2019/01/17/performance-profiling-rider-2018-3-whats-new/">https://blog.jetbrains.com/dotnet/2019/01/17/performance-profiling-rider-2018-3-whats-new/</a></p><h4><a href="https://plugins.jetbrains.com/plugin/10395-cyclomaticcomplexity">Rider Cyclomatic Complexity Plugin</a></h4><h3>Matthias 👻 on Twitter</h3><p>Around 7 years ago I went to StackOverlfow and asked for a tool that shows Cyclomatic Complexity metrics next to methods. Today I added CodeVision support in our CC plugin for @jetbrainsrider which does exactly that. That&#39;s exciting! 🥳 https://t.co/thEKWscFBr</p><p>Link: <a href="https://plugins.jetbrains.com/plugin/10395-cyclomaticcomplexity">https://plugins.jetbrains.com/plugin/10395-cyclomaticcomplexity</a></p><h4><a href="https://www.youtube.com/watch?v=-pDyNsB9Zr0">What We Got Wrong: Lessons from the Birth of Microservices</a></h4><blockquote>Ben Sigelman talks about what Google got wrong about microservices, the lessons learned along the way and how to apply those lessons today.</blockquote><iframe src="https://cdn.embedly.com/widgets/media.html?src=https%3A%2F%2Fwww.youtube.com%2Fembed%2F-pDyNsB9Zr0%3Ffeature%3Doembed&amp;url=http%3A%2F%2Fwww.youtube.com%2Fwatch%3Fv%3D-pDyNsB9Zr0&amp;image=https%3A%2F%2Fi.ytimg.com%2Fvi%2F-pDyNsB9Zr0%2Fhqdefault.jpg&amp;key=a19fcc184b9711e1b4764040d3dc5c07&amp;type=text%2Fhtml&amp;schema=youtube" width="854" height="480" frameborder="0" scrolling="no"><a href="https://medium.com/media/95716548b8328a48817c6971e9f1773f/href">https://medium.com/media/95716548b8328a48817c6971e9f1773f/href</a></iframe><p>Link: <a href="https://www.youtube.com/watch?v=-pDyNsB9Zr0">https://www.youtube.com/watch?v=-pDyNsB9Zr0</a></p><p><a href="https://twitter.com/codeopinion?ref_src=twsrc%5Etfw">Follow @codeopinion</a></p><h4>Enjoy this post? Subscribe!</h4><p>Subscribe to our weekly Newsletter and stay tuned.</p><p>Leave this field empty if you’re human:</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=2e3b0c722c89" width="1" height="1" alt="">]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Roundup #31]]></title>
            <link>https://medium.com/@codeopinion/roundup-31-48eb2b338892?source=rss-c5506f7683aa------2</link>
            <guid isPermaLink="false">https://medium.com/p/48eb2b338892</guid>
            <dc:creator><![CDATA[Derek Comartin]]></dc:creator>
            <pubDate>Fri, 11 Jan 2019 00:33:49 GMT</pubDate>
            <atom:updated>2019-01-11T00:37:53.488Z</atom:updated>
            <content:encoded><![CDATA[<p>Here are the things that caught my eye this week in .NET. I’d love to hear what you found most interesting this week. Let me know in the comments or on Twitter.</p><p><a href="https://twitter.com/codeopinion?ref_src=twsrc%5Etfw">Follow @codeopinion</a></p><h4><a href="https://medium.com/microsoft-open-source-stories/starting-the-net-open-source-revolution-e0268b02ac8a">Starting the .NET Open Source Revolution</a></h4><blockquote>Today building open source software at Microsoft is normal — but when I started at Microsoft in 2007, it sure wasn’t. It took a few years to figure out the right thing to do and to get the big ship that is Microsoft turned into the wind of open source. But we’re there now and I look back on those early challenges with a smile. This is my story of the first successful open source project at Microsoft and how it paved the way to where we are today.</blockquote><p>Link: <a href="https://medium.com/microsoft-open-source-stories/starting-the-net-open-source-revolution-e0268b02ac8a">https://medium.com/microsoft-open-source-stories/starting-the-net-open-source-revolution-e0268b02ac8a</a></p><h4><a href="https://andrewlock.net/running-async-tasks-on-app-startup-in-asp-net-core-part-1/">Running async tasks on app startup in ASP.NET Core (Part 1)</a></h4><blockquote>Sometimes you need to perform one-off initialisation logic before your app starts up properly. For example, you might want to <a href="https://andrewlock.net/adding-validation-to-strongly-typed-configuration-objects-in-asp-net-core/">validate your configuration is correct</a>, populate a cache, or <a href="https://docs.microsoft.com/en-us/ef/core/managing-schemas/migrations/#apply-migrations-at-runtime">run database migrations</a>. In this post, I look at the options available and show some simple methods and extension points that I think solve the problem well.</blockquote><p>Link: <a href="https://andrewlock.net/running-async-tasks-on-app-startup-in-asp-net-core-part-1/">https://andrewlock.net/running-async-tasks-on-app-startup-in-asp-net-core-part-1/</a></p><h4><a href="https://github.com/JosephWoodward/Serilog-Sinks-Loki">Serilog Sink for Loki</a></h4><p>This is a Serilog Sink for Grafana’s new <a href="https://grafana.com/loki">Loki Log Aggregator</a>.</p><p>What is Loki?</p><blockquote>Loki is a horizontally-scalable, highly-available, multi-tenant log aggregation system inspired by Prometheus. It is designed to be very cost effective and easy to operate, as it does not index the contents of the logs, but rather a set of labels for each log stream.</blockquote><p>Link: <a href="https://github.com/JosephWoodward/Serilog-Sinks-Loki">https://github.com/JosephWoodward/Serilog-Sinks-Loki</a></p><h4><a href="https://stebet.net/monitoring-gc-and-memory-allocations-with-net-core-2-2-and-application-insights/">Monitoring GC and memory allocations with .NET Core 2.2 and Application Insights</a></h4><blockquote>It all started when we were migrating some of our service from .NET Framework to .NET Core. We have been using <a href="https://docs.microsoft.com/en-us/azure/azure-monitor/app/app-insights-overview">Application Insights</a>, using it’s performance counter collection feature to monitor performance counters on our Windows server that run our applications. We soon discovered when we moved over to .NET Core that we’d have to do things differently, since performance counters aren’t supported in Application Insights for .NET Core.</blockquote><p>Link: <a href="https://stebet.net/monitoring-gc-and-memory-allocations-with-net-core-2-2-and-application-insights/">https://stebet.net/monitoring-gc-and-memory-allocations-with-net-core-2-2-and-application-insights/</a></p><h4><a href="https://www.strathweb.com/2019/01/collectible-assemblies-in-net-core-3-0/">Collectible assemblies in .NET Core 3.0</a></h4><blockquote>Since the beginning of .NET Core, the one feature that I have been most anxiously waiting for, has been support for collectible assemblies. It took a while (a while!), but finally, in .NET Core 3.0 (at the time of writing <em>3.0.0-preview-27122–01</em> from 2018–12–04), it’s here.</blockquote><blockquote>It’s going to be a killer functionality, that will support some excellent use cases in .NET Core — especially around application plugins, extensibility and dynamic assembly generation.</blockquote><p>Link: <a href="https://www.strathweb.com/2019/01/collectible-assemblies-in-net-core-3-0/">https://www.strathweb.com/2019/01/collectible-assemblies-in-net-core-3-0/</a></p><h4><a href="https://jeremydmiller.com/2019/01/09/alba-3-0-testhost-on-steroids-and-http-contract-testing-for-net/">Alba 3.0 — TestServer on steroids and HTTP contract testing for .NET</a></h4><blockquote>Alba is a library you can use in combination with xUnit/NUnit to much more easily author integration tests against ASP.Net Core applications by running HTTP requests in process.</blockquote><p>Link: <a href="https://jeremydmiller.com/2019/01/09/alba-3-0-testhost-on-steroids-and-http-contract-testing-for-net/">https://jeremydmiller.com/2019/01/09/alba-3-0-testhost-on-steroids-and-http-contract-testing-for-net/</a></p><p><a href="https://twitter.com/codeopinion?ref_src=twsrc%5Etfw">Follow @codeopinion</a></p><h4>Enjoy this post? Subscribe!</h4><p>Subscribe to our weekly Newsletter and stay tuned.</p><p>Leave this field empty if you’re human:</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=48eb2b338892" width="1" height="1" alt="">]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Roundup #30]]></title>
            <link>https://medium.com/@codeopinion/roundup-30-d1d13947e829?source=rss-c5506f7683aa------2</link>
            <guid isPermaLink="false">https://medium.com/p/d1d13947e829</guid>
            <dc:creator><![CDATA[Derek Comartin]]></dc:creator>
            <pubDate>Thu, 03 Jan 2019 21:41:18 GMT</pubDate>
            <atom:updated>2019-01-03T21:45:06.253Z</atom:updated>
            <content:encoded><![CDATA[<p>Here are the things that caught my eye this week. I’d love to hear what you found most interesting this week. Let me know in the comments or on Twitter.</p><p><a href="https://twitter.com/intent/follow?screen_name=codeopinion">Follow @codeopinion</a></p><h4><a href="https://github.com/damianh/ProxyKit">ProxyKit</a></h4><h3>Damian Hickey ❄️ on Twitter</h3><p>ProxyKit 1.0.0 released. A toolkit for creating (reverse) proxies on https://t.co/4ByDHwXBWr Core. https://t.co/o0av6dBPsB Thanks to @ErwinVanDerValk , @oguzsoykan, @jchannon, @Joe_Stead and @adamralph for help and contributions. And for Aspnet labs for the original code.</p><blockquote>A toolkit to create <strong>HTTP proxies</strong> hosted in ASP.NET Core as middleware. This allows focused code-first proxies that can be embedded in existing ASP.NET Core applications or deployed as a standalone server. Deployable anywhere ASP.NET Core is deployable such as Windows, Linux, Containers, and Serverless (with caveats).</blockquote><p>Link: <a href="https://github.com/damianh/ProxyKit">https://github.com/damianh/ProxyKi</a>t</p><h4><a href="https://github.com/aliostad/BeeHive">BeeHive</a></h4><blockquote>A <strong>Zero Friction</strong> mini-Framework for cloud Actors — currently for Windows Azure only. Implementation is very simple — if you need a complex implementation of the Actor Model, you are probably doing it wrong. It supports <strong>.NET Framework 4.5.2+ and .NET Standard 2.0+.</strong></blockquote><p>Link: <a href="https://github.com/aliostad/BeeHive">https://github.com/aliostad/BeeHive</a></p><h4><a href="https://www.marcbruins.nl/C-8-Nullable-reference-types">C# 8 Nullable Reference Types</a></h4><blockquote>C# 8.0 will introduce a new groundbreaking feature called Nullable reference types, this feature will change the way we currently develop our software in C# by making, you guessed it, reference types nullable.</blockquote><p>Link: <a href="https://www.marcbruins.nl/C-8-Nullable-reference-types">https://www.marcbruins.nl/C-8-Nullable-reference-types</a></p><h4><a href="https://www.youtube.com/watch?v=O8xLxNje30M">Close Loops &amp; Opening Minds: How to Take Control of Systems, Big &amp; Small</a></h4><blockquote>Whether it’s distributing configurations and customer settings, launching instances, or responding to surges in load, having a great control plane is key to the success of any system or service. Come hear about the techniques we use to build stable and scalable control planes at Amazon. We dive deep into the designs that power the most reliable systems at AWS. We share hard-earned operational lessons and explain academic control theory in easy-to-apply patterns and principles that are immediately useful in your own designs.</blockquote><iframe src="https://cdn.embedly.com/widgets/media.html?src=https%3A%2F%2Fwww.youtube.com%2Fembed%2FO8xLxNje30M%3Ffeature%3Doembed&amp;url=http%3A%2F%2Fwww.youtube.com%2Fwatch%3Fv%3DO8xLxNje30M&amp;image=https%3A%2F%2Fi.ytimg.com%2Fvi%2FO8xLxNje30M%2Fhqdefault.jpg&amp;key=a19fcc184b9711e1b4764040d3dc5c07&amp;type=text%2Fhtml&amp;schema=youtube" width="854" height="480" frameborder="0" scrolling="no"><a href="https://medium.com/media/0990df6d8e5dcabeaa30cdbd90136e75/href">https://medium.com/media/0990df6d8e5dcabeaa30cdbd90136e75/href</a></iframe><p>Link: <a href="https://www.youtube.com/watch?v=O8xLxNje30M">https://www.youtube.com/watch?v=O8xLxNje30M</a></p><p><a href="https://twitter.com/intent/follow?screen_name=codeopinion">Follow @codeopinion</a></p><h4>Enjoy this post? Subscribe!</h4><p>Subscribe to our weekly Newsletter and stay tuned.</p><p>Leave this field empty if you’re human:</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=d1d13947e829" width="1" height="1" alt="">]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Practical ASP.NET Core SignalR: Server Hubs]]></title>
            <link>https://medium.com/@codeopinion/practical-asp-net-core-signalr-server-hubs-6256f7882548?source=rss-c5506f7683aa------2</link>
            <guid isPermaLink="false">https://medium.com/p/6256f7882548</guid>
            <dc:creator><![CDATA[Derek Comartin]]></dc:creator>
            <pubDate>Thu, 03 Jan 2019 02:47:37 GMT</pubDate>
            <atom:updated>2019-01-03T02:51:24.108Z</atom:updated>
            <content:encoded><![CDATA[<figure><img alt="Practical ASP.NET Core SignalR" src="https://cdn-images-1.medium.com/max/267/0*yrt_VrgFph8SiVQN.png" /></figure><p>In this section, I’m going to extend my existing ASP.NET Core application to explore more of what SignalR Server Hubs have to offer.</p><p>This blog post is apart of a course that is a complete step-by-setup guide on how to build real-time web applications using ASP.NET Core SignalR. By the end of this course, you’ll be able to build real-world, scalable, production applications using the tools and techniques provided in this course.</p><p>If you haven’t already, check out the prior sections of this course.</p><ol><li><a href="https://codeopinion.com/practical-asp-net-core-signalr/">Course Overview</a></li><li><a href="https://codeopinion.com/practical-asp-net-core-signalr-overview/">ASP.NET Core SignalR Overview</a></li><li><a href="https://codeopinion.com/practical-asp-net-core-signalr-basics/">Basics</a></li></ol><h4>SignalR Server Hubs</h4><iframe src="https://cdn.embedly.com/widgets/media.html?src=https%3A%2F%2Fwww.youtube.com%2Fembed%2FirXaj-3buKQ%3Ffeature%3Doembed&amp;url=http%3A%2F%2Fwww.youtube.com%2Fwatch%3Fv%3DirXaj-3buKQ&amp;image=https%3A%2F%2Fi.ytimg.com%2Fvi%2FirXaj-3buKQ%2Fhqdefault.jpg&amp;key=a19fcc184b9711e1b4764040d3dc5c07&amp;type=text%2Fhtml&amp;schema=youtube" width="854" height="480" frameborder="0" scrolling="no"><a href="https://medium.com/media/428dbe97355700dcd6aa39fd0356c641/href">https://medium.com/media/428dbe97355700dcd6aa39fd0356c641/href</a></iframe><p>A SignalR Server Hub is a primary point at which all communication between client and server occur. You define methods in a hub that can be called by the client. And in the client code, we can define methods that our hub can call.</p><p>We can define methods on our hub that can communicate directly with the specific client (caller) who is making the call to our hub. I’m going to add a new method to our existing MessageHub called SendMessageToCaller</p><iframe src="" width="0" height="0" frameborder="0" scrolling="no"><a href="https://medium.com/media/f769e14be321cef867efd8d58d170382/href">https://medium.com/media/f769e14be321cef867efd8d58d170382/href</a></iframe><h4>Clients</h4><iframe src="https://cdn.embedly.com/widgets/media.html?src=https%3A%2F%2Fwww.youtube.com%2Fembed%2F5Kqpca3kcsc%3Ffeature%3Doembed&amp;url=http%3A%2F%2Fwww.youtube.com%2Fwatch%3Fv%3D5Kqpca3kcsc&amp;image=https%3A%2F%2Fi.ytimg.com%2Fvi%2F5Kqpca3kcsc%2Fhqdefault.jpg&amp;key=a19fcc184b9711e1b4764040d3dc5c07&amp;type=text%2Fhtml&amp;schema=youtube" width="854" height="480" frameborder="0" scrolling="no"><a href="https://medium.com/media/75eb1f1bde2cc3a72568d14d59f55147/href">https://medium.com/media/75eb1f1bde2cc3a72568d14d59f55147/href</a></iframe><p>We can also send data to specific clients. To do so, we simply need to know the ConnectionId of the client we want to send data to.</p><p>I’ll add a new method called SendMessageToUser which will accept a connectionId as the first parameter which we will use.</p><iframe src="" width="0" height="0" frameborder="0" scrolling="no"><a href="https://medium.com/media/9de1165f1f29f579df138f6edd75a5df/href">https://medium.com/media/9de1165f1f29f579df138f6edd75a5df/href</a></iframe><p>In order for our clients to know about each other, I’m going to override two methods on our Hub. OnConnectedAsync and OnDisconnectedAsync. I’ll use these methods to let all connected clients know when a new client as connected or disconnected. This way the clients/browser can keep track of the ConnectionID’s available, in order to send to specific clients.</p><iframe src="" width="0" height="0" frameborder="0" scrolling="no"><a href="https://medium.com/media/bc4dafcf8ed6218ef2eee1f099ce5d1f/href">https://medium.com/media/bc4dafcf8ed6218ef2eee1f099ce5d1f/href</a></iframe><h4>Groups</h4><iframe src="https://cdn.embedly.com/widgets/media.html?src=https%3A%2F%2Fwww.youtube.com%2Fembed%2Fo0d1NZTNv10%3Ffeature%3Doembed&amp;url=http%3A%2F%2Fwww.youtube.com%2Fwatch%3Fv%3Do0d1NZTNv10&amp;image=https%3A%2F%2Fi.ytimg.com%2Fvi%2Fo0d1NZTNv10%2Fhqdefault.jpg&amp;key=a19fcc184b9711e1b4764040d3dc5c07&amp;type=text%2Fhtml&amp;schema=youtube" width="854" height="480" frameborder="0" scrolling="no"><a href="https://medium.com/media/bec9b765176441fc4c1c048b3fe5800a/href">https://medium.com/media/bec9b765176441fc4c1c048b3fe5800a/href</a></iframe><p>Lastly, we can also define Groups of connections. This giving us the ability to send data to specific groups. This is often useful for multi-tenant applications.</p><p>I’ll create two new methods, one method JoinGroup which will be used for our clients to join a specific group. SendMessageToGroup will be used to send data to the specific clients that have already called JoinGroup.</p><iframe src="" width="0" height="0" frameborder="0" scrolling="no"><a href="https://medium.com/media/807620df7cda3fa477ebc8a34a5435fd/href">https://medium.com/media/807620df7cda3fa477ebc8a34a5435fd/href</a></iframe><h4>Client</h4><p>First, I’ll update my Razor Page to contain a new select list to specify who we want to send the message to, All, Myself or PrivateGroup. I’ll also add a button that we will wire-up to call our JoinGroup on our Hub.</p><iframe src="" width="0" height="0" frameborder="0" scrolling="no"><a href="https://medium.com/media/3920ff78c362b7b128d3c8bbb00271f3/href">https://medium.com/media/3920ff78c362b7b128d3c8bbb00271f3/href</a></iframe><p>Now we will wire up our new UI by adding in SignalR client handlers for UserConnected, UserDisconnected events. I’ll also add UI for the Join button click as well as using the select list to determine which methodto invoke on our Hub.</p><iframe src="" width="0" height="0" frameborder="0" scrolling="no"><a href="https://medium.com/media/b27652ecaee8b5ab9b3ef35d42424a25/href">https://medium.com/media/b27652ecaee8b5ab9b3ef35d42424a25/href</a></iframe><h4>Get The Course!</h4><p>You’ve got several options:</p><ol><li>Check out my Practical ASP.NET Core SignalR playlist on my <a href="https://www.youtube.com/channel/UC3RKA4vunFAfrfxiJhPEplw?sub_confirmation=1">CodeOpinion YouTube channel</a>.</li><li>Access the full course now by <a href="https://codeopinion.teachable.com/p/practical-asp-net-core-signalr">enrolling for free</a> on Teachable.</li><li>Follow along with the blog post series here on CodeOpinion.com</li><li><a href="https://codeopinion.com/practical-asp-net-core-signalr/">Course Overview</a></li><li><a href="https://codeopinion.com/practical-asp-net-core-signalr-overview/">ASP.NET Core SignalR Overview</a></li><li><a href="https://codeopinion.com/practical-asp-net-core-signalr-basics/">Basics</a></li><li>Server Hubs</li><li>Server Concepts (Coming Soon)</li><li>Scaling (Coming Soon)</li></ol><p><a href="https://twitter.com/intent/follow?screen_name=codeopinion">Follow @codeopinion</a></p><h4>Source Code</h4><p>All of the source code for this blog post and this course is available the <a href="https://github.com/dcomartin/Practical.AspNetCore.SignalR">Practical.AspNetCore.SignalR repo on GitHub</a>.</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=6256f7882548" width="1" height="1" alt="">]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Roundup #29]]></title>
            <link>https://medium.com/@codeopinion/roundup-29-ca58ab436999?source=rss-c5506f7683aa------2</link>
            <guid isPermaLink="false">https://medium.com/p/ca58ab436999</guid>
            <dc:creator><![CDATA[Derek Comartin]]></dc:creator>
            <pubDate>Fri, 21 Dec 2018 00:10:04 GMT</pubDate>
            <atom:updated>2018-12-21T00:13:14.612Z</atom:updated>
            <content:encoded><![CDATA[<figure><img alt="" src="https://cdn-images-1.medium.com/max/259/0*t_-Z1tcZYt6Gez7W.png" /></figure><p>Here are the things that caught my eye this week. I’d love to hear what you found most interesting this week. Let me know in the comments or on Twitter.</p><p><a href="https://twitter.com/intent/follow?screen_name=codeopinion">Follow @codeopinion</a></p><h4><a href="https://aws.amazon.com/blogs/developer/net-core-configuration-provider-for-aws-systems-manager/">.NET Core configuration provider for AWS Systems Manager</a></h4><blockquote>We released a new NuGet package, <a href="https://www.nuget.org/packages/Amazon.Extensions.Configuration.SystemsManager/">Amazon.Extensions.Configuration.SystemsManager</a>. This NuGet package simplifies how your application loads the application configuration settings in the <a href="https://docs.aws.amazon.com/systems-manager/latest/userguide/systems-manager-paramstore.html">AWS Systems Manager Parameter Store</a> into the .NET Core configuration system.</blockquote><p>Link: <a href="https://aws.amazon.com/blogs/developer/net-core-configuration-provider-for-aws-systems-manager/">https://aws.amazon.com/blogs/developer/net-core-configuration-provider-for-aws-systems-manager/</a></p><h4><a href="https://github.com/dotnet/command-line-api">System.CommandLine</a></h4><blockquote>This repository contains the code for System.CommandLine, a library for command line parsing, invocation, and rendering of terminal output. For more information, please see <a href="https://github.com/dotnet/command-line-api/wiki">our wiki</a>.</blockquote><p>Link: <a href="https://github.com/dotnet/command-line-api">https://github.com/dotnet/command-line-api</a></p><h4><a href="https://daveaglick.com/posts/announcing-azurepipelines-testlogger">AzurePipelines.TestLogger</a></h4><blockquote>Announce a new test logger for the Visual Studio Test Platform designed to publish your test results in real-time to Azure Pipelines. This means that you can run dotnet test from your build script on Azure Pipelines and feed your test results directly to the test summary for your build without having to rely on post-processing like the PublishTestResults Azure Pipelines task.</blockquote><p>Link: <a href="https://daveaglick.com/posts/announcing-azurepipelines-testlogger">https://daveaglick.com/posts/announcing-azurepipelines-testlogger</a></p><h4><a href="https://techcommunity.microsoft.com/t5/Windows-Kernel-Internals/Windows-Sandbox/ba-p/301849">Windows Sandbox</a></h4><blockquote>How many times have you downloaded an executable file, but were afraid to run it? Have you ever been in a situation which required a clean installation of Windows, but didn’t want to set up a virtual machine?</blockquote><blockquote>At Microsoft we regularly encounter these situations, so we developed <strong>Windows Sandbox</strong>: an isolated, temporary, desktop environment where you can run untrusted software without the fear of lasting impact to your PC. Any software installed in Windows Sandbox stays only in the sandbox and cannot affect your host. Once Windows Sandbox is closed, all the software with all its files and state are permanently deleted.</blockquote><p>Link: <a href="https://techcommunity.microsoft.com/t5/Windows-Kernel-Internals/Windows-Sandbox/ba-p/301849">https://techcommunity.microsoft.com/t5/Windows-Kernel-Internals/Windows-Sandbox/ba-p/301849</a></p><h4><a href="https://github.com/Microsoft/AMBROSIA">Ambrosia: Robust Distributed Programming Made Easy and Efficient</a></h4><blockquote>Ambrosia is a programming language independent approach for authoring and deploying highly robust distributed applications. Ambrosia dramatically lowers development and deployment costs and time to market by automatically providing recovery and high availability.</blockquote><p>Link: <a href="https://github.com/Microsoft/AMBROSIA">https://github.com/Microsoft/AMBROSIA</a></p><p><a href="https://twitter.com/intent/follow?screen_name=codeopinion">Follow @codeopinion</a></p><h4>Enjoy this post? Subscribe!</h4><p>Subscribe to our weekly Newsletter and stay tuned.</p><p>Leave this field empty if you’re human:</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=ca58ab436999" width="1" height="1" alt="">]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Practical ASP.NET Core SignalR: Basics]]></title>
            <link>https://medium.com/@codeopinion/practical-asp-net-core-signalr-basics-d6d9ece23eb1?source=rss-c5506f7683aa------2</link>
            <guid isPermaLink="false">https://medium.com/p/d6d9ece23eb1</guid>
            <dc:creator><![CDATA[Derek Comartin]]></dc:creator>
            <pubDate>Wed, 19 Dec 2018 21:24:08 GMT</pubDate>
            <atom:updated>2018-12-19T21:27:17.585Z</atom:updated>
            <content:encoded><![CDATA[<figure><img alt="Practical ASP.NET Core SignalR" src="https://cdn-images-1.medium.com/max/267/0*QG7s6BhF7ezKlnvt.png" /></figure><p>In this section, I’m going to create a simple ASP.NET Core application that will contain a SignalR Hub, Razor Page, and a JavaScript Client.</p><p>This blog post is apart of a course that is a complete step-by-setup guide on how to build real-time web applications using ASP.NET Core SignalR. By the end of this course, you’ll be able to build real-world, scalable, production applications using the tools and techniques provided in this course.</p><p>If you haven’t already, check out the prior sections of this course.</p><ol><li><a href="https://codeopinion.com/practical-asp-net-core-signalr/">Course Overview</a></li><li><a href="https://codeopinion.com/practical-asp-net-core-signalr-overview/">ASP.NET Core SignalR Overview</a></li></ol><h4>Video Tutorial</h4><iframe src="https://cdn.embedly.com/widgets/media.html?src=https%3A%2F%2Fwww.youtube.com%2Fembed%2FsdsCzyTtp6U%3Ffeature%3Doembed&amp;url=http%3A%2F%2Fwww.youtube.com%2Fwatch%3Fv%3DsdsCzyTtp6U&amp;image=https%3A%2F%2Fi.ytimg.com%2Fvi%2FsdsCzyTtp6U%2Fhqdefault.jpg&amp;key=a19fcc184b9711e1b4764040d3dc5c07&amp;type=text%2Fhtml&amp;schema=youtube" width="854" height="480" frameborder="0" scrolling="no"><a href="https://medium.com/media/a184f624ff5c3d6910852a41ce8f7071/href">https://medium.com/media/a184f624ff5c3d6910852a41ce8f7071/href</a></iframe><h4>Server Hubs</h4><p>A hub is a primary point at which all communication between client and server occur. You define methods in a hub that can be called by the client. And in the client code, we can define methods that our hub can call.</p><p>First thing is first, we need to install the SignalR package from NuGet. The simplest way is to modify your csproj by adding:</p><pre>&lt;PackageReference Include=&quot;Microsoft.AspNetCore.SignalR&quot; Version=&quot;1.1.0&quot; /&gt;</pre><h4>Message Hub</h4><p>I’m going to create the simplest hub which will just send a message to all connected clients.</p><iframe src="" width="0" height="0" frameborder="0" scrolling="no"><a href="https://medium.com/media/0f947e290c80bda3d5422c4f0e416aa6/href">https://medium.com/media/0f947e290c80bda3d5422c4f0e416aa6/href</a></iframe><h4>Startup.cs</h4><p>Next, we need to add SignalR to the IServiceCollection in the ConfigureServices method. As well, we configure a route to our message hub in the Configure Method.</p><iframe src="" width="0" height="0" frameborder="0" scrolling="no"><a href="https://medium.com/media/eb51244456f498f76ef3c4746f38ce03/href">https://medium.com/media/eb51244456f498f76ef3c4746f38ce03/href</a></iframe><h4>SignalR JavaScript Client</h4><p>First thing will be to get the JavaScript client library from npm.</p><pre>npm install @aspnet/signalr</pre><p>From here you will want to copy the client file from node_modules/signalr/dist/browser/signalr.js to your wwwroot/lib/signalr.js</p><h4>Razor Page</h4><p>Next, I’m going to create a Razor page that will just contain a simple textarea and button that we will wire up to the SignalR hub. It will also contain a script tag to reference the signalr.js file and a file we will create next called messages.js</p><iframe src="" width="0" height="0" frameborder="0" scrolling="no"><a href="https://medium.com/media/74591daae6e4c85b9e8c6e0e0bc2c45d/href">https://medium.com/media/74591daae6e4c85b9e8c6e0e0bc2c45d/href</a></iframe><h4>JavaScript</h4><p>Now they are referencing messages.js, let’s actually create it. This file will provide the functionality to connect to our SignalR Server Hub, send messages to the hub, and receive messages from the hub.</p><iframe src="" width="0" height="0" frameborder="0" scrolling="no"><a href="https://medium.com/media/3daa3f1fa4ba1efcbf4e80a04d99e00f/href">https://medium.com/media/3daa3f1fa4ba1efcbf4e80a04d99e00f/href</a></iframe><h4>Get The Course!</h4><p>You’ve got several options:</p><ol><li>Check out my Practical ASP.NET Core SignalR playlist on my <a href="https://www.youtube.com/channel/UC3RKA4vunFAfrfxiJhPEplw?sub_confirmation=1">CodeOpinion YouTube channel</a>.</li><li>Access the full course now by <a href="https://codeopinion.teachable.com/p/practical-asp-net-core-signalr">enrolling for free</a> on Teachable.</li><li>Follow along with the blog post series here on CodeOpinion.com</li><li><a href="https://codeopinion.com/practical-asp-net-core-signalr/">Course Overview</a></li><li><a href="https://codeopinion.com/practical-asp-net-core-signalr-overview/">ASP.NET Core SignalR Overview</a></li><li>Basics</li><li>Server Hubs (Coming Soon)</li><li>Server Concepts (Coming Soon)</li><li>Scaling (Coming Soon)</li></ol><p><a href="https://twitter.com/intent/follow?screen_name=codeopinion">Follow @codeopinion</a></p><h4>Source Code</h4><p>All of the source code for this blog post and this course is available the <a href="https://github.com/dcomartin/Practical.AspNetCore.SignalR">Practical.AspNetCore.SignalR repo on GitHub</a>.</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=d6d9ece23eb1" width="1" height="1" alt="">]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Roundup #28]]></title>
            <link>https://medium.com/@codeopinion/roundup-28-70ab9fdb98e5?source=rss-c5506f7683aa------2</link>
            <guid isPermaLink="false">https://medium.com/p/70ab9fdb98e5</guid>
            <dc:creator><![CDATA[Derek Comartin]]></dc:creator>
            <pubDate>Fri, 14 Dec 2018 00:13:44 GMT</pubDate>
            <atom:updated>2018-12-14T00:16:40.943Z</atom:updated>
            <content:encoded><![CDATA[<figure><img alt="" src="https://cdn-images-1.medium.com/max/259/0*fw4wXcOpb4t7upoc.png" /></figure><p>Here are the things that caught my eye this week. I’d love to hear what you found most interesting this week. Let me know in the comments or on Twitter.</p><p><a href="https://twitter.com/intent/follow?screen_name=codeopinion">Follow @codeopinion</a></p><h4><a href="https://github.com/adamralph/minver">MinVer</a></h4><blockquote>A minimalistic <a href="https://www.nuget.org/packages/MinVer">.NET package</a> for versioning .NET SDK-style projects using Git tags.</blockquote><blockquote>When you want to release a version of your software, whether it’s a pre-release, RTM, patch, or anything else, simply create a tag with a name which is a valid <a href="https://semver.org/spec/v2.0.0.html">SemVer 2.0</a> version and build your projects. MinVer will apply the version to the assemblies and packages. (If you like to prefix your tag names, see the <a href="https://github.com/adamralph/minver#can-i-prefix-my-tag-names">FAQ</a>.)</blockquote><p>Link: <a href="https://github.com/adamralph/minver">https://github.com/adamralph/minver</a></p><h3><a href="https://vimeo.com/295217613">REST Fest 2018: Kin Lane</a></h3><blockquote>Kin Lane (API Evangelist) — ‘’API Discovery in the Real World is Complicated’’ — 28 September 2018</blockquote><iframe src="https://cdn.embedly.com/widgets/media.html?src=https%3A%2F%2Fplayer.vimeo.com%2Fvideo%2F295217613%3Fapp_id%3D122963&amp;dntp=1&amp;url=https%3A%2F%2Fplayer.vimeo.com%2Fvideo%2F295217613%3Fcolor%3DA5CB39%26title%3D0%26byline%3D0%26portrait%3D0&amp;image=http%3A%2F%2Fi.vimeocdn.com%2Fvideo%2F734544494_1280.jpg&amp;key=a19fcc184b9711e1b4764040d3dc5c07&amp;type=text%2Fhtml&amp;schema=vimeo" width="1920" height="1080" frameborder="0" scrolling="no"><a href="https://medium.com/media/5dc27acb9fadb457854c2fc72e365e77/href">https://medium.com/media/5dc27acb9fadb457854c2fc72e365e77/href</a></iframe><p><a href="https://vimeo.com/295217613">REST Fest 2018 \ Kin Lane (API Evangelist) \ 2018 Keynote</a> from <a href="https://vimeo.com/restfest">REST Fest</a> on <a href="https://vimeo.com">Vimeo</a>.</p><p>Link: <a href="https://vimeo.com/295217613">https://vimeo.com/295217613</a></p><h4><a href="https://dependabot.com/">Dependabot</a></h4><blockquote>Dependabot pulls down your dependency files and looks for any outdated or insecure requirements.</blockquote><blockquote>If any of your dependencies are out-of-date, Dependabot opens individual pull requests to update each one.</blockquote><blockquote>You check that your tests pass, scan the included changelog and release notes, then hit merge with confidence.</blockquote><p>Link: <a href="https://dependabot.com/">https://dependabot.com/</a></p><h4><a href="http://hamidmosalla.com/2018/11/25/stop-using-repository-pattern-with-an-orm/">Stop Using Repository Pattern With an ORM</a></h4><blockquote>In this post I’m going to list some reasons suggested for using repository pattern. Then we’re going to see if these reasons really needs these kind of patterns to be solved. Then I’m going to propose other alternatives for solving these problems.</blockquote><p>Link: <a href="http://hamidmosalla.com/2018/11/25/stop-using-repository-pattern-with-an-orm/">http://hamidmosalla.com/2018/11/25/stop-using-repository-pattern-with-an-orm/</a></p><h4><a href="https://www.youtube.com/watch?v=ET4kT88JRXs">dotJS 2018 — Anders Hejlsberg</a></h4><blockquote>How do you define and implement a static type system for a dynamic language like JavaScript, and why would you even care to? Anders explores how TypeScript came to be, how it differs from classic type systems, and how it can be beneficial even if you don’t like types.</blockquote><iframe src="https://cdn.embedly.com/widgets/media.html?src=https%3A%2F%2Fwww.youtube.com%2Fembed%2FET4kT88JRXs%3Ffeature%3Doembed&amp;display_name=YouTube&amp;url=https%3A%2F%2Fwww.youtube.com%2Fwatch%3Fv%3DET4kT88JRXs&amp;image=https%3A%2F%2Fi.ytimg.com%2Fvi%2FET4kT88JRXs%2Fhqdefault.jpg&amp;key=a19fcc184b9711e1b4764040d3dc5c07&amp;type=text%2Fhtml&amp;schema=youtube" width="854" height="480" frameborder="0" scrolling="no"><a href="https://medium.com/media/0a7e48ce7cb739537d5de7b88b83eee0/href">https://medium.com/media/0a7e48ce7cb739537d5de7b88b83eee0/href</a></iframe><p>If you’re not on the TypeScript train yet, why not? But really, it might be worth a watch if you aren’t.</p><p>Link: <a href="https://www.youtube.com/watch?v=ET4kT88JRXs">https://www.youtube.com/watch?v=ET4kT88JRXs</a></p><p><a href="https://twitter.com/intent/follow?screen_name=codeopinion">Follow @codeopinion</a></p><h4>Enjoy this post? Subscribe!</h4><p>Subscribe to our weekly Newsletter and stay tuned.</p><p>Leave this field empty if you’re human:</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=70ab9fdb98e5" width="1" height="1" alt="">]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Date Version Number in TeamCity]]></title>
            <link>https://medium.com/@codeopinion/date-version-number-in-teamcity-8eec23348f71?source=rss-c5506f7683aa------2</link>
            <guid isPermaLink="false">https://medium.com/p/8eec23348f71</guid>
            <dc:creator><![CDATA[Derek Comartin]]></dc:creator>
            <pubDate>Wed, 12 Dec 2018 23:27:27 GMT</pubDate>
            <atom:updated>2018-12-12T23:30:20.346Z</atom:updated>
            <content:encoded><![CDATA[<figure><img alt="Date Version Number in TeamCity" src="https://cdn-images-1.medium.com/max/300/0*15g2kvyMNDi9XUHV.png" /></figure><p>In some projects, I use the <a href="https://confluence.jetbrains.com/display/TCD18/AssemblyInfo+Patcher">AssemblyInfo Patcher</a> build feature to modify the AssemblyInfo.cs’s version information. Mainly I was just using a static version with the %build_number% suffixed at the end. Something like 1.2.3.%build_number%. However, I decided to go with a date version number of YYYY.MM.DD.%build_number%</p><h4>Variables</h4><p>The first thing that caused me an issue was there is no existing system or environment variables defined that provide you with date parts. I figured this by adding a new build step for creating an environment variable using <a href="https://confluence.jetbrains.com/display/TCD18/Build+Script+Interaction+with+TeamCity">Service Messages</a>.</p><blockquote>Service messages are specially constructed pieces of text that are used to pass commands/information about the build from the build script to the TeamCity server.</blockquote><blockquote>To be processed by TeamCity,<strong> they need to be written to the standard output stream of the build, i.e. printed or echoed from a build step.</strong> It is recommended to output a single service message per line (i.e. divide messages with newline symbol(s))</blockquote><p>What this allowed me to do was create a build step in PowerShell and use Write-Host to output a service message:</p><pre>Write-Host &quot;##teamcity[setParameter name=&#39;env.BUILD_DATE&#39; value=&#39;$([DateTime]::Now.Year.ToString() + &quot;.&quot; + [DateTime]::Now.Month.ToString() + &quot;.&quot; + [DateTime]::Now.Day.ToString())&#39;]&quot;</pre><p>This will create a new environment variable that I can use called %env.BUILD_DATE%</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/0*lVKlSvhV6WgR9Vdi.png" /></figure><h4>AssemblyInfo Patcher</h4><p>As mentioned, I use this build feature to modify the AssemblyInfo.cs, however, I immediately ran into an issue.</p><blockquote><em>AssemblyInfo Patcher</em> should be used with the <a href="https://confluence.jetbrains.com/display/TCD18/VCS+Checkout+Mode">automatic checkout </a>only: after this build feature is configured, it will run <strong>before the first build step. </strong>TeamCity will first perform replacement in the files found in the build checkout directory and then run your build.</blockquote><p>The issue is that the AssemblyInfo patcher is run before the first build step which is setting the environment variable. Meaning I cannot use the environment variable in the AssemblyInfo patcher.</p><h4>Snapshot Dependencies</h4><p>What I decided to do was create a new build configuration that only contained one build step. That build step would be the PowerShell above which sets the environment variable. Then I would link my existing build configuration to this new build configuration. In TeamCity these are defined as <a href="https://confluence.jetbrains.com/display/TCD18/Snapshot+Dependencies">SnapShot Dependencies</a>.</p><blockquote>Build configurations linked by a snapshot dependency will use the same snapshot of the sources. The build of this configuration will run after all the dependencies are built. If necessary, the dependencies will be triggered automatically.</blockquote><figure><img alt="" src="https://cdn-images-1.medium.com/max/692/0*qgClQutUO4nxwx4E.png" /></figure><h4>Dependency Properties</h4><p>Once I had my dependencies defined, you can use <a href="https://confluence.jetbrains.com/display/TCD18/Predefined+Build+Parameters#PredefinedBuildParameters-DependenciesProperties">build parameters from linked dependencies</a>. Now in the assembly patcher, I can use the environment variable by:</p><p>%dep.[ConfigurationID].env.BUILD_DATE%</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/0*t8JD0hOyxwgPe0J7.png" /></figure><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=8eec23348f71" width="1" height="1" alt="">]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Practical ASP.NET Core SignalR Overview]]></title>
            <link>https://medium.com/@codeopinion/practical-asp-net-core-signalr-overview-e75c4789c45d?source=rss-c5506f7683aa------2</link>
            <guid isPermaLink="false">https://medium.com/p/e75c4789c45d</guid>
            <dc:creator><![CDATA[Derek Comartin]]></dc:creator>
            <pubDate>Wed, 05 Dec 2018 23:42:33 GMT</pubDate>
            <atom:updated>2018-12-05T23:45:10.830Z</atom:updated>
            <content:encoded><![CDATA[<figure><img alt="Practical ASP.NET Core SignalR" src="https://cdn-images-1.medium.com/max/267/0*F9crCX-ksZCv8GXV.png" /></figure><p>ASP.NET Core SignalR is an excellent way to add real-time functionality to your web applications. You may be wondering, what exactly is real-time web functionality and what problem does that solve?</p><p>Here’s an overview of what problems SignalR solves, and how it does it using various technologies.</p><p>This blog post is apart of a course that is a complete step-by-setup guide on how to build real-time web applications using ASP.NET Core SignalR. By the end of this course, you’ll be able to build real-world, scalable, production applications using the tools and techniques provided in this course.</p><p>What you’ll learn:</p><ul><li>Creating ASP.NET Core SignalR Hubs</li><li>Connecting to Hubs using JavaScript Clients</li><li>Scaling your application using Redis and Azure</li></ul><p>If you haven’t already, check out the prior sections of this course.</p><ol><li><a href="https://codeopinion.com/practical-asp-net-core-signalr/">Course Overview</a></li></ol><h4>ASP.NET CoreSignalR Overview</h4><iframe src="https://cdn.embedly.com/widgets/media.html?src=https%3A%2F%2Fwww.youtube.com%2Fembed%2FWZ0lU7-XVyE%3Ffeature%3Doembed&amp;url=http%3A%2F%2Fwww.youtube.com%2Fwatch%3Fv%3DWZ0lU7-XVyE&amp;image=https%3A%2F%2Fi.ytimg.com%2Fvi%2FWZ0lU7-XVyE%2Fhqdefault.jpg&amp;key=a19fcc184b9711e1b4764040d3dc5c07&amp;type=text%2Fhtml&amp;schema=youtube" width="854" height="480" frameborder="0" scrolling="no"><a href="https://medium.com/media/9e57d5244c890441b74d0c68b39722a7/href">https://medium.com/media/9e57d5244c890441b74d0c68b39722a7/href</a></iframe><h4>ASP.NET Core SignalR: Problem Space</h4><iframe src="https://cdn.embedly.com/widgets/media.html?src=https%3A%2F%2Fwww.youtube.com%2Fembed%2FPUtOLN5wI1s%3Ffeature%3Doembed&amp;url=http%3A%2F%2Fwww.youtube.com%2Fwatch%3Fv%3DPUtOLN5wI1s&amp;image=https%3A%2F%2Fi.ytimg.com%2Fvi%2FPUtOLN5wI1s%2Fhqdefault.jpg&amp;key=a19fcc184b9711e1b4764040d3dc5c07&amp;type=text%2Fhtml&amp;schema=youtube" width="854" height="480" frameborder="0" scrolling="no"><a href="https://medium.com/media/ae34f5e7228c2369dedfc3fc518fea0d/href">https://medium.com/media/ae34f5e7228c2369dedfc3fc518fea0d/href</a></iframe><h4>ASP.NET Core SignalR: Push</h4><iframe src="https://cdn.embedly.com/widgets/media.html?src=https%3A%2F%2Fwww.youtube.com%2Fembed%2FOTjL2x0ztx0%3Ffeature%3Doembed&amp;url=http%3A%2F%2Fwww.youtube.com%2Fwatch%3Fv%3DOTjL2x0ztx0&amp;image=https%3A%2F%2Fi.ytimg.com%2Fvi%2FOTjL2x0ztx0%2Fhqdefault.jpg&amp;key=a19fcc184b9711e1b4764040d3dc5c07&amp;type=text%2Fhtml&amp;schema=youtube" width="854" height="480" frameborder="0" scrolling="no"><a href="https://medium.com/media/8a7aa2e12e5b502ebe1dc9ee5a5dd6a1/href">https://medium.com/media/8a7aa2e12e5b502ebe1dc9ee5a5dd6a1/href</a></iframe><h4>ASP.NET Core SignalR: Summary</h4><iframe src="https://cdn.embedly.com/widgets/media.html?src=https%3A%2F%2Fwww.youtube.com%2Fembed%2FDF7jk4ERiF8%3Ffeature%3Doembed&amp;url=http%3A%2F%2Fwww.youtube.com%2Fwatch%3Fv%3DDF7jk4ERiF8&amp;image=https%3A%2F%2Fi.ytimg.com%2Fvi%2FDF7jk4ERiF8%2Fhqdefault.jpg&amp;key=a19fcc184b9711e1b4764040d3dc5c07&amp;type=text%2Fhtml&amp;schema=youtube" width="854" height="480" frameborder="0" scrolling="no"><a href="https://medium.com/media/c3e13c16924bd1db7c56fab148663085/href">https://medium.com/media/c3e13c16924bd1db7c56fab148663085/href</a></iframe><h4>Get The Course!</h4><p>If you want all the content right now, you can access the full course now by <a href="https://codeopinion.teachable.com/p/practical-asp-net-core-signalr">enrolling for free</a> on Teachable. Otherwise stay tuned to this blog and my <a href="https://www.youtube.com/channel/UC3RKA4vunFAfrfxiJhPEplw?sub_confirmation=1">YouTube Channel</a> for all the content in the coming weeks.</p><p><a href="https://twitter.com/intent/follow?screen_name=codeopinion">Follow @codeopinion</a></p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=e75c4789c45d" width="1" height="1" alt="">]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Roundup #27]]></title>
            <link>https://medium.com/@codeopinion/roundup-27-7170165c346e?source=rss-c5506f7683aa------2</link>
            <guid isPermaLink="false">https://medium.com/p/7170165c346e</guid>
            <dc:creator><![CDATA[Derek Comartin]]></dc:creator>
            <pubDate>Fri, 30 Nov 2018 13:11:39 GMT</pubDate>
            <atom:updated>2018-11-30T13:14:04.671Z</atom:updated>
            <content:encoded><![CDATA[<figure><img alt="" src="https://cdn-images-1.medium.com/max/259/0*paL4wCQzgtYMesQh.png" /></figure><p>Here are the things that caught my eye this week. I’d love to hear what you found most interesting this week. Let me know in the comments or on Twitter.</p><p><a href="https://twitter.com/intent/follow?screen_name=codeopinion">Follow @codeopinion</a></p><h4><a href="https://medium.com/@cnorthwood/todays-javascript-trash-fire-and-pile-on-f3efcf8ac8c7">Today’s JavaScript trash fire and pile on</a></h4><blockquote>Four years ago I wrote a slightly inflamatory blog on <a href="https://medium.com/@cnorthwood/what-sucks-about-front-end-development-fad415ba26e">what still sucks in front-end dev</a>. One of the points was on Bower and how JS library management sucks. Sadly, the tools have changed, but JS library managment still sucks.</blockquote><p>This post is in response to the recent npm even-stream package that had malicious code injected into it by a new maintainer.</p><p>Link: <a href="https://medium.com/@cnorthwood/todays-javascript-trash-fire-and-pile-on-f3efcf8ac8c7">https://medium.com/@cnorthwood/todays-javascript-trash-fire-and-pile-on-f3efcf8ac8c7</a></p><h3><a href="https://www.youtube.com/watch?v=Mm_RuObpeGo">Open-Source Maintainers are Jerks!</a></h3><blockquote>As software developers we often make use of open-source software (OSS) but do we ever think about all the man hours that go into developing and supporting the project. When OSS breaks, or we need a new features, we log an issue on gitHub and then sit back awaiting a response. After a week of waiting we start complaining about how badly the project is run. The thing about OSS that’s too often forgetten, it’s AS-IS, no exceptions. Different projects may operate differently, with more or less people, with work being prioritised differently, on differing release schedules but in all cases the software delivered is as-is, meaning that there is absolutely no SLA. In this talk we’ll look at a day in the life of an OSS maintainer: what drives them, what annoys them and what keeps them up at night. Maintainers aren’t jerks, they just care about the project more than you do.</blockquote><p>Thought this was a worthwile related talk to watch in regards to the npm package issue this week.</p><iframe src="https://cdn.embedly.com/widgets/media.html?src=https%3A%2F%2Fwww.youtube.com%2Fembed%2FMm_RuObpeGo%3Ffeature%3Doembed&amp;url=http%3A%2F%2Fwww.youtube.com%2Fwatch%3Fv%3DMm_RuObpeGo&amp;image=https%3A%2F%2Fi.ytimg.com%2Fvi%2FMm_RuObpeGo%2Fhqdefault.jpg&amp;key=a19fcc184b9711e1b4764040d3dc5c07&amp;type=text%2Fhtml&amp;schema=youtube" width="854" height="480" frameborder="0" scrolling="no"><a href="https://medium.com/media/1386b861eedc5dca57ba5e95c566e88c/href">https://medium.com/media/1386b861eedc5dca57ba5e95c566e88c/href</a></iframe><p>Link: <a href="https://www.youtube.com/watch?v=Mm_RuObpeGo">https://www.youtube.com/watch?v=Mm_RuObpeGo</a></p><h3><a href="https://vimeo.com/302679933">Serverless Data APIs with Azure Functions and Cosmos DB</a></h3><blockquote>Azure Functions, Microsoft’s serverless offering, allow developers to focus on their code and not be concerned with infrastructure or DevOps. And thanks to a slew of built-in integrations, it’s also easy to have your functions get and send data to various services or even be triggered by events in those services. One such integration is with Azure Cosmos DB, the multi-model, globally distributed NoSQL data service. Cosmos DB exposes data as documents that you can access via SQL, JavaScript MongoDB or Cassandra as well as graph and key-value store. In this session, you’ll see how easily you can build an API from a set of Azure Functions that interact with Cosmos DB documents and some other services. We’ll go all cross-platform with Visual Studio Code and Node JS.</blockquote><iframe src="https://cdn.embedly.com/widgets/media.html?src=https%3A%2F%2Fplayer.vimeo.com%2Fvideo%2F302679933%3Fapp_id%3D122963&amp;dntp=1&amp;url=https%3A%2F%2Fplayer.vimeo.com%2Fvideo%2F302679933%3Fcolor%3Dffffff&amp;image=http%3A%2F%2Fi.vimeocdn.com%2Fvideo%2F741518751_1280.jpg&amp;key=a19fcc184b9711e1b4764040d3dc5c07&amp;type=text%2Fhtml&amp;schema=vimeo" width="1920" height="1080" frameborder="0" scrolling="no"><a href="https://medium.com/media/33081108b1d6dc34f09e31b4cbc28fd8/href">https://medium.com/media/33081108b1d6dc34f09e31b4cbc28fd8/href</a></iframe><p><a href="https://vimeo.com/302679933">Julie Lerman — Serverless Data APIs with Azure Functions and Cosmos DB | Øredev 2018</a> from <a href="https://vimeo.com/oredev">Øredev Conference</a> on <a href="https://vimeo.com">Vimeo</a>.</p><p>Link: <a href="https://vimeo.com/302679933">https://vimeo.com/302679933</a></p><h3><a href="https://github.com/Microsoft/windows-dev-box-setup-scripts"><strong>windows-dev-box-setup-scripts</strong></a></h3><blockquote>The goal of this project is to provide a central place to share ideas for streamlining dev box setup and provide sample scripts for common dev scenarios. It’s likely you will want to take the scripts here and modify them to fit your particular needs.</blockquote><p>I was recentlys setting up a new dev machine and <a href="https://twitter.com/bitcrazed">Rich Turner</a> pointed me to this repo.</p><h3><a href="https://github.com/dotnet/coreclr/blob/5af32b00186ba37f5b2cdc4b0a9b5715d7807f1d/Documentation/design-docs/GuardedDevirtualization.md">Guarded Devirtualization</a></h3><blockquote>Guarded devirtualization is a proposed new optimization for the jit in .Net Core 3.0. This document describes the motivation, initial design sketch, and highlights various issues needing further investigatio</blockquote><blockquote>The .Net Core jit is able to do a limited amount of devirtualization for virtual and interface calls. This ability was added in .Net Core 2.0. To devirtualize the jit must be able to demonstrate one of two things: either that it knows the type of some reference exactly (say because it has seen a newobj) or that the declared type of the reference is a final class (aka sealed). For virtual calls the jit can also devirtualize if it can prove the method is marked as final.</blockquote><p>Link: <a href="https://github.com/dotnet/coreclr/blob/5af32b00186ba37f5b2cdc4b0a9b5715d7807f1d/Documentation/design-docs/GuardedDevirtualization.md">https://github.com/dotnet/coreclr/blob/5af32b00186ba37f5b2cdc4b0a9b5715d7807f1d/Documentation/design-docs/GuardedDevirtualization.md</a></p><p><a href="https://twitter.com/intent/follow?screen_name=codeopinion">Follow @codeopinion</a></p><h4>Enjoy this post? Subscribe!</h4><p>Subscribe to our weekly Newsletter and stay tuned.</p><p>Leave this field empty if you’re human:</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=7170165c346e" width="1" height="1" alt="">]]></content:encoded>
        </item>
    </channel>
</rss>