﻿<?xml version="1.0" encoding="utf-8"?><rss xmlns:a10="http://www.w3.org/2005/Atom" version="2.0"><channel><title>.NET Foundation News and Blog</title><link>https://dotnetfoundation.org/</link><description>This is the official .NET Foundation News and Blog feed. Get the latest news from the .NET Foundation regarding project members, community, and current events in the .NET Community.</description><a10:link rel="self" type="application/rss+xml" href="https://dotnetfoundation.org/feeds/blog" /><item><guid isPermaLink="false">urn:uuid:5f4dbcb7-b206-417a-9a82-068881263d4d</guid><link>https://dotnetfoundation.org/news-events/detail/member-spotlight-tomas-herceg</link><a10:author><a10:name> </a10:name></a10:author><title>Member Spotlight: Tomas Herceg</title><description>Tomas Herceg lives in Prague, Czech Republic, and runs a software consulting company called RIGANTI.He has been doing .NET development since the time of .NET Framework 1.0. </description><pubDate>Wed, 13 May 2026 13:45:59 Z</pubDate><a10:content type="text">&lt;p data-start="110" data-end="218"&gt;&lt;strong data-start="110" data-end="126"&gt;Tomas Herceg&lt;/strong&gt; lives in Prague, Czech Republic, and runs a software consulting company called &lt;strong data-start="206" data-end="217"&gt;RIGANTI&lt;/strong&gt;.&lt;/p&gt;&lt;p data-start="220" data-end="638"&gt;He has been doing .NET development since the time of .NET Framework 1.0. He got his first &lt;strong data-start="310" data-end="327"&gt;Microsoft MVP&lt;/strong&gt; award in 2009, and for a couple of years, he was also a &lt;strong data-start="384" data-end="415"&gt;Microsoft Regional Director&lt;/strong&gt;. He is also running &lt;strong data-start="436" data-end="457"&gt;Update Conference&lt;/strong&gt;, a company that organizes developer events focused on .NET, cloud, and security. Many people might also know him because of his recent book about modernizing .NET web applications.&lt;/p&gt;&lt;p data-start="640" data-end="1039"&gt;Tomas&amp;rsquo;s open-source journey started in 2014 when he had the idea of creating a framework that lets you build web apps with just C# and HTML. He made a simple prototype, published it on GitHub, and demoed it in one of his conference sessions. Surprisingly, the next day someone submitted a pull request. He contacted that person, and they decided to continue working on the idea and see what happens.&lt;/p&gt;&lt;p data-start="1041" data-end="1550"&gt;That is how the &lt;strong data-start="1057" data-end="1067"&gt;DotVVM&lt;/strong&gt; project started. Tomas and his team have been contributing to it for more than 10 years, adding hundreds of features, tests, and documentation pages. Over the years, more people have been helping with the development. They use the framework intensively at RIGANTI and are committed to its long-term sustainability. Therefore, they built a bunch of commercial extensions and components for DotVVM, which helps them secure funding for future improvements to the open-source framework.&lt;/p&gt;&lt;p data-start="1552" data-end="2063"&gt;&lt;strong data-start="1552" data-end="1562"&gt;DotVVM&lt;/strong&gt; is an opinionated framework that enables building web apps using the Model-View-ViewModel (MVVM) approach with just C# and HTML. It requires only about 56kB of JavaScript on the client, and it can be used to build feature-rich UI interfaces. The framework supports both ASP.NET Core and classic ASP.NET, providing an easy way to incrementally modernize ASP.NET Web Forms applications. DotVVM comes with 30+ built-in components, and there is also an extension for Visual Studio and Visual Studio Code.&lt;/p&gt;&lt;p data-start="2065" data-end="2169"&gt;&lt;strong data-start="2065" data-end="2075"&gt;Links:&lt;/strong&gt;&lt;br data-start="2075" data-end="2078" /&gt;&lt;a data-start="2078" data-end="2111" rel="noopener" target="_new" href="https://github.com/riganti/dotvvm"&gt;https://github.com/riganti/dotvvm&lt;svg width="20" height="20" viewBox="0 0 20 20" fill="currentColor" xmlns="http://www.w3.org/2000/svg" data-rtl-flip=""&gt;&lt;path d="M14.3349 13.3301V6.60645L5.47065 15.4707C5.21095 15.7304 4.78895 15.7304 4.52925 15.4707C4.26955 15.211 4.26955 14.789 4.52925 14.5293L13.3935 5.66504H6.66011C6.29284 5.66504 5.99507 5.36727 5.99507 5C5.99507 4.63273 6.29284 4.33496 6.66011 4.33496H14.9999L15.1337 4.34863C15.4369 4.41057 15.665 4.67857 15.665 5V13.3301C15.6649 13.6973 15.3672 13.9951 14.9999 13.9951C14.6327 13.9951 14.335 13.6973 14.3349 13.3301Z"&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;&lt;br data-start="2111" data-end="2114" /&gt;&lt;a data-start="2114" data-end="2137" rel="noopener" target="_new" href="https://tomasherceg.com"&gt;https://tomasherceg.com&lt;svg width="20" height="20" viewBox="0 0 20 20" fill="currentColor" xmlns="http://www.w3.org/2000/svg" data-rtl-flip=""&gt;&lt;path d="M14.3349 13.3301V6.60645L5.47065 15.4707C5.21095 15.7304 4.78895 15.7304 4.52925 15.4707C4.26955 15.211 4.26955 14.789 4.52925 14.5293L13.3935 5.66504H6.66011C6.29284 5.66504 5.99507 5.36727 5.99507 5C5.99507 4.63273 6.29284 4.33496 6.66011 4.33496H14.9999L15.1337 4.34863C15.4369 4.41057 15.665 4.67857 15.665 5V13.3301C15.6649 13.6973 15.3672 13.9951 14.9999 13.9951C14.6327 13.9951 14.335 13.6973 14.3349 13.3301Z"&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;&lt;br data-start="2137" data-end="2140" /&gt;&lt;a data-start="2140" data-end="2169" rel="noopener" target="_new" href="https://modernizationbook.com"&gt;https://modernizationbook.com&lt;svg width="20" height="20" viewBox="0 0 20 20" fill="currentColor" xmlns="http://www.w3.org/2000/svg" data-rtl-flip=""&gt;&lt;path d="M14.3349 13.3301V6.60645L5.47065 15.4707C5.21095 15.7304 4.78895 15.7304 4.52925 15.4707C4.26955 15.211 4.26955 14.789 4.52925 14.5293L13.3935 5.66504H6.66011C6.29284 5.66504 5.99507 5.36727 5.99507 5C5.99507 4.63273 6.29284 4.33496 6.66011 4.33496H14.9999L15.1337 4.34863C15.4369 4.41057 15.665 4.67857 15.665 5V13.3301C15.6649 13.6973 15.3672 13.9951 14.9999 13.9951C14.6327 13.9951 14.335 13.6973 14.3349 13.3301Z"&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;&lt;/p&gt;</a10:content></item><item><guid isPermaLink="false">urn:uuid:20458b97-d885-43e6-8f01-9aa9cc362bb3</guid><link>https://dotnetfoundation.org/news-events/detail/sponsor-spotlight-sentryblog1</link><a10:author><a10:name> </a10:name></a10:author><title>Sponsor Spotlight: Sentry</title><description>Sentry connects logs to issues, traces, and session replays.</description><pubDate>Thu, 29 Jan 2026 14:44:53 Z</pubDate><a10:content type="text">&lt;p dir="ltr"&gt;&lt;strong&gt;Sentry connects logs to issues, traces, and session replays&lt;/strong&gt;&lt;br /&gt;Sentry is an application monitoring platform that helps you understand exactly what&amp;rsquo;s going wrong when your code breaks, and gives you the context you need to fix it fast (we support every major language and framework, including &lt;a href="https://docs.sentry.io/platforms/dotnet/"&gt;.NET&lt;/a&gt;, &lt;a href="https://docs.sentry.io/platforms/dotnet/guides/maui/"&gt;MAUI&lt;/a&gt;, and &lt;a href="https://docs.sentry.io/platforms/dotnet/guides/aspnetcore/"&gt;ASP.NET Core&lt;/a&gt;). That means rich debugging context like stack traces, app and device state, and performance data all in one place. Now, with structured logging, you can also send your logs directly to Sentry and see them alongside errors, traces, session replays, and more. You can start sending logs to Sentry today with just a few lines of code.&lt;/p&gt;&lt;p dir="ltr"&gt;&lt;strong&gt;Learn more:&lt;/strong&gt; &lt;a href="https://docs.sentry.io/platforms/dotnet/logs/"&gt;https://docs.sentry.io/platforms/dotnet/logs/&lt;/a&gt;&lt;/p&gt;</a10:content></item><item><guid isPermaLink="false">urn:uuid:49608e1e-5d52-44de-9ac4-27e8ec2e3040</guid><link>https://dotnetfoundation.org/news-events/detail/project-spotlight-steeltoe</link><a10:author><a10:name> </a10:name></a10:author><title>Project Spotlight: Steeltoe</title><description>Steeltoe provides a collection of libraries that helps users build production-grade cloud-native applications using externalized configuration, service discovery, distributed tracing, application management, and more.</description><pubDate>Sat, 29 Nov 2025 13:46:22 Z</pubDate><a10:content type="text">&lt;p data-start="141" data-end="358"&gt;&lt;strong&gt;&lt;/strong&gt;&lt;strong&gt;Steeltoe&lt;/strong&gt; provides a collection of libraries that helps users build production-grade cloud-native applications using externalized configuration, service discovery, distributed tracing, application management, and more. It is proven&amp;mdash;trusted by developers all over the world, delivering delightful experiences to millions of end-users every day, with contributions from VMware, Microsoft, and more.&lt;/p&gt;&lt;p data-start="525" data-end="908"&gt;Steeltoe is flexible, offering comprehensive extensions and third-party libraries that let developers build almost any web application imaginable, whether cloud-scale microservices or heavyweight enterprise applications. It is productive, building on .NET runtime libraries, providing the necessary glue code, and supporting many of Spring Cloud&amp;rsquo;s libraries, patterns, and templates.&lt;/p&gt;&lt;p data-start="910" data-end="1229"&gt;Steeltoe is fast, with developer productivity as one of its superpowers&amp;mdash;developers can start a new project in seconds with the Steeltoe Initializr at &lt;strong data-start="1060" data-end="1081"&gt;start.steeltoe.io&lt;/strong&gt;. It is secure, remediating security issues quickly and responsibly, monitoring dependencies, and providing industry-standard security integrations.&lt;/p&gt;&lt;p data-start="1231" data-end="1394"&gt;Finally, Steeltoe is supportive, backed by a global, diverse community that offers guides, tutorials, videos, support, and access to the development team on Slack.&lt;/p&gt;&lt;h3 data-start="1415" data-end="1439"&gt;What Steeltoe Can Do&lt;/h3&gt;&lt;ul data-start="1440" data-end="1679"&gt;&lt;li data-start="1440" data-end="1527"&gt;&lt;p data-start="1442" data-end="1527"&gt;&lt;strong data-start="1442" data-end="1460"&gt;Microservices:&lt;/strong&gt; Production-grade features with independently evolvable services.&lt;/p&gt;&lt;/li&gt;&lt;li data-start="1528" data-end="1596"&gt;&lt;p data-start="1530" data-end="1596"&gt;&lt;strong data-start="1530" data-end="1540"&gt;Cloud:&lt;/strong&gt; Your code, any cloud&amp;mdash;connect and scale your services.&lt;/p&gt;&lt;/li&gt;&lt;li data-start="1597" data-end="1679"&gt;&lt;p data-start="1599" data-end="1679"&gt;&lt;strong data-start="1599" data-end="1612"&gt;Web Apps:&lt;/strong&gt; Fast, secure, responsive applications connected to any data store.&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p data-start="1599" data-end="1679"&gt;&lt;strong&gt;Link:&lt;/strong&gt; &lt;a href="https://steeltoe.io/"&gt;https://steeltoe.io/&lt;/a&gt;&lt;/p&gt;</a10:content></item><item><guid isPermaLink="false">urn:uuid:860124ca-64c1-4075-85e1-70cfd368d556</guid><link>https://dotnetfoundation.org/news-events/detail/license-compatibility-guide</link><a10:author><a10:name> </a10:name></a10:author><title>License Compatibility Guide</title><description>Learn which open source licenses are compatible with .NET Foundation. We support permissive licenses (MIT, Apache) but not copyleft (GPL, RPL).</description><pubDate>Sun, 12 Oct 2025 02:22:03 Z</pubDate><a10:content type="text">&lt;h1&gt;.NET Foundation License Compatibility Guide&lt;/h1&gt;&lt;h2&gt;Understanding What's Compatible (and What's Not)&lt;/h2&gt;&lt;h3&gt;What Licenses ARE Compatible&lt;/h3&gt;&lt;p&gt;The .NET Foundation accepts projects that use &lt;strong&gt;permissive open source licenses&lt;/strong&gt;. We automatically approve any permissive license from the &lt;a href="https://opensource.org/"&gt;Open Source Initiative (OSI)&lt;/a&gt; approved list.&lt;/p&gt;&lt;p&gt;&lt;strong&gt;Examples of compatible permissive licenses:&lt;/strong&gt;&lt;/p&gt;&lt;ul&gt;&lt;li&gt;MIT License&lt;/li&gt;&lt;li&gt;Apache License 2.0&lt;/li&gt;&lt;li&gt;BSD licenses (2-clause, 3-clause)&lt;/li&gt;&lt;li&gt;ISC License&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&lt;strong&gt;Key requirements:&lt;/strong&gt;&lt;/p&gt;&lt;ul&gt;&lt;li&gt;Your main codebase must use a permissive OSI-approved license&lt;/li&gt;&lt;li&gt;Mandatory dependencies must also use permissive licenses (with exceptions for platform-specific requirements like .NET Framework or hardware-specific libraries where no open source alternative exists)&lt;/li&gt;&lt;li&gt;Committers must be bound by a Contributor License Agreement (CLA) or willing to embrace the .NET Foundation's CLA&lt;/li&gt;&lt;li&gt;Copyright ownership must be clearly defined and documented&lt;/li&gt;&lt;/ul&gt;&lt;h3&gt;What Licenses Are NOT Compatible&lt;/h3&gt;&lt;p&gt;The Foundation does not accept projects using &lt;strong&gt;copyleft licenses&lt;/strong&gt;. These include:&lt;/p&gt;&lt;ul&gt;&lt;li&gt;GPL (GNU General Public License) - any version&lt;/li&gt;&lt;li&gt;AGPL (GNU Affero General Public License)&lt;/li&gt;&lt;li&gt;RPL (Reciprocal Public License)&lt;/li&gt;&lt;li&gt;MPL (Mozilla Public License) in some contexts&lt;/li&gt;&lt;li&gt;Other licenses with strong copyleft provisions&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&lt;strong&gt;Why copyleft licenses aren't compatible:&lt;/strong&gt; Copyleft licenses require derivative works to be licensed under the same terms, which can be less attractive to corporate users and doesn't align with the Foundation's goal of broad ecosystem compatibility.&lt;/p&gt;&lt;h2&gt;Business Models We Support&lt;/h2&gt;&lt;h3&gt;The Foundation DOES Support These Business Strategies:&lt;/h3&gt;&lt;h4&gt;1. &lt;strong&gt;Dual Licensing&lt;/strong&gt;&lt;/h4&gt;&lt;p&gt;You can offer your project under TWO licenses simultaneously:&lt;/p&gt;&lt;ul&gt;&lt;li&gt;&lt;strong&gt;One permissive OSI-approved license&lt;/strong&gt; (for the open source community)&lt;/li&gt;&lt;li&gt;&lt;strong&gt;One commercial license&lt;/strong&gt; (offering additional warranties, guarantees, or terms)&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;This is perfectly acceptable! The Foundation operates on a per-repository basis, so as long as the source code is available under a permissive license, you're good to go.&lt;/p&gt;&lt;h4&gt;2. &lt;strong&gt;Commercial Services Around Open Source&lt;/strong&gt;&lt;/h4&gt;&lt;ul&gt;&lt;li&gt;Premium support packages&lt;/li&gt;&lt;li&gt;Consulting services&lt;/li&gt;&lt;li&gt;Training and certification&lt;/li&gt;&lt;li&gt;Managed hosting&lt;/li&gt;&lt;li&gt;Enterprise warranties and SLAs&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&lt;strong&gt;Important:&lt;/strong&gt; The source code must remain free and open, but services built around it don't have to be.&lt;/p&gt;&lt;h4&gt;3. &lt;strong&gt;GitHub Sponsors&lt;/strong&gt;&lt;/h4&gt;&lt;p&gt;We actively encourage projects to use &lt;a href="https://github.com/sponsors"&gt;GitHub Sponsors&lt;/a&gt; to build sustainable funding for maintainers.&lt;/p&gt;&lt;h4&gt;4. &lt;strong&gt;Company Formation&lt;/strong&gt;&lt;/h4&gt;&lt;p&gt;You can:&lt;/p&gt;&lt;ul&gt;&lt;li&gt;Set up a company around your project&lt;/li&gt;&lt;li&gt;Offer commercial editions with additional features&lt;/li&gt;&lt;li&gt;Provide paid support tiers&lt;/li&gt;&lt;li&gt;Keep premium packages proprietary (as long as the core remains permissive)&lt;/li&gt;&lt;/ul&gt;&lt;h3&gt;Our Core Principle&lt;/h3&gt;&lt;p&gt;&lt;strong&gt;"As long as the source is free, that is our condition."&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;You don't have to make everything available as free packages. Premium support, commercial editions, and value-added services are all compatible with Foundation membership.&lt;/p&gt;&lt;h2&gt;Addressing the AutoMapper Misconception&lt;/h2&gt;&lt;p&gt;Recently, AutoMapper graduated from the .NET Foundation, and we want to clarify what happened to prevent misconceptions.&lt;/p&gt;&lt;h3&gt;What Actually Happened&lt;/h3&gt;&lt;p&gt;AutoMapper transitioned to the Reciprocal Public License (RPL 1.5), which is a copyleft license rather than a permissive one. While RPL 1.5 is technically an open source license, it doesn't align with the Foundation's requirement for permissive licenses.&lt;/p&gt;&lt;h3&gt;What Did NOT Happen&lt;/h3&gt;&lt;ul&gt;&lt;li&gt;AutoMapper was NOT forced out for wanting to monetize&lt;/li&gt;&lt;li&gt;AutoMapper was NOT punished for going commercial&lt;/li&gt;&lt;li&gt;The Foundation does NOT prohibit dual licensing or commercial models&lt;/li&gt;&lt;/ul&gt;&lt;h3&gt;The Real Reason&lt;/h3&gt;&lt;p&gt;The departure occurred on friendly, amicable terms because AutoMapper's new license model (using a copyleft license) no longer met our eligibility criteria. The Foundation maintains that member projects must use permissive open source licenses.&lt;/p&gt;&lt;p&gt;&lt;strong&gt;If AutoMapper had chosen a dual-license model&lt;/strong&gt; with:&lt;/p&gt;&lt;ul&gt;&lt;li&gt;One permissive license (like MIT or Apache 2.0) for open source&lt;/li&gt;&lt;li&gt;One commercial license for enterprises&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;...it would have remained fully compatible with Foundation membership!&lt;/p&gt;&lt;h2&gt;For Maintainers: Your Options&lt;/h2&gt;&lt;p&gt;As a .NET Foundation project maintainer, you have flexibility:&lt;/p&gt;&lt;h3&gt;You CAN:&lt;/h3&gt;&lt;ul&gt;&lt;li&gt;Implement dual licensing (permissive + commercial)&lt;/li&gt;&lt;li&gt;Form a company around your project&lt;/li&gt;&lt;li&gt;Charge for premium support and services&lt;/li&gt;&lt;li&gt;Create paid tiers and enterprise offerings&lt;/li&gt;&lt;li&gt;Use GitHub Sponsors or other funding platforms&lt;/li&gt;&lt;li&gt;Keep some packages proprietary (as long as core is permissive)&lt;/li&gt;&lt;li&gt;Offer commercial warranties and guarantees&lt;/li&gt;&lt;/ul&gt;&lt;h3&gt;You CANNOT:&lt;/h3&gt;&lt;ul&gt;&lt;li&gt;Switch to a copyleft license (GPL, AGPL, RPL, etc.)&lt;/li&gt;&lt;li&gt;Make mandatory dependencies use copyleft licenses&lt;/li&gt;&lt;/ul&gt;&lt;h3&gt;&lt;strong&gt;Why copyleft licenses aren't compatible:&lt;/strong&gt;&lt;/h3&gt;&lt;p&gt;Copyleft licenses require derivative works to be licensed under the same terms, which can be less attractive to corporate users and doesn't align with the Foundation's goal of broad ecosystem compatibility.&lt;/p&gt;&lt;p&gt;The .NET community has a significantly higher proportion of enterprise and corporate users compared to many other open source ecosystems. These organizations often have strict legal requirements around license compatibility and derivative works. Permissive licenses provide the flexibility these users need, which is why they're fundamental to the Foundation's mission of supporting the .NET ecosystem effectively.&lt;/p&gt;&lt;h2&gt;Questions?&lt;/h2&gt;&lt;p&gt;Feel free to contact us contact@dotnetfoundation.org, join our discord or interact with us on social media.&lt;/p&gt;&lt;p&gt;&lt;strong&gt;Remember:&lt;/strong&gt; We want you to succeed sustainably! Building commercial services, offering paid support, and creating business models around your open source work is not just allowed&amp;mdash;it's encouraged.&lt;/p&gt;</a10:content></item><item><guid isPermaLink="false">urn:uuid:e8a4b68a-bc44-4fe6-8157-53c8369eaf2c</guid><link>https://dotnetfoundation.org/news-events/detail/spotlight-on-json-everything-a-unified-toolkit-for-json-standards-in-.net</link><a10:author><a10:name> </a10:name></a10:author><title>Spotlight on JSON Everything: A Unified Toolkit for JSON Standards in .NET</title><description>JSON Everything is a fast, open-source .NET library for JSON Schema, Patch, Path, Pointer, and Logic—modular, standards-compliant, and built for modern .NET apps. Simplify your JSON workflows today.</description><pubDate>Wed, 23 Apr 2025 18:55:14 Z</pubDate><a10:content type="text">&lt;div&gt;&lt;p paraid="1146336256" paraeid="{c2bc2b01-88b6-4d46-ae9e-020fdd738a0c}{49}"&gt;Working with JSON is a daily ritual for modern developers, but managing different specifications like Schema validation, Patch operations, or Path queries can quickly become a fragmented experience. That's where JSON Everything steps in. Built entirely in .NET and designed with standards compliance and performance in mind, JSON Everything is a powerful open-source project that brings all the major JSON specs under one well-structured roof.&amp;nbsp;&lt;/p&gt;&lt;/div&gt;&lt;div&gt;&lt;p paraid="1614082985" paraeid="{c2bc2b01-88b6-4d46-ae9e-020fdd738a0c}{67}"&gt;&lt;span style="background-color:transparent;color:inherit;font-family:inherit;font-size:inherit;text-align:inherit;text-transform:inherit;word-spacing:normal;caret-color:auto;white-space:inherit;"&gt;At its core, JSON Everything is a library collection that implements a wide range of JSON-related technologies. Developers can validate documents against JSON Schema (including support for drafts 6, 7, 2019-09, and 2020-12), apply JSON Patch operations, navigate with JSON Pointer, filter with JSON Path, and even execute logic using JSON Logic&amp;mdash;all from within a consistent and extensible .NET API. The project also includes mutation and transformation utilities, which allow you to modify and convert JSON data for more advanced workflows.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;/div&gt;&lt;div&gt;&lt;p paraid="332910138" paraeid="{c2bc2b01-88b6-4d46-ae9e-020fdd738a0c}{77}"&gt;&lt;span style="background-color:transparent;color:inherit;font-family:inherit;font-size:inherit;text-align:inherit;text-transform:inherit;word-spacing:normal;caret-color:auto;white-space:inherit;"&gt;Each part of the project is modular, which means you can integrate only the components you need, making it easy to manage and reducing unnecessary complexity. Whether you're validating request payloads in your web API, transforming configuration files, building complex rules engines, or creating developer tools, JSON Everything offers a comprehensive foundation that can be tailored to your specific requirements.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;/div&gt;&lt;div&gt;&lt;p paraid="822002735" paraeid="{c2bc2b01-88b6-4d46-ae9e-020fdd738a0c}{87}"&gt;&lt;span style="background-color:transparent;color:inherit;font-family:inherit;font-size:inherit;text-align:inherit;text-transform:inherit;word-spacing:normal;caret-color:auto;white-space:inherit;"&gt;Created and actively maintained by Greg Dennis, JSON Everything is thoughtfully documented, available on NuGet, and open for community contributions. The documentation site makes it easy to explore each module and understand how it fits into your application, while the GitHub repository provides everything you need to get started quickly.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;/div&gt;&lt;div&gt;&lt;p paraid="949001003" paraeid="{c2bc2b01-88b6-4d46-ae9e-020fdd738a0c}{97}"&gt;&lt;span style="background-color:transparent;color:inherit;font-family:inherit;font-size:inherit;text-align:inherit;text-transform:inherit;word-spacing:normal;caret-color:auto;white-space:inherit;"&gt;If you're building .NET applications that rely on JSON&amp;mdash;and let's be honest, who isn't&amp;mdash;JSON Everything is one of those projects that deserves a spot in your toolbox. It simplifies complexity by providing a unified solution for managing different JSON specifications, streamlines standards support by implementing a wide range of JSON-related technologies, and brings order to the ever-growing world of JSON-based workflows.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;/div&gt;&lt;div&gt;&lt;p paraid="542827932" paraeid="{c2bc2b01-88b6-4d46-ae9e-020fdd738a0c}{111}"&gt;&lt;span style="background-color:transparent;color:inherit;font-family:inherit;font-size:inherit;text-align:inherit;text-transform:inherit;word-spacing:normal;caret-color:auto;white-space:inherit;"&gt;You can learn more at docs.json-everything.net or dive into the code at github.com/json-everything/json-everything.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;/div&gt;</a10:content></item><item><guid isPermaLink="false">urn:uuid:3929c224-ab9c-431d-81bc-14934f1f57a5</guid><link>https://dotnetfoundation.org/news-events/detail/a-guide-to-establishing-a-thriving-.net-user-group-from-scratch</link><a10:author><a10:name> </a10:name></a10:author><title>A Guide to Establishing a Thriving .NET User Group from Scratch</title><description>A passion for community, willingness to market a bit, ready to face initial setbacks - Building a .NET community is no different from building any other local community, except - The .NET Foundation has your back.</description><pubDate>Sun, 18 Feb 2024 21:32:47 Z</pubDate><a10:content type="text">&lt;p&gt;The year is 2015, and I have recently moved to my new home, New York City. The city has been merciless in slapping me with alternate-side parking tickets. I wanted to help myself and fellow poor souls (mostly myself, though) from this atrocity. An immediate solution that came to mind was to build an app that reminds me to move my car. The idea is good, but I need to learn how to build an app. I already knew C# and .NET. I wouldn&amp;rsquo;t say I liked the idea of different code bases for iOS and Android. I looked into several cross-platform native app development tools and settled on Xamarin. As a .NET developer for a decade, Xamarin was an easy choice for me. There may have been alternatives, but learning something new - meh!!&lt;/p&gt;&lt;p&gt;Now, the immediate challenge is - how do I learn Xamarin? Sure, take it to Google. I saw the pricing on Xamarin University and thought it might be cheaper to pay for a parking garage at that point instead of building an App.&lt;strong&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;Enter the .NET User Group&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&lt;/strong&gt;&lt;span style="background-color:transparent;color:inherit;font-family:inherit;font-size:inherit;text-align:inherit;text-transform:inherit;word-spacing:normal;caret-color:auto;white-space:inherit;"&gt;I found this .NET Mobile Developers User Group on meetup.com. So, I started attending their events in Microsoft&amp;rsquo;s 11 Times Square Office. Learned some and started building my app.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;Hold on - I live in Queens, and going to Times Square for events was too much. I know, I know - the World pays a lot to be in Times Square. But we New Yorkers dread it. So what is the alternative? Build a user group where I live? Why not!&lt;/p&gt;&lt;p&gt;Thought is good. But how do I start a meetup group? And how would folks know it exists? What if I am the only one who shows up for the event? I also need an event space; who has that? So, I decided to do some digging.&lt;/p&gt;&lt;h2&gt;&lt;strong&gt;My first event&lt;/strong&gt;&lt;br /&gt;&lt;/h2&gt;&lt;h2&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/h2&gt;&lt;p&gt;Years passed by. I even just remembered that I needed
    to do my events. Then, one fine day, I started volunteering at a Code Academy
    in New York. I am back to where I hate most - a stage. I finally decided to
    build and publish my event on meetup.com and Eventbrite; I contacted &amp;ldquo;Austin
    Space&amp;rdquo; in Forest Hills, Queens. It is a small co-working space in the locality
    where I live. The owner was kind enough to provide me with a meeting room large
    enough to host 30 folks. All of a sudden, everything started to come together.
    I published my event - &amp;ldquo;Native C# Xamarin cross-platform iOS/Android app,&amp;rdquo;
    under my group &amp;ldquo;Good Coders NYC (NYCGC)&amp;rdquo; on meetup.com (The Group is dead now)
    and Eventbrite. I saw a sign-up of 25 folks, and on 27th April 2017, about 20
    of them showed up for my talk. I built a small Xamarin App live for the
    audience. I started a programming talk series, &amp;ldquo;What they didn&amp;rsquo;t teach you
    about programming,&amp;rdquo; at the same space and held some more events.&lt;strong style="background-color:transparent;color:var(--color-h2);font-size:var(--font-size-h2);text-align:inherit;text-transform:inherit;word-spacing:normal;caret-color:auto;white-space:inherit;"&gt;&amp;nbsp;&lt;/strong&gt;&lt;/p&gt;&lt;h2&gt;&lt;strong&gt;Pandemic and all is unwell&lt;/strong&gt;
 &lt;o:p&gt;&lt;/o:p&gt;&lt;/h2&gt;&lt;p&gt;The Pandemic put an end to in-person gatherings. I
    never enjoyed talking to a camera. So, I shut down my Group (As the meetup.com
    fees were exorbitant) when nobody was doing in-person events. The idea of
    running an event was dead in me. Then, around the end of 2021, I saw an
    interesting post from &amp;ldquo;.NET Foundation&amp;rdquo; on LinkedIn. The post was a call for
    volunteers for the &amp;ldquo;Outreach&amp;rdquo; committee. I did not know what the meeting was
    about, but whoever is on that call might know when Microsoft&amp;rsquo;s office event space
    opens up.&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;Volunteering at the .NET Foundation&lt;/strong&gt;&lt;br /&gt;&lt;/p&gt;&lt;h2&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/h2&gt;&lt;p&gt;I joined a call using the link provided, a usual teams call. Phew, some of the renowned programming folks were on the call. Though I did not get an answer about when the office space opens up for events (no one knew), I learned that 400+ .NET Meetups, including the one I used to go to a long time ago, were under the .NET Foundation umbrella. Several of these groups still need to meet due to the difficulties during the Pandemic. It strikes me, well - what if I reach out to some of the organizers of these &amp;ldquo;inactive&amp;rdquo; groups? Would they be happy that I would host events for the Group? In short - That&amp;rsquo;s exactly what I did. After contacting their leadership team, I became a co-organizer of the &amp;ldquo;.NET Mobile Developers User Group&amp;rdquo; in New York City.&lt;/p&gt;&lt;p&gt;The next challenge was to find an expert to present at my first event. I wasn&amp;rsquo;t aware of the &lt;a href="https://dotnetfoundation.org/community/speakers"&gt;speaker list&lt;/a&gt; under .NET Foundation website. .NET Maui was coming out, and a talk on it would be fantastic. I took extreme measures to create a &lt;a href="https://github.com/CommunityToolkit/Maui/discussions/255"&gt;discussion&lt;/a&gt; under Maui CommunityToolkit on GitHub. Found Pedro Jesus, a Maui Toolkit Insider, as a result. Looking back, I realize that finding a speaker without knowing where to look was terrible.&lt;/p&gt;&lt;p&gt;In each of the events I held with the Group, I had the proper knowledge on &amp;ldquo;how to&amp;rdquo; promote it better because I knew all the resources available at the .NET Foundation, which helped me do so. I used their template, theming, and Virtual User Group postings to get the events I hosted to reach newer viewership numbers.&lt;/p&gt;&lt;p&gt;&lt;strong&gt;.NET Foundation to the rescue&lt;/strong&gt;&lt;/p&gt;&lt;h2&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/h2&gt;&lt;p&gt;Had I known all the resources available for my discourse in 2017, I wouldn&amp;rsquo;t have spent half the time running the event. Talking at an event is easy - I do this plenty, but running an event is a different ball game. Running an event where you are also the speaker - Brutal!&lt;/p&gt;&lt;p&gt;.NET Foundation offers several essential resources that help organizers across the globe run meetup User Groups and events successfully. Here are the steps I would take if I had to start and run a .NET user group now.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;h2&gt;&lt;strong&gt;1. A new .NET User Group (Or Not!)&lt;/strong&gt;
 &lt;o:p&gt;&lt;/o:p&gt;&lt;/h2&gt;&lt;p class="MsoNormal" style="margin-left:.5in;text-indent:-24.0pt;mso-list:l2 level1 lfo2;"&gt;&lt;!--[if !supportLists]--&gt;1.&lt;span style="font-variant-numeric:normal;font-variant-east-asian:normal;font-variant-alternates:normal;font-kerning:auto;font-optical-sizing:auto;font-feature-settings:normal;font-variation-settings:normal;font-variant-position:normal;font-size:7pt;line-height:normal;font-family:'Times New Roman';"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
 &lt;/span&gt;
 &lt;!--[endif]--&gt;Create a user group only if it is necessary.&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin-left:1.0in;text-indent:-24.0pt;mso-list:l1 level2 lfo3;"&gt;&lt;!--[if !supportLists]--&gt;&amp;ndash;&lt;span style="font-variant-numeric:normal;font-variant-east-asian:normal;font-variant-alternates:normal;font-kerning:auto;font-optical-sizing:auto;font-feature-settings:normal;font-variation-settings:normal;font-variant-position:normal;font-size:7pt;line-height:normal;font-family:'Times New Roman';"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
 &lt;/span&gt;
 &lt;!--[endif]--&gt;Identify if other user groups are in your area -
    Use this interactive &lt;a href="https://www.meetup.com/pro/dotnet/"&gt;map&lt;/a&gt;.&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin-left:1.0in;text-indent:-24.0pt;mso-list:l1 level2 lfo3;"&gt;&lt;!--[if !supportLists]--&gt;&amp;ndash;&lt;span style="font-variant-numeric:normal;font-variant-east-asian:normal;font-variant-alternates:normal;font-kerning:auto;font-optical-sizing:auto;font-feature-settings:normal;font-variation-settings:normal;font-variant-position:normal;font-size:7pt;line-height:normal;font-family:'Times New Roman';"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
 &lt;/span&gt;
 &lt;!--[endif]--&gt;For example, New York City already has two User
    Groups. Adding more would add little value.&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin-left:1.0in;text-indent:-24.0pt;mso-list:l1 level2 lfo3;"&gt;&lt;!--[if !supportLists]--&gt;&amp;ndash;&lt;span style="font-variant-numeric:normal;font-variant-east-asian:normal;font-variant-alternates:normal;font-kerning:auto;font-optical-sizing:auto;font-feature-settings:normal;font-variation-settings:normal;font-variant-position:normal;font-size:7pt;line-height:normal;font-family:'Times New Roman';"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
 &lt;/span&gt;
 &lt;!--[endif]--&gt;Check if the identified UGs have active events;
    if not, contact the leadership team about your intentions to host events for
    the Group.&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin-left:1.0in;text-indent:-24.0pt;mso-list:l1 level2 lfo3;"&gt;&lt;!--[if !supportLists]--&gt;&amp;ndash;&lt;span style="font-variant-numeric:normal;font-variant-east-asian:normal;font-variant-alternates:normal;font-kerning:auto;font-optical-sizing:auto;font-feature-settings:normal;font-variation-settings:normal;font-variant-position:normal;font-size:7pt;line-height:normal;font-family:'Times New Roman';"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
 &lt;/span&gt;
 &lt;!--[endif]--&gt;If you became a co-organizer to an established
    User Group - congrats; proceed to Step 3.&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin-left:.5in;text-indent:-24.0pt;mso-list:l2 level1 lfo2;"&gt;&lt;!--[if !supportLists]--&gt;2.&lt;span style="font-variant-numeric:normal;font-variant-east-asian:normal;font-variant-alternates:normal;font-kerning:auto;font-optical-sizing:auto;font-feature-settings:normal;font-variation-settings:normal;font-variant-position:normal;font-size:7pt;line-height:normal;font-family:'Times New Roman';"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
 &lt;/span&gt;
 &lt;!--[endif]--&gt;Submit a request to create &lt;a href="https://aka.ms/add-dotnet-meetup"&gt;a new .NET User Group&lt;/a&gt;
 &lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;&lt;p class="CaptionedFigure" style="margin-left:.5in;text-indent:-24.0pt;mso-list:l0 level1 lfo1;"&gt;&lt;!--[if !supportLists]--&gt;
 &lt;!--[endif]--&gt;
 &lt;o:p&gt;&lt;/o:p&gt;
&lt;/p&gt;&lt;img src="https://dotnetfoundation.org/images/default-source/board/new-group-request2.png?sfvrsn=8bb994f2_2" alt="" sf-size="100" /&gt;&lt;p class="ImageCaption" style="margin-left:.5in;text-indent:-24.0pt;mso-list:l0 level1 lfo1;"&gt;&lt;span style="background-color:transparent;color:inherit;font-family:inherit;font-size:inherit;text-align:inherit;text-indent:-24pt;text-transform:inherit;word-spacing:normal;caret-color:auto;white-space:inherit;"&gt;3.&lt;/span&gt;&lt;span style="background-color:transparent;color:inherit;text-align:inherit;text-indent:-24pt;text-transform:inherit;word-spacing:normal;caret-color:auto;white-space:inherit;font-variant-numeric:normal;font-variant-east-asian:normal;font-variant-alternates:normal;font-kerning:auto;font-optical-sizing:auto;font-feature-settings:normal;font-variation-settings:normal;font-variant-position:normal;font-size:7pt;line-height:normal;font-family:'Times New Roman';"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
 &lt;/span&gt;&lt;span style="background-color:transparent;color:inherit;font-family:inherit;font-size:inherit;text-align:inherit;text-indent:-24pt;text-transform:inherit;word-spacing:normal;caret-color:auto;white-space:inherit;"&gt;Provide the details below for your new user
        group.&lt;/span&gt;
 &lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;&lt;p class="Compact" style="margin-left:1.0in;text-indent:-24.0pt;mso-list:l1 level2 lfo3;"&gt;&lt;!--[if !supportLists]--&gt;&amp;ndash;&lt;span style="font-variant-numeric:normal;font-variant-east-asian:normal;font-variant-alternates:normal;font-kerning:auto;font-optical-sizing:auto;font-feature-settings:normal;font-variation-settings:normal;font-variant-position:normal;font-size:7pt;line-height:normal;font-family:'Times New Roman';"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
 &lt;/span&gt;
 &lt;!--[endif]--&gt;Name your Group. Here are some templates&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;&lt;p class="Compact" style="margin-left:1.5in;text-indent:-24.0pt;mso-list:l1 level3 lfo3;"&gt;&lt;!--[if !supportLists]--&gt;&amp;bull;&lt;span style="font-variant-numeric:normal;font-variant-east-asian:normal;font-variant-alternates:normal;font-kerning:auto;font-optical-sizing:auto;font-feature-settings:normal;font-variation-settings:normal;font-variant-position:normal;font-size:7pt;line-height:normal;font-family:'Times New Roman';"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
 &lt;/span&gt;
 &lt;!--[endif]--&gt;[City] .NET Developer Group - Quite inclusive of
    all .NET Dev.&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;&lt;p class="Compact" style="margin-left:1.5in;text-indent:-24.0pt;mso-list:l1 level3 lfo3;"&gt;&lt;!--[if !supportLists]--&gt;&amp;bull;&lt;span style="font-variant-numeric:normal;font-variant-east-asian:normal;font-variant-alternates:normal;font-kerning:auto;font-optical-sizing:auto;font-feature-settings:normal;font-variation-settings:normal;font-variant-position:normal;font-size:7pt;line-height:normal;font-family:'Times New Roman';"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
 &lt;/span&gt;
 &lt;!--[endif]--&gt;[City] Mobile .NET Developer Group - Attracts
    Mobile Developers such as Xamarin and Maui Folks&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;&lt;p class="Compact" style="margin-left:1.5in;text-indent:-24.0pt;mso-list:l1 level3 lfo3;"&gt;&lt;!--[if !supportLists]--&gt;&amp;bull;&lt;span style="font-variant-numeric:normal;font-variant-east-asian:normal;font-variant-alternates:normal;font-kerning:auto;font-optical-sizing:auto;font-feature-settings:normal;font-variation-settings:normal;font-variant-position:normal;font-size:7pt;line-height:normal;font-family:'Times New Roman';"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
 &lt;/span&gt;
 &lt;!--[endif]--&gt;[City] .NET Web Developer Group - Focus here is
    ASP.NET/ASPNET Core Developers&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;&lt;p class="Compact" style="margin-left:1.5in;text-indent:-24.0pt;mso-list:l1 level3 lfo3;"&gt;&lt;!--[if !supportLists]--&gt;&amp;bull;&lt;span style="font-variant-numeric:normal;font-variant-east-asian:normal;font-variant-alternates:normal;font-kerning:auto;font-optical-sizing:auto;font-feature-settings:normal;font-variation-settings:normal;font-variant-position:normal;font-size:7pt;line-height:normal;font-family:'Times New Roman';"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
 &lt;/span&gt;
 &lt;!--[endif]--&gt;[City] C# User Group - C# Enthusiasts here.&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;&lt;p class="Compact" style="margin-left:1.0in;text-indent:-24.0pt;mso-list:l1 level2 lfo3;"&gt;&lt;!--[if !supportLists]--&gt;&amp;ndash;&lt;span style="font-variant-numeric:normal;font-variant-east-asian:normal;font-variant-alternates:normal;font-kerning:auto;font-optical-sizing:auto;font-feature-settings:normal;font-variation-settings:normal;font-variant-position:normal;font-size:7pt;line-height:normal;font-family:'Times New Roman';"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
 &lt;/span&gt;
 &lt;!--[endif]--&gt;Here are some examples using the above templates&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;&lt;p class="Compact" style="margin-left:1.5in;text-indent:-24.0pt;mso-list:l1 level3 lfo3;"&gt;&lt;!--[if !supportLists]--&gt;&amp;bull;&lt;span style="font-variant-numeric:normal;font-variant-east-asian:normal;font-variant-alternates:normal;font-kerning:auto;font-optical-sizing:auto;font-feature-settings:normal;font-variation-settings:normal;font-variant-position:normal;font-size:7pt;line-height:normal;font-family:'Times New Roman';"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
 &lt;/span&gt;
 &lt;!--[endif]--&gt;Allentown .NET User Group, Scranton Mobile .NET
    User Group. You get the idea.&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;&lt;p class="Compact" style="margin-left:1.0in;text-indent:-24.0pt;mso-list:l1 level2 lfo3;"&gt;&lt;!--[if !supportLists]--&gt;&amp;ndash;&lt;span style="font-variant-numeric:normal;font-variant-east-asian:normal;font-variant-alternates:normal;font-kerning:auto;font-optical-sizing:auto;font-feature-settings:normal;font-variation-settings:normal;font-variant-position:normal;font-size:7pt;line-height:normal;font-family:'Times New Roman';"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
 &lt;/span&gt;
 &lt;!--[endif]--&gt;Cheat Code - Ask Chat GPT on an excellent group
    name if nothing strikes&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;&lt;p class="Compact" style="margin-left:1.0in;text-indent:-24.0pt;mso-list:l1 level2 lfo3;"&gt;&lt;!--[if !supportLists]--&gt;&amp;ndash;&lt;span style="font-variant-numeric:normal;font-variant-east-asian:normal;font-variant-alternates:normal;font-kerning:auto;font-optical-sizing:auto;font-feature-settings:normal;font-variation-settings:normal;font-variant-position:normal;font-size:7pt;line-height:normal;font-family:'Times New Roman';"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
 &lt;/span&gt;
 &lt;!--[endif]--&gt;Provide a motto and some content for your User
    Group. Again, looking at other user groups would be of help here.&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin-left:.5in;text-indent:-24.0pt;mso-list:l2 level1 lfo2;"&gt;&lt;!--[if !supportLists]--&gt;4.&lt;span style="font-variant-numeric:normal;font-variant-east-asian:normal;font-variant-alternates:normal;font-kerning:auto;font-optical-sizing:auto;font-feature-settings:normal;font-variation-settings:normal;font-variant-position:normal;font-size:7pt;line-height:normal;font-family:'Times New Roman';"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
 &lt;/span&gt;
 &lt;!--[endif]--&gt;Once the new User Group is approved. Follow
    these steps immediately.&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin-left:1.0in;text-indent:-24.0pt;mso-list:l1 level2 lfo3;"&gt;&lt;!--[if !supportLists]--&gt;&amp;ndash;&lt;span style="font-variant-numeric:normal;font-variant-east-asian:normal;font-variant-alternates:normal;font-kerning:auto;font-optical-sizing:auto;font-feature-settings:normal;font-variation-settings:normal;font-variant-position:normal;font-size:7pt;line-height:normal;font-family:'Times New Roman';"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
 &lt;/span&gt;
 &lt;!--[endif]--&gt;On meetup.com, under Group Settings -&amp;gt; Basic
    Info, modify the direct group URL. Make sure this is easy to remember. Also,
    provide the correct Zip code.&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin-left:1.5in;text-indent:-24.0pt;mso-list:l1 level3 lfo3;"&gt;&lt;!--[if !supportLists]--&gt;&amp;bull;&lt;span style="font-variant-numeric:normal;font-variant-east-asian:normal;font-variant-alternates:normal;font-kerning:auto;font-optical-sizing:auto;font-feature-settings:normal;font-variation-settings:normal;font-variant-position:normal;font-size:7pt;line-height:normal;font-family:'Times New Roman';"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
 &lt;/span&gt;
 &lt;!--[endif]--&gt;e.g.&amp;nbsp;meetup.com/allentowndotnetdev&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;&lt;img src="https://dotnetfoundation.org/images/default-source/board/meetup_url_zip.png?sfvrsn=2c0beca8_2" alt="" sf-size="100" /&gt;&lt;span style="background-color:transparent;color:inherit;font-family:inherit;font-size:inherit;text-align:inherit;text-indent:-24pt;text-transform:inherit;word-spacing:normal;caret-color:auto;white-space:inherit;"&gt;&lt;/span&gt;&lt;p class="ImageCaption" style="margin-left:1.5in;text-indent:-24.0pt;mso-list:l0 level3 lfo1;"&gt;&amp;nbsp;&lt;/p&gt;&lt;p class="ImageCaption" style="margin-left:1.5in;text-indent:-24.0pt;mso-list:l0 level3 lfo1;"&gt;&lt;o:p&gt;&lt;/o:p&gt;
&lt;/p&gt;&lt;p class="MsoNormal" style="margin-left:1.0in;text-indent:-24.0pt;mso-list:l1 level2 lfo3;"&gt;&lt;!--[if !supportLists]--&gt;&amp;ndash;&lt;span style="font-variant-numeric:normal;font-variant-east-asian:normal;font-variant-alternates:normal;font-kerning:auto;font-optical-sizing:auto;font-feature-settings:normal;font-variation-settings:normal;font-variant-position:normal;font-size:7pt;line-height:normal;font-family:'Times New Roman';"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
 &lt;/span&gt;
 &lt;!--[endif]--&gt;On meetup.com, under Group Settings -&amp;gt; Basic
    Info, Select the right topics and tags. This helps with Google search and
    search within meetup.com. After all - you would want folks to find your events.
    Don&amp;rsquo;t you?&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin-left:1.5in;text-indent:-24.0pt;mso-list:l1 level3 lfo3;"&gt;&lt;!--[if !supportLists]--&gt;&amp;bull;&lt;span style="font-variant-numeric:normal;font-variant-east-asian:normal;font-variant-alternates:normal;font-kerning:auto;font-optical-sizing:auto;font-feature-settings:normal;font-variation-settings:normal;font-variant-position:normal;font-size:7pt;line-height:normal;font-family:'Times New Roman';"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
 &lt;/span&gt;
 &lt;!--[endif]--&gt;For a Mobile .NET Group, tags like &amp;ldquo;.NET Maui,&amp;rdquo;
    &amp;ldquo;Xamarin,&amp;rdquo; &amp;ldquo;Cross-Platform Development,&amp;rdquo; etc. help.&lt;span style="background-color:transparent;color:inherit;font-family:inherit;font-size:inherit;text-align:inherit;text-indent:-24pt;text-transform:inherit;word-spacing:normal;caret-color:auto;white-space:inherit;"&gt;&lt;/span&gt;&lt;/p&gt;&lt;img src="https://dotnetfoundation.org/images/default-source/board/meetup_topics.png?sfvrsn=9a09f8cd_2" alt="" sf-size="100" /&gt;&lt;p class="ImageCaption" style="margin-left:1.5in;text-indent:-24.0pt;mso-list:l0 level3 lfo1;"&gt;&lt;o:p&gt;&lt;/o:p&gt;
&lt;/p&gt;&lt;p class="MsoNormal" style="margin-left:1.0in;text-indent:-24.0pt;mso-list:l1 level2 lfo3;"&gt;&lt;!--[if !supportLists]--&gt;&amp;ndash;&lt;span style="font-variant-numeric:normal;font-variant-east-asian:normal;font-variant-alternates:normal;font-kerning:auto;font-optical-sizing:auto;font-feature-settings:normal;font-variation-settings:normal;font-variant-position:normal;font-size:7pt;line-height:normal;font-family:'Times New Roman';"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
 &lt;/span&gt;
 &lt;!--[endif]--&gt;On meetup.com, under Group Settings -&amp;gt; Basic
    Info, Link social media details such as LinkedIn and Twitter.&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin-left:1.0in;text-indent:-24.0pt;mso-list:l1 level2 lfo3;"&gt;&lt;!--[if !supportLists]--&gt;&amp;ndash;&lt;span style="font-variant-numeric:normal;font-variant-east-asian:normal;font-variant-alternates:normal;font-kerning:auto;font-optical-sizing:auto;font-feature-settings:normal;font-variation-settings:normal;font-variant-position:normal;font-size:7pt;line-height:normal;font-family:'Times New Roman';"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
 &lt;/span&gt;
 &lt;!--[endif]--&gt;On meetup.com, under Group Settings -&amp;gt; New
    Member settings, provide a warm welcome message to New members, tell a bit
    about what the Group and its events are about, and what to expect out of these
    events.&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin-left:1.0in;text-indent:-24.0pt;mso-list:l1 level2 lfo3;"&gt;&lt;!--[if !supportLists]--&gt;&amp;ndash;&lt;span style="font-variant-numeric:normal;font-variant-east-asian:normal;font-variant-alternates:normal;font-kerning:auto;font-optical-sizing:auto;font-feature-settings:normal;font-variation-settings:normal;font-variant-position:normal;font-size:7pt;line-height:normal;font-family:'Times New Roman';"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
 &lt;/span&gt;
 &lt;!--[endif]--&gt;On meetup.com, under Group Settings -&amp;gt;
    Optional features, provide an easy-to-remember mailing list address. This helps
    members to identify your emails as &amp;ldquo;not spam.&amp;rdquo;&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin-left:1.5in;text-indent:-24.0pt;mso-list:l1 level3 lfo3;"&gt;&lt;!--[if !supportLists]--&gt;&amp;bull;&lt;span style="font-variant-numeric:normal;font-variant-east-asian:normal;font-variant-alternates:normal;font-kerning:auto;font-optical-sizing:auto;font-feature-settings:normal;font-variation-settings:normal;font-variant-position:normal;font-size:7pt;line-height:normal;font-family:'Times New Roman';"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
 &lt;/span&gt;
 &lt;!--[endif]--&gt;e.g.&amp;nbsp;allentown-mobiledev&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;&lt;img src="https://dotnetfoundation.org/images/default-source/board/meetup_mailing_list.png?sfvrsn=50b5cf25_2" alt="" sf-size="100" /&gt;&lt;span style="background-color:transparent;color:inherit;font-family:inherit;font-size:inherit;text-align:inherit;text-indent:-24pt;text-transform:inherit;word-spacing:normal;caret-color:auto;white-space:inherit;"&gt;&lt;/span&gt;&lt;p class="MsoNormal" style="margin-left:1.0in;text-indent:-24.0pt;mso-list:l1 level2 lfo3;"&gt;&lt;!--[if !supportLists]--&gt;&amp;ndash;&lt;span style="font-variant-numeric:normal;font-variant-east-asian:normal;font-variant-alternates:normal;font-kerning:auto;font-optical-sizing:auto;font-feature-settings:normal;font-variation-settings:normal;font-variant-position:normal;font-size:7pt;line-height:normal;font-family:'Times New Roman';"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
 &lt;/span&gt;
 &lt;!--[endif]--&gt;Finally, you may design your Group&amp;rsquo;s group home
    page image. Use &lt;a href="https://www.canva.com/"&gt;canva.com&lt;/a&gt; if you need help
    with how.&lt;span style="background-color:transparent;color:inherit;font-family:inherit;font-size:inherit;text-align:inherit;text-indent:0px;text-transform:inherit;word-spacing:normal;caret-color:auto;white-space:inherit;"&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin-left:1.0in;text-indent:-24.0pt;mso-list:l1 level2 lfo3;"&gt;&lt;!--[if !supportLists]--&gt;&amp;ndash;&lt;span style="font-variant-numeric:normal;font-variant-east-asian:normal;font-variant-alternates:normal;font-kerning:auto;font-optical-sizing:auto;font-feature-settings:normal;font-variation-settings:normal;font-variant-position:normal;font-size:7pt;line-height:normal;font-family:'Times New Roman';"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
 &lt;/span&gt;
 &lt;!--[endif]--&gt;There are other features and settings on
    meetup.com at your disposal. You can revisit these as your Group gains traction
    and visibility.&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;h2&gt;&lt;strong&gt;2. Plan your first event&lt;/strong&gt;
 &lt;o:p&gt;&lt;/o:p&gt;&lt;/h2&gt;&lt;p class="FirstParagraph"&gt;The key is to be ready to host the first event as soon
    as your new User Group request is approved. Better yet, plan for 3 events at
    the start itself. Some organizers desert the Group after the initial event.
    Consistency is the key here.&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin-left:.5in;text-indent:-24.0pt;mso-list:l0 level1 lfo1;"&gt;&lt;!--[if !supportLists]--&gt;&amp;bull;&lt;span style="font-variant-numeric:normal;font-variant-east-asian:normal;font-variant-alternates:normal;font-kerning:auto;font-optical-sizing:auto;font-feature-settings:normal;font-variation-settings:normal;font-variant-position:normal;font-size:7pt;line-height:normal;font-family:'Times New Roman';"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
 &lt;/span&gt;
 &lt;!--[endif]--&gt;Find speakers, and reach out to them. Get an
    Agenda and date set.&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin-left:1.0in;text-indent:-24.0pt;mso-list:l0 level2 lfo1;"&gt;&lt;!--[if !supportLists]--&gt;&amp;ndash;&lt;span style="font-variant-numeric:normal;font-variant-east-asian:normal;font-variant-alternates:normal;font-kerning:auto;font-optical-sizing:auto;font-feature-settings:normal;font-variation-settings:normal;font-variant-position:normal;font-size:7pt;line-height:normal;font-family:'Times New Roman';"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
 &lt;/span&gt;
 &lt;!--[endif]--&gt;You may look into the &lt;a href="https://dotnetfoundation.org/community/speakers"&gt;.NET Foundation&amp;rsquo;s
        Speaker list.&lt;/a&gt;
 &lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin-left:1.0in;text-indent:-24.0pt;mso-list:l0 level2 lfo1;"&gt;&lt;!--[if !supportLists]--&gt;&amp;ndash;&lt;span style="font-variant-numeric:normal;font-variant-east-asian:normal;font-variant-alternates:normal;font-kerning:auto;font-optical-sizing:auto;font-feature-settings:normal;font-variation-settings:normal;font-variant-position:normal;font-size:7pt;line-height:normal;font-family:'Times New Roman';"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
 &lt;/span&gt;
 &lt;!--[endif]--&gt;&lt;a href="https://mvp.microsoft.com/MvpSearch"&gt;Microsoft
 MVPs&lt;/a&gt; love to talk.&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin-left:1.0in;text-indent:-24.0pt;mso-list:l0 level2 lfo1;"&gt;&lt;!--[if !supportLists]--&gt;&amp;ndash;&lt;span style="font-variant-numeric:normal;font-variant-east-asian:normal;font-variant-alternates:normal;font-kerning:auto;font-optical-sizing:auto;font-feature-settings:normal;font-variation-settings:normal;font-variant-position:normal;font-size:7pt;line-height:normal;font-family:'Times New Roman';"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
 &lt;/span&gt;
 &lt;!--[endif]--&gt;&lt;a href="https://www.wearedotnet.io/creators"&gt;.NET
 Content Creators&lt;/a&gt; list is great as well.&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin-left:.5in;text-indent:-24.0pt;mso-list:l0 level1 lfo1;"&gt;&lt;!--[if !supportLists]--&gt;&amp;bull;&lt;span style="font-variant-numeric:normal;font-variant-east-asian:normal;font-variant-alternates:normal;font-kerning:auto;font-optical-sizing:auto;font-feature-settings:normal;font-variation-settings:normal;font-variant-position:normal;font-size:7pt;line-height:normal;font-family:'Times New Roman';"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
 &lt;/span&gt;
 &lt;!--[endif]--&gt;&lt;strong&gt;Key Info: It is essential to know that
        meetup.com promotes new groups with an event on their home page for relevant
        zip codes for a few weeks. Use this crucial period to make an impression and
        gather a good attendee list for your first event. This is another important
        reason for launching your Group and first event together.&lt;/strong&gt;&lt;span style="background-color:transparent;color:inherit;font-family:inherit;font-size:inherit;text-align:inherit;text-indent:-24pt;text-transform:inherit;word-spacing:normal;caret-color:auto;white-space:inherit;"&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin-left:.5in;text-indent:-24.0pt;mso-list:l0 level1 lfo1;"&gt;&lt;span style="background-color:transparent;color:inherit;font-family:inherit;font-size:inherit;text-align:inherit;text-indent:-24pt;text-transform:inherit;word-spacing:normal;caret-color:auto;white-space:inherit;"&gt;&amp;bull;&lt;/span&gt;&lt;span style="background-color:transparent;color:inherit;text-align:inherit;text-indent:-24pt;text-transform:inherit;word-spacing:normal;caret-color:auto;white-space:inherit;font-variant-numeric:normal;font-variant-east-asian:normal;font-variant-alternates:normal;font-kerning:auto;font-optical-sizing:auto;font-feature-settings:normal;font-variation-settings:normal;font-variant-position:normal;font-size:7pt;line-height:normal;font-family:'Times New Roman';"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
 &lt;/span&gt;&lt;span style="background-color:transparent;color:inherit;font-family:inherit;font-size:inherit;text-align:inherit;text-indent:-24pt;text-transform:inherit;word-spacing:normal;caret-color:auto;white-space:inherit;"&gt;Need a PowerPoint template for a head start? &lt;/span&gt;&lt;a href="https://github.com/dotnet-foundation/wg-outreach/blob/main/virtual_meetup/Virtual.User.Group.Slides.pptx" style="font-family:inherit;font-size:inherit;text-align:inherit;text-indent:-24pt;text-transform:inherit;word-spacing:normal;white-space:inherit;"&gt;Use
 this&lt;/a&gt;&lt;strong&gt;&lt;/strong&gt;&lt;/p&gt;&lt;h2&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/h2&gt;&lt;h3&gt;2.1 In-Person event&lt;/h3&gt;&lt;p class="FirstParagraph"&gt;The below section only applies to in-person events.
    With the pandemic jeopardizing the plans of several event organizers, some have
    resorted to doing virtual events. Still, the best form of events is in person.
    In-person events allow members to create personal connections, create
    networking opportunities, and generate an overall &amp;ldquo;went to an event&amp;rdquo; feeling!&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;&lt;p class="Compact" style="margin-left:.5in;text-indent:-24.0pt;mso-list:l0 level1 lfo1;"&gt;&lt;!--[if !supportLists]--&gt;&amp;bull;&lt;span style="font-variant-numeric:normal;font-variant-east-asian:normal;font-variant-alternates:normal;font-kerning:auto;font-optical-sizing:auto;font-feature-settings:normal;font-variation-settings:normal;font-variant-position:normal;font-size:7pt;line-height:normal;font-family:'Times New Roman';"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
 &lt;/span&gt;
 &lt;!--[endif]--&gt;First things first, make sure to declare your
    event is in person. We are in 2023, and folks assume all events are online.
    Declare it explicitly like this on your event title Eg. &amp;ldquo;&lt;strong&gt;[In-Person]&lt;/strong&gt;
 Maui .NET - A Deep Dive with John Doe&amp;rdquo;&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;&lt;p class="Compact" style="margin-left:.5in;text-indent:-24.0pt;mso-list:l0 level1 lfo1;"&gt;&lt;!--[if !supportLists]--&gt;&amp;bull;&lt;span style="font-variant-numeric:normal;font-variant-east-asian:normal;font-variant-alternates:normal;font-kerning:auto;font-optical-sizing:auto;font-feature-settings:normal;font-variation-settings:normal;font-variant-position:normal;font-size:7pt;line-height:normal;font-family:'Times New Roman';"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
 &lt;/span&gt;
 &lt;!--[endif]--&gt;Finding a venue. Often, this is the hardest
    challenge. There are several options based on my experience here.&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;&lt;p class="Compact" style="margin-left:1.0in;text-indent:-24.0pt;mso-list:l0 level2 lfo1;"&gt;&lt;!--[if !supportLists]--&gt;&amp;ndash;&lt;span style="font-variant-numeric:normal;font-variant-east-asian:normal;font-variant-alternates:normal;font-kerning:auto;font-optical-sizing:auto;font-feature-settings:normal;font-variation-settings:normal;font-variant-position:normal;font-size:7pt;line-height:normal;font-family:'Times New Roman';"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
 &lt;/span&gt;
 &lt;!--[endif]--&gt;Microsoft reactors help organizers to book large
    meeting rooms in Microsoft offices. Write an email providing your location of
    preference to &lt;a href="mailto:reactor@microsoft.com"&gt;reactor@microsoft.com&lt;/a&gt;
 . If there is a location in your city, they will help you.&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;&lt;p class="Compact" style="margin-left:1.0in;text-indent:-24.0pt;mso-list:l0 level2 lfo1;"&gt;&lt;!--[if !supportLists]--&gt;&amp;ndash;&lt;span style="font-variant-numeric:normal;font-variant-east-asian:normal;font-variant-alternates:normal;font-kerning:auto;font-optical-sizing:auto;font-feature-settings:normal;font-variation-settings:normal;font-variant-position:normal;font-size:7pt;line-height:normal;font-family:'Times New Roman';"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
 &lt;/span&gt;
 &lt;!--[endif]--&gt;Co-working spaces - Reach out to co-working
    spaces in your city. Most would happily host your events, at least for the
    first few times. You may have heard about famous co-working brands like WeWork,
    Industrious etc. Even better, reach out to your local neighborhood small-time
    Co-Working space. They happily host you after hours (I did this with great
    success).&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;&lt;p class="Compact" style="margin-left:1.0in;text-indent:-24.0pt;mso-list:l0 level2 lfo1;"&gt;&lt;!--[if !supportLists]--&gt;&amp;ndash;&lt;span style="font-variant-numeric:normal;font-variant-east-asian:normal;font-variant-alternates:normal;font-kerning:auto;font-optical-sizing:auto;font-feature-settings:normal;font-variation-settings:normal;font-variant-position:normal;font-size:7pt;line-height:normal;font-family:'Times New Roman';"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
 &lt;/span&gt;
 &lt;!--[endif]--&gt;Library - Reach out to your local library. Since
    your events are about learning, they might assist you.&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;&lt;p class="Compact" style="margin-left:1.0in;text-indent:-24.0pt;mso-list:l0 level2 lfo1;"&gt;&lt;!--[if !supportLists]--&gt;&amp;ndash;&lt;span style="font-variant-numeric:normal;font-variant-east-asian:normal;font-variant-alternates:normal;font-kerning:auto;font-optical-sizing:auto;font-feature-settings:normal;font-variation-settings:normal;font-variant-position:normal;font-size:7pt;line-height:normal;font-family:'Times New Roman';"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
 &lt;/span&gt;
 &lt;!--[endif]--&gt;Community Clubs - Several community clubs
    dedicated event space good enough to start. E.g. &lt;a href="https://www.bgca.org/"&gt;Boys
 and Girls club of America&lt;/a&gt;
 &lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;&lt;p class="Compact" style="margin-left:1.0in;text-indent:-24.0pt;mso-list:l0 level2 lfo1;"&gt;&lt;!--[if !supportLists]--&gt;&amp;ndash;&lt;span style="font-variant-numeric:normal;font-variant-east-asian:normal;font-variant-alternates:normal;font-kerning:auto;font-optical-sizing:auto;font-feature-settings:normal;font-variation-settings:normal;font-variant-position:normal;font-size:7pt;line-height:normal;font-family:'Times New Roman';"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
 &lt;/span&gt;
 &lt;!--[endif]--&gt;Local colleges and schools - Education
    institutions are a good place to host after regular school hours.&lt;br /&gt;&lt;/p&gt;&lt;p class="Compact" style="margin-left:1.0in;text-indent:-24.0pt;mso-list:l0 level2 lfo1;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;span style="background-color:transparent;color:inherit;font-family:inherit;font-size:inherit;text-align:inherit;text-indent:-24pt;text-transform:inherit;word-spacing:normal;caret-color:auto;white-space:inherit;"&gt;&amp;ndash;&lt;/span&gt;&lt;span style="background-color:transparent;color:inherit;text-align:inherit;text-indent:-24pt;text-transform:inherit;word-spacing:normal;caret-color:auto;white-space:inherit;font-variant-numeric:normal;font-variant-east-asian:normal;font-variant-alternates:normal;font-kerning:auto;font-optical-sizing:auto;font-feature-settings:normal;font-variation-settings:normal;font-variant-position:normal;font-size:7pt;line-height:normal;font-family:'Times New Roman';"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
 &lt;/span&gt;&lt;span style="background-color:transparent;color:inherit;font-family:inherit;font-size:inherit;text-align:inherit;text-indent:-24pt;text-transform:inherit;word-spacing:normal;caret-color:auto;white-space:inherit;"&gt;Local unassuming spots - As the pandemic created
        havoc in the event-hosting industry, several venues would love to host you to
        &amp;ldquo;get back&amp;rdquo; to business and as self-promotion.&lt;/span&gt;&lt;span style="background-color:transparent;color:var(--color-h2);font-family:inherit;font-size:var(--font-size-h2);text-align:inherit;text-transform:inherit;word-spacing:normal;caret-color:auto;white-space:inherit;font-weight:bold;text-indent:0px;"&gt;&lt;/span&gt;&lt;/p&gt;&lt;h2&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/h2&gt;&lt;h3&gt;2.2 Virtual Event&lt;/h3&gt;&lt;p class="FirstParagraph"&gt;The below section is only applicable to virtual events.
    Hosting virtual events is more manageable than in-person events. Still, as an
    organizer, it is less rewarding. .NET Foundation has a dedicated &amp;ldquo;Virtual User
    Group Team&amp;rdquo; that can help you promote and live-stream your event through its
    aggregated virtual event listing group called &lt;a href="https://www.meetup.com/dotnet-virtual-user-group"&gt;.NET Virtual User Group&lt;/a&gt;.
 Follow the below steps to take advantage of it.&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin-left:.5in;text-indent:-24.0pt;mso-list:l0 level1 lfo1;"&gt;&lt;!--[if !supportLists]--&gt;&amp;bull;&lt;span style="font-variant-numeric:normal;font-variant-east-asian:normal;font-variant-alternates:normal;font-kerning:auto;font-optical-sizing:auto;font-feature-settings:normal;font-variation-settings:normal;font-variant-position:normal;font-size:7pt;line-height:normal;font-family:'Times New Roman';"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
 &lt;/span&gt;
 &lt;!--[endif]--&gt;Submit your event using this &lt;a href="https://bit.ly/2OohRR2"&gt;form&lt;/a&gt;. Here, you can choose if you want to
    receive streaming support for your Events.&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin-left:.5in;text-indent:-24.0pt;mso-list:l0 level1 lfo1;"&gt;&lt;!--[if !supportLists]--&gt;&amp;bull;&lt;span style="font-variant-numeric:normal;font-variant-east-asian:normal;font-variant-alternates:normal;font-kerning:auto;font-optical-sizing:auto;font-feature-settings:normal;font-variation-settings:normal;font-variant-position:normal;font-size:7pt;line-height:normal;font-family:'Times New Roman';"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
 &lt;/span&gt;
 &lt;!--[endif]--&gt;Mark your event with the title &amp;ldquo;Virtual&amp;rdquo;. This
    helps members to understand from the title that the event is hosted virtually.
    E.g., &amp;ldquo;&lt;strong&gt;[Virtual]&lt;/strong&gt; Maui .NET - A Deep Dive with John Doe&amp;rdquo;&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin-left:.5in;text-indent:-24.0pt;mso-list:l0 level1 lfo1;"&gt;&lt;!--[if !supportLists]--&gt;&amp;bull;&lt;span style="font-variant-numeric:normal;font-variant-east-asian:normal;font-variant-alternates:normal;font-kerning:auto;font-optical-sizing:auto;font-feature-settings:normal;font-variation-settings:normal;font-variant-position:normal;font-size:7pt;line-height:normal;font-family:'Times New Roman';"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
 &lt;/span&gt;
 &lt;!--[endif]--&gt;If you chose streaming support&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;&lt;p class="Compact" style="margin-left:1.0in;text-indent:-24.0pt;mso-list:l0 level2 lfo1;"&gt;&lt;!--[if !supportLists]--&gt;&amp;ndash;&lt;span style="font-variant-numeric:normal;font-variant-east-asian:normal;font-variant-alternates:normal;font-kerning:auto;font-optical-sizing:auto;font-feature-settings:normal;font-variation-settings:normal;font-variant-position:normal;font-size:7pt;line-height:normal;font-family:'Times New Roman';"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
 &lt;/span&gt;
 &lt;!--[endif]--&gt;The team at .NET Foundation will provide you
    with a YouTube link where the event will go live. You may update this link on
    your meetup.com event listing and other platforms where the event is
    promoted/posted and can be emailed to attendees through a mailing list.&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;&lt;p class="Compact" style="margin-left:1.0in;text-indent:-24.0pt;mso-list:l0 level2 lfo1;"&gt;&lt;!--[if !supportLists]--&gt;&amp;ndash;&lt;span style="font-variant-numeric:normal;font-variant-east-asian:normal;font-variant-alternates:normal;font-kerning:auto;font-optical-sizing:auto;font-feature-settings:normal;font-variation-settings:normal;font-variant-position:normal;font-size:7pt;line-height:normal;font-family:'Times New Roman';"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
 &lt;/span&gt;
 &lt;!--[endif]--&gt;The team at .NET Foundation will provide you
    with a StreamYard URL and instructions to log in as a producer on the day of
    the event.&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;&lt;p class="Compact" style="margin-left:1.5in;text-indent:-24.0pt;mso-list:l0 level3 lfo1;"&gt;&lt;!--[if !supportLists]--&gt;&amp;bull;&lt;span style="font-variant-numeric:normal;font-variant-east-asian:normal;font-variant-alternates:normal;font-kerning:auto;font-optical-sizing:auto;font-feature-settings:normal;font-variation-settings:normal;font-variant-position:normal;font-size:7pt;line-height:normal;font-family:'Times New Roman';"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
 &lt;/span&gt;
 &lt;!--[endif]--&gt;Learn more about producing using StreamYard. You
    may need &lt;a href="https://www.youtube.com/results?search_query=learn+streamyard"&gt;this&lt;/a&gt;.&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;&lt;p class="Compact" style="margin-left:1.0in;text-indent:-24.0pt;mso-list:l0 level2 lfo1;"&gt;&lt;!--[if !supportLists]--&gt;&amp;ndash;&lt;span style="font-variant-numeric:normal;font-variant-east-asian:normal;font-variant-alternates:normal;font-kerning:auto;font-optical-sizing:auto;font-feature-settings:normal;font-variation-settings:normal;font-variant-position:normal;font-size:7pt;line-height:normal;font-family:'Times New Roman';"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
 &lt;/span&gt;
 &lt;!--[endif]--&gt;The event will be live-streamed to .NET
    Foundation&amp;rsquo;s YouTube channel on the day of the event.&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;&lt;p class="Compact" style="margin-left:1.0in;text-indent:-24.0pt;mso-list:l0 level2 lfo1;"&gt;&lt;!--[if !supportLists]--&gt;&amp;ndash;&lt;span style="font-variant-numeric:normal;font-variant-east-asian:normal;font-variant-alternates:normal;font-kerning:auto;font-optical-sizing:auto;font-feature-settings:normal;font-variation-settings:normal;font-variant-position:normal;font-size:7pt;line-height:normal;font-family:'Times New Roman';"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
 &lt;/span&gt;
 &lt;!--[endif]--&gt;StreamYard has a Password-less login process
    that works through access codes. These codes are sent to
    &amp;ldquo;VirtualUserGroupTeam@dotnetfoundation.org&amp;rdquo;. So, you would need the help of the
    Virtual User Group Team to get this access code prior to the event. The team
    can be reached out via VirtualUserGroupTeam@dotnetfoundation.org&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;&lt;p class="Compact" style="margin-left:1.0in;text-indent:-24.0pt;mso-list:l0 level2 lfo1;"&gt;&lt;!--[if !supportLists]--&gt;&amp;ndash;&lt;span style="font-variant-numeric:normal;font-variant-east-asian:normal;font-variant-alternates:normal;font-kerning:auto;font-optical-sizing:auto;font-feature-settings:normal;font-variation-settings:normal;font-variant-position:normal;font-size:7pt;line-height:normal;font-family:'Times New Roman';"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
 &lt;/span&gt;
 &lt;!--[endif]--&gt;On the day of your event, make sure to log in to
    StreamYard at least 15 minutes prior to the event using the log-in ID
    VirtualUserGroupTeam@dotnetfoundation.org. Complete the login process using the
    access code provided by the Virtual User Group team.&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin-left:.5in;text-indent:-24.0pt;mso-list:l0 level1 lfo1;"&gt;&lt;!--[if !supportLists]--&gt;&amp;bull;&lt;span style="font-variant-numeric:normal;font-variant-east-asian:normal;font-variant-alternates:normal;font-kerning:auto;font-optical-sizing:auto;font-feature-settings:normal;font-variation-settings:normal;font-variant-position:normal;font-size:7pt;line-height:normal;font-family:'Times New Roman';"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
 &lt;/span&gt;
 &lt;!--[endif]--&gt;If you do not need any streaming support&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;&lt;p class="Compact" style="margin-left:1.0in;text-indent:-24.0pt;mso-list:l0 level2 lfo1;"&gt;&lt;!--[if !supportLists]--&gt;&amp;ndash;&lt;span style="font-variant-numeric:normal;font-variant-east-asian:normal;font-variant-alternates:normal;font-kerning:auto;font-optical-sizing:auto;font-feature-settings:normal;font-variation-settings:normal;font-variant-position:normal;font-size:7pt;line-height:normal;font-family:'Times New Roman';"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
 &lt;/span&gt;
 &lt;!--[endif]--&gt;The team at .NET Foundation will promote the
    event to Virtual User Group members.
&lt;/p&gt;&lt;p class="Compact" style="margin-left:1.0in;text-indent:-24.0pt;mso-list:l0 level2 lfo1;"&gt;&lt;span style="background-color:transparent;color:inherit;font-family:inherit;font-size:inherit;text-align:inherit;text-transform:inherit;word-spacing:normal;caret-color:auto;white-space:inherit;text-indent:-24pt;"&gt;&amp;ndash;&lt;/span&gt;&lt;span style="background-color:transparent;color:inherit;text-align:inherit;text-transform:inherit;word-spacing:normal;caret-color:auto;white-space:inherit;text-indent:-24pt;font-variant-numeric:normal;font-variant-east-asian:normal;font-variant-alternates:normal;font-kerning:auto;font-optical-sizing:auto;font-feature-settings:normal;font-variation-settings:normal;font-variant-position:normal;font-size:7pt;line-height:normal;font-family:'Times New Roman';"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
 &lt;/span&gt;&lt;span style="background-color:transparent;color:inherit;font-family:inherit;font-size:inherit;text-align:inherit;text-transform:inherit;word-spacing:normal;caret-color:auto;white-space:inherit;text-indent:-24pt;"&gt;Post-event, The team at .NET Foundation can add
        the YouTube video of your event to its Virtual Event Playlist at your request.&lt;/span&gt;&lt;span style="background-color:transparent;color:inherit;font-family:inherit;font-size:inherit;text-align:inherit;text-indent:0px;text-transform:inherit;word-spacing:normal;caret-color:auto;white-space:inherit;"&gt;&lt;/span&gt;&lt;/p&gt;&lt;h2&gt;&lt;strong style="background-color:transparent;color:var(--color-h2);font-size:var(--font-size-h2);text-align:inherit;text-transform:inherit;word-spacing:normal;caret-color:auto;white-space:inherit;"&gt;3. Promoting your event&lt;/strong&gt;&lt;br /&gt;&lt;/h2&gt;&lt;h2&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/h2&gt;&lt;p class="MsoNormal" style="margin-left:.5in;text-indent:-24.0pt;mso-list:l1 level1 lfo2;"&gt;&lt;!--[if !supportLists]--&gt;&amp;bull;&lt;span style="font-variant-numeric:normal;font-variant-east-asian:normal;font-variant-alternates:normal;font-kerning:auto;font-optical-sizing:auto;font-feature-settings:normal;font-variation-settings:normal;font-variant-position:normal;font-size:7pt;line-height:normal;font-family:'Times New Roman';"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
 &lt;/span&gt;
 &lt;!--[endif]--&gt;I said this before: MeetUp.com promotes new
    groups with at least one starting event on their home page for relevant zip
    codes for a few weeks. This is a crucial period to gain the first batch of
    members being added to your community. Make sure to launch your meetup User
    Group with at least one event.&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin-left:.5in;text-indent:-24.0pt;mso-list:l1 level1 lfo2;"&gt;&lt;!--[if !supportLists]--&gt;&amp;bull;&lt;span style="font-variant-numeric:normal;font-variant-east-asian:normal;font-variant-alternates:normal;font-kerning:auto;font-optical-sizing:auto;font-feature-settings:normal;font-variation-settings:normal;font-variant-position:normal;font-size:7pt;line-height:normal;font-family:'Times New Roman';"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
 &lt;/span&gt;
 &lt;!--[endif]--&gt;If you have a good following on Social media.
    Use those platforms to promote your event. LinkedIn and Twitter are a good
    start.&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin-left:.5in;text-indent:-24.0pt;mso-list:l1 level1 lfo2;"&gt;&lt;!--[if !supportLists]--&gt;&amp;bull;&lt;span style="font-variant-numeric:normal;font-variant-east-asian:normal;font-variant-alternates:normal;font-kerning:auto;font-optical-sizing:auto;font-feature-settings:normal;font-variation-settings:normal;font-variant-position:normal;font-size:7pt;line-height:normal;font-family:'Times New Roman';"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
 &lt;/span&gt;
 &lt;!--[endif]--&gt;A day or two before the event, send an email to
    remind attendees of the upcoming event. You can also post the email on the
    meetup User Group&amp;rsquo;s board. Also, post a message in the event&amp;rsquo;s comment section
    and chat section, like,&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin-left:.5in;text-indent:-24.0pt;mso-list:l0 level1 lfo1;"&gt;&lt;!--[if !supportLists]--&gt;&amp;nbsp;&lt;span style="font-variant-numeric:normal;font-variant-east-asian:normal;font-variant-alternates:normal;font-kerning:auto;font-optical-sizing:auto;font-feature-settings:normal;font-variation-settings:normal;font-variant-position:normal;font-size:7pt;line-height:normal;font-family:'Times New Roman';"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
 &lt;/span&gt;
 &lt;!--[endif]--&gt;&amp;ldquo;We can&amp;rsquo;t contain our enthusiasm to host you
    tomorrow at 5:00 PM EST for our exciting talk on .NET Maui by John Doe. Looking
    forward to seeing you all in person&amp;rdquo;.&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin-left:.5in;text-indent:-24.0pt;mso-list:l0 level1 lfo1;"&gt;&lt;!--[if !supportLists]--&gt;&amp;nbsp;&lt;span style="font-variant-numeric:normal;font-variant-east-asian:normal;font-variant-alternates:normal;font-kerning:auto;font-optical-sizing:auto;font-feature-settings:normal;font-variation-settings:normal;font-variant-position:normal;font-size:7pt;line-height:normal;font-family:'Times New Roman';"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
 &lt;/span&gt;
 &lt;!--[endif]--&gt;You can do this a few hours prior to the event
    as well.&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin-left:.5in;text-indent:-24.0pt;mso-list:l1 level1 lfo2;"&gt;&lt;!--[if !supportLists]--&gt;&amp;bull;&lt;span style="font-variant-numeric:normal;font-variant-east-asian:normal;font-variant-alternates:normal;font-kerning:auto;font-optical-sizing:auto;font-feature-settings:normal;font-variation-settings:normal;font-variant-position:normal;font-size:7pt;line-height:normal;font-family:'Times New Roman';"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
 &lt;/span&gt;
 &lt;!--[endif]--&gt;During your in-person event, take a few pictures
    from good angles and post them to your event on Meetup.com.&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin-left:.5in;text-indent:-24.0pt;mso-list:l1 level1 lfo2;"&gt;&lt;!--[if !supportLists]--&gt;&amp;bull;&lt;span style="font-variant-numeric:normal;font-variant-east-asian:normal;font-variant-alternates:normal;font-kerning:auto;font-optical-sizing:auto;font-feature-settings:normal;font-variation-settings:normal;font-variant-position:normal;font-size:7pt;line-height:normal;font-family:'Times New Roman';"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
 &lt;/span&gt;
 &lt;!--[endif]--&gt;You may also post these pictures on LinkedIn
    and/or Twitter the next day with a thank you note.&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin-left:.5in;text-indent:-24.0pt;mso-list:l1 level1 lfo2;"&gt;&lt;!--[if !supportLists]--&gt;&amp;bull;&lt;span style="font-variant-numeric:normal;font-variant-east-asian:normal;font-variant-alternates:normal;font-kerning:auto;font-optical-sizing:auto;font-feature-settings:normal;font-variation-settings:normal;font-variant-position:normal;font-size:7pt;line-height:normal;font-family:'Times New Roman';"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
 &lt;/span&gt;
 &lt;!--[endif]--&gt;If your event was virtual, a link to the YouTube
    content can also be posted on socials.&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin-left:.5in;text-indent:-24.0pt;mso-list:l1 level1 lfo2;"&gt;&lt;!--[if !supportLists]--&gt;&amp;bull;&lt;span style="font-variant-numeric:normal;font-variant-east-asian:normal;font-variant-alternates:normal;font-kerning:auto;font-optical-sizing:auto;font-feature-settings:normal;font-variation-settings:normal;font-variant-position:normal;font-size:7pt;line-height:normal;font-family:'Times New Roman';"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
 &lt;/span&gt;
 &lt;!--[endif]--&gt;Now that you have hosted your first event, sit
    back, relax, and enjoy your victory. The day after the event is an excellent
    day to display your event&amp;rsquo;s glory. Post the pictures on meetup.com and socials,
    and send thank you notes to attendees using the meetup email list.
&lt;/p&gt;&lt;p class="MsoNormal" style="margin-left:.5in;text-indent:-24.0pt;mso-list:l1 level1 lfo2;"&gt;&lt;span style="font-family:Cambria, serif;font-size:12pt;background-color:initial;text-align:inherit;text-transform:inherit;word-spacing:normal;caret-color:auto;white-space:inherit;"&gt;&lt;/span&gt;&lt;span style="background-color:transparent;color:inherit;font-family:inherit;font-size:inherit;text-align:inherit;text-indent:-24pt;text-transform:inherit;word-spacing:normal;caret-color:auto;white-space:inherit;"&gt;&amp;bull;&lt;/span&gt;&lt;span style="background-color:transparent;color:inherit;text-align:inherit;text-indent:-24pt;text-transform:inherit;word-spacing:normal;caret-color:auto;white-space:inherit;font-variant-numeric:normal;font-variant-east-asian:normal;font-variant-alternates:normal;font-kerning:auto;font-optical-sizing:auto;font-feature-settings:normal;font-variation-settings:normal;font-variant-position:normal;font-size:7pt;line-height:normal;font-family:'Times New Roman';"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
 &lt;/span&gt;&lt;span style="background-color:transparent;color:inherit;font-family:inherit;font-size:inherit;text-align:inherit;text-indent:-24pt;text-transform:inherit;word-spacing:normal;caret-color:auto;white-space:inherit;"&gt;You should start planning for the next event
        soon. The success of a group relies on its consistency. It is a good practice
        to stick to a monthly schedule for events. E.g., &amp;ldquo;Second Tuesday&amp;rdquo; of every
        month.&lt;/span&gt;&lt;/p&gt;&lt;h2 style="margin-left:0.5in;text-indent:-24pt;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;span style="background-color:transparent;color:var(--color-h2);font-family:inherit;font-size:var(--font-size-h2);text-align:inherit;text-indent:0px;text-transform:inherit;word-spacing:normal;caret-color:auto;white-space:inherit;"&gt;&lt;strong&gt;4. Building a community&lt;/strong&gt;&lt;/span&gt;
&lt;/h2&gt;&lt;h2&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/h2&gt;&lt;p class="FirstParagraph"&gt;You hosted a few events, and your events started
    getting popular. Now what? Meetup.com helps you create and promote your events.
    In the long run, you would engage other platforms to grow your community beyond
    MeetUp.com.&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;&lt;p class="Compact" style="margin-left:.5in;text-indent:-24.0pt;mso-list:l0 level1 lfo1;"&gt;&lt;!--[if !supportLists]--&gt;&amp;bull;&lt;span style="font-variant-numeric:normal;font-variant-east-asian:normal;font-variant-alternates:normal;font-kerning:auto;font-optical-sizing:auto;font-feature-settings:normal;font-variation-settings:normal;font-variant-position:normal;font-size:7pt;line-height:normal;font-family:'Times New Roman';"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
 &lt;/span&gt;
 &lt;!--[endif]--&gt;Start listing your events on LinkedIn - LinkedIn
    now supports creating events. You may create a new LinkedIn event with the
    exact content of your meetup event.&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;&lt;p class="Compact" style="margin-left:.5in;text-indent:-24.0pt;mso-list:l0 level1 lfo1;"&gt;&lt;!--[if !supportLists]--&gt;&amp;bull;&lt;span style="font-variant-numeric:normal;font-variant-east-asian:normal;font-variant-alternates:normal;font-kerning:auto;font-optical-sizing:auto;font-feature-settings:normal;font-variation-settings:normal;font-variant-position:normal;font-size:7pt;line-height:normal;font-family:'Times New Roman';"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
 &lt;/span&gt;
 &lt;!--[endif]--&gt;When more than one event is posted on your
    meetup User Group, use the &amp;ldquo;Feature this event&amp;rdquo; to highlight one of your events
    to your members.&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;&lt;p class="Compact" style="margin-left:.5in;text-indent:-24.0pt;mso-list:l0 level1 lfo1;"&gt;&lt;!--[if !supportLists]--&gt;&amp;bull;&lt;span style="font-variant-numeric:normal;font-variant-east-asian:normal;font-variant-alternates:normal;font-kerning:auto;font-optical-sizing:auto;font-feature-settings:normal;font-variation-settings:normal;font-variant-position:normal;font-size:7pt;line-height:normal;font-family:'Times New Roman';"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
 &lt;/span&gt;
 &lt;!--[endif]--&gt;Start listing your events on EventBrite.com.
    Eventbrite is a quality event platform if you are in North America.&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;&lt;p class="Compact" style="margin-left:.5in;text-indent:-24.0pt;mso-list:l0 level1 lfo1;"&gt;&lt;!--[if !supportLists]--&gt;&amp;bull;&lt;span style="font-variant-numeric:normal;font-variant-east-asian:normal;font-variant-alternates:normal;font-kerning:auto;font-optical-sizing:auto;font-feature-settings:normal;font-variation-settings:normal;font-variant-position:normal;font-size:7pt;line-height:normal;font-family:'Times New Roman';"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
 &lt;/span&gt;
 &lt;!--[endif]--&gt;You can use features like &amp;ldquo;Clone an event&amp;rdquo; and
    &amp;ldquo;Copy event&amp;rdquo; features of these platforms to quickly create a new event.&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;&lt;p class="Compact" style="margin-left:.5in;text-indent:-24.0pt;mso-list:l0 level1 lfo1;"&gt;&lt;!--[if !supportLists]--&gt;&amp;bull;&lt;span style="font-variant-numeric:normal;font-variant-east-asian:normal;font-variant-alternates:normal;font-kerning:auto;font-optical-sizing:auto;font-feature-settings:normal;font-variation-settings:normal;font-variant-position:normal;font-size:7pt;line-height:normal;font-family:'Times New Roman';"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
 &lt;/span&gt;
 &lt;!--[endif]--&gt;Create branding - Create a logo, landing page
    image, etc., for your community. Canva.com has a lot of resources to help here.&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;&lt;p class="Compact" style="margin-left:.5in;text-indent:-24.0pt;mso-list:l0 level1 lfo1;"&gt;&lt;!--[if !supportLists]--&gt;&amp;bull;&lt;span style="font-variant-numeric:normal;font-variant-east-asian:normal;font-variant-alternates:normal;font-kerning:auto;font-optical-sizing:auto;font-feature-settings:normal;font-variation-settings:normal;font-variant-position:normal;font-size:7pt;line-height:normal;font-family:'Times New Roman';"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
 &lt;/span&gt;
 &lt;!--[endif]--&gt;LinkedIn Page - Create a LinkedIn page for your
    .NET Community. You may invite your followers to join this page. LinkedIn
    allows 1000 invites a month (As of this writing). Apply your branding and logos
    to this page. You should consistently post your events on this page and choose
    to engage with your members.&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;&lt;p class="Compact" style="margin-left:.5in;text-indent:-24.0pt;mso-list:l0 level1 lfo1;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;span style="background-color:transparent;color:inherit;font-family:inherit;font-size:inherit;text-align:inherit;text-indent:-24pt;text-transform:inherit;word-spacing:normal;caret-color:auto;white-space:inherit;"&gt;&amp;bull;&lt;/span&gt;&lt;span style="background-color:transparent;color:inherit;text-align:inherit;text-indent:-24pt;text-transform:inherit;word-spacing:normal;caret-color:auto;white-space:inherit;font-variant-numeric:normal;font-variant-east-asian:normal;font-variant-alternates:normal;font-kerning:auto;font-optical-sizing:auto;font-feature-settings:normal;font-variation-settings:normal;font-variant-position:normal;font-size:7pt;line-height:normal;font-family:'Times New Roman';"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
 &lt;/span&gt;&lt;span style="background-color:transparent;color:inherit;font-family:inherit;font-size:inherit;text-align:inherit;text-indent:-24pt;text-transform:inherit;word-spacing:normal;caret-color:auto;white-space:inherit;"&gt;Your website - A simple GitHub page could help
        you launch a website for your community. This is recommended only when you grow
        your community large enough and would see benefits in optimized SEO.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&amp;bull;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Substack - &lt;a href="https://substack.com/"&gt;Substack&lt;/a&gt; just grew out to be a better writer focused LinkedIn. If you would like to build a newsletter and an email list, this is a nice platform to start.&lt;/p&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;h2 style="margin-left:0.5in;text-indent:-24pt;"&gt;&lt;span style="background-color:initial;font-family:inherit;font-size:inherit;text-align:inherit;text-indent:0px;text-transform:inherit;word-spacing:normal;caret-color:auto;white-space:inherit;"&gt;&lt;/span&gt;&lt;span style="background-color:transparent;color:inherit;font-family:inherit;font-size:inherit;text-align:inherit;text-indent:-24pt;text-transform:inherit;word-spacing:normal;caret-color:auto;white-space:inherit;"&gt;&lt;/span&gt;&lt;strong style="background-color:transparent;color:var(--color-h2);font-size:var(--font-size-h2);text-align:inherit;text-indent:0px;text-transform:inherit;word-spacing:normal;caret-color:auto;white-space:inherit;"&gt;Additional Resources&lt;/strong&gt;&lt;/h2&gt;&lt;h2 style="margin-left:0.5in;text-indent:-24pt;"&gt;&lt;span style="background-color:transparent;color:inherit;font-family:inherit;font-size:inherit;text-align:inherit;text-indent:0px;text-transform:inherit;word-spacing:normal;caret-color:auto;white-space:inherit;"&gt;&lt;/span&gt;&lt;/h2&gt;&lt;p class="MsoNormal" style="margin-left:.5in;text-indent:-24.0pt;mso-list:l0 level1 lfo1;"&gt;&lt;!--[if !supportLists]--&gt;&amp;bull;&lt;span style="font-variant-numeric:normal;font-variant-east-asian:normal;font-variant-alternates:normal;font-kerning:auto;font-optical-sizing:auto;font-feature-settings:normal;font-variation-settings:normal;font-variant-position:normal;font-size:7pt;line-height:normal;font-family:'Times New Roman';"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
 &lt;/span&gt;
 &lt;!--[endif]--&gt;Have questions? Reach us at
    VirtualUserGroupTeam@dotnetfoundation.org or &lt;a href="https://discord.gg/FnEGN3XAmv" target="_blank"&gt;.NET Foundation Discord&lt;/a&gt;
 &lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin-left:.5in;text-indent:-24.0pt;mso-list:l0 level1 lfo1;"&gt;&lt;!--[if !supportLists]--&gt;&amp;bull;&lt;span style="font-variant-numeric:normal;font-variant-east-asian:normal;font-variant-alternates:normal;font-kerning:auto;font-optical-sizing:auto;font-feature-settings:normal;font-variation-settings:normal;font-variant-position:normal;font-size:7pt;line-height:normal;font-family:'Times New Roman';"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
 &lt;/span&gt;
 &lt;!--[endif]--&gt;Need a head start with a PowerPoint Presentation
    Template? Use this &lt;a href="https://github.com/dotnet-foundation/wg-outreach/blob/main/virtual_meetup/Virtual.User.Group.Slides.pptx"&gt;one&lt;/a&gt;.
 It has the .NET Foundation theming already applied to it.&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin-left:.5in;text-indent:-24.0pt;mso-list:l0 level1 lfo1;"&gt;&lt;!--[if !supportLists]--&gt;&amp;bull;&lt;span style="font-variant-numeric:normal;font-variant-east-asian:normal;font-variant-alternates:normal;font-kerning:auto;font-optical-sizing:auto;font-feature-settings:normal;font-variation-settings:normal;font-variant-position:normal;font-size:7pt;line-height:normal;font-family:'Times New Roman';"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
 &lt;/span&gt;
 &lt;!--[endif]--&gt;Do you love the .NET Mascot? Grab and design
    with &lt;a href="https://mod-dotnet-bot.net/"&gt;Mod the dotnet-bot
        (mod-dotnet-bot.net)&lt;/a&gt;. You can take the resulting image to Canva.com to
    create incredible images.&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin-left:.5in;text-indent:-24.0pt;mso-list:l0 level1 lfo1;"&gt;&lt;!--[if !supportLists]--&gt;&amp;bull;&lt;span style="font-variant-numeric:normal;font-variant-east-asian:normal;font-variant-alternates:normal;font-kerning:auto;font-optical-sizing:auto;font-feature-settings:normal;font-variation-settings:normal;font-variant-position:normal;font-size:7pt;line-height:normal;font-family:'Times New Roman';"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
 &lt;/span&gt;
 &lt;!--[endif]--&gt;Would you like to know how the live-streaming
    support is happening behind the scenes? Read &lt;a href="https://github.com/dotnet-foundation/wg-outreach/blob/main/virtual_meetup/Virtual.User.Group.Process.pptx"&gt;here&lt;/a&gt;
&lt;/p&gt;&lt;p class="MsoNormal" style="margin-left:.5in;text-indent:-24.0pt;mso-list:l0 level1 lfo1;"&gt;&lt;span style="background-color:transparent;color:inherit;font-family:inherit;font-size:inherit;text-align:inherit;text-transform:inherit;word-spacing:normal;caret-color:auto;white-space:inherit;text-indent:-24pt;"&gt;&amp;bull;&lt;/span&gt;&lt;span style="background-color:transparent;color:inherit;text-align:inherit;text-transform:inherit;word-spacing:normal;caret-color:auto;white-space:inherit;text-indent:-24pt;font-variant-numeric:normal;font-variant-east-asian:normal;font-variant-alternates:normal;font-kerning:auto;font-optical-sizing:auto;font-feature-settings:normal;font-variation-settings:normal;font-variant-position:normal;font-size:7pt;line-height:normal;font-family:'Times New Roman';"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
 &lt;/span&gt;&lt;span style="background-color:transparent;color:inherit;font-family:inherit;font-size:inherit;text-align:inherit;text-transform:inherit;word-spacing:normal;caret-color:auto;white-space:inherit;text-indent:-24pt;"&gt;More Community resources &lt;/span&gt;&lt;a href="https://dotnet.microsoft.com/en-us/platform/community" style="font-family:inherit;font-size:inherit;text-align:inherit;text-transform:inherit;word-spacing:normal;white-space:inherit;text-indent:-24pt;"&gt;here&lt;/a&gt;&lt;span style="background-color:transparent;color:inherit;font-family:inherit;font-size:inherit;text-align:inherit;text-indent:0px;text-transform:inherit;word-spacing:normal;caret-color:auto;white-space:inherit;"&gt;&lt;/span&gt;&lt;/p&gt;&lt;h2&gt;&lt;span style="background-color:transparent;color:var(--color-h2);font-family:inherit;font-size:var(--font-size-h2);text-align:inherit;text-transform:inherit;word-spacing:normal;caret-color:auto;white-space:inherit;"&gt;&lt;strong&gt;Wrap up&lt;/strong&gt;&lt;/span&gt;&lt;/h2&gt;&lt;h2&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/h2&gt;&lt;p class="FirstParagraph"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;span style="background-color:transparent;color:inherit;font-family:inherit;font-size:inherit;text-align:inherit;text-transform:inherit;word-spacing:normal;caret-color:auto;white-space:inherit;"&gt;.NET Foundation provides vital resources to start up
        your .NET User Group, locate speakers, promote it through its Virtual User
        Group and YouTube channel, and provide resources to Livestream your event
        through StreamYard if needed. If you are one of those folks who would like to
        build a community of developers in your neighborhood but don&amp;rsquo;t know where to
        start, I hope this write-up is of some help!&lt;/span&gt;&lt;/p&gt;&lt;p class="FirstParagraph"&gt;&lt;span style="background-color:transparent;color:inherit;font-family:inherit;font-size:inherit;text-align:inherit;text-transform:inherit;word-spacing:normal;caret-color:auto;white-space:inherit;"&gt;PS: &lt;/span&gt;In the exciting turn of events, the app we discussed in the first paragraph is now used by 35000 New Yorkers !!!
&lt;/p&gt;&lt;h2&gt;&lt;span style="background-color:transparent;color:inherit;font-family:inherit;font-size:inherit;text-align:inherit;text-transform:inherit;word-spacing:normal;caret-color:auto;white-space:inherit;"&gt;&lt;/span&gt;&lt;span style="background-color:transparent;color:inherit;font-family:inherit;font-size:inherit;text-align:inherit;text-transform:inherit;word-spacing:normal;caret-color:auto;white-space:inherit;"&gt;&lt;/span&gt;&lt;span style="background-color:transparent;color:var(--color-h2);font-family:inherit;font-size:var(--font-size-h2);text-align:inherit;text-transform:inherit;word-spacing:normal;caret-color:auto;white-space:inherit;"&gt;&lt;strong&gt;About the Author&lt;/strong&gt;&lt;/span&gt;&lt;/h2&gt;&lt;h2&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/h2&gt;&lt;p class="FirstParagraph"&gt;Aneesh Gopalakrishnan is the co-organizer of &lt;a href="https://www.meetup.com/nycmobiledev/"&gt;NYC Mobile .NET Developers Group&lt;/a&gt;.
 He also works closely with the Virtual User Group Sub-Committee at the .NET
    Foundation, which manages User Groups under the .NET Foundation.&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;&lt;p class="MsoBodyText"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;span style="background-color:transparent;color:inherit;font-family:inherit;font-size:inherit;text-align:inherit;text-transform:inherit;word-spacing:normal;caret-color:auto;white-space:inherit;"&gt;Aneesh has also built an in-person startup community
        called &lt;/span&gt;&lt;a href="https://www.newsletter.startupplus.club/"&gt;Startup+&lt;/a&gt;&lt;span style="background-color:transparent;color:inherit;font-family:inherit;font-size:inherit;text-align:inherit;text-transform:inherit;word-spacing:normal;caret-color:auto;white-space:inherit;"&gt; in
        post-pandemic New York City with close to 12,000 members over Meetup,
        Eventbrite, LinkedIn, and SubStack.&amp;nbsp;&lt;/span&gt;&lt;span style="background-color:transparent;color:inherit;font-family:inherit;font-size:inherit;text-align:inherit;text-transform:inherit;word-spacing:normal;caret-color:auto;white-space:inherit;"&gt;You can connect with him on &lt;a href="https://www.linkedin.com/in/aneeshlalga/" target="_blank"&gt;LinkedIn&lt;/a&gt;.&lt;/span&gt;&lt;span style="background-color:transparent;color:inherit;font-family:inherit;font-size:inherit;text-align:inherit;text-transform:inherit;word-spacing:normal;caret-color:auto;white-space:inherit;"&gt;&lt;/span&gt;&lt;/p&gt;</a10:content></item><item><guid isPermaLink="false">urn:uuid:cbe740be-37d9-43b2-92de-3bb329d469b6</guid><link>https://dotnetfoundation.org/news-events/detail/elevating-data-quality-with-fluentvalidation-mastery</link><a10:author><a10:name> </a10:name></a10:author><title>Elevating Data Quality: A Dive into FluentValidation's Mastery</title><description>Nestled within the .NET ecosystem is FluentValidation, a revered open-source library crafted for crafting precise validation rules.</description><pubDate>Thu, 19 Oct 2023 20:17:26 Z</pubDate><a10:content type="text">&lt;p&gt;&lt;span style="background-color:transparent;color:inherit;font-family:inherit;font-size:inherit;text-align:inherit;text-transform:inherit;word-spacing:normal;caret-color:auto;white-space:inherit;"&gt;Data quality is the cornerstone of efficient software applications, and ensuring impeccable data input becomes imperative as applications grow complex. FluentValidation emerges as a stalwart companion for .NET developers, delivering precision in data validation with unparalleled ease.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;Nestled within the .NET ecosystem is FluentValidation, a revered open-source library crafted for crafting precise validation rules. It has garnered admiration for its straightforward, fluent interface, ease of scalability, and how effortlessly it facilitates creating and maintaining data validation rules. Thanks to the commitment of its active development community, it remains at the forefront of modern development practices.&lt;br /&gt;&lt;/p&gt;&lt;h2&gt;How to use it&lt;/h2&gt;&lt;p&gt;The beauty of FluentValidation lies in its simplicity, such as the `&lt;code&gt;RuleFor&lt;/code&gt;` method. This method provides a clear path to target specific object properties, easily layering on validations. Here, we've emphasized the importance of naming our clients, age restrictions, and validating them. Adding clarity, the `&lt;code&gt;.WithMessage()&lt;/code&gt;` method offers tailored error messages to guide the user.&lt;/p&gt;&lt;pre&gt;&lt;code class="language-csharp"&gt;
RuleFor(client=&amp;gt; client.Firstname)
.Must(name =&amp;gt; client.StartsWith("D"))
.When(client=&amp;gt; client.Age &amp;lt; 28)
.WithMessage("It is impossible to have less than 28yo with firstname not starting with a D.");
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Post-creation, the application of the validator is remarkably straightforward, leveraging the `&lt;code&gt;Validate&lt;/code&gt;` method:&lt;/p&gt;&lt;pre&gt;&lt;code class="language-csharp"&gt;
var client = new Client { Firstname = "Ted", Lastname = "Buddy", Age = 25 };
var validator = new ClientValidator();
var validationResult = validator.Validate(client);
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;The resultant validation provides a comprehensive report detailing every model applied to the input object. Each rule's adherence is meticulously checked, capturing discrepancies along the way.&lt;/p&gt;&lt;p&gt;Utilizing the `&lt;code&gt;IsValid&lt;/code&gt;` property, developers gain instant insights into the validation's outcome:&lt;span style="background-color:transparent;color:inherit;font-family:monospace, monospace;font-size:1em;text-align:inherit;text-transform:inherit;word-spacing:normal;caret-color:auto;white-space-collapse:preserve;"&gt;&lt;/span&gt;&lt;/p&gt;&lt;pre&gt;&lt;code class="language-csharp"&gt;
if (validationResult.IsValid)
{
    // Undertake subsequent actions.
}
else
{
    // Gracefully handle any validation exceptions.
    foreach (var failure in validationResult.Errors)
    {
        Console.WriteLine($"The {failure.PropertyName} encountered a hiccup. Here's what went wrong: {failure.ErrorMessage}");
    }
}
&lt;/code&gt;&lt;/pre&gt;&lt;h2&gt;Improve rules complexity&lt;/h2&gt;&lt;p&gt;For the more curious developers, FluentValidation doesn't stop here. &lt;/p&gt;&lt;p&gt;The `&lt;code&gt;.When()&lt;/code&gt;` method offers conditional validation, allowing developers to execute validation rules only when specified conditions are met. This is particularly helpful when validation requirements are contingent on other property values or external factors.&lt;strong&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;Imagine a scenario where a client's state changes based on its age. A client under 18 must be a minor, while the others are adults:&lt;span style="background-color:transparent;color:inherit;font-family:monospace, monospace;font-size:1em;text-align:inherit;text-transform:inherit;word-spacing:normal;caret-color:auto;white-space-collapse:preserve;"&gt;&lt;/span&gt;&lt;/p&gt;&lt;pre&gt;&lt;code class="language-csharp"&gt;
RuleFor(client =&amp;gt; client.State)
.Equal(StateType.Minor)
.When(client=&amp;gt; client.Age &amp;lt; 18)
.WithMessage("Client should be minor if age is under 18.");
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;In data validation, sometimes the raw input data isn't in the ideal format for validation. Instead of resorting to pre-processing or creating temporary objects, FluentValidation offers the `&lt;code&gt;.Transform()&lt;/code&gt;` method. This method allows developers to alter a value before it's validated, ensuring the validator gets data in the exact shape it needs.&lt;/p&gt;&lt;p&gt;For instance, suppose user input comes with leading or trailing white spaces. Before validating, we can trim the input to reduce the complexity of our rule:&lt;/p&gt;&lt;pre&gt;&lt;code class="language-csharp"&gt;
RuleFor(client=&amp;gt; client.Lastname)
.Transform(client=&amp;gt; client?.Trim())    
.NotEmpty()
.WithMessage("A client's name cannot be blank.");
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Additionally, for those instances where standard rules fall short, FluentValidation empowers developers with custom validator capabilities, allowing them to handcraft specific validation logic.&lt;/p&gt;&lt;h2 dir="ltr"&gt;Summary&lt;/h2&gt;&lt;p&gt;FluentValidation is more than just a validation tool; it symbolizes excellence in the .NET universe. Blending traditional validation rules with nuanced, detailed checks, the library guarantees that every data input stands up to scrutiny. In the dynamic world of software, every data point is pivotal. With FluentValidation in one's toolkit, developers can ensure seamless operations and circumvent potential data pitfalls.&lt;/p&gt;&lt;p&gt;Check out the project:&amp;nbsp;&lt;a href="https://github.com/FluentValidation/FluentValidation"&gt;https://github.com/FluentValidation/FluentValidation&lt;/a&gt;&lt;/p&gt;</a10:content></item><item><guid isPermaLink="false">urn:uuid:10441199-d8e3-4b88-9dac-ae380d1da02e</guid><link>https://dotnetfoundation.org/news-events/detail/showcasing-dotnet-foundation-projects-at-jetbrains-dotnet-day-2023</link><a10:author><a10:name> </a10:name></a10:author><title>Showcasing .NET Foundation Projects at JetBrains .NET Day 2023</title><description>One of the goals of the .NET Foundation is to foster the growth of our member projects and see their impact on the community of everyday developers. See the latest JetBrains .NET Days 2023 line-up, which features many .NET Foundation projects.</description><pubDate>Tue, 05 Sep 2023 15:00:07 Z</pubDate><a10:content type="text">&lt;p dir="ltr"&gt;One of the goals of the .NET Foundation is to foster the growth of our member projects and see their impact on the community of everyday developers. So it's incredible to see the latest&lt;a href="https://blog.jetbrains.com/dotnet/2023/08/30/dotnet-day-online-23/"&gt; JetBrains .NET Day 2023 line-up&lt;/a&gt;&amp;nbsp;features a healthy amount of .NET Foundation projects: Entity Framework Core, Avalonia UI, xUnit, BenchmarkDotNet, and, of course, .NET itself.&lt;/p&gt;&lt;p dir="ltr"&gt;This post will tell you a little about these projects and their purpose. We also encourage you to see the speakers talk about these .NET Foundation projects if you'd like to gain new perspectives. Let's get started.&lt;/p&gt;&lt;h2 dir="ltr"&gt;What is Entity Framework Core?&lt;/h2&gt;&lt;p dir="ltr"&gt;As a developer, you may have already heard of or worked with the&lt;a href="https://dotnetfoundation.org/projects/project-detail/entity-framework"&gt; Entity Framework&lt;/a&gt;, a popular object-relational mapper (ORM) for .NET applications. Entity Framework Core is a lightweight, extensible, open-source library to access databases such as Microsoft SQL Server, PostgreSQL, SQLite, and more. Among its primary functions, EF Core allows you to write queries directly in C# (or any other .NET language), which are then translated into SQL queries by EF Core, as well as tracking changes made to the entity objects, making it easier to manage changes to the database. Other exciting features include database migrations and the ability to execute raw SQL statements.&lt;/p&gt;&lt;h2 dir="ltr"&gt;What is Avalonia UI?&lt;/h2&gt;&lt;p dir="ltr"&gt;&lt;a href="https://avaloniaui.net/"&gt;Avalonia&lt;/a&gt; is a cross-platform XAML-based UI framework providing a flexible styling system and support for all major operating systems: Windows, Linux, macOS, Android, and iOS. Build your applications using an open-source UI framework to deliver stunning desktop, mobile, web, and embedded applications using a .NET single codebase. With an&lt;a href="https://avaloniaui.net/Showcase"&gt; impressive showcase&lt;/a&gt; of existing customers, including organizations like Unity Games, JetBrains, GitHub, and Cannon, it's easy to see how Avalonia has a bright future.&lt;/p&gt;&lt;h2 dir="ltr"&gt;What is xUnit?&lt;/h2&gt;&lt;p dir="ltr"&gt;&lt;a href="https://xunit.net/"&gt;xUnit&lt;/a&gt; is another essential library in the .NET ecosystem, widely used for writing unit tests. It is a free, open-source, community-focused unit testing tool for the .NET framework. Designed by the original inventor of NUnit, xUnit offers a more modern and extensible approach to unit testing. One of the main functionalities of xUnit is its ability to create isolated, independent tests. Unlike other testing frameworks, xUnit creates a new instance of the test class for every test run, ensuring that the state is not shared between tests and minimizing the risk of side effects. This approach encourages developers to write cleaner, more maintainable, and more robust tests. In addition to these features, xUnit supports parameterized tests, shared test contexts, and various output formats, making it a flexible and powerful tool for any .NET developer.&lt;/p&gt;&lt;h2 dir="ltr"&gt;What is BenchmarkDotNet?&lt;/h2&gt;&lt;p dir="ltr"&gt;&lt;a href="https://dotnetfoundation.org/projects/project-detail/benchmarkdotnet"&gt;BenchmarkDotNet&lt;/a&gt; is a robust library every .NET developer should have in their toolkit. It is a performance-testing library that makes it easy to benchmark your code. It provides a simple and efficient way to measure the performance of your code and compare it with other implementations. By annotating a method with the Benchmark attribute, BenchmarkDotNet will run that method multiple times and measure how long it takes to execute. This helps you identify and optimize bottlenecks in your code for better performance.&lt;/p&gt;&lt;p dir="ltr"&gt;One of the standout features of BenchmarkDotNet is its ability to handle a lot of the complexity of performance testing for you. For example, it automatically warms up the code, runs multiple iterations of the benchmark, and calculates statistics on the results. It also provides a detailed report with the benchmark results, which includes statistics like mean, median, and standard deviation, making it easier to interpret the results and make informed decisions. If you've got a need for benchmarking, BenchmarkDotNet is it.&lt;/p&gt;&lt;h2 dir="ltr"&gt;Conclusion&lt;/h2&gt;&lt;p dir="ltr"&gt;If you've heard about these .NET Foundation projects but have yet to look at them, we encourage you to see the speakers at&lt;a href="https://blog.jetbrains.com/dotnet/2023/08/30/dotnet-day-online-23/"&gt; JetBrains .NET Day 2023&lt;/a&gt; talk about them. Many of these projects have been cornerstones of the .NET development workflow, and we hope to see them continue their success. Please show up and give these speakers and projects your support on &lt;strong&gt;September 26th&lt;/strong&gt;. If you can't make the event, &lt;a href="https://youtube.com/jetbrainstv"&gt;all talks will be recorded and available on YouTube at your convenience&lt;/a&gt;.&lt;/p&gt;&lt;p dir="ltr"&gt;As always, thank you for being an integral part of what makes the .NET community special and unique.&lt;/p&gt;</a10:content></item><item><guid isPermaLink="false">urn:uuid:290e6a1a-b100-47eb-b557-37daf1b70a99</guid><link>https://dotnetfoundation.org/news-events/detail/introduction-distributed-systems-with-akka-dotnet</link><a10:author><a10:name> </a10:name></a10:author><title>Introduction to distributed systems with Akka.NET</title><description>In this article, we'll dive into the captivating realm of Akka.NET and explore its myriad applications. Akka.NET is a versatile toolkit that can revolutionize your C# development projects, from enhancing concurrency to enabling fault-tolerant systems.</description><pubDate>Thu, 31 Aug 2023 13:26:09 Z</pubDate><a10:content type="text">&lt;p dir="ltr"&gt;Looking for an open-source C# library for building real-time distributed systems? &lt;a href="https://getakka.net/index.html" target="_blank"&gt;Akka.NET is what you need.&lt;/a&gt;&lt;/p&gt;&lt;p dir="ltr"&gt;In this article, we'll dive into the captivating realm of Akka.NET and explore its myriad applications. Akka.NET is a versatile toolkit that can revolutionize your C# development projects, from enhancing concurrency to enabling fault-tolerant systems.&lt;/p&gt;&lt;h2 dir="ltr"&gt;Unveiling the Essence of Akka.NET&lt;/h2&gt;&lt;p dir="ltr"&gt;At its core, Akka.NET is designed to simplify complex distributed systems by leveraging the Actor Model. Actors are independent units of computation that communicate exclusively through messages, which is a more intuitive and efficient approach to handling concurrency and building fault-tolerant applications.&amp;nbsp;&lt;/p&gt;&lt;p dir="ltr"&gt;To learn more about the Actor Model, you can check out &lt;a href="https://getakka.net/articles/concepts/actors.html"&gt;the documentation of Akka.NET&lt;/a&gt;.&lt;/p&gt;&lt;p dir="ltr"&gt;This isolation ensures that the state of one actor is never directly modified by another, enhancing both parallelism and fault tolerance. Akka.NET makes implementing this model a breeze, enabling you to create highly responsive and scalable systems.&lt;br /&gt;&lt;/p&gt;&lt;p dir="ltr"&gt;Whether you aim to build event-driven applications, fault-tolerant distributed systems, or a low-latency program with one-at-a-time processing, Akka.NET equips you with the tools needed to thrive in today's dynamic development landscape.&lt;/p&gt;&lt;h2 dir="ltr"&gt;Core elements&lt;/h2&gt;&lt;p dir="ltr"&gt;Akka.NET takes robustness a step further through its supervision and monitoring mechanisms. By employing a hierarchical structure, where actors supervise their children, the library facilitates graceful error handling and recovery. When an actor encounters an issue, its supervisor can take remedial actions, allowing your system to handle failures and maintain operational integrity gracefully.&lt;/p&gt;&lt;p dir="ltr"&gt;It also extends its capabilities beyond the Actor Model with features like Streams, Clusters, and Remoting.&amp;nbsp;&lt;/p&gt;&lt;p dir="ltr"&gt;Streams offer a powerful way to process and transform sequences of elements, making them ideal for data-intensive applications. &lt;br /&gt;Clusters allow you to build highly available and distributed systems, enabling seamless communication between actors across multiple nodes through sharding.&amp;nbsp;&lt;br /&gt;Remoting, on the other hand, facilitates interactions between actors residing on different machines, unlocking a new realm of possibilities for distributed applications. It can be very well combined with Kubernetes.&lt;/p&gt;&lt;p dir="ltr"&gt;As with any powerful tool, testing is paramount. Akka.NET provides comprehensive testing capabilities that enable you to validate the behavior and performance of your actors. With tools like TestKit, you can create unit tests that simulate various scenarios, ensuring your actors function flawlessly in diverse situations. This testing framework empowers you to identify and rectify issues before they impact your production environment.&lt;/p&gt;&lt;h2 dir="ltr"&gt;Summary&lt;/h2&gt;&lt;p dir="ltr"&gt;In this whirlwind tour, we've unraveled the magic of Akka.NET&amp;mdash;a versatile library that empowers C# developers to create concurrent, fault-tolerant, and distributed systems. From its fundamental Actor Model to advanced concepts like supervision, streams, clusters, remoting, and testing, Akka.NET equips you with the tools needed to conquer the challenges of modern software development. So, go ahead, embrace Akka.NET, and unlock a world of possibilities in your C# projects.&lt;/p&gt;&lt;br /&gt;&lt;p dir="ltr"&gt;Check out the project: &lt;a href="https://github.com/akkadotnet/akka.net"&gt;https://github.com/akkadotnet/akka.net&lt;/a&gt;&lt;/p&gt;&lt;br /&gt;</a10:content></item><item><guid isPermaLink="false">urn:uuid:eb07a8db-cc02-4b91-bcc9-b614efb2b26a</guid><link>https://dotnetfoundation.org/news-events/detail/statement-regarding-moq</link><a10:author><a10:name> </a10:name></a10:author><title>Statement regarding Moq</title><description>The .NET Foundation has released a statement regarding Moq.</description><pubDate>Thu, 10 Aug 2023 13:24:59 Z</pubDate><a10:content type="text">&lt;!-- directives:[] --&gt;
 &lt;p&gt;The .NET Foundation has been asked to make a statement regarding the project  &lt;a href="https://github.com/moq/moq" target="_blank"&gt;Moq&lt;/a&gt;. We want to acknowledge that Moq is not a .NET Foundation project, and as OSS developers, they have the right to develop the project in any direction they see fit. We also want to acknowledge that developing OSS software as a maintainer can be tough and often thankless.&amp;nbsp;&lt;/p&gt;&lt;p&gt;We feel that sponsorship through funding of OSS projects is vital for a healthy ecosystem and encourage those who can contribute to projects out there, to do so.&amp;nbsp;&lt;/p&gt;&lt;p&gt;For projects considering the collection of private information, we strongly recommend seeking counsel from legal experts versed in international privacy laws. The intricate nature of privacy regulations, including GDPR and related legal hurdles, necessitates careful consideration.&lt;/p&gt;&lt;p&gt;The .NET Foundation is volunteer-run. As such, we welcome collaboration and encourage others to get involved.&amp;nbsp;&lt;/p&gt;&lt;p&gt;The project committee actively meets to discuss these types of issues. We encourage anyone interested in discussing open-source maintainability to join the project committee at&amp;nbsp;&lt;a aria-label="Link https://github.com/dotnet-foundation/projects#joining-the-committee" title="https://github.com/dotnet-foundation/projects#joining-the-committee" href="https://github.com/dotnet-foundation/projects#joining-the-committee" rel="noreferrer noopener" target="_blank"&gt;https://github.com/dotnet-foundation/projects#joining-the-committee&lt;/a&gt;. The group meets on the &lt;strong&gt;2nd Thursday of every month at 5:00 PM ET (21:00 UTC) via Microsoft Teams&lt;/strong&gt;. For more information, please reach out to &lt;a href="https://dotnetfoundation.org/home"&gt;Contact@dotnetfoundation.org&lt;/a&gt;.&amp;nbsp;&lt;/p&gt;</a10:content></item><item><guid isPermaLink="false">urn:uuid:ab4baf2c-96aa-4331-a836-d9d65302ed25</guid><link>https://dotnetfoundation.org/news-events/detail/esquio-feature-toggles-for-dotnet-applications</link><a10:author><a10:name> </a10:name></a10:author><title>Esquio -Feature Toggles for .NET Applications</title><description>Esquio, a .NET Foundation project member, adds feature toggles capabilities to all your .NET Applications.</description><pubDate>Mon, 31 Jul 2023 17:26:17 Z</pubDate><a10:content type="text">&lt;!-- directives:[] --&gt;
 &lt;div id="content"&gt;&lt;p&gt;Software development teams need help maintaining users' existing features and delivering new solutions. There are multiple strategies to address this problem, but a popular approach used by many high-functioning teams has been &lt;strong&gt;feature toggles&lt;/strong&gt;. Feature toggles can be an alternative to feature branches, allowing teams to do more informed A/B testing on non-production-ready features to increase the user feedback loop and improve the software.&lt;/p&gt;&lt;p&gt;From a high level, when implementing feature toggles, all newer software features are gated behind an enabled/disabled flag, also known as a toggle. While the result may seem simple, toggles can also have more complex logic enabling them for users or specific scenarios. Feature toggles can help teams deliver newer features to a production environment without the jarring changes typically associated with releases.&lt;/p&gt;&lt;p&gt;Feature toggles can offer developers a longer period to test and validate new features while maintaining older implementations side-by-side. Yes, it takes a bit more planning on the part of the developers, but ultimately its benefits outweigh its drawbacks. They can also provide product managers and stakeholders more control in the development and deployment process, giving teams more time to develop newer features and maintain a codebase.&lt;/p&gt;&lt;p&gt;For folks interested in implementing feature toggles into their applications, the .NET Foundation project Esquio offers a great set of features that integrate with .NET and ASP.NET Core with its many programming paradigms. &lt;/p&gt;&lt;p&gt;In this post, we'll see how to set up an ASP.NET Core application with Esquio and toggle a new messaging feature. We'll also consider an essential aspect of feature toggles, maintenance. &lt;/p&gt;&lt;h2 id="getting-started"&gt;Getting Started&lt;/h2&gt;&lt;p&gt;Esquio works with all ASP.NET Core paradigms, including ASP.NET Core MVC, Razor Pages, and Minimal APIs. Regardless of what you're building, Esquio provides access to its toggling capabilities through endpoint metadata, action filters, and Razor tag helpers. It's a complete solution. This post will start with an ASP.NET Core Web App template and focus on Razor Pages.&lt;/p&gt;&lt;p&gt;Once you've created the web application project, you must add the Esquio packages.&lt;/p&gt;&lt;pre&gt;&lt;code class="text language-text"&gt;dotnet add package Esquio.AspNetCore
dotnet add package Esquio.Configuration.Store&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;You may have noticed the &lt;strong&gt;Esquio.Configuration.Store&lt;/strong&gt; package. Esquio needs a location to read toggle information, and the most convenient location for most folks is the configuration file. Esquio also provides store mechanisms for HTTP endpoints and Entity Framework Core for distributed production scenarios.&lt;/p&gt;&lt;p&gt;Next, update your service collection registration to add the Esquio services and the configuration store.&lt;/p&gt;&lt;pre&gt;&lt;code class="text language-razor"&gt;var builder = WebApplication.CreateBuilder(args);  

// Add services to the container.  
builder.Services.AddRazorPages();  
builder.Services  
    .AddEsquio()  
    .AddAspNetCoreDefaultServices()  
    .AddConfigurationStore(builder.Configuration);&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Next, you'll need to add an Esquio section to your configuration. You can operate each feature based on the &lt;code&gt;Enabled&lt;/code&gt; value or create C# based &lt;code&gt;Toggles&lt;/code&gt;. Esquio ships with two built-in toggles of &lt;code&gt;EnvironmentToggle&lt;/code&gt; and &lt;code&gt;FromToToggle&lt;/code&gt; (date ranges), and you can implement your own. We'll stick to the boolean flag for this post.&lt;/p&gt;&lt;pre&gt;&lt;code class="json language-json"&gt;{  
  "Logging": {  
    "LogLevel": {  
      "Default": "Information",  
      "Microsoft.AspNetCore": "Warning"  
    }  
  },  
  "AllowedHosts": "*",  
  "Esquio": {  
    "Products": [  
      {  
        "Name": "default",  
        "Features": [  
          {  
            "Name": "HiddenGem",  
            "Enabled": true,  
            "Toggles": []  
          }  
        ]  
      }  
    ]  
  }  
}&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;If you use any feature toggles on Minimal API or MVC Core endpoints, you'll also want to add the &lt;code&gt;EsquioMiddleware&lt;/code&gt; in your request pipeline registration. Depending on future toggles, you want to add the registration in the pipeline after the &lt;code&gt;UseAuthorization&lt;/code&gt; call so you can access the current &lt;code&gt;User&lt;/code&gt; property on the incoming request, otherwise registering the middleware anywhere after &lt;code&gt;UseRouting&lt;/code&gt; should be adequate.&lt;/p&gt;&lt;pre&gt;&lt;code class="c# language-c#"&gt;var app = builder.Build();  

// Configure the HTTP request pipeline.  
if (!app.Environment.IsDevelopment())  
{  
    app.UseExceptionHandler("/Error");  
    // The default HSTS value is 30 days. You may want to change this for production scenarios, see https://aka.ms/aspnetcore-hsts.  
    app.UseHsts();  
}  

app.UseHttpsRedirection();  
app.UseStaticFiles();  
app.UseRouting();  
app.UseAuthorization();  
// add Esquio Middleware here  
app.MapEsquio();  
app.MapRazorPages();  

app.Run();&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Next, add the Esquio tag helper registrations to the &lt;code&gt;_ViewImports.cshtml&lt;/code&gt; file in the web application.&lt;/p&gt;&lt;pre&gt;&lt;code class="razor language-razor"&gt;@using WebApplication10
@using Esquio
@using Esquio.Abstractions
@using Esquio.AspNetCore  

@namespace WebApplication10.Pages  

@addTagHelper *, Microsoft.AspNetCore.Mvc.TagHelpers  
@addTagHelper *, Esquio.AspNetCore&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Let's recap where we are so far in the setup process:&lt;/p&gt;&lt;ol&gt;&lt;li&gt;We've added Esquio to our ASP.NET Core application and the required services.&lt;/li&gt;&lt;li&gt;We're using a Configuration store located in &lt;code&gt;appSettings.json&lt;/code&gt;.&lt;/li&gt;&lt;li&gt;We've registered Esquio services in the services collection.&lt;/li&gt;&lt;li&gt;We've added &lt;code&gt;EsquioMiddleware&lt;/code&gt; to support server-side features for endpoints.&lt;/li&gt;&lt;li&gt;We've registered the tag helpers for Razor views.&lt;/li&gt;&lt;/ol&gt;&lt;p&gt;Now, let's get to some feature toggling.&lt;/p&gt;&lt;h2 id="toggling-features"&gt;Toggling Features&lt;/h2&gt;&lt;p&gt;As you may have noticed in the &lt;code&gt;appSettings.json&lt;/code&gt;&amp;nbsp;file, we have a feature named &lt;code&gt;HiddenGem&lt;/code&gt;. We'll use this to show users a message in our &lt;code&gt;Index.cshtml&lt;/code&gt; Razor page. Add the following Razor to your &lt;code&gt;Index.cshtml&lt;/code&gt; file.&lt;/p&gt;&lt;pre&gt;&lt;code class="razor language-razor"&gt;@page  
@model IndexModel  
@{  
    ViewData["Title"] = "Home page";  
}  

&amp;lt;div class="text-center"&amp;gt;  
    &amp;lt;h1 class="display-4"&amp;gt;Welcome&amp;lt;/h1&amp;gt;  
    &amp;lt;p&amp;gt;Learn about &amp;lt;a href="https://learn.microsoft.com/aspnet/core"&amp;gt;  
        building Web apps with ASP.NET Core  
    &amp;lt;/a&amp;gt;.&amp;lt;/p&amp;gt;  

    &amp;lt;feature names="HiddenGem"&amp;gt;  
        &amp;lt;h2&amp;gt;.NET ❤️ Esquio&amp;lt;/h2&amp;gt;  
        &amp;lt;p&amp;gt;Check out &amp;lt;a href="https://esquio.readthedocs.io"&amp;gt;the Esquio docs&amp;lt;/a&amp;gt;&amp;lt;/p&amp;gt;  
    &amp;lt;/feature&amp;gt;  

&amp;lt;/div&amp;gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;The &lt;code&gt;feature&lt;/code&gt; element is an ASP.NET Core tag helper which uses the configuration store to determine if the feature is enabled. If all goes well, you should see the ".NET ❤️ Esquio" message on the page. You can also toggle these settings without restarting your app by changing the flag value in &lt;code&gt;appSettings.json&lt;/code&gt;.&lt;/p&gt;&lt;p&gt;Awesome, right?! You can add as many feature toggles as you like from here, but what happens when there are too many? Well, let's discuss that in the next section.&lt;/p&gt;&lt;h2 id="lets-talk-about-maintenance"&gt;Let's Talk About Maintenance&lt;/h2&gt;&lt;p&gt;If you're new to feature toggles, you may be worried about the noise-to-signal ratio in your code base. You may wonder, "How can all my application's feature toggles coexist without becoming a maintenance nightmare?" As a recommendation, here is a typical lifecycle of a toggle when implementing Esquio in your apps:&lt;/p&gt;&lt;ol&gt;&lt;li&gt;Locate an area of improvement.&lt;/li&gt;&lt;li&gt;Determine how to implement that feature with the least disruption.&lt;/li&gt;&lt;li&gt;Implement the feature toggle.&lt;/li&gt;&lt;li&gt;Deploy the feature for testing/toggling.&lt;/li&gt;&lt;li&gt;Determine when you've been successful.&lt;/li&gt;&lt;li&gt;Once reached, subsequent deployments remove the toggle and Esquio code.&lt;/li&gt;&lt;li&gt;Repeat :)&lt;/li&gt;&lt;/ol&gt;&lt;p&gt;While you can certainly keep all the toggles you've ever added to your application, removing individual toggles is the best practice as your application evolves. Culling toggles helps you reduce branching logic in your applications, reducing the possibility of interaction bugs; fewer branches means less opportunity for edge cases. It also helps everyone understand what features are still in an experimental phase and which are now part of the core product.&lt;/p&gt;&lt;p&gt;Setting deadlines and due dates for features can help your team determine when work should happen to remove toggles and when work for new toggles should begin. Your timeline will depend on your features, so discuss the strategy with stakeholders and colleagues. Like all code, you want to pay down technical debt before it becomes overwhelming to the resources available to your organization. Remember, feature toggles aim to accelerate the development feedback loop and shorten the time to market. You will need to understand and execute a sound strategy to see any advantages to this approach.&lt;/p&gt;&lt;h2 id="conclusion"&gt;Conclusion&lt;/h2&gt;&lt;p&gt;Esquio is an excellent feature toggle library that has thought about the breadth of options under the ASP.NET Core umbrella. Whether using Minimal APIs, Razor Pages, MVC Core, or a SPA framework, you'll find options to support toggling features. &lt;a href="https://esquio.readthedocs.io/en/latest/started/worker.html"&gt;As seen in the documentation, Esquio can also be used in any .NET application&lt;/a&gt;. It's a fantastic library with an opportunity to support whatever you can imagine building. With a clear feature toggle strategy, teams can accelerate delivering solutions to users while maintaining high-quality software. It's a winning combination.&lt;/p&gt;&lt;p&gt;Thank you to the maintainers of Esquio for supporting the library, making it available to others, and being a .NET Foundation member project. If you'd like to get involved in helping the project reach more folks in the .NET community, please share this post. If you'd like to learn more about Esquio, visit their &lt;a href="https://github.com/Xabaril/Esquio"&gt;GitHub page&lt;/a&gt; and &lt;a href="https://esquio.readthedocs.io"&gt;documentation&lt;/a&gt;.&lt;/p&gt;&lt;p&gt;As always, thank you to our project members and the .NET community that helps them thrive.&lt;/p&gt;&lt;/div&gt;</a10:content></item><item><guid isPermaLink="false">urn:uuid:68309201-c396-4c86-8dca-d19bbcfa6001</guid><link>https://dotnetfoundation.org/news-events/detail/mailkit-working-with-emails</link><a10:author><a10:name> </a10:name></a10:author><title>MailKit - Working with Emails</title><description>Email is to the internet like fish are to water, it's an essential part of the ecosystem, and we couldn't imagine one without the other. MailKit has spent thousands of hours working to produce the best email library for .NET.</description><pubDate>Fri, 21 Jul 2023 14:30:36 Z</pubDate><a10:content type="text">&lt;div id="content"&gt;&lt;p&gt;Email is to the internet like fish are to water, it's an essential part of the ecosystem, and we couldn't imagine one without the other. While its ubiquity is sometimes taken for granted and thought of as the medium you get meeting invites and funny meme's from your relatives, the varying protocols that emails rely on can be highly nuanced. Luckily for the .NET community, &lt;a href="https://github.com/jstedfast"&gt;Jeffrey Stedfast&lt;/a&gt; and his .NET Foundation project &lt;a href="https://github.com/jstedfast/MailKit" target="_blank"&gt;MailKit&lt;/a&gt; have spent thousands of hours working to produce the best email library.&lt;/p&gt;&lt;h2 id="what-is-mailkit"&gt;What is MailKit?&lt;/h2&gt;&lt;p&gt;As you've likely realized, &lt;a href="https://github.com/jstedfast/MailKit" target="_blank"&gt;MailKit&lt;/a&gt; is a cross-platform mail client supporting SMTP, POP3, and IMAP4 protocols. It also supports various authentication methods such as NTLM, LOGIN, OAUTHBEARER, and more. For folks working within secure environments, MailKit also has proxy support to get emails through firewalls. Each part of MailKit was laboriously built from the ground up to adhere to the specifications of each protocol while considering the potential inconsistencies of vendor implementations to provide for a smoother development experience. If you need to send or receive emails, MailKit is your choice.&lt;/p&gt;&lt;p&gt;Let's see how to get started with MailKit and what the code may look like in your .NET applications.&lt;/p&gt;&lt;h2 id="getting-started-with-mailkit"&gt;Getting Started with MailKit&lt;/h2&gt;&lt;p&gt;MailKit works in any .NET application on any platform. For this introduction, let's use a Console application. Start by adding the .NET package to your existing application.&lt;/p&gt;&lt;pre&gt;&lt;code class="language-text"&gt;dotnet add package MailKit&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Next, we'll email a fictitious friend about a fictitious event. Change the code to a &lt;strong&gt;real&lt;/strong&gt; SMTP server to get a working sample.&lt;/p&gt;&lt;pre&gt;&lt;code class="language-csharp"&gt;using MailKit.Net.Smtp;  
using MimeKit;  

var message = new MimeMessage();  
message.From.Add(new MailboxAddress("Joey Tribbiani", "joey@friends.com"));  
message.To.Add(new MailboxAddress("Mrs. Chanandler Bong", "chandler@friends.com"));  
message.Subject = "How you doin'?";  

message.Body = new TextPart("plain")  
{  
    Text = """  
    Hey Chandler,  

    Monica and I were going to play some paintball, you in?  

    -- Joey  
    """  
};  

using var client = new SmtpClient();  
client.Connect("smtp.friends.com", 587, false);  
// Note: only needed if the SMTP server requires authentication  
client.Authenticate("joey", "password");  
client.Send(message);  
client.Disconnect(true);&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;You can also use MailKit to retrieve messages from an existing POP3 server.&lt;/p&gt;&lt;pre&gt;&lt;code class="language-csharp"&gt;using MailKit.Net.Pop3;  

using var client = new Pop3Client();  
client.Connect("pop.friends.com", 110, false);  
client.Authenticate("joey", "password");  

for (var i = 0; i &amp;lt; client.Count; i++)  
{  
var message = client.GetMessage(i);  
Console.WriteLine("Subject: {0}", message.Subject);  
}  

client.Disconnect(true);&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;As noted before, IMAP servers are also supported, with many newer email servers preferring the IMAP protocol; this is a must-have feature of any email library.&lt;/p&gt;&lt;pre&gt;&lt;code class="language-csharp"&gt;using MailKit;  
using MailKit.Net.Imap;  

using var client = new ImapClient();  
client.Connect("imap.friends.com", 993, true);  

client.Authenticate("joey", "password");  

// The Inbox folder is always available on all IMAP servers...  
var inbox = client.Inbox;  
inbox.Open(FolderAccess.ReadOnly);  

Console.WriteLine("Total messages: {0}", inbox.Count);  
Console.WriteLine("Recent messages: {0}", inbox.Recent);  

for (var i = 0; i &amp;lt; inbox.Count; i++)  
{  
var message = inbox.GetMessage(i);  
Console.WriteLine("Subject: {0}", message.Subject);  
}  

client.Disconnect(true);&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;These three use cases are likely what most developers are looking for when dealing with an email server, and MailKit provides them in a few lines of code. That's amazing.&lt;/p&gt;&lt;h2 id="conclusion"&gt;Conclusion&lt;/h2&gt;&lt;p&gt;MailKit boasts over 77.8 million downloads on NuGet with no signs of slowing down anytime soon. Additionally, contributors continue to keep the project up to date with commits as recent as a month ago. If you need a library that can send and receive emails all from the comfort of your favorite platform, .NET, you can't go wrong by choosing MailKit.&lt;/p&gt;&lt;p&gt;If you want to leap from a project consumer to a contributor, head over to the &lt;a href="https://github.com/jstedfast/MailKit" target="_blank"&gt;GitHub repository&lt;/a&gt; and &lt;a href="https://gitter.im/jstedfast/MailKit" target="_blank"&gt;start a discussion with the community&lt;/a&gt;. Also, the project has provided a lot of value to the community, so if you're in a position to do so, please &lt;a href="https://github.com/sponsors/jstedfast" target="_blank"&gt;consider donating directly to MailKit&lt;/a&gt;. Any contributions are always welcome.&lt;/p&gt;&lt;p&gt;Finally, the .NET Foundation is a volunteer organization, so if you have any time or effort you'd like to donate to spotlight your favorite project, please feel free to contact us.&lt;/p&gt;&lt;p&gt;&lt;sub&gt;&lt;em&gt;image credit: &lt;/em&gt;&lt;/sub&gt;&lt;a href="https://unsplash.com/@brett_jordan"&gt;&lt;sub&gt;&lt;em&gt;Brett Jordan&lt;/em&gt;&lt;/sub&gt;&lt;/a&gt;&lt;/p&gt;&lt;/div&gt;</a10:content></item><item><guid isPermaLink="false">urn:uuid:220065f5-31f0-47d6-acf9-2550f25ae75c</guid><link>https://dotnetfoundation.org/news-events/detail/sharppulsar-apache-pulsar-dotnet-client</link><a10:author><a10:name> </a10:name></a10:author><title>SharpPulsar - Apache Pulsar .NET Client</title><description>In this latest project spotlight, we'll look at SharpPulsar, a .NET Client written on top of Akka.NET to interact with the popular Apache Pulsar messaging platform. </description><pubDate>Wed, 19 Jul 2023 04:00:09 Z</pubDate><a10:content type="text">&lt;p&gt;In this latest project spotlight, we'll look at SharpPulsar, a .NET Client written on top of Akka.NET to interact with the popular Apache Pulsar messaging platform. By the end of the post, you'll better understand what &lt;a href="https://pulsar.apache.org/" target="_blank"&gt;Apache Pulsar&lt;/a&gt; is, when to use it, and how to use SharpPulsar, the .NET client, to improve your existing applications. You'll also see an example you can run on your local development environment.&lt;/p&gt;&lt;h2 id="what-is-apache-pulsar-"&gt;What is Apache Pulsar?&lt;/h2&gt;&lt;p&gt;In the simplest terms, Apache Pulsar is a messaging platform, but that doesn't begin to scratch the surface of what it can do. For .NET developers, it is an alternative to RabbitMQ, Azure Service Bus, or even MSMQ. Here's how the Pulsar website describes Pulsar to potential users.&lt;/p&gt;&lt;blockquote&gt;&lt;p&gt;&lt;a href="https://pulsar.apache.org/"&gt;Apache Pulsar&lt;/a&gt; is an all-in-one messaging and streaming platform. Messages can be consumed and acknowledged individually or as streams with &lt;strong&gt;less than 10ms of latency&lt;/strong&gt;. Its layered architecture allows &lt;strong&gt;rapid scaling&lt;/strong&gt; across hundreds of nodes &lt;strong&gt;without data reshuffling&lt;/strong&gt;.&lt;/p&gt;&lt;p&gt;Its features include &lt;strong&gt;multi-tenancy&lt;/strong&gt; with resource separation and access control, &lt;strong&gt;geo-replication&lt;/strong&gt; across regions, &lt;strong&gt;tiered storage&lt;/strong&gt;, and support for five official client languages. It supports up to one million unique topics and is designed to simplify your application architecture.&lt;/p&gt;&lt;p&gt;Pulsar is a Top 10 Apache Software Foundation project with a vibrant and passionate community and user base spanning small companies and large enterprises.&lt;/p&gt;&lt;/blockquote&gt;&lt;h3 id="reasons-for-using-pulsar"&gt;Reasons for using Pulsar&lt;/h3&gt;&lt;p&gt;Before adding a new dependency to your application's dependency graph, it's important to understand &lt;em&gt;why&lt;/em&gt; you might want to add it. Here are the main advantages of Pulsar.&lt;/p&gt;&lt;ul&gt;&lt;li&gt;Rapid Horizontal Scaling, better known as "scale out"&lt;/li&gt;&lt;li&gt;Low latency messaging and streaming. &lt;/li&gt;&lt;li&gt;Geo-replication of messages to handle failure scenarios.&lt;/li&gt;&lt;li&gt;Multi-tenancy is a first-class citizen.&lt;/li&gt;&lt;li&gt;Automatic load balancing across nodes.&lt;/li&gt;&lt;li&gt;Officially maintained Pulsar clients for multiple languages, including Go, Python, C++, Node.js, and C#.&lt;/li&gt;&lt;li&gt;3rd-party integrations with connectors that source data from popular databases or stream data out to them.&lt;/li&gt;&lt;li&gt;Serverless functions&lt;/li&gt;&lt;li&gt;Up to 1 million topics, that's a lot.&lt;/li&gt;&lt;/ul&gt;&lt;h3 id="how-does-pulsar-work-"&gt;How does Pulsar work?&lt;/h3&gt;&lt;p&gt;Producers publish messages to topics, and consumers wait for messages to be pushed to them by &lt;strong&gt;Brokers&lt;/strong&gt;. Brokers orchestrate receiving messages by acknowledging and persisting them and then notifying subscribers of the messages. Conceptually, It's similar to other messaging systems such as RabbitMQ, MSMQ, or Azure Service Bus.&lt;/p&gt;&lt;h3 id="who-should-be-using-pulsar-"&gt;Who should be using Pulsar?&lt;/h3&gt;&lt;p&gt;Messaging systems are typically used in all industries, but systems that operate at an enormous scale or deal with spikes in requests benefit the most from using Pulsar.&lt;/p&gt;&lt;p&gt;Industries that may benefit from Pulsar include, but are not limited to:&lt;/p&gt;&lt;ul&gt;&lt;li&gt;Financial Institutions&lt;/li&gt;&lt;li&gt;E-Commerce&lt;/li&gt;&lt;li&gt;Governmental organizations&lt;/li&gt;&lt;li&gt;Video games&lt;/li&gt;&lt;li&gt;Media streaming services&lt;/li&gt;&lt;li&gt;and more!&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;If you have bursts of activity in your system, using Pulsar might help you scale to meet the temporary increases in demand. Building a system on Pulsar might also help you deliver a more consistent user experience regardless of on or off-peak hours.&lt;/p&gt;&lt;h3 id="getting-started-with-pulsar"&gt;Getting Started with Pulsar&lt;/h3&gt;&lt;p&gt;The most straightforward way to start using Pulsar is by running a container. To start, run the following command to pull the docker image and run it.&lt;/p&gt;&lt;pre&gt;&lt;code class="language-text"&gt;docker run -it -p &lt;span class="hljs-number"&gt;6650&lt;/span&gt;:&lt;span class="hljs-number"&gt;6650&lt;/span&gt; -p &lt;span class="hljs-number"&gt;8080&lt;/span&gt;:&lt;span class="hljs-number"&gt;8080&lt;/span&gt; --mount &lt;span class="hljs-keyword"&gt;source&lt;/span&gt;=pulsardata,target=&lt;span class="hljs-regexp"&gt;/pulsar/&lt;/span&gt;data --mount &lt;span class="hljs-keyword"&gt;source&lt;/span&gt;=pulsarconf,target=&lt;span class="hljs-regexp"&gt;/pulsar/&lt;/span&gt;conf apachepulsar&lt;span class="hljs-regexp"&gt;/pulsar:3.0.0 bin/&lt;/span&gt;pulsar standalone
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Afterward, you should have a Pulsar instance running in your development environment.&lt;/p&gt;&lt;h2 id="why-is-sharppulsar-built-on-top-of-akka-net-"&gt;Why is SharpPulsar built on top of Akka.Net?&lt;/h2&gt;&lt;p&gt;Before jumping into a code example, I mentioned that SharpPulsar was built on top of Akka.Net. Let's first understand what Akka.Net is and why it might be helpful to use it as a foundation for another OSS project.&lt;/p&gt;&lt;p&gt;&lt;a href="https://petabridge.com/bootcamp/"&gt;Akka.NET&lt;/a&gt; is a toolkit and runtime for building highly concurrent, distributed, and fault-tolerant event-driven applications for .NET. The library is based on the Actor model, which separates part of your application logic into specialized message handler units called actors. These units communicate by passing messages back and forth through mailboxes. For the health and reliability of most systems, it's a good idea to persist these messages somewhere.&lt;/p&gt;&lt;p&gt;Given the communication models of both Akka.NET and Pulsar are similar, it's a natural choice to build a Pulsar client on top of an already well-trusted and reliable part of the .NET ecosystem. Developers have benchmarked Akka.NET performance at 50 million messages/second on a single machine with approximately 2.5 million actors (or Apache Pulsar Producers/Consumers) per gigabyte of heap. That's a fantastic amount of potential to scale any modern application.&lt;/p&gt;&lt;p&gt;OK, let's build a sample application.&lt;/p&gt;&lt;h2 id="sharppulsar-example-application"&gt;SharpPulsar example application&lt;/h2&gt;&lt;p&gt;Once you've created your Pulsar instance from the previous Docker command, paste the following C# code into an existing console application's &lt;code&gt;Program.cs&lt;/code&gt; file.&lt;/p&gt;&lt;pre&gt;&lt;code class="language-csharp"&gt;&lt;span class="hljs-keyword"&gt;using&lt;/span&gt; System.Text;  
&lt;span class="hljs-keyword"&gt;using&lt;/span&gt; SharpPulsar;  
&lt;span class="hljs-keyword"&gt;using&lt;/span&gt; SharpPulsar.Builder;  
&lt;span class="hljs-keyword"&gt;using&lt;/span&gt; SharpPulsar.Protocol.Extension;  

&lt;span class="hljs-keyword"&gt;var&lt;/span&gt; clientConfig = &lt;span class="hljs-keyword"&gt;new&lt;/span&gt; PulsarClientConfigBuilder()  
    .ServiceUrl(&lt;span class="hljs-string"&gt;"pulsar://localhost:6650"&lt;/span&gt;);  

&lt;span class="hljs-comment"&gt;//pulsar actor system  &lt;/span&gt;
&lt;span class="hljs-keyword"&gt;var&lt;/span&gt; pulsarSystem = PulsarSystem.GetInstance(actorSystemName: &lt;span class="hljs-keyword"&gt;nameof&lt;/span&gt;(Program));  
&lt;span class="hljs-keyword"&gt;var&lt;/span&gt; pulsarClient = &lt;span class="hljs-keyword"&gt;await&lt;/span&gt; pulsarSystem.NewClient(clientConfig);  

&lt;span class="hljs-keyword"&gt;const&lt;/span&gt; &lt;span class="hljs-keyword"&gt;string&lt;/span&gt; myTopic = &lt;span class="hljs-keyword"&gt;nameof&lt;/span&gt;(myTopic);  
&lt;span class="hljs-keyword"&gt;var&lt;/span&gt; consumer = &lt;span class="hljs-keyword"&gt;await&lt;/span&gt; pulsarClient  
    .NewConsumerAsync(&lt;span class="hljs-keyword"&gt;new&lt;/span&gt; ConsumerConfigBuilder&amp;lt;&lt;span class="hljs-keyword"&gt;byte&lt;/span&gt;[]&amp;gt;()  
        .Topic(myTopic)  
        .ForceTopicCreation(&lt;span class="hljs-literal"&gt;true&lt;/span&gt;)  
        .SubscriptionName(&lt;span class="hljs-string"&gt;$"sub-&lt;span class="hljs-subst"&gt;{Guid.NewGuid()}&lt;/span&gt;"&lt;/span&gt;)  
        .IsAckReceiptEnabled(&lt;span class="hljs-literal"&gt;true&lt;/span&gt;));  

&lt;span class="hljs-keyword"&gt;var&lt;/span&gt; producer = &lt;span class="hljs-keyword"&gt;await&lt;/span&gt; pulsarClient  
    .NewProducerAsync(&lt;span class="hljs-keyword"&gt;new&lt;/span&gt; ProducerConfigBuilder&amp;lt;&lt;span class="hljs-keyword"&gt;byte&lt;/span&gt;[]&amp;gt;()  
        .Topic(myTopic));  

&lt;span class="hljs-keyword"&gt;for&lt;/span&gt; (&lt;span class="hljs-keyword"&gt;var&lt;/span&gt; i = &lt;span class="hljs-number"&gt;0&lt;/span&gt;; i &amp;lt; &lt;span class="hljs-number"&gt;10&lt;/span&gt;; i++)  
{  
    &lt;span class="hljs-keyword"&gt;var&lt;/span&gt; data = Encoding.UTF8.GetBytes(&lt;span class="hljs-string"&gt;$"tuts-&lt;span class="hljs-subst"&gt;{i}&lt;/span&gt;"&lt;/span&gt;).ToByteArrays();  
    producer.NewMessage().Value(data).Send();  
}  

&lt;span class="hljs-keyword"&gt;await&lt;/span&gt; Task.Delay(TimeSpan.FromSeconds(&lt;span class="hljs-number"&gt;5&lt;/span&gt;));  

&lt;span class="hljs-keyword"&gt;for&lt;/span&gt; (&lt;span class="hljs-keyword"&gt;var&lt;/span&gt; i = &lt;span class="hljs-number"&gt;0&lt;/span&gt;; i &amp;lt; &lt;span class="hljs-number"&gt;10&lt;/span&gt;; i++)  
{  
    &lt;span class="hljs-keyword"&gt;var&lt;/span&gt; message = (Message&amp;lt;&lt;span class="hljs-keyword"&gt;byte&lt;/span&gt;[]&amp;gt;)&lt;span class="hljs-keyword"&gt;await&lt;/span&gt; consumer.ReceiveAsync();  
    &lt;span class="hljs-keyword"&gt;if&lt;/span&gt; (message != &lt;span class="hljs-literal"&gt;null&lt;/span&gt;)  
    {        
        &lt;span class="hljs-keyword"&gt;await&lt;/span&gt; consumer.AcknowledgeAsync(message);  
        &lt;span class="hljs-keyword"&gt;var&lt;/span&gt; res = Encoding.UTF8.GetString(message.Data).Trim();  
        Console.WriteLine(&lt;span class="hljs-string"&gt;$"message '&lt;span class="hljs-subst"&gt;{res}&lt;/span&gt;' from topic: &lt;span class="hljs-subst"&gt;{message.Topic}&lt;/span&gt;"&lt;/span&gt;);  
    }
}
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;The example shows how you can create a producer and consumer of messages. In this case, the message is a string serialized into a &lt;code&gt;byte[]&lt;/code&gt; for more efficient transport. The consumer converts the byte array into a string and writes the result to the console output.&lt;/p&gt;&lt;pre&gt;&lt;code class="language-text"&gt;message &lt;span class="hljs-string"&gt;'tuts-0'&lt;/span&gt; from &lt;span class="hljs-string"&gt;topic:&lt;/span&gt; &lt;span class="hljs-string"&gt;persistent:&lt;/span&gt;&lt;span class="hljs-comment"&gt;//public/default/myTopic&lt;/span&gt;
message &lt;span class="hljs-string"&gt;'tuts-1'&lt;/span&gt; from &lt;span class="hljs-string"&gt;topic:&lt;/span&gt; &lt;span class="hljs-string"&gt;persistent:&lt;/span&gt;&lt;span class="hljs-comment"&gt;//public/default/myTopic&lt;/span&gt;
message &lt;span class="hljs-string"&gt;'tuts-2'&lt;/span&gt; from &lt;span class="hljs-string"&gt;topic:&lt;/span&gt; &lt;span class="hljs-string"&gt;persistent:&lt;/span&gt;&lt;span class="hljs-comment"&gt;//public/default/myTopic&lt;/span&gt;
message &lt;span class="hljs-string"&gt;'tuts-3'&lt;/span&gt; from &lt;span class="hljs-string"&gt;topic:&lt;/span&gt; &lt;span class="hljs-string"&gt;persistent:&lt;/span&gt;&lt;span class="hljs-comment"&gt;//public/default/myTopic&lt;/span&gt;
message &lt;span class="hljs-string"&gt;'tuts-4'&lt;/span&gt; from &lt;span class="hljs-string"&gt;topic:&lt;/span&gt; &lt;span class="hljs-string"&gt;persistent:&lt;/span&gt;&lt;span class="hljs-comment"&gt;//public/default/myTopic&lt;/span&gt;
message &lt;span class="hljs-string"&gt;'tuts-5'&lt;/span&gt; from &lt;span class="hljs-string"&gt;topic:&lt;/span&gt; &lt;span class="hljs-string"&gt;persistent:&lt;/span&gt;&lt;span class="hljs-comment"&gt;//public/default/myTopic&lt;/span&gt;
message &lt;span class="hljs-string"&gt;'tuts-6'&lt;/span&gt; from &lt;span class="hljs-string"&gt;topic:&lt;/span&gt; &lt;span class="hljs-string"&gt;persistent:&lt;/span&gt;&lt;span class="hljs-comment"&gt;//public/default/myTopic&lt;/span&gt;
message &lt;span class="hljs-string"&gt;'tuts-7'&lt;/span&gt; from &lt;span class="hljs-string"&gt;topic:&lt;/span&gt; &lt;span class="hljs-string"&gt;persistent:&lt;/span&gt;&lt;span class="hljs-comment"&gt;//public/default/myTopic&lt;/span&gt;
message &lt;span class="hljs-string"&gt;'tuts-8'&lt;/span&gt; from &lt;span class="hljs-string"&gt;topic:&lt;/span&gt; &lt;span class="hljs-string"&gt;persistent:&lt;/span&gt;&lt;span class="hljs-comment"&gt;//public/default/myTopic&lt;/span&gt;
message &lt;span class="hljs-string"&gt;'tuts-9'&lt;/span&gt; from &lt;span class="hljs-string"&gt;topic:&lt;/span&gt; &lt;span class="hljs-string"&gt;persistent:&lt;/span&gt;&lt;span class="hljs-comment"&gt;//public/default/myTopic&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Awesome! Also, be sure to &lt;a href="https://github.com/eaba/SharpPulsar/tree/dev/Tutorials"&gt;check out SharpPulsar tutorials&lt;/a&gt; for more exciting scenarios.&lt;/p&gt;&lt;h2 id="conclusion"&gt;Conclusion&lt;/h2&gt;&lt;p&gt;If you're looking for a way to scale your solutions, SharpPulsar is worth your time and attention. It helps .NET developers leverage the strength of Pulsar, one of the more famous Apache projects. Additionally, the authors have chosen to build their solution on top of another popular .NET Foundation project, Akka.NET, which means you get the added benefit of two projects. Also, as a note, the authors of SharpPulsar are always looking for feedback to improve the user experience, so be sure to &lt;a href="https://github.com/eaba/SharpPulsar"&gt;check out the SharpPulsar GitHub repository to see how you can get involved&lt;/a&gt;.&lt;/p&gt;</a10:content></item><item><guid isPermaLink="false">urn:uuid:a0d420f0-e803-43d7-861a-301baef19cc0</guid><link>https://dotnetfoundation.org/news-events/detail/increasing-your-aspnet-core-app-security-with-owasp-headers</link><a10:author><a10:name> </a10:name></a10:author><title>Increasing Your ASP.NET Core App Security With OWASP Headers</title><description>ASP.NET Core developers can implement the OWASP-recommended secure headers in their web applications with the greatest of ease using OwaspHeaders.Core.</description><pubDate>Mon, 17 Jul 2023 04:00:03 Z</pubDate><a10:content type="text">&lt;p&gt;Securing your application is of the utmost importance, but avoidable mistakes can lead to long-term damage to you, your business, and your users. Luckily for ASP.NET Core developers, they can implement the OWASP-recommended secure headers in their web applications with the greatest of ease. &lt;/p&gt;&lt;p&gt;Thanks to project maintainer &lt;a href="https://github.com/GaProgMan"&gt;Jamie Taylor&lt;/a&gt; and many other project contributors, you can now use the &lt;code&gt;OwaspHeaders.Core&lt;/code&gt; library to secure your applications from common web-based security threats, all in a single line of code. This library enhances ASP.NET Core HTTP responses with additional &lt;a href="https://owasp.org/www-project-secure-headers/"&gt;HTTP headers known to squash common vulnerabilities, as determined by The OWASP Foundation&lt;/a&gt;.&lt;/p&gt;&lt;p&gt;Let's look at how to install this library in your existing ASP.NET Core web applications and what the additional headers may look like in your HTTP responses.&lt;/p&gt;&lt;h2 id="getting-started"&gt;Getting Started&lt;/h2&gt;&lt;p&gt;To start using &lt;code&gt;OwaspHeaders.Core&lt;/code&gt;, you will need an existing ASP.NET Core application installed with the NuGet package of &lt;code&gt;OwasHeaders.Core&lt;/code&gt;. To install the library, run the following command or use the NuGet tool window in your favorite IDE to find the package.&lt;/p&gt;&lt;pre&gt;&lt;code class="language-text"&gt;dotnet add &lt;span class="hljs-keyword"&gt;package&lt;/span&gt; &lt;span class="hljs-title"&gt;OwaspHeaders.Core&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Once you've installed the dependency, you'll want to register the &lt;code&gt;SecureHeadersMiddleware&lt;/code&gt; as part of your ASP.NET Core request pipeline. &lt;strong&gt;Library authors recommend adding the middleware as close to the start of your HTTP request pipeline as possible.&lt;/strong&gt;&lt;/p&gt;&lt;pre&gt;&lt;code class="language-csharp"&gt;&lt;span class="hljs-keyword"&gt;var&lt;/span&gt; &lt;span class="hljs-keyword"&gt;app&lt;/span&gt; = builder.Build();

&lt;span class="hljs-comment"&gt;// Configure the HTTP request pipeline.&lt;/span&gt;
&lt;span class="hljs-keyword"&gt;if&lt;/span&gt; (!&lt;span class="hljs-keyword"&gt;app&lt;/span&gt;.Environment.IsDevelopment())
{
    &lt;span class="hljs-keyword"&gt;app&lt;/span&gt;.UseExceptionHandler(&lt;span class="hljs-string"&gt;"/Error"&lt;/span&gt;);
    &lt;span class="hljs-keyword"&gt;app&lt;/span&gt;.UseHsts();
}

&lt;span class="hljs-keyword"&gt;app&lt;/span&gt;.UseHttpsRedirection();
&lt;span class="hljs-comment"&gt;// Add the OWASP Secure Headers middleware here&lt;/span&gt;
&lt;span class="hljs-keyword"&gt;app&lt;/span&gt;.UseSecureHeadersMiddleware();
&lt;span class="hljs-keyword"&gt;app&lt;/span&gt;.UseStaticFiles();
&lt;span class="hljs-keyword"&gt;app&lt;/span&gt;.UseRouting();
&lt;span class="hljs-keyword"&gt;app&lt;/span&gt;.UseAuthorization();
&lt;span class="hljs-keyword"&gt;app&lt;/span&gt;.MapRazorPages();
&lt;span class="hljs-keyword"&gt;app&lt;/span&gt;.&lt;span class="hljs-keyword"&gt;Run&lt;/span&gt;();
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Once configured, your application's HTTP responses will now include the recommended set of security headers. Here's an example of what those new headers may look like. &lt;strong&gt;Note that the following result only shows the headers added by the library and no additional headers from ASP.NET Core.&lt;/strong&gt;&lt;/p&gt;&lt;pre&gt;&lt;code class="language-text"&gt;cache-&lt;span class="hljs-string"&gt;control:&lt;/span&gt; max-age=&lt;span class="hljs-number"&gt;31536000&lt;/span&gt;, &lt;span class="hljs-keyword"&gt;private&lt;/span&gt;
strict-transport-&lt;span class="hljs-string"&gt;security:&lt;/span&gt; max-age=&lt;span class="hljs-number"&gt;63072000&lt;/span&gt;;includeSubDomains
x-frame-&lt;span class="hljs-string"&gt;options:&lt;/span&gt; DENY
x-xss-&lt;span class="hljs-string"&gt;protection:&lt;/span&gt; &lt;span class="hljs-number"&gt;0&lt;/span&gt;
x-content-type-&lt;span class="hljs-string"&gt;options:&lt;/span&gt; nosniff
content-security-&lt;span class="hljs-string"&gt;policy:&lt;/span&gt; script-src &lt;span class="hljs-string"&gt;'self'&lt;/span&gt;;object-src &lt;span class="hljs-string"&gt;'self'&lt;/span&gt;;block-all-mixed-content;upgrade-insecure-requests;
x-permitted-cross-domain-&lt;span class="hljs-string"&gt;policies:&lt;/span&gt; none;
referrer-&lt;span class="hljs-string"&gt;policy:&lt;/span&gt; no-referrer
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;In addition to having a single-line middleware registration, you can choose which headers get added to responses by configuring an instance of the &lt;code&gt;SecureHeadersMiddlewareConfiguration&lt;/code&gt; class. Here's an example of a custom configuration of OWASP-recommended headers.&lt;/p&gt;&lt;pre&gt;&lt;code class="language-csharp"&gt;&lt;span class="hljs-selector-tag"&gt;public&lt;/span&gt; &lt;span class="hljs-selector-tag"&gt;static&lt;/span&gt; &lt;span class="hljs-selector-tag"&gt;SecureHeadersMiddlewareConfiguration&lt;/span&gt; &lt;span class="hljs-selector-tag"&gt;CustomConfiguration&lt;/span&gt;()
{
    &lt;span class="hljs-selector-tag"&gt;return&lt;/span&gt; &lt;span class="hljs-selector-tag"&gt;SecureHeadersMiddlewareBuilder&lt;/span&gt;
        &lt;span class="hljs-selector-class"&gt;.CreateBuilder&lt;/span&gt;()
        &lt;span class="hljs-selector-class"&gt;.UseHsts&lt;/span&gt;(&lt;span class="hljs-number"&gt;1200&lt;/span&gt;, false)
        &lt;span class="hljs-selector-class"&gt;.UseContentDefaultSecurityPolicy&lt;/span&gt;()
        &lt;span class="hljs-selector-class"&gt;.UsePermittedCrossDomainPolicies&lt;/span&gt;(XPermittedCrossDomainOptionValue.masterOnly)
        &lt;span class="hljs-selector-class"&gt;.UseReferrerPolicy&lt;/span&gt;(ReferrerPolicyOptions.sameOrigin)
        &lt;span class="hljs-selector-class"&gt;.Build&lt;/span&gt;();
}
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Then you can change the registration of the middleware to take advantage of your new configuration.&lt;/p&gt;&lt;pre&gt;&lt;code class="language-csharp"&gt;&lt;span class="hljs-selector-tag"&gt;app&lt;/span&gt;&lt;span class="hljs-selector-class"&gt;.UseSecureHeadersMiddleware&lt;/span&gt;(&lt;span class="hljs-selector-tag"&gt;CustomSecureHeaderExtensions&lt;/span&gt;&lt;span class="hljs-selector-class"&gt;.CustomConfiguration&lt;/span&gt;());
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;It's that straightforward! Who doesn't love some extra security? ❤️&lt;/p&gt;&lt;h2 id="give-owaspheaders-core-a-try-"&gt;Give OwaspHeaders.Core a Try!&lt;/h2&gt;&lt;p&gt;ASP.NET Core is the most popular part of the .NET stack, sadly making it the most prominent target for malicious attacks. By leaning on the security expert of the OWASP foundation and the hard work of our .NET OSS contributors, you can now add a new layer of security to your web applications.&lt;/p&gt;&lt;p&gt;As of this post, &lt;a href="https://www.nuget.org/packages/OwaspHeaders.Core/"&gt;the &lt;code&gt;OwaspHeaders.Core&lt;/code&gt; library is on release &lt;code&gt;7.5.0&lt;/code&gt; and is available on NuGet&lt;/a&gt;, with over 600K downloads . Give it a try, and please take the time to thank the owners and contributors of the project that make .NET OSS possible.&lt;/p&gt;&lt;p&gt;If you have any feedback for the project or would like to get involved, please head over to their &lt;a href="https://github.com/GaProgMan/OwaspHeaders.Core"&gt;GitHub repository&lt;/a&gt;.&lt;/p&gt;</a10:content></item><item><guid isPermaLink="false">urn:uuid:754df0c0-4cb5-40ba-9834-5b02e58d308c</guid><link>https://dotnetfoundation.org/news-events/detail/ssg.net-turn-asp.net-core-mvc-applications-into-static-sites</link><a10:author><a10:name> </a10:name></a10:author><title>SSG.NET: Turn ASP.NET Core MVC Applications into Static Sites</title><description>What if you could use common patterns in ASP.NET Core MVC to provide a quick onboarding to static-site Nirvana? SSG.NET, a .NET global tool that can process an existing ASP.NET Core MVC application and generate static assets you can host almost anywhere.</description><pubDate>Wed, 12 Jul 2023 04:00:03 Z</pubDate><a10:content type="text">&lt;p dir="auto"&gt;Static site generation can be one of the most effective ways to deploy content to users. When you generate web pages at compile-time, you pay the cost of expensive operations once and outside of the standard HTTP request pipeline, as opposed to the traditional server-client model, which may execute expensive back-end operations on every request. The benefits can positively impact SEO page rankings, user experience, and hosting costs. Sounds great, right?&lt;/p&gt;&lt;p dir="auto"&gt;Wouldn't it be even better to combine the strengths of the ASP.NET Core ecosystem with the performance of static site generators? What if you could use common patterns in ASP.NET Core MVC to provide a quick onboarding to static-site Nirvana? Well, we have the .NET OSS package just for you. We're happy to introduce you to SSG.NET, a .NET global tool that can process an existing ASP.NET Core MVC application and generate static assets you can host almost anywhere.&lt;/p&gt;&lt;p dir="auto"&gt;Let's see how to get started with the library and explore the blog template provided by the tool author,&amp;nbsp;&lt;a href="https://github.com/CamiloTerevinto"&gt;Camilo Terevinto&lt;/a&gt;.&lt;/p&gt;&lt;h2 dir="auto"&gt;Getting Started&lt;/h2&gt;&lt;p dir="auto"&gt;To begin using SSG.NET, you must install the tool into your tools global directory.&lt;/p&gt;&lt;div dir="auto"&gt;&lt;pre&gt;&lt;code class="language-text"&gt;dotnet tool install --global TerevintoSoftware.StaticSiteGenerator.Tool&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p dir="auto"&gt;You may also install SSG.NET to your ASP.NET Core MVC's solution directory using the&amp;nbsp;&lt;code&gt;tool-manifest&lt;/code&gt;&amp;nbsp;template as part of the .NET CLI tooling.&lt;/p&gt;&lt;p dir="auto"&gt;Once you've installed the tool, you can run the following command at the root of your solution directory to start the static site generation process. Be sure to change the inputs to match your solution.&lt;/p&gt;&lt;div dir="auto"&gt;&lt;pre&gt;&lt;code class="language-text"&gt;ssg --project ./src/MySite --output ./site
--route-casing KebabCase --use-localization true --assembly bin/Release/net6.0/MySite.dll&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p dir="auto"&gt;It's important to note that SSG.NET executes only the&amp;nbsp;view&amp;nbsp;portion of your ASP.NET Core MVC applications. The limitations mean that the logic found in Controllers, Models, or Middleware is not part of the transformation process. Also, the library does not currently support Razor Pages as of writing this post.&lt;/p&gt;&lt;h2 dir="auto"&gt;SSG.NET's Blog Template&lt;/h2&gt;&lt;p dir="auto"&gt;If you'd like to explore SSG.NET as a platform for blogging, the project has been kind enough to provide a starter template. To get started, you can&amp;nbsp;&lt;a href="https://github.com/CamiloTerevinto/StaticBlogTemplate"&gt;clone the Blog template repository&lt;/a&gt;. Once you've cloned the repository, you can add new entries to the blog by adding new Markdown files to the&amp;nbsp;Posts&amp;nbsp;directory and a corresponding&amp;nbsp;&lt;code&gt;.cshtml&lt;/code&gt;&amp;nbsp;file under the&amp;nbsp;/Views/Posts&amp;nbsp;directory.&lt;/p&gt;&lt;p dir="auto"&gt;From here, you can share your latest .NET blog posts on your favorite static site hosts like Windows Azure, Amazon Web Services, GitHub, or Netlify.&lt;/p&gt;&lt;h2 dir="auto"&gt;Conclusion&lt;/h2&gt;&lt;p dir="auto"&gt;SSG.NET is a straightforward and familiar introduction to static site generation for the .NET Community. If you've felt overwhelmed by them in the past, SSG.NET is a great way to reuse your existing ASP.NET Core MVC skills to produce efficient and performant web pages without the steep learning curve.&lt;/p&gt;&lt;p dir="auto"&gt;The SSG.NET project is also looking for folks to help and contribute to the existing project. If you're interested in helping maintainer&amp;nbsp;&lt;a href="https://github.com/CamiloTerevinto"&gt;Camilo Terevinto&lt;/a&gt;, please head to the&amp;nbsp;&lt;a href="https://github.com/CamiloTerevinto/TerevintoSoftware.StaticSiteGenerator"&gt;&lt;strong&gt;SSG.NET GitHub repository&lt;/strong&gt;&lt;/a&gt;.&lt;/p&gt;</a10:content></item><item><guid isPermaLink="false">urn:uuid:bd4e72fa-2385-4587-9ecb-501b5eee44ce</guid><link>https://dotnetfoundation.org/news-events/detail/community-post-enhance-csharp-code-consistency-in-visual-studio-with-editorconfig</link><a10:author><a10:name> </a10:name></a10:author><title>Community Post: Enhance C# Code Consistency in Visual Studio with .editorconfig</title><description>In this featured community post by .NET freelancer Pierre Belin, discover techniques to enhance your C# codebase's consistency using the EditorConfig standard. </description><pubDate>Mon, 10 Jul 2023 13:34:46 Z</pubDate><a10:content type="text">&lt;p dir="auto"&gt;In this featured community post by .NET freelancer&amp;nbsp;&lt;a href="https://www.linkedin.com/in/pierre-belin/" rel="nofollow"&gt;Pierre Belin&lt;/a&gt;, discover techniques to enhance your C# codebase's consistency using the&amp;nbsp;&lt;a href="https://editorconfig.org/" rel="nofollow"&gt;EditorConfig&lt;/a&gt;&amp;nbsp;standard. Adding a single&amp;nbsp;&lt;code&gt;.editorconfig&lt;/code&gt;&amp;nbsp;file to your .NET projects allows you to enforce coding styles and configure hints, errors, warnings, and more.&lt;/p&gt;&lt;p dir="auto"&gt;Here's a preview from the perspective of the author:&lt;/p&gt;&lt;blockquote&gt;&lt;p dir="auto" style="margin-left:30px;"&gt;&lt;g-emoji alias="mortar_board" fallback-src="https://github.githubassets.com/images/icons/emoji/unicode/1f393.png"&gt;&lt;/g-emoji&gt;I'm sure you've already worked on a project where each developer had their preferred naming convention, leading to inconsistent code. It's a real pain...&lt;br /&gt;Fortunately, Visual Studio integrates the&amp;nbsp;&lt;code&gt;.editorconfig&lt;/code&gt;&amp;nbsp;file to share the same naming convention between all project developers.&lt;/p&gt;&lt;/blockquote&gt;&lt;p dir="auto"&gt;&lt;a href="https://goatreview.com/enhance-code-consistency-visual-studio-editorconfig/" rel="nofollow"&gt;&lt;strong&gt;Head over to Pierre's article for insight on using EditorConfig to enhance the Visual Studio development experience.&lt;/strong&gt;&lt;/a&gt;&lt;/p&gt;&lt;p dir="auto"&gt;Also, if you like what you read on Pierre's blog, subscribe to his newsletter for more content.&lt;/p&gt;</a10:content></item><item><guid isPermaLink="false">urn:uuid:4cf29a53-d08a-4415-b736-efd7f230f4e6</guid><link>https://dotnetfoundation.org/news-events/detail/welcome-to-the-dotnet-foundation-blog</link><a10:author><a10:name> </a10:name></a10:author><title>Welcome to the .NET Foundation Blog</title><description>An essential part of the .NET Foundation's mission is to help the .NET community stay informed about projects and events that involve our project members. Read about our goals with the new .NET Foundation blog.</description><pubDate>Mon, 03 Jul 2023 18:56:46 Z</pubDate><a10:content type="text">&lt;div&gt;An essential part of the .NET Foundation's mission is to help the .NET community stay informed about projects and events that involve our project members. Additionally, we view this blog as an opportunity for our members to share what they are excited about, from blog posts to online videos and upcoming events. The blog aims to give readers a unique perspective on everything .NET from the viewpoint of the community, project maintainers, and .NET Foundation members. If that interests you, please keep returning for the latest news, commentary, and events.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;For folks interested in contributing to the .NET Foundation blog, there are several ways to get involved. After all, the .NET Foundation is a volunteer organization that thrives on generous donations of time and effort from existing and future members. Here's how you can get involved today:&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;ol&gt;&lt;li&gt;Share content you see on the .NET Foundation blog with coworkers and friends. Sharing is caring, and we appreciate your help in growing our community.&lt;/li&gt;&lt;li&gt;&amp;nbsp;If you are a content creator, we'll happily share your existing content with our community of readers. Head to our content repository at &lt;a href="https://github.com/dotnet-foundation/content" target="_blank"&gt;https://github.com/dotnet-foundation/content&lt;/a&gt; and file an issue. Moderators ultimately decide which shared content to publish.&lt;/li&gt;&lt;li&gt;&amp;nbsp;Get involved with the marketing committee and pick up volunteer writing tasks. Hundreds of projects within the .NET Foundation need your skills in the form of blog posts. Do you have a favorite project in the Foundation that needs more love? Well, here's your chance to help!&lt;/li&gt;&lt;li&gt;Help proofread technical content for accuracy and straightforward narrative. Whether you're just starting your writing journey or are a veteran, your feedback can help increase the quality of posts here.&lt;/li&gt;&lt;/ol&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;With your help, we hope to have at least 1 to 2 exciting posts here a week, just enough to keep you coming back for more. If you think of other ways to help, please share them in our GitHub discussions.&amp;nbsp;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Thank you to the .NET Community for supporting this new channel for sharing tried-and-true solutions, experimenting with new ideas, and generally being awesome. We hope to see you here soon.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;</a10:content></item><item><guid isPermaLink="false">urn:uuid:b42428f7-a816-43b8-8705-219035f035fb</guid><link>https://dotnetfoundation.org/news-events/detail/january-2023-summit-newsletter</link><a10:author><a10:name> </a10:name></a10:author><title>January 2023 Summit Newsletter</title><description>To everyone that made the DNF Summit January 2023 such a great event, your support does not go unnoticed! </description><pubDate>Thu, 16 Feb 2023 21:05:23 Z</pubDate><a10:content type="text"></a10:content></item><item><guid isPermaLink="false">urn:uuid:2dc8aac6-f269-44c4-b154-1ce9cafa2f38</guid><link>https://dotnetfoundation.org/news-events/detail/outreach-committee-january-2022</link><a10:author><a10:name> </a10:name></a10:author><title>Outreach Committee January 2022</title><description>New year, new you? If you're passionate about .NET and are ready to help the .NET Foundation's Outreach Committee achieve it's goals, then it's time to volunteer.</description><pubDate>Wed, 08 Feb 2023 23:53:51 Z</pubDate><a10:content type="text">&lt;p&gt;New year, new you? If you're passionate about .NET and are ready to help the .NET Foundation's Outreach Committee achieve it's goals, then it's time to volunteer.&lt;/p&gt;&lt;p&gt;Our meetings are public and anyone can attend. The outreach committee is here to welcome developers of all backgrounds, education, and technology experience into the .NET ecosystem. We are here to help you organize and evangelize with your own .NET communities, opportunities, and events.&lt;/p&gt;&lt;p&gt;Please join us on January 11th at 3pm ET/noon PT/8pm GMT/7am AEDT on Teams at:&lt;/p&gt;&lt;p&gt;&lt;p&gt;&lt;a href="https://teams.microsoft.com/l/meetup-join/19%3ameeting_MDFlYTdlMmQtM2QxYi00NmIwLWE4YmMtOTc0Mzc2YTJhZWFk%40thread.v2/0?context=%7B%22Tid%22%3a%22f0bdbbf2-cd76-4967-8c4c-50a802746912%22%2c%22Oid%22%3a%226cbc10ce-cc85-402e-ab0d-3969040ec4a7%22%7D" target="_blank"&gt;January 2022 Outreach Committee Meeting&lt;/a&gt;&lt;/p&gt;&lt;/p&gt;&lt;p&gt;TIA!&lt;/p&gt;&lt;p&gt;Shawn Wildermuth&lt;br /&gt;.NET Foundation Outreach Committee&lt;/p&gt;</a10:content></item><item><guid isPermaLink="false">urn:uuid:97f74568-8a5d-49da-acbc-cc96802db9ef</guid><link>https://dotnetfoundation.org/news-events/detail/outreach-committee-march-2022</link><a10:author><a10:name> </a10:name></a10:author><title>Outreach Committee March 2022</title><description>After a week delay, the Outreach Committee is meeting this Tuesday. </description><pubDate>Wed, 08 Feb 2023 23:52:39 Z</pubDate><a10:content type="text">&lt;p&gt;After a week delay, the Outreach Committee is meeting this Tuesday. If you can make it, we could use your opinions and efforts to help promote .NET to new audiences!&lt;/p&gt;&lt;p&gt;Our meetings are public and anyone can attend. The outreach committee is here to welcome developers of all backgrounds, education, and technology experience into the .NET ecosystem. We are here to help you organize and evangelize with your own .NET communities, opportunities, and events.&lt;/p&gt;&lt;p&gt;Please join us on March 15th at 3pm ET/noon PT/8pm GMT/7am AEDT on Teams at:&lt;/p&gt;&lt;p&gt;&lt;p&gt;&lt;a href="https://teams.microsoft.com/l/meetup-join/19%3ameeting_MDFlYTdlMmQtM2QxYi00NmIwLWE4YmMtOTc0Mzc2YTJhZWFk%40thread.v2/0?context=%7B%22Tid%22%3a%22f0bdbbf2-cd76-4967-8c4c-50a802746912%22%2c%22Oid%22%3a%226cbc10ce-cc85-402e-ab0d-3969040ec4a7%22%7D" target="_blank"&gt;March 2022 Outreach Committee Meeting&lt;/a&gt;&lt;/p&gt;&lt;/p&gt;&lt;p&gt;TIA!&lt;/p&gt;&lt;p&gt;Shawn Wildermuth&lt;br /&gt;.NET Foundation Outreach Committee&lt;/p&gt;</a10:content></item></channel></rss>