Abouta geek diggin' deep
SkillsJava dev, Linux/UNIX sysadmin, performance engineer
Joined devRant on 2/26/2018
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
Since this evening I'm a proud owner of a VFR 800 A late Gen6 ('07).
What a way to rest my mind from programming and IT altogether!2
I can't believe I've just wasted 2 DAYS of my vacation to properly configure logging in my project...
2 fucking days!!! For something as trivial (yet vital) as logging!!!
Motorcycle owners, riders, I need your advice.
I have my licence for quite a few years now, yet I do not own a steel horse. I keep borrowing one [ninja 650 2010] occasionally for a ~100km ride from someone, 2-4 times per season.
A few weeks ago I did a 1k km mototrip around the country. Gotta say, I loved it! Ever since I cannot stop day dreaming about my own bike.
I'm not an aggressive rider. I like it smooth, steady, comfortable, but with some proper kick occasionally. I'd be riding in a city and taking longer trips [500+km], preferrably with a passenger.
Cruisers are awfully large, city bikes look boring, choppers are loud. Supersports - not my cup of joe. I think I'm settling for the sport-touring class.
Since I don't have lots of xp, it's likely I'll fall, so new and shiny or expensive toys will have to wait.
I feel like falling in love with vfr800 late gen6 [2007-'09], with fine-tuned vtec. I love all the feedback about the steadiness, comfort and power. And it does look cool!
What are your opinions about the vfr? What are the drawbacks?
What other bikes should I look at, that would have similar specs to vfr?
Also, when is it better to buy one? At the end of the season or at the beginning [spring/autumn]?1
oh, it got better!
One year ago I got fed up with my daily chores at work and decided to build a robot that does them, and does them better and with higher accuracy than I could ever do (or either of my teammates). So I did it. And since it was my personal initiative, I wasn't given any spare time to work on it. So that leaves gaps between my BAU tasks and personal time after working hours.
Regardless, I spent countless hours building the thing. It's not very large, ~50k LoC, but for a single person with very little time, it's quite a project to make.
The result is a pure-Java slack-bot and a REST API that's utilized by the bot. The bot knows how to parse natural language, how to reply responses in human-friendly format and how to shout out errors in human-friendly manner. Also supports conversation contexts (e.g. asks for additional details if needed before starting some task), and some other bells and whistles. It's a pretty cool automaton with a human-friendly human-like UI.
A year goes by. Management decides that another team should take this project over. Well okay, they are the client, the code is technically theirs.
The team asks me to do the knowledge transfer. Sounds reasonable. Okay.. I'll do it. It's my baby, you are taking it over - sure, I'll teach you how to have fun with it.
Then they announce they will want to port this codebase to use an excessive, completely rudimentary framework (in this project) and hog of resources - Spring. I was startled... They have a perfectly running lightweight pure-java solution, suitable for lambdas (starts up in 0.3sec), having complete control over all the parts of the machinery. And they want to turn it into a clunky, slow monster, riddled with Reflection, limited by the framework, allowing (and often encouraging) bad coding practices.
When I asked "what problem does this codebase have that Spring is going to solve" they replied me with "none, it's just that we're more used to maintaining Spring projects"
sure... why not... My baby is too pretty and too powerful for you - make it disgusting first thing in the morning! You own it anyway..
Then I am asked to consult them on how is it best to make the port. How to destroy my perfectly isolated handlers and merge them into monstrous @Controller classes with shared contexts and stuff. So you not only want to kill my baby - you want me to advise you on how to do it best.
sure... why not...
I did what I was asked until they ran into classloader conflicts (Spring context has its own classloaders). A few months later the port is not yet complete - the Spring version does not boot up. And they accidentally mention that a demo is coming. They'll be demoing that degenerate abomination to the VP.
The port was far from ready, so they were going to use my original version. And once again they asked me "what do you think we should show in the demo?"
You took my baby. You want to mutilate it. You want me to advise on how to do that best. And now you want me to advise on "which angle would it be best to look at it".
I wasn't invited to the demo, but my colleagues were. After the demo they told me mgmt asked those devs "why are you porting it to Spring?" and they answered with "because Spring will open us lots of possibilities for maintenance and extension of this project"
I can take a lot. But man, that hurts.
I wonder what else have they planned for me...11
Every time I have to switch from backend development to frontend and deal with rxjs Observables, I feel like a spider crafting a web, so that no matter at which string the fly/event happens, the right other strings will be pulled and I will get a nice notification.
No wonder it's called WEB-development2
Sorry, need to vent.
In my current project I'm using two main libraries [slack client and k8s client], both official. And they both suck!
Okay, okay, their code doesn't really suck [apart from k8s severely violating Liskov's principle!]. The sucky part is not really their fault. It's the commonly used 3rd-party library that's fucked up.
yeah yeah, here come all the booos. Let them all out.
1. In websockets it hard-caps frame size to 16mb w/o an ability to change it. So.. Forget about unchunked file transfers there... What's even worse - they close the websocket if the frame size exceeds that limit. Yep, instead of failing to send it kills the conn.
2. In websockets they are writing data completely async. Without any control handles.. No clue when the write starts, completes or fails. No callbacks, no promises, no nothing other feedback
3. In http requests they are splitting my request into multiple buffers. This fucks up the slack cluent, as I cannot post messages over 4050 chars in size . Thanks to the okhttp these long texts get split into multiple messages. Which effectively fucks up formatting [bold, italic, codeblocks, links,...], as the formatted blocks get torn apart. [didn't investigate this deeper: it's friday evening and it's kotlin, not java, so I saved myself from the trouble of parsing yet unknown syntax]
yes, okhttp is probably a good library for the most of it. Yes, people like it, but hell, these corner cases and weird design decisions drive me mad!
And it's not like I could swap it with anynother lib.. I don't depend on it -- other libs I need do!
Building a wheel is great.
Building a steering wheel is also great
Building a brakes pedal is amazing.
Making them work asynchronously - not that good of an idea is it...
Who the fuck thought separating data stream (copying bytes) from stream control (when does the stream start/end) is a good idea...?
- open a connection
- send data to the stream
- send() returns
- close the connection
Apparently, the send() does not copy the data and returns. Instead, it enqueues the data copying task end returns. When does the actual copying start? IDK. When does it end? IDK. Can I close the conn? NO!
This thing is UNUSABLE. And I'd riddle it with reflection-based workarounds if it weren't for the static methods.
Before I continue, I should mention that I have a quality: I observe, find repetitive patterns and find ways to automate them. It just happens naturally, hardly ever intentionally.
I have been in this role for quite a while now. Most of my colleagues are of nationality X (I guess we all know what X is in IT projects). Naturally, there are lots of repetitions all over the place. So I started the automation.
The Frontend of the automation is a slack bot. It's just like another member of our team. And my goal was to make it as human-like as I could.
I launched the bot a few months ago.
Today I start my shift and see other employees of nationality X persistently asking my bot to join the conference call. Apparently, they assumed that the bot is just another X fellow...
Took them a while to give up.
What does that tell us about X.....
P.S. I have coded human-like conversation capability to keep on chatting even when the bot doesn't understand what it's asked to do.27
* 10 app instances running
* 1 instance starts burning up 100% cpu
* we ask for a Thread Dump (stack traces)
* we get a TD taken after they manually restarted the instance
* they: "Please investigate. We need this fixed ASAP"
EVERY FUCKING TIME!!! Not once in recent years have they managed to take a TD correctly. What kind of a retarded monkey do you have to be for this to not sink in for YEARS!
Who tf put those idiot monkeys there in the first place...8
Chrome blocked TheGreatSuspender yesterday. All the Chrome installations got that extension removed.
300-400 tabs (in total): *poof*17
We are gating release of each sprint.
Today before 10:00AM I identified a major performance problem and asked devs to fix it (single if() will be enough as a hotfix). We're blocked until we have the fix deployed.
It's 5pm and we're still waiting for that 1 `if` clause to be added and deployed :)
A long day it was. Full of hopes and expectations, waiting for things to happen
When you convince your client to purchase a commercial thread-dump analysis tool, and that pies of soft gives you flamegraphs like this one [excerpt].
And then your own TD analysis tool works significantly better than that.
[P.S. I wonder how many of you will spot what's wrong here :) ]5
That nice feeling, when your laptop battery has 10% of charge left and you *know* you still have a good half an hour to do whatever you're doing before you have to worry about it.
You're more likely to finish your task than run out of juice.
This brings all kinds of satisfactory feelings 😌5
Watching a piece (a Belgian TV series) about hackers
- Police IT dpt takes a burned down computer (literally burned down -- black from the smoke), plug it into the mains and remove a graphics card. To collect evidence from.
- A policeman from IT dpt is browsing some company's website (while at the police station), looking at their clients. Address bar says: 127.0.0.1.
- The police hacker is browsing some forum. She got the post author's IP and MAC addresses from that forum post metainfo.
<img src="awkward.jpeg" alt="Awkward...">
<img src="confused_jackie.jpeg" alt="Awkward...">20
- Debugging some application locally (with debugger)
- 20-30 manual step-ins, tracking those values VERY closely
- debugger becomes a little sluggish
- move mouse to select a line to jump to
- cursor is lagging: all jumpy and everything
- everything freezes.
sooo...either reboot the laptop and lose all the work, or wait for OOMK to kick in, which could be hours, depending on the level of memory starvation.13
What are your resolutions for 2021? What mistakes do you promise to not make any more and what mistakes are you yet to make? What wrongs are you to right next year?7
"I'd say it was a trainwreck and a shitshow, but that would be unfair to trains and shit"
-- Death to 2020
A heads-up to whoever this is of interest to, Yourkit Java Profiler Personal licences are again available until mid-Jan. $100 per licence.
Some folks I cannot remember keep popping up with their 'i am back' posts and make me wonder: "should I know this lad? Was he here before me? Was he posting so little quality content that I didn't even notice him? Will I offend that person by saying idk who he is? Should I really care...?7
I'm torn apart by the upcoming new year. I can't wait forbthis horrible yearbto end, hoping the next will be better. But I'm afraid this year might be just an intro into what's coming.
Trying to stay positive. Let's hope for the best, but prepare for the worst.5
I think we all know who the Atlas really is.
I've had this feeling ever since I've started my IT career.11
unlimited time is not the only problem. During that time I'd get hungry, cold and tired -- I need to afford to buy food, have a home with roof and warmth. So with unlimited time, I'll also need unlimited funds.
And if I had unlimited funds I'd spend most of my time AFK: buying a house, making it pretty, setting up my own lab and a solar+wind powerplant, recruiting some folks to finish my project for me. Then travel all around the world, while my code monkeys are busy making me famous for introducing new tech to the world - so new, that it'll change the way we live, that it'll change our communication, interaction and other habits. And then I'll be ready for the EternalLife underground project, where another set of teams of bio-monkeys will be busy making my consciousness alive after my body wears out.
If only I had all those funds...
Care to chip in?
Has pretty much everything you may need, except for a TCP/UDP server functionality.
I mean, if it has a built-in TCP client -- why not create simplistic TCP server?
I was hoping to work on my project this weekend. Turns out, the kindergarten gave all the parents a task - to make a Christmas-y house with their child.
Well, I didn't work on my project, no doubt about that. But I found some other place to overengineer the shit out of it. And, frankly, I LOVED it.
2 days wasted. Not even sorry.
EDIT: all the materials are from the trash bin. That makes it even more fun!
EDIT2: Paint job is my wife's :) I'm too sloppy for it.13
Be a fellow who's distracted af. You just had a presentation in another city. You're driving home and a light lits up saying you need gas. You stop at the petrol station, pour in some gas, grab a cop of joe while you're at it, pay and leave. You're 15minutes away from the gas stop already and an unknown number is calling you. You pick it up. A male voice says
Voice: "hello, this is police. Did you just leave a gas stop 15 minutes ago?"
You: *wtf, what the fuck did I do now!* "yes, I sure did."
Voice: "you forgot to pay for the fuel"
you: *oh shit, he's right! I remember now - I only paid for the coffee! Shit! I'm in trouble now. *
"oh.. Right, you're right, I forgot... I'll turn around and come back to pay
Voice: "wait, don't rush, I may be able to help you. I'll call you back, keep your phone close" *hangs up*
5 minutes later phone rings again.
Voice: "can you pull over, please? Here's a phone number of that gas stop. Give them a call, I'm sure you'll sort it our. Have a nice day!" *hangs up*
you call that number. A woman picks up.
You: "hello, I forgot to pay you for the gas, gimme a few minutes - I'll turn around and get back to you"
Operator: "do not worry, I think I can help you! You can pay for it at your home town if you like, but I'm afraid they might not be working today. But they will tomorrow! Would that be OK for you?"
you: "umm, yeah, of course! It's my fault - anything is OK for me!"
operator: "ooorrr.. I could pay for you now and you would pay me back. Would that work? Here's my bank account, I'll pay for you when you send me those 50 something €"
a fantasy story? Made up story? Bed time stories? Dysney movie plot? Phishing? Canada?
No. This is Lithuania :) believe it or not, this is a true story, and there are more like this one.
Respect to the police!12
when you are at someone else's desktop/laptop and the screen is so dirty you can almost see what that person likes to eat.
And if that's a touch-screen, you are literally touching what that person ate weeks, months ago.6
Each time I come back to the npm-related parts of my project, the application won't start because of some dependencies nonsense. And I know for sure I left the project working perfectly last time.
Every time... every fucking time! Just leave the project unattended for a week and be sure you'll find it dead next time.
I mean I as a developer don't really have to do ANYTHING for my code to break.
it's a bit annoying when you, as a consumer, have to rev-engineer the temporal coupling among dozens of rest methods.
It's not fun. NOT fun at all2