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
Search - "four eyes"
-
I had genuinely forgotten devRant had a light theme until I saw a rant about it. I went into settings and turned it on for about four seconds, screamed "MY EYES" and rejoined the dark side.4
-
I wrote a database migration to add a column to a table and populated that column upon record creation.
But the code is so freaking convoluted that it took me four days of clawing my eyes out to manage this.
BUT IT'S FINALLY DONE.
FREAKING YAY.
Why so long, you ask? Just how convoluted could this possibly be? Follow my lead ~
There's an API to create a gift. (Possibly more; I have no bloody clue.)
I needed the mobile dev contractor to tell me which APIs he uses because there are lots of unused ones, and no reasoning to their naming, nor comments telling me what they do.
This API takes the supplied gift params, cherry-picks a few bits of useful data out (by passing both hashes by reference to several methods), replaces a couple of them with lookups / class instances (more pass-by-reference nonsense). After all of this, it logs the resulting (and very different) mess, and happily declares it the original supplied params. Utterly useless for basically everything, and so very wrong.
It then uses this data to call GiftSale#create, which returns an instance of GiftSale (that's actually a Gift; more on that soon).
GiftSale inherits from Gift, and redefines three of its methods.
GiftSale#create performs a lot of validations / data massaging, some by reference, some not. It uses `super` to call Gift#create which actually maps to the constructor Gift#initialize.
Gift#initialize calls Gift#pre_init (passing the data by reference again), which does nothing and returns null. But remember: GiftSale inherits from Gift, meaning GiftSale#pre_init supersedes Gift#pre_init, so that one is called instead. GiftSale#pre_init returns a Stripe charge object upon success, or a Gift (and a log entry containing '500 Internal') upon failure. But this is irrelevant because the return value is never actually used. Pass by reference, remember? I didn't.
We're now back at Gift#initialize, Rails finally creates a Gift object using the args modified [mostly] in-place by all of the above.
Another step back and we're at GiftSale#create again. This method returns either the shiny new Gift object or an error string (???), and the API logic branches on its type. For further confusion: not all of the method's returns are explicit, and those implicit return values are nested three levels deep. (In Ruby, a method will return the last executed line's return value automatically, allowing e.g. `def add(a,b); a+b; end`)
So, to summarize: GiftSale#create jumps back and forth between Gift five times before finally creating a Gift instance, and each jump further modifies the supplied params in-place.
Also. There are no rescue/catch blocks, meaning any issue with any of the above results in a 500. (A real 500, not a fake 500 like last time. A real 500, with tragic consequences.)
If you're having trouble following the above... yep! That's why it took FOUR FREAKING DAYS! I had no tests, no documentation, no already-built way of testing the API, and no idea what data to send it. especially considering it requires data from Stripe. It also requires an active session token + user data, and I likewise had no login API tests, documentation, logging, no idea how to create a user ... fucking hell, it's a mess.)
Also, and quite confusingly:
There's a class for GiftSale, but there's no table for it.
Gift and GiftSale are completely interchangeable except for their #create methods.
So, why does GiftSale exist?
I have no bloody idea.
All it seems to do is make everything far more complicated than it needs to be.
Anyway. My total commit?
Six lines.
IN FOUR FUCKING DAYS!
AHSKJGHALSKHGLKAHDSGJKASGH.7 -
Big project this week. Lots of fires to put out. Deadlines approaching.
Monday: I can get by on just four hours sleep. No problem. Will be just like college.
Wednesday: I'm going to just close my eyes while this file uploads. Maybe I will backup the server while I'm at it; Just take a nap while that processes.
Friday: Sorry if my office smells like vomit. It's because I am so tired I vomited.
Sunday: I'm not getting out of this bed tomorrow. Let them fire me. I think I will just will myself into a coma. That will be nice.4 -
Adobe is predatory. I bought a subscription to Adobe Premier four months ago. After using it a little, I found Davinci Resolve (it's free) and decided it was just as capable for my needs. Upon trying to cancel Adobe, it offered me 3 more months at a good price and I thought, well, maybe I could still use it for some other things. But that didn't turn out to be true or necessary. I went to cancel today at the end of the 3 months and it said I would have to pay $94 for cancelation. I guess the fine print was too fine for my 49-year-old eyes or I wouldn't have signed up for that 3-month extension. I got on live chat with their AI, figured out how to get a real person, and began negotiating. They tried to sell me a lower cancelation fee. No. I don't want any fee. They tried to sell me other products at a lower price. I didn't need any other products. Finally, I used a little reverse psychology and said "Fine, I'll keep it. You win, I guess. Just tell me when I can cancel something I'm not using and won't be using and without being punished with a fee."
Apparently, that unlocked something in the Indian guy's call flow script and he offered to waive the fee. Just needed a moment to converse with his manager and get approval. That's 20 minutes of my life and billable time I'll never get back.7 -
When I was in college OOP was emerging. A lot of the professors were against teaching it as the core. Some younger professors were adamant about it, and also Java fanatics. So after the bell rang, they'd sometimes teach people that wanted to learn it. I stayed after and the professor said that object oriented programming treated things like reality.
My first thought to this was hold up, modeling reality is hard and complicated, why would you want to add that to your programming that's utter madness.
Then he started with a ball example and how some balls in reality are blue, and they can have a bounce action we can express with a method.
My first thought was that this seems a very niche example. It has very little to do with any problems I have yet solved and I felt thinking about it this way would complicate my programs rather than make them simpler.
I looked around the at remnants of my classmates and saw several sitting forward, their eyes lit up and I felt like I was in a cult meeting where the head is trying to make everyone enamored of their personality. Except he wasn't selling himself, he was selling an idea.
I patiently waited it out, wanting there to be something of value in the after the bell lesson. Something I could use to better my own programming ability. It never came.
This same professor would tell us all to read and buy gang of four it would change our lives. It was an expensive hard cover book with a ribbon attached for a bookmark. It was made to look important. I didn't have much money in college but I gave it a shot I bought the book. I remember wrinkling my nose often, reading at it. Feeling like I was still being sold something. But where was the proof. It was all an argument from authority and I didn't think the argument was very good.
I left college thinking the whole thing was silly and would surely go away with time. And then it grew, and grew. It started to be impossible to avoid it. So I'd just use it when I had to and that became more and more often.
I began to doubt myself. Perhaps I was wrong, surely all these people using and loving this paradigm could not be wrong. I took on a 3 year project to dive deep into OOP later in my career. I was already intimately aware of OOP having to have done so much of it. But I caught up on all the latest ideas and practiced them for a the first year. I thought if OOP is so good I should be able to be more productive in years 2 and 3.
It was the most miserable I had ever been as a programmer. Everything took forever to do. There was boilerplate code everywhere. You didn't so much solve problems as stuff abstract ideas that had nothing to do with the problem everywhere and THEN code the actual part of the code that does a task. Even though I was working with an interpreted language they had added a need to compile, for dependency injection. What's next taking the benefit of dynamic typing and forcing typing into it? Oh I see they managed to do that too. At this point why not just use C or C++. It's going to do everything you wanted if you add compiling and typing and do it way faster at run time.
I talked to the client extensively about everything. We both agreed the project was untenable. We moved everything over another 3 years. His business is doing better than ever before now by several metrics. And I can be productive again. My self doubt was over. OOP is a complicated mess that drags down the software industry, little better than snake oil and full of empty promises. Unfortunately it is all some people know.
Now there is a functional movement, a data oriented movement, and things are looking a little brighter. However, no one seems to care for procedural. Functional and procedural are not that different. Functional just tries to put more constraints on the developer. Data oriented is also a lot more sensible, and again pretty close to procedural a lot of the time. It's just odd to me this need to separate from procedural at all. Procedural was very honest. If you're a bad programmer you make bad code. If you're a good programmer you make good code. It seems a lot of this was meant to enforce bad programmers to make good code. I'll tell you what I think though. I think that has never worked. It's just hidden it away in some abstraction and made identifying it harder. Much like the code methodologies themselves do to the code.
Now I'm left with a choice, keep my own business going to work on what I love, shift gears and do what I hate for more money, or pivot careers entirely. I decided after all this to go into data science because what you all are doing to the software industry sickens me. And that's my story. It's one that makes a lot of people defensive or even passive aggressive, to those people I say, try more things. At least then you can be less defensive about your opinion.53 -
If you use exceptions for your data validation, I hate you. I hate you so much, in fact, that I will become famous. Then I can say to you that a famous person hates you. I will become president and the first executive order I sign will be to make the official policy of the United States that I hate you. I will invent a time machine so that I can go back in time and on every one of your birthdays, past present, and future, look you in the eyes and tell you I hate you. Then I will travel to your death bed and in your final breath I will tell you I hate you. I will change the timeline so that you will celebrate Christmas and believe in Santa and then tell your four year old self that Santa isn't real. I hope your kids never learn how to read, and if they already know how to read I hope they forget how to read and never learn how to read. I hope all of your friends become vegan, atheist, flat earth, crossfitters and insist on regailing you with their life style on your every meeting.
I guess what I'm saying is that I'm having a bad day.3 -
The moment I knew I wanted to be a dev was very early in life, but I didn't realize it until I had gotten out of high school. My parents gave me my first computer when I was like 8 and it was my grandfather's old Windows 95 PC. I loved to play the Army Men game with the plastic figures like from Toy Story. I also tinkered around and found out how Word and some of the other programs worked. About two years later, I got his old Windows 98 PC. I continued to play around in Windows and discover some nuances of the operating system. My parents had a Windows XP machine at the time and they called me in every time they needed help. I got on their computer from time to time to use the Internet, where I discovered so many cool things. In junior high, we were forced to take a typing course where I honed my typing skills through playing games. I soon was able to easily complete all of the challenges. To understand my persona, you must know that I was bullied throughout elementary and high school. I was "the nerd" of our class and I wore that badge even with all of the negative energy that it came with. I received constant criticism, ridiculed for being intelligent (my paycheck isn't too funny now, is it losers?). I didn't care, though, my mission has and always will be to show them their wrong doing. I actually can't wait to have a reunion just to see how UNSUCCESSFUL they are. My parents didn't like my interest in gaming and technology either, but that's a rant for another day. After junior high, I wasn't exposed to much else until I got to college four years ago, where I took Fundamentals Of Computing. My professor was a true nerd (major Zelda fanatic), and he taught us how to program in Python. I began to love being able to create something literally out of nothing. He opened my eyes to a world where there was order and I could have control in a world where I've never had any control in before. Since then, I've only began to love my profession more and more. This is truly what I was born to do.
-
By the end of the day my eyes always feel like they are on fire.
After four years of this it is time to get some blue light filtering computer glasses.6 -
Writing my first code review. Even though it really is a nice review and I'm happy with the solution code, I still somehow feel like an asshole for each critique I make. Maybe it's unavoidable with code reviews / pull requests?3
-
Just logged into the devrant desktop site first time today. WTF is up with the background-color when any rant is opened, it was so bright my eyes hurt instantly. The combination of background color and the fonts along with dark theme enabled is abomination on the name of dark theme. The background isn't even consistent and switches to atleast four different bright colors based on type of rant (I think). Has it always been that bad? or am I missing some trick to be sane?3