Tomcat, Glassfish, IBM WebSphere, BEA/Oracle Weblogic, Jetty, JBoss those are the ones I can name right now, but surely there are more, each one with their own bugs and unique features that makes porting an application from one to the other a nightmare.
Seriously you can make a whole career path being an "Certified WebSphere Application Server Developer", that is how complex each application server can be.
The right term is "scales horizontally easily", but the parent post had the right idea. You can run multiple node processes in the same machine to use their multicore processors in order to handle more requests as well as run node processes across a huge cluster of machines. The event-driven architecture makes you design your application in a stateless manner so scaling it across multiple processes/processor-cores/machines is easy.
By stateless manner I mean that your application stores any state data in a database that can also "easily scale horizontally" like mongo. Your traditional Java application stores a ton of state (just check Apache Tomcat session replication for an example), sure it is much faster in a single node, but once you need to synchronize all that data across multiple nodes not only your performance degrades, but your developers start to go crazy trying to get all the frameworks and their own code to play nice.
You can design stateless Java applications, but it is not very common in my experience, Java frameworks usually go the route of trading information between nodes which makes horizontal scaling hard and reliability down (it is hard to eliminate all of the single point of failures).
I think the main advantage of node vs java is that the single threading model is MUCH more simple, anyone who ever wrote a considerable size Java application knows that threads always bite you in the ass. This makes developers life easier, but you need to architecture your application in a different way. If performance is not critical you can get away with this, if performance is critical node can scale horizontally very well. Horizontal-scaling a single server Java application usually requires redesigning the whole thing, while node applications due to the single-thread mechanics incentive you to write stateless code that makes scaling horizontally a matter of plugging more servers and adding a load balancer (which you also have to do in Java).
In short if you have your application completely specified from the start and knows it will never ever change its specification Java would probably be a better choice, type safety really is useful for megaton projects with lots of little parts that have fixed requirements and you can design the threading model from the start to satisfy your requirements. If you are writing an application that evolves constantly node is a better option because it can adapt itself more easily to changing requirements, untyped languages are very good for this.
Re:Great if optimizing the wrong thing is your thi
on
HTTP/2 Finalized
·
· Score: 1
This protocol will enable new types of web applications, things like realtime multiplayer games that need to constantly stream lots of packets at a lower latency. Things that are not done today because the current technology simply can not provide a good enough experience. Plus it will reduce your server load which is nice (marketing scripts and ads are served from third party servers).
The problem is that globalization means that EVERYONE collapses at the SAME time, all those old civilizations collapsed over an extended period of time and most parts of the world were not affected directly by their downfall. I don't think our retrospective lessons of past events will help much for the future in this case.
I had a dell XPS15 model with a manufacturing defect that made the computer crash when running games, the only way to solve it was to underclock the GPU. No it was not overheating, it was a manufacturing problem, there are several accounts of this problem on the net.
My fellow co-works give me flak for writing like this: foobar= foo + bar
While they write like this: foobar = foo + bar
Personally when reading other peoples code I don't mind either, I don't go around their code removing the spaces, but I am so used to writing without the space before the equal sign that even if I am trying to write code in their standard I sometimes forget. They say they can see which parts of the code was written by me just because of that little quirk. That quirk would not be lost in Python, but granted, it removes the other developer quirk: function() {
versus: function() {
We considered implementing syntax coding standards, but honestly I do not think they help all that much so we never ended up using any. And really, individual coding styles are sometimes useful, if I see a code with the curly braces in the following line and I have a problem with that code I know exactly who to talk to without needing to check git.
I first learned to program in Pascal, in which that statement would be like this: foobar:= foo + bar
versus foobar:= foo + bar
Since pascal has two characters for the attribution operation it looks odd with the space before it.
It was not so much a case of micro-management and more a case of "either way is fine by me", if I had insisted on keeping 3 numbers they would let me. We only realized the problems of saying 4 numbers out loud after a while when it was too late to change it.
As matter of fact bug-fixes that don't break backwards compatibilities usually have their own separate number (the last number in the number version):
MAJOR_VERSION . MINOR_VERSION . BUG_FIXES
So you can update your software safely if you keep the same major and minor versions.
In my project the upper echelon of the company wanted to stress out that this was version two of our product (even though the "second version" does not share any code at all with the first) so we ended up introducing one more number to our version semantics:
And this marketing version is 2 and will likely never change. I told them they could keep calling it whatever they wanted in the marketing department since the user can only see the full number in the about screen but they insisted, now our team always gets confused when saying version numbers out loud (I remember fondly the time we hit 2.2.2.2).
To see if I should bother even watching the trailer, if I like what I see in the trailer I will watch a review (usually at least two) THEN I go and buy the thing. I also use review aggregators to find out which good games are coming out, there are so many games coming out and I don't keep up with game news so in that regard the current system works very well for me. Although Steam user ratings are getting more useful by the day I still use them only to then check the reviews out.
Many coffeescript devs when asking questions in stackoverflow or making public libraries in github use Javascript for increased visibility. Also I don't know how they measure data in github, but for each.coffee file there is a.js file as well which could distort the results.
Even if the browsers suddenly decide to support another programming language the APIs are VERY unlikely to change, the bindings would probably be the same (or if it is a typed language it would have a ton of method overloading).
And anyway, Javascript is not THAT bad, the main problem is the DOM and guess what, when using canvases you don't interact with the DOM. In fact Coffeescript and Typescript make programming for the web as good as programming on the server with Ruby or Python, support for sourcemaps is pretty good these days so you don't lose debugging. If they replaced Javascript with something else the DOM would still be there, to replace the DOM you need to replace HTML and CSS and that is simply never going to happen any time soon.
Civ 5 sure has problems, but it is a hell lot better than civ 4 mechanically. The abolition of the stacks of doom made the game so much more enjoyable.
Honestly my main grip with all civs are the crappy AI, after you master the game mechanics the game either becomes too easy in the easier difficulties or unfair in the harder difficulties (requiring you to find the exploits the game tech tree and enemy AI).
Well there is the circle pad pro for the old models, that at least allows the new controls on the old models. I hope some more games start using it because since I finishing metal gear solid 3 I only use mine because of the better grip.
Well that is all and good but IE does not support any of the new input types, the new minimum browser supported for most people is now IE9, which does have canvas and SVG, but is missing a bunch of stuff like input types and CSS gradients. IE9 is the new IE6 and is here to stay for many years.
Battle.net predates steam but you could not buy games digitally through it, for a long time battle.net was an in-game only multiplayer matchmaking much like gamespy.
My point was: This exclusive platform bullshit is stupid and should stop, more competition is good. I am fine if ubisoft has its own content distribution system, as long as it is not the only way to access their games.
Steam takes 30% cut from sales, so why can't ubisoft provide a 30% discount on its games when bought directly through Uplay? And why my steam game needs to go through Uplay to launch? THAT is what is really stupid about this whole ubisoft fiasco.
EA now only sells its titles through Origin Valve only release its titles through Steam Blizzard only release its titles through Battle.net
I would rather be able to choose my content distributor and have complete access to everything, but I know it is not feasible to have all games be released on all distributors. Those 3 guys up there used their established user-base to build their content distributions with exclusive games that only worked with their platforms. Ubisoft is trying to do the same. At one point you could buy EA games on Steam, but EA decided to have all the revenue for themselves. It is probably in Ubisoft plans to eventually stop publishing its games on Steam.
In this respect Ubisoft is not the devil (not any more than Valve) they are just incompetent AND late to the party.
Remember, competition is good, exclusives titles are not.
In all honesty the FOSS solutions at one time (~10 years or more ago) were not nearly as good as Oracle was, that created a snowball effect that people know Oracle, so they want to buy Oracle so the next guy who has to maintain it needs to know Oracle, so he wants to buy Oracle next time.
It is kind of the same thing that keeps Windows inertia still going, database setup, configuration and maintenance are pretty much completely different across all databases, even the SQL is different across them with each one providing their own proprietary extensions and supporting/not supporting different parts of the spec.
I was thinking of going with the Unreal because of Oculus support and I heard good things about the development environment (unfortunately Unreal SDK does not support my platform of choice, Linux, but I can live with that). One thing that I am afraid of is building in C++, I do not have extensive C++ experience and I am afraid of missing the easy of use of untyped languages too much. I program mainly in Javascript these days, but I do a lot of coding in Java too and I find it very unpleasant.
Tomcat, Glassfish, IBM WebSphere, BEA/Oracle Weblogic, Jetty, JBoss those are the ones I can name right now, but surely there are more, each one with their own bugs and unique features that makes porting an application from one to the other a nightmare.
Seriously you can make a whole career path being an "Certified WebSphere Application Server Developer", that is how complex each application server can be.
The right term is "scales horizontally easily", but the parent post had the right idea. You can run multiple node processes in the same machine to use their multicore processors in order to handle more requests as well as run node processes across a huge cluster of machines. The event-driven architecture makes you design your application in a stateless manner so scaling it across multiple processes/processor-cores/machines is easy.
By stateless manner I mean that your application stores any state data in a database that can also "easily scale horizontally" like mongo. Your traditional Java application stores a ton of state (just check Apache Tomcat session replication for an example), sure it is much faster in a single node, but once you need to synchronize all that data across multiple nodes not only your performance degrades, but your developers start to go crazy trying to get all the frameworks and their own code to play nice.
You can design stateless Java applications, but it is not very common in my experience, Java frameworks usually go the route of trading information between nodes which makes horizontal scaling hard and reliability down (it is hard to eliminate all of the single point of failures).
I think the main advantage of node vs java is that the single threading model is MUCH more simple, anyone who ever wrote a considerable size Java application knows that threads always bite you in the ass. This makes developers life easier, but you need to architecture your application in a different way. If performance is not critical you can get away with this, if performance is critical node can scale horizontally very well. Horizontal-scaling a single server Java application usually requires redesigning the whole thing, while node applications due to the single-thread mechanics incentive you to write stateless code that makes scaling horizontally a matter of plugging more servers and adding a load balancer (which you also have to do in Java).
In short if you have your application completely specified from the start and knows it will never ever change its specification Java would probably be a better choice, type safety really is useful for megaton projects with lots of little parts that have fixed requirements and you can design the threading model from the start to satisfy your requirements. If you are writing an application that evolves constantly node is a better option because it can adapt itself more easily to changing requirements, untyped languages are very good for this.
This protocol will enable new types of web applications, things like realtime multiplayer games that need to constantly stream lots of packets at a lower latency. Things that are not done today because the current technology simply can not provide a good enough experience. Plus it will reduce your server load which is nice (marketing scripts and ads are served from third party servers).
The problem is that globalization means that EVERYONE collapses at the SAME time, all those old civilizations collapsed over an extended period of time and most parts of the world were not affected directly by their downfall. I don't think our retrospective lessons of past events will help much for the future in this case.
I had a dell XPS15 model with a manufacturing defect that made the computer crash when running games, the only way to solve it was to underclock the GPU. No it was not overheating, it was a manufacturing problem, there are several accounts of this problem on the net.
My fellow co-works give me flak for writing like this:
foobar= foo + bar
While they write like this:
foobar = foo + bar
Personally when reading other peoples code I don't mind either, I don't go around their code removing the spaces, but I am so used to writing without the space before the equal sign that even if I am trying to write code in their standard I sometimes forget. They say they can see which parts of the code was written by me just because of that little quirk. That quirk would not be lost in Python, but granted, it removes the other developer quirk:
function() {
versus:
function()
{
We considered implementing syntax coding standards, but honestly I do not think they help all that much so we never ended up using any. And really, individual coding styles are sometimes useful, if I see a code with the curly braces in the following line and I have a problem with that code I know exactly who to talk to without needing to check git.
I first learned to program in Pascal, in which that statement would be like this:
foobar:= foo + bar
versus := foo + bar
foobar
Since pascal has two characters for the attribution operation it looks odd with the space before it.
It was not so much a case of micro-management and more a case of "either way is fine by me", if I had insisted on keeping 3 numbers they would let me. We only realized the problems of saying 4 numbers out loud after a while when it was too late to change it.
As matter of fact bug-fixes that don't break backwards compatibilities usually have their own separate number (the last number in the number version):
MAJOR_VERSION . MINOR_VERSION . BUG_FIXES
So you can update your software safely if you keep the same major and minor versions.
In my project the upper echelon of the company wanted to stress out that this was version two of our product (even though the "second version" does not share any code at all with the first) so we ended up introducing one more number to our version semantics:
MARKETING_VERSION . MAJOR_VERSION . MINOR_VERSION . BUG_FIXES
And this marketing version is 2 and will likely never change. I told them they could keep calling it whatever they wanted in the marketing department since the user can only see the full number in the about screen but they insisted, now our team always gets confused when saying version numbers out loud (I remember fondly the time we hit 2.2.2.2).
No, what you end up having is Lisp.
To see if I should bother even watching the trailer, if I like what I see in the trailer I will watch a review (usually at least two) THEN I go and buy the thing. I also use review aggregators to find out which good games are coming out, there are so many games coming out and I don't keep up with game news so in that regard the current system works very well for me. Although Steam user ratings are getting more useful by the day I still use them only to then check the reviews out.
How does frame-interpolation works out? It is playing at 60 fps but interpolating frames would surely reintroduce some motion blur.
Many coffeescript devs when asking questions in stackoverflow or making public libraries in github use Javascript for increased visibility. Also I don't know how they measure data in github, but for each .coffee file there is a .js file as well which could distort the results.
Even if the browsers suddenly decide to support another programming language the APIs are VERY unlikely to change, the bindings would probably be the same (or if it is a typed language it would have a ton of method overloading).
And anyway, Javascript is not THAT bad, the main problem is the DOM and guess what, when using canvases you don't interact with the DOM. In fact Coffeescript and Typescript make programming for the web as good as programming on the server with Ruby or Python, support for sourcemaps is pretty good these days so you don't lose debugging. If they replaced Javascript with something else the DOM would still be there, to replace the DOM you need to replace HTML and CSS and that is simply never going to happen any time soon.
GTA San Andreas update removed several tracks from the game radio.
Me and my friends regularly watch each other play dota2 while we are waiting for everyone to join the same party to get a game rolling.
Civ 5 sure has problems, but it is a hell lot better than civ 4 mechanically. The abolition of the stacks of doom made the game so much more enjoyable.
Honestly my main grip with all civs are the crappy AI, after you master the game mechanics the game either becomes too easy in the easier difficulties or unfair in the harder difficulties (requiring you to find the exploits the game tech tree and enemy AI).
Challenge Everything!
Well there is the circle pad pro for the old models, that at least allows the new controls on the old models. I hope some more games start using it because since I finishing metal gear solid 3 I only use mine because of the better grip.
Don't get me wrong, the new stuff is great, but it will take years before we can take them for granted.
Well that is all and good but IE does not support any of the new input types, the new minimum browser supported for most people is now IE9, which does have canvas and SVG, but is missing a bunch of stuff like input types and CSS gradients. IE9 is the new IE6 and is here to stay for many years.
Battle.net predates steam but you could not buy games digitally through it, for a long time battle.net was an in-game only multiplayer matchmaking much like gamespy.
My point was: This exclusive platform bullshit is stupid and should stop, more competition is good. I am fine if ubisoft has its own content distribution system, as long as it is not the only way to access their games.
Steam takes 30% cut from sales, so why can't ubisoft provide a 30% discount on its games when bought directly through Uplay? And why my steam game needs to go through Uplay to launch? THAT is what is really stupid about this whole ubisoft fiasco.
EA now only sells its titles through Origin
Valve only release its titles through Steam
Blizzard only release its titles through Battle.net
I would rather be able to choose my content distributor and have complete access to everything, but I know it is not feasible to have all games be released on all distributors. Those 3 guys up there used their established user-base to build their content distributions with exclusive games that only worked with their platforms. Ubisoft is trying to do the same. At one point you could buy EA games on Steam, but EA decided to have all the revenue for themselves. It is probably in Ubisoft plans to eventually stop publishing its games on Steam.
In this respect Ubisoft is not the devil (not any more than Valve) they are just incompetent AND late to the party.
Remember, competition is good, exclusives titles are not.
Nobody ever got fired from buying Oracle
In all honesty the FOSS solutions at one time (~10 years or more ago) were not nearly as good as Oracle was, that created a snowball effect that people know Oracle, so they want to buy Oracle so the next guy who has to maintain it needs to know Oracle, so he wants to buy Oracle next time.
It is kind of the same thing that keeps Windows inertia still going, database setup, configuration and maintenance are pretty much completely different across all databases, even the SQL is different across them with each one providing their own proprietary extensions and supporting/not supporting different parts of the spec.
I was thinking of going with the Unreal because of Oculus support and I heard good things about the development environment (unfortunately Unreal SDK does not support my platform of choice, Linux, but I can live with that). One thing that I am afraid of is building in C++, I do not have extensive C++ experience and I am afraid of missing the easy of use of untyped languages too much. I program mainly in Javascript these days, but I do a lot of coding in Java too and I find it very unpleasant.
Thanks for the sentiment though.