Aboutdev, physicist, rantee
Joined devRant on 6/12/2016
Do all the things like ++ or -- rants, post your own rants, comment on others' rants and build your customized dev avatarSign Up
What a delight to have to work on macOS. Not.
Took me two days to notarize our app bundle. The ultimate issue was a dead symlink inside the bundle which would make the codesign verify (with strict option!) fail, while verification of signing operation itself passed.
Notarization would just give generic error: not properly signes.
So to give you a feel for what evil, clusterfuck code it was in: this projects largest part was coded by a maniac, witty physicist confined in the factory for a month, intended as a 'provisional' solution of course it ran for years. The style was like C with a bit of classes.. and a big chunk of shared memory as a global mud of storage, communication and catastrophe. Optimistic or no locking of the memory between process barriers, arrays with self implemented boundary checks that would give you the zeroth element on failure and write an error log of which there were often dozens in the log. But if that sounds terrifying already, it is only baseline uneasyness which was largely surpassed by the shear mass of code, special units, undocumented madness. And I had like three month to write a simulator of the physical factory and sensors to feed that behemoth with the 'right' inputs. Still I don't know how I stood it through, but I resigned little time afterwards.
Well, lastly to the bug: there was some central map in that shared memory that hold like view of the central customer data. And somehow - maybe not that surprisingly giving the surrounding codebase - it sometimes got corrupted. Once in a month or two times a day. Tried to put in logging, more checks - but never really could pinpoint the problem... Till today I still get the haunting feeling of a luring memory corruption beneath my feet, if I get closer to the metal core of pure C.1
Fuck me! Fuck VSCode!
Wasted nearly a whole day of entire team by breaking a core functionalty.
Don't know if others also hate it so much when you want to add a bracket and VSCode detecting a closing bracket or whatever nullifies your attempt leaving the number of brackets constant.
Not exactly sure today's defect was caused by this, but I strongly suspect it because it was caused by just a misplaced bracket.6
(mostly !dev) Fuck humans! Really: what a scum bag race. All that shit talk about human dignity, the highest values are just sugar coating the low base motives we mostly live by. Like people have such fine antennas for your income, social status, the power or lack thereof you exert over other. They know it before you open your mouth, that they can pick on you, harass you, because you're the one on the receiving end, the one that bows away. The bullies feel that. On an overcrowded chicken yard you'll find more dignity than in human society.
Everybody drooling over that polished photoshop life on facetubeinsta: materialistic, consumeristic, masturbatic wastage. At least we now say it openly: that if we were the winners, we'd also take it all, live that empty luxury, life of fame. But 99,99% of us, we aren't in that position, just working off our arse to only keep afloat. And for the stars, those fake images, we're just rats to click on ads to better train Google.
No wonder that software, as a picture of human communication is such a shitfest of arbitrary, entropic conventions and endemic epidemic of quirks, bugs and evil trap doors. As a whole: an insults to reason, a challenge to sanity. (...Conway's law)
And I'm still a bit pissed at our profession, that, you know, as engineers, scientists, physicists, we still see us in the lineage of that "great" age of enlightenment and reason,.. while it's all just a cover up. Sure science and their ideas are nice as long as you serve a purpose or make some money. Sure democracy and free speech are great achievements, but in the end some elites and monopolies rule the world at their gusto - and will not stop destroying the world unless we're already one feet in the abyss (like 1962, be we ain't had enough of that shit, hadn't we?)9
Upgraded our internal samba fileshare. Was getting too old. So updating the apt sources list and push the dist-upgrade: what could possibly go wrong?
Somehow the locale went astray, updating the manpages gave too many errors and now finally everything's fucked up, because it somehow deleted the sudo binary and root is locked or we don't have password.
But samba was updated and it's still serving our files.7
My wife: Oh, hacking is so cool. Can you show me?
Me: Sure. So there I needed to upload the php file, while my netcat was sitting here in the terminal waiting for incoming...
My wife: Boring, BORING.
(At least my 5yr son appreciates the terminal more than she: typing 'sl' or watching star wars in ASCII art.)7
"Linux is more secure." Put on your tin-foil hats. As you can:
>Root over 50% of linux servers you encounter in the wild with two easy scripts,
Linux_Exploit_Suggester , and unix-privesc-check .
(sauce: Phineas Phisher - http://pastebin.com/raw/cRYvK4jb)17
Watched some documentary about Russian hackers. Journalist: I need to learn their language. - starts programming/hacking course, sees a shell and a python: runs away. 'That ain't for me.'
At least he tried tho.
Later he finds some Ukrainian hackers. One had a strangely familiar logo on his laptop. Rewind a bit: its hackthebox.
Just had my first blood there. So.. I'm a hacker, too? Good enough for Arte doc's?8
So I thought I had a basic, high level understanding of C++ STL strings, pointers, copy constructors and stuff. In comes a dirname, a -D_GLIBCXX_USE_CXX11_ABI=0 and... Toto, I've a feeling we're not in Kansas anymore.
So what is happening? I copy a string expecting a deep copy, but then I do the dirname or manipulation on the copy and it messes up *both* strings. gcc/C++ I know you're a beast, but what's going on there? Thing is only possible if I cast away const from c_str - which of course is a doubtful operation - but there also seems to be some strange copy on write logic that the data pointers initially point to same memory location and only with first manipulation on the copy they start to point to different addresses.
I had no clue. And still don't have.4
1. When we struggled for month with using OpenSSL, fixing our server, then bit of Sqlite3 fuck ups. Was it even right to use those libs, not write shit ourselves, if it is such a hassle to use them, or is it only us being too stupid to read the docs? Project seemed 'finished' for over a year. Really wore us out to get it out there.
2 Our board constantly announcing the success and striving of our pentester department. Makes me feel I am at the wrong place. No dynamics, growth, just too much stupid work to plow through.
3 Starting a bit with CTF's. Realizing I am hardly at the entrance of the rabbit hole. (And also is it even the right thing going down there? My Luddite tendencies also shining through...) Not mastering all this tools.
Let's face it: I am and will always be a tinkerer. Yes, I know my ways around, I can sneak into legacy code bases easily and throw new stuff in there, I've seen software stacks. But scarcely sound design, really modular. Even from the cleverer, experienced ones. They can master more complexity, so they can handle more spaghetti. Some essay from the 80's had this grand idea to organically 'grow' software. That's how it looks like most of the times: cancerous, parasitic super fungi (armillaria). Yeah, we all know have to fight bit-rot and entropy, but it was all lost before already. We'll never get rid of legacy protocols, legacy code.
And even when we go green field, start a fresh. Yeah, take a great design, make everything new, after some months of throwing features and outer constraints at the thing, it's the same old mud again.
But we can still dream on: some day I will design great APIs, I will have great test coverage, documentation, UML design, autometed tests, fuzzing, memchecking, I'll work professionally, clean coder style.
Pfft forget it. Maybe change for consulting, because we'll continue to dream of the 'clean' code, so you can sell the next 'recipe', development method. It's like diets. As effective. For the one selling.2
Why avoid? Maybe it's part of the experience. Lets you appreciate a good company even more.
(That said my first employer was a bit.. twisted. Small, workaholic family, hands on. Lots of pressure. Probably drove some into depression or burn out. Learnt a ton though, and maybe made me a bit more thick-skinned)
While ill started with some hack the box challenges. Really addictive stuff. For one opened binary in IDA and changed one assembly instruction to obtain the flag. Felt like a hacker. - lasted only till next challengr3
How can Lenovo produce such a shitfest as this ideapad laptop. I lack the swear words to describe in how many ways it sucks. Looks nice from the outside, light. But even after deinstalling all Lenovo crap ware and McAffee, reinstalling Windows it was still so slow that I wished I still had my Win 3.11 on that 66 MHz (+33MHz Turbo Button)! All this waiting if you start an application or open a browser tab - it let's you hate computers, want to punch that piece of Pferdeäpfelsmoothie.1
So we had a guy who spend decade in automotive, flight simulation and stuff. C mostly. Lasted only a month of his probation period. Didn't seem to know about double pointers. Maybe coding standards in automotive even discourage them...
But made me wonder how to judge skills. - I tend do be on the cautious side, as I hadn't really understood inheritance and many basic things when I started. But luckily my first boss believed in me, saw me gnawing through (Well about my 'initiation' that'd be others stories to tell). Well, guy was hired as a 'senior', so they expected bit more. Dunno, still feel a bit strange about it, even if I ranted about his chattering before, coz he also had his heart in the right spot, but maybe it's for the best anyway...
But guess who's taking his place in our team! Drumroll.. Yes, Mr gitmaster is.
THIS is powering the internet:
"[...] was a protocol number, similar to the third argument to socket today. Specifying this structure was the only way to specify the protocol family. Therefore, in this early system the PF_ values were used as structure tags to specify the protocol family in the sockproto structure, and the AF values were used as structure tags to specify the address family in the socket address structures. The sockproto structure is still in 44BSD (pp. 626-627 of TCPv2) but is only used internally by the kernel. The original definition had the comment "protocol family" for the sp_family member, but this has been changed to "address family" in the 4.4BSD source code. To confuse this difference between the AF_ and PF_ constants even more, the Berkeley kernel data structure that contains the value that is compared to the first argument to socket (the dom family member of the domain structure, p. 187 of TCPv2) has the comment that it contains an AF_ value. But some of the domain structures within the kernel are initialized to the corresponding AF value (p. 192 of TCPv2) while others are initialized to the PF value." Richard Stevens 'Unix network programming'
There are some who view software as a social construct (like Pieter Hientjes), and I think it's a valuable perspective. So if we know about the intrinsic brokenness of software, can we deduce sth about the brokenness of human interactions? Did social API's evolve to similar clusterfucks of dead entropy we have to shovel in our brains to get along?
I think the answer is an emphatic yes. And you know what's even making it worse? Software. Y'know there are all these whining about the millenials, and I too have had my experiences with stuff of that category. Like back when we searched a new roommate for our flat, we needed three rounds because people who had said yes suddenly reconsidered. Similarly now when we tried to sell our couch: people tried to push the price. Said they were interested, never showed up at the appointed time. It's like they have been spoiled by Amazon: expecting to buy with one click, for the cheapest price and send back if they don't like. And that is not a generation thing. Those old blokes ranting on the young are just as bad. They are just as lost in antisocial media as anybody else. It's a general erosion of not sticking to civility and courtesy, to the yes or no once said, coz everything is now as flexible and fluid as the digital projections of ourselves transmitted round the globe, changing in realtime.
I fucking hate it. - I'm out like this stupid Tom Cruise character in Oblivion.7
Not a webdev so I don't care about how a website looks, but logical failures can really trigger me at times.
E.g. this German federal page you had a bunch of options to fill in your employment status. Though being incomplete it forced you to choose one from the list and then at the end you have to checkmark that you filled in everything correctly reminding you there might be legal consequences otherwise. Thanks.
Amusingly on the same page their enum to string converter seemed broken or they just didn't care. So options to choose from read like: Enum_marital_status_unwed_coupled
Fucked up the screen shot so I can't show, but made me chuckle.2
Printer shit continued: So we got this great Lenovo Ideapad with a Windows, so why not print from there? Installed driver from webpage and really printed nicely.
Then I removed ton of Lenovo's crapware + McAfee (leftovers luckily were cleaned by McAfee's tool), so that this shitty device could be used reasonably - device would deserve rants on its own. AND boom, Windows USB printer driver seems broken beyond repair. Printer not even recognized. Shouldn't it all be plug'n'play?5
Worst of an job in IT? Coming home and having to fix computer still.
I fucking hate it. I fucking hate computers. There might be great stuff like nifty algorithms, grand theoretical theorems about formal languages, Lisps,... BUT that's so far away from the mundane atrocities we have to put up with when it comes to sth like installing a printer.
Newest release of driver won't install a plugin without helpful error. Older release works.. for printing some pages... Then some component (cups-filter) keeps on segfaulting.9
Fuck it. Two big releases plus all the minor shit raining down on our team with only three active devs. A new team member who's unfortunately more of a burden and nuisance while the whole ship burns so beautifully....
And stupid me? I fucking break my arm, is in a cast now for four weeks. So I can mostly watch, while everything sinks.4
Entropy wins. More useless accumulated historical nonsense in each programming language. Complex software stacks impossible to reach the bottom. However C and C++ still there possibly even some Cobol and Fortran zombies. And we devs still writing our ifs and loops for that kind of legacy stuff.
Long time nothing from Mr. Gitmaster, somehow made my peace with him as the project moved out of my focus and he actually seemed to be contributing.
But now some pull request exchanges burst into flames as if they were on LKLM before Linus got castrated. Actually it's with the guy who is jamming out most of the front end code trying to make a really shiny UI with lots of animations that turn our macs into heaters.
Well, debate was over JS code styles or lack thereof and how commented out code should be removed (would actually support Mr gitmaster here). They have me a bit lost there, as I expect the freestyle JS code we produce without any agreed Coding Style Guideline to be an even greater clusterfuck than our C++ code base.
Anyway, hope they come to terms again, like at the start of the project when they jokingly attributed one another as assholes. Their opposing characters could actually benefit from each other.
Fucking linker options on Ubuntu. Somehow it seems to have --as-needed turned on by default. This leads to stripping libraries we had referenced in our target_link_libraries. Then our application won't start because of the unresolved libraries it cannot find in the Rpath, although they would be there. Thank you clever fox.
Now we have to add another stupid linker flag, just to run again.