News for hackers. Stuff that matters.
Re:Things I Regret About Node.js [video] by p2t2p on Wednesday June 06, 2018 @07:18PM (#17251961)
This why I love Java so much. Take a look at what Spring Boot does for me:

- Routing is done in two lines of code: @Controller @RequestMapping("/myroute")

- Cookie and body parsing - no need to write any code to do that, I just have method parameters and all of the data flies in. Whant a validation? Only one keyword on a method parameter - @Valid. Custom validators are supported as well.

- Session management. It just here for me and does the right thing by default. I can replace storages with custom implementations but by default no code is required from me.

- MongoDB integration - Spring Data MongoDB and you only need to define interfaces using naming convention. The code to access the actual database is generated for you.

- Spring Security supports multiple authentication mechanisms and gives you neat DSL to configure it.

- File system access kind obvious thing.

- HTTPS and HTTP2 support provided by Spring MVC as well.

- Compressions support - it just "server.compression.enabled=true" in your config

- Logging - slf4j + logback come with Spring Boot and there plenty custom appenders available to put you logs into logstash/splunk whatever

- Referrer spam filter - not sure about that one but CSRF protection comes OOB and enabled by default.

- Multiple tightly integrated template engines to chose from. Zero configuration code as well.

- Static content comes OOB and enabled by default, just put your stuff into resources/static.

I mean yeah, modern webapp is a complicated thing! So whenever I see somebody trying to do anything "not bloated" it means that I end up writing low level code that has been written multiple times again and again.

The other day I was trying to code a simple thing in Clojure because I love Lisp. Well, it's just embarrassing. I got to simple page showing stuff from Postgres and the boilerplate/business code ratio was at about 70%. Manually configure connection pool, manually start it, manually prepare your component systems, manually mention all of the dependencies for components, manually configure template engine, manually enable static resources support in ring, manually configure and enable session support in ring. Then we come to authentication and don't even try to sell me Friend. EVERYTHING is manual. The only good thing was "environ" which did the right thing but again with "bloated" Spring Boot it comes OOB and I don't need to configure it!

If you don't use something "bloated" it only means that you're writing code yourself, again and again.

Re:Things I Regret About Node.js [video] by sidlls on Wednesday June 06, 2018 @10:29PM (#17252790)
No, Spring Boot is one of the best examples of the worst kind of terrible patterns in the land of Java development. The bloat in that framework is awful, and the gods help you if something goes wrong in the annotations-everywhere code for anything but the most trivial of applications.
Re:Things I Regret About Node.js [video] by humbleMouse on Thursday June 07, 2018 @01:33AM (#17253526)
If you limit the annotations to only the basics,(controller,config,bean,requestmapping,etc.) - not much can go wrong. It sounds to me like you haven't worked with any large spring boot apps and experienced the stability annotations can provide.
Re:Things I Regret About Node.js [video] by swsieber on Friday June 08, 2018 @08:27AM (#17264623)
Except circular dependencies. I work on an app where a circular dependency failure happens depending on what order spring finds our annotated classes. It made writing a faster bean scanner a little tricky because I had to replicate Springs ordering method.
Re:Things I Regret About Node.js [video] by humbleMouse on Friday June 08, 2018 @09:13PM (#17270959)
To clarify what you said - You wrote a custom "fast bean scanner" and it's not working properly? Or you had to re-write it because spring's bean scanner wasn't working? What version of spring is this?
Re:Things I Regret About Node.js [video] by swsieber on Friday June 08, 2018 @10:40PM (#17271229)
Ah, the spring bean scanning was working, but startup wasn't. The reason? Our app was apparently very brittle and the mere act of registering beans in the wrong act would cause a circular dependency error during startup.

To be more concrete, to the original spring bean scanner, we were passing in a set of package names, which it would scan. Spring registers those bran defininitions in yhe order that it scans the beans. My custom scanner (found and registered all the same beans), broke our app because it wouldn't startup anymore due to a circular dependency error. Once I sorted the bean definitions by the original pack path inputs, that startup error went away.

I think we are 4.x

Extra details: I used the fast -classpath-scanner library. I subclassed the annotation cand date componend scanner class (well, something like that), and rewrote a method to load the resources for the string specified, treating the path a a fqcn, not a package path. Then I could feed that class the output from the fast classpath scanner (which was the list of classes with the annotations). Until I sorted the input by the original package paths, my app wouldn't start. Mind you, the method I overwrote simply created bean definitions. But that ordering difference made all the difference.

I can dig up exact class names if you are curious. The scanner of course didn't replicate all spring bean sear check capabilities - just the ones we were using. But it cut the scan time by 60% (several seconds).

Re:Things I Regret About Node.js [video] by p2t2p on Thursday June 07, 2018 @01:29AM (#17253507)
Could you provide an example of what you consider terrible?
Re:Things I Regret About Node.js [video] by EtienneK on Thursday June 07, 2018 @01:11AM (#17253442)
Agreed. Spring Boot is how you do frameworks right.

It is opinionated and provides libraries and solutions for almost everything you need to do, BUT it always allows you to use your own if required.

I love Spring Boot and I wish there was something even remotely as good and full featured in other languages.

Re:Things I Regret About Node.js [video] by i_made_a_booboo on Wednesday June 06, 2018 @10:12PM (#17252731)
I'm switching to Rails after doing years of Spring Boot apps. The bloat of Java is 3x to 5x.
Re:Things I Regret About Node.js [video] by cutler on Wednesday June 06, 2018 @10:34PM (#17252812)
Spring Boot 2 with Kotlin can be a lot less bloated, especially with the async Reactive Web option which uses Netty.
Re:Things I Regret About Node.js [video] by pjmlp on Thursday June 07, 2018 @02:46AM (#17253789)
Good luck running it fast enough.
Re:Things I Regret About Node.js [video] by jrochkind1 on Thursday June 07, 2018 @10:14AM (#17255878)
Meh, not really an issue.
Re:Things I Regret About Node.js [video] by cutler on Wednesday June 06, 2018 @10:31PM (#17252797)
Have you tried Luminus? It comes configured with Buddy for auth though the docs for both Luminus and Buddy could do with some work.
Re:Things I Regret About Node.js [video] by p2t2p on Thursday June 07, 2018 @01:33AM (#17253524)
I haven't. But I definitely will try to use it, I'm really eager on getting to the same level of productivity in Clojure that I have in Java with Spring. I have a huge hope that Clojure + something like Spring Boot for it could make me even more productive. Some of the stuff that we have in Clojure really is wonderful, hugsql for example.
Re:Things I Regret About Node.js [video] by cutler on Thursday June 07, 2018 @06:23PM (#17260862)
You'll never get anything close to Spring Boot for Clojure. Spring grew out of J2EE and Clojure's culture is diametrically opposite, favouring curated libraries. Clojure's main/(only?) web framework - Luminus - has a very small team behind it, though it does a fine job.
Re:Things I Regret About Node.js [video] by Jach on Thursday June 07, 2018 @02:26PM (#17258684)
What are the barriers to using the Spring stuff through Clojure's interop capabilities?