<rss version="2.0">
    <channel>
        <title>wasp.dev</title>
        <link>https://wasp.dev</link>
        <description>The ramblings of a madman addicted to tech</description>
        <generator>Zine -- https://zine-ssg.io</generator>
        <language>en-us</language>
        <lastBuildDate>Wed, 06 May 2026 10:14:28 +0000</lastBuildDate>
        
            <item>
                <title>New Year, New Wasp</title>
                <description>&lt;p&gt;Well, 2025 is off to one hell of a start, isn’t it? We’ve already had &lt;a href=&quot;https://en.wikipedia.org/wiki/Starship_flight_test_7&quot; target=&quot;_blank&quot;&gt;two new spaceships&lt;/a&gt; &lt;a href=&quot;https://en.wikipedia.org/wiki/New_Glenn#Inaugural_launch&quot; target=&quot;_blank&quot;&gt;launching into orbit&lt;/a&gt;, the richest man in the world &lt;em&gt;totally not&lt;/em&gt; doing a fascist salute at the inauguration ceremony of the new president of the US, even the announcement of the Nintendo Switch 2 (&lt;em&gt;finally&lt;/em&gt;)!&lt;/p&gt;&lt;p&gt;Of course it all pales in comparison to the fact that &lt;a href=&quot;https://wasp.dev&quot; target=&quot;_blank&quot;&gt;wasp.dev&lt;/a&gt; now hosts &lt;a href=&quot;https://social.wasp.dev/wasp&quot; target=&quot;_blank&quot;&gt;my microblog&lt;/a&gt;, my &lt;a href=&quot;https://pixel.wasp.dev/i/web/profile/787637908625780737&quot; target=&quot;_blank&quot;&gt;Instagram replacement&lt;/a&gt; and my &lt;a href=&quot;https://books.wasp.dev/user/wasp&quot; target=&quot;_blank&quot;&gt;Goodreads replacement&lt;/a&gt;, all fully federated with the Fediverse and fully selfhosted on a fantastic OVH box where we (well, mostly &lt;a href=&quot;https://rbf.dev/&quot; target=&quot;_blank&quot;&gt;Roberto&lt;/a&gt;) have finally set up a good future proof install of NixOS.&lt;/p&gt;&lt;p&gt;So I thought that it might be a good idea to keep going with the creative flow and maybe pick the blog back up as well, though of course being able to configure a couple of Nix flakes is a completely different level of effort than writing even one post. But then I remembered the &lt;a href=&quot;https://100daystooffload.com/&quot; target=&quot;_blank&quot;&gt;#100DaysToOffload&lt;/a&gt; thingy that was making the rounds in my corner of the internet a couple of years ago, and reading the page made me realize that there’s one really good piece of advice in there.&lt;/p&gt;&lt;blockquote&gt;&lt;p&gt;Just. Write.&lt;/p&gt;&lt;/blockquote&gt;&lt;p&gt;You see, over the years I’ve drafted a million posts for this blog, ranging from the technical today-I-learned to the novella-length “this is my Emacs setup and this is why you should care”, but they’ve never ended up being “good enough” to be here, because for some reason I thought this had to be some kind of shrine to perfect writing where everything is perfectly edited, super relevant for everyone and of course interestingly written. Which is, of course, why my only published post is &lt;a href=&quot;https://wasp.dev/2020/06/change-all-exchange-online-calendar-permissions-with-powershell/&quot; target=&quot;_blank&quot;&gt;a tutorial for changing Exchange Online calendar permissions&lt;/a&gt;, clearly.&lt;/p&gt;&lt;p&gt;So I decided that maybe it was time to actually &lt;em&gt;write&lt;/em&gt; about stuff. After all I’ve just installed a billion different ways to publish content on my server, so I might as well have something to actually publish on it, right? And maybe those infinite drafts could actually be good enough if I just finished and posted them, instead of leaving them in the private repo behind this site - hosted on this same server, of course, on our &lt;a href=&quot;https://tehga.me/forgejo&quot; target=&quot;_blank&quot;&gt;Forgejo&lt;/a&gt; instance.&lt;/p&gt;&lt;p&gt;And hey, maybe I &lt;em&gt;do&lt;/em&gt; have something to add to the conversation. It might be interesting for someone to find out how - or why, god forbid I write something not technical for once - I had to patch the Nix flake of Bookwyrm to have it work on the latest release of NixOS, or someone might even be interested in reading my ideas about, I don’t know, the state of the world, or the fact that Cory Doctorow is basically an oracle and predicted most of what is happening in the world 15 years ago, you know, stuff like that.&lt;/p&gt;&lt;p&gt;After all it’s 2025, and it is about damn time that we start taking back the monopoly that Big Tech and social media have on dumb, useless content, right?&lt;/p&gt;&lt;p&gt;So yeah, here I am. Maybe I’ll write 100 posts in 100 days. Maybe I’ll write 100 posts iby the end of 2025. Or maybe I’ll drop off after 15 posts, because God knows what will happen.&lt;/p&gt;&lt;p&gt;And you know what? That’s &lt;strong&gt;completely fine&lt;/strong&gt;, because this is &lt;em&gt;my&lt;/em&gt; space on the internet. And it’s about time I do something with it.&lt;/p&gt;&lt;p&gt;This is day 1 of &lt;a href=&quot;https://100daystooffload.com/&quot; target=&quot;_blank&quot;&gt;#100DaysToOffload&lt;/a&gt;&lt;/p&gt;</description>
                <link>https://wasp.dev/posts/new-year-new-wasp/</link>
                <pubDate>Thu, 23 Jan 2025 16:45:10 +0000</pubDate>
                <guid>https://wasp.dev/posts/new-year-new-wasp/</guid>
            </item>
        
            <item>
                <title>Change all Exchange Online calendar permissions with Powershell</title>
                <description>&lt;p&gt;We have a script at work that runs every night and sets the default permissions on all Office 365 calendars to LimitedDetails, or “View availability data with subject and location” as the &lt;a href=&quot;https://docs.microsoft.com/en-us/powershell/module/exchange/set-mailboxfolderpermission&quot; target=&quot;_blank&quot;&gt;Microsoft Documentation&lt;/a&gt; says.&lt;/p&gt;&lt;p&gt;Sounds simple, right?&lt;/p&gt;&lt;p&gt;Well, it is. Or, rather, it was. But then things started breaking.&lt;/p&gt;&lt;p&gt;First we found out some users didn’t have the “Calendar” default calendar, but only had the italian localized “Calendario” folder. Ok, easy enough, we can work around it with an easy “&lt;strong&gt;calendar&lt;/strong&gt;” regex… except every user also has a Calendar Logging hidden folder, so we have to exclude that… still, simple enough: &lt;code&gt;Where-Object { $_.Name -like &amp;quot;*calendar*&amp;quot; -and (-not ($_.Name -like &amp;quot;*calendar*logging&amp;quot;)) }&lt;/code&gt; and we’re done.&lt;/p&gt;&lt;p&gt;Except no, not really. Because users can import other calendars and they will show up in Outlook in the calendar list… and in the Powershell cmdlets as well, obviously, and they will error out when trying to write permissions to them since they’re not an actual calendar but a link. So, time for another easy workaround: a little &lt;a href=&quot;https://docs.microsoft.com/en-us/powershell/module/exchange/get-mailboxfolderstatistics&quot; target=&quot;_blank&quot;&gt;&lt;code&gt;Get-MailboxFolderStatistics&lt;/code&gt;&lt;/a&gt; here, a little &lt;code&gt;Where-Object { $_.FolderType -eq &amp;quot;Calendar&amp;quot; }&lt;/code&gt; there and we’re done.&lt;/p&gt;&lt;p&gt;For now, at least. Because, obviously, people can have spaces in their name, right? Well, if only Powershell didn’t break up parameters with spaces… and so we have to combine the user’s identity to the calendar’s identity and wrap it all in quotation marks to ignore the spaces… this one is really easy though: &lt;code&gt;&amp;quot;$($Mailbox.Alias):\$($Calendar.Name)&amp;quot;&lt;/code&gt;.&lt;/p&gt;&lt;p&gt;Too bad by now the script has grown unreadable, ugly and workaroundish… and we’re not writing Bash here, Powershell is supposed to be readable and easy to comprehend! Ok, time to rewrite the script, this time &lt;em&gt;the right way&lt;/em&gt;!&lt;/p&gt;&lt;p&gt;So, here it is, in all it’s glory, a whopping four lines of Powershell that took a month to write and will probably be obsoleted soon since the new &lt;a href=&quot;https://docs.microsoft.com/en-us/powershell/exchange/exchange-online/exchange-online-powershell-v2/exchange-online-powershell-v2&quot; target=&quot;_blank&quot;&gt;Exchange Online V2&lt;/a&gt; Powershell module has just been released to GA:&lt;/p&gt;&lt;pre&gt;&lt;code&gt;foreach ($Mailbox in $(Get-Mailbox)) {
    $Calendar = Get-MailboxFolderStatistics -Identity $Mailbox.Identity -FolderScope Calendar | Where-Object { $_.FolderType -eq &amp;quot;Calendar&amp;quot; }
    $CalendarIdentity = &amp;quot;$($Mailbox.Alias):\$($Calendar.Name)&amp;quot;
    Set-MailboxFolderPermission -Identity &amp;quot;$CalendarIdentity&amp;quot; -User Default -AccessRights LimitedDetails
}
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;This snippet takes into account the possibility that a user has multiple calendars, the default one of which isn’t just called “Calendar” but can be localized into whatever language Office 365 likes. Oh, and the user can have spaces in its name, of course. Hopefully we’ve caught all corners this time…&lt;/p&gt;</description>
                <link>https://wasp.dev/posts/change-exo-calendar-permissions/</link>
                <pubDate>Fri, 05 Jun 2020 12:00:00 +0000</pubDate>
                <guid>https://wasp.dev/posts/change-exo-calendar-permissions/</guid>
            </item>
        
            <item>
                <title>Let&apos;s Build A CPU!</title>
                <description>&lt;p&gt;Welp, I’m building a CPU. At least, I hope. But, let’s rewind a bit.&lt;/p&gt;&lt;p&gt;A few months back, I realized most of the projects I had in mind and wanted to try at some point had something in common: I &lt;em&gt;really&lt;/em&gt; wanted to build a CPU, somehow. I wanted to make a GBC emulator, and that’s obviously a CPU. I wanted to build some kind of simulation of automated behaviour, and that’s also a CPU. I wanted to make a disassembler and decompiler, and guess what? Making a CPU includes those, if you’re not starting from scratch.&lt;/p&gt;&lt;p&gt;So, I decided to make a CPU. That was months ago, and I didn’t really make any kind of progress until today, except some basic research. Why? I’m convinced the main reason was that I had no one to hold me to my decision, since I told no one like most of my projects. Here I am now, telling &lt;em&gt;you&lt;/em&gt;, yes, &lt;em&gt;you&lt;/em&gt; specifically, to hold me to this.&lt;/p&gt;&lt;p&gt;I want to make a CPU. From scratch - or at least reimplement “clean room style” an existing CPU, first in software then maybe on a FPGA board if I ever get there. The roadmap currently looks something like:&lt;/p&gt;&lt;ul&gt;&lt;li&gt;Find an easy to replicate and understand architecture - all signs are currently pointing to the &lt;a href=&quot;https://en.wikipedia.org/wiki/MOS%5FTechnology%5F6502&quot; target=&quot;_blank&quot;&gt;6502&lt;/a&gt;&lt;/li&gt;&lt;li&gt;Find as much &lt;a href=&quot;http://6502.org&quot; target=&quot;_blank&quot;&gt;reference material&lt;/a&gt; on it as possible&lt;/li&gt;&lt;li&gt;[We’re here]&lt;/li&gt;&lt;li&gt;Learn to code in ASM for the selected architecture, and get &lt;em&gt;really&lt;/em&gt; comfortable with it&lt;/li&gt;&lt;li&gt;Write a disassembler for the selected architecture, and get it working &lt;em&gt;really&lt;/em&gt; well&lt;/li&gt;&lt;li&gt;Write an emulator for the selected architecture, and get it working &lt;em&gt;perfectly&lt;/em&gt;&lt;/li&gt;&lt;li&gt;Pick the simplest instruction for the architecture and think about how it was implemented&lt;/li&gt;&lt;li&gt;Implement the instruction in a logic simulator&lt;/li&gt;&lt;li&gt;Repeat the last two steps for a few more instructions&lt;/li&gt;&lt;li&gt;Build the rest of the instructions upon the easy ones implemented in the simulator&lt;/li&gt;&lt;li&gt;Optimize the design, if possible&lt;/li&gt;&lt;li&gt;Build the design into an FPGA, if possible - while learning about FPGAs since I know nothing about them :D&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;Of course, this is going to take a while - I’m hoping to get at least a complete emulator done in a few months, if I stick with this, and then decide where to go from there. There is a massive amount of work to do, and &lt;em&gt;a lot&lt;/em&gt; of stuff to learn, considering what very little I know about ASM programming I learned back in high school and I know basically nothing about CPU design and low level architecture.&lt;/p&gt;&lt;p&gt;I’m probably going to use C# for the non ASM parts - the disassembler and emulator - since it’s the language I know best and this is not a language learning exercise, so I don’t want to waste time on useless stuff. The code I write is probably &lt;em&gt;not&lt;/em&gt; going to be open source, since it doesn’t really contribute anything to anyone’s project except maybe causing some headaches for experienced ASM coders asking themselves why I did stuff the way I did… but I’m gonna post snippets here, and probably dump the complete projects (ASM programs, disassembler, emulator, …) on Sourcehut when they’re done. I just don’t want to maintain incomplete stuff out there on the internet, since that causes significant overhead. I might stream parts of the process on Twitch, if I ever get around to setting up my channel :^.&lt;/p&gt;&lt;p&gt;The first goal I’m setting for myself is to finalize the architecture decision - though that seems pretty final since the 6502 looks simple enough and the instruction set is very small and extremely well documented - and build a few of the “usual suspects” to familiarize myself with the ASM syntax: Fibonacci sequence, Collatz conjecture, Project Euler’s solutions and so on.&lt;/p&gt;&lt;p&gt;I’ll post back here for the big milestones and for interesting stuff I find out, and I’ll keep Twitter updated with anything noteworthy - if I remember Twitter exists for long enough this time, so subscribe to the &lt;a href=&quot;https://wasp.dev/posts/index.xml&quot; target=&quot;_blank&quot;&gt;RSS&lt;/a&gt; or follow me on &lt;a href=&quot;https://twitter.com/nicolapcweek94&quot; target=&quot;_blank&quot;&gt;Twitter&lt;/a&gt; for updates on the project!&lt;/p&gt;&lt;p&gt;Oh, and the “BCP” tag stands for Basic CPU Project. I couldn’t come up with anything better, and a quick search didn’t turn up any conflict. And BCP sounds nice as an architecture name, right?&lt;/p&gt;</description>
                <link>https://wasp.dev/posts/lets-build-a-cpu/</link>
                <pubDate>Mon, 16 Dec 2019 12:00:00 +0000</pubDate>
                <guid>https://wasp.dev/posts/lets-build-a-cpu/</guid>
            </item>
        
    </channel>
</rss>
