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, goofy altlangs, group theory
-
LocationBudapest, HU
-
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

From the creators of devRant, Pipeless lets you power real-time personalized recommendations and activity feeds using a simple API
Learn More
-
In Visual Studio you can bind a shortcut to "global member search" which is a fuzzy search popup among every member of every type in the solution, and with the VSCode keybind set it's C-S-O by default. They know exactly what enterprise developers need.4
-
man, every prediction about the day's work during standup makes me look stupid. I'll have to learn to shut the fuck up the hard way.1
-
Got moved to higher prio project
- disastrous security
- Built with Knockout.js in 2016
- entire folders of business logic duplicated 3 times to allow for the business requirements of separate regional branches to evolve independently
- Application server in ASP.NET Core MVC but the *real* backend is a WCF service
- there is an outstanding ticket for a list view that fails to load because the API response exceeds the .NET serializer's maximum length. The proposed solution is to stream it down to the client which then collects it into a JS array and renders a DOM node for all 6k rows
- mgmt wants to scale up to the entire European region, not with a single installation but still with a single codebase
- the Germans want interactivity with Relay
- prod database copied around and cleaned to establish new environments, migrations lost to time
- read-only queries have a tendency to deadlock18 -
Today I managed to cut myself under my fingernail by grabbing the door handle to my room the wrong way. The world is a dangerous place.5
-
I had to debug a reference loop in my Rust codebase and I was gearing up to it all week assuming that it would be a nightmare. It turns out that 1) it was 4 refloops, not one and 2) each of them took about 10 minutes to find. The benefit of no GC is deterministic deallocation timing, and this means that you can just set breakpoints or print statements to the point where the object might get freed and see if it actually does.
Plus, in contrast to GC, this transparently works across programs; Usercode holds a reference to a tuple and there's a map deep in the interpreter to document that std holds references to the tuple elements, but the fact that std references the elements because of the tuple, and that the elements must be freed once the tuple is freed, is only known by std. However, this ends up behaving exactly as if the relationship was held in the interpreter, so users of the public API don't need to know about it.11 -
oh hey, if it isn't the same architectural mistake in the fourth fucking iteration that I keep forgetting to do right first time whenever I rewrite the code to fix unrelated problems.
canonicalize input as early as you can so that representational distinctions don't have to be drilled through business logicrant orchid with important improvements but still it has no users am i actually insane i rewrote the same project four times1 -
To add references between projects (build units like DLLs or EXEs) within a Visual Studio solution, you need to open a popup from the context menu on a child node of the referring project in the VS solution tree, the child node set and the context menu have a different layout depending on whether that project follows the 2021 dependency system. The popup freezes VS so you can't keep it around, and it does six other things related to dependencies, except for NuGet which for some reason masquerades as an editor tab instead (equally inconvenient for different reasons). In the popup you tick checkboxes in a massive list of every project in the solution, then you close it. This doesn't save the changes and there's no explicit way to save changes to a csproj file because VS manages csproj files and presents them exclusively as visual forms. You can save either by "Save All", or by unloading the project which prompts you about unsaved changes and then reloading it to be able to actually initiate a build it's included in.2
-
Async Rust doesn't have a great story for Iterator::map just yet. I wrote a mini-article about it:
https://lbfalvy.com/blog/...4 -
I cannot express how much I don't want businesses who have my phone number to randomly pick an instant messaging account registered with that phone number for their correspondence. I can pick an SMS app, I own my messages as data and so I am fundamentally free to backup, sync, and view them as and when I want. The same is not true for Viber which I only registered because my mom's tenants literally don't use anything else.2
-
I''m experimenting with Tailwind right now, it's really not that bad, and their slightly different factoring of concepts is definitely more intuitive than CSS. But I wish it supported comments in classes; could just be a plugin that throws away its input.12
-
I think the most important lesson you have to learn before discovering new Rust becomes easy is that edge cases matter, because formal descriptions almost never start with the most visible attribute; they start with the strongest one.
Almost every datastructure is Unpin, or should be at any rate. The benefit of Pin is that you can get rid of that *almost*, and define your operations for arbitrary sections of program state.1 -
It occurred to me that I'm making actual money now and I can pay for my shit, so I tried Youtube Premium, but their background play is poorly implemented and defaults to a floating window that I need to cancel in a finnicky, android-vendor-specific way. How do you consistently make something that much less usable than an unpaid open-source developer who also has to reverse-engineer your API and circumvent your anti-user-choice obfuscation measures? NewPipe would be a success if it could just play the videos in full screen with no controls, and yet it has a better background play story than the actual provider. Fuck centralised software12
-
For some unfathomable fucking reason, rust-analyzer decided to dump formatter crash reports into the worktree alongside the file that failed to format. How do I even begin to investigate this?3
-
My phone screen died very suddenly so I had to power on an extremely old phone to serve as an alarm clock.
What is it with Android and completely dying after a couple years' downtime?
Anyway, I think the only reason I replaced this phone was that it was insufferably slow and the immediate excuse to get rid of it was that the charging port corroded. So glad I keep these things around, even after moving house 4 times.14 -
Ughhh I wish Rust had stack banging, do I really have to write the deranged bullshit below just to be able to safely recurse on user input?24
-
It often feels like the logic and the equivalent final application code have nothing to do with each other.
Logic: Find the only element in this list that matches criterion, or the first element in this other list, or none. If the first list has multiple matches, fail.
Application: Produce information about the criterion checks for all elements in both lists for info logging. Find any elements in first list that match. Save the number of matches for an optimization that relies on a lot of assumptions about the search criterion that are only ever expressed in doc text. If one, return, if multiple, fail. Otherwise find first match in second list, produce debug hint on why the preceding elements in that list didn't match by aggregating the criterion check info. If multiple matched in second list, check highly specific interdependency, and if absent, produce warning about ambiguity. Return first match if any.
The first can be beautifully expressed as a 5 line iterator transform. The second takes 3 mutable arguments (cache, logger, criterion because it also may cache and log), must compute everything eagerly and has constraints that are neither strictly necessary for a correct implementation nor expressible in the type system.2 -
I'd had some weirder experiences with Rust where errors would surface late or in odd places so now I can't tell whether this is actually legal or the error is being discarded because it's in dead code.
When did Rust start extending the lifetime of temporaries outside enclosing blocks to match their borrows?
(in case it''s not obvious, pattern and full_pattern are both slices)7 -
I think I'm beginning to hate my language and I'm struggling to find the motivation to work on it.
So, I started playing with SonicPi because it uses Ruby which I both hate more and can't fix, and it does something I want to eventually use Orchid for.
A therapist would probably have a field day with my self-motivation techniques.9 -
I plainly told the manager responsible for programming that we all use web extensions and there's just no way to effectively prevent programmers from running whatever software they deem necessary, so I'm suggesting to allow them in Windows group policy purely as a matter of efficiency.
It has only just occurred me how much I'm relying on his better judgment not to try and crack down on this.
Wish me and my team luck.rant web extensions organizational blind spots extremely neurotypical behaviour dark reader ublock origin27 -
It baffles me that even now people still use ChatGPT to learn new things. LLMs are the antithesis of learning. They're inaccurate so you're left reasoning from flat out incorrect principles, they save you from encountering neighboring information to the answer you seek which is a central mechanic for developing a mental model, and the further away you are from common thought patterns the less their training applies which makes them fundamentally and unfixably terrible at detecting and correcting misunderstandings.38
-
Our application calls Fucking Microsoft Excel over COM to figure out what letters denote year, month, and day in the current locale.
Hint: date format strings are highly standardized so it's always y, m and d8 -
Boring uses of artificial super intelligence:
- eternal peace and prosperity
- hostile world domination
- genocide
Fun uses of artificial super intelligence:
- ALL the paperclips
- time travel games where you can meet accurate behavioral models of your future self taking into account memories of this same encounter
- trolling alien civilizations by broadcasting assembly instructions for it7 -
Image aspect ratios are standards. Please don't invent one if you can't commit to the number, the feature, and the app for 5 years.
I don't want to design a custom header image for my Google Doc just so Google can remove the feature in a few months. A company that plays as fast and loose with features as Google should just have a dynamic layout and make room for whatever image I have on hand.1 -
If I'm moderately happy in my current company but I would switch for a significant raise that offsets the relative risk, does it make sense to claim that my current salary is the bottom end of the desired range so as to encourage potential employers to start the negotiation from that point? I ask this especially because I find the act of haggling stressful.4
-
The best thing about SkyRant is that it shows the unread notifications marker in the main text font and not alarm red, so when the counter bugs out and stays on 1 it doesn't make me feel like I need to act on something that doesn't exist.1
-
We need a list of functions with an associated string, keyed by a sequential int. Neither can change between program versions. In fact, any changes align perfectly to program versions.
The datastructure: a list of string and func with statically known parameters
The solution my PO insists on: a class with static methods that have an attribute for specifying the number, and a database table of number to string. Whenever you need to pass around the list, you pass around a Type object of the class.6