Lagom, an opinionated microservices framework, is reaching end-of-life on July 1st, 2024. Beyond this date, no additional security or bugfix patches will be provided. Quite naturally, this raises questions about production applications that are based on the framework; keeping sof … | Continue reading
In my previous article, I took a closer look at the Java ExecutorService interface and its implementations, with some focus on the Fork/Join framework and ThreadPerTaskExecutor. Today, I would like to take a step forward and check how well they behave when put under pressure. In … | Continue reading
Ox, a library for safe direct-style concurrency and resiliency in Scala on the JVM, recently gained a new feature: the IO capability. IO is designed to be part of the signature of any method that performs I/O, either directly or indirectly. The broader goal of the IO capability f … | Continue reading
With more prevalent applications like chatGPT, Siri, or Alexa, we slowly surround ourselves with technology we may not fully understand. This article aims to give you a glimpse into the area of language agents. The structure of that blog post is as follows: first, we will discuss … | Continue reading
In software architecture, observability is one of the most important characteristics. This is especially true for distributed systems. Communication between services often happens asynchronously by sending messages, which introduces complexity for the application's testability. I … | Continue reading
Hello! Chances are that you clicked this article to get to know something about our new Meerkat project. This is the first article of a series about observability and our attempt towards giving back to the open source community, so I hope you'll stay tuned for the upcoming parts … | Continue reading
In the previous Part of the series I briefly showed how programming a quantum computer looks like. Check all the articles from the series: Part 1 A gentle overview Part 2 Basic building blocks Part 3 Programming a quantum computer In this Part I’m going to show you a working exam … | Continue reading
An AI Chatbot is an instruction-tuned Large Language Model (LLM). Such a chatbot can provide fast, accurate, and relevant answers to questions it is faced with. However, it is limited to the information, text tone, format, and style it was trained on. The Retrieval Augmented Gene … | Continue reading
Kafka is the leading messaging & streaming platform and the de-facto standard for transporting large amounts of data. The primary abstraction in Kafka is a topic, divided into partitions. Because Kafka topics are partitioned, they have excellent scaling characteristics, limited o … | Continue reading
In the world of concurrent programming, managing access to shared resources and synchronising tasks are critical challenges that developers face. Rust, known for its safety and performance, offers an excellent concurrency model through ownership, types, and the borrow checker. Ho … | Continue reading
Why documents? Documents, in digital and printed form, are the main means of formal communication within and between companies. It is a universal way of exchanging information regardless of industry, country, or language. What's more, document circulation is often enforced by law … | Continue reading
Structured concurrency allows to run asynchronous tasks within clearly defined boundaries of supervision. Introduced as a preview feature in Java 19, it helps to manage the lifecycle of running forks by requiring the developer to define a scope and enforcing the rule that tasks c … | Continue reading
After a couple of months spent in an experimental phase and several iterations around the design of structured concurrency scopes and error handling, we are pleased to announce the 0.1.0 release of the Ox project. What is Ox? The project's motto says it best: Safe direct-style co … | Continue reading
Held annually in Warsaw, Poland, Scalar has established itself as THE place to be for Scala enthusiasts, software engineers, and technology leaders. This year's Scalar Conference was particularly special as we celebrated two major milestones: the 20th anniversary of the Scala pro … | Continue reading
In the previous Parts of the series I gave a quick overview of a quantum computer and talked a little bit about qubits and other building blocks behind that picture. Check all the articles from the series: Part 1 A gentle overview Part 2 Basic building blocks In this Part I’m goi … | Continue reading
We celebrate Scala's 20th anniversary in 2024 and invited experts to share their Scala Stories. Jacek Kunicki is a Senior Software Engineer, conference speaker, and SoftwareMill Academy lead. You can follow him on X: @rucek How did you first get introduced to Scala, and what did … | Continue reading
Have you ever thought about conducting an Event Storming workshop remotely? Does it make sense and is it feasible? As SoftwareMill, we are a 100% remote company, and the clients we work for are scattered around the world across different time zones. Organizing an on-site Event St … | Continue reading
Introduction In the previous Part of the series, I gave a quick overview of a quantum computer. In this Part, I’m going to talk a little bit about qubits and other building blocks behind that picture. I keep it lightweight, showing only the parts necessary to understand the logic … | Continue reading
Whenever there is a new feature or entirely new system to be introduced, we usually expect the task to be solved by writing new or changing existing software to support it. It is indeed true in most cases - that’s what we usually do: we build software that meets business needs. S … | Continue reading
This second article continues our exploration of Stream Gatherers, introduced in Java 22 with JEP 461. After detailing the Gatherer interface and custom operations in the first part, we now shift focus to built-in gatherers, examining their capabilities. Furthermore, we'll delve … | Continue reading
Motivation A quantum computer provides a special form of parallelism. By utilizing it, the quantum computer should be able to compute things faster than its classical counterpart. However, to make use of it, problems need to be approached differently, using specifically designed … | Continue reading
Full stack JavaScript development keeps storming the software & technology world and seems to take no break. In this article, I want to lay out my subjective assessment of trending technologies to keep an eye on in the coming months. These are mostly based on the community focus … | Continue reading
As part of our initiative to share knowledge about Domain Driven Design and related tools - I would like to tell you about one of the interesting workshops we use in our clients' projects. It is called the Big Picture Event Storming workshop, which leads to the discovery of relev … | Continue reading
KubeCon goes mainstream, and it is the most amazing conference I’ve been to so far. At the same time, ‘amazing’ is not a good word for describing how awesome it was. People, talks, organization, everything was on point. And knowledge — so much of it that I have a list of TODO stu … | Continue reading
Introduction I have a conviction that this term has been used for so long that it’s lost its meaning along the way. It’s not the buzzword it used to be not that long ago. I’ll do my best to describe this topic despite it going out of fashion because it’s as relevant as ever. Let' … | Continue reading
Introduction Recently, I wrote two blog posts about Tapir performance benchmarks: [Part 1]() and https://softwaremill.com/benchmarking-tapir-part-1/, Part 2. These tests allowed us to implement many significant optimizations (see GitHub milestone here). As a bonus, I’d like to us … | Continue reading
Scala is celebrating its 20th anniversary in 2024, so we invited Scala experts to share their Scala Stories. One of the experts is Krzysztof Ciesielski, Senior Software Engineer at SoftwareMill. You can follow him on X: @kpciesielski How did you first get introduced to Scala, and … | Continue reading
Some time ago we started a Domain Driven Design initiative at SoftwareMill. Our goal here is to spread the knowledge and our experience with DDD together with multiple complementary tools and techniques we use regularly on clients’ projects. After some quest for a problem and dom … | Continue reading
Java 22 introduces an interesting preview feature with JEP 461: Stream Gatherers, a pivotal upgrade to the Stream API. This feature centers around a new gather method, enhancing the API's customization, flexibility, and efficiency. It's designed to: Elevate the Stream API's adapt … | Continue reading
Scala experts share their Scala Stories to celebrate the 20th anniversary of Scala in 2024. Meet Monica McGuigan, and follow her on LinkedIn. How did you first get introduced to Scala, and what did you think about it? I started properly learning Scala in 2022 when I joined my cur … | Continue reading
Error handling is the cornerstone of any library that orchestrates the execution of user-provided code. That's also the case in ox, a library for safe direct-style concurrency and resiliency for Scala on the JVM. Many of ox's features are centered around error handling: structure … | Continue reading
In my latest article of the series about our Domain-Driven Design show-case project, which you can read more about here, I covered our kickoff session of Big Picture Event Storming. Quick recap: we started with a chaotic exploration, which was a brain dump of relevant domain even … | Continue reading
Another wonderful guest in our My Scala Story series is Zainab Ali. She is a functional programmer, educator, open source contributor and organizer of the London Scala User Group. She is a maintainer of fs2 and the original author of its reactive streams component. For the past f … | Continue reading
With the regular cadence of Java releases, developers eagerly anticipate each new version for the enhancements and features it brings. As the next iteration, Java 22, prepares for release on 19th March, it's time to dive into the improvements and updates that await. From performa … | Continue reading
I had never been fully convinced about remote work. It just didn't feel right. It was hard to imagine how to become truly involved and immersed in the company's day-to-day operations. I wanted my contributions to be relevant and meaningful, not just to check tasks off a list. As … | Continue reading
In 2024, 8 years will pass since I started to work in IT. I began my journey as a junior UI designer in 2016 and then, after some time, I switched to a front end developer role. I was always interested in moving things on the screen, especially in the browser. Yet, only fairly re … | Continue reading
Introduction In the previous part, I analyzed how a combination of Tapir+low-level server handles high load of HTTP requests in comparison with using unwrapped, “vanilla” servers directly. It allowed us to identify a few bottlenecks, as well as confirm Tapir’s low overhead in man … | Continue reading
One common mistake in software architecture is blindly copying successful architectures without considering a project's unique needs and context. For example, many companies try to replicate the architecture of successful companies like Netflix without considering whether it is a … | Continue reading
We invited Scala experts to share their Scala Stories to celebrate Scala's 20th anniversary. Gabriel Volpe is a Software Engineer specialized in a functional programming. You can visit his website and follow him on X: @volpegabriel87. How did you first get introduced to Scala, an … | Continue reading
Chaos is considered the primordial state or the first condition of the universe from which everything else originated. The sentence “At first Chaos came to be” from Hesiod's Theogony perfectly describes this concept. Despite its mythological origins, it accurately describes pheno … | Continue reading
In today's text, I want to take a closer look at Server Sent Events (or SSE for short) and WebSockets. Both are good and battle-tested approaches to data exchange. I will start with a short characteristic of both tools – what they are and what they offer. Then, I will compare the … | Continue reading
The goal of the jox project is to facilitate communication between virtual threads: competitive in terms of performance to the state-of-the-art (on the JVM, and generally) with a low memory footprint so that the number of channels might scale together with the number of virtual t … | Continue reading
In September 2022 Lightbend surprised the Scala community by announcing the Akka license change for all future releases from Apache 2.0 to "source available" Business Source License (BSL) v1.1. In practice that means that businesses who would like to use newer versions and get ov … | Continue reading
Modern software development demands not only a solid understanding of technology but also a comprehensive grasp of the business driving the software. This includes knowledge of the operational domain and organizational structure. Fortunately, the software development industry has … | Continue reading
Join us in celebrating Scala's 20th anniversary in 2024! We've gathered a group of Scala experts to share their amazing Scala Stories. Tomas Mikula is a Lead Software Engineer, you can follow him on X, GitHub and LinkedIn. How did you first get introduced to Scala, and what did y … | Continue reading
Tapir is a well-adopted Scala library that makes building web APIs easier. It uses Scala's strong type system, letting you create endpoints, generate documentation, handle errors, work with cross-cutting concerns (interceptors, security), and work with JSON, all with the help of … | Continue reading
Another day, another My Scala Story episode! Read the #scalaversary-inspired relation about his Scala journey by Paweł Marks. Paweł is the Team Leader of the Scala Compiler Team at VirtusLab and the Release Officer of Scala 3. How did you first get introduced to Scala, and what d … | Continue reading
Searching for self-development opportunities can be challenging and time-consuming, as it involves sifting through various resources to find the right fit for your personal and professional growth. To ease this process, we've compiled a curated list of tech conferences that offer … | Continue reading