Details
-
Aboutfreelance autodidactic programmer specialized in linear media. also, CS student.
-
SkillsJavaScript, Feathers JS, Vue JS, Java
-
LocationThe Netherlands
Joined devRant on 7/13/2017
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
-
Okay, story time.
Back during 2016, I decided to do a little experiment to test the viability of multithreading in a JavaScript server stack, and I'm not talking about the Node.js way of queuing I/O on background threads, or about WebWorkers that box and convert your arguments to JSON and back during a simple call across two JS contexts.
I'm talking about JavaScript code running concurrently on all cores. I'm talking about replacing the god-awful single-threaded event loop of ECMAScript – the biggest bottleneck in software history – with an honest-to-god, lock-free thread-pool scheduler that executes JS code in parallel, on all cores.
I'm talking about concurrent access to shared mutable state – a big, rightfully-hated mess when done badly – in JavaScript.
This rant is about the many mistakes I made at the time, specifically the biggest – but not the first – of which: publishing some preliminary results very early on.
Every time I showed my work to a JavaScript developer, I'd get negative feedback. Like, unjustified hatred and immediate denial, or outright rejection of the entire concept. Some were even adamantly trying to discourage me from this project.
So I posted a sarcastic question to the Software Engineering Stack Exchange, which was originally worded differently to reflect my frustration, but was later edited by mods to be more serious.
You can see the responses for yourself here: https://goo.gl/poHKpK
Most of the serious answers were along the lines of "multithreading is hard". The top voted response started with this statement: "1) Multithreading is extremely hard, and unfortunately the way you've presented this idea so far implies you're severely underestimating how hard it is."
While I'll admit that my presentation was initially lacking, I later made an entire page to explain the synchronisation mechanism in place, and you can read more about it here, if you're interested:
http://nexusjs.com/architecture/
But what really shocked me was that I had never understood the mindset that all the naysayers adopted until I read that response.
Because the bottom-line of that entire response is an argument: an argument against change.
The average JavaScript developer doesn't want a multithreaded server platform for JavaScript because it means a change of the status quo.
And this is exactly why I started this project. I wanted a highly performant JavaScript platform for servers that's more suitable for real-time applications like transcoding, video streaming, and machine learning.
Nexus does not and will not hold your hand. It will not repeat Node's mistakes and give you nice ways to shoot yourself in the foot later, like `process.on('uncaughtException', ...)` for a catch-all global error handling solution.
No, an uncaught exception will be dealt with like any other self-respecting language: by not ignoring the problem and pretending it doesn't exist. If you write bad code, your program will crash, and you can't rectify a bug in your code by ignoring its presence entirely and using duct tape to scrape something together.
Back on the topic of multithreading, though. Multithreading is known to be hard, that's true. But how do you deal with a difficult solution? You simplify it and break it down, not just disregard it completely; because multithreading has its great advantages, too.
Like, how about we talk performance?
How about distributed algorithms that don't waste 40% of their computing power on agent communication and pointless overhead (like the serialisation/deserialisation of messages across the execution boundary for every single call)?
How about vertical scaling without forking the entire address space (and thus multiplying your application's memory consumption by the number of cores you wish to use)?
How about utilising logical CPUs to the fullest extent, and allowing them to execute JavaScript? Something that isn't even possible with the current model implemented by Node?
Some will say that the performance gains aren't worth the risk. That the possibility of race conditions and deadlocks aren't worth it.
That's the point of cooperative multithreading. It is a way to smartly work around these issues.
If you use promises, they will execute in parallel, to the best of the scheduler's abilities, and if you chain them then they will run consecutively as planned according to their dependency graph.
If your code doesn't access global variables or shared closure variables, or your promises only deal with their provided inputs without side-effects, then no contention will *ever* occur.
If you only read and never modify globals, no contention will ever occur.
Are you seeing the same trend I'm seeing?
Good JavaScript programming practices miraculously coincide with the best practices of thread-safety.
When someone says we shouldn't use multithreading because it's hard, do you know what I like to say to that?
"To multithread, you need a pair."18 -
One too many rants on Windows Update and the apparently endless ways to somehow turn off enough parts of it to no longer consider it a nuisance — and mostly neglecting to remember how to turn it back on or run it manually...
This of course lends a lot of room for bitching about Windows being unsecure and and outdated :o
Unfortunately the good people at NoVirusThanks have recently released the tool you've all been waiting for — no need to cry any longer because Microsoft's monthly release schedule means you have updates every time you bimonthly "have to" use Windows:
Win Update Stop — as simple as pictured: http://novirusthanks.org/products/...
It even comes in a portable version and support all the way back to XP!12 -
Hello! Is this Gordon’s Pizza?
No sir, it’s Google’s Pizza.
Did I dial the wrong number?
No sir, Google bought the pizza store.
Oh, alright - then I’d like to place an order please.
Okay sir, do you want the usual?
The usual? You know what my usual is?
According to the caller ID, the last 15 times you’ve ordered a 12-slice with double-cheese, sausage, and thick crust.
Okay - that’s what I want this time too.
May I suggest that this time you order an 8-slice with ricotta, arugula, and tomato instead?
No, I hate vegetables.
But your cholesterol is not good.
How do you know?
Through the subscribers guide. We have the results of your blood tests for the last 7 years.
Maybe so, but I don’t want the pizza you suggest – I already take medicine for high cholesterol.
But you haven’t taken the medicine regularly. 4 months ago you purchased from Drugsale Network a box of only 30 tablets.
I bought more from another drugstore.
It’s not showing on your credit card sir.
I paid in cash.
But according to your bank statement you did not withdraw that much cash.
I have another source of cash.
This is not showing on your last tax form, unless you got it from an undeclared income source.
WHAT THE HELL? ENOUGH! I’m sick of Google, Facebook, Twitter, and WhatsApp. I’m going to an island without internet, where there’s no cellphone line, and no one to spy on me …
I understand sir, but you’ll need to renew your passport … it expired 5 weeks ago.16 -
Hello, world!
So I'm in a bit of trouble at the moment.. I was hesitant in posting this, and even after you all came to BlueNutterFly's rescue, I'm still not sure what the response will be.
Basically, I'm in a very bad spot. I can't work, and I'm having to move between guest bedrooms of family members because I don't have a permanent residence. I'm struggling to afford my medications and internet (which is my only means of communication, as I don't have a phone. And is how I make what little money I do..) I'm also at risk of getting kicked out of my sister's because we don't get along, and having to move back in with my grandparents.. (I was thrown into so many anxiety attacks while I was there, one of which caused me to jump out of a moving car just to get AWAY from my grandmother.. Long story short, I CAN'T go back there..)
I started a Patreon page, where I hope to get enough donations to make due until I can get another source of stable income. You can also read more about my situation there, as well as what I will use the money for. I currently have no rewards set, so feel free to give me ideas:
https://patreon.com/colorsofapril/
You can also donate via PayPal if you don't want to subscribe to a monthly fee:
http://paypal.me/TheCyaniteProject
You can also share these links, which will also help out a lot!
Thank you for reading.
I'll remove this post if dfox asks me to.48 -
So I just found this app, called LifeRPG. It lets you play your life as a game, compleating quests for exp and "gems"(which you can then trade for custom rewards.. I'm thinking.. Ice cream~ <3) I think this will help keep me motivated more to do actual things in my life. Maybe.. We'll have to see. I already set up a bunch of daily missions, and continous missions.28
-
devRant stats - A website with stats and Infos about devRant, for example most used word, how often the word 'fuck' has been used in rants posted today, what the average avatar looks like and other things that you can get using the devRant api [more details]28
-
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 -
How many here know surge.sh? it seems each time I mention it somewhere, nobody knows it, checks it out and thanks me. It basically allows you to host a static webpage on their servers - for free and with custom domain if you wish. They are also the creators of Cordova/Phonegap.3
-
!rant
You know those dudes that dress up spiffy and try to sell you cable providers for tv and shit. Well, i normally stream everything from my computers and do not really have any need for actual tv, my flatscreen is mostly used for my ps4 or switch and das it.
So these guys stop me at walmart and start trying to sell me this provider, i normally listen and give everyone a chance since they b only doing their job. Afterwards I tell them that i use one of those roku or amazon sticks and that I am fine with it. Well one of them insists in that those are not good since **fake made up technical shit** and that unless I am a programmer I would not know how to work around them.
I smile. Hehe.....hehe.....muahahahaha and tell them that I do not worry about such things since I am a software engineer. My wife passes by and confirms "yup, computer scientist, spends his days thinkering with shit"
One of them looks at the other and says "fuck it dude we lost"
Lol, gracious in the face of defeat.8