Details
-
AboutJust some random dude.
-
Skillslearning HTML/CSS and PHP.
Joined devRant on 10/28/2016
Join devRant
Do all the things like
++ or -- rants, post your own rants, comment on others' rants and build your customized dev avatar
Sign Up
Pipeless API
From the creators of devRant, Pipeless lets you power real-time personalized recommendations and activity feeds using a simple API
Learn More
-
Some empty-headed helpdesk girl skipped into our office yesterday afternoon, despite the big scary warning signs glued to the door.
"Hey, when I log in on my phone, the menu is looking weird"
"Uh... look at my beard"
"What"
"Just look at this beard!"
"Uh.... OK"
"Does this look like a perfectly groomed beard"
"Uh... it's pretty nice I guess"
"You don't have to lie"
She looks puzzled: "OK... maybe it could use a little trimming. Uh... a lot of trimming". "I still like it though" she adds, trying hard to be polite.
"I understand you just started working here. But the beard... the beard should make it clear. See the office opposite to this one?"
"Yeah"
"Perfectly groomed ginger beards. It's all stylish shawls and smiles and spinach smoothies. Those people are known as frontend developers, they care about pixels and menus. Now look at my beard. It is dark and wild, it has some gray stress hairs, and if you take a deep breath it smells like dust and cognac mixed with the tears caused by failed deploys. Nothing personal, but I don't give a fuck what a menu looks like on your phone."
She looked around, and noticed the other 2 tired looking guys with unshaven hobo chins. To her credit, she pointed at the woman in the corner: "What about her, she doesn't seem to have a beard"
Yulia, 1.9m long muscled database admin from Ukraine, lets out a heavy sigh. "I do not know you well enough yet to show you where I grow my unkempt graying hairs... . Now get lost divchyna."
Helpdesk girl leaves the scene.
Joanna, machine learning dev, walks in: "I saw a confused blonde lost in the hallway, did you give her the beard speech?"
"Yeah" -- couldn't hold back a giggle -- "haha now she'll come to you"
Joanna: "No I already took care of it"
"How?"
"She started about some stupid menu, so I just told her to smell my cup". Joanna, functional alcoholic, is holding her 4pm Irish coffee. "I think this living up to our stereotype tactic is working, because the girl laughed and nodded like she understood, and ran off to the design department"
Me: "I do miss shaving though"68 -
!rant
This was over a year ago now, but my first PR at my current job was +6,249/-1,545,334 loc. Here is how that happened... When I joined the company and saw the code I was supposed to work on I kind of freaked out. The project was set up in the most ass-backward way with some sort of bootstrap boilerplate sample app thing with its own build process inside a subfolder of the main angular project. The angular app used all the CSS, fonts, icons, etc. from the boilerplate app and referenced the assets directly. If you needed to make changes to the CSS, fonts, icons, etc you would need to cd into the boilerplate app directory, make the changes, run a Gulp build that compiled things there, then cd back to the main directory and run Grunt build (thats right, both grunt and gulp) that then built the angular app and referenced the compiled assets inside the boilerplate directory. One simple CSS change would take 2 minutes to test at minimum.
I told them I needed at least a week to overhaul the app before I felt like I could do any real work. Here were the horrors I found along the way.
- All compiled (unminified) assets (both CSS and JS) were committed to git, including vendor code such as jQuery and Bootstrap.
- All bower components were committed to git (ALL their source code, documentation, etc, not just the one dist/minified JS file we referenced).
- The Grunt build was set up by someone who had no idea what they were doing. Every SINGLE file or dependency that needed to be copied to the build folder was listed one by one in a HUGE config.json file instead of using pattern matching like `assets/images/*`.
- All the example code from the boilerplate and multiple jQuery spaghetti sample apps from the boilerplate were committed to git, as well as ALL the documentation too. There was literally a `git clone` of the boilerplate repo inside a folder in the app.
- There were two separate copies of Bootstrap 3 being compiled from source. One inside the boilerplate folder and one at the angular app level. They were both included on the page, so literally every single CSS rule was overridden by the second copy of bootstrap. Oh, and because bootstrap source was included and commited and built from source, the actual bootstrap source files had been edited by developers to change styles (instead of overriding them) so there was no replacing it with an OOTB minified version.
- It is an angular app but there were multiple jQuery libraries included and relied upon and used for actual in-app functionality behavior. And, beyond that, even though angular includes many native ways to do XHR requests (using $resource or $http), there were numerous places in the app where there were `XMLHttpRequest`s intermixed with angular code.
- There was no live reloading for local development, meaning if I wanted to make one CSS change I had to stop my server, run a build, start again (about 2 minutes total). They seemed to think this was fine.
- All this monstrosity was handled by a single massive Gruntfile that was over 2000loc. When all my hacking and slashing was done, I reduced this to ~140loc.
- There were developer's (I use that term loosely) *PERSONAL AWS ACCESS KEYS* hardcoded into the source code (remember, this is a web end app, so this was in every user's browser) in order to do file uploads. Of course when I checked in AWS, those keys had full admin access to absolutely everything in AWS.
- The entire unminified AWS Javascript SDK was included on the page and not used or referenced (~1.5mb)
- There was no error handling or reporting. An API error would just result in nothing happening on the front end, so the user would usually just click and click again, re-triggering the same error. There was also no error reporting software installed (NewRelic, Rollbar, etc) so we had no idea when our users encountered errors on the front end. The previous developers would literally guide users who were experiencing issues through opening their console in dev tools and have them screenshot the error and send it to them.
- I could go on and on...
This is why you hire a real front-end engineer to build your web app instead of the cheapest contractors you can find from Ukraine.19 -
Hi, I am a Javascript apprentice. Can you help me with my project?
- Sure! What do you need?
Oh, it’s very simple, I just want to make a static webpage that shows a clock with the real time.
- Wait, why static? Why not dynamic?
I don’t know, I guess it’ll be easier.
- Well, maybe, but that’s boring, and if that’s boring you are not going to put in time, and if you’re not going to put in time, it’s going to be harder; so it’s better to start with something harder in order to make it easier.
You know that doesn’t make sense right?
- When you learn Javascript you’ll get it.
Okay, so I want to parse this date first to make the clock be universal for all the regions.
- You’re not going to do that by yourself right? You know what they say, don’t repeat yourself!
But it’s just two lines.
- Don’t reinvent the wheel!
Literally, Javascript has a built in library for t...
- One component per file!
I’m lost.
- It happens, and you’ll get lost managing your files as well. You should use Webpack or Browserify for managing your modules.
Doesn’t Javascript include that already?
- Yes, but some people still have previous versions of ECMAScript, so it wouldn’t be compatible.
What’s ECMAScript?
- Javascript
Why is it called ECMAScript then?
- It’s called both ways. Anyways, after you install Webpack to manage your modules, you still need a module and dependency manager, such as bower, or node package manager or yarn.
What does that have to do with my page?
- So you can install AngularJS.
What’s AngularJS?
- A Javascript framework that allows you to do complex stuff easily, such as two way data binding!
Oh, that’s great, so if I modify one sentence on a part of the page, it will automatically refresh the other part of the page which is related to the first one and viceversa?
- Exactly! Except two way data binding is not recommended, since you don’t want child components to edit the parent components of your app.
Then why make two way data binding in the first place?
- It’s backed up by Google. You just don’t get it do you?
I have installed AngularJS now, but it seems I have to redefine something called a... directive?
- AngularJS is old now, you should start using Angular, aka Angular 2.
But it’s the same name... wtf! Only 3 minutes have passed since we started talking, how are they in Angular 2 already?
- You mean 3.
2.
- 3.
4?
- 5.
6?
- Exactly.
Okay, I now know Angular 6.0, and use a component based architecture using only a one way data binding, I have read and started using the Design Patterns already described to solve my problem without reinventing the wheel using libraries such as lodash and D3 for a world map visualization of my clock as well as moment to parse the dates correctly. I also used ECMAScript 6 with Babel to secure backwards compatibility.
- That’s good.
Really?
- Yes, except you didn’t concatenate your html into templates that can be under a super Javascript file which can, then, be concatenated along all your Javascript files and finally be minimized in order to reduce latency. And automate all that process using Gulp while testing every single unit of your code using Jasmine or protractor or just the Angular built in unit tester.
I did.
- But did you use TypeScript?37 -
Tips for people new to programming
1. Start counting from zero
2. Trees are upside down, root's probably at the top
3. Warnings are usual, go rogue!
What more? 😂34 -
rant && dev && education
So I just interviewed this guy for admission into our bootcamp and because he has raised some red flags before, I asked him to just write a factorial function and he chose HTML to do it. I told him he can certainly try thinking that maybe he doesn't know that whatever you write inside script tag is actually JavaScript. He went on to do this. What bothers me is he have a computer science diploma.
Till now I have just heard of these people but always taught those are just marketing or some person who think that just because they here HTML with some other programming language. BUT THIS IS SOME NEXT LEVEL SHIT.78 -
Boss: "I don't want to comply with the GDPR"
Me, DPO: "I've told you the house rules. You must comply, stop arguing"
Boss: "But I don't want it. Bobby doesn't have to, and Eve doesn't have to, their moms are cool"
Me: "I don't give a crap about the other kids, you're going to be GDPR compliant. Bob and Eve will end up being raped in prison. It's that what you want?"
Boss: "What if I just pretend to do it."
Me: "I'll take away all your marketing toys. No more mailchimp for you young man."
Boss, crying: "You wouldn't touch my Facebook pixel!"
Me: "Especially your Facebook pixel. I'm so sick of that thing...."
Me: "...Look, you can still play with your toys, all I'm saying is you need to be honest and ask your buddies for consent before you put your pixels up their various holes"
Boss: "But they will never agree!"
Me: "Maybe that is good thing"
Boss: "But how will we get people to like us if I can't feed them pills and insert probes into their holes to measure their responses?"
Me: "Maybe you should focus on being a nice kid, someone people like to play with. Your buddies will tell other kids that you're a nice guy. Now, I'm not going to lie to you, it will be hard work. Much more effort than what you're doing now. But you know, those friends will stick with you for decades, instead of just until the marketing-drugs wear off"
Boss: "I think I want a new mom"
Me: "You signed a contract. You're stuck with me for the next 2 years. And as long as you're living under my roof, you will follow my rules."14 -
I imagine two dev colleagues sitting next to each other, on their phone, each feeling very secure in the anonymity of devrant.11
-
Welcome back to practiseSafeHex's most incompetent co-worker!
*sitcom audience cheers*
Thank you, thank you. Ok so far we've had a developer from hell and a CEO who shot to fame for being the first rectum to receive a passport and be given a job.
2 pretty strong entrants if you ask me. But its time to slow it down and make sure everyone gets a fair chance. Its not all just about the psychopaths and assholes, what about the general weirdo's and the stoners who just made life awkward?
So here we go, Most incompetent co-worker, candidate 3, "A".
"A" was a bit of an unusual developer, despite having a few years experience in his home country, he applied for an unpaid internship to come work with us ... probably should have rang alarm bells but hey we were all young and dumb back then.
I had to say I felt very bad for A, as he suffered from 2 very serious, and job crippling personal conditions / problems
- Email induced panic attacks
- Extreme multifaceted attachment disorder (also known in layman terms as "get the fuck away from me, and do your job" syndrome)
While he never openly discussed these conditions, it was clear from working with him, that he had gone undiagnosed for years. Every time an email would come in no matter how simple ... even the services team asking to confirm his staff ID, would send him into a panic causing him to drop everything he was doing and like a homing missile find me anywhere in the building and ask me what to do.
Actually "A" also suffered from a debilitating literacy issue too, leaving him completely unable to read our internal wiki's himself. Every week we had to follow a set of steps to upgrade something and every week to mask his issue, he'd ask me what to do instead ... no matter how many times I sat with him previously ... must have been truly embarrassing for him.
But "A"'s finest moment in the company, by far, was the day where out of the blue, at the top of his voice (as if wearing headphones ... without wearing headphones) he asked
"DO YOU KNOW ANYONE WHO SELLS POT?"
... why no, manager of the entire department standing behind you, I do not
... why no, tech lead talking to manager, I do not
... why hello 50% of my team staring at me ... no "A", I do not!
Needless to say all our team meetings were a little awkward for the next few weeks after that but hey who doesn't like being thought of as a stoner / drug dealer by their team mates huh?
Will A make it to the top of the list of most incompetent? Well he has some truly logic defining competition yet to be announced.
Tune in later for more practiceSafeHex's most incompetent co-worker!!!15 -
I might have posted this before. But I am going to post it again. Because emojis.
Me: 😁 Software lead I have finished coding the thing.
SL: 😀 Cool, good job. That is going to really help out the analysts.
Software Manager: 😐 hey I noticed you have coded a new thing and pushed it to integration.
Me: 😁 Yes.
SM: 😐 Well how do you know when it's done?
Me: 😑 . . . When you run it and it does the thing?
SM: 😐 Did you write test steps?
Me: 😕 Yeah . . . they're in the issue ticket.
SM: 😐 Yeah but how do you know those are right?
Me: 😕 Because I wrote the thing and the test steps?
SM: 😐 did you put any steps in our acceptance test procedure?
Me: 😕 No.
SM: 😐 why not?
Me: 😧 Because the acceptance test procedure tests requirements. There is no requirement for this functionality.
SM: 😑 Then why did you do it?
Me: 🤔 Because it was an internal request from the analysis team. There is no customer impact here.
SM: 😑 I really think we should write a requirement.
SL: 🤔 But what requirement is he going to attach this to?
SM: 😑 We don't have to attach it to a requirement. We can just test it once and remove it.
Me: 😒 SM, you know we never remove anything from the acceptance test procedure.
SM: 🙂 We do sometimes.
SL: 🤔 When was that I have worked here for twenty years and we have never removed a test from that document.
SM: 😑
SL: 😒
SM: 😑
SL: 😒
Me: 🤐
SM: 😧 I really think there should be an acceptance test written.
SL: 😧 Looks like you're writing an acceptance test.
Me: 😒 Alright as long as y'all're payin'. Shit I was just tryin' to save y'all money.
*acceptance test written and sent to peer review*
Peer: 😐 The requirement tested section doesn't have any requirements spelled out.
Me: 😅 No.
Peer: 🤔 Why?
Me: 😓 Because there is no requirement associated with this test.
Peer: 🤔 Then why are we adding an acceptance test?
Me: 😡 WELL AIN'T THAT A GOOD GOD DAMN QUESTION!?6 -
Oh my god... Storytime.
A customer comes in with I assume is his father or grandfather.
Customer: I need a computer, but without all the internals
Me: So a case?
Customer: Yes, I need a Dell computer outsides, but without the internal components.
Me: Well, we don't have Dell cases, but we sell custom build cases and they come with a power supply.
Customer: *says nothing, but looks interested*
Me: *walks over to the cases to show him* So this is what the cases look like and we have two types, one for a ATX and one for a micro-ATX.
Customer: *still says nothing, but looks at them*
Me: What motherboard do you have at the moment?
Customer: Well, I don't have anything right now, but I'm replacing another computer that didn't work very well. I'm going to be getting some Dell parts to put in here.
Me: O-okay. So this other computer, I'd like to see it in shop to see what's going on with it.
Customer: Oh, you do NOT want to do that. I hooked it up to another computer and it blew it up.
Me: Huh, that's weird. I'd still like to look at it if possible.
Customer: Oh no, it's all wired wrong and... *some bullshit, but stay with me*
Customer: I am the best at technology. My hand has computer parts in it--government funded. *some more bullshit*
Me: Okay... *I try to bring it back around* Well, I'd still like to see the other computer for myself. So you don't have parts for this new build yet, right? You don't know what type of motherboard you have?
Customer: No.
Me: Well, I would get the internals first, so you know what size of case to get, and then get the case.
Customer: Okay. Thank you for your time.
He shook my hand with his "cyborg" hand and I was tempted to say something about "try not to crush my hand," but elected not to. Also during this entire exchange, the old man continuously farted in the background.22 -
Someone asked for an RSS feed for the security/privacy blog, I thought?
Well, hereby! There are three feeds:
https://much-security.nl/main.xml - a feed which is updated with both blog posts and external links relating to privacy/security I find interesting/useful.
https://much-security.nl/own.xml - a feed only containing the blogs posts themselves. For people who are only interested in that part.
https://much-security.nl/external.x... - a feed only containing external links. For people who'd like to stay updated on recent cyber security/privacy thingies.
Tracking: every time a feed is visited, a redis value for that feed get's incremented. No time, ip addresses, user agent or whatsoever is saved. Just one variable getting increased once.
New domain name will also be revealed soon (probs tomorrow, going to bed soon as I've just been sick) :D.
Oh and just a warning, the main/external feed are the only ones populated with exactly one item right now :P30 -
Wan't your own personal devBanner?
Now you can have one!
We're building a powerful banner generator over here: https://devrant.com/collabs/...
The first version is up and running, still basic tho.
You can generate your own by calling this URL:
https://devrant.nuernberger.kim/api...
You'll have to replace "Kimmax" with your devrant name and the value after subtext with the extra text.
A cool domain is already on it's way!
We'll be working on a frontend and a ton of extra features to make this banner even more awesome.
If you got any nice ideas add them to the issue tracker here: https://github.com/cozyplanes/...
Have fun!95 -
I know it wasn't ethical, but I had to do it.
Semester 4 started this week, we all got to vote which day we wanted the lecture to be held on. There were quite a few options. My preference was Monday at 7:30pm.
So I entered the poll, as I have every other semester. But I noticed something, this particular poll didn't require any form of identification. Not even a Student ID.
I dug deeper, found that it used local cookies to store weather you'd voted or not, this is obviously a security problem, so I opened up Python and wrote a simple Selenium program to automate this process.
I called it the "Vote Smasher". First it would open the webpage, then it would choose Monday 7:30pm and vote. Then it would clear it's cookies, refresh and do it over again.
I ran it fifty times.
Can you guess what the revealed vote was for UCD SP4 IT was?
I heard my lecturer mutter:
"The votes aren't usually this slanted..."
I could hardly contain my giggles.
My vote won by about fifty over the others 😂
Let me just say, it was his fault for choosing such a naive poll system in the first place 😉36 -
Uncle: "It must be noisy, programming. I've seen a datacenter on TV, and those computers are loud" — "It is noisy, but that's more my coworkers fault"
Sales guy at the office: "So you see patterns in the code, you can read this cryptic mess?" — "Uh this is PHP, Its not the syntax that makes it hard to read, it's the dimwit who wrote it"
Father-in-law: "Could you reprogram my laptop, I got a virus trying to download por... nature documentaries" — "I'm not that kind of doctor"
Mother-in-law: "How will you sustain a family, you just play video games all day" — "I make your monthly teachers salary in four days"
Girlfriend: "I learned some Lua today because I needed a world of warcraft extension for..." — "I love you too"22 -
buzzword translations:
"cloud" -> someones computer
"big data" -> lots of somewhat irrelevant data
"ai" -> if if if if if if if if if if if if if else
"algorithm" -> something that works but you don't know why
"secure" -> https://
"cyber security" -> kali linux + black hoodie
"innovation" -> adding something completely irrelevant such as making a poop emoji talk
"blockchain" -> we make lots of backups
"privacy" -> we store your data, we just don't tell you about it40 -
A programmer once explained Nietzsche like this:
A long time ago, god created the world, but forgot to leave a developer documentation, thus the whole world was like legacy code...
And humans are like the end user of this world, and some among them spent time studying it, using the Moral API, hoping to get a result of "http 200 ok" from our world for the peace of mind. But the true operation of this world is still yet unknown...
As time passes, humans begin to find that in Moral API, good and evil are two base classes, and all the other moral properties (like ethic, justice and stuff) are just other classes based on those two classes through multiple inheritance.
One day, when programmer Nietzsche was observing the world's runtime behavior, he came up with a question:
"Did god really use good and evil as base classes? Could it be that they are actually derived classes?"
Most of the world is currently in the favor of mankind, and god must've wrote individual user cases for it's end users, he thought.
This made Nietzsche thinking: if end users are considered into two cases: the strong and the weak, how would the world be designed base on its user story?
Let's think about the strong, they can bully the weak as they please, and there's nothing the weak can do to stop them. In this case whether the Moral API exists or not doesn't fulfill the need of the strong.
But when it comes to the weak, Nietzsche thinks that because the weak cannot fight the strong, they need to belittle bullying and praise the strong for being nice. When the weak does this, it covers their powerless state to some extent, making them look somehow equal to the strong by being capable of commenting.
God might have coded the Moral API to fit the weak's requirement, also adding some public methods for the weak to comment on the strong. If the strong takes care of the weak, they call him nice and good, if the strong bullies people, they call him bad and evil.
That's when Nietzsche realized, that good and evil are both derived classes from the weak, and the base class should be the strong and the weak.
Then he started a series of studies about the Moral API, and got some thesis that persuaded lots of other end users...7 -
:^)
For real though, to each their own in the end.
I accept MacOS for development, but Apple hardware is just price gouging.51 -
Ever wanted cheat codes to devRant? Well, that's weird. But here you go, I guess.
Since the avatars do not use any external assets (Such as images), all avatars are generated. To be friendly to people who want to make third-party devRant clients (such as devRantron), avatars are generated server-side, so that the assets don't need to be distributed, and third-party programmers don't need to work out rendering avatars.
But this allows you to cheat a little.
The devRant avatars API works like this: you request a really long URL from the API, specifying the IDs of each cosmetic item the user has active, and it returns a PNG file. But you don't need an auth token to generate an avatar (which makes sense), so the avatar API is essentially a sandbox you can play around with if you have the time and patience.
You can write a really good avatar previewer with this knowledge, and see your avatar with a white tiger, even if you don't have the ++s13 -
My friend called me up once saying the new mouse he bought to use with his laptop wasn't working.
I told him to just plug it into the usb port and it should just work immediately.
After an hour of trying shitload of things I finally gave up and said I'll come over and have a look.
And there was his mouse.
Connected to a phone charger.
To a wall outlet.14 -
@MissDirection today I learned what it truly means to be a "codeslut". I understand the decision you made to change your username due to the circumstances but I want you know that I'm now seriously considering prepending 'CodeSlut' to my username.
To be a code slut, in my definition, is to fuck with all things code.
I don't remember the idiot(s) that murked the name with shame, I remember being scornful towards them for their immaturity...But now I know whole the truth, and that what they were also unknowingly shaming was any engineer who has had an interest in anything related to code. Fuck them, in a sense they've fucked themselves, because I personally believe that as developers there's a little (code)slut in each and every one of you. Those who are willing to fuck with all of it and have a damn good time doing it. To dabble in a little bit of this and a little bit of that from time to time. Whether or not we stick with it is irrelevant, it's the experience we gain from it that makes us better people. To shame a code slut is to shame the pursuit of knowledge. And to shame the pursuit of knowledge is to shame my purpose in life. I stand by my pursuit to fuck with it all, no tech is sacred - I will fuck with it!
Please @MissDirection don't let my new username stop you from ever changing yours back to what it was or take this as some form of a personal insult/joke. I'm serious - I understand now. I'm not even sure if you realised it, but QueenCodeSlut held such beauty and truth to it that many(including myself) couldn't even begin to fathom. That is enlightenment of the utmost pulchritude, please accept this username change as a gesture of honor and respect towards you and any other fellow humans with their own endeavors of truth and knowledge.12 -
Hey everyone,
Our live stream announcement and Q&A will be going live in less than 30 mins (9pm EDT)!
The event is here: https://youtu.be/Vk7TIKadYHk
We will be taking questions on the YouTube chat, feel free to ask whatever you want!
Thanks to all who tune in, hope you enjoy!
EDIT: big thanks to everyone who joined us and participated! The replay is available at the YouTube link above, and you can check out devDucks in the devRant swag store (https://swag.devrant.io) or the page we set up at http://devducks.com20 -
Today at work, still laugh thinking back to it!
We were on lunch break but the linux support engineers who are on the phones as well have to pick up calls anyways (very small team).
*engineer walks to the table, sits down: Ahhh rest, finally!*
*tringggggggggg*
*engineer pulls a face like 'oh for fucks sake' and walks back to his desk*
*puts headphones on and clicks the answer button just as it disappears*
"really!?! Alright lets finally eat now"
*sits for literally one second*
*tringgggggggggg*
*Engineer seems quite pissed off now. walks to his desk again, puts on headset, clicks the answer button JUST as the call stops again*
"Mother of god, fucking really?"
*stays as his desk for a minute or so, walks back, stays hovering above his chair for a little and finally sits down again*
"Finall......"
*TRINGGGGGGGGGGGG*
"MOTHERFUCKER. THESE GUYS TIME IT OR SOMETHING!?!?"
*walks back to his desk very frustrated this time*
*puts on headphones very quickly and presses the answer button*
*answer works but the call is literally dropped the second he starts it (it was a real client)*
"OH FOR FUCKS FUCKING FUCKING FUCKING SAKE FUUUUUUUUUUUUUUUUUUUUUUCK"
*walks back to table again and sits down. Takes sandwich and....*
*TRINGGGGGGGGGG MOTHERFUCKER*
"FUCKING COCKSUKING MOTHERFUCKING PIECES OF WHAT THE FUCKING FUCK EVER"
*gives a deadly look to another engineer: "I am NOT going to take it this time! En-fucking-joy."*
We laughed so hard xD15