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
Search - "dependency hell"
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 email@example.com...
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.34
Now now, chill. I'm using it as my main OS for a few years now. I know what I'm talking and this title is a bit click-baity, but this just has to go out there:
1. It's usable as a Windows replacement just fine - FALSE. XFCE4 is years old and buggy as hell especially on multi-monitor set-up, Gnome3 gets stuck more often than my Windows 98 machine used to, KDE is like a rich kid on meth. Plug in Bluetooth headphones? Well no, sorry, you have to research that online, since you'll probably need to install some packages for it to work. Did I say "work"? Well no, because after more research you realize that Debian on Gnome3 on gdm3 launches pulseaudio on its own, so you have 2 instances of pulseaudio, and one of them is stealing your headphones sometimes and you either have no sound or shitty sound. How do I know that you ask? The same way I know everything else - every time you try to do something new on any Linux, it involves a ton of research. Exciting research, don't get me wrong, but at this point it looks more like a toy than a reliable desktop computer operating system.
2. And why am I using pulseaudio? Why not alsa? years ago people were discussing on forums that pulseaudio is old and dead, yet here we are with new LTS release of Ubuntu still shining with Pulseaudio. How about several different service management systems being deprecated by new ones, each having different configurations and calling methods? Apparently systemd is old and lame now. It's a mix of 10 year old software that works badly, with a 5 year old replacement that works worse, somehow trying to live under the same roof. Does it work? Ask my headphones who sound like a fucking dial-up modem.
3. Let's talk about displays, shall we? xorg is old and deprecated, right? We got Wayland that's mostly stable. Don't know what that is? That's just basic knowledge for Linux. And when you try to install network-manager, it also tries to install Mir toolkits. Because why the fuck not install 3 display managers when you want a network manager, of which one is old and dying, one is young and stupid, and another is an infant that died of cancer?
4. Want to integrate with Google Drive? Yeah, there's a tool that mounts the drive as a local directory. Yeah only for Ubuntu. Want it on Debian? You need to compile it. Oh wait, it's on Ocaml, because fuck mainstream languages, we're hipsters. How do you compile Ocaml? Well you need to have Ocaml on your system, dummy. How do you do that? Well you need to compile Ocaml. Ok, how do I do that? Well, git clone, download and install some dependencies, configure, make... oh sorry, you're using libssl1.0.2g when you need libssl1.0.1f, nope, sorry, won't work. Want to install libssl1.0.1f? Why? You already have the "g", stupid! Want to remove libssl1.0.2g? Bye-bye literally everything that you have on your PC. But at least you got the "f". Does it work now? Well no, because you need libssl1.0.2g for another dependency to work.
And all I ever wanted was to get a fucking document from google drive (not nudes, I promise).
5. Want to watch a movie? Let me tear that screen in half and make the bottom half late by a couple of frames, because who needs vertical sync, right? Oh you do? Well install the native drivers maybe. Oh you have? Welcome to eternal Boot to Recovery mode, motherfucka!
Yeah, most of the times things work just fine. But the reason I know what those things are and how they work is not curiosity. The reason that I know the inner workings of Linux much better than the inner workings of Windows, is because in those few years that I've been using it full time, it has caused me 10 times more headache than I have ever experienced with other systems. And it's not the usual annoyances like "OMG it rebooted when I didn't ask it to", but more like "Oh, it won't work and I need 2 days to find out why" kind of stuff, because even if you experience the same thing again, it's always caused by some new shit and the old solution won't work any more.
I still love it, and will continue to use it. I don't know why really. Maybe because I'm not afraid of fucking it up any more? Maybe because I can do what I want in it and recovering will be easier than on Windows?
It's a toy for me, after all these years. And I also use it for professional reasons.
But whenever someone presents it as a better alternative to Windows, I just want to puke.51
Please stop recommending arch. For real. Stop!
Let's back up. I'm an arch user. Have been for years. I love arch! Like hardcore! But for real, cut it out.
Either they didn't ask and you're being obnoxious or they probably asked "what's a good distro to learn?" Or "Ubuntu holds my hand too much, I want something more consoley" either way, arch is not the answer. Arch is a distro for us stuck up types who like spending all day fixing dependency errors, changing our WM every other week, debating the merits of X vs wayland, and acting better than everyone else.
But here's the thing: I found arch because I wanted something that I could compulsively configure and get really in the weeds. I think most arch users feel that way to some degree. You kinda have to if you want to not be miserable. But many Linux users aren't like that. And that's fine! Let them use mint, or Debian. So they never change their DE. Cinnamon is a great interface! Gnome 2 is totally fine! There's literally nothing wrong with being content with sane defaults and not manually installing every package, and having scheduled releases from a stable source.
Do you tell 7th graders "if you really want to get better at algebra, you should try calculus. You really gain a deep knowledge of math!" No! They will get there when they are good and ready! Or not. It's not a beginner distro. In fact (controversial opinion ahead) it's pretty shitty at being a distro. I have used arch for years! But I don't recommend it to anyone. Because if you want to configure a box for literally 100s of hours (it's never really over is it?), Then you aren't asking anyone about distro recommendations. You've tried them all. You've heard of arch. You been to /r/unixporn.
Stop acting better than everyone else and stop telling people it's better than <other distro here>. It's not. It's different. Very different. And it's not for everyone.28
Yesterday was Friday the 13th, so here is a list of my worst dev nightmares without order of significance:
1) Dealing with multithreaded code, especially on Android
3) Dependency hell, especially in Python
5) Memory Leaks
6) git conflicts
7) Crazy regexes and string manipulations
8) css. Fuck css.
9) not knowing jack shit about something but expected by others to
produce a result with it.
10) 3+ hours of debugging with no success
I have been a mobile developer working with Android for about 6 years now. In that time, I have endured countless annoyances in the Android development space. I will endure them no more.
My complaints are:
1. Ridiculous build times. In what universe is it acceptable for us to wait 30 seconds for a build to complete. Yes, I've done all the optimisations mentioned on this page and then some. Don't even mention hot reload as it doesn't work fast enough or just does not work at all. Also, buying better hardware should not be a requirement to build a simple Android app, Xcode builds in 2 seconds with a 8GB Macbook Air. A Macbook Air!
2. IDE. Android Studio is a memory hog even if you throw 32GB of RAM at it. The visual editors are janky as hell. If you use Eclipse, you may as well just chop off your fingers right now because you will have no use for them after you try and build an app from afresh. I mean, just look at some of the posts in this subreddit where the common response is to invalidate caches and restart. That should only be used as a last resort, but it's thrown about like as if it solves everything. Truth be told, it's Gradle's fault. Gradle is so annoying I've dedicated the next point to it.
3. Gradle. I am convinced that Gradle causes 50% of an Android developer's pain. From the build times to the integration into various IDEs to its insane package management system. Why do I need to manually exclude dependencies from other dependencies, the build tool should just handle it for me. C'mon it's 2019. Gradle is so bad that it requires approx 54GB of RAM to work out that I have removed a dependency from the list of dependencies. Also I cannot work out what properties I need to put in what block.
4. API. Android API is over-bloated and hellish. How do I schedule a recurring notification? Oh use an AlarmManager. Yes you heard right, an AlarmManager... Not a NotificationManager because that would be too easy. Also has anyone ever tried running a long running task? Or done an asynchronous task? Or dealt with closing/opening a keyboard? Or handling clicks from a RecyclerView? Yes, I know Android Jetpack aims to solve these issues but over the years I have become so jaded by things that have meant to solve other broken things, that there isn't much hope for Jetpack in my mind 😤
5. API 2. A non-insignificant number of Android users are still on Jelly Bean or KitKat! That means we, as developers, have to support some of your shitty API decisions (Fragments, Activities, ListView) from all the way back then!
6. Not reactive enough. Android has support for Databinding recently but this kind of stuff should have been introduced from the very start. Look at React or Flutter as to how easy it is to make shit happen without any effort.
7. Layouts. What the actual hell is going on here. MDPI, XHDPI, XXHDPI, mipmap, drawable. Fuck it, just chuck it all in the drawable folder. Seriously, Android should handle this for me. If I am designing for a larger screen then it should be responsive. I don't want to deal with 50 different layouts spread over 6 different folders.
8. Permission system. Why was this not included from the very start? Rogue apps have abused this and abused your user's privacy and security. Yet you ban us and not them from the Play Store. What's going on? We need answers.
9. In Android, building an app took me 3 months and I had a lot of work left to do but I got so sick of Android dev I dropped it in favour of Flutter. I built the same app in Flutter and it took me around a month and I completed it all.
If you're a new dev, for the love of all that is good in this world, do NOT get into Android development. Start with Flutter or even iOS. On Flutter and build times are insanely fast and the hot reload is under 500ms constantly. It's a breath of fresh air and will save you a lot of headaches AND it builds for iOS flawlessly.
To the people who build Android, advocate it and work on it, sorry to swear, but fuck you! You have created a mess that we have to work with on a day-to-day basis only for us to get banned from the app store! You have sold us a lie that Android development is amazing with all the sweet treat names and conferences that look bubbly and fun. You have allowed to get it so bad that we can't target an API higher than 18 because some Android users are still using devices that support that!
End this misery. End our pain. End our suffering. Throw this abomination away like you do with some of your other projects and migrate your efforts over to Flutter. Please!
#NoToGoogleIO #AndroidSummitBoycott #FlutterDev #ReactNative16
Colleague: Hey want to get access to our repo so we can see each others code, collaborate, discuss design patterns etc?
Me: Yeah sounds like a great idea. Would love to get to know a bit more about how others are building mobile apps in the company.
Colleague: Heres the link to the iOS app: xxxxxxxxxx
*looks around a bit*
*Opens cocoapods folder*
*Sees 89 dependencies*
Me: .......... actually, you know what, I have major deadlines coming up. I can't look at this right now. Lets talk in the new year.
WASM was a mistake. I just wanted to learn C++ and have fast code on the web. Everyone praised it. No one mentioned that it would double or quadruple my development time. That it would cause me to curse repeatedly at the screen until I wanted to harm myself.
The problem was never C++, which was a respectable if long-winded language. No no no. The problem was the lack of support for 'objects' or 'arrays' as parameters or return types. Anything of any complexity lives on one giant Float32Array which must surely bring a look of disgust from every programmer on this muddy rock. That is, one single array variable that you re-use for EVERYTHING.
Have a color? Throw it on the array. 10 floats in an object? Push it on the array - and split off the two bools via dependency injection (why do I have 3-4 line function parameter lists?!). Have an image with 1,000,000 floats? Drop it in the array. Want to return an array? Provide a malloc ptr into the code and write to it, then read from that location in JS after running the function, modifying the array as a side effect.
My- hahaha, my web worker has two images it's working with, calculations for all the planets, sun and moon in the solar system, and bunch of other calculations I wanted offloaded from the main thread... they all live in ONE GIANT ARRAY. LMFAO.If I want to find an element? I have to know exactly where to look or else, good luck finding it among the millions of numbers on that thing.
And of course, if you work with these, you put them in loops. Then you can have the joys of off-by-one errors that not only result in bad results in the returned array, but inexplicable errors in which code you haven't even touched suddenly has bad values. I've had entire functions suddenly explode with random errors because I accidentally overwrote the wrong section of that float array. Not like, the variable the function was using was wrong. No. WASM acted like the function didn't even exist and it didn't know why. Because, somehow, the function ALSO lived on that Float32Array.
And because you're using WASM to be fast, you're typically trying to overwrite things that do O(N) operations or more. NO ONE is going to use this return a + b. One off functions just aren't worth programming in WASM. Worst of all, debugging this is often a matter of writing print and console.log statements everywhere, to try and 'eat' the whole array at once to find out what portion got corrupted or is broke. Or comment out your code line by line to see what in forsaken 9 circles of coding hell caused your problem. It's like debugging blind in a strange and overgrown forest of code that you don't even recognize because most of it is there to satisfy the needs of WASM.
And because it takes so long to debug, it takes a massively long time to create things, and by the time you're done, the dependent package you're building for has 'moved on' and find you suddenly need to update a bunch of crap when you're not even finished. All of this, purely because of a horribly designed technology.
And do they have sympathy for you for forcing you to update all this stuff? No. They don't owe you sympathy, and god forbid they give you any. You are a developer and so it is your duty to suffer - for some kind of karma.
I wanted to love WASM, but screw that thing, it's horrible errors and most of all, the WASM heap32.6
So I'm back from vacation! It's my first day back, and I'm feeling refreshed and chipper, and motivated to get a bunch of things done quickly so I can slack off a bit later. It's a great plan.
First up: I need to finish up tiny thing from my previous ticket -- I had overlooked it in the description before. (I couldn't test this feature [push notifications] locally so I left it to QA to test while I was gone.)
It amounted to changing how we pull a due date out of the DB; some merchants use X, a couple use Y. Instead of hardcoding them, it would use a setting that admins can update on the fly.
Several methods deep, the current due date gets pulled indirectly from another class, so it's non-trivial to update; I start working through it.
But wait, if we're displaying a due date that differs from the date we're actually using internally, that's legit bad. So I investigate if I need to update the internals, too.
After awhile, I start to make lunch. I ask my boss if it's display-only (best case) and... no response. More investigating.
I start to make a late lunch. A wild sickness appears! Rush to bathroom; lose two turns.
I come back and get distracted by more investigating. I start to make an early dinner... and end up making dinner for my monster instead.
Boss responds, tells me it's just for display (yay!) and that we should use <macro resource feature> instead.
I talk to Mr. Product about which macros I should add; he doesn't respond.
I go back to making lunch-turn-dinner for myself; monster comes back and he's still hungry (as he never asks for more), so I make him dinner.
I check Slack again; Mr. Product still hasn't responded. I go back to making dinner.
Most of the way through cooking, I get a notification! Product says he's talking it through with my boss, who will update me on it. Okay fine. I finish making dinner and go eat.
No response from boss; I start looking through my next ticket.
No response from boss. I ping him and ask for an update, and he says "What are you talking about?" Apparently product never talked to bossmang =/ I ask him about the resources, and he says there's no need to create any more as the one I need already exists! Yay!
So my feature went from a large, complex refactor all the way down to a -1+2 diff. That's freaking amazing, and it only took the entire day!
I run the related specs, which take forever, then commit and push.
Push rejected; pull first! Fair, I have been gone for two weeks. I pull, and git complains about my .gitignore and some local changes. fine, whatever. Except I forgot I had my .gitignore ignored (skipped worktree). Finally figure that out, clean up my tree, and merge.
Time to run the specs again! Gems are out of date. Okay, I go run `bundle install` and ... Ruby is no longer installed? Turns out one of the changes was an upgrade to Ruby 2.5.8.
Alright, I run `rvm use ruby-2.5.8` and.... rvm: command not found. What. I inspect the errors from before and... ah! Someone's brain fell out and they installed rbenv instead of the expected rvm on my mac. Fine, time to figure it out. `rbenv which ruby`; error. `rbenv install --list`; skyscraper-long list that contains bloody everything EXCEPT 2.5.8! Literally 2.5 through 2.5.7 and then 2.6.0-dev. asjdfklasdjf
Then I remember before I left people on Slack made a big deal about upgrading Ruby, so I go looking. Dummy me forgot about the search feature for a painful ten minutes. :( Search found the upgrade instructions right away, ofc. I follow them, and... each step takes freaking forever. Meanwhile my children are having a yelling duet in the immediate background, punctuated with screams and banging toys on furniture.
Eventually (seriously like twenty-five minutes later) I make it through the list. I cd into my project directory and... I get an error message and I'm not in the project directory? what. Oh, it's a zsh thing. k, I work around that, and try to run my specs. Fail.
I need to update my gems; k. `bundle install` and... twenty minutes later... all done.
I go to run my specs and... RubyMine reports I'm using 2.5.4 instead of 2.5.8? That can't be right. `ruby --version` reports 2.5.8; `rbenv version` reports 2.5.8? Fuck it, I've fought with this long enough. Restarting fixes everything, right? So I restart. when my mac comes back to life, I try again; same issue. After fighting for another ten minutes, I find a version toggle in RubyMine's settings, and update it to 2.5.8. It indexes for five minutes. ugh.
Also! After the restart, this company-installed surveillance "security" runs and lags my computer to hell. Highest spec MacBook Pro and it takes 2-5 seconds just to switch between desktops!
I run specs again. Hey look! Missing dependency: no execjs. I can't run the specs.
Fuck. This. I'll just push and let the CI run specs for me.
I just don't care anymore. It's now 8pm and I've spent the past 11 hours on a -1+2 diff!
What a great first day back! Everything is just the way I left it.6
Give a man a fish, and he eats for a day. Teach a man to fish, and he eats for a lifetime.
Give a man teh codez, and he eats for a day. Congrats, you fed a help vampire.
Teach a man teh codez, and you open up to him the wonderful world of tabs vs spaces, dependency hell, emacs vs vim, being everybody's personal tech support, Linux vs Windows, legacy code, stack overflow, language wars, terrible documentation, functional vs oop, and arguments about what the best indentation style is. Forget about eating, production's down.7
The more I use Go, the more i start to like it. I didn’t realize how nice being able to generate binaries for every OS that matters was, until I had that power. It beats the hell out of trying to distribute a Python app for sure.
Sure, it has its warts.
It’s overly bureaucratic in the same way Java is.
I hate that you can’t import something without using it (most people I’d wager preemptively import libraries they know they’re gonna need even if the code isn’t written yet)
I really wish there was a way to just say “See this JSON blob? All those keys and values are strings, trust me, you don’t need me to tell you the type of each one individually.”
Generics would be nice.
I’d kill for exceptions - any decently sized go program is going to have very many if err checks where most could be condensed down to a single try/catch in most other langs.
I wish the tooling was better. Dependency management was a solved problem when Go was released and yet they chose to ship without it. There’s still no standard. Many hours of time have been wasted dinking with this.
But ya know what? Even with those warts, it’s still easier to write than Java. It’s still write once run anywhere, it’s blazing fast, and doesn’t require your end user to install an entire freakin runtime.
When you're about to install a small program (54mb) and you need 1gig of dependencies. And the dependencies need two gigs of dependencies of their own. Proprietary piece of shit. Grrrrrrrrrrrrrr6
I miss old times rants...So i guess, here it goes mine:
Tomorrow is the day of the first demo to our client of a "forward-looking project" which is totally fucked up, because our "Technical Quality Assurance" - basically a developer from the '90-s, who gained the position by "he is a good guy from my last company where we worked together on sum old legacy project...".
He fucked up our marvellous, loose coupling, publish/subscribe microservice architecture, which was meant to replace an old, un-maintainable enormous monolitch app. Basically we have to replace some old-ass db stored functions.
Everyone was on our side, even the sysadmins were on our side, and he just walked in the conversation, and said: No, i don't like it, 'cause it's not clear how it would even work... Make it an RPC without loose coupling with the good-old common lib pattern, which made it now (it's the 4th 2 week/sprint, and it is a dependency hell). I could go on day and night about his "awesome ideas", and all the lovely e-mails and pull request comments... But back to business
So tomorrow is the demo. The client side project manager accidentally invited EVERYONE to this, even fucking CIO, legal department, all the designers... so yeah... pretty nice couple of swallowed company...
Today was a day, when my lead colleague just simply stayed home, to be more productive, our companys project manager had to work on other prjects, and can't help, and all the 3 other prject members were thinking it is important to interrupt me frequently...
I have to install our projects which is not even had a heart beat... not even on developer machines. Ok it is not a reeeeaaally big thing, but it is 6 MS from which 2 not even building because of tight coupling fucktard bitch..., But ok, i mean, i do my best, and make it work for the first time ever... I worked like 10 ours, just on the first fucking app to build, and deploy, run on the server, connect to db and rabbit mq... 10 FUCKING HOURS!!! (sorry, i mean) and it all was about 1, i mean ONE FUCKING LINE!
Let me explain: spring boot amqp with SSL was never tested before this time. I searched everything i could tought about, what could cause "Connection reset"... Yeah... not so helpful error message... I even have to "hack" into the demo server to test the keystore-truststore at localhost... and all the fucking configs, user names, urls, everything was correct... But one fucking line was missing...
EXCEPT ONE FUCKING LINE:
spring.rabbitmq.ssl.enabled=false # Whether to enable SSL support.
This little bitch took me 6 hours to figure out...so please guys, learn from my fault and check the spring boot appendix for default application properties, if everything is correct, but it is not working...
And of course, if you want SSL then ENABLE it...
BTW i really miss those old rants from angry devs, and i hope someone will smile on my fucking torture5
But man i am starting to love node! It's so freaking elegant and simple, apart from the possibility of a dependency hell. It's so quick and easy to make elegant web-apps and other things.
Goddamn, why is Android SDK setup such a stupendous pain in the ass?
"Wah wah, can't find JDK!"
Wtf are you talking about you stupid fuck, JDK is right there, all IDEs find it, environment vars are set, it is the right version and is used on this machine for a billion development purposes! Stop being a useless cunt!
And this is everytime. Had to setup up Android SDK four or five times by now on different machines and it has NEVER gone smoothly. There is always a plethora of different issues and you end up wasting all day going through fucking dependency hell!
Read a book on ergonomics, you colossal android fucks. Just because you got JetBrains behind your IDE and they actually know what they are doing, doesn't make your setup process any less of a braindead nightmare.
I really like Kotlin as a language, but Gradle makes me feel nauseated.
Pulling in deps without getting errors, then the library won't resolve because of some version mismatch (still, no error or warning on build, until I try to import the dependency in the code, and then just "unable to resolve <library>" without details). All of the documentation on the internet is either super specific for Android projects, or for an ancient Gradle version. Feels like I'm back in Haskell's "Cabal Hell".
*runs back into the loving embrace of Cargo*.
What was I thinking, trying to write an application in something that's not Rust.5
If you’re writing in Python and you find yourself in dependency management hell and you don’t know about pipenv, consider this a friendly PSA:
pipenv is your friend.5
What is the reason a lot of you guys(not all of you) hate windows so much. I never had any single slow down or virus infection for ages, Windows Update always updates at the scheduled time etc.
I used Linux before, and I personally think that the experience is just about the same once you find alternatives to the windows software. But it also has flaws, dependency hell for instance.
Buuuut, I believe each OS has its ups and downs. So while one OS have trouble with something, the other might also have a problem. Some OS's are better than others and that no OS is perfect, and I wish I could see less criticism on OS's on devRant, cause it's getting kind of repetitive and stupid. Thank you.8
If you didn't think NodeJS dependency hell was that bad, you should try sequentially parsing a graph that's stored as an array of nodes and their references, where processing of said nodes forces you to use some async functions that depend on other async functions.
What should have been 20 lines of code written in 30 minutes has turned into 3 hours of horror, reading about babel, realizing that it's just adding more problems without solving one, assessing the effort of modification of async libraries to include sync methods as well, trying out asyncwait, async, and everything else there is, trying to rethink the recursive algorithm, rewriting it several times, cursing and hating myself for not choosing to use Python or .NET Core, screaming senselessly at my wife in a language as familiar to her as Klingon, crying in the bathroom, re-assessing my life choices, thinking whether it was a mistake to dedicate 10 years to this career, maybe I'm just not cut out for it since I can't handle this simple task, watching noose tying tutorials on youtube, thinking about my naked empty RPI that won't connect to the server any time soon.
Seriously. Why is it SO BAD?! Or is it just me?5
I'm an advocate of free software, debian specifically, hell my business runs on it!
But sometimes you just can't get around to use proprietry software. One of those is nvidia....
WHAT THE FUCKING MESSED UP NAGGING NARK SHIT NVIDIA!!! YOU FUCKING BREAK MY SYSTEM! YOU WONT PROPERLY COMPILE YOUR KERNEL MODULE, YOU BREAK MY X, AND ONCE I FIXED ALL THOSE THINGS MANUALLY(!) YOU HAVE THE FUCKING GUTS TO NOT EVEN DETECT MY SCREENS PROPERLY
WHAT THE FUCKING SHIT!!! NVIDIA YOU SUCK!!! MOTHERFUCKER DO I REALLY HAVE TO FALL BACK TO INTEL GRAPHICS??? FUCK YOUR FUCKING COMPANY AND ESPECIALLY YOUR LINUX SUPPORT
And no i am not planning to use ATI since they dont support EGL, what is a dependency for the gnome desktop...6
Client: Hey guys! Let us start a bunch of projects that are all dependent on each other and expect them to deliver those on time.
Me: WHAT. THE. ACTUAL. FUCK.
That moment when that peculiar fork of a library that one of your colleagues required in a project disappears on github.5
Fucking hell everything in java is so annoying, confusing and hard to get working. I just want to use JavaFX, why do you require me to sacrifice a lamb in order to do so? It might be my fault though, but c'mon, I don't want to spend 2-3 hours reading through shitty documentation in order to understand how maven works and what the hell Gradle is. Why can't it be as simple as adding a module name to a config file, like in Rust's Cargo? Even using intellij to acquire JavaFX and set it as a dependency doesn't work, it gives me some weird "JavaFX not configured" bullshit error. What the fuck, you're a library, you shouldn't need anything else ffs7
Compiling software on Linux:
Python interpreter? Easy peasy, just some dependencies here and there. Make does a good job.
Linux kernel? Piece of cake, 20 years of development will be freshly served on your machine after one hour compiling (I have a pretty powerful computer).
Tensorflow? Fuck this shit I am outta.
What is your story with self-built software? Which piece of code has the most terrible dependency hell?9
*needs to repartition disks
*is mounted, need live usb
*download and burn gparted live, ≈20min
*reboot, usb not bootable
*try again, maybe it's corrupt...
* nope it just won't boot
*download and burn puppy Linux ≈20min
*e2fsck failed: get a newer version of e2fsck
*already the latest version
*hmmm, maybe if I build it myself
*download and burn Debian live ≈40min
*try to install gparted
*can't get WiFi drivers working
*download and burn Ubuntu
*opens gparted (already installed)
*partitions disk, leaves to complete overnight (it will have to move ≈60GiB)
*comes back in morning
*computer went to sleep after 10 mins
*late to work but oh well I at least got it done2
Many people here rant about the dependency hell (rightly so). I'm doing systems programming for quite some time now and it changed my view on what I consider a dependency.
When you build an application you usually have a system you target and some libraries you use that you consider dependencies.
So the system is basically also a dependency (which is abstracted away in the best case by a framework).
What many people forget are standard libraries and runtimes. Things like strlen, memcpy and so on are not available on many smaller systems but you can provide implementations of them easily. Things like malloc are much harder to provide. On some system there is no heap where you could dynamically allocate from so you have to add some static memory to your application and mimic malloc allocating chunks from this static memory. Sometimes you have a heap but you need to acquire the rights to use it first. malloc doesn't provide an interface for this. It just takes it. So you have to acquire the rights and bring them magically to malloc without the actual application code noticing. So even using only the C standard library or the POSIX API can be a hard to satisfy dependency on some systems. Things like the C++ standard library or the Go runtime are often completely unavailable or only rudimentary.
For those of you aiming to write highly portable embedded applications please keep in mind:
- anything except the bare language features is a dependency
- require small and highly abstracted interfaces, e.g. instead of malloc require a pointer and a size to be given to you application instead of your application taking it
- document your ABI well because that's what many people are porting against (and it makes it easier to interface with other languages)2
Expectation: Today is the last day before holidays and yesterday I completed a complex task, so today I'll have a very relaxing day involving implementing only some simple changes.
Reality: I've just solved a dependency conflict between the project I modified yesterday and another project depending on it that caused the failure of some tests inside the latter panicking my coworkers who quickly asked me "WTF you merged in the core project!?!?"
Yeah, I really need these holidays.1
Learning Angular, starting with a hello world example:
$ ng new wtf
added 1180 packages from 1294 contributors and audited 21849 packages in 18.753s
found 13 vulnerabilities (9 low, 4 high)
Oh, great! Broken from the get-to! But wait, there's more joy!
$ vimdiff wtf/node_modules/is-odd/node_modules/is-number/index.js wtf/node_modules/is-number/index.js
Fresh project, is-odd requires is-number, the project itself requires is-number. And is-number is there twice in two different versions. The notion of a number must have changed drastically in the last couple of years!
Seriously? Angular doesn't even give me the chance to fuck up the dependencies on my own!7
- Enterprise patterns
- Enterprise type programming
- Dependency hell
- Logging hell
- Proxy hell
- Debugging hell
That will be all.7
Please, let me out of this hell.
Fortunately, it's not gonna be a long assignment.3
After many days of fighting with gem and bundle surrounding logstash plugins, I can officially say I hate Ruby.2
Installing a software on Linux can be such a pain sometimes....
This software needs a dependency, which needs another, which in turn needs another......
I mean if you already know you need it, go install it yourself. Why do I need to do everything manually?
And no. A simple apt get install won't work. You need a third party dependency which adds the package to the repository and some other stuff before you can do anything.
Why? Just why?3
It was in old days when I was working in java and windows systems.
Java and different log4j versions across dependencies caused system not working only on production server.
Turned out some of libraries got log4j embedded and conflicted with other log4j.
It worked in all computers except production one.
Actually that was my main reason to switch my career to python after that dependency hell.
Another one was windows server 2008 tcp connection limit set to 200 or something.
We needed to change registry to get our servers working. After this case we finally managed to convince people to switch to linux.
Anyway any non standard error when you got multiple layers communicate with each other is hard, practice make it easier to solve those problems as your success moment comes faster.4
"Error: Program type already present"
So f--ing what? Ignore the doublon and MOVE ON WITH THE COMPILE, JAVA!
When I first started reading about Angular 4 I must admit I was a bit excited. It seemed like it fit the company enterprise requirements. The improvements it offered on paper looked quite good for our use case. HOWEVER... After writing Angular 4 for two weeks I'm seriously doubting I made the right decision. Testing is a dependency hell and there are two ways to build and structure your application. The webpack way and the SystemJS way. The grunt way and the angular-cli way. For fuck sake Google. And the documentation is somewhat half supporting one thing, half supporting another. So when you're using angular-cli with webpack, you're pretty much screwed when we're talking about documentation. It has now taken me almost 50 hours to write a pretty basic Angular app, made it compliant with our staging environment and writing a Makefile for it, since I haven't been able to find any same way to provide custom arguments when building it with the angular-cli --aot option. So fuck you Google. Luckily I've found a way to modularize it so much that I'll be able to reuse the core in the future. So I guess I got that thing going for me, which is nice... -.-' *sigh*
NPM and the whole dependency tree for JS packages should burn in the pits of hell.
Let's pretend that uninstalling a single (albeit larger) module didn't take 8 minutes and that it didn't spit out 20 warnings from a total of 277 (HOLY FUCK) related packages.
How can you guys (JS-only devs) handle this ?!15
All the time i wonder why on earth people put up with this framework hell. This is part serious question and part rant but seriously, how did we come to this? With all that jQuery, React, Node, whatever stuff i'm kinda losing the overview over what's even todays standard. I always try to keep my code as vanilla as possible without using external libraries. But it seems the entire web development industry is heading the completly other way. I tried to look into a few frameworks but i never really see the appeal. Just now i looked up react native because the last 20 rants talked about it and immediately noped out because they fucking create a DOM in js, why the fuck would you do this?!
Worst thing about this framework shithole is that some frameworks are beeing pulled into the mix for very weird and unnecessary reasons. Best example is a charts library i recently used to visualize a database of temperatures that was completely written in native js but pulled jQuery in for the equivalent of window.addEventListener('load',function(stuff)) and i was furious. I rewrote the code and could throw out the jQuery dependency with no problem. What the fuck is wrong with people?
Alright since you made it here: I'm not trying to throw any of you under the bus for using frameworks. I just fail to understand why you would use these. To each their own and unless your site has the performance of the ticketing system i use at work that takes like 15 seconds to load one fucking page i won't complain at all. But pull in a framework just to do a task you can easily do in native js in remotely the same timeframe you are on my list.2
Took a SWAG at stand-up this morning, saying I thought I could resolve a circular dependency introduced in a junior's branch by noon. As the morning dragged on, I became less and less certain of it, but lo! and behold I managed to refactor my way out of hell with 2 minutes to spare!
This calls for lunch beer! Which management has no way of stopping me from doing on a regular day due to remote working, but at least today I've convinced myself I earned it.1
I was in dependency hell for two days.
Im a junior working in a team creating an ember app. Suddenly a main component refuses to work since an addon threw "EmberObject undefined"... Nobody could reproduce it and we where out of ideas, so I tried fixing it for 2days (7h total). I finally got it working after updating yarn :D
It never felt so good working again :)
I fucking hate environnement configuration so much that I prefer to debug 8 hours straight rather than lose my time and shit for 2 hours on idiotic configuration problems and jump from page to page like a dumbass
"Hey you want that module, download it here !"
"Oopsie, starting from X version of the JDK/JRE this is no longer standalone and directly embedded in"
"Can't find it ? Well I just forgot to tell you that starting from Y version this is COMPLETELY removed from what I just told you to search in and now in another standalone package"
"So now you added your package as dependency for you project, your IDE detects everything well but can't run your code ? That's because it doesn't work anyway, use another method found on the dedicated Github issue which makes little sense and that you have to apply everytime, then sacrifice your inexistent newborn to connect to the 9th circle of hell where Java resides so everything will work"
I knew I couldn't get away using fucking Java and JavaFX3
I'm starting day three trying to solve a Dependency Hell issue which is preventing a bug fix being deployed.
Bought fucking nvidia gpu to test speed of some fucking machine learning models that generate speech.
6 hours wasted already for installing fucking dependencies
cuda, fucking tensorflow gpu, bezel and other shit
Fucking resetting password to download deb with cudnn,
really ??????? fucking emails are not delivered to my fucking mailbox
After mass click of send email and multiple account ban and unban I figured out I should login to nvidia website and then allow access to fucking developer every time I want to log in there - fuck shit
Uninstalling everything now looking for fucking compatible versions between software.
10 years in this business still fucking installation of dependencies is most difficult part
Fucking corporate business and their shitty installation instructions to fuck up peoples lives and switch them to the cloud.
Same was with fucking kubernetes
Fucking software dependency hell
It’s worse then ever before.
Calling any Python programmer here (especially package maintainers)
I run Gentoo, so am responsible for maintaining the dependency tree (to a degree). When it comes to Python I have 2.7, 3.4, 3.5, 3.6 available. I'm always running into some package needing one version or another, and I can't just set a single version and forget it (which is fine. I'm running Gentoo).
I know that this is because python changes rapidly and so different libraries need different versions. Fine.
Why does Python need to be a pain in the ass about it?3
$ yarn add leftpad @types/left-pad
It was faster than reinventing the wheel and I needed that functionality :>
Why does all source code that I see looks like someone just put new things in the file that was opened in the editor at that very moment instead of thinking about where it really belongs?1
The bipolar nature of leading a startup tech team:
It's either no one needs you, or the problem is big enough to have you push 5 fundamental fixes from abyss to upstream.2
Well, I just finished resolving the problems with my Angular dependencies. It has been 3 days of trying to come up with the solution, and in the end, it was all a matter of version mismatch of three dependencies. Now I can (actually) get to work on my project.
Dependency hell - when you have a package you want to update and then you find out 3 other things depend on that version of that dependency and then your pretty much screwed so you just leave the original version of the package you were trying to update in place.
Hey guys, first time writing here.
Around 8 months ago I joined a local company, developing enterprise web apps. First time for me working in a "real" programming job: I've been making a living from little freelance projects, personal apps and private programming lessons for the past 10 years, while on the side I chased the indie game dev dream, with little success. Then, one day, realized I needed to confront myself with the reality of 'standard' business, where the majority of people work, or risk growing too old to find a stable job.
I was kinda excited at first, looking forward to learning from experienced professionals in a long-standing company that has been around for decades. In the past years I coded almost 100% solo, so I really wanted to learn some solid team practices, refine my automated testing skills, and so on. Also, good pay, flexible hours and team is cool.
Then... I actually went there.
At first, I thought it was me. I thought I couldn't understand the code because I was used reading only mine.
I thought that it was me, not knowing well enough the quirks of web development to understand how things worked.
I though I was too lazy - it was shocking to see how hard those guys worked: I saw one guy once who was basically coding with one hand, answering a mail with another, all while doing some technical assistance on the phone.
Then I started to realize.
All projects are a disorganized mess, not only the legacy ones - actually the "green" products are quite worse.
Dependency injection hell: it seems like half of the code has been written by a DI fanatic and the other half by an assembly nostalgic who doesn't really like this new hippy thing called "functions".
Architecture is so messed up there are methods several THOUSANDS of lines long, and for the love of god most people on the team don't really even know WHAT those methods are for, but they're so intertwined with the rest of the codebase no one ever dares to touch them.
No automated test whatsoever, and because of the aforementioned DI hell, it's freaking hard to configure a testing environment (I've been trying for two days during my days off, with almost no success).
Of course documentation is completely absent, specifications are spread around hundreds of mails and opaquely named files thrown around personal shared folders, remote archives, etc.
So I rolled my sleeves up and started crunching as the rest of the team. I tried to follow the boy-scout rule, when the time and scope allowed. But god, it's hard. I'm tired as fuck, I miss working on my projects, or at least something that's not a complete madness. And it's unbearable to manually validate everything (hundreds of edge cases) by hand.
And the rest of the team acts like it's all normal. They look so at ease in this mess. It's like seeing someone quietly sitting inside a house on fire doing their stuff like nothing special is going on.
Please tell me it's not this way everywhere. I want out of this. I also feel like I'm "spoiled", and I should just do like the others and accept the depressing reality of working with all of this. But inside me I don't want to. I developed a taste for clean, easy maintainable code and I don't want to give it up.3
that moment when your internal repos are managed in composer and you have the `require` block set, but some fuckwit decided not to define their git remotes in the repositories, because 'thry are used only in applications where all required components are set'... Fuck your fucking fuck of a brain you fuck turd...
Today is October 31st, ‘Halloween’ according to ancient pagan tradition. I can’t help but wonder if those pagans of yore felt as I do now in their attempts to yoke unruly bands of spirits. I sit wearily at my desk in painful and tiresome reckoning with those new hellcats we call node dependencies. Many an hour I have toiled, maestro of a cacophonous orchestra akin to that tucked in later pages of Bulgakov’s magnum opus, pleading with the band to follow my wand. And to no avail. In the wee hours of the morn I can scarcely tell who is conducting who. My sleep laden eyes blink on each execution of yarn install, my fingers knowingly re-execute with an up-arrow enter when that instruction is returned with gnarled, gruesome errors. And I ask again: “who is conducting who?!“. Will this great devil of machinery eventually meet me with an error so fearsome that I myself lay asunder? It is a battle, make no mistake. It is the “trial of a thousand years”! And who shall come out victorious I know not, but rest shall not come until I either lay myself down into the jaws of dependency hell or emerge victorious.
Today is November 1st. Compiled on the first try, no additional changes FML1
i'm starting to like reactjs over vanilla, but i can't help but remember how it suffers on npm's dependency hell. i mean just look at what happened before at left-pad. it makes you feel like the entire system is so fragile.3
Work proxy, meet dependency hell.
Can't even install pip modules, everything has to be done through source 😓
statics: just because you can, doesn't necessarily mean you should. now I get to spend my day cursing the guy who hired me 4 years ago, and who was fired 2 years ago, for his turrible design choices.1
Threading gui's and sockets...
What a painful day...
I honestly hate python dependency hell.
Started coding in python 2 months back, currently working on a distributed alarm system using rpi3's spent the whole day figuring out how to use it all without them all crashing into one another...1
Maintained some old Dockerfile. Confused how `npm install` could possibly work as the working dir of that command was a *subfolder* with *no* `package.json`. Yet it verifyably installed into the correct package on build to the parent folder with the `package.json`. I assumed a grunt or npm script taking care of it, yet found nothing. Digging deeper, I realized: [this is by design](https://github.com/npm/npm/...).
Saturday morning, trying to set up an automated testing environment on my own since at the workplace it's not considered something useful and time should be spent on other stuff. Yay.
Been there another couple of times, both times failed due to poor, overcomplicated architecture that makes use of DI in the very places it shouldn't (and vice versa)... but then I finally found where the DB access is configured and thought "well, let's try tomorrow to automate this bitch".
...turns out, the db access object is injected indeed, but... from a static, deeply nested configuration file, that's referenced EVERYWHERE and embedded in the project core dll.
So basically I can't use a mock DB without changing it in the original config and recompiling the actual project I'm testing, not the test project itself. WTF?!
Or maybe I'm missing something... god, I hope it's me missing something here.
I hope so much to be wrong...1
This feeling when you're fighting with an issue for few days and accidentaly find out the problem is caused by a dependency of the library you're using... And someone reported it already few weeks ago... Just kill me.
I notice that a necessary fix means adding a single isolated library to composer.json for a large legacy application...
Me: <composer update>
composer.lock: +789/-435 lines changed. 😵
Yep, everything is broken. There goes my week.
Forcing all your package dependencies to one specific version because you are afraid of incompatibilities is like building a scyscraper from pure concrete because wood isn't strong enough. Sounds like a decent idea at first but leads to a brittle, fragile structure that won't last very long.3
*reworks complete solution then publishes it to Azure*
"Okay, now let's debug"
*calls function, no response*
*directly opens function in browser*
Function host is not running.
(additionally, it states that it couldnt load my main project or one of it's dependencies)
Shit, never even heard of that exception.
DDG: yo you're fucked, here, have 3 proper results
SO: lul thats some known bug Azure Functions havent fixed till now
Github: Yeah got a lot of open issues ok that, they just aint any help lmao
Me, a naive person: "okay lets try randomly changing some dependency versions, might help"
Now my question: how do I escape Dependency Hell?1
figuring Jenkins out has been !!FUN!! mostly because I'm an idiot. good news though, now i have to figure out how to install c libraries from source
i forgot about dependency hell. i didn't realize it was this real.
and to think: i thought building a little C app would be fun2
You cannot upgrade npm via `npm update npm -g` inside a docker container. Yet one can download a npm install skript that performs the installation of the latest npm update ...
Do you ever just slump back in your chair when you decide to fix or lightly edit something and then suddenly a few things break for no reason? I do that a lot, especially when I'm working with Unity2D because the project im working on is in dependency hell. (Or what I, an amateur programmer see as dependency hell)2
Node modules keep just disappearing from my projects.
I turn off a dev server, try to start it again - alas, it does not. Instead it complains about some dependency missing.
Npm install is all it takes to fix it, but why? From what depths of hell did those issue crawl out?2
So on my new position I get to work on Spark jobs. Never had to work with the infamous big data technologies. I never thought this would get SO frustrating for all the wrong reasons.
I'm currently trying to introduce integration tests for some Spark job I wrote. This isn't trivial though, as the data comes from several HBase tables. Mocking everything simply isn't feasible. So why not use the integrated HBaseTestingUtility? With it you can start a mini cluster that runs all nessecary services in the scope of your test.
Sounds great, eh? WRONG. Firstly the used mapr dependencies get in the way. The baked in configuration tries to automatically authenticate with your local cluster through Kerberos. Of course this doesn't work. And of course there is no way to reconfigure this as it happens IN A FUCKING STATIC BLOCK. AHHHH.
Ok. So after calming down I "simply" had to exclude all mapr dependencies and replace them with vanilla ones. After two days of dependency hell it FINALLY works!
...or does it? Well now we need test data. For that we got a map reduce algorithm that can import dumps. Sounds again, great, eh? WROOOONNNG.
The fucking map reduce mini cluster can't start, as it tries to write a symlink. Now take a wild guess what the sys admin here blocked. Yepp. TWO DAYS OF WORK RENDERED USELESS, BECAUSE OF SOME FUCKING SECURITY SETTING.
This is fine.