Oleksii Holub 🇺🇦
@tyrrrz.me
🍋 Reality is lemons and the Internet's my lemonade • I write code so you don't have to • Opinions are NOT my own — whose voices are these anyway? • Bink in lio: https://tyrrrz.me
So one of my mods fell victim to this attack. I got contacted by someone claiming to be them, on a second account, where they asked permissions to delete their old messages.
Discord has an absurdly easy-to-manipulate content moderation system that's constantly used to attack people: 1. Write an innocent message to someone 2. Wait for their response 3. Edit your original message to completely change the context and meaning of the conversation 4. Report the user
Discord has an absurdly easy-to-manipulate content moderation system that's constantly used to attack people: 1. Write an innocent message to someone 2. Wait for their response 3. Edit your original message to completely change the context and meaning of the conversation 4. Report the user
I really dislike the design behind CancellationTokenSource.CreateLinkedTokenSource. It's confusing. You're effectively encapsulating multiple cancellation sources in one instance, yet only control one of them. At the same time, passing that token erases context about any of its parent/base tokens.
The USB controller in my Yubikey 5C stopped working today, ~930 days after purchase. Just a data point to consider.
So many build issues are fixed by: $ dotnet build-server shutdown
It's really annoying that @nuget.org is forcing Trusted Publishing instead of API Keys when the former doesn't work anywhere except GitHub Actions, and even there it's not fully supported.
GitHub updated how their Copilot usage is metered and now I'm all out of credits after only 8 days 😄 Needless to say, my productivity is in the gutter.
I've released Binternal, a development package that lets you turn any external dependency into a private (internalized) dependency github.com/Tyrrrz/Binte...
Honestly, with how many AI-assisted PRs I've been getting recently, I'd implore the authors to just donate me their tokens instead and skip the middleman.
Don't you love it when your open-source project gets external contributions <3
It's painful being a software developer. When someone else's software doesn't work well, it's not enough to just criticize it; we also have to build our own.
AI-assisted software development forces me to re-establish my relationship with code. Tasks that used to take days or weeks now take hours, but in the process the code feels... idk, like it's lab-grown if it makes sense.
Also want to take an opportunity to shout out a project of mine that's always been in the shadows: github.com/Tyrrrz/PolyS... It provides polyfills for ~500 BCL APIs, allowing you to write modern C#/.NET code on targets as old as .NET Standard 1.0 and .NET Fx 3.5. I use it in all my libraries ✨
GitHub - Tyrrrz/PolyShim: Collection of polyfills for projects targeting older versions of .NET
Collection of polyfills for projects targeting older versions of .NET - Tyrrrz/PolyShim
github.com
I've decided to aggregate all utilities/extensions I use across different C# projects into a single source-only package. I'm surprised there were so many, but it totals 130 individual files. Feel free to copy-paste what's useful to you. github.com/Tyrrrz/Power...
I really want to use VSCode for .NET development but Omnisharp/C# Dev Kit just fucking sucks. Is there a better plugin out there?
Isn't it cool/weird that you can use features like ValueTask<T> and IAsyncEnumerable<T> on a legacy .NET Framework version from 2010?
C# 15's Union design looks really good. It's been a while since a new feature didn't look clunky and out of place. devblogs.microsoft.com/dotnet/cshar... And it's easily polyfillable too
Explore union types in C# 15 - .NET Blog
C# 15 introduces union types — declare a closed set of case types with implicit conversions and exhaustive pattern matching. Try unions in preview today and see the broader exhaustiveness roadmap.
devblogs.microsoft.com
Single-file command-line apps got even easier with CliFx. No setup or `Main()` method required.