<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Grant Winney</title><link>https://grantwinney.com/</link><description>Recent content on Grant Winney</description><generator>Hugo -- gohugo.io</generator><language>en</language><copyright>© 2026 Grant Winney</copyright><lastBuildDate>Sat, 16 May 2026 11:55:00 +0000</lastBuildDate><atom:link href="https://grantwinney.com/index.xml" rel="self" type="application/rss+xml"/><item><title>eBay, EdgeSuite, and error #97.etc.etc</title><link>https://grantwinney.com/ebay-edgesuite-akamai-error/</link><pubDate>Thu, 30 Apr 2026 16:49:00 +0000</pubDate><guid>https://grantwinney.com/ebay-edgesuite-akamai-error/</guid><description>When eBay went down the other day, everyone started getting edgesuite errors. I was kinda curious what those were.. here&amp;rsquo;s what I found.</description><media:content xmlns:media="http://search.yahoo.com/mrss/" url="https://grantwinney.com/ebay-edgesuite-akamai-error/feature.webp"/></item><item><title>A weekend spent cleaning house</title><link>https://grantwinney.com/cleaning-up-hide-comments-everywhere/</link><pubDate>Tue, 28 Apr 2026 18:51:00 +0000</pubDate><guid>https://grantwinney.com/cleaning-up-hide-comments-everywhere/</guid><description>I spent a weekend cleaning up a personal project, and learned more about JavaScript in the process.</description><media:content xmlns:media="http://search.yahoo.com/mrss/" url="https://grantwinney.com/cleaning-up-hide-comments-everywhere/feature.webp"/></item><item><title>Missing year on the VS 2026 shortcut hints at big change</title><link>https://grantwinney.com/visual-studio-mystery-version/</link><pubDate>Mon, 19 Jan 2026 11:52:00 +0000</pubDate><guid>https://grantwinney.com/visual-studio-mystery-version/</guid><description>On installing VS 2026, I noticed the year&amp;rsquo;s missing on the shortcut. It&amp;rsquo;s no bug, and the way VS is being developed, released and supported is changing in a big way.</description><media:content xmlns:media="http://search.yahoo.com/mrss/" url="https://grantwinney.com/visual-studio-mystery-version/feature.webp"/></item><item><title>Using null conditional and null coalescing operators for assignment in C#</title><link>https://grantwinney.com/csharp-null-conditional-assignment/</link><pubDate>Wed, 03 Dec 2025 12:09:00 +0000</pubDate><guid>https://grantwinney.com/csharp-null-conditional-assignment/</guid><description>The null conditional operator just got an upgrade.. we can do assignments with it now! Let&amp;rsquo;s see it in action.</description><media:content xmlns:media="http://search.yahoo.com/mrss/" url="https://grantwinney.com/csharp-null-conditional-assignment/feature.webp"/></item><item><title>Using Extension Members in C# 14</title><link>https://grantwinney.com/csharp-extension-members/</link><pubDate>Tue, 02 Dec 2025 12:58:00 +0000</pubDate><guid>https://grantwinney.com/csharp-extension-members/</guid><description>Extension members take extension methods to the next level. Let&amp;rsquo;s see how to use this new C# 14 feature.</description><media:content xmlns:media="http://search.yahoo.com/mrss/" url="https://grantwinney.com/csharp-extension-members/feature.webp"/></item><item><title>New (old) Beginnings</title><link>https://grantwinney.com/new-old-beginnings/</link><pubDate>Thu, 27 Nov 2025 08:39:00 +0000</pubDate><guid>https://grantwinney.com/new-old-beginnings/</guid><description>A month into a new job, and a return to a company I was at 20 years ago, there&amp;rsquo;s a lot to be thankful for.</description><media:content xmlns:media="http://search.yahoo.com/mrss/" url="https://grantwinney.com/new-old-beginnings/feature.webp"/></item><item><title>Pull requests aren't a stamp of approval</title><link>https://grantwinney.com/pull-requests-are-not-a-stamp-of-approval/</link><pubDate>Sun, 02 Nov 2025 01:04:00 +0000</pubDate><guid>https://grantwinney.com/pull-requests-are-not-a-stamp-of-approval/</guid><description>Pull requests are a chance to ask, learn, and make sure that the code being merged is something EVERYONE is comfortable owning.</description><media:content xmlns:media="http://search.yahoo.com/mrss/" url="https://grantwinney.com/pull-requests-are-not-a-stamp-of-approval/feature.webp"/></item><item><title>Contact Me</title><link>https://grantwinney.com/contact/</link><pubDate>Sat, 01 Nov 2025 10:14:00 +0000</pubDate><guid>https://grantwinney.com/contact/</guid><description/><media:content xmlns:media="http://search.yahoo.com/mrss/" url="https://grantwinney.com/contact/feature.webp"/></item><item><title>A comparison of DateTime to DateTimeOffset</title><link>https://grantwinney.com/csharp-datetime-vs-datetimeoffset/</link><pubDate>Sat, 06 Sep 2025 17:16:00 +0000</pubDate><guid>https://grantwinney.com/csharp-datetime-vs-datetimeoffset/</guid><description>Should you use DateTime or DateTimeOffset? Well, it depends&amp;hellip;</description><media:content xmlns:media="http://search.yahoo.com/mrss/" url="https://grantwinney.com/csharp-datetime-vs-datetimeoffset/feature.webp"/></item><item><title>WebView2, a browser for WinForms in .NET 5</title><link>https://grantwinney.com/webview2-a-browser-for-winforms/</link><pubDate>Fri, 17 Jan 2025 22:41:08 +0000</pubDate><guid>https://grantwinney.com/webview2-a-browser-for-winforms/</guid><description>In .NET 5, WinForms got a WebView2 control for displaying web pages.. even ones we create on-the-fly while the app&amp;rsquo;s running. Let&amp;rsquo;s kick the tires.</description><media:content xmlns:media="http://search.yahoo.com/mrss/" url="https://grantwinney.com/webview2-a-browser-for-winforms/feature.webp"/></item><item><title>TaskDialog, a new message box for WinForms in .NET 5</title><link>https://grantwinney.com/using-taskdialog-in-winforms/</link><pubDate>Tue, 31 Dec 2024 23:41:30 +0000</pubDate><guid>https://grantwinney.com/using-taskdialog-in-winforms/</guid><description>In .NET 5, WinForms got a major upgrade to the MessageBox called TaskDialog. It&amp;rsquo;s way more flexible and powerful - let&amp;rsquo;s check it out!</description><media:content xmlns:media="http://search.yahoo.com/mrss/" url="https://grantwinney.com/using-taskdialog-in-winforms/feature.webp"/></item><item><title>Selecting multiple directories with the FolderBrowserDialog in .NET 9</title><link>https://grantwinney.com/selecting-multiple-directories-with-the-winforms-folderbrowserdialog-in-dotnet/</link><pubDate>Thu, 19 Dec 2024 22:41:10 +0000</pubDate><guid>https://grantwinney.com/selecting-multiple-directories-with-the-winforms-folderbrowserdialog-in-dotnet/</guid><description>One of the smaller updates to make it into .NET 9 for WinForms was allowing multi-selection in the FolderBrowserDialog. Let&amp;rsquo;s see how.</description><media:content xmlns:media="http://search.yahoo.com/mrss/" url="https://grantwinney.com/selecting-multiple-directories-with-the-winforms-folderbrowserdialog-in-dotnet/feature.webp"/></item><item><title>How to Use GetStockIcon for WinForms in .NET 8</title><link>https://grantwinney.com/how-to-use-getstockicon-for-winforms/</link><pubDate>Wed, 18 Dec 2024 15:50:31 +0000</pubDate><guid>https://grantwinney.com/how-to-use-getstockicon-for-winforms/</guid><description>Buried deep in the list of .NET 8 improvements for WinForms is the GetStockIcon method. It gives us a way to access stock Windows icons at runtime for the OS the app is running on. Let&amp;rsquo;s check it out.</description><media:content xmlns:media="http://search.yahoo.com/mrss/" url="https://grantwinney.com/how-to-use-getstockicon-for-winforms/feature.webp"/></item><item><title>Using Raw String Literals in C# 11 / .NET 7</title><link>https://grantwinney.com/using-raw-string-literals-in-csharp/</link><pubDate>Sat, 14 Dec 2024 22:32:43 +0000</pubDate><guid>https://grantwinney.com/using-raw-string-literals-in-csharp/</guid><description>C# 11 added raw string literals, not a life-altering new feature, but they could be useful in the right circumstances. Let&amp;rsquo;s see how to use them.</description><media:content xmlns:media="http://search.yahoo.com/mrss/" url="https://grantwinney.com/using-raw-string-literals-in-csharp/feature.webp"/></item><item><title>Using Primary Constructors with Classes and Structs in C# 12 / .NET 8</title><link>https://grantwinney.com/using-primary-constructors-with-classes-and-structs-in-csharp/</link><pubDate>Fri, 13 Dec 2024 02:05:42 +0000</pubDate><guid>https://grantwinney.com/using-primary-constructors-with-classes-and-structs-in-csharp/</guid><description>As part of C# 12, we got a new feature called primary constructors. Let&amp;rsquo;s see how they work and what we can do with them.</description><media:content xmlns:media="http://search.yahoo.com/mrss/" url="https://grantwinney.com/using-primary-constructors-with-classes-and-structs-in-csharp/feature.webp"/></item><item><title>Records, Classes and Equality in C# 9 / .NET 5</title><link>https://grantwinney.com/records-classes-and-equality-in-csharp/</link><pubDate>Tue, 10 Dec 2024 12:35:55 +0000</pubDate><guid>https://grantwinney.com/records-classes-and-equality-in-csharp/</guid><description>The record modifier can define properties and equality in our classes for us, saving time and keeping our code cleaner. Let&amp;rsquo;s see how it works!</description><media:content xmlns:media="http://search.yahoo.com/mrss/" url="https://grantwinney.com/records-classes-and-equality-in-csharp/feature.webp"/></item><item><title>Set-based LINQ - ExceptBy, IntersectBy, UnionBy, DistinctBy</title><link>https://grantwinney.com/set-based-linq-exceptby-intersectby-unionby-distinctby/</link><pubDate>Sun, 08 Dec 2024 22:59:12 +0000</pubDate><guid>https://grantwinney.com/set-based-linq-exceptby-intersectby-unionby-distinctby/</guid><description>The .NET team has made some helpful additions to LINQ in recent years. Today let&amp;rsquo;s check out the various set-based updates from C# 10 / .NET 6.</description><media:content xmlns:media="http://search.yahoo.com/mrss/" url="https://grantwinney.com/set-based-linq-exceptby-intersectby-unionby-distinctby/feature.webp"/></item><item><title>Using MinBy and MaxBy in C# 10 / .NET 6</title><link>https://grantwinney.com/using-minby-and-maxby-in-csharp/</link><pubDate>Thu, 05 Dec 2024 22:24:55 +0000</pubDate><guid>https://grantwinney.com/using-minby-and-maxby-in-csharp/</guid><description>The .NET team has made some helpful additions to LINQ over the last few years. Today let&amp;rsquo;s check out MinBy and MaxBy from C# 10 / .NET 6.</description><media:content xmlns:media="http://search.yahoo.com/mrss/" url="https://grantwinney.com/using-minby-and-maxby-in-csharp/feature.webp"/></item><item><title>Using CountBy and AggregateBy in C# 13 / .NET 9</title><link>https://grantwinney.com/using-linq-countby-and-aggregateby-in-csharp/</link><pubDate>Tue, 03 Dec 2024 19:23:03 +0000</pubDate><guid>https://grantwinney.com/using-linq-countby-and-aggregateby-in-csharp/</guid><description>It&amp;rsquo;s great to see Microsoft still giving us new things in LINQ. With C# 13 / .NET 9, we get CountBy and AggregateBy, so let&amp;rsquo;s see how to use them.</description><media:content xmlns:media="http://search.yahoo.com/mrss/" url="https://grantwinney.com/using-linq-countby-and-aggregateby-in-csharp/feature.webp"/></item><item><title>Async, CancellationToken, and IProgress in 5 Short Examples</title><link>https://grantwinney.com/async-in-5-short-examples/</link><pubDate>Mon, 07 Oct 2024 02:43:55 +0000</pubDate><guid>https://grantwinney.com/async-in-5-short-examples/</guid><description>Async code isn&amp;rsquo;t always intuitive, but practicing helps. Let&amp;rsquo;s take a look at Async, CancellationToken, and IProgress, in a few short examples.</description><media:content xmlns:media="http://search.yahoo.com/mrss/" url="https://grantwinney.com/async-in-5-short-examples/feature.webp"/></item><item><title>Using TimeProvider and FakeTimeProvider in WinForms</title><link>https://grantwinney.com/using-timeprovider-and-faketimeprovider-in-winforms/</link><pubDate>Mon, 05 Feb 2024 05:07:51 +0000</pubDate><guid>https://grantwinney.com/using-timeprovider-and-faketimeprovider-in-winforms/</guid><description>Testing .NET code involving time has always been a pain, but the TimeProvider class (backported to the .NET Framework) gives us awesome new tools.</description><media:content xmlns:media="http://search.yahoo.com/mrss/" url="https://grantwinney.com/using-timeprovider-and-faketimeprovider-in-winforms/feature.webp"/></item><item><title>SSRS won't show the updated default value for a parameter</title><link>https://grantwinney.com/ssrs-wont-show-the-updated-default-value-for-a-parameter/</link><pubDate>Wed, 31 Jan 2024 02:40:31 +0000</pubDate><guid>https://grantwinney.com/ssrs-wont-show-the-updated-default-value-for-a-parameter/</guid><description>Changed the default value for a report parameter, but it&amp;rsquo;s not actually updating in SSRS? That&amp;rsquo;s by design. Let&amp;rsquo;s find a way around it.</description><media:content xmlns:media="http://search.yahoo.com/mrss/" url="https://grantwinney.com/ssrs-wont-show-the-updated-default-value-for-a-parameter/feature.webp"/></item><item><title>How to use (and test) TimeProvider timers in .NET</title><link>https://grantwinney.com/how-to-use-timeprovider-and-faketimeprovider-to-test-timers/</link><pubDate>Thu, 11 Jan 2024 04:34:20 +0000</pubDate><guid>https://grantwinney.com/how-to-use-timeprovider-and-faketimeprovider-to-test-timers/</guid><description>Testing timers in C# is difficult, but .NET 8 (C# 12) adds an abstract TimeProvider class that makes it easier. Let&amp;rsquo;s take a closer look.</description><media:content xmlns:media="http://search.yahoo.com/mrss/" url="https://grantwinney.com/how-to-use-timeprovider-and-faketimeprovider-to-test-timers/feature.webp"/></item><item><title>How to use TimeProvider and FakeTimeProvider (time abstraction in .NET)</title><link>https://grantwinney.com/how-to-use-timeprovider-and-faketimeprovider/</link><pubDate>Sun, 07 Jan 2024 04:14:00 +0000</pubDate><guid>https://grantwinney.com/how-to-use-timeprovider-and-faketimeprovider/</guid><description>Testing time in C# is difficult, but .NET 8 (C# 12) adds an abstract TimeProvider class that makes it easier. Let&amp;rsquo;s take a closer look.</description><media:content xmlns:media="http://search.yahoo.com/mrss/" url="https://grantwinney.com/how-to-use-timeprovider-and-faketimeprovider/feature.webp"/></item><item><title>Diligence, laziness.. or both?</title><link>https://grantwinney.com/diligence-laziness-or-both/</link><pubDate>Mon, 04 Dec 2023 22:22:49 +0000</pubDate><guid>https://grantwinney.com/diligence-laziness-or-both/</guid><description>Funny how a little due diligence mixes so well with a healthy interest in avoiding unnecessary future work.</description><media:content xmlns:media="http://search.yahoo.com/mrss/" url="https://grantwinney.com/diligence-laziness-or-both/feature.jpg"/></item><item><title>A swirly mass of shared code</title><link>https://grantwinney.com/swirly-mass-of-code/</link><pubDate>Tue, 14 Nov 2023 04:31:52 +0000</pubDate><guid>https://grantwinney.com/swirly-mass-of-code/</guid><description/><media:content xmlns:media="http://search.yahoo.com/mrss/" url="https://grantwinney.com/swirly-mass-of-code/feature.png"/></item><item><title>If/else vs switch/case pattern matching</title><link>https://grantwinney.com/if-else-vs-switch-case-pattern-matching/</link><pubDate>Fri, 03 Nov 2023 16:35:50 +0000</pubDate><guid>https://grantwinney.com/if-else-vs-switch-case-pattern-matching/</guid><description>A look at if/else, switch/case, pattern matching, other options &amp;hellip; and which is best. (spoiler: none ;) )</description><media:content xmlns:media="http://search.yahoo.com/mrss/" url="https://grantwinney.com/if-else-vs-switch-case-pattern-matching/feature.webp"/></item><item><title>What are list patterns in C#?</title><link>https://grantwinney.com/whats-a-list-pattern-in-csharp/</link><pubDate>Thu, 31 Aug 2023 23:04:38 +0000</pubDate><guid>https://grantwinney.com/whats-a-list-pattern-in-csharp/</guid><description>C# has been getting a lot of pattern matching love in recent years, like with list patterns in C# 11. The problem is knowing where and how to use it.</description><media:content xmlns:media="http://search.yahoo.com/mrss/" url="https://grantwinney.com/whats-a-list-pattern-in-csharp/feature.webp"/></item><item><title>Even in failure, an increase in understanding is a win</title><link>https://grantwinney.com/even-in-failure-success/</link><pubDate>Thu, 24 Aug 2023 21:30:16 +0000</pubDate><guid>https://grantwinney.com/even-in-failure-success/</guid><description>When what we&amp;rsquo;re trying to accomplish fails, the extra knowledge and clarity we get just by making the attempt is a win all by itself.</description><media:content xmlns:media="http://search.yahoo.com/mrss/" url="https://grantwinney.com/even-in-failure-success/feature.webp"/></item><item><title>What are generic attributes in C# 11?</title><link>https://grantwinney.com/what-are-generic-attributes/</link><pubDate>Wed, 23 Aug 2023 15:52:21 +0000</pubDate><guid>https://grantwinney.com/what-are-generic-attributes/</guid><description>Generic attributes increase the flexibility of a very early .NET feature. Let&amp;rsquo;s try using them and see how it keeps our code DRY.</description><media:content xmlns:media="http://search.yahoo.com/mrss/" url="https://grantwinney.com/what-are-generic-attributes/feature.webp"/></item><item><title>Simple ways to notify a user without a MessageBox in WinForms</title><link>https://grantwinney.com/other-ways-to-notify-user-besides-messagebox/</link><pubDate>Wed, 16 Aug 2023 01:35:54 +0000</pubDate><guid>https://grantwinney.com/other-ways-to-notify-user-besides-messagebox/</guid><description>When sending notifications in a WinForms app, a MessageBox is the only way to go&amp;hellip; or is it? Let&amp;rsquo;s get creative and see what else we might do.</description><media:content xmlns:media="http://search.yahoo.com/mrss/" url="https://grantwinney.com/other-ways-to-notify-user-besides-messagebox/feature.webp"/></item><item><title>How to call an async method from a synchronous one, without deadlocking</title><link>https://grantwinney.com/call-an-async-method-from-a-synchronous-one/</link><pubDate>Fri, 11 Aug 2023 03:59:55 +0000</pubDate><guid>https://grantwinney.com/call-an-async-method-from-a-synchronous-one/</guid><description>Writing async code whenever possible is great, but how do we do it when we&amp;rsquo;re stuck with legacy (and very synchronous) code?</description><media:content xmlns:media="http://search.yahoo.com/mrss/" url="https://grantwinney.com/call-an-async-method-from-a-synchronous-one/feature.webp"/></item><item><title>What's the difference between singleton, scoped, and transient?</title><link>https://grantwinney.com/difference-between-singleton-scoped-transient/</link><pubDate>Fri, 28 Jul 2023 21:41:00 +0000</pubDate><guid>https://grantwinney.com/difference-between-singleton-scoped-transient/</guid><description>It&amp;rsquo;s trivial to register a dependency in a .NET API, but it&amp;rsquo;s important to clarify a few terms that drastically change a dependency&amp;rsquo;s lifetime.</description><media:content xmlns:media="http://search.yahoo.com/mrss/" url="https://grantwinney.com/difference-between-singleton-scoped-transient/feature.webp"/></item><item><title>How can I generate a new GUID?</title><link>https://grantwinney.com/how-can-i-generate-a-new-guid/</link><pubDate>Thu, 27 Jul 2023 22:12:21 +0000</pubDate><guid>https://grantwinney.com/how-can-i-generate-a-new-guid/</guid><description>GUIDs are heavily used in the world of development, so let&amp;rsquo;s look at a few quick and easy ways to generate them whenever we need them.</description><media:content xmlns:media="http://search.yahoo.com/mrss/" url="https://grantwinney.com/how-can-i-generate-a-new-guid/feature.webp"/></item><item><title>Comparing files in VS Code</title><link>https://grantwinney.com/how-to-compare-files-using-vs-code/</link><pubDate>Wed, 26 Jul 2023 22:15:20 +0000</pubDate><guid>https://grantwinney.com/how-to-compare-files-using-vs-code/</guid><description>VS Code is a great editor with a lot of useful features, like being able to compare two random files for differences. Let&amp;rsquo;s see how.</description><media:content xmlns:media="http://search.yahoo.com/mrss/" url="https://grantwinney.com/how-to-compare-files-using-vs-code/feature.webp"/></item><item><title>How to log messages to multiple targets with NLog</title><link>https://grantwinney.com/how-to-log-messages-to-multiple-targets-with-nlog/</link><pubDate>Sun, 02 Jul 2023 03:09:24 +0000</pubDate><guid>https://grantwinney.com/how-to-log-messages-to-multiple-targets-with-nlog/</guid><description>When it comes to finding a bug in an app, few things beat a good trail of logs. And for writing those logs, few tools beat NLog in simplicity or flexibility. I rarely appreciate just how flexible it is though, so it&amp;rsquo;s worth spending a little time taking a closer look.</description><media:content xmlns:media="http://search.yahoo.com/mrss/" url="https://grantwinney.com/how-to-log-messages-to-multiple-targets-with-nlog/feature.webp"/></item><item><title>What is the NUnit constraint model?</title><link>https://grantwinney.com/nunit-constraint-model/</link><pubDate>Mon, 26 Jun 2023 10:45:44 +0000</pubDate><guid>https://grantwinney.com/nunit-constraint-model/</guid><description>I recently discovered the constraint model in NUnit. It&amp;rsquo;s been there for years, hiding in plain sight! What is it? Is it worth using? Let&amp;rsquo;s check it out.</description><media:content xmlns:media="http://search.yahoo.com/mrss/" url="https://grantwinney.com/nunit-constraint-model/feature.webp"/></item><item><title>Adding deconstructors to C# types</title><link>https://grantwinney.com/csharp-deconstructors/</link><pubDate>Thu, 15 Jun 2023 22:12:31 +0000</pubDate><guid>https://grantwinney.com/csharp-deconstructors/</guid><description>We can deconstruct tuples in C#, but does it work with other types? And assuming it does (spoiler - it does), is it worth bothering with?</description><media:content xmlns:media="http://search.yahoo.com/mrss/" url="https://grantwinney.com/csharp-deconstructors/feature.webp"/></item><item><title>Generic Math Support in C# 11</title><link>https://grantwinney.com/csharp-generic-math-support/</link><pubDate>Wed, 05 Apr 2023 03:50:14 +0000</pubDate><guid>https://grantwinney.com/csharp-generic-math-support/</guid><description>What is Generic Math support in C# 11, and how do we take advantage of it? Let&amp;rsquo;s dig in and find out! (part 3 of 3)</description><media:content xmlns:media="http://search.yahoo.com/mrss/" url="https://grantwinney.com/csharp-generic-math-support/feature.webp"/></item><item><title>Overloading arithmetic, equality, and comparison operators in C#</title><link>https://grantwinney.com/csharp-overload-arithmetic-equality-comparison-operators/</link><pubDate>Sat, 01 Apr 2023 03:54:20 +0000</pubDate><guid>https://grantwinney.com/csharp-overload-arithmetic-equality-comparison-operators/</guid><description>What&amp;rsquo;s it mean to overload operators in C#? And what&amp;rsquo;s that have to do with Generic Math in C# 11? Let&amp;rsquo;s find out! (part 2 of 3)</description><media:content xmlns:media="http://search.yahoo.com/mrss/" url="https://grantwinney.com/csharp-overload-arithmetic-equality-comparison-operators/feature.webp"/></item><item><title>What is a static abstract interface method in C#?</title><link>https://grantwinney.com/whats-a-static-abstract-interface-method-in-c/</link><pubDate>Fri, 31 Mar 2023 03:59:47 +0000</pubDate><guid>https://grantwinney.com/whats-a-static-abstract-interface-method-in-c/</guid><description>What are static abstract members (new in C# 11), what can we do with them, and how are they related to Generic Math? (part 1 of 3)</description><media:content xmlns:media="http://search.yahoo.com/mrss/" url="https://grantwinney.com/whats-a-static-abstract-interface-method-in-c/feature.webp"/></item><item><title>What is the point of points?</title><link>https://grantwinney.com/whats-the-point-of-points/</link><pubDate>Wed, 22 Mar 2023 10:32:44 +0000</pubDate><guid>https://grantwinney.com/whats-the-point-of-points/</guid><description>Points aren&amp;rsquo;t hours, but they sorta represent hours. Or do they? 🤔 If you&amp;rsquo;re as perplexed as I used to be, here&amp;rsquo;s a few thoughts about points.</description><media:content xmlns:media="http://search.yahoo.com/mrss/" url="https://grantwinney.com/whats-the-point-of-points/feature.webp"/></item><item><title>Why doesn't VS 2022 show my WinForms UI at design time?</title><link>https://grantwinney.com/why-doesnt-vs2022-show-my-winforms-ui/</link><pubDate>Sat, 14 Jan 2023 20:36:55 +0000</pubDate><guid>https://grantwinney.com/why-doesnt-vs2022-show-my-winforms-ui/</guid><description>Someone at work asked about whether we&amp;rsquo;d be able to use VS 2022 to work on our main WinForms app. It works just fine in VS 2019, so it should work in VS 2022, right? Except it doesn&amp;rsquo;t. What we get is white screens of brokenness whenever we try to open a Form in the designer. But why?</description><media:content xmlns:media="http://search.yahoo.com/mrss/" url="https://grantwinney.com/why-doesnt-vs2022-show-my-winforms-ui/feature.webp"/></item><item><title>Using Tuples and deconstruction to return multiple values in C#</title><link>https://grantwinney.com/using-tuple-and-deconstruction-to-return-multiple-values/</link><pubDate>Thu, 05 Jan 2023 00:38:03 +0000</pubDate><guid>https://grantwinney.com/using-tuple-and-deconstruction-to-return-multiple-values/</guid><description>A big challenge with any language is trying to group and organize things sensibly, and returning multiple values is no exception. Let&amp;rsquo;s check out Tuples and deconstruction, and see how they can help us out.</description><media:content xmlns:media="http://search.yahoo.com/mrss/" url="https://grantwinney.com/using-tuple-and-deconstruction-to-return-multiple-values/feature.webp"/></item><item><title>Why do I need to install an extension just to copy/paste?</title><link>https://grantwinney.com/why-do-i-need-to-install-an-extension-just-to-copy-paste/</link><pubDate>Sat, 31 Dec 2022 17:18:11 +0000</pubDate><guid>https://grantwinney.com/why-do-i-need-to-install-an-extension-just-to-copy-paste/</guid><description>I was creating a document in Office365 the other day, and when I tried to paste with their custom right-click menu I got a popup telling me to download a browser addon. Well, that&amp;rsquo;s weird.</description><media:content xmlns:media="http://search.yahoo.com/mrss/" url="https://grantwinney.com/why-do-i-need-to-install-an-extension-just-to-copy-paste/feature.webp"/></item><item><title>Converting a BackgroundWorker to a Task with TaskCompletionSource</title><link>https://grantwinney.com/convert-backgroundworker-to-task-with-taskcompletionsource/</link><pubDate>Tue, 06 Dec 2022 00:20:13 +0000</pubDate><guid>https://grantwinney.com/convert-backgroundworker-to-task-with-taskcompletionsource/</guid><description>Sometimes the safer way to &amp;ldquo;update&amp;rdquo; old code is to leave it be and paint over it with a newer construct. Let&amp;rsquo;s see how to modernize a BackgroundWorker using Tasks and TaskCompletionSource.</description><media:content xmlns:media="http://search.yahoo.com/mrss/" url="https://grantwinney.com/convert-backgroundworker-to-task-with-taskcompletionsource/feature.webp"/></item><item><title>My experience migrating to MV3</title><link>https://grantwinney.com/my-experience-migrating-to-mv3/</link><pubDate>Sat, 19 Nov 2022 22:09:03 +0000</pubDate><guid>https://grantwinney.com/my-experience-migrating-to-mv3/</guid><description>I migrated my addons to MV3, and learned that version numbers increase, DRY is overrated, and 3 and 15 are probably important but I have no idea why. What I didn&amp;rsquo;t learn is how MV3 made my addon better.</description><media:content xmlns:media="http://search.yahoo.com/mrss/" url="https://grantwinney.com/my-experience-migrating-to-mv3/feature.webp"/></item><item><title>Named arguments in C#</title><link>https://grantwinney.com/csharp-named-arguments/</link><pubDate>Wed, 12 Oct 2022 22:09:47 +0000</pubDate><guid>https://grantwinney.com/csharp-named-arguments/</guid><description>Named arguments in C#.. they&amp;rsquo;ve been around a long time, but does anyone use them? Let&amp;rsquo;s check out another feature that helps tame wild code.</description><media:content xmlns:media="http://search.yahoo.com/mrss/" url="https://grantwinney.com/csharp-named-arguments/feature.webp"/></item><item><title>Local functions in C# (aka nested methods)</title><link>https://grantwinney.com/local-functions-in-csharp-aka-nested-methods/</link><pubDate>Sat, 08 Oct 2022 18:40:48 +0000</pubDate><guid>https://grantwinney.com/local-functions-in-csharp-aka-nested-methods/</guid><description>C# 7 introduced a new tool for the belt - local functions. Let&amp;rsquo;s take a look at what they are, how to use them, and why we might not want to.</description><media:content xmlns:media="http://search.yahoo.com/mrss/" url="https://grantwinney.com/local-functions-in-csharp-aka-nested-methods/feature.webp"/></item><item><title>Checking for null in C#, using the null conditional and null coalescing operators</title><link>https://grantwinney.com/null-conditional-and-null-coalescing-operators/</link><pubDate>Tue, 27 Sep 2022 01:13:39 +0000</pubDate><guid>https://grantwinney.com/null-conditional-and-null-coalescing-operators/</guid><description>Checking for nulls in C# is tedious, but C# 6 gave us the null-conditional operator. Let&amp;rsquo;s see what we can do with it!</description><media:content xmlns:media="http://search.yahoo.com/mrss/" url="https://grantwinney.com/null-conditional-and-null-coalescing-operators/feature.webp"/></item><item><title>Using string interpolation to craft readable strings in C#</title><link>https://grantwinney.com/using-string-interpolation-to-craft-readable-strings/</link><pubDate>Mon, 19 Sep 2022 10:30:18 +0000</pubDate><guid>https://grantwinney.com/using-string-interpolation-to-craft-readable-strings/</guid><description>The longer I write software, the more I come to appreciate clear code. String interpolation in C# is just one more way to help us do that.</description><media:content xmlns:media="http://search.yahoo.com/mrss/" url="https://grantwinney.com/using-string-interpolation-to-craft-readable-strings/feature.webp"/></item><item><title>6 space-related APIs to check out ahead of the Artemis I launch</title><link>https://grantwinney.com/6-space-related-apis-to-check-out-ahead-of-the-artemis-i-launch/</link><pubDate>Sun, 28 Aug 2022 18:23:48 +0000</pubDate><guid>https://grantwinney.com/6-space-related-apis-to-check-out-ahead-of-the-artemis-i-launch/</guid><description>The week of NASA launching Artemis I is a good time to check a few of the many APIs that make tons of raw space data accessible for anyone to use.</description><media:content xmlns:media="http://search.yahoo.com/mrss/" url="https://grantwinney.com/6-space-related-apis-to-check-out-ahead-of-the-artemis-i-launch/feature.webp"/></item><item><title>Displaying an IIS hosted site in CEFSharp</title><link>https://grantwinney.com/displaying-an-iis-hosted-site-in-cefsharp/</link><pubDate>Tue, 16 Aug 2022 03:56:47 +0000</pubDate><guid>https://grantwinney.com/displaying-an-iis-hosted-site-in-cefsharp/</guid><description>Thanks to CEFSharp, we can finally bring WinForms to the web! That didn&amp;rsquo;t sound right. Okay, let&amp;rsquo;s just look at hosting a site in IIS and showing it.</description><media:content xmlns:media="http://search.yahoo.com/mrss/" url="https://grantwinney.com/displaying-an-iis-hosted-site-in-cefsharp/feature.webp"/></item><item><title>Enjoying the wins, accepting the losses</title><link>https://grantwinney.com/enjoying-the-wins-accepting-the-losses/</link><pubDate>Tue, 09 Aug 2022 13:07:49 +0000</pubDate><guid>https://grantwinney.com/enjoying-the-wins-accepting-the-losses/</guid><description>When our code isn&amp;rsquo;t clicking, negativity can quickly overshadow all the positive. That&amp;rsquo;s when we need to remember our victories!</description><media:content xmlns:media="http://search.yahoo.com/mrss/" url="https://grantwinney.com/enjoying-the-wins-accepting-the-losses/feature.webp"/></item><item><title>Host a simple webpage in WinForms with CefSharp</title><link>https://grantwinney.com/hosting-a-simple-webpage-in-winforms-with-cefsharp/</link><pubDate>Tue, 28 Jun 2022 23:07:09 +0000</pubDate><guid>https://grantwinney.com/hosting-a-simple-webpage-in-winforms-with-cefsharp/</guid><description>WinForms and the web. Like oil and water, they don&amp;rsquo;t mix well. But with CEFSharp, they mix a LOT better. Let&amp;rsquo;s check it out.</description><media:content xmlns:media="http://search.yahoo.com/mrss/" url="https://grantwinney.com/hosting-a-simple-webpage-in-winforms-with-cefsharp/feature.webp"/></item><item><title>What is Manifest V3 and why is Google pestering me about it?</title><link>https://grantwinney.com/what-is-manifest-v3-and-why-is-google-pestering-me/</link><pubDate>Mon, 06 Jun 2022 11:30:43 +0000</pubDate><guid>https://grantwinney.com/what-is-manifest-v3-and-why-is-google-pestering-me/</guid><description/><media:content xmlns:media="http://search.yahoo.com/mrss/" url="https://grantwinney.com/what-is-manifest-v3-and-why-is-google-pestering-me/feature.webp"/></item><item><title>Beware the bite of the refactor bug</title><link>https://grantwinney.com/beware-the-refactor-bug/</link><pubDate>Sat, 22 Jan 2022 22:45:01 +0000</pubDate><guid>https://grantwinney.com/beware-the-refactor-bug/</guid><description>Refactoring code is part of the dev life, and can even help keep the code healthy, but going too far can do more harm than good. Ever after a decade of writing code, I still have to remind myself from time to time!</description><media:content xmlns:media="http://search.yahoo.com/mrss/" url="https://grantwinney.com/beware-the-refactor-bug/feature.webp"/></item><item><title>Mocking MessageBox (or any static class) in WinForms</title><link>https://grantwinney.com/mocking-messagebox-in-winforms/</link><pubDate>Fri, 07 Jan 2022 04:12:17 +0000</pubDate><guid>https://grantwinney.com/mocking-messagebox-in-winforms/</guid><description>Unit testing a WinForms app is an uphill battle in the best of times, before you add in classes like MessageBox. Let&amp;rsquo;s make the best of it.</description><media:content xmlns:media="http://search.yahoo.com/mrss/" url="https://grantwinney.com/mocking-messagebox-in-winforms/feature.webp"/></item><item><title>Using nameof to avoid magic strings in C#</title><link>https://grantwinney.com/using-nameof-to-avoid-magic-strings/</link><pubDate>Thu, 30 Dec 2021 01:53:29 +0000</pubDate><guid>https://grantwinney.com/using-nameof-to-avoid-magic-strings/</guid><description>There&amp;rsquo;s a lot of ways to make our code work for us. Let&amp;rsquo;s check out using the nameof operator to avoid magic strings.</description><media:content xmlns:media="http://search.yahoo.com/mrss/" url="https://grantwinney.com/using-nameof-to-avoid-magic-strings/feature.webp"/></item><item><title>Sunk costs, timeboxing, and asking for help</title><link>https://grantwinney.com/sunk-costs-timeboxing-asking-for-help/</link><pubDate>Mon, 20 Dec 2021 12:00:00 +0000</pubDate><guid>https://grantwinney.com/sunk-costs-timeboxing-asking-for-help/</guid><description>One of the biggest struggles I have with programming is knowing when to ask for help. A little struggle is necessary for growth, but when am I just wasting time when I could be learning from others?</description><media:content xmlns:media="http://search.yahoo.com/mrss/" url="https://grantwinney.com/sunk-costs-timeboxing-asking-for-help/feature.webp"/></item><item><title>A more helpful exception box for WinForms apps</title><link>https://grantwinney.com/the-helpful-exception-box/</link><pubDate>Tue, 07 Dec 2021 15:37:03 +0000</pubDate><guid>https://grantwinney.com/the-helpful-exception-box/</guid><description>If you&amp;rsquo;re in a legacy codebase with a centralized &amp;ldquo;message box&amp;rdquo; form, why not add some features that make it work for you? 😏</description><media:content xmlns:media="http://search.yahoo.com/mrss/" url="https://grantwinney.com/the-helpful-exception-box/feature.webp"/></item><item><title>Every software dev is a contractor</title><link>https://grantwinney.com/were-all-contractors/</link><pubDate>Tue, 19 Oct 2021 03:37:36 +0000</pubDate><guid>https://grantwinney.com/were-all-contractors/</guid><description>Seeing my full-time job as a long-term contract has helped me improve and contribute, without taking things personally or falling into complacency.</description><media:content xmlns:media="http://search.yahoo.com/mrss/" url="https://grantwinney.com/were-all-contractors/feature.webp"/></item><item><title>How to log errors in WinForms using NLog</title><link>https://grantwinney.com/log-errors-in-winforms-with-nlog/</link><pubDate>Sat, 09 Oct 2021 15:53:15 +0000</pubDate><guid>https://grantwinney.com/log-errors-in-winforms-with-nlog/</guid><description>Logs are a great tool for squashing bugs and tracing errors. Let&amp;rsquo;s see how to add NLog to our project.</description><media:content xmlns:media="http://search.yahoo.com/mrss/" url="https://grantwinney.com/log-errors-in-winforms-with-nlog/feature.webp"/></item><item><title>Move a subdirectory into its own Git repo, with history</title><link>https://grantwinney.com/how-to-move-a-subdirectory-of-one-repo-into-its-own-repository/</link><pubDate>Fri, 30 Jul 2021 03:38:23 +0000</pubDate><guid>https://grantwinney.com/how-to-move-a-subdirectory-of-one-repo-into-its-own-repository/</guid><description>Need to pull a subdirectory out of repo A and create a new repo B out with it? Including full history and branches? Okay, here&amp;rsquo;s how.</description><media:content xmlns:media="http://search.yahoo.com/mrss/" url="https://grantwinney.com/how-to-move-a-subdirectory-of-one-repo-into-its-own-repository/feature.webp"/></item><item><title>Can I write my own HTML tags?</title><link>https://grantwinney.com/can-i-write-my-own-html-tags/</link><pubDate>Thu, 15 Jul 2021 21:46:32 +0000</pubDate><guid>https://grantwinney.com/can-i-write-my-own-html-tags/</guid><description>Can you create your own HTML tags? The answer is&amp;hellip;.. sorta. Yes and no. Not completely, but a little. Typical, I know.</description><media:content xmlns:media="http://search.yahoo.com/mrss/" url="https://grantwinney.com/can-i-write-my-own-html-tags/feature.webp"/></item><item><title>Avoiding tribal knowledge in the programming world</title><link>https://grantwinney.com/avoiding-tribal-knowledge-in-programming/</link><pubDate>Mon, 05 Jul 2021 19:20:06 +0000</pubDate><guid>https://grantwinney.com/avoiding-tribal-knowledge-in-programming/</guid><description>When I was less skilled as a developer, it was enough to just stay afloat, learning what I needed for the current day or project. As my skill and confidence grows, I&amp;rsquo;ve come to appreciate the extra things in life - like a decent set of docs.</description><media:content xmlns:media="http://search.yahoo.com/mrss/" url="https://grantwinney.com/avoiding-tribal-knowledge-in-programming/feature.webp"/></item><item><title>Using MVP to test a WinForms app</title><link>https://grantwinney.com/its-possible-to-test-a-winforms-app-using-mvp/</link><pubDate>Wed, 09 Jun 2021 02:12:00 +0000</pubDate><guid>https://grantwinney.com/its-possible-to-test-a-winforms-app-using-mvp/</guid><description>If you find yourself supporting a WinForms application, you&amp;rsquo;re likely to notice the tests&amp;hellip; or lack thereof. Just because we may not have been so focused on automated tests and continuous integration when WinForms was younger, that doesn&amp;rsquo;t mean we can&amp;rsquo;t introduce them now. Better late than never!</description><media:content xmlns:media="http://search.yahoo.com/mrss/" url="https://grantwinney.com/its-possible-to-test-a-winforms-app-using-mvp/feature.webp"/></item><item><title>Using Async, Await, and Task to keep the WinForms UI responsive</title><link>https://grantwinney.com/using-async-await-and-task-to-keep-the-winforms-ui-more-responsive/</link><pubDate>Mon, 07 Jun 2021 12:56:43 +0000</pubDate><guid>https://grantwinney.com/using-async-await-and-task-to-keep-the-winforms-ui-more-responsive/</guid><description>Using the async/await pattern in WinForms is an easy win, helping prevent one of the most annoying user experiences - a frozen UI.</description><media:content xmlns:media="http://search.yahoo.com/mrss/" url="https://grantwinney.com/using-async-await-and-task-to-keep-the-winforms-ui-more-responsive/feature.webp"/></item><item><title>What is DotNet Try?</title><link>https://grantwinney.com/what-is-dotnet-try/</link><pubDate>Sat, 29 May 2021 21:40:16 +0000</pubDate><guid>https://grantwinney.com/what-is-dotnet-try/</guid><description>Do you prefer reading or doing? How about both? DotNet Try pulls in C# code from your project and turns your docs into an interactive experience.</description><media:content xmlns:media="http://search.yahoo.com/mrss/" url="https://grantwinney.com/what-is-dotnet-try/feature.webp"/></item><item><title>Be ready to explain your code</title><link>https://grantwinney.com/be-ready-to-explain-your-code/</link><pubDate>Wed, 03 Feb 2021 13:28:48 +0000</pubDate><guid>https://grantwinney.com/be-ready-to-explain-your-code/</guid><description>Does the mere thought of explaining your code cause anxiety? Be confident! We should all understand what we&amp;rsquo;re writing and why. It&amp;rsquo;s an opportunity (for everyone) to learn!</description><media:content xmlns:media="http://search.yahoo.com/mrss/" url="https://grantwinney.com/be-ready-to-explain-your-code/feature.webp"/></item><item><title>Scratch that itch for coding!</title><link>https://grantwinney.com/scratch-that-itch-for-coding/</link><pubDate>Tue, 19 Jan 2021 04:28:00 +0000</pubDate><guid>https://grantwinney.com/scratch-that-itch-for-coding/</guid><description>Learning a little about programming could benefit anyone. If you want a fun intro to coding and logical thinking, check out Scratch!</description><media:content xmlns:media="http://search.yahoo.com/mrss/" url="https://grantwinney.com/scratch-that-itch-for-coding/feature.webp"/></item><item><title>What is mocking a dependency?</title><link>https://grantwinney.com/what-is-mocking-a-dependency/</link><pubDate>Wed, 09 Dec 2020 13:19:00 +0000</pubDate><guid>https://grantwinney.com/what-is-mocking-a-dependency/</guid><description>When you&amp;rsquo;re writing tests, you generally don&amp;rsquo;t want to write to the database, email customers, and hit third-party API&amp;rsquo;s. That&amp;rsquo;s why we need to know how to mock dependencies!</description><media:content xmlns:media="http://search.yahoo.com/mrss/" url="https://grantwinney.com/what-is-mocking-a-dependency/feature.webp"/></item><item><title>What is a code review / pull request?</title><link>https://grantwinney.com/what-is-a-code-review/</link><pubDate>Sat, 28 Nov 2020 04:15:10 +0000</pubDate><guid>https://grantwinney.com/what-is-a-code-review/</guid><description>Does the idea of submitting to a code review make you sweat bullets? Or do you brush it off as a necessary evil? It should be a (hopefully positive) conversation, wherein the team agrees to the code they&amp;rsquo;re all going to have to help maintain, and maybe learns something new too.</description><media:content xmlns:media="http://search.yahoo.com/mrss/" url="https://grantwinney.com/what-is-a-code-review/feature.webp"/></item><item><title>The transient nature of code</title><link>https://grantwinney.com/the-transient-nature-of-code/</link><pubDate>Sun, 11 Oct 2020 03:00:46 +0000</pubDate><guid>https://grantwinney.com/the-transient-nature-of-code/</guid><description>I just deleted my coworkers code. 😱 It was good code that wasn&amp;rsquo;t needed anymore, and he understood why. The nature of coding is that it&amp;rsquo;s a progression, and any individual code is transient by nature. Today&amp;rsquo;s code is subject to tomorrow&amp;rsquo;s refactoring.</description><media:content xmlns:media="http://search.yahoo.com/mrss/" url="https://grantwinney.com/the-transient-nature-of-code/feature.webp"/></item><item><title>The right way to rethrow an exception in C#</title><link>https://grantwinney.com/rethrowing-an-exception-in-csharp/</link><pubDate>Thu, 17 Sep 2020 04:08:32 +0000</pubDate><guid>https://grantwinney.com/rethrowing-an-exception-in-csharp/</guid><description>All programming languages have gotchas to trip you up, and C# is no exception. Today, let&amp;rsquo;s check out the subtle (but significant) difference between &amp;ldquo;throw&amp;rdquo; and &amp;ldquo;throw ex&amp;rdquo;.</description><media:content xmlns:media="http://search.yahoo.com/mrss/" url="https://grantwinney.com/rethrowing-an-exception-in-csharp/feature.webp"/></item><item><title>How will I know when I'm a programmer?</title><link>https://grantwinney.com/how-do-you-know-when-youre-a-programmer/</link><pubDate>Tue, 15 Sep 2020 03:52:08 +0000</pubDate><guid>https://grantwinney.com/how-do-you-know-when-youre-a-programmer/</guid><description>How do you know when you&amp;rsquo;ve finally arrived, and are officially a programmer? Is it a set of skills, a certain amount of time? Can you ever really arrive, when it&amp;rsquo;s a race of one with no finish line?</description><media:content xmlns:media="http://search.yahoo.com/mrss/" url="https://grantwinney.com/how-do-you-know-when-youre-a-programmer/feature.webp"/></item><item><title>A 30th anniversary Zelda tribute, in Node.js</title><link>https://grantwinney.com/30th-anniversary-zelda-tribute/</link><pubDate>Wed, 09 Sep 2020 16:28:52 +0000</pubDate><guid>https://grantwinney.com/30th-anniversary-zelda-tribute/</guid><description>A few years ago, on the 30th anniversary of the Legend of Zelda, Scott Lininger and Mike Magee open sourced a 3D version of the original LoZ. The site was taken down, but the code&amp;rsquo;s still available to run!</description><media:content xmlns:media="http://search.yahoo.com/mrss/" url="https://grantwinney.com/30th-anniversary-zelda-tribute/feature.webp"/></item><item><title>How do I learn to program?</title><link>https://grantwinney.com/dev101/</link><pubDate>Sat, 04 Jul 2020 17:43:45 +0000</pubDate><guid>https://grantwinney.com/dev101/</guid><description>Saying somone can&amp;rsquo;t learn to tell a computer what to do and how to do it, or learn any other skill for that matter, is selling them (or yourself) short. It&amp;rsquo;s about the right tools, a desire to learn, and setting aside the time to make it happen.</description></item><item><title>Creating a basic Word Cloud in Python</title><link>https://grantwinney.com/how-to-make-a-word-cloud-in-python/</link><pubDate>Thu, 04 Jun 2020 21:43:00 +0000</pubDate><guid>https://grantwinney.com/how-to-make-a-word-cloud-in-python/</guid><description>We&amp;rsquo;ve all seen word clouds, like in the sidebars of blogs, but let&amp;rsquo;s see how we might create our own with a little bit of code!</description><media:content xmlns:media="http://search.yahoo.com/mrss/" url="https://grantwinney.com/how-to-make-a-word-cloud-in-python/feature.webp"/></item><item><title>Where should I store application data in Windows?</title><link>https://grantwinney.com/where-should-i-store-app-data-in-windows/</link><pubDate>Fri, 22 May 2020 03:59:32 +0000</pubDate><guid>https://grantwinney.com/where-should-i-store-app-data-in-windows/</guid><description>Windows sets certain locations aside for apps, and makes them easily discoverable for devs to use. Let&amp;rsquo;s see how.</description><media:content xmlns:media="http://search.yahoo.com/mrss/" url="https://grantwinney.com/where-should-i-store-app-data-in-windows/feature.webp"/></item><item><title>What is the Law of Demeter?</title><link>https://grantwinney.com/the-law-of-demeter-a-practical-example/</link><pubDate>Sat, 02 May 2020 03:59:22 +0000</pubDate><guid>https://grantwinney.com/the-law-of-demeter-a-practical-example/</guid><description/><media:content xmlns:media="http://search.yahoo.com/mrss/" url="https://grantwinney.com/the-law-of-demeter-a-practical-example/feature.webp"/></item><item><title>13 addons to power up your GitHub game</title><link>https://grantwinney.com/13-addons-that-power-up-your-github-game/</link><pubDate>Sat, 04 Apr 2020 19:01:02 +0000</pubDate><guid>https://grantwinney.com/13-addons-that-power-up-your-github-game/</guid><description>GitHub is an amazing set of tools around Git, but it&amp;rsquo;s lacking in certain areas. Where it fails to impress, browser addons often pick up the slack. Here&amp;rsquo;s 13 addons (plus a few honorable mentions) that will take your GitHub experience to the next level!</description><media:content xmlns:media="http://search.yahoo.com/mrss/" url="https://grantwinney.com/13-addons-that-power-up-your-github-game/feature.webp"/></item><item><title>How to find the iCal address for a public Google calendar</title><link>https://grantwinney.com/how-to-find-the-ical-address-for-a-public-google-calendar/</link><pubDate>Fri, 28 Feb 2020 03:42:32 +0000</pubDate><guid>https://grantwinney.com/how-to-find-the-ical-address-for-a-public-google-calendar/</guid><description>Every Google calendar URL has an iCal file you can use&amp;hellip; here&amp;rsquo;s how to find it.</description><media:content xmlns:media="http://search.yahoo.com/mrss/" url="https://grantwinney.com/how-to-find-the-ical-address-for-a-public-google-calendar/feature.webp"/></item><item><title>How to make a dark mode with CSS</title><link>https://grantwinney.com/how-to-make-a-dark-mode-with-css/</link><pubDate>Thu, 13 Feb 2020 23:50:42 +0000</pubDate><guid>https://grantwinney.com/how-to-make-a-dark-mode-with-css/</guid><description>Every time I learn some new piece of CSS I&amp;rsquo;m amazed at how flexible and powerful it is. Like how easy it is to tailor your site for your visitor&amp;rsquo;s &amp;ldquo;dark mode&amp;rdquo; preference!</description><media:content xmlns:media="http://search.yahoo.com/mrss/" url="https://grantwinney.com/how-to-make-a-dark-mode-with-css/feature.webp"/></item><item><title>Readme</title><link>https://grantwinney.com/read-me/</link><pubDate>Wed, 12 Feb 2020 18:10:41 +0000</pubDate><guid>https://grantwinney.com/read-me/</guid><description/></item><item><title>Deploy your own RequestBin in under 5 minutes</title><link>https://grantwinney.com/requestbin-deploy-in-5-minutes/</link><pubDate>Sun, 05 Jan 2020 12:39:14 +0000</pubDate><guid>https://grantwinney.com/requestbin-deploy-in-5-minutes/</guid><description>If you need to consume a webhook from another service, or verify the payload being sent from your own REST API endpoint, RequestBin can help. It intercepts and displays the contents of any call made to it. Here&amp;rsquo;s how to deploy your own instance in just a few minutes.</description><media:content xmlns:media="http://search.yahoo.com/mrss/" url="https://grantwinney.com/requestbin-deploy-in-5-minutes/feature.webp"/></item><item><title>Why are websites requesting access to motion sensors... on my desktop?</title><link>https://grantwinney.com/websites-requesting-access-to-motion-sensors/</link><pubDate>Mon, 30 Dec 2019 17:49:59 +0000</pubDate><guid>https://grantwinney.com/websites-requesting-access-to-motion-sensors/</guid><description>I was checking the status of a FedEx order when Brave warned me that &amp;ldquo;this site has been blocked from accessing your motion sensors&amp;rdquo;. I&amp;rsquo;m struggling to understand why a website would need that access. Do I get a different experience if I drop my device? Tip my monitor over? Spin the mouse around?</description><media:content xmlns:media="http://search.yahoo.com/mrss/" url="https://grantwinney.com/websites-requesting-access-to-motion-sensors/feature.webp"/></item><item><title>Hands-on Ansible, using two DigitalOcean Ubuntu droplets</title><link>https://grantwinney.com/hands-on-ansible-using-digitalocean-ubuntu-droplets/</link><pubDate>Wed, 18 Dec 2019 22:21:00 +0000</pubDate><guid>https://grantwinney.com/hands-on-ansible-using-digitalocean-ubuntu-droplets/</guid><description>Today I&amp;rsquo;m wrapping my head around a build tool called Ansible, used for deploying machines in a scriptable, repeatable manner. Follow along as I step through an excellent tutorial from DigitalOcean, applying what I learn to a couple DO Ubuntu VMs&amp;hellip; the $5/mo ones - nothing fancy needed!</description><media:content xmlns:media="http://search.yahoo.com/mrss/" url="https://grantwinney.com/hands-on-ansible-using-digitalocean-ubuntu-droplets/feature.webp"/></item><item><title>Replacing Gmail (and its office suite) with Mailbox.org</title><link>https://grantwinney.com/replacing-gmail-with-mailbox-org/</link><pubDate>Mon, 09 Dec 2019 23:44:00 +0000</pubDate><guid>https://grantwinney.com/replacing-gmail-with-mailbox-org/</guid><description>Google provides some amazing tools, but at what cost to privacy? One of the biggest blockers in eliminating them has been finding a reliable and affordable replacement for email (and ideally, calendar, documents, tasks, etc too). Well I may have finally found it, in Mailbox.org.</description><media:content xmlns:media="http://search.yahoo.com/mrss/" url="https://grantwinney.com/replacing-gmail-with-mailbox-org/feature.webp"/></item><item><title>Add and subtract time from a DateTime structure in Erlang</title><link>https://grantwinney.com/how-do-i-add-seconds-minutes-or-hours-to-a-datetime-structure-in-erlang/</link><pubDate>Sun, 01 Dec 2019 01:51:59 +0000</pubDate><guid>https://grantwinney.com/how-do-i-add-seconds-minutes-or-hours-to-a-datetime-structure-in-erlang/</guid><description>I was trying to add times in Erlang, but couldn&amp;rsquo;t find an existing function, so I wrote my own.</description><media:content xmlns:media="http://search.yahoo.com/mrss/" url="https://grantwinney.com/how-do-i-add-seconds-minutes-or-hours-to-a-datetime-structure-in-erlang/feature.webp"/></item><item><title>Only assignment, call, increment, decrement, await, and new object expressions can be used as a statement</title><link>https://grantwinney.com/only-assignment-call-increment-decrement-await-and-new-object-expressions-can-be-used-as-a-statement/</link><pubDate>Thu, 14 Nov 2019 17:25:00 +0000</pubDate><guid>https://grantwinney.com/only-assignment-call-increment-decrement-await-and-new-object-expressions-can-be-used-as-a-statement/</guid><description>This error might look a little cryptic at first glance, but it&amp;rsquo;s fairly descriptive in explaining what&amp;rsquo;s wrong. You&amp;rsquo;re likely to come across this one before your first cup of coffee.</description><media:content xmlns:media="http://search.yahoo.com/mrss/" url="https://grantwinney.com/only-assignment-call-increment-decrement-await-and-new-object-expressions-can-be-used-as-a-statement/feature.webp"/></item><item><title>Assign C# code to a variable and then run it</title><link>https://grantwinney.com/csharp-assign-code-to-a-variable/</link><pubDate>Wed, 13 Nov 2019 17:45:00 +0000</pubDate><guid>https://grantwinney.com/csharp-assign-code-to-a-variable/</guid><description>Did you know most languages have a way to pass around code to other functions, so you can call (invoke) it in other parts of your application? In C#, it&amp;rsquo;s called a delegate.</description><media:content xmlns:media="http://search.yahoo.com/mrss/" url="https://grantwinney.com/csharp-assign-code-to-a-variable/feature.webp"/></item><item><title>How can I find the state of NumLock, CapsLock or ScrollLock in WPF?</title><link>https://grantwinney.com/how-can-i-find-the-state-of-numlock-capslock-scrolllock-in-wpf/</link><pubDate>Tue, 12 Nov 2019 00:30:00 +0000</pubDate><guid>https://grantwinney.com/how-can-i-find-the-state-of-numlock-capslock-scrolllock-in-wpf/</guid><description>If you&amp;rsquo;re writing a WPF application and need to find the state of the Num Lock, Caps Lock, or Scroll Lock keys, you&amp;rsquo;re in luck - there&amp;rsquo;s a method for that.</description><media:content xmlns:media="http://search.yahoo.com/mrss/" url="https://grantwinney.com/how-can-i-find-the-state-of-numlock-capslock-scrolllock-in-wpf/feature.webp"/></item><item><title>What is the opposite of Any in LINQ?</title><link>https://grantwinney.com/what-is-the-opposite-method-of-any-t-in-linq/</link><pubDate>Mon, 11 Nov 2019 23:36:00 +0000</pubDate><guid>https://grantwinney.com/what-is-the-opposite-method-of-any-t-in-linq/</guid><description>One of the many nice functions in LINQ is a single word that iterates through a collection, returning true if at least one item in the collection matches the condition you specify. But what&amp;rsquo;s the opposite of the Any keyword in LINQ?</description><media:content xmlns:media="http://search.yahoo.com/mrss/" url="https://grantwinney.com/what-is-the-opposite-method-of-any-t-in-linq/feature.webp"/></item><item><title>Enable logging for an AWS Lambda job</title><link>https://grantwinney.com/where-are-my-logs-in-aws-lambda/</link><pubDate>Thu, 07 Nov 2019 18:04:08 +0000</pubDate><guid>https://grantwinney.com/where-are-my-logs-in-aws-lambda/</guid><description>In a new AWS Lambda function, logging is initially disabled. Lets see how to enable it, for those times where additional detail is needed.</description><media:content xmlns:media="http://search.yahoo.com/mrss/" url="https://grantwinney.com/where-are-my-logs-in-aws-lambda/feature.webp"/></item><item><title>What's the GitHub Package Registry?</title><link>https://grantwinney.com/first-look-github-package-registry-beta/</link><pubDate>Sun, 06 Oct 2019 03:55:19 +0000</pubDate><guid>https://grantwinney.com/first-look-github-package-registry-beta/</guid><description>Most of us host something (and some of us everything) on GitHub, especially since they host private repos for free too now. I&amp;rsquo;ve been eager to try the GitHub Package Registry since they announced it last May. Well, I just got access to the beta, so let&amp;rsquo;s see what we can do!</description><media:content xmlns:media="http://search.yahoo.com/mrss/" url="https://grantwinney.com/first-look-github-package-registry-beta/feature.webp"/></item><item><title>What's a package manager?</title><link>https://grantwinney.com/whats-a-package-manager/</link><pubDate>Thu, 03 Oct 2019 17:09:27 +0000</pubDate><guid>https://grantwinney.com/whats-a-package-manager/</guid><description>If you&amp;rsquo;ve heard the term package manager, especially with GitHub announcing their own, you might be wondering what exactly it is. Well, it&amp;rsquo;s a way to find, reuse, and share code, among other things.</description><media:content xmlns:media="http://search.yahoo.com/mrss/" url="https://grantwinney.com/whats-a-package-manager/feature.webp"/></item><item><title>Using the GraphiQL IDE to access a GraphQL API</title><link>https://grantwinney.com/using-graphiql-to-access-a-graphql-api/</link><pubDate>Thu, 26 Sep 2019 03:38:30 +0000</pubDate><guid>https://grantwinney.com/using-graphiql-to-access-a-graphql-api/</guid><description>GraphQL is bundled with GraphiQL, which lets us run queries right in the browser! Let&amp;rsquo;s see how GitHub uses it and try kicking the tires.</description><media:content xmlns:media="http://search.yahoo.com/mrss/" url="https://grantwinney.com/using-graphiql-to-access-a-graphql-api/feature.webp"/></item><item><title>What is GraphQL and how does it differ from REST?</title><link>https://grantwinney.com/what-is-graphql-and-how-does-it-differ-from-rest/</link><pubDate>Sat, 21 Sep 2019 02:48:40 +0000</pubDate><guid>https://grantwinney.com/what-is-graphql-and-how-does-it-differ-from-rest/</guid><description>GraphQL is an alternative for REST, not a replacement. Let&amp;rsquo;s take a brief look at how they differ.</description><media:content xmlns:media="http://search.yahoo.com/mrss/" url="https://grantwinney.com/what-is-graphql-and-how-does-it-differ-from-rest/feature.webp"/></item><item><title>Create a TOTP 2FA code for your app</title><link>https://grantwinney.com/how-to-create-a-2fa-code-for-your-app/</link><pubDate>Tue, 13 Aug 2019 03:54:37 +0000</pubDate><guid>https://grantwinney.com/how-to-create-a-2fa-code-for-your-app/</guid><description>I use 2FA on every site that supports it, but I&amp;rsquo;d never given much thought to how a 2FA code is generated. Let&amp;rsquo;s learn how!</description><media:content xmlns:media="http://search.yahoo.com/mrss/" url="https://grantwinney.com/how-to-create-a-2fa-code-for-your-app/feature.webp"/></item><item><title>Hide Comments Everywhere</title><link>https://grantwinney.com/hide-comments-everywhere/</link><pubDate>Mon, 08 Jul 2019 20:14:34 +0000</pubDate><guid>https://grantwinney.com/hide-comments-everywhere/</guid><description>Hides various commenting systems across the web, including (but not limited to) Disqus, YouTube, various news sites and forums, etc.</description><media:content xmlns:media="http://search.yahoo.com/mrss/" url="https://grantwinney.com/hide-comments-everywhere/feature.webp"/></item><item><title>Generate Links for Headers</title><link>https://grantwinney.com/generate-links-for-headers/</link><pubDate>Mon, 08 Jul 2019 19:16:16 +0000</pubDate><guid>https://grantwinney.com/generate-links-for-headers/</guid><description>Ever wanted to share a link, not just to a webpage, but to a particular section of a webpage? This extension automatically generates links for all headers on the page, to make it easier to share links that jump to a specific section.</description><media:content xmlns:media="http://search.yahoo.com/mrss/" url="https://grantwinney.com/generate-links-for-headers/feature.webp"/></item><item><title>What is minification vs obfuscation?</title><link>https://grantwinney.com/minification-vs-obfuscation/</link><pubDate>Fri, 14 Jun 2019 16:14:00 +0000</pubDate><guid>https://grantwinney.com/minification-vs-obfuscation/</guid><description>Mozilla announced they&amp;rsquo;ll no longer accept extensions with obfuscated code. It&amp;rsquo;s good news for users, maybe not so much for developers. Obfuscated code is (intentionally) nearly impossible to understand, and could easily be malicious. Let&amp;rsquo;s unpack and break down a few concepts.</description><media:content xmlns:media="http://search.yahoo.com/mrss/" url="https://grantwinney.com/minification-vs-obfuscation/feature.webp"/></item><item><title>Protect your GitHub account to keep your code secure</title><link>https://grantwinney.com/keeping-your-github-code-secure/</link><pubDate>Wed, 22 May 2019 02:23:58 +0000</pubDate><guid>https://grantwinney.com/keeping-your-github-code-secure/</guid><description>GitHub, GitLab, and Bitbucket just released a joint statement on a widespread ransomware attack that resulted in compromised accounts. That got me thinking, what can a person do to protect his or her code on GitHub? As it turns out, a lot&amp;hellip;</description><media:content xmlns:media="http://search.yahoo.com/mrss/" url="https://grantwinney.com/keeping-your-github-code-secure/feature.webp"/></item><item><title>Modify a config file in Erlang</title><link>https://grantwinney.com/how-to-modify-a-config-file-in-erlang/</link><pubDate>Thu, 16 May 2019 11:22:49 +0000</pubDate><guid>https://grantwinney.com/how-to-modify-a-config-file-in-erlang/</guid><description>Modifying an Erlang config file at runtime wasn&amp;rsquo;t as easy (or obvious) as I&amp;rsquo;d thought it&amp;rsquo;d be. So I wrote a script to hopefully make it easier.</description><media:content xmlns:media="http://search.yahoo.com/mrss/" url="https://grantwinney.com/how-to-modify-a-config-file-in-erlang/feature.webp"/></item><item><title>Running Windows XP in VirtualBox</title><link>https://grantwinney.com/running-windows-xp-in-virtualbox/</link><pubDate>Sat, 04 May 2019 14:35:40 +0000</pubDate><guid>https://grantwinney.com/running-windows-xp-in-virtualbox/</guid><description>Just got an MSDN account, which always comes with some old treasures (hey, beauty&amp;rsquo;s in the eye of the beholder). Take a trip back with me, to the days of Windows XP, the beginning of the .NET Framework, and even further&amp;hellip; ;)</description><media:content xmlns:media="http://search.yahoo.com/mrss/" url="https://grantwinney.com/running-windows-xp-in-virtualbox/feature.webp"/></item><item><title>Using an application config file with a .NET Standard app and NUnit 3</title><link>https://grantwinney.com/how-to-use-an-app-config-file-with-a-net-standard-app-and-nunit-3/</link><pubDate>Mon, 15 Apr 2019 14:37:19 +0000</pubDate><guid>https://grantwinney.com/how-to-use-an-app-config-file-with-a-net-standard-app-and-nunit-3/</guid><description>Porting .NET Framework code to .NET Standard has been a learning experience, with some challenges too. This time I had a .NET Standard library that expected an application config file, but loading one from an NUnit test suite proved to be more difficult than it sounded at first.</description><media:content xmlns:media="http://search.yahoo.com/mrss/" url="https://grantwinney.com/how-to-use-an-app-config-file-with-a-net-standard-app-and-nunit-3/feature.webp"/></item><item><title>Using a constant as a DateTime format inside string interpolation</title><link>https://grantwinney.com/csharp-constant-datetime-format-inside-string-interpolation/</link><pubDate>Thu, 04 Apr 2019 20:06:50 +0000</pubDate><guid>https://grantwinney.com/csharp-constant-datetime-format-inside-string-interpolation/</guid><description>I was upgrading some code to use string interpolation, a feature introduced in C# 6, when I ran into a small snag with DateTimes and a format string stored as a constant.</description><media:content xmlns:media="http://search.yahoo.com/mrss/" url="https://grantwinney.com/csharp-constant-datetime-format-inside-string-interpolation/feature.webp"/></item><item><title>Using Attributes in C#</title><link>https://grantwinney.com/csharp-attributes/</link><pubDate>Thu, 04 Apr 2019 15:57:19 +0000</pubDate><guid>https://grantwinney.com/csharp-attributes/</guid><description>Ever thought it&amp;rsquo;d be convenient to attach metadata to your code at design time, then read it at runtime? Attributes let you do just that - to methods, classes, tests, enumerations, and more. Use reflection to read them at runtime and take some action. Here&amp;rsquo;s a few examples for the uninitiated&amp;hellip;</description><media:content xmlns:media="http://search.yahoo.com/mrss/" url="https://grantwinney.com/csharp-attributes/feature.webp"/></item><item><title>Opening the developer console in every major browser</title><link>https://grantwinney.com/how-do-i-view-the-dev-console-in-my-browser/</link><pubDate>Tue, 26 Mar 2019 14:47:54 +0000</pubDate><guid>https://grantwinney.com/how-do-i-view-the-dev-console-in-my-browser/</guid><description>Most people will never even know their browser hides a great set of tools, mostly used by web developers, but which can be useful for anyone trying to figure out why their browser is misbehaving.</description><media:content xmlns:media="http://search.yahoo.com/mrss/" url="https://grantwinney.com/how-do-i-view-the-dev-console-in-my-browser/feature.webp"/></item><item><title>Keep your EUnit teardown logic as simple as possible!</title><link>https://grantwinney.com/keep-your-eunit-teardown-logic-as-simple/</link><pubDate>Thu, 14 Mar 2019 11:03:00 +0000</pubDate><guid>https://grantwinney.com/keep-your-eunit-teardown-logic-as-simple/</guid><description>Ever had an EUnit test fixture fail with meck reporting it was &amp;ldquo;already_started&amp;rdquo;? Well I did, and here&amp;rsquo;s why&amp;hellip;</description><media:content xmlns:media="http://search.yahoo.com/mrss/" url="https://grantwinney.com/keep-your-eunit-teardown-logic-as-simple/feature.webp"/></item><item><title>Regaining access to a Mozilla Addons account</title><link>https://grantwinney.com/lost-access-to-your-mozilla-addons-account/</link><pubDate>Wed, 13 Mar 2019 03:29:29 +0000</pubDate><guid>https://grantwinney.com/lost-access-to-your-mozilla-addons-account/</guid><description>I recently realized that somehow, in the 6 months since I last logged into my Mozilla developer account, none of my short list of emails would let me back in. Here&amp;rsquo;s how I regained access.</description><media:content xmlns:media="http://search.yahoo.com/mrss/" url="https://grantwinney.com/lost-access-to-your-mozilla-addons-account/feature.webp"/></item><item><title>Find info about an IP address with the IP Geolocation API</title><link>https://grantwinney.com/using-the-ip-geolocation-api-to-find-info-about-an-ip-address/</link><pubDate>Tue, 12 Feb 2019 11:47:00 +0000</pubDate><guid>https://grantwinney.com/using-the-ip-geolocation-api-to-find-info-about-an-ip-address/</guid><description>Last year I caught an article about a simple, free service called ipify that returns your IP address. It became so popular the author soon found himself dealing with billions of requests per month! Here&amp;rsquo;s a look at that API and the IP Geolocation API that it spawned.</description><media:content xmlns:media="http://search.yahoo.com/mrss/" url="https://grantwinney.com/using-the-ip-geolocation-api-to-find-info-about-an-ip-address/feature.webp"/></item><item><title>Fun web comics for developers</title><link>https://grantwinney.com/web-comics-for-devs/</link><pubDate>Sun, 10 Feb 2019 18:58:54 +0000</pubDate><guid>https://grantwinney.com/web-comics-for-devs/</guid><description>Need a comic break? Here&amp;rsquo;s some web comics I&amp;rsquo;ve stumbled upon over the years - the funny, sarcastic, informative, and just plain weird.</description><media:content xmlns:media="http://search.yahoo.com/mrss/" url="https://grantwinney.com/web-comics-for-devs/feature.webp"/></item><item><title>Common dialyzer errors and solutions in Erlang</title><link>https://grantwinney.com/common-dialyzer-errors-and-solutions-in-erlang/</link><pubDate>Sat, 09 Feb 2019 21:10:27 +0000</pubDate><guid>https://grantwinney.com/common-dialyzer-errors-and-solutions-in-erlang/</guid><description>When dealing with a dynamically typed language, any effort to tame the beast can pay off. For Erlang that means Dialyzer specs, but they can be a pain. Here&amp;rsquo;s some warnings I&amp;rsquo;ve seen and how to solve them.</description><media:content xmlns:media="http://search.yahoo.com/mrss/" url="https://grantwinney.com/common-dialyzer-errors-and-solutions-in-erlang/feature.webp"/></item><item><title>5 Markdown Tricks for GitHub</title><link>https://grantwinney.com/cool-markdown-tricks-for-github/</link><pubDate>Wed, 06 Feb 2019 11:54:00 +0000</pubDate><guid>https://grantwinney.com/cool-markdown-tricks-for-github/</guid><description>Here&amp;rsquo;s a few tricks for rendering markdown in GitHub that most people wouldn&amp;rsquo;t know about. Oh, and they work for new Issues, Pull Requests, and in the Wiki too!</description><media:content xmlns:media="http://search.yahoo.com/mrss/" url="https://grantwinney.com/cool-markdown-tricks-for-github/feature.webp"/></item><item><title>Hosting a GitHub wiki on Ubuntu (and keeping it in sync)</title><link>https://grantwinney.com/hosting-a-github-wiki-remotely-on-ubuntu/</link><pubDate>Mon, 29 Oct 2018 12:19:38 +0000</pubDate><guid>https://grantwinney.com/hosting-a-github-wiki-remotely-on-ubuntu/</guid><description>I&amp;rsquo;ve always been a fan of wikis, but GitHub&amp;rsquo;s is so poorly designed it doesn&amp;rsquo;t get much love. I once wrote about cloning a wiki locally and editing it using Gollum, but now I&amp;rsquo;m taking a look at hosting it externally on DigitalOcean, using Gollum and keeping it in sync with the repo hosted on GitHub.</description><media:content xmlns:media="http://search.yahoo.com/mrss/" url="https://grantwinney.com/hosting-a-github-wiki-remotely-on-ubuntu/feature.webp"/></item><item><title>A few thoughts on date/time handling in Erlang</title><link>https://grantwinney.com/a-few-thoughts-on-datetime-handling-in-erlang/</link><pubDate>Mon, 03 Sep 2018 14:48:51 +0000</pubDate><guid>https://grantwinney.com/a-few-thoughts-on-datetime-handling-in-erlang/</guid><description>Handling date and times is a thorn in every experienced developer&amp;rsquo;s side. If you haven&amp;rsquo;t had the pleasure yet, you will. ;) Coming off a week of standardizing some datetimes across an Erlang app, here&amp;rsquo;s a few personal thoughts.</description><media:content xmlns:media="http://search.yahoo.com/mrss/" url="https://grantwinney.com/a-few-thoughts-on-datetime-handling-in-erlang/feature.webp"/></item><item><title>How to select an earlier .NET version on Visual Studio for Mac (tl;dr: you can't)</title><link>https://grantwinney.com/installing-earlier-net-versions-on-visual-studio-for-mac/</link><pubDate>Mon, 20 Aug 2018 16:20:12 +0000</pubDate><guid>https://grantwinney.com/installing-earlier-net-versions-on-visual-studio-for-mac/</guid><description>Despite its marketing, Visual Studio for Mac is not the Visual Studio that millions love, ported to the Mac. Something that&amp;rsquo;s absolutely trivial in standard VS, switching between .NET Frameworks, wasted several of my evenings. Maybe it&amp;rsquo;ll help someone else.</description><media:content xmlns:media="http://search.yahoo.com/mrss/" url="https://grantwinney.com/installing-earlier-net-versions-on-visual-studio-for-mac/feature.webp"/></item><item><title>Convert code from C# to VB.NET and back</title><link>https://grantwinney.com/how-do-i-convert-my-code-from-c-to-vb-net-or-vice-versa/</link><pubDate>Wed, 18 Jul 2018 04:41:38 +0000</pubDate><guid>https://grantwinney.com/how-do-i-convert-my-code-from-c-to-vb-net-or-vice-versa/</guid><description>If you work with the .NET Framework long enough, you may eventually find yourself tasked with converting one language to another, either by request or necessity. But conversion isn&amp;rsquo;t always necessary - it&amp;rsquo;s possible (and easy!) to have one solution with multiple languages.</description><media:content xmlns:media="http://search.yahoo.com/mrss/" url="https://grantwinney.com/how-do-i-convert-my-code-from-c-to-vb-net-or-vice-versa/feature.webp"/></item><item><title>Calculate Easter and other holidays in Erlang</title><link>https://grantwinney.com/how-to-calculate-easter-and-other-holidays-in-erlang/</link><pubDate>Sun, 01 Jul 2018 00:32:52 +0000</pubDate><guid>https://grantwinney.com/how-to-calculate-easter-and-other-holidays-in-erlang/</guid><description>I wrote a small library for calculating Easter and other holidays in Erlang. Here&amp;rsquo;s how I did it and what I learned.</description><media:content xmlns:media="http://search.yahoo.com/mrss/" url="https://grantwinney.com/how-to-calculate-easter-and-other-holidays-in-erlang/feature.webp"/></item><item><title>Access yesterday's Internet with the Wayback Machine API</title><link>https://grantwinney.com/access-yesterdays-internet-with-the-wayback-machine-apis/</link><pubDate>Sun, 24 Jun 2018 20:02:24 +0000</pubDate><guid>https://grantwinney.com/access-yesterdays-internet-with-the-wayback-machine-apis/</guid><description>The Wayback Machine, a product of the Internet Archive, is an ambitious tool that&amp;rsquo;s been documenting websites for many years. It&amp;rsquo;s useful when a page you need is removed by the original author. Let&amp;rsquo;s take a look at their API and how we might make use of it.</description><media:content xmlns:media="http://search.yahoo.com/mrss/" url="https://grantwinney.com/access-yesterdays-internet-with-the-wayback-machine-apis/feature.webp"/></item><item><title>A look at the many ways APIs can authorize access</title><link>https://grantwinney.com/a-look-at-the-many-ways-apis-can-authorize-access/</link><pubDate>Tue, 19 Jun 2018 13:45:34 +0000</pubDate><guid>https://grantwinney.com/a-look-at-the-many-ways-apis-can-authorize-access/</guid><description>After writing about so many APIs and having to figure out the auth process for each, I wanted to compare and contrast how some of these services approach authentication and authorization, and why they might&amp;rsquo;ve decided to do it the way they did.</description><media:content xmlns:media="http://search.yahoo.com/mrss/" url="https://grantwinney.com/a-look-at-the-many-ways-apis-can-authorize-access/feature.webp"/></item><item><title>A random selection algorithm that factors in age (weighted selection)</title><link>https://grantwinney.com/writing-a-random-selection-algorithm-that-factors-in-the-age-of-an-item/</link><pubDate>Thu, 07 Jun 2018 03:44:14 +0000</pubDate><guid>https://grantwinney.com/writing-a-random-selection-algorithm-that-factors-in-the-age-of-an-item/</guid><description>Have you ever had a collection of items and needed to select a random one from the lot? What if you have a class with some property (i.e. &amp;lsquo;age&amp;rsquo; or &amp;lsquo;weight&amp;rsquo;) that you want to take into account when doing the random selection? Let&amp;rsquo;s see how we might approach that&amp;hellip;</description><media:content xmlns:media="http://search.yahoo.com/mrss/" url="https://grantwinney.com/writing-a-random-selection-algorithm-that-factors-in-the-age-of-an-item/feature.webp"/></item><item><title>Getting rid of unused function errors when using timers in Erlang</title><link>https://grantwinney.com/getting-rid-of-unused-function-errors-when-using-timers-in-erlang/</link><pubDate>Wed, 06 Jun 2018 18:18:06 +0000</pubDate><guid>https://grantwinney.com/getting-rid-of-unused-function-errors-when-using-timers-in-erlang/</guid><description>Have you ever tried to execute a function at some future time in Erlang? You can, with a timer, but the compiler may complain that the function you&amp;rsquo;re calling via the timer is unused. Why is that and what can you do?</description><media:content xmlns:media="http://search.yahoo.com/mrss/" url="https://grantwinney.com/getting-rid-of-unused-function-errors-when-using-timers-in-erlang/feature.webp"/></item><item><title>Tweet random blog posts from an RSS feed using AWS Lambda</title><link>https://grantwinney.com/using-aws-lambda-to-tweet-random-posts-from-an-rss-feed/</link><pubDate>Sat, 02 Jun 2018 12:32:54 +0000</pubDate><guid>https://grantwinney.com/using-aws-lambda-to-tweet-random-posts-from-an-rss-feed/</guid><description>If you&amp;rsquo;ve got a Twitter account, and a blog with a lot of content, sharing your posts can be a nice way to help someone out, and drive a little extra traffic to your site. If your site generates an RSS feed, here&amp;rsquo;s how you can automate the process - for free!</description><media:content xmlns:media="http://search.yahoo.com/mrss/" url="https://grantwinney.com/using-aws-lambda-to-tweet-random-posts-from-an-rss-feed/feature.webp"/></item><item><title>Tweet random posts from a Ghost blog using AWS Lambda</title><link>https://grantwinney.com/using-aws-lambda-and-tweetinvi-to-tweet-a-random-ghost-blog-post/</link><pubDate>Fri, 01 Jun 2018 17:28:01 +0000</pubDate><guid>https://grantwinney.com/using-aws-lambda-and-tweetinvi-to-tweet-a-random-ghost-blog-post/</guid><description>If you&amp;rsquo;ve got a Twitter account, and a blog with a lot of content, sharing your posts can be a nice way to help someone out, and drive a little extra traffic to your site. Here&amp;rsquo;s how you can automate the process on your Ghost blog - for free!</description><media:content xmlns:media="http://search.yahoo.com/mrss/" url="https://grantwinney.com/using-aws-lambda-and-tweetinvi-to-tweet-a-random-ghost-blog-post/feature.webp"/></item><item><title>Are property accessors possible in Erlang records?</title><link>https://grantwinney.com/are-property-accessors-possible-in-erlang/</link><pubDate>Tue, 22 May 2018 16:55:18 +0000</pubDate><guid>https://grantwinney.com/are-property-accessors-possible-in-erlang/</guid><description>I ran into a problem in Erlang yesterday that made me think&amp;hellip; is there anyway to implement a property accessor on a record?</description><media:content xmlns:media="http://search.yahoo.com/mrss/" url="https://grantwinney.com/are-property-accessors-possible-in-erlang/feature.webp"/></item><item><title>Create a secure, personal instance of DokuWiki on DigitalOcean</title><link>https://grantwinney.com/creating-your-own-secure-wiki-using-dokuwiki/</link><pubDate>Sun, 01 Apr 2018 02:46:32 +0000</pubDate><guid>https://grantwinney.com/creating-your-own-secure-wiki-using-dokuwiki/</guid><description>I&amp;rsquo;ve been thinking for awhile now that I wanted to setup a wiki. I wanted something light-weight, with support for uploading images and files. And I wanted to retain control over the data and configuration, as well as encrypt access to it. Here&amp;rsquo;s how to install DokuWiki on Ubuntu with DigitalOcean.</description><media:content xmlns:media="http://search.yahoo.com/mrss/" url="https://grantwinney.com/creating-your-own-secure-wiki-using-dokuwiki/feature.webp"/></item><item><title>Automatically add links to all headers on a website (a Chrome extension)</title><link>https://grantwinney.com/automatically-adding-links-next-to-all-headers-on-the-page-a-chrome-extension/</link><pubDate>Sun, 25 Feb 2018 21:33:09 +0000</pubDate><guid>https://grantwinney.com/automatically-adding-links-next-to-all-headers-on-the-page-a-chrome-extension/</guid><description>Ever needed to link directly to one section of a webpage? You can, as long as there&amp;rsquo;s a header (or another element nearby like a div) with an ID assigned to it. Let&amp;rsquo;s see how.</description><media:content xmlns:media="http://search.yahoo.com/mrss/" url="https://grantwinney.com/automatically-adding-links-next-to-all-headers-on-the-page-a-chrome-extension/feature.webp"/></item><item><title>Generate random passwords, numbers and GUIDs with the PasswordRandom API</title><link>https://grantwinney.com/passwordrandom-api/</link><pubDate>Tue, 06 Feb 2018 12:36:34 +0000</pubDate><guid>https://grantwinney.com/passwordrandom-api/</guid><description>The PasswordRandom API provides random values - and not just passwords as the name would seem to suggest. It also generates GUIDs, random numbers, characters, etc.</description><media:content xmlns:media="http://search.yahoo.com/mrss/" url="https://grantwinney.com/passwordrandom-api/feature.webp"/></item><item><title>Creating a table of contents for your blog</title><link>https://grantwinney.com/creating-a-table-of-contents-for-your-blog/</link><pubDate>Sat, 03 Feb 2018 14:08:21 +0000</pubDate><guid>https://grantwinney.com/creating-a-table-of-contents-for-your-blog/</guid><description>A table of contents is convenient for visitors, so I wrote a script to generate one for any blog automatically!</description><media:content xmlns:media="http://search.yahoo.com/mrss/" url="https://grantwinney.com/creating-a-table-of-contents-for-your-blog/feature.webp"/></item><item><title>Manage your books with the Google Books API</title><link>https://grantwinney.com/what-is-the-google-books-api/</link><pubDate>Wed, 31 Jan 2018 00:07:00 +0000</pubDate><guid>https://grantwinney.com/what-is-the-google-books-api/</guid><description>The Google Books API provides access to Google Books, which lets you search for any book and, at a bare minimium, see meta data about it. Depending on copyright status, you might also be able to see sample pages or read the entire book. You can also buy books.</description><media:content xmlns:media="http://search.yahoo.com/mrss/" url="https://grantwinney.com/what-is-the-google-books-api/feature.webp"/></item><item><title>What is an API wrapper?</title><link>https://grantwinney.com/what-is-an-api-wrapper/</link><pubDate>Thu, 25 Jan 2018 04:59:32 +0000</pubDate><guid>https://grantwinney.com/what-is-an-api-wrapper/</guid><description>When you find an API to use in your app, you&amp;rsquo;ll need to access it in a specific language - not always an easy or straightforward task. As long as you&amp;rsquo;re doing all that work, why keep it to yourself? Let&amp;rsquo;s look at creating an API wrapper that you can share with others!</description><media:content xmlns:media="http://search.yahoo.com/mrss/" url="https://grantwinney.com/what-is-an-api-wrapper/feature.webp"/></item><item><title>How to autolink all images in Ghost to the full resolution</title><link>https://grantwinney.com/ghost-blog-autolink-images-to-full-resolution/</link><pubDate>Mon, 22 Jan 2018 03:41:27 +0000</pubDate><guid>https://grantwinney.com/ghost-blog-autolink-images-to-full-resolution/</guid><description/><media:content xmlns:media="http://search.yahoo.com/mrss/" url="https://grantwinney.com/ghost-blog-autolink-images-to-full-resolution/feature.webp"/></item><item><title>Access Game Data with the IGDB API v4</title><link>https://grantwinney.com/what-is-internet-game-database-api/</link><pubDate>Mon, 01 Jan 2018 05:00:00 +0000</pubDate><guid>https://grantwinney.com/what-is-internet-game-database-api/</guid><description>The Internet Game Database is a community-driven site that collects and shares information about games and game-related data. Let&amp;rsquo;s check out the IGDB API!</description><media:content xmlns:media="http://search.yahoo.com/mrss/" url="https://grantwinney.com/what-is-internet-game-database-api/feature.webp"/></item><item><title>Access Book and Author Data with the Penguin Random House API</title><link>https://grantwinney.com/what-is-penguin-random-house-api/</link><pubDate>Sun, 31 Dec 2017 20:20:17 +0000</pubDate><guid>https://grantwinney.com/what-is-penguin-random-house-api/</guid><description>Penguin Random House is a book publisher, and their API can be used to get data about books, authors and events. Let&amp;rsquo;s check it out!</description><media:content xmlns:media="http://search.yahoo.com/mrss/" url="https://grantwinney.com/what-is-penguin-random-house-api/feature.webp"/></item><item><title>Accessing Census, Demographic, and Housing Data with the US Census Bureau API</title><link>https://grantwinney.com/what-is-us-census-bureau-api/</link><pubDate>Sat, 30 Dec 2017 23:01:30 +0000</pubDate><guid>https://grantwinney.com/what-is-us-census-bureau-api/</guid><description>The US Census Bureau APIs provide free access to geolocation data, as well as American census data, demographics, housing stats, etc. Let&amp;rsquo;s check them out!</description><media:content xmlns:media="http://search.yahoo.com/mrss/" url="https://grantwinney.com/what-is-us-census-bureau-api/feature.webp"/></item><item><title>Access Current and Historical Weather Data with the OpenWeatherMap API</title><link>https://grantwinney.com/what-is-openweathermap-api/</link><pubDate>Fri, 29 Dec 2017 15:33:04 +0000</pubDate><guid>https://grantwinney.com/what-is-openweathermap-api/</guid><description>OpenWeatherMap provides free access to extensive weather data - current conditions, 5-day forecast, uv index, weather alerts, etc. Let&amp;rsquo;s check out their API!</description><media:content xmlns:media="http://search.yahoo.com/mrss/" url="https://grantwinney.com/what-is-openweathermap-api/feature.webp"/></item><item><title>Learn About the ISS and its Crew with the ISS Notify API</title><link>https://grantwinney.com/what-is-iss-notify-api/</link><pubDate>Thu, 28 Dec 2017 12:03:00 +0000</pubDate><guid>https://grantwinney.com/what-is-iss-notify-api/</guid><description>The ISS Notify API (or is it the Open Notify API?) was written by Nathan Bergey for a Science Hack Day competition, then released to the public. You can use it to find the location of the ISS, or to find when it&amp;rsquo;ll pass over a location! Check it out.</description><media:content xmlns:media="http://search.yahoo.com/mrss/" url="https://grantwinney.com/what-is-iss-notify-api/feature.webp"/></item><item><title>Manage Boards and Cards With the Trello API</title><link>https://grantwinney.com/what-is-trello-api/</link><pubDate>Wed, 27 Dec 2017 20:45:59 +0000</pubDate><guid>https://grantwinney.com/what-is-trello-api/</guid><description>Trello is a virtual kanban board&amp;hellip; or a nice to-do list if you&amp;rsquo;re going solo. I like it, maybe you will too, and their API makes nearly all areas accessible to devs.</description><media:content xmlns:media="http://search.yahoo.com/mrss/" url="https://grantwinney.com/what-is-trello-api/feature.webp"/></item><item><title>View the Mars Rover, Landsat Images, and More with the NASA API</title><link>https://grantwinney.com/what-is-nasa-api/</link><pubDate>Sun, 24 Dec 2017 19:06:14 +0000</pubDate><guid>https://grantwinney.com/what-is-nasa-api/</guid><description>NASA&amp;rsquo;s API makes their data (such as Mars rover photos) available to anyone who wants to consume it. It&amp;rsquo;s an unprecedented wealth of knowledge, so let&amp;rsquo;s dig in!</description><media:content xmlns:media="http://search.yahoo.com/mrss/" url="https://grantwinney.com/what-is-nasa-api/feature.webp"/></item><item><title>Access Climate Data With the NOAA API</title><link>https://grantwinney.com/what-is-noaa-api/</link><pubDate>Sun, 24 Dec 2017 03:44:02 +0000</pubDate><guid>https://grantwinney.com/what-is-noaa-api/</guid><description>The NOAA API lets us query weather and climate data from NOAA, an agency that studies and charts conditions in the oceans and atmosphere. Let&amp;rsquo;s check it out!</description><media:content xmlns:media="http://search.yahoo.com/mrss/" url="https://grantwinney.com/what-is-noaa-api/feature.webp"/></item><item><title>Finding Directions, Coordinates and More With the Google Maps API</title><link>https://grantwinney.com/what-is-google-maps-api/</link><pubDate>Sat, 23 Dec 2017 04:10:01 +0000</pubDate><guid>https://grantwinney.com/what-is-google-maps-api/</guid><description>The Google Maps API is a series of APIs for multiple platforms, each focused on a small set of tasks. At first it all seems a bit overwhelming, but each of them is pretty easy to use. Let&amp;rsquo;s check a few out!</description><media:content xmlns:media="http://search.yahoo.com/mrss/" url="https://grantwinney.com/what-is-google-maps-api/feature.webp"/></item><item><title>Managing Workspaces and Channels With the Slack API</title><link>https://grantwinney.com/what-is-slack-api/</link><pubDate>Thu, 21 Dec 2017 18:09:09 +0000</pubDate><guid>https://grantwinney.com/what-is-slack-api/</guid><description>Slack is a popular communication and collaboration tool, and their API gives us access to channels, messages, and more. Let&amp;rsquo;s check it out!</description><media:content xmlns:media="http://search.yahoo.com/mrss/" url="https://grantwinney.com/what-is-slack-api/feature.webp"/></item><item><title>Managing Files and Folders Using the Dropbox API</title><link>https://grantwinney.com/what-is-dropbox-api/</link><pubDate>Wed, 20 Dec 2017 04:59:25 +0000</pubDate><guid>https://grantwinney.com/what-is-dropbox-api/</guid><description>Dropbox provides file storage that syncs between your devices, and their API gives you access to that. Let&amp;rsquo;s check it out!</description><media:content xmlns:media="http://search.yahoo.com/mrss/" url="https://grantwinney.com/what-is-dropbox-api/feature.webp"/></item><item><title>Access Buckets and Files on Backblaze With the B2 Cloud Storage API</title><link>https://grantwinney.com/what-is-backblaze-b2-api/</link><pubDate>Sun, 17 Dec 2017 19:37:29 +0000</pubDate><guid>https://grantwinney.com/what-is-backblaze-b2-api/</guid><description>The Backblaze B2 Storage API, built on top of Backblaze&amp;rsquo;s cloud storage, lets you access and manage your buckets. Let&amp;rsquo;s check it out!</description><media:content xmlns:media="http://search.yahoo.com/mrss/" url="https://grantwinney.com/what-is-backblaze-b2-api/feature.webp"/></item><item><title>Accessing Tweets and More With the Twitter API</title><link>https://grantwinney.com/what-is-twitter-api/</link><pubDate>Sat, 16 Dec 2017 04:58:47 +0000</pubDate><guid>https://grantwinney.com/what-is-twitter-api/</guid><description>The Twitter API lets you access tweets, users who tweet, metadata, manipulate lists, and more. Let&amp;rsquo;s check it out!</description><media:content xmlns:media="http://search.yahoo.com/mrss/" url="https://grantwinney.com/what-is-twitter-api/feature.webp"/></item><item><title>Taming the Erlang Beast</title><link>https://grantwinney.com/taming-the-erlang-beast/</link><pubDate>Wed, 01 Nov 2017 16:50:27 +0000</pubDate><guid>https://grantwinney.com/taming-the-erlang-beast/</guid><description>Becoming an Erlang developer has not always been easy, but over the last couple of years I&amp;rsquo;ve learned a few ways to tame the beast. It doesn&amp;rsquo;t need to become any other language, but there&amp;rsquo;s definitely room for improving the developer experience!</description><media:content xmlns:media="http://search.yahoo.com/mrss/" url="https://grantwinney.com/taming-the-erlang-beast/feature.webp"/></item><item><title>Concatenate Binaries and Strings in Erlang</title><link>https://grantwinney.com/erlang-concatenate-binaries-and-strings/</link><pubDate>Tue, 26 Sep 2017 16:09:00 +0000</pubDate><guid>https://grantwinney.com/erlang-concatenate-binaries-and-strings/</guid><description>Concatenating strings and binaries in Erlang can get ugly quick. Let&amp;rsquo;s make it easier.</description><media:content xmlns:media="http://search.yahoo.com/mrss/" url="https://grantwinney.com/erlang-concatenate-binaries-and-strings/feature.webp"/></item><item><title>Creating Your First Chrome Extension</title><link>https://grantwinney.com/making-your-first-chrome-extension/</link><pubDate>Wed, 16 Aug 2017 10:27:33 +0000</pubDate><guid>https://grantwinney.com/making-your-first-chrome-extension/</guid><description>We all have our favorite web browser with our favorite extensions loaded, but have you ever considered writing your own? In the past few months I&amp;rsquo;ve created a couple extensions to suit my own needs. Here&amp;rsquo;s what I&amp;rsquo;ve learned!</description><media:content xmlns:media="http://search.yahoo.com/mrss/" url="https://grantwinney.com/making-your-first-chrome-extension/feature.webp"/></item><item><title>Safely Build on a Ghost Theme</title><link>https://grantwinney.com/safely-customize-a-theme-in-ghost/</link><pubDate>Mon, 24 Jul 2017 18:57:36 +0000</pubDate><guid>https://grantwinney.com/safely-customize-a-theme-in-ghost/</guid><description/><media:content xmlns:media="http://search.yahoo.com/mrss/" url="https://grantwinney.com/safely-customize-a-theme-in-ghost/feature.webp"/></item><item><title>What is an API?</title><link>https://grantwinney.com/what-is-an-api/</link><pubDate>Sun, 23 Jul 2017 19:41:19 +0000</pubDate><guid>https://grantwinney.com/what-is-an-api/</guid><description>An API is an Application Programming Interface, but what&amp;rsquo;s that really mean? In a more practical sense, it&amp;rsquo;s one programmer hiding the (possibly messy) details of their own code behind a nice veneer, in order to make it easier for another programmer to consume it in their own program.</description><media:content xmlns:media="http://search.yahoo.com/mrss/" url="https://grantwinney.com/what-is-an-api/feature.webp"/></item><item><title>Unit Testing in Visual Studio for Mac</title><link>https://grantwinney.com/visual-studio-for-mac-tdd/</link><pubDate>Thu, 06 Jul 2017 12:15:51 +0000</pubDate><guid>https://grantwinney.com/visual-studio-for-mac-tdd/</guid><description>Are you a Mac user and .NET fan? Did you know there&amp;rsquo;s a native VS app now? Writing tests is important, so I decided to try out NUnit in @vs4mac.</description><media:content xmlns:media="http://search.yahoo.com/mrss/" url="https://grantwinney.com/visual-studio-for-mac-tdd/feature.webp"/></item><item><title>5 Quick Hacks for Your Ghost Theme</title><link>https://grantwinney.com/5-quick-hacks-for-your-ghost-theme/</link><pubDate>Sat, 01 Apr 2017 18:47:23 +0000</pubDate><guid>https://grantwinney.com/5-quick-hacks-for-your-ghost-theme/</guid><description>These &amp;ldquo;hacks&amp;rdquo; for Ghost add some cool features to any blog, and should be usable with any theme.</description><media:content xmlns:media="http://search.yahoo.com/mrss/" url="https://grantwinney.com/5-quick-hacks-for-your-ghost-theme/feature.webp"/></item><item><title>Migrating a Blog from WordPress to Ghost</title><link>https://grantwinney.com/migrating-a-blog-from-wordpress-to-ghost/</link><pubDate>Sun, 26 Mar 2017 02:43:14 +0000</pubDate><guid>https://grantwinney.com/migrating-a-blog-from-wordpress-to-ghost/</guid><description/><media:content xmlns:media="http://search.yahoo.com/mrss/" url="https://grantwinney.com/migrating-a-blog-from-wordpress-to-ghost/feature.webp"/></item><item><title>Evaluating a string of code in Erlang at runtime</title><link>https://grantwinney.com/how-to-evaluate-a-string-of-code-in-erlang-at-runtime/</link><pubDate>Sun, 05 Mar 2017 18:56:30 +0000</pubDate><guid>https://grantwinney.com/how-to-evaluate-a-string-of-code-in-erlang-at-runtime/</guid><description/><media:content xmlns:media="http://search.yahoo.com/mrss/" url="https://grantwinney.com/how-to-evaluate-a-string-of-code-in-erlang-at-runtime/feature.webp"/></item><item><title>What is charlieplexing? (a Raspberry Pi demo)</title><link>https://grantwinney.com/what-is-charlieplexing-a-short-demo-using-the-raspberry-pi/</link><pubDate>Fri, 17 Feb 2017 09:03:29 +0000</pubDate><guid>https://grantwinney.com/what-is-charlieplexing-a-short-demo-using-the-raspberry-pi/</guid><description>On past projects, when I needed multiple LEDs, I just connected each to its own GPIO pin. I knew the current only worked in one direction, but I didn&amp;rsquo;t think to take advantage of that fact. Charlieplexing is a method for arranging multiple LEDs so as to use the minimal number of pins possible.</description><media:content xmlns:media="http://search.yahoo.com/mrss/" url="https://grantwinney.com/what-is-charlieplexing-a-short-demo-using-the-raspberry-pi/feature.webp"/></item><item><title>How to Create a Git Alias</title><link>https://grantwinney.com/creating-a-git-alias/</link><pubDate>Sat, 28 Jan 2017 13:07:51 +0000</pubDate><guid>https://grantwinney.com/creating-a-git-alias/</guid><description>If you&amp;rsquo;re unfamiliar with Git&amp;rsquo;s &amp;ldquo;alias&amp;rdquo; feature, it provides a way to create shortcuts for other Git commands, which can save you a lot of time. They’re easy to setup and maintain too. Let&amp;rsquo;s see how.</description><media:content xmlns:media="http://search.yahoo.com/mrss/" url="https://grantwinney.com/creating-a-git-alias/feature.webp"/></item><item><title>5 Things You Can Do With a Locally Cloned GitHub Wiki</title><link>https://grantwinney.com/5-things-you-can-do-with-a-locally-cloned-github-wiki/</link><pubDate>Mon, 16 Jan 2017 07:52:51 +0000</pubDate><guid>https://grantwinney.com/5-things-you-can-do-with-a-locally-cloned-github-wiki/</guid><description>There’s a feature of every GitHub repo that in my experience doesn’t get a ton of love, and that&amp;rsquo;s the wiki. In all fairness, I&amp;rsquo;m not sure how much love it deserves - it&amp;rsquo;s sorely lacking in features. But did you know it&amp;rsquo;s a separate repo that you can clone and manipulate locally?</description><media:content xmlns:media="http://search.yahoo.com/mrss/" url="https://grantwinney.com/5-things-you-can-do-with-a-locally-cloned-github-wiki/feature.webp"/></item><item><title>Comparing Two Objects for Equality in C#</title><link>https://grantwinney.com/csharp-compare-two-objects-for-equality/</link><pubDate>Mon, 31 Oct 2016 13:23:44 +0000</pubDate><guid>https://grantwinney.com/csharp-compare-two-objects-for-equality/</guid><description>It&amp;rsquo;s common to compare two objects in C# for equality, such as for a save operation. Let&amp;rsquo;s take a closer look at how we define what equal means.</description><media:content xmlns:media="http://search.yahoo.com/mrss/" url="https://grantwinney.com/csharp-compare-two-objects-for-equality/feature.webp"/></item><item><title>Connecting an Analog Joystick to the Raspberry Pi</title><link>https://grantwinney.com/raspberry-pi-analog-joystick/</link><pubDate>Sat, 24 Sep 2016 13:30:49 +0000</pubDate><guid>https://grantwinney.com/raspberry-pi-analog-joystick/</guid><description/><media:content xmlns:media="http://search.yahoo.com/mrss/" url="https://grantwinney.com/raspberry-pi-analog-joystick/feature.webp"/></item><item><title>Creating a Flickering Candle Using an RGB LED on the Raspberry Pi</title><link>https://grantwinney.com/raspberry-pi-flickering-candle/</link><pubDate>Mon, 29 Aug 2016 22:34:44 +0000</pubDate><guid>https://grantwinney.com/raspberry-pi-flickering-candle/</guid><description/><media:content xmlns:media="http://search.yahoo.com/mrss/" url="https://grantwinney.com/raspberry-pi-flickering-candle/feature.webp"/></item><item><title>How to Use Pulse Width Modulation (PWM) on an RGB LED and the Raspberry Pi</title><link>https://grantwinney.com/raspberry-pi-pulse-width-modulation/</link><pubDate>Mon, 22 Aug 2016 07:28:52 +0000</pubDate><guid>https://grantwinney.com/raspberry-pi-pulse-width-modulation/</guid><description/><media:content xmlns:media="http://search.yahoo.com/mrss/" url="https://grantwinney.com/raspberry-pi-pulse-width-modulation/feature.webp"/></item><item><title>A Simon Game Clone for the Raspberry Pi</title><link>https://grantwinney.com/raspberry-pi-simon-game-clone/</link><pubDate>Thu, 28 Jul 2016 08:09:41 +0000</pubDate><guid>https://grantwinney.com/raspberry-pi-simon-game-clone/</guid><description>Let&amp;rsquo;s recreate the Simon game of the 1980s using a Raspberry Pi and Sonic Pi!</description><media:content xmlns:media="http://search.yahoo.com/mrss/" url="https://grantwinney.com/raspberry-pi-simon-game-clone/feature.webp"/></item><item><title>Creating Music with Sonic Pi on a Raspberry Pi</title><link>https://grantwinney.com/raspberry-pi-create-music-with-sonic-pi/</link><pubDate>Tue, 21 Jun 2016 13:02:00 +0000</pubDate><guid>https://grantwinney.com/raspberry-pi-create-music-with-sonic-pi/</guid><description>After watching Scott Fradkin live-code Sonic Pi for an hour at a conference, it inspired me to make a little music of my own.</description><media:content xmlns:media="http://search.yahoo.com/mrss/" url="https://grantwinney.com/raspberry-pi-create-music-with-sonic-pi/feature.webp"/></item><item><title>Create a Raspberry Pi Virtual Machine (VM) in VirtualBox</title><link>https://grantwinney.com/raspberry-pi-virtual-machine-in-virtualbox/</link><pubDate>Wed, 08 Jun 2016 06:01:18 +0000</pubDate><guid>https://grantwinney.com/raspberry-pi-virtual-machine-in-virtualbox/</guid><description>I was flipping through The MagPi back-issues and came across an article about setting up a virtual Raspberry Pi environment. It got me thinking&amp;hellip; I’ve been playing around a lot on the Pi itself, but it’d be nice to experiment with code even when I don’t have access to a physical Pi.</description><media:content xmlns:media="http://search.yahoo.com/mrss/" url="https://grantwinney.com/raspberry-pi-virtual-machine-in-virtualbox/feature.webp"/></item><item><title>Flash an LED on Your Raspberry Pi When You Get New Email</title><link>https://grantwinney.com/raspberry-pi-flash-led-for-new-email/</link><pubDate>Sat, 28 May 2016 21:19:25 +0000</pubDate><guid>https://grantwinney.com/raspberry-pi-flash-led-for-new-email/</guid><description>Let&amp;rsquo;s learn how to flash an LED on the Raspberry Pi when someone sends us a new email.</description><media:content xmlns:media="http://search.yahoo.com/mrss/" url="https://grantwinney.com/raspberry-pi-flash-led-for-new-email/feature.webp"/></item><item><title>Building a Morse Code Transmitter on a Raspberry Pi (version 2)</title><link>https://grantwinney.com/raspberry-pi-morse-code-transmitter-v2/</link><pubDate>Thu, 19 May 2016 06:10:28 +0000</pubDate><guid>https://grantwinney.com/raspberry-pi-morse-code-transmitter-v2/</guid><description>I created a morse code generator before based on entering a string at the console. Now I extended it to generate a message by clicking a button.</description><media:content xmlns:media="http://search.yahoo.com/mrss/" url="https://grantwinney.com/raspberry-pi-morse-code-transmitter-v2/feature.webp"/></item><item><title>Using PullUp and PullDown Resistors on the Raspberry Pi</title><link>https://grantwinney.com/raspberry-pi-using-pullup-and-pulldown-resistors/</link><pubDate>Mon, 09 May 2016 07:30:30 +0000</pubDate><guid>https://grantwinney.com/raspberry-pi-using-pullup-and-pulldown-resistors/</guid><description>When you start out creating circuits with the Raspberry Pi and its GPIO pins, there&amp;rsquo;s an unexpected but important concept to understand, called &amp;ldquo;floating&amp;rdquo;. To adjust for it, you need to understand how to use pullup and pulldown resistors.</description><media:content xmlns:media="http://search.yahoo.com/mrss/" url="https://grantwinney.com/raspberry-pi-using-pullup-and-pulldown-resistors/feature.webp"/></item><item><title>Building a Morse Code Transmitter on a Raspberry Pi</title><link>https://grantwinney.com/raspberry-pi-morse-code-transmitter/</link><pubDate>Sun, 03 Apr 2016 09:03:25 +0000</pubDate><guid>https://grantwinney.com/raspberry-pi-morse-code-transmitter/</guid><description>Making the Pi blink an LED a few times is thrilling, but what about building something.. more? Let&amp;rsquo;s build a morse code transmitter!</description><media:content xmlns:media="http://search.yahoo.com/mrss/" url="https://grantwinney.com/raspberry-pi-morse-code-transmitter/feature.webp"/></item><item><title>Hello World for the Raspberry Pi - Making an LED Blink</title><link>https://grantwinney.com/raspberry-pi-making-an-led-blink/</link><pubDate>Sat, 26 Mar 2016 16:37:30 +0000</pubDate><guid>https://grantwinney.com/raspberry-pi-making-an-led-blink/</guid><description>I unboxed my Raspberry Pi a few weeks ago and started learning Python. Let&amp;rsquo;s code the &amp;ldquo;Hello World&amp;rdquo; of the Pi, and make an LED blink.</description><media:content xmlns:media="http://search.yahoo.com/mrss/" url="https://grantwinney.com/raspberry-pi-making-an-led-blink/feature.webp"/></item><item><title>Building the model 4-stroke combustion engine from Smithsonian</title><link>https://grantwinney.com/building-a-4-stroke-internal-combustion-engine-with-the-smithsonian-motor-works-model/</link><pubDate>Sat, 06 Feb 2016 11:55:48 +0000</pubDate><guid>https://grantwinney.com/building-a-4-stroke-internal-combustion-engine-with-the-smithsonian-motor-works-model/</guid><description>Last summer, I found this “Smithsonian Motor-Works” set at a garage sale. Once built, it models a 4-stroke internal combustion engine. I’d shelved it for a rainy day and rediscovered it last weekend while cleaning the basement. Time for a little father/son bonding!</description><media:content xmlns:media="http://search.yahoo.com/mrss/" url="https://grantwinney.com/building-a-4-stroke-internal-combustion-engine-with-the-smithsonian-motor-works-model/feature.webp"/></item><item><title>HacktoberFest and my first OSS contributions</title><link>https://grantwinney.com/hacktoberfest-and-making-my-first-oss-contributions/</link><pubDate>Thu, 12 Nov 2015 07:27:00 +0000</pubDate><guid>https://grantwinney.com/hacktoberfest-and-making-my-first-oss-contributions/</guid><description>I made my first OSS contributions during HacktoberFest, gaining experience (and swag!) with the help of DigitalOcean and GitHub. :)</description><media:content xmlns:media="http://search.yahoo.com/mrss/" url="https://grantwinney.com/hacktoberfest-and-making-my-first-oss-contributions/feature.webp"/></item><item><title>Implicit vs Explicit Conversion in C#</title><link>https://grantwinney.com/csharp-implicit-vs-explicit-conversion/</link><pubDate>Wed, 11 Feb 2015 19:42:36 +0000</pubDate><guid>https://grantwinney.com/csharp-implicit-vs-explicit-conversion/</guid><description>We use implicit and explicit conversion in C# all the time, without even realizing it. Let&amp;rsquo;s learn more about them and look at examples of each.</description><media:content xmlns:media="http://search.yahoo.com/mrss/" url="https://grantwinney.com/csharp-implicit-vs-explicit-conversion/feature.webp"/></item><item><title>Obsolete Attribute on a Class is Ignored When an Interface is Involved</title><link>https://grantwinney.com/csharp-obsolete-attribute-on-class-ignored-when-interface-is-involved/</link><pubDate>Wed, 04 Feb 2015 17:49:31 +0000</pubDate><guid>https://grantwinney.com/csharp-obsolete-attribute-on-class-ignored-when-interface-is-involved/</guid><description>The Obsolete attribute on a class is ignored when an interface is involved. It caught me by surprise, but makes sense. Let&amp;rsquo;s see why.</description><media:content xmlns:media="http://search.yahoo.com/mrss/" url="https://grantwinney.com/csharp-obsolete-attribute-on-class-ignored-when-interface-is-involved/feature.webp"/></item><item><title>An Extension Method to Pass a Column Name to SqlDataReader.GetFieldValue</title><link>https://grantwinney.com/csharp-extension-method-to-pass-column-name-to-getfieldvalue/</link><pubDate>Thu, 15 Jan 2015 00:45:22 +0000</pubDate><guid>https://grantwinney.com/csharp-extension-method-to-pass-column-name-to-getfieldvalue/</guid><description>Let&amp;rsquo;s combine the SqlDataReader&amp;rsquo;s GetFieldValue and GetOrdinal methods into an extension method that lets us pass a column name and get back a specific type.</description><media:content xmlns:media="http://search.yahoo.com/mrss/" url="https://grantwinney.com/csharp-extension-method-to-pass-column-name-to-getfieldvalue/feature.webp"/></item><item><title>Passing Data Between Forms in WinForms</title><link>https://grantwinney.com/winforms-passing-data-between-two-forms/</link><pubDate>Fri, 12 Dec 2014 07:57:57 +0000</pubDate><guid>https://grantwinney.com/winforms-passing-data-between-two-forms/</guid><description>Passing data between two Forms is very common in WinForms. There&amp;rsquo;s a couple ways to do it, and one&amp;rsquo;s better than the other. Let&amp;rsquo;s take a look.</description><media:content xmlns:media="http://search.yahoo.com/mrss/" url="https://grantwinney.com/winforms-passing-data-between-two-forms/feature.webp"/></item><item><title>Filtering a ListView in WPF Using a TextBox and CollectionViewSource</title><link>https://grantwinney.com/wpf-filtering-listview-using-textbox-and-collectionviewsource/</link><pubDate>Sun, 07 Dec 2014 09:13:17 +0000</pubDate><guid>https://grantwinney.com/wpf-filtering-listview-using-textbox-and-collectionviewsource/</guid><description>In WPF, a ListView allows for quite a bit of flexibility. Let&amp;rsquo;s take a look at filtering a ListView, using input being typed into a TextBox.</description><media:content xmlns:media="http://search.yahoo.com/mrss/" url="https://grantwinney.com/wpf-filtering-listview-using-textbox-and-collectionviewsource/feature.webp"/></item><item><title>Installing Windows 3.1 in VMware Player</title><link>https://grantwinney.com/installing-windows-3-1-in-vmware-player/</link><pubDate>Thu, 24 Oct 2013 22:14:08 +0000</pubDate><guid>https://grantwinney.com/installing-windows-3-1-in-vmware-player/</guid><description>While looking for a copy of Windows 98 on MSDN to install some old software (compatibility mode under Windows 7 didn’t work), I came across Windows 3.11. Installing it was a little tricky though&amp;hellip;</description><media:content xmlns:media="http://search.yahoo.com/mrss/" url="https://grantwinney.com/installing-windows-3-1-in-vmware-player/feature.webp"/></item><item><title>Installing DOS 6.22 in VMware Player</title><link>https://grantwinney.com/installing-dos-6-22-in-vmware-player/</link><pubDate>Wed, 23 Oct 2013 01:26:46 +0000</pubDate><guid>https://grantwinney.com/installing-dos-6-22-in-vmware-player/</guid><description>While looking for a copy of Windows 98 on MSDN to install some old software (compatibility mode under Windows 7 didn’t work), I came across Windows 3.11. I just had to try installing it! But first, DOS 6.22&amp;hellip;</description><media:content xmlns:media="http://search.yahoo.com/mrss/" url="https://grantwinney.com/installing-dos-6-22-in-vmware-player/feature.webp"/></item><item><title>Hi! I'm Grant.</title><link>https://grantwinney.com/about/</link><pubDate>Sun, 22 Sep 2013 14:15:46 +0000</pubDate><guid>https://grantwinney.com/about/</guid><description/><media:content xmlns:media="http://search.yahoo.com/mrss/" url="https://grantwinney.com/about/feature.webp"/></item></channel></rss>