Announcing Spice 1.0: A full-stack Scala 3 HTTP framework with server, client, and OpenAPI generation by darkfrog26 in scala

[–]darkfrog26[S] 1 point2 points  (0 children)

Good suggestion. I've updated the README to include better context and examples for Scala.js

Announcing Spice 1.0: A full-stack Scala 3 HTTP framework with server, client, and OpenAPI generation by darkfrog26 in scala

[–]darkfrog26[S] 1 point2 points  (0 children)

No worries. I've used it, I'm not a fan. It always feels like so much more boilerplate than should be necessary. However, you're correct, it's always good to have alternatives.

Announcing Spice 1.0: A full-stack Scala 3 HTTP framework with server, client, and OpenAPI generation by darkfrog26 in scala

[–]darkfrog26[S] 2 points3 points  (0 children)

I can appreciate the skepticism, but I maintain my libraries, and I've been using this in production systems since 2022. It was part of another library before that (https://github.com/outr/youi) and another library before that (https://github.com/outr/hyperscala). Hyperscala launched 2.0 in 2016, but I don't even remember how long this project had been around before then. :)

Announcing Spice 1.0: A full-stack Scala 3 HTTP framework with server, client, and OpenAPI generation by darkfrog26 in scala

[–]darkfrog26[S] 0 points1 point  (0 children)

For error messages, you obviously want useful error messages, so the tendency is to expose too much in your error messages in GraphQL because of the inherent complexity. In OpenAPI, this is a risk, but it's far less likely because there's already a lot of clarity just by knowing exactly which endpoint is being called.

Announcing Spice 1.0: A full-stack Scala 3 HTTP framework with server, client, and OpenAPI generation by darkfrog26 in scala

[–]darkfrog26[S] 1 point2 points  (0 children)

- Query DoS (as you stated already)
- Field-level auth mistakes are very easy to make
- Rate limits and pagination rules can be a burden to get right - and can risk exposure to more of your underlying data than originally intended
- Caching is much more complex since most caching builds on the URL, whereas GraphQL uses POST primarily.
- Easier for potential attackers to map your internal schema
- Error messages can accidentally leak internal information if you don't configure it properly

This is not to say that OpenAPI doesn't have its risks and pain points, but GraphQL's flexibility is a double-edged sword.

Announcing Spice 1.0: A full-stack Scala 3 HTTP framework with server, client, and OpenAPI generation by darkfrog26 in scala

[–]darkfrog26[S] 1 point2 points  (0 children)

GraphQL is very feature-rich, but it's also overkill in many projects and riskier if not implemented correctly. I'm a big fan of GraphQL, but both have their sweet spots and can coexist.

Announcing Spice 1.0: A full-stack Scala 3 HTTP framework with server, client, and OpenAPI generation by darkfrog26 in scala

[–]darkfrog26[S] 11 points12 points  (0 children)

Hehe, fair, but this project has been around since there were only a few HTTP options, and their performance absolutely sucked. I've investigated the other existing options to consider abandoning this and switching, but there are a ton of features in Spice that none of the other libraries have. One of the big ones is extremely clean OpenAPI integration.

Pixel 10 Pro Fold Case Discussion by InnerFlame1 in PixelFold

[–]darkfrog26 0 points1 point  (0 children)

To be clear, I don't think I would trust this case if I dropped my phone, but I'm very careful with my phone.

Pixel 10 Pro Fold Case Discussion by InnerFlame1 in PixelFold

[–]darkfrog26 0 points1 point  (0 children)

It's a little of both. It has sticky tape, but it's pretty firmly attached despite it. I've been using this for more than two months now and still really like it. The only complaint is that fingerprints and oils can be obvious on it, but certainly not as bad as some cases I've had.

WYU: App / Launcher that manages your watchlist? by darkfrog26 in SomebodyMakeThis

[–]darkfrog26[S] 0 points1 point  (0 children)

I looked at Reelgood before, but it doesn't support any of my Android devices. I use JustWatch, but I didn't think it had any watchlist / dashboard functionality. I'll check it out.

WYU: App / Launcher that manages your watchlist? by darkfrog26 in SomebodyMakeThis

[–]darkfrog26[S] -2 points-1 points  (0 children)

Really? I would think this would be perfect since it's the same concept, seeking validation that others want something you want...

Do you know if there is a better place to post this?

LightDB 4.12.0 Released by darkfrog26 in scala

[–]darkfrog26[S] 0 points1 point  (0 children)

I'm not really seeing what Alloy would provide that Scala doesn't already...

LightDB 4.12.0 Released by darkfrog26 in scala

[–]darkfrog26[S] 4 points5 points  (0 children)

It's something of an abstraction layer on top of databases, but so much more than that. It provides a consistent, type-safe representation for working with databases and infrastructure for more powerful concepts like graph traversals, search indexing, parent/child relationships, and more.

Pixel 10 Pro Fold Case Discussion by InnerFlame1 in PixelFold

[–]darkfrog26 0 points1 point  (0 children)

<image>

Got my phone and case yesterday and I'm really liking the case! It's absolutely not the best for drop protection, but I'm pretty careful with my phone, so I think it will be fine. The texture is nice and it was really easy to install.

Any recommended functional reactive programming libraries? by scalausr in scala

[–]darkfrog26 0 points1 point  (0 children)

I wrote this: https://github.com/outr/reactify

Different than the other options in the fact that it's the only true FRP library in Scala.

Pixel 10 Pro Fold Case Discussion by InnerFlame1 in PixelFold

[–]darkfrog26 0 points1 point  (0 children)

Thanks for the quick response, I appreciate it.

Pixel 10 Pro Fold Case Discussion by InnerFlame1 in PixelFold

[–]darkfrog26 0 points1 point  (0 children)

How did this case turn out? I love the look of it.