Joined devRant on 9/24/2017
Do all the things like ++ or -- rants, post your own rants, comment on others' rants and build your customized dev avatarSign Up
I'm teaching myself React lately since it's what my work mostly uses. I'm in backend but having used Vuejs for a couple of years I figured I'd have a head start.
Man, it's painful to go from one library to one that has issues which became the motivation for building the library I already know. I keep catching myself in wanting to make little helpers to basically make the Vuejs syntax for React.
The first time i tried JSX I had a reaction similar to that of when I tried writing inline assembly in C; "heh! That's funny".3
The main benefit of an office environment for me is - conversely - the best part of working from home. It's super useful to be able to just summon someone for a 7 minute pair programming session, but i have a much greater focus at home when I know I won't be interrupted during work hours.
This whole situation is definitely making me want to work more from home and I'll probably try to make it a regular occasional thing in the future.1
Holy mother of butts. Two weeks. Two weeks I've been on and off trying to get hardware rendering to work in xorg on a laptop with an integrated nvidia hybrid gpu.
I know the workarounds and it's what I've been using otherwise. Nouveau without power management or forced software rendering works fine. I also know it's a known issue, this is just me going "but what the hell, it HAS to be possible".
The kicker is that using nvidias official tools will immediately break it and overwrite your xorg.conf with an invalid configuration.
I've never bought an nvidia gpu but all my work laptops have had them. Every time i set one up I can't resist giving this another shot, but I always hit a brick wall where everything is set up right but launching X produces a black screen where I can't even launch a new tty or kill the current one. I assume it's the power management tripping over itself.
The first time I tried getting this to work was about 3 or 4 years ago on a different laptop and distro. It's not a stretch to say that it would be better if nvidia just took down their drivers for now to save everyone's time.8
"If you don't return something in the catch block it will crash"
Isn't it interesting how a sentence can be true yet so infuriatingly wrong.3
My biggest dev epiphany was also my dumbest one. We were working on a payment system for a roadside rescue company where an employee would register payments "in the field".
The challenge was automating input with typeahead and autocompletes in order to lessen the workload as manual input had to be an absolute minimum; this will be used by truck drivers/mechanics as they are trying to hurry to the next customer who has been waiting for 3 hours longer than we said we'd take.
We managed to make the invoice path first (customer has not paid, employee logs personalia needed for billing), but when it came to "paid on site" we almost upended the entire system trying to find a way to fetch user personalia outside of the invoice path.
Neither of us realized it during the days we were banging our heads against it. Realizing we don't need to make an invoice for a job that has been paid for was equal parts relief and utter embarrassment.
Probably my greatest lesson in how important it is to pull my head out of the code once in a while, and to ask myself what I'm trying to do and why.
Ever open a mail with a body consisting only of "can you look into this?" before noticing a mail exchange is attached, and in it is a week long discussion about an issue new to you where someone has said on your behalf that it will be fixed by the end of the day?
If I'm lucky I might know if someone - and if so, who - is working (or has worked) on that aspect of the system by the end of the day.
There are no words in any language I know that will sufficiently describe how nonexistent the chances are in any of the infinite amount of parallel alternate universes where I implement and deploy a fix by the end of the day.
But sure, I'll look into it.2
We have a long standing, transient, occasional error in our system that we haven't quite been able to (or have had the time to) pin down.
I was thinking out loud with our project lead what the cause could be, which - before I realized it - segwayed seamlessy into me being tasked with hotfixing it in order to unblock some other tasks that people expect to start working on tomorrow.
I think I'm starting to see why people use inanimate objects for rubber ducking instead of other devs. Here's hoping my theory checks out.2
We have a standalone api acting as a legacy adapter to our actual api, and as you can imagine it's a festering hellpit of hacks and workarounds which is not intended to be maintained after its EOL.
I recently had a dream - more of a nightmare - where our actual api had to support the legacy calls indefinitely.
I told our PO about it as a funny anecdote and he gave me 3 days off.
Nothing distracts me more than people eating in an otherwise quiet office. It makes me so livid that i usually leave the room for a coffee refill or bathroom break and hope they are done by the time I'm back.
I can code while holding a conversation, I barely even notice when people do phone calls or skype meetings next to me, but hearing people chew and breathe through their nose while smelling their lunch just annihilates me.5
While investigating alternatives for translating a query string to a dotnet expression I discovered that roslyn has runtime eval of string as verbatim code.
I had no idea a feature could make me this uncomfortable. It's like discovering an armed bomb under your bed that's "there if you want - it has its uses, just be careful".
At least you have to explicitly reference a package for it. Promise to kill me if I ever am tempted by it.
I finally have a week off and the first thing I do is start a project exploring some solutions for the project at work send help.
Going a little outside the format of the topic, but I remember the moment I realized I wanted to pursue code.
I was really into Transport Tycoon and I was trying to pin down exactly what I enjoyed about it. There's something about that process of inventing a solution before you pull back, look at it, and go "holy shit, it works". I can't think of any other career where I'd get that same fix.
Having some issues with my laptop seizing up in graphical linux desktop environments, probably due to some peripheral power management. I saw there was a bios setting for "make linux work" but I couldn't find mention of it in the manual (why is this usually so hard to find, anyway?), so I googled a bit before I messed with it.
Worst case I guess I'd just reset the bios, but it always blows my mind seeing issues like these go seemingly unaddressed. That's a 12 page discussion from 2018 where you brick your laptop - a fairly high end one at that - by flipping a bool and the latest response is "Same issue here".
Is it just PR practice to not acknowledge these things or is it likely that they are legitimately unaware? Does it not get escalated properly or do they reckon there's not enough benefit to address it?
Whatever the case, my faith in Lenovo is certainly starting to show cracks. I used to see it as the "correct" laptop brand, but nowadays I'm equally iffy about all of them.3
"Expenses Graph of That Time I Tried Running Kubernetes On A Cloud Service" -2019, artist unknown (colorized)
If you look closely, you can get an impression of the moment of "screw this, I'll look at it some other time".4
1 - I wish clients would make better specs
2 - I wish I was better at asking for specs
3 - I wish I was better at sticking to the specs1
Just heard one of those little tidbits in passing about a detail for a spec which will require me to restructure the db and rework one of the core functions of the api and user client. Turns out one of the points in the original spec that was an "always" was actually a "usually, but-".
"sure, I'll see if I can get started on it tomorrow" because I'll spend today crying.
Not in prod today, but was part of a group project that we handed in and which got us an A.
The project was to write a PID controller for a robot that would drive along a track using a sensor to follow markings on the floor. During development we were drawing graphs of the PID parameters and sensor input every tick, which caused a bit of lag but no worries - we'll turn it off for the trial runs.
Imagine our pikachu shock meme when we turned off the graphs and our calibrations were suddenly *way* off since we had been oversteering all along to compensate for the lag.
There wasn't enough time to optimize it before the deadline and using sleeps didn't produce the same "type" of lag, so we just made the graph minimize itself when it opened. To this day I wonder if the professor ever saw it or if we got the A despite it.
I couldn't figure out why my server went down all of a sudden.This seems suited for this week's rant.
Expert fullstack solutions architect here.3
So here's a rant I never thought I'd write.
I'm pretty happy with my current job. I'm working for a small non-tech business where I'm making a complete solution by myself. It's pretty chill just coding away all day and being my own project owner and manager.
The iffiest aspect is that my boss(es) don't know what (or if) I'm working on when I'm implementing a vital logging system, fixing bugs that cropped up due to implementing necessary, baseline security, and so on. They see a login page and figure the entire project is shippable, and when the login breaks because I'm configuring the wsgi for https the reaction is "it worked, why mess with it; just put it how it was". But I digress.
Today I got a job offer with a pay increase that made me exclaim "are you fucking serious" irl, in a business with a more professional environment consisting of senior devs, and with benefits I had never heard of.
I can't not accept, but that means just legacying the entire project I'm working on here. They'd basically be left with nothing after shelling out wages for me for these few months. Keep in mind this is a fairly small business who debated if they could afford this to begin with.
Disregarding whether they are willing/able to make it hard for me to leave, it stabs me in my scrubby dev soul to up and leave on a personal level.
They had a 3d printer at the other place though.15
I used to associate logitech with quality, something you could spend a little more on and feel comfortable knowing you made a safe and robust choice.
For quite a few years now they've done that gamer branding thing where I'd be embarrassed to have that stuff seen on my desk - at ridiculous prices and for features I won't use. Their consumer/office grade stuff is alright but unremarkable.
I'll gladly pay more for quality and I'm super happy with my Das keyboard, but I switch out my mouse probably every year. I can't deal with mushy buttons and I'm not paying extra for marketing, branding, and rgb lights that I'll then be spending time on trying to disable properly.
I digress, but I'm legitimately curious to try a trackball. I know people kneejerk at it, but I've heard from a couple of people who prefer it when they primarily use their keyboard anyway.1
Just spent a week creating a distributed api architecture which I found out won't work due to a singular issue which can't be solved - not unless I hack stuff to a degree where I might as well write my own frameworks.
I've been aiming the user application's requests towards my wsgi, which based on a custom header will proxy it towards the correct api. Each customer base has their own api and dataset, but they all visit the same address.
I've handled CORS manually, just picking up when there's an options request, asserting the origin, then returning the correct headers. Cool everyone's happy. Turns out, socket.io includes session id and handshake info as part of their options preflight, which I can't pair with my api header (or cookie, for that matter) which means my wsgi doesn't know where to send it. You get a 400! You get a 400! You get a 401! </oprah>
So my option is to either roll my own sockets engine or just assign each api to a subdomain or give it some url prefix or something. Subdomains are probably pretty clean and tidy, but that doesn't change having to rewrite a bunch of stuff and the hours I spent staring at empty headers in options preflights.
At least this discussion saved me some time in trying to make it work. One of my bad habits is getting in those grooves of "but surely... what the hell, surely there's a way. There has to be"
Probably the smallest, most inconsequential rant I'll write here, but - is it that hard for websites with a main search input or login field on their landing page to put its tab index to 1?
I mean, my mouse is all the way over *there* ~
I've been getting a lot of mixed input on this lately and I'm curious to gauge the public opinion on it.
For key identifiers in key/value pairs (eg. days of the week, high/med/low, etc), is it preferable with semantic string naming wherever possible, or are int enums usually preferred for being more clean and robust?
I suppose it's a case of "it depends". I tend to use stringed keys myself since they are more readable but I do think it's a hassle with asserting case insensitivity and how the keys can be accessed as properties - "sometimes, probably".
People often comment on it when they see it, and it turns into this weird mutual "why strings?" vs. "why ints?".2
I wasn't happy with one of our UI views for editing a database query that consisted of about 50 fields ("editing" being the operative term here, not just viewing. It had to be two-way). Everything was hardcoded and defined manually, with each block of ~10 lines being repeated and mostly identical apart from the occasional double inline field and name of the variable. It had "just ended up that way" over time due to the variable names in the UI being different than the names of the variables that came from the API.
I decided to overhaul it all where I defined the different input components and which fields should be included, then made a function which would generate the page based on these definitions. It was about 500 lines of modularized functions and classes where the class for the actual view was about 50 lines- compared to the 1400+ lines of the previous version.
But, it didn't work. It should, but it "just didn't". There was no error. All I got was a blank, solid white page. I could make a drastic change or try something completely different and I would get the same error, same blank page. API fetch succeeded, value assignments succeeded, the object exists, but if you iterated it it was... empty.
I started getting really discouraged that I had made it too abstract. Maybe I actually made it more complex and unreadable than before. Maybe just hardcoding it all was the better solution after all. Maybe I had gone against KISS and overdesigned it.
I was up pretty late and everyone had gone home. When the last guy left there was that mood where "yeah if I can't make this work we'll just use the current version...".
Turns out I had tried iterating over a property of the set of fields to render, rather than the entire collection. In the old method the variables were a member of an object, but now they were its own object, a change I had made to isolate the set of values which were to be viewed/edited and make them easier to pass back and forth. This member existed since I hadn't cleaned it out yet, but it was empty.
I had been banging my head against this for a whole day and I was ready to admit I had made a mistake and wasted my time before discarding it all, but then I backspaced this one property and the interface went from empty to rendering perfectly and with all functionality intact. I swear god rays were coming out of my screen.
I'd be ok with monthly topics. I consider myself an active devrant user but sometimes the weeks fly by before I have a chance to check up on it.2
I unironically can't figure out how to upgrade to devRant++ on desktop. It's cool that you don't want to nag but cmon!
I did find it in the mobile app. Is it just not implemented in the browser view?2
I'm not even in the mood to speculate how much time I've spent trying to convert this certain datatype from one of the frameworks we're using. I couldn't find it in the documentation, google and SO says to use a member which just doesn't work and seems to be deprecated.
I started writing my own converter which got way bigger than what I was comfortable with due to all the special cases needing separate checks and handling.
I eventually came across a function which does exactly what I needed. It was the one suggested by said googles and SOs, it was just... recently renamed.
Not sure how to describe this sense of "yay, I found the proper solution!" and "are you fucking kidding me". Thank goodness for devRant.
Been spending the past two days setting up linux on my new work laptop which happens to have a hybrid nvidia GPU, in addition to requiring a usermade driver to get the docking station working. Both the (proprietary!) nvidia driver and displaylink driver demanded to rebuild the kernel, and the nvidia ones crashed during it.
I had no idea it could be this much of a hassle. Had I bought it myself I would have taken it back. Never buying a laptop with a discrete GPU ever again. Sweet butts.
"Engineers don't memorize documentation. They know how to use it."
Programming felt insurmountable to me before I started with it. This phrase blew my mind and changed my approach entirely.3