Details
-
AboutChief Procrastination Officer, Keeper of The Keys to My Father's Flat, proud holder of a mediocre BSc. Analytical fundamentalist Manufactured: Budapest, 2001 Calories: 70,000 May contain traces of other viewpoints Matrix: @lbfalvy.matrix.org
-
SkillsTypescript, C#, Rust, Orchid, abstract algebra
-
LocationGuildford, UK (also Budapest)
-
Website
-
Github
Joined devRant on 5/18/2018
Join devRant
Do all the things like
++ or -- rants, post your own rants, comment on others' rants and build your customized dev avatar
Sign Up
Pipeless API
![](/static/devrant/img/pipeless-devrant-banner-white.png)
From the creators of devRant, Pipeless lets you power real-time personalized recommendations and activity feeds using a simple API
Learn More
-
So fun fact about message-passing plugin APIs, everything becomes a parallel programming problem. My lexer (the part of an interpreter that recognizes fundamental syntax elements) spawns a callback thread with request and reply channels, and then messages a plugin which is able to either talk to the callback thread or message the original thread with a successfully parsed token or an abort.
It has just occurred to me that plugins are under no obligation to sequence their requests to the callback thread, which means that having one channel for requests and one for responses no longer suffices; the requests need to each contain their response channel. -
in a moment of enlightenment, I realized what problem Cow (copy-on-write smart pointer) actually solves.
Time to touch every file I guess4 -
I played around with Git Rebase today to learn a bit about it, and it was fun, but in the process I completely obscured my process and erased a commit that has a published artifact associated with it. What remains is a few incremental preparation commits hoisted up from today's cleanup, then a pair of commits on two projects both of which only compile against the version of the other repo built from the other commit.6
-
election period always makes me cynical (more cynical than I already am that is).
Apocalyptic fantasies are indulgent because they suggest a catastrophe that might end the world. The dull reality is that the world doesn't end, and you just have to go about your life with a new standard.4 -
I actually found a use for Outlook's scummy default behaviour to open links in Edge and not the default browser.
On my company laptop I mainly use Librewolf because it allows installing plug-ins despite group policy. I only use Edge for Azure DevOps and company portals because MS SSO doesn't work with Librewolf for some reason.
Because Outlook disregards the OS settings and uses Edge by default, MS software forms a sort of bubble, and I can freely set Librewolf as my default browser.9 -
I love reading code samples where the author was clearly very talented and up to the task, but had clearly used a different language up until that point, so they write with a strong accent. The C# codebase I'm working on right now for example had clearly been written by Delphi programmers6
-
Zoom free tier calls end after 40 minutes.
Idea: pwyw conference software where the call ends after 40 minutes if the host isn't paying €5 more monthly than everyone else in the call. There is no way to discover whether this is a limited call until the 40 minute mark, and there's no way to discover who outbid the host at all except by getting everyone to show their bank statement.1 -
My department head is shitposting in the company slack on the middle day of a 3 day weekend. I guess it doesn't really count as encouraging overtime because it's not work-related, but come on, does he really have nothing better to do?2
-
What's the message passing IPC with the least RTT for messages that are in the 16-32 byte range? It's gonna run approximately once per command in an interpreter.5
-
My new favourite RUNTIME c# error, evidently thrown by the standard library because the string is not present in the project:
"no parameterless constructor defined for this object"6 -
group policy prevents me from installing browser plugins at work. For crying out loud, I'm a dev! Any set of permissions that enables me to do my job would include an escape hatch for this! I can just rebuild Firefox without group policy support! What the fuck is this meant to achieve besides waste company resources!?4
-
I made a very obvious realization since the last time I rewrote Orchid; the 3 year project that has now become an eloquent documentation of my learning process; Types aren't free. Sure they're free at runtime, in fact the more you have the less the language has to work to separate values, but they generate significant cognitive load.
Oftentimes it's better to have one enum with 12 variants 3 of which are specific to a narrow case to be able to define operations for this enum once, than it is to have 3 distinct enums of 10, 11 and 8 variants respectively, and to have to define common operations (or the dispatch part anyway) thrice.
As for my previous observations about catchall abort acting like the new type abort, I still think that, and I still think that this is only justifiable if the number of invalid variants is low enough in every case that you can list all of them before the abort.4 -
some of the smartest people I know are about to fail a CS bachelor's
what the absolute fuck is up with Hungarian higher education3 -
I specifically asked my employer when fix time is, whether I get a work laptop, and whether WFH is optional, because
- I'm a night owl and don't function until 10am
- my personal laptop is slow as shit and I don't want to put Windows on it
- I don't have a decent chair at home yet
- client team agreed on fix time starting an hour before what's in my contract, and PM made it clear that they expect to be able to call us an hour before and two hours after (that's what fix time means unless I misunderstand)
- I got a crap backup laptop after a week of moaning, with promise of a better one two weeks from now
- I won't get an RFID card for weeks, so I effectively can't enter or leave the client offices12 -
I've been trying to define a trait `Inherits<T>`, a trait `Extends{ type Parent }` and an arbitrary amount of scaffolding around it such that
- the scaffolding for a given type only has to acknowledge that type, its parent and the types of which it is a parent
- `T: Inherits<U>` if a chain of `Extends` leads from `T` to `U`
I suspect that this is impossible, but I'd seen Rust traits bent to do crazier things, so if you know of such a system or can come up with a way to implement it despite the orphan rules, I'd be over the moon.2 -
My bandwidth is ordinarily a few hundred kbps, but whenever I torrent it can reach up to 2 mbps, while all other traffic from me and my housemates is stuck in the single digit kbps range.
What does BitTorrent do so fucking well, and how can other protocols replicate this success? Would the total available bandwidth be different if every protocol did whatever enables BitTorrent to summon bandwidth from thin air?10 -
I'm looking for a licence
I'd like to publish open-source projects with a licence to the extent of "free without restrictions for noncommercial use forever, contact me for anything else", the idea being that if you intend to make a profit you should care enough to email the authors of complicated things your business relies on and agree on a fee or share of profits.
I'm unsure how to handle pull requests. Asking for right to relicence the patch could be an option.
do you know a licence with similar ideas?6 -
So apparently I'd been hired 2 emails ago, only because the email said "I've been told that you're starting with us in April" and not "you're hired" I didn't realize it. Extremely neurotypical behaviour.16
-
Diesel is an incredibly beautiful ORM, but the size of the DSL means that despite Rust's state-of-the-art IDE integration I'm back to editing code, waiting for it to compile (as soon as I stop typing) and changing random shit if there are red squiggles.
The error messages are totally unreadable, all in-code references point me to meaninglessly generic abstractions, and a good portion of the impls are generated by macros so I can't even look at an actual final definition.
The confidence that if it compiles it'll run is stil there, but nothing else.11 -
I love the Rust community but this can't seriously be part of an example as in expected usercode for Yew.21
-
A production build of the hello world example for Blazor takes 5 seconds to launch. Half-baked, rickety sad excuse of a technology built in a crunch and never rebuilt correctly.
The simple yet surprising reason why it's so fucking slow is that Microsoft couldn't figure out a way to compile C# to webassembly while also beating others to market so they compiled the runtime to webassembly instead. The Fucking IL interpreter.13 -
Every tool in the JS ecosystem goes out of its way to support faulty or outdated variants of every interface, yet nothing is actually forgiving or fault tolerant. Publishing packages is exactly as agonizing as consuming them, even though both sides have tens of switches and probably hundreds of automatic heuristics to align themselves to any hypothetical setup on the opposite end.2
-
I'm still not over how LINQ is defined as a thin wrapper over both IQueryable (which can be efficiently queried) and IEnumerable (which can only be iterated), but IQueryable extends IEnumerable, so if you execute one unserializable operation anywhere in a query issued to your database it'll merrily pump whatever temporary collection happens to reside on the boundary through the C# program to execute that call on each row and process the rest as an IEnumerable.5
-
For the past 5 odd years my Bluetooth headphones wouldn't connect to my laptop properly and I had to issue a second Connect command while the first was pending to get it working. I even wrote a script to automate this: https://github.com/lbfalvy/...
Today Bluez finally released a patch for this. That's right, after many years, today the issue got fixed; Connect now returns an error if a call is already pending.
My headphones still don't work, but my workaround is now correctly recognized as invalid input.13 -
You know that experience when you update a modern desktop app that uses a zillion abstraction layers and the first time you do anything it freezes for a little bit while the heavily deferred metaprogramming and asset transformations are executed and cached?
I always imagine polystyrene balls flying all over the place.1 -
Thanks, that smiley is direly needed to cope with the bizarre language that is the ABI stable subset of Rust.4