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
Worst documentation: macOS developer API, e.g. the already deprecated kauth API still have documentation like this: https://developer.apple.com/documen...
Really good on the other hand, this: Ordered the stuff, waited 3 months, flashed the NodeMCU and assembled it within 10 minutes:
Our team - if ever existed - is falling apart. Pressure raising. Release deadline probably failing. No release ready for Big Sur.
Almost seemed we were getting somewhere: More focus on code quality, unit tests, proper design, smaller classes. But somehow we now ended up in "microservice" hell; a gazillion classes, mostly tested in isolation, but together they just fail to do their job. A cheap and dirty proof of concept from March is still more capable than this pile. I really start to doubt all that "Clean code", TDD, Agility rhetorics. What does it help you, if nobody cares for the end result? It's like a month I try to hammer down that message: we have to have testable artifacts, we have to ensure code signing works, our artifact is packaged and installable, we have to give QA something they can test - but time just passes and this piece of shit software is still being killed or does nothing.
Now my knee is broken and can do no sports and are tied to my chair even more. To top it all my coffee machine broke and my internet connection was abysmal this week. Not the usual small disconnects, after which it would recover, but more annoying and enduring: often being throttled to 1.7 MB/s (ranking my connection in the slowest 7% even in Germany). My RDP sessions had compression artifacts all over the screen and a mouse click would only take effect 5 sec later.
But my Esspresso machine was just repaired. Not all hope is lost.7
Another hours wasted on debugging, on what I hate most about programming: strings!
Don't get me started on C-strings, this abomination from hell. Inefficient, error prone. Memory corruption through off by one errors, BSOD by out of bound access, seen it all. No, it's strings in general. Just untyped junk of data, undocumented formats. Everything has to be parsed back and forth. And this is not limited to our stupid stupid code base, as I read about the security issues of using innerHTML or having to fight CMake again.
So back to the issue this rant is about. CMake like other scripting languages as bash have their peculiarities when dealing with the enemy (i.e. strings), e.g. all the escaping. The thing I fought against was getting CMake's fixup_bundle work on macOS. It was a bit pesky to debug. But in the end it turned out that my file path had one "//" instead of an "/" and the path comparison just did a string comparison without path normalization.
Stop giving us enough string to hang ourselves!15
For years I felt like an imposter for not rooting my smartphones, and not owning any raspbis. - Now finally I got an pi 4 and installed my so long desired pi-hole.
Quite disturbing that at least 30-40% of my traffic is known ad shit. Such an infestation.8
Finally some real vacation. Heavily needed. Can't stand that type of remote work any more. Our dailies and pull requests have become mere dick-measuring contests. Morally puffed statements about THE RIGHT way to do agile and clean code, and architecture. Endless vacuous, monologues, which they only endure so they can start our own - but shit just does not get done.
And then they don't want to invest only a day or some hours to get some integration tests running on more machines, which could save the one overworked tester we have a lot of work. But whatever. I've lost all motivation and hope. Shall they deal with their own shit. Maybe I just need more sleep or some antidepressants, because I'm really fed up with it.
Makes we wonder why I even fought this battle of the last two weeks, when thanks to Apple's changes in macOS's codesigning our new binary wouldn't run on any "real" machine. But according to them packaging and signing is only a trivial issue, nothing to do with code. Yeah, well, then they should do that shit themselves next time.1
In an in-house beta our product was causing blue screens. We had some the crash reports and a I dug out the technical notes in how to decipher that gibberish. Still no real clue, but there was an address happened where it was supposed to happen. So I dumped our binary into two reversing tools, jumped to that address and looked at the surrounding code.
And sure there it was: A missing check when manipulating a C-string which could lead to out of bound access. Added a check BSOD's gone.1
Hitting a really deep, deep low in the manic-depressive roller-coaster of the development cycle:
There comes the crunch time. No meeting goes by hearing the odious: "We don't have time for that." - One critical component needs to be finished for Big Sur and instead of addressing the real issues we keep changing design and goal. One main dev already gave up fighting the PO and team lead(!) - and now I'm next. So that dev build this really clean and minimal library as the core part. But now it's just like, yeah, take that nice Porsche engine put it on the old rusty bicycle from the shed,.. but maybe because that's so shitty we need that specially formed exhaust pipe to tune it. Yeah, very 'agile' - Only thinking about it makes me shudder in disbelief and anger. I shouldn't take that shit so serious, be emotional about shit code, I know, but I can't. Let them drive some rounds around the block, if it runs at all,.. because until now we still didn't make it run on the fuckin' street. It's all so insane. Will make some nice fireball, when it goes up in flames.
Well, I have been part of quite some shitty projects. Real suicide commandos set out to fail, and somehow stood them through or made it even "work" though it should never have. But what enrages me here is, that it needn't to be that way. We had plenty of time. Our team was often rowing along in good rhythm. And now I just feel drowned in resignation and sarcasm.
Deploying into linux containers (lxc) as of 2013 before docker even was da hype.
(Experience was a bit problematic tho, as it was in a highly virtualized environment whose backup would really badly kill the whole container every now and then: you could still ssh to the machine but with every access to the file system you'd lose your shell. and only the "echo 1 > /proc/sys/kernel/sysrq" would help to restart the box.)
Got called on company phone while being in home office. Somehow through VPN + RDP session it got routed to my laptop, but connection was really bad and we could hardly understand each other, i.e. I had to guess that it even was a recruiter.
Guy however was really nice, but I failed the interview to a job I did not really want.
Why are some defaults still so broken on Windows? Do they just not care or expect poeple will replace everything with third party stuff as the real defaults anyway?
Now through RDP connection stuff I have to spend more time on that #*?%&$§ OS and I would have expected the standard programs to work better. Here some of the stuff that really irks me:
* Groove Music sucks hard, how it doesn't let me edit playlists, but relies on its broken discovery of tracks. So I can play my old Eels songs from some subfolder in music folder, but only by manually loading each song. It never adds the songs to the list whereas the new NIN album is recognized. - It could have been nice, more of a lightweight Cessna, compared to that scary giant nineties Jumbo of media player?
* every time I use the snipping tool for a screen shot they suggest to use that screen sketch tool. I tried. Inside the RDP it was just unusable, when I tried to select the part of the screen. The selection cross wouldn't show or only too late. Unusable.
* using Internet Explorer as the default application for xml files. Sorry it's just so damn slow. And this smiley always gives me the creeps. (liveoverflow had one episode where he described his panic when he first saw an opening internet explorer: Uh, that strange face there, has it been hacked?) - but then nothing happens for a minute, I calm down, and open the file in some useful editor.7
This lack of real human contact is getting on my nerves. Most of the text messages, discussions, especially in PR or design roads to follow develop into pissing contests. Always proving how much one is right and the others are wrong. -
I get so pissed off with little details, e.g. useless, wrongly handled boolean return values. Cannot understand how they don't see it my way. Or how they can feel superior by offering platitudes like "One should never use singletons". As if following some stupid rules and patterns from a book made you a better programmer instead of looking closely what each problem really needs. Or how they don't measure properly/scientifically or can't interpret the numbers.
My blood pressure already rising just from writing about it. Maybe I need to get some time off. But at the same time I feel like, they are doing it all wrong or not the way it should be done, so it's hard to let go. To obsessed with all that shit...1
Taught my wife the first lesson in real world programming:
She had to do some python homework and it was already late night. Task was to apply several filters to a csv. So we did the good ol' STRG+C.
Am I a horrible person or my programming corrupted from within?4
Just wanted to make a clean install on my iMac. What could possibly go wrong?!
Cleaning the hard disk was interrupted by a process running (kextcache). Catalina wouldn't install ("Incomplete systen on target device". Dropping the terminal I could somehow force unmounting and wipe the disk. Had a BSOD in between. Catalina would still not install ("Failed to install pre boot volume"). Later erasing the disk got blocked by the kernel itself. Felt like trouble and it was: Next time I was greeted with a blinking folder containing a questionmark instead of the bitten Apple.
Last resort: Internet recovery. Installing El Capitan was said to take 7 hours so I took a USB time machine backup of latest Catalina. Installed it, but on reboot it get's stuck when progress bar is at 100%. But at least I've a working recovery again. Yeah, progress!5
You know what's the worst in doing software?
being assigned that dreadful project, that's doomed and cursed just from the start. Nobody dared to try or touch it for 7 years, because it's destined to fail. You will never get the resources to do it properly, all the constrains are just against you. Even as the requirements bars are lowered and lowered you barely make it. You keep testing that shit with QA for like 8 months past schedule. Then before release some core changes need to be done. It passes QA, but you somehow now it's just a ticking time bomb. It will just crumble and fall somewhere out there, if somebody dares to use that shit for real.
And so it goes.
Bug reports coming in.1
Fuck, I'll always be a noob. Knowing next to nothing about software development, hacking, exploits - just anything.
Felt a bit proud to had reached the level "hacker" on hack the box. Was fun solving stego, crypto and reversing challenges, diving into assembly the first time. Felt cool stepping through a disassemblied executable with radare, and understanding what a NOP slide is...
However all the illusion crumbled down, when I watched this CCC talk on OpenBSD security, where the speaker was underwhelmed with one of OpenBSD mitigations, where they tried to disallow them: "NOP slides?! Srly? No one is using that anymore. Just look at current exploits."
I felt so stupid, which I probably am. Will never catch up with those guys.
But whatever. In the end we all know nothing. We have no clue, but some are more apt in disguising it behind big speech.
(really like this German song: https://youtube.com/watch/...
Those lines always give me a chuckle:
"Man has no idea.
The house has no idea.
The tree has no idea.
The fawn has no idea.
The squid has no idea.
The tapir knows, but doesn't tell us.")3
It's time we treat social media like (trash) TV: it's all fake!
(can I buy a "++" - I hope not so, but who knows, everything is possible on the interwebs: your refrigerator liking Facebook pages or videos played in one pixel of a web page to generate more views...)3
Fuck XCode! -
Yesterday I had the stupid idea to rename an icon file. Checked that XCode was building the application still fine. Ran it over the build server: Failed, complaining about the old missing icon file! Checked again and again, but there was no friggin' reference to the old file in the whole repo.
Log in to the machine clear the build folder and try to build the component again. Bang still same error and the references to no longer existing files reappear.
Turns out XCode was caching those references somewhere in the home directory as "DerivedData" and after deleting those, I could build again... but why on earth are you building a cache if you cannot properly invalidate it? Just to waste our time?
"Delete all code!" That should be the mantra!
Was watching some stuff from destroyallsoftware.com. Not entirely convinced. So I should cook up my own shit.
So here is how the argument goes:
There's quite some negativity in the term "legacy" software. Partly it may be the envy to software that runs on actual machines and is not that phantasm, that perfect first lines on a greenfield project until it gets messed up as it has to put up with all the real world messiness. But the negativity it deserves is actually for the code that we cannot get rid of. This ugly class or function that soaked all the complexity and functionality so it defies any positive change. And always when it appears on your screen, it irks you, enrages you, makes you punch the screen, because you can almost feel the distaste physically. - *That* is the definition of "legacy" in its true negativity. No software should be like that. On the contrary. Every line should be replaceable, dispensable, disposable. At the verge to deletable. Because you know: the best code is no code.
This is where my hatred of code could get productive: Delete all the wretched, loathsome stuff and replace it, with something that just sucks less and can be thrown away any time. Don't expect beauty or perfect design. It'll never finish.4
Hell, I always thought I was a team player, but is it a great week being the sole developer (all the other on vacation). So I didn't get interrupted all the time, read overblown PR. Still, even in their absence I spent about three days fixing their build issues and PR's, but I could sit down and read the code, some documentation to get a better understanding why it all sucks and what we should do with our pain in the ass build system.
It's really a blast, deleting some stupid code, removing superfluous dependencies and above all leaving snarky remarks in the commit messages and code comments. Just letting some steam off. Code is where my devrant is.
Sometimes my hatred for code is so.. overwhelming that I think I need a sabbatical or should even stop altogether.
Let's face it. All code sucks. Just on different levels.
Want to go all bare metal? Love low level bit fiddling. Well, have fun searching for concurrency, memory corruption bugs. Still feel confident? Get ulcers from large C/C++ code base already in production, where something in the shared memory, function pointer magic is not totally right?
So you strive for more clean abstractions, fancy the high level stuff? Well, can you make sense of gcc's template error messages, are you ready for the monad, leaving behind the mundane everyday programmers, who still wonders about the scope of x and xs?
Wherever you go. Isn't it a stinking shit pile of entropy, arbitrary human made conventions? You're just getting more familiar with them, so you don't question them, they become your second skin, you become proficient - congrats you're a member of the 1337.7
I don't write monads,
nor intricate templates,
my code shall be stupid
and simple - free of any
arbitrariness and superfluity.
Clear and evident.2
Audience question to Uncle Bob: Which parts of the code do you unit test? What about code coverage?
Uncle Bob: Well (chuckling).. You test the parts of the code that you want to work.
I would have wanted to bring up SICP again, with the great big warning about the evil assignment operator and state and all the troubles that ensue (just think: concurrency).
But in a way, nothing has really come up from this or my attempts to dig deeper into "everything is a file/object" (Unix, smalltalk), neither from formal languages or the Curry-Howard correspondence. - Maybe there's just nothing, no firm bottom ground to discover. Like the physicists going for their world formula, but instead of a grand, beautiful symmetry that explains everything, we face a shattered world of (incompatible) theories, that is ever so more complex and chaotic through our theories applied to it. There may not be a Platonic ideal world of ideas, but rather partial constructs explaining some particular perceptions.
Similarly the one perfect programming language to rule them all, the perfect abstraction, pattern is probably just another prepubertal fantasy to be sunk.
So maybe instead of seeking the perfect epiphany, we should go for something quite different: the nagging, brooding uneasiness that something is wrong there, that there's something to be fixed... that even negative feeling would propel us to search further, not to stay in whatever is touted as the real thing.
Such irritations I found with Pieter Hintjens' writings. For example when he actively engaged in conspiracy theories. And I'm still not sure, if he just went off the cliff or he's even right alluding that these theories are an act of sanity, a self-defence against the hidden evil mights. I just don't know. Anything.
How rotten and half bitten is this most valuable Apple? See that they get quite some bashing for their latest Catalina release. And they deserve every portion of it, I think.
Honestly, when I saw our testers going through the different betas, which hardly installed and on which our software kept behaving differently, nevertheless they pushed their Golden Master and released. Didn't seem a good idea.
Currently I had to update to Catalina to check some small broken feature of ours and now the active window keeps on losing focus every few minutes. Have to grab the mouse and click there again to continue working. Really fucking annoying. Hope I can track it down some time.. or trash my iMac.3
Is this a technological metaphor?
For some Hacker challenge I was reading up on different keyboard layouts, Dvorak and stuff. And the technological lock in is baffling me: The rationale for qwerty was to reduce jamming of the typewriter letter arms. Today that doesn't make sense anymore, yet we stick to it. Wondering how much of today's tech is dragged down by things like that.
This stuff often also makes me weary of the first decisions, like choosing a protocol or data base - its kind and layout, because we might be stuck with it for reasons of backwards compatibility.... Like when Microsoft opted for the backslash as a directory separator..33
Some people are really getting high on this Agile shit. Probably because they learned some new bullshit bingo phrases - and it suits them: lots of vapory talk and expensive meetings and others will have to do the work anyway, while they can circlejerk on how to have shorter iterations to improve the time to market, increase the business value, inspect and adapt to faster deliver a minimal viable product - yeah, do the agile transformation, update to the digital age, you noobs. Throwing around some catchy phrases will let you compete with Google? Maybe need some blockchain or machine learning?
While you are clustering your post its, the coders who keep the ship afloat, sit in their legacy code base that's so bitrot they are mainly doing bugfix releases without a single feature for three fucking years. Consider this.5