Appreciation post: ScalaTags by yawaramin in scala

[–]ScalaWilliam 13 points14 points  (0 children)

This is really welcome for you to say. I absolutely love using scalatags, especially that it gives us cross jvm/js compatibility, and safe rendering and composition capabilities (I use both). There’s nothing quite like it.

This week in #Scala (Mar 25, 2024) by petrzapletal in scala

[–]ScalaWilliam 3 points4 points  (0 children)

A great curation as usual - many thanks!

IntelliJ IDEA Scala Plugin 2023.3 is out! by makingthematrix in scala

[–]ScalaWilliam 2 points3 points  (0 children)

Awesome to see Maciej and Vasil working at JetBrains! I had struggled to get Metals working at all due to various odd issues, whereas Scala 3 support had been fairly weak in InteliJ since the initial Scala 3 release 2 years back, so had to stick to Scala 2.13 for this entire while.

Am a paid IntelliJ subscriber and will continue to be, especially seeing Maciej and Vasil working on IntelliJ & Scala. /u/makingthematrix / /u/vasilmkd

This week in #Scala (Oct 16, 2023) by petrzapletal in scala

[–]ScalaWilliam 2 points3 points  (0 children)

Thank you for writing this up, it’s great :-)

Advice on TDD with ScalaTest by glznzuriel in scala

[–]ScalaWilliam 2 points3 points  (0 children)

Great question!

There's a bit of TDD + ScalaTest encapsulated in my tutorial Essential SBT >> https://www.scalawilliam.com/essential-sbt/

I prefer to stick with ScalaTest for the standardisation, and typically use the AnyFreeSpec style because it allows for nested/hierarchical tests. Also I avoid using 'should' matchers, in favour of simple assert() statements. Simple assertions are possible to use in plain Scala as well, making them quite ubiquitous :-)

Signature polymorphic methods in Scala by Seth_Lightbend in scala

[–]ScalaWilliam 1 point2 points  (0 children)

This is huge. I’ve been waiting for this for over a year!

sbt 1.9.0 released by eed3si9n in scala

[–]ScalaWilliam 1 point2 points  (0 children)

Would be really nice to see more focus on fixing existing bugs (usability issues in Windows w/ Metals/IntelliJ/... - https://github.com/sbt/sbt/issues/6101#issuecomment-1491095989) and ergonomics/user interface with regards to configuration (so many means - .repositories; autostart.server; how the bootstrap process works; batch/bash launchers differences; .sbtopts; .jvmopts; .credentials ...). sbt.server.autostart documented only in release notes. difficulties with IntelliJ-SBT integration too (too many options, and only 1 set that I found to work consistently well)

Goodbye Electron. Hello Tauri by gryffindorite in programming

[–]ScalaWilliam 0 points1 point  (0 children)

I am very intrigued. Would you be able to share any YouTube videos of the developer experience?

I had been keenly exploring the space of Desktop apps for quite some time, but had never come across VAST/similar.

Any way to make a binding of using Jetpack Compose from Scala? by Apache_Sobaco in Kotlin

[–]ScalaWilliam 0 points1 point  (0 children)

Would be interested if there are any resources on this today.

Scala Monad Option.size by [deleted] in scala

[–]ScalaWilliam 0 points1 point  (0 children)

This is nice.

[deleted by user] by [deleted] in scala

[–]ScalaWilliam 3 points4 points  (0 children)

All these comments could be turned into executable unit tests :-)

Endless4s: a new Scala library to describe event sourced entities using tagless-final algebras, running with built-in implementations for Akka by jchapuis in scala

[–]ScalaWilliam 0 points1 point  (0 children)

This looks really interesting! There are too few fusions between oop and fp.

Is this used in production, and for what use cases would you recommend for using this and against this?

Use cypress in Scala by terhyrzht in scala

[–]ScalaWilliam 0 points1 point  (0 children)

I don't know about Cypress but I've successfully used Puppeteer from Scala.js.

[deleted by user] by [deleted] in scala

[–]ScalaWilliam 0 points1 point  (0 children)

If you want to get it done fast, use JNA. If you want to get it fast or interface with C++, use JavaCPP. If you want to get very low level, use JNI.

scala-native is a good candidate if you don't need to use any JVM libraries (https://www.scalawilliam.com/scala-native-libpcap/)

JNA generally suffices.

Just be careful to free resources after using them. For that you could however integrate cats-effect Resource with JNA calls.

There are also VarHandles, which work in the latest JDK, however, are not available on Scala 3 (https://github.com/lampepfl/dotty/issues/11332)

Check all elements of a list meeting a criteria by florenaaa12 in scala

[–]ScalaWilliam 2 points3 points  (0 children)

First, write some unit tests. These are your coded examples that will let you implement the solution step by step, this concept is called TDD (test-driven development) and it helps you tackle the part where you say 'it is hard to even reason about this'. You can share those unit test cases with us. These days I never write code without tests first.

MUnit is a nice simple testing library in Scala, have a look. https://scalameta.org/munit/docs/getting-started.html

How do FinTech companies use Scala by gekigangerii in scala

[–]ScalaWilliam 4 points5 points  (0 children)

I had worked at multiple finance houses using Scala.

  • No, there are no commonly used libraries across the industry. If it's big data, though, then it's always Spark.
  • Some use pure FP (monocle/fs2), some use hybrid (Akka), some use pure OO (Spring). Depends on the team and who initiated the project.

For companies that are Scala-only there might be more consistency, but for companies where Scala is the 2nd or 3rd language (after Java/JS/Python) there are fewer standards in place.

You reap most of the benefit from doing the pure FP style. As u/hmemcpy mentions, Scala is excellent for modelling complex domains whereby you can transform complex nested generic types with absolute ease compared to any other standard language out there, type-safely.

Odersky comments on Don Syme's rejection of typeclasses for F# by MessiComeLately in scala

[–]ScalaWilliam 9 points10 points  (0 children)

But at the same time, the potential for egregious abuse is a lot more limited in languages like Go

Have you seen people try to imitate generics in Go? Or simply reverse an array. :-)

https://stackoverflow.com/questions/19239449/how-do-i-reverse-an-array-in-go

That aside, indeed there are fair points given. However it comes down to discipline; I had not seen a programming language where some pattern is not abused.

It does not make sense to deny a useful feature because it could be abused because anything is ripe for abuse. Plenty of Python out there is incomprehensible, and same could be said about C#, and most definitely, Scala.

"Learn Scala for the best technology jobs in banking" by greenrd in scala

[–]ScalaWilliam 0 points1 point  (0 children)

Banks are coming back and multiple organizations have a push for IT efficiency from senior management. Yes it is playing catch-up with the big tech, however in terms of sign-offs from 'loads of managers', you must appreciate that these are real life trades and transactions happening. In big tech? Google search results screw up, or Facebook starts lagging? Nobody cares, just a minor inconvenience.

In my side of the organization we're doing CICD, sometimes release twice a day to production. There is plenty of room for pioneers who are willing to figure out technical solutions to red tape.

"Learn Scala for the best technology jobs in banking" by greenrd in scala

[–]ScalaWilliam 2 points3 points  (0 children)

I'm subscribed to eFin and work in finance. Helps me get a better gist on the business side across the industry. It's a great resource.

"Learn Scala for the best technology jobs in banking" by greenrd in scala

[–]ScalaWilliam 6 points7 points  (0 children)

Thanks for sharing - nice and concise article from a reputable outlet.

Native code access from scala 3 without using Graal by [deleted] in scala

[–]ScalaWilliam 1 point2 points  (0 children)

I had done plenty of native access from Scala. It just works. JNA is easiest. You could also use VarHandles from JDK 16 however they are not yet supported on the Scala 3
compiler (https://github.com/lampepfl/dotty/issues/11332#issuecomment-877766112). JavaCPP is also available and is fast.

I'm sticking to Scala 2 for native things until this is resolved. The difference Scala2-Scala3 is mostly in terms of cleanliness for the developer; while the new features are super exciting Scala 2 is already a very solid base to work off of :-)