Joined devRant on 5/22/2017
Do all the things like ++ or -- rants, post your own rants, comment on others' rants and build your customized dev avatarSign Up
From the creators of devRant, Pipeless lets you power real-time personalized recommendations and activity feeds using a simple APILearn More
The CloudWatch API is an awkward piece of shit.
No convenient way to just ask for the latest value of a metric. Gotta supply a time window and hope metrics were actually reported within that window.
Oh and make sure your timestamps are in ISO 8601 or the request will fail (but the SDK does zero validation so a unit test won’t catch it of course).
Oh and you have to assign an arbitrary ID to each metric query in your request even if you don’t care about mapping the results back to the queries. And the regex for the ID is just fussy enough to be mildly irritating.1
How’s this for a horror story? Adding a new feature to a 6,000 line and 100% undocumented stored procedure in a 20+ year old Oracle database.2
Hiring junior devs is a game of Russian roulette.
You can get some one who is smart and loves coding. In this case stack, limitations etc don’t matter and experience will be great for junior and the rest of the team
Or it will be a lazy person who watched 5 videos and think to be better than everyone else. 95% of juniors are these fuckers. Takes about 1 week to find out and fire… which starts the 3 months recruiting loop again.18
Lessions I learned so far from my first big node/npm project with tons of users:
1) If you didn't build something for a while, expect 3 hours of resolving version conflicts for every two weeks since the last build.
2) Even if the tests pass, run the containers on your own machine and make sure that the app doesn't randomly crash before deploying
3) Even if the app seemed to work on your own machine, run the tests again in an environment mimicking prod at most 15 minutes before replacing the running containers.
4) Even if all else indicates that the app will work, only ever deploy if you expect to be available within the 4 hours following a deployment.
5) Don't use shrinkwrap for anything other than locking every version down completely. A partial shrinkwrap will produce bugs that are dependent on the exact hour you built the app _and_ the shrinkwrap file, and therefore no one will ever have seen them other than you.
6) Avoid gyp, and generally try not to interface too much with anything that doesn't run on node. If parts of your solution use very different toolchains, your problems will be approximately proportional to the amount of code. And you'd be surprised just how much code you're running. (otherwise it's more logarithmic because the more code the less likely a new assumption is unique)
7) Do not update webpack or its plugins or anything they might call unless you absolutely need to
8) Containers are cool but the alpine ones are pretty much useless if you have even just one gyp module.
9) There's always another cache. To save yourself a lot of pain, include the build time in every file or its name that the browser can download, and compare these to a fresh build while debugging to assert that the bug is still present in the code you're reading
+1) Although it may look like it, SQLite is far from a simple solution because the code and the bindings aren't maintained. In fact, it'll probably be more time consuming than using a proper database.4
After working on 7 projects last year with 7 different groups and learning to "flow like water", I don't feel the urge to rant anymore. There are always going to be all kinds of weird scenes, cheap clients, incompetent coworkers, people that pretend to know something when they actually know shit. All of those are just tests life is presenting you to make you learn to be peaceful and tolerant.
The world is broken, accept it, and allow yourself to be an ordinary human being, you'll be free and happier. Stuff like the law of attraction does exist. Just learn to be happy and grateful for what you get and you'll get a ton more reasons to be happy and grateful9
“Oh I don’t have access to the repo and I’ve been on leave for 2 weeks, I’ll just pair* with you all day over VC”
*pair = question all your variable names5
It’s sooo weird.
I’m generally not feeling happy or good or “okay”, I’m almost always rather shitty but just keep going through my day without complaining too much because that’s what most of us do..
Today, for the first time in at least one (very lonely, cold and boring) year, I went outside for a smoke and felt good. No idea why.
Everything was orangy/yellowish outside because of the clouds after the first sunny day in weeks.
Its raining slightly but not so much that you actually get wet.
I just had this feeling of “yea, that’s good enough” which I haven’t had in probably 4-5 years or so.
Maybe it’s because I got a little bit of sun for once and saw other people walking 2m around me, I don’t know..
But it felt good.
Does that feeling sound familiar to anyone or am I just finally going crazy?
I also apologise for my last 50 rants not being about dev or rant but I’m lucky to not have much to rant about in my current job 😅10
I was hired as Project Manager.
After few days, I discovered that:
- I didn't have a team
- I was also the main and only developer
- all the projects I was assigned to were late
- I was also the account manager and I had to explain the delay to the customers.
And no, the salary didn't make up for the daily loss of reputation.
I lasted more than I thought, when I discovered that customers were not interested in delivery either, as it was a kind of money laundering scheme10
My battle station. Want to get a 34'' curved screen, but can't make up my mind which one. Gaming and photography... Colors vs reaction time 😵2
Gotta love well meaning juniors with completely misplaced intentions.
Nathan: "Hey, do you want a quick 5 minute demo of the code we've changed to move to library version x?"
Almond: "Sure (I wasn't that fussed about moving to library x, but he seemed determined and there's some nice to haves with bumping the version, so we approved it.)"
Nathan: "Cool, so we have this built here, and..."
Almond: "...wait, that's not our CI system!"
Nathan: "Yeah, so I moved to a new CI system too because we couldn't get that working in the old one"
Almond: "...right, we'll need to discuss that, because..."
Nathan: "Sure, we also moved the templating engine as well as there were more examples using this one with library x"
Almond: "...yeah, so I don't think we're looking to switch the templating engine because..."
Nathan: "...and you guys also need to change a bunch of your code as it's all broken since we put the new version in, most of the tests fail..."
Great... so we've got a branch that breaks a bunch of code, switches the templating engine to one we don't want to use, and switches the CI to the one the company is trying to actively migrate away from...
Almond: "We're going to need longer than 5 minutes. I'll put something in the calendar."
Today when showing a game that I made:
X: So you used Unity, it's so easy
Me: Yeah I mean compared to....
X: Thus since you used a game engine, I can't say your game was completly developed by you.
Me: So you are saying that since a builder didn't make bricks thus he can't claim credits on the building he made?13
Shit task got dumped on me, modify around 500 old sql stored procedures.
Did 15 manually and went fuck this, i'd rather run a marathon on legobricks...
So i decided to write a program to make the changes instead, how hard could that be?
Turns out it's very hard when loads of the procedures doesnt follow shop standard...
But so far i have handled about 70% of all the req changes!
Very hard but MUCH more fun than doing that shit manually!4
Why the fuck I see Typescript every fucking where. Either typescript is really something or this just huge-ass paid multi-channel marketing.8
My hero.... This motherfucker client actually asked for an e-commerce affiliate website made by german devs for under 40€.7
"OMG WE MISSED SOMETHING WE NEED AN EMAIL SENT TO EVERYONE IF X HAPPENS AND NOBODY DID A THING WITHIN AN HOUR!"
"OMG WE NEED IT SENT IF NOBODY DID A THING EVERY 30 MINUTES"
Um... not sure we're solving this problem right way ... but there you go done.
"OMG SOMEONE GOT AN EMAIL AFTER 45 MINUTES AND NOT 30 MINUTES"
Bro who the fuck knows why that happened, it's email not instant messenger .... that's what I meant by us solving this in the wrong way, email for this is dumb... how about we solve this process problem in some other way or you just fuck off ... this isn't a coding issue this is something else...4
Maybe I'm biased but is every person in my country who calls themselves a "devops engineer" a retard who knows nothing about devops and was hired by a bunch of retards or is it just the ones I'm blessed to cross paths with?6
That satisfaction when you're teaching Python and git to a friend, and not only she actually understands things right away, but she tells you: "It's ok if you don't know this, I'll try to look it up and figure it out by myself".
Every now and then, the world doesn't seem such a dark and gloomy place :)5
I can't take this anymore...
I'm reviewing n-th PR and I wanna gouge my eyes rn. This is the example I found in one of the PRs (and I could enumerate the examples for a long time...)
Mother****er piece of sh*t.11
You know what?
Young cocky React devs can suck my old fuckin LAMP and Objective-C balls.
Got a new freelance job and got brought in to triage a React Native iOS/Android app. Lead dev's first comment to me is: "Bro, have you ever used React Native".
To which I had to reply to save my honor publicly, "No, but I have like 8 years with Objective-C and 3 years with Swift, and 3 years with Node, so I maybe I'll still be able help. Sometimes it just helps to have a fresh set of eyes."
"Well, nobody but me can work on this code."
And that, as it turned out was almost true.
After going back and forth with our PM and this dev I finally get his code base.
"Just run "npm install" he says".
Like no fuckin shit junior... lets see if that will actually work.
Node 14... nope whole project dies.
Node 12 LTS... nope whole project dies.
Install all of react native globally because fuck it, try again... still dies.
Node 10 LTS... project installs but still won't run or build complaining about some conflict with React Native libraries and Cocoa pods.
Go back to my PM... "Um, this project won't work on any version of Node newer than about 5 years old... and even if it did it still won't build, and even if it would build it still runs like shit. And even if we fix all of that Apple might still tell us to fuck off because it's React Native.
Spend like a week in npm and node hell just trying to fucking hand install enough dependencies to unfuck this turds project.
All the while the original dev is still trying TO FIX HIS OWN FUCKING CODE while also being a cocky ass the entire time. Now, I can appreciate a cocky dev... I was horrendously cocky in my younger days and have only gotten marginally better with age. But if you're gonna be cocky, you also have to be good at it. And this guy was not.
Lo, we're not done. OG Dev comes down with "Corona Virus"... I put this in quotes because the dude ends up drawing out his "virus" for over 4 months before finally putting us in touch with "another dev team he sometimes uses".
Next, me and my PM get on a MS Teams call with this Indian house. No problems there, I've worked with the Indians before... but... these are guys are not good. They're talking about how they've already built the iOS build... but then I ask them what they did to sort out the ReactNative/Cocoa Pods conflict and they have no idea what I'm talking about.
Well, one of these suckers sends a link to some repo and I find out why. When he sends the link it exposes his email...
This Indian dude's emails was firstname.lastname@example.org...
We'd been played.
Company sued the shit out of the OG dev and the Indian company he was selling off his work to.
I rewrote the app in Swift.
So, lets review... the React dev fucked up his own project so bad even he couldn't fix it... had to get a team of Indians to help who also couldn't fix it... was still a dickhead to me when I couldn't fix it... and in the end it was all so broken we had to just do a rewrite.
None of you get npm. None of you get React. None of you get that doing the web the way Mark Zucherberg does it just makes you a choad locked into that ecosystem. None of you can fix your own damn projects when one of the 6,000 dependency developers pushes breaking changes. None of you ever even bother with "npm audit fix" because if security was a concern you'd be using a server side language for fucking server side programming like a grown up.
Mine are still working.35
Does anyone else get intensely frustrated and stressed trying to explain something to someone who repeatedly fails to understand?
"ok so you click decrypt password and then you give it your private key"
"ok I clicked on download rdp file"
"no you want decrypt password"
"and then it will download a file"
"no you need to give it a file"
"THE FUCKING FILE IT SAYS RIGHT THERE STEVE"
Keep in mind this is the fifth time I've walked him through this13
slack seems to be having issues with connectivity currently.
sweet, maybe I can actually get some work done!
or maybe i'll just browse devrant for a few more minutes. who's gonna know?
That would probably be implementing multithreading in shell scripts.
The idea (though not the project itself) was born back when I still was a sysadmin. Maintaining 30k servers 24/7 was quite something for a team of merely ~14 people. That includes 1st line support as well.
So I built a script to automate most of my BAU chores. You could feed a list of servers - tens or hundreds or more - and execute the same action on each of them (actions could be custom or predefined in the list of templates). Neither Puppet nor Chef or Ansible or anything of sorts was consistently deployed in that zoo, not to mention the corp processes made use of those tools even a slower approach than the manual one, so I needed my own solution.
The problem was the timing. I needed all those commands to execute on all the servers. However, as you might expect, some servers could be frozen, others could be in DMZ, some could be long decommed (and not removed from the listings), etc. And these buggars would cause my solution to freeze for longer than I'd like. Not to mention that running something like `sar -q 1 10` on 200 servers is quite time-consuming itself :)
And how do I get that output neatly and consistently (not something you'd easily get with moving the task to a background with '&'. And even with that you would not know when are all the iterations complete!)?
So many challenges...
I started building the threading solution that would
- execute all the tasks in parallel
- do not write anything to disks
- assign a title to each of the tasks
- wait for all the tasks to complete in either
> the same sequence as started
> as soon as the task finishes
- keep track of each task's
> return code
> sequence ID
- execute post-finish actions (e.g. print to the console) for each of the tasks -- all the tracked properties are to be accessible by the post-finish actions.
The biggest challenges were:
a) how do I collect all that output without trashing my filesystems?
b) how do I synchronize all those tasks
c) how do I make the inception possible (threads creating threads that create their own threads and so on).
Took me some time, but I finally got there and created the libbthread library. It utilizes file descriptors, subshells and some piping magic to concentrate the output while keeping track of all the tasks' properties. I now use it extensively in my new tools - the ones where I can't use already existing tools and can't use higher-level languages.4
The final hour of mental torture among many of finding a complex solution to an otherwise simple problem in a React/Typescript project:5
I'm working with a customer named Clint.
I realize now that over numerous tickets I started mistyping his name... just every god damn time.
Guess what letter I left out?
Nice guy for not correcting me ... extra fast ticket response for him now.7