<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>Forem: nebulae</title>
    <description>The latest articles on Forem by nebulae (@nebulae).</description>
    <link>https://forem.com/nebulae</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3286164%2F12cf0d2a-ff75-4af9-91a9-aa136efa8edd.png</url>
      <title>Forem: nebulae</title>
      <link>https://forem.com/nebulae</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/nebulae"/>
    <language>en</language>
    <item>
      <title>Zstandard for .NET 8+</title>
      <dc:creator>nebulae</dc:creator>
      <pubDate>Fri, 18 Jul 2025 16:21:11 +0000</pubDate>
      <link>https://forem.com/nebulae/zstandard-for-net-8-2om8</link>
      <guid>https://forem.com/nebulae/zstandard-for-net-8-2om8</guid>
      <description>&lt;p&gt;I'm at it again- this time I needed a fully-featured wrapper for Meta's Zstandard library; the ones available on Nuget did not support streaming or dictionaries, so I took it to task and build a wrapper that supported both, and both together. Plus I built and packaged it up for Win-x64, Linux-x64, MacOS x64 &amp;amp; MacOS arm64.&lt;/p&gt;

&lt;p&gt;Hopefully some folks can get some mileage out of this one: &lt;a href="https://github.com/nebulaeonline/dotZstd" rel="noopener noreferrer"&gt;Github repo&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I also put down some thoughts on why I've been wrapping so many libraries over the last few months in case anyone cares to read: &lt;a href="https://purplekungfu.com/Post/13/wrapping-libraries-redux" rel="noopener noreferrer"&gt;Wrapping Libraries Redux&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Take care and happy coding!&lt;/p&gt;

&lt;p&gt;N&lt;/p&gt;

</description>
      <category>csharp</category>
    </item>
    <item>
      <title>Try the Hard Things</title>
      <dc:creator>nebulae</dc:creator>
      <pubDate>Tue, 01 Jul 2025 11:38:03 +0000</pubDate>
      <link>https://forem.com/nebulae/try-the-hard-things-2ege</link>
      <guid>https://forem.com/nebulae/try-the-hard-things-2ege</guid>
      <description>&lt;p&gt;Just a reminder to those out there trying to find their way in the world of software development- it's cool to try the hard things, even in failure the experience can be rewarding and educational to boot.&lt;/p&gt;

&lt;p&gt;Check out my post regarding &lt;a href="https://purplekungfu.com/Post/12/why-you-should-try-the-hard-things" rel="noopener noreferrer"&gt;trying the hard things.&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Maybe it'll inspire someone to roll their own crypto (kidding!).&lt;/p&gt;

&lt;p&gt;Take care,&lt;/p&gt;

&lt;p&gt;N&lt;/p&gt;

</description>
      <category>motivation</category>
      <category>career</category>
      <category>softwaredevelopment</category>
      <category>discuss</category>
    </item>
    <item>
      <title>Native Cross-Platform .NET Libraries</title>
      <dc:creator>nebulae</dc:creator>
      <pubDate>Tue, 01 Jul 2025 05:23:18 +0000</pubDate>
      <link>https://forem.com/nebulae/native-cross-platform-net-libraries-22io</link>
      <guid>https://forem.com/nebulae/native-cross-platform-net-libraries-22io</guid>
      <description>&lt;p&gt;I have been doing quite a bit of native library wrapping lately, so I figure there are others out there who might be in the same boat.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://learn.microsoft.com/en-us/nuget/create-packages/native-files-in-net-packages" rel="noopener noreferrer"&gt;Microsoft's guide&lt;/a&gt; is decent, but I wanted to throw together a quick-start guide for people like me who glaze over when I try to read Microsoft documentation.&lt;/p&gt;

&lt;p&gt;Please check out my writeup &lt;a href="https://purplekungfu.com/Post/11/cross-platform-native-code-in-net" rel="noopener noreferrer"&gt;here&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Happy coding!&lt;/p&gt;

&lt;p&gt;N&lt;/p&gt;

</description>
      <category>dotnet</category>
      <category>dotnetcore</category>
      <category>multiplatform</category>
      <category>coding</category>
    </item>
    <item>
      <title>Auth Rolling: Part Deux</title>
      <dc:creator>nebulae</dc:creator>
      <pubDate>Tue, 01 Jul 2025 02:25:49 +0000</pubDate>
      <link>https://forem.com/nebulae/auth-rolling-part-deux-11oj</link>
      <guid>https://forem.com/nebulae/auth-rolling-part-deux-11oj</guid>
      <description>&lt;p&gt;So it's been a week since I posted about rolling my own auth. I took a beating elsewhere on the web, but I also gained a follower and 20+ stars for my project (not to mention around 250 new cloners). I know there's a lot of cargo-culting on the web, so I didn't really let it bother me. &lt;/p&gt;

&lt;p&gt;Honestly, I don't think that people understand that I'm &lt;em&gt;actually&lt;/em&gt; writing a &lt;strong&gt;real Identity Provider&lt;/strong&gt; and not some amateurish login system.&lt;/p&gt;

&lt;p&gt;Anyway, I've been detailing my journey &lt;a href="https://purplekungfu.com" rel="noopener noreferrer"&gt;in my blog&lt;/a&gt; and through daily &lt;a href="https://github.com/nebulaeonline/microauthd/blob/main/CHANGELOG.md" rel="noopener noreferrer"&gt;changelogs&lt;/a&gt; in the Github repo, so I wanted to share here on Dev.to as well (the most recent 5 days of changelogs are in the main repo's README.md).&lt;/p&gt;

&lt;p&gt;If you missed the original blog post, it's &lt;a href="https://purplekungfu.com/Post/9/dont-roll-your-own-auth" rel="noopener noreferrer"&gt;here&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;My &lt;a href="https://purplekungfu.com/Post/10/auth-rolled-part-deux" rel="noopener noreferrer"&gt;follow up post&lt;/a&gt; has more technical detail and gives a solid progress update.&lt;/p&gt;

&lt;p&gt;And of course, the Github repo is &lt;a href="https://github.com/nebulaeonline/microauthd" rel="noopener noreferrer"&gt;here&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Tell me what you think. This is the biggest mostly-solo project I've done, and it keeps growing. Tests are starting to round out and I'm getting &lt;em&gt;very&lt;/em&gt; close to what I would consider feature complete for a v1.0 release.&lt;/p&gt;

&lt;p&gt;Feedback and constructive criticisms are welcome. I can take it, lol.&lt;/p&gt;

&lt;p&gt;Peace,&lt;/p&gt;

&lt;p&gt;N&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fpya96mvbb7vrqy7yh0qq.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fpya96mvbb7vrqy7yh0qq.png" alt="Image description" width="800" height="643"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fjhxy1opqywbi10x2e1oq.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fjhxy1opqywbi10x2e1oq.png" alt="Image description" width="800" height="681"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F47p7kdh8v378lbd57udd.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F47p7kdh8v378lbd57udd.png" alt="Image description" width="800" height="650"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ft2f06j2ynfiibqe3s1eo.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ft2f06j2ynfiibqe3s1eo.png" alt="Image description" width="800" height="679"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
    </item>
    <item>
      <title>I rolled my own auth</title>
      <dc:creator>nebulae</dc:creator>
      <pubDate>Mon, 23 Jun 2025 04:04:40 +0000</pubDate>
      <link>https://forem.com/nebulae/i-rolled-my-own-auth-p8o</link>
      <guid>https://forem.com/nebulae/i-rolled-my-own-auth-p8o</guid>
      <description>&lt;p&gt;So against popular advice, I rolled my own auth and wanted to share. It still has a long way to go, and I absolutely do not want to compete with the SaaS providers, nor do I want to compete with big, professional packages like KeyCloak and Authentik. I just wanted to write something that was easy to use and covered most small use cases.&lt;/p&gt;

&lt;p&gt;I put together a &lt;a href="https://purplekungfu.com/Post/9/dont-roll-your-own-auth" rel="noopener noreferrer"&gt;blog post&lt;/a&gt; detailing the journey that led me to do something so foolish, and I hope people can relate.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/nebulaeonline/microauthd" rel="noopener noreferrer"&gt;Github repo for microauthd&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Right now, it sports a dual-server, dual-key architecture, has web, cli &amp;amp; JSON/HTTP (faux REST) configuration/admin interfaces, and is written in C# (.NET 8) to allow for ahead-of-time compilation (AOT). The binary sits at 26MB, the memory commit @ rest is 57MB, and startup time is sub-50ms on Windows. Linux builds are similar, if not a bit snappier. I have not yet tested on MacOS, but expect it to run fine there too.&lt;/p&gt;

&lt;p&gt;I have basic libraries for Python &amp;amp; Go (very basic), and testing is done via Python harness.&lt;/p&gt;

&lt;p&gt;Remember, my goal isn't to compete with the big boys; I just wanted build something solid for my use cases. That went well, so I beefed it up a bit for more general usage. I just want to put something solid out there and iterate on it until it's ready for more general use.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fwr98kvmwgyzmtw22z3hn.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fwr98kvmwgyzmtw22z3hn.png" alt="Image description" width="800" height="413"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>programming</category>
      <category>devops</category>
      <category>security</category>
      <category>dotnet</category>
    </item>
  </channel>
</rss>
