That's pretty much most HN content about the web / front end development. I find HN al but useless for that topic now.
I've had this thought in the back of my head that a lot of content / comments are on HN are folks who do a little, not a lot, and are really annoyed that they have to do any front end development, so then we get rants about this and that... they're not fundamentally wrong, but as a web dev I find them a little skewed and completely useless / just negativity.
Like how many "I made this rando personal blog without a framework" and "there's too much javascript" (page includes lots of javascript) and etc that gets boiled down so far that it is pointless?
We're at the point a loading icon gets upvoted on HN to bitch about SPAs ... and I don't know about you but a hell of a lot of pages can sit at a loading icon that aren't SPAs. How disconnected is that?
Front end development discussion a land fertile for bike shedding and just about every topic can dip into it now, movies, music, all media really ... questions about who pays for the news, censorship, etc. Somehow it all gets pulled into the tech discussion as well.
Sometimes I just want to find a place to discuss it where we find neat things to do and less campaigning about every other topic.
[1]: https://www.npmjs.com/package/is-even https://www.npmjs.com/package/is-even
It seems like a lot of people think they think how npm should work, while forgetting to see how npm actually works.
There's even an example of a well respected npm author that has repositories with just a few lines..
Y'all just love to hate on npm
Or you could check the lowest bit. Better to abstract away from that implementation decision. ;)
If that were true, it would be useful for the author to actually explain that in his repo documentation. As it is, concluding that this is a joke is by far the most reasonable response.
Anyway, Javascript, like virtually every programming language, has "& 1".
Yes, the standard library is lacking and yes, that's a big issue, partly responsible for the huge mess that is NPM. No, it does not matter one bit here so this is off topic.
n % 2
if you don't like the % you can also do it using a bitwise AND, this also handles negative numbers: n & 1
this is equal to 1 if the number is odd, 0 if it is even, and will be converted to true or false in a if statement. You don't need a library for this.And you should not need a library to handle string conversions, you should be aware of the types you manipulates. If you do need to handle strings, that's still easy:
Number(n) & 1
And Number(n) is a no op if n is already a number. But wait, no, actually, you don't even need this because % and & will auto cast the string to a number anyway. You can use parseInt(n) if there's a chance that your number is going to be non integer, but meh.So n & 1 will cover everything.
All this is readable and idiomatic, there's no need to write a function for that, let alone a full fledged library with unit tests, package.json and all this crap that bloats the node_module folders of everybody.
isOdd = require('isOdd') and your entry in the dependencies of your package.json is going to be more verbose than isOdd = n => n & 1. Even "isOdd(n)" is longer than "n & 1". Nothing beats the "& 1".
If people are going to write libraries for all kind of similarly small and trivial things, soon we will need more than the Earth to handle our code.
After reading your comment, I'm starting to think that isOdd is not only more readable but safer. I don't think I ever thought about n % 2 not handling negative numbers, and I'm not sure I would immediately recognize n & 1 as equivalent to isOdd. In languages without truthiness, n % 2 == 0 is longer than isOdd(n). Likewise, even with truthiness, n % 2 == 1 is longer than isEven(n).
I suspect that the real problem is the cost of adding dependencies, in terms of package size, performance, and security. All these problems could be solved using linking, inlining, and auditing.
That does not hold true for more complex stuff, but to test whether a number is odd, come on.
You'll test your code if it works anyway and if your odd test is wrong it will show.
But yes, you need to make sure on how '%' works in your programming language especially on negative numbers (and on non integers) because that can differ.
If you are testing whether a number is odd and that number can be negative, you'll probably think about it anyway.
That's a trap you should encounter once and then you are good.
The thing is, n % 2, i need to do mental gymnastics do comprehend whats going on. Even if your function is just one line, I rather read isOdd or isEven instead of n % 1 of n % 2, remembering when 1 or 2 stand for even or odd is something I could have trouble with.
n % 2 or n & 1 is something you likely get used to if you encounter it frequently enough, and at least something you should recognize after the first time you encounter it. And most people should have encountered it at least once because that's one of the things we learn to do when learning programming (but I guess Ten Thousand [1] can apply). If you don't encounter it enough to be used to it, then the rare gymnastic should not be a big issue neither. You need to be able to recognize it because it's in the wild.
If having an isOdd or isEven function around makes the code more readable for you anyway it's fine, especially if the function can be inlined, but pulling an external dependency for this is overkill.
That's a huge if!
So abstracting a one line in a function is actually good. Putting it up on npm is debatable.
If someone wants a 1 line dependency, I say let them. I have zero issues with that.
Again, if you think something is not how it supposed to be, maybe YOUR view on what it supposed to do is whack instead?
I finally understand how `node_modules/` directories grow to 100s of megabytes for the smallest apps
Turtles all the way down.
In most other ecosystems such as Java, Python, PHP, etc if you have a dependency A that depends on B 1.0, and a dependency C that depends on B 2.0, you cannot have both of them installed, so you either pick one or the other, or some intermediate version which works in all cases, but many times you end up not being to use one of them or, worse, not able to upgrade either A or C because you cannot resolve all the dependencies anymore due to constraints.
In node you can do this, you can use both A and C even if they use their own, incompatible B versions. If both A and C depend on the same (or compatible) B version, then you only have one as in the other ecosystems. And you can always enforce and override what final version you want if necessary.
This, plus usually the inclusion of documentation, type definitions, source and transpiled code is why node_modules is usually pretty big.
But you don't ship node_modules "as is" to the browser (200MB node module does not mean a 200MB bundle). And usually this is not a problem for any modern laptop or server.
Is this better? Is this worse? Can't say, it is just a different tool with a different trade off.
But just "node modules 10Gb is bad" to me only tells the bad side of it, and usually comes from a lack of understanding of how this works and how it compares to other systems.
If you want to be safe if NPM goes down, what you need is to keep an archive of built "binary" releases, either zip files, docker images, or whatever.
You can also have internal NPM proxies or caches too.
Committing external dependencies in the codebase is a terrible solution. And no, google doing it doesn't mean it is good for everyone else, probably more likely to be the opposite to what you need.
Yes, you did. Quoting: "...Anyone not committing the entire node_modules to their repo..."
> you're not revisioning your deployments
That's what I'm saying, quoting: "...If you want to be safe if NPM goes down, what you need is to keep an archive of built "binary" releases, either zip files, docker images, or whatever..."
Using Git/SVN/etc repository for this (which is what I kind of get from your responses) is just using the wrong tool.
The sassc CLI app is pretty good for this. It's a single binary, has a watch mode, and just compiles SASS to CSS. Although for a 404 page that probably is unnecessary (unless it's pulling in shared styles from somewhere else of course).
That said, I've been in the Go ecosystem for a while and while the language itself is fine, it's the associated mindset and catchy oneliners that have been more valuable to me as a developer.
I remember seeing a team member migrating a project from grunt to webpack, the project was just a 404 page. "You need to compile your assets" they say, just a cat *.css > site.css would do it. Or even better, just do it inside the HTML and that is it.
People who need a JS library to check if a number is odd or even went way too far, I'm not exaggerating - https://www.npmjs.com/package/is-odd