Adam Warski

Articles

Featured

14 Nov 2024

What is Functional Programming?

What does programming with functions actually mean? Let's try to answer.

functional programming
23 Feb 2024

Jox 0.1: virtual-thread friendly channels for Java

The goal of the jox project is to facilitate communication between virtual threads. After a couple of development iterations, it's our pleasure to announce the 0.1.0 release of the library. This marks a milestone on the road to the 1.0.0 release, which will guarantee API binary compatibility.

go
channels
ox
virtual threads
java
kotlin
jox
performance
concurrency
16 Aug 2023

Principles of developing applications in Scala

Here are some principles to consider when developing code with functional programming and Scala.

java
scala
functional programming
concurrency
22 Jun 2023

Two types of futures

Futures and promises have made their way into most of the mainstream languages. Are the concepts and mechanics behind futures/promises always the same, or are there some differences?

java
scala
functional programming
concurrency
ox
10 Jun 2021

Implementing event sourcing using a relational database

Curious about the Event Sourcing in Java topic? Check this stepby-step practical guide to implementing an event sourcing database.

akka
rdbms
event sourcing
19 Jul 2018

Why Scala?

Following Martin Odersky’s keynote at ScalaDays, which laid out plans for Scala 3, and John de Goes’s keynote during Scalapeño on the…

scala
kotlin
java
clean code
13 Oct 2017

The case against annotations

Annotations were introduced to Java in 2004 and have since enabled a lot of progress and vastly improved the way we write software in the…

java
annotations
clean code
Reader & Constructor-based Dependency Injection - friend or foe?
12 Dec 2016

Reader & Constructor-based Dependency Injection - friend or foe?

Constructors & the Reader Monad are often use to manage dependencies in code; the Reader Monad is a replacement for Dependency Injection frameworks.

scala
dependency injection
functional programming
macwire
Entry-level, synchronous & transactional event sourcing
17 Sep 2015

Entry-level, synchronous & transactional event sourcing

Event sourcing is an approach in which changes to application state are persistently stored as a stream of immutable events. This is in contrast to typical CRUD applications, where only the current state is stored and mutated when commands come into the system. There's a lot of great introductory material on event sour

scala
event sourcing
rdbms

All articles

6 Dec 2024

Bluesky's Decentralized Architecture Compared to Mastodon and Twitter/X

Check the factors that might make Bluesky significantly different from its competitors.

architecture
12 Dec 2024

Scala Space in 2025

Take a look at our plans for opensource development in 2025.

scala
virtuslab
open source
sttp
14 Nov 2024

What is Functional Programming?

What does programming with functions actually mean? Let's try to answer.

functional programming
7 Oct 2024

Direct-style concurrent streaming

Let's take a closer look at how flows work and interoperate with channels.

scala
ox
concurrency
virtual threads
18 Sep 2024

Autowire: Zero-Cost Dependency Injection

Read more about autowire newest addition to MacWire, a zero-cost, compile-time, type-safe dependency injection library.

scala
dependency injection
macwire
5 Aug 2024

Direct-style Bootzooka: 2024 update

See what's new in the update we made to Bootzooka this year.

bootzooka
scala
tapir
rdbms
functional programming
19 Jul 2024

Programmer-friendly structured concurrency for Java

Jox integrates nicely with all the other Java features, starting with virtual threads, through trywith-resources and exceptions, and blocking I/O operations.

java
concurrency
virtual threads
structured concurrency
jox
3 Jun 2024

WebSocket chat using structured concurrency, Ox & Tapir

A quick introduction to implementing WebSocket chat using structured concurrency, Ox & Tapir.

scala
tapir
virtual threads
structured concurrency
8 May 2024

Kafka queues: now and in the future

Compare consumer groups, share groups and the KMQ pattern.

kafka
mqperf
kmq
messaging
22 May 2024

IO effect tracking using Ox

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.

scala
java
effects
ox
27 May 2024

Lagom is approaching end of life: possible migration paths

Lagom is reaching end-of-life on July 1st, 2024. What should be the replacement? How to architect the migration path? What kind of options do we have?

scala
java
event sourcing
kafka
24 Apr 2024

Safe direct-style Scala: Ox 0.1.0 released

After several months of experimentation and multiple iterations on structured concurrency scopes and error handling, the Ox project's 0.1.0 release is now live! Read on to learn about the new features.

ox
virtual threads
functional programming
scala
concurrency
12 Mar 2024

Handling errors in direct-style Scala

Explore different ways in which we might represent errors and then examine, how such representations are supported in ox.

ox
virtual threads
structured concurrency
concurrency
23 Feb 2024

Jox 0.1: virtual-thread friendly channels for Java

The goal of the jox project is to facilitate communication between virtual threads. After a couple of development iterations, it's our pleasure to announce the 0.1.0 release of the library. This marks a milestone on the road to the 1.0.0 release, which will guarantee API binary compatibility.

go
channels
ox
virtual threads
java
kotlin
jox
performance
concurrency
7 Feb 2024

Self-documenting code is a myth

Does selfdocumenting code remove the need to comment your code? Well, not really - and here's why.

clean code
2 Feb 2024

My Scala Story

Hear from our community members as they share their personal and inspiring Scala journeys. Adam Warski is a Scala & Distributed Systems Expert, CTO and cofounder of SoftwareMill, OSS Developer.

scala
personal
softwaremill
10 Jan 2024

Go-like selects using jox channels in Java

The jox project is relatively young and now we're adding Golike selects to it. Let's see how this feature works and look at a couple more performance tests!

channels
ox
virtual threads
java
kotlin
jox
performance
concurrency
19 Dec 2023

Announcing jox: Fast and Scalable Channels in Java

The jox library implements an efficient Channel data structure in Java, which is designed to be used with virtual threads. Currently, a preview 0.0.2 version, with the above basic functionality implemented. However, that's just the start—look at the closing remarks for our plans!

jox
java
channels
kotlin
25 Oct 2023

Limits of Loom's performance

Investigating the limits of Loom's performance, motivated by the channels implementation in Ox, and comparing with Kotlin's coroutines.

java
performance
virtual threads
go
channels
virtual threads
kotlin
30 Aug 2023

Supervision, Kafka and Java 21: what’s new in Ox

Have you heard of OX? It's a library for the JVM that facilitates structured concurrency. It combines Java 21's virtual threads with features from the Scala programming language and Gostyle channels. While it's still experimental, check out some of OX's new features.

java
scala
kafka
virtual threads
concurrency
go
channels
ox
structured concurrency
16 Aug 2023

Principles of developing applications in Scala

Here are some principles to consider when developing code with functional programming and Scala.

java
scala
functional programming
concurrency
21 Jul 2023

Go-like channels in Scala: receive, send, and default clauses

Ox, a library using Project Loom and Scala 3, offers various features, including implementation of Golike channels. Channels, along with higher-level combinators, allow working with streams in both functional and imperative styles. How can you use it in practice?

scala
virtual threads
concurrency
go
channels
10 Jul 2023

What is blocking in Loom?

Project Loom introduces the concept of Virtual Threads to Java's runtime and will be available as a stable feature in JDK 21.To achieve the performance goals, any blocking operations need to be handled by Loom's runtime in a special way.

java
concurrency
virtual threads
22 Jun 2023

Two types of futures

Futures and promises have made their way into most of the mainstream languages. Are the concepts and mechanics behind futures/promises always the same, or are there some differences?

java
scala
functional programming
concurrency
ox
3 Apr 2023

Go-like channels using project Loom and Scala

Prototype implementation of a hybrid channel design: golike (procedural), and functional (with high-level combinators)

scala
virtual threads
concurrency
channels
ox
6 Mar 2023

Cancelling HTTP requests on the JVM

The article discusses the issues with abandoned HTTP calls and offers an overview of how JVM HTTP clients enable cancelling ongoing requests, which can help conserve resources.

java
scala
http
3 Feb 2023

Prototype Loom-based concurrency API for Scala

Prototype of what a Loom based concurrency API for Scala might look like

java
scala
virtual threads
concurrency
5 Jan 2023

Trying out Unison, part 4: from the edge to the cloud

The last part of Trying out Unison series. Find the way to make distributed programming way more approachable than currently and really fun to program

cloud
functional programming
unison
distributed
21 Nov 2022

The architecture of Mastodon

Let's take a look at one of Twitter alternatives: Mastodon. Will it scale?

architecture
distributed
rdbms
27 Oct 2022

Protecting state using virtual threads

Will actors remain relevant for concurrency in postLoom Java? In this implementation, we'll leverage a virtual thread, consuming messages from a queue, to create a JVM-scheduled actor.

java
akka
concurrency
virtual threads
19 Oct 2022

Trying out Unison, part 3: effects through abilities

Effect systems aim to add some structure to the way side effects are represented in code. This includes any I/O operations, interactions with the system clock, generating random numbers, or spawning new computational threads.

functional programming
unison
effects
6 Oct 2022

Trying out Unison, part 2: organising code

Dependency hell, package managers, publishing, supply chain attacks—these are just a few of the problems that might be solved by Unison.

functional programming
unison
30 Sep 2022

A tapir looms in the distance

Find out how to integrate the Scala ecosystem more seamlessly with Loom by using both sttp client and tapir libraries.

scala
virtual threads
concurrency
tapir
http
sttp
21 Sep 2022

Migrating from Akka HTTP to tapir

With the AKKA stack turning to a license model, the community is exploring alternative toolsets. Tapir, our open source project, is a viable alternative to Akka HTTP.

scala
akka
tapir
http
open api
5 Sep 2022

Trying out Unison, part 1: code as hashes

Unison is functional, statically typed, and introduces some really interesting ideas that make it different from mainstream languages.

functional programming
unison
distributed
30 Aug 2022

Implementing Raft using Project Loom

A closer look at the implementation of Raft using a different approach to concurrency: Project Loom.

java
scala
virtual threads
distributed
zio
18 Aug 2022

Implementing Raft using a functional effect system

Functional effect systems are said to excel at concurrent programming. Is that the case? We're looking at that in a use case of implementing the Raft consensus algorithm.

scala
functional programming
distributed
zio
effects
28 Jul 2022

The future of effects in Scala?

A subjective view on the preSIP considering suspended functions and continuations in Scala 3 and the future of effects in the language.

scala
akka
functional programming
concurrency
zio
kotlin
cats effect
21 Jun 2022

Functional programming for kids?

Given that functional programming requires adopting a certain mindset and often offers a unique perspective on the problem to be solved, can we introduce elements of FP to kids?

functional programming
something different
shelly
14 Jun 2022

Tapir 1.0 released

After almost 4 years of development and multiple 0.x releases, the declarative, typesafe web endpoints library has reached a stable 1.0 version.

scala
functional programming
tapir
open api
7 Jun 2022

Structuring ZIO 2 applications

The new release brings major changes to the recommended way of how ZIO 2 applications should be structured we're sharing our interpretation of that.

scala
functional programming
zio
macwire
dependency injection
Bootzooka 2022: cats-effect 3, autowire & tapir
8 Apr 2022

Bootzooka 2022: cats-effect 3, autowire & tapir

A comprehensive guide to what's changed in Bootzooka, covering updates with cats-effect 3, autowire, and tapir.

scala
cats effect
tapir
bootzooka
30 Mar 2022

Fancy strings in Scala 3

We're putting some of the new Scala 3 features to work and checking how Scala’s compiler can help us with handling strings with special properties.

scala
functional programming
21 Mar 2022

Three tools to improve your Scala workflow

A subjective overview of the most useful tooling to improve your Scala workflow, including Scala Steward, mdoc, and scalafmt.

scala
16 Dec 2021

ZIO environment: episode 3

With ZIO 2.0.0-RC1 release, we're looking at its headline feature: improved and simplified approach to managing dependencies. Let's dive into the new ZIO environment.

scala
dependency injection
zio
functional programming
22 Nov 2021

Security improvements in tapir 0.19

Tapir 0.19 comes with security improvements. What's new?

scala
functional programming
tapir
security
29 Sep 2021

Fast number parsing in Scala

Avoid exceptions in number parsing, they slow you down — see how Scala 2.13's .toIntOption method can make the process faster.

scala
performance
18 Aug 2021

First look at Akka Serverless

A comprehensive guide to Akka Serverless, its state models, actions, effects, views, and more, along with a user registration case study.

java
cloud
serverless
akka
26 Jul 2021

Evaluating persistent, replicated message queues (2020 edition)

How do SQS, RabbitMQ, ActiveMQ Artemis, EventStore, Kafka, Pulsar, RedPanda, RocketMQ, PostgreSQL, NATS Streaming, Redis Streams and MongoDB compare when it comes to queueing?

kafka
performance
rdbms
nosql
messaging
aws
cloud
mqperf
10 Jun 2021

Implementing event sourcing using a relational database

Curious about the Event Sourcing in Java topic? Check this stepby-step practical guide to implementing an event sourcing database.

akka
rdbms
event sourcing
24 May 2021

Scala 3 macros tips & tricks Blog

Some of the things we've learned when implementing a number of macros using Scala 3. A handy guide to start metaprogramming with Scala.

scala
functional programming
metaprogramming
8 Apr 2021

Context is King

Context functions are one of the new contextual abstractions coming in Scala 3. What are they and what are the use-cases?

scala
functional programming
dependency injection
22 Mar 2021

Shelly: under the hood

Shelly — a programming language for drawing — is one of our side-projects, which we work on in-between other engagements.

something different
shelly
typescript
scala
8 Mar 2021

Tapir serverless: a proof of concept

The serverless model has a lot of appeal: simple to deploy, simple to scale, no hardware to manage and no upfront financial commitments…

serverless
scala
aws
11 Feb 2021

Validation analysis paralysis

We can’t trust the data that reaches our servers. We have to make sure that it’s properly formatted, within range, that it references…

clean code
13 Jan 2021

sttp client 3 is here!

What’s new in the latest stable release of the Scala HTTP client that you always wanted?

scala
sttp
functional programming
18 Nov 2020

Functional pancakes

Let’s apply functional programming to a practical problem. Can you guess what it’s going to be?

functional programming
scala
tapir
26 Oct 2020

Designing tapir’s WebSockets support

A deep dive into the design of tapir’s newest feature: describing WebSockets, generating servers, clients & AsyncAPI documentation.

open api
functional programming
akka
6 Oct 2020

Java 15 through the eyes of a Scala programmer

The latest Java release brings us a fresh portion of new features. How do they compare to what’s available in Scala?

java
scala
functional programming
clean code
23 Sep 2020

Never write a UserService again

Or when to use external Microservices.

security
cloud
1 Sep 2020

What’s coming up in sttp client 3?

For the past three months we’ve been working on an update to sttp client, which is now available as version 3.0.0-RC1.

scala
http
17 Aug 2020

Structured concurrency and pure functions

How are these two concepts related?

functional programming
kotlin
java
scala
python
8 Jun 2020

Managing dependencies using ZIO

Is managing dependencies using ZLayers an implementation of Dependency Injection? A comparison with constructor-based DI, with code…

scala
zio
dependency injection
functional programming
1 Jun 2020

Scalar 2020 whiteboard voting

Wait … whiteboard voting in 2020? How? When? Why?

scala
conferences
functional programming
28 May 2020

Defining the server logic for an endpoint: three approaches

Thea, Ralph and Jessie all use tapir to describe their HTTP endpoints. They differ in how they define the server logic — how?

scala
tapir
akka
http
functional programming
4 May 2020

Starting with Scala 3 macros: a short tutorial

Writing a simple “debug” macro step-by-step using Scala 3 / Dotty metaprogramming.

scala
metaprogramming
23 Apr 2020

3 reasons to adopt Event Sourcing

When to consider using event sourcing? What are the scenarios, where this pattern works best?

event sourcing
performance
kafka
15 Apr 2020

How to run a successful remote software development project Blog

An effective remote team knows how to deliver a software project in a distributed model, what traps to avoid & what best practices to employ.

softwaremill
3 Apr 2020

Tapir codecs get an update

Encoding and decoding values is one of the core concepts in a library like Tapir — and it just got better!

scala
http
functional programming
akka
19 Mar 2020

Abstractions and serverless

Good abstractions are good, bad abstractions are bad, but… what does it all have to do with serverless? More than you would initially…

serverless
aws
cloud
modularity
4 Feb 2020

Happy eyeballs algorithm using ZIO

A great example on how structured concurrency and high-level concurrency libraries help in creating understandable, concurrent code in…

scala
python
concurrency
zio
28 Jan 2020

Will Project Loom obliterate Java Futures?

Project Loom has three main goals: introducing continuations, fibers, and tail-call elimination.

java
kotlin
scala
concurrency
21 Jan 2020

Testing Doobie programs

Testing Doobie, one of the most popular Scala libraries to work with relational databases.

scala
rdbms
testing
6 Jan 2020

ZIO environment meets constructor-based dependency injection

Is ZIO environment a functional solution to dependency injection? When should it be used?

scala
zio
dependency injection
functional programming
22 Nov 2019

Migrating to sttp client 2.x and tapir 0.12.x

Summary of the changes in new releases of sttp client and sttp tapir

scala
http
tapir
sttp
14 Nov 2019

Working with HTTP in Polynote

Exploring some data using sttp client in a polynote notebook

scala
http
sttp
18 Oct 2019

Websockets in Scala using sttp

One feature missing from sttp for a long time was support for websockets. With the development of sttp 2, it’s about time to change that!

scala
http
akka
1 Oct 2019

sttp2: an overview of proposed changes

sttp: the Scala HTTP client you always wanted! And now it’s getting even better :)

sttp
scala
http
23 Sep 2019

From @Transactional to type-safe, reasonable transactions

How transaction demarcation is solved in Scala using immutable values, and how this relates to Java’s @Transactional

scala
java
rdbms
21 Aug 2019

Bootzooka 2019: functional Scala and React

Bootzooka is a template project for a Scala-based microservice, or a Scala+React web application.

scala
functional programming
10 Jul 2019

Ethereum in practice: a durable medium for tender offers

An example of a very simple contract which aids the tendering process.

blockchain
1 Jul 2019

tAPIr’s Endpoint meets ZIO’s IO

A simple extension method to leverage ZIO’s typed error/success channels & use them directly when interpreting a tAPIr endpoint as a…

scala
functional programming
http
zio
24 Jun 2019

Comparing Ethereum and the Libra blockchain

Is Facebook’s new cryptocurrency Libra, really a blockchain?

blockchain
17 Jun 2019

Thread shifting in cats-effect and ZIO

The IO from cats-effect and ZIO from zio might seem quite similar — but as is often the case, the devil is in the details!

scala
zio
functional programming
cats effect
13 Jun 2019

sttp, curl, request logging and functional programming

A brand-new addition to sttp is the ability to convert the description of an HTTP request to a curl command.

functional programming
scala
http
30 May 2019

Small & fast Docker images using GraalVM’s native-image

How to reduce the size of the docker images and decrease the time it takes the application to run.

java
scala
graalvm
13 May 2019

GraalVM installation and setup on macOS

Enjoy faster Java execution with just released 19.0 version of GraalVM.

graalvm
java
9 May 2019

Three easy endpoints

tapir is a library for describing HTTP endpoints. It combines Scala’s typesafety, with the declarative style and introspection…

java
scala
http
functional programming
10 Apr 2019

Scalar 2019 whiteboard voting

Scalar 2019 might be over, but the memories remain! Let’s uncover the current trends and the future of Scala.

scala
conferences
akka
functional programming
5 Mar 2019

Final Tagless seen alive

If you follow the Scala community, you’ve probably heard about John de Goes’s talk “Death of Final Tagless”. If you haven’t, no worries —…

scala
functional programming
zio
dependency injection
25 Feb 2019

Describe, then interpret: HTTP endpoints using tapir.

tapir — a Scala library that provides a programmer-friendly, discoverable API, with human-comprehensible types.

scala
akka
functional programming
open api
26 Nov 2018

Correlation IDs in Scala using Monix

Support for correlation IDs is one more area where separating program description from evaluation can be beneficial.

scala
functional programming
distributed
18 Sep 2018

What is Dependency Injection?

Is Dependency Injection something to use in your application? Or maybe using DI makes you a bad programmer? Let’s try to clear things up!

dependency injection
java
clean code
19 Jul 2018

Why Scala?

Following Martin Odersky’s keynote at ScalaDays, which laid out plans for Scala 3, and John de Goes’s keynote during Scalapeño on the…

scala
kotlin
java
clean code
11 Jul 2018

Supervision & error handling in ZIO, Akka and Monix (part 3) + series summary

In the previous parts we’ve seen:

functional programming
scala
akka
concurrency
19 Jun 2018

Akka vs ZIO vs Monix, part 2: communication

In part 1, we’ve explored how to implement a process which manages some non-trivial state using Akka, Akka Typed, Monix and ZIO. However…

scala
akka
functional programming
12 Jun 2018

Scalaz 8 IO vs Akka (typed) actors vs Monix (part 1)

There’s a couple of hot development areas in the Scala ecosystem, and the competition between the various side-effect wrappers is one of…

scala
akka
functional programming
23 May 2018

Scalar 2018 whiteboard voting results!

It’s over a month since Scalar 2018; all of the videos are available, and we’re slowly starting to think about the next one (which will…

scala
conferences
11 Apr 2018

Synchronous or asynchronous, and why wrestle with wrappers?

Have you ever wondered why you have to wrestle with CompletableFutures instead of “just writing code” like in the old days? Is it only for…

java
kotlin
scala
clean code
5 Mar 2018

Event sourcing using Kafka

When building an event sourced system, there’s a couple of options available when it comes to persistence. First is EventStore, a mature…

kafka
event sourcing
akka
16 Feb 2018

Measuring response time in akka-http

Recently I faced a seemingly simple task of measuring how long a request takes and reporting this metric via Prometheus. After a quick…

scala
akka
observability
14 Feb 2018

Don’t fear the main()

Over the years, we — the Java/JVM community — have developed a fear of writing public static void main(...) by hand. We either managed to…

java
scala
8 Feb 2018

200 issues of Scala Times: a bunch of statistics

The first issue of Scala Times was published on the 13th of February, 2014, and was delivered to 98 subscribers. 4 years and 208 issues…

scala
softwaremill
functional programming
7 Nov 2017

Simple Scala Stack

Let’s use simple code to solve simple problems!

scala
clean code
functional programming
19 Oct 2017

sttp 1.0 released!

I’m happy to announce that sttp 1.0 — the Scala HTTP client that you always wanted — is now available. The project’s quite young, but…

scala
akka
13 Oct 2017

The case against annotations

Annotations were introduced to Java in 2004 and have since enabled a lot of progress and vastly improved the way we write software in the…

java
annotations
clean code
sttp streaming and the URI interpolator
3 Aug 2017

sttp streaming and the URI interpolator

sttp streaming and the URI interpolator. sttp is a Scala HTTP client library with the goal of providing a simple, no-surprises, immutable API.

scala
akka
http
sttp
27 Jul 2017

What does Kafka's exactly-once processing really mean?

There’s still confusion as to what exactlyonce processing means in Kafka. Here's how to construct a Kafka exactly once pipeline right.

kafka
messaging
distributed
Introducing sttp
25 Jul 2017

Introducing sttp

The Scala ecosystem is rich in http client libraries. However, I always found them lacking in some aspect. That's why sttp provides a simple, type-safe API for defining HTTP requests.

scala
akka
http
sttp
18 Jul 2017

Evaluating persistent, replicated message queues (2017 edition)

How does SQS, RabbitMQ, ActiveMQ, Artemis, EventStore, Kafka and MongoDB compare when it comes to queueing?

kafka
messaging
performance
nosql
kmq
6 Jul 2017

Amazon's SQS performance and latency

It's been a while since we last looked at how fast Amazon SQS is. Did anything change? What kind of performance can you expect from simple AWS queue service (amazon sqs)?. How SQS works. First, a quick refresher (or introduction, if you are not yet familiar with the service) on how SQS works.Amazon SQS is a message que

aws
cloud
performance
messaging
22 Jun 2017

Kafka with selective acknowledgments (kmq) performance & latency benchmark

Kafka acknowledgment explained. When receiving messages from Apache Kafka, you can only acknowledge the messages up to a given offset. Read!

kafka
performance
kmq
messaging
Free and tagless compared - how not to commit to a monad too early
8 May 2017

Free and tagless compared - how not to commit to a monad too early

Find out how does free monads & the final-tagless encoding work and is it worth to use free over tagless in Scala & Functional Programming.

scala
functional programming
Comparing Scala relational database access libraries
18 Apr 2017

Comparing Scala relational database access libraries

Relational databases might no longer be the only and primary storage option; but for sure, they aren't going anywhere. Accessing them is still a common task in our programming life, and that translates to many libraries which aim to help us write correct, readable and maintainable RDBMsrelated code.What are the options

scala
rdbms
Race condition when caching using the get-compute-put pattern
29 Mar 2017

Race condition when caching using the get-compute-put pattern

Beware of using the get-if absent compute-put sequence to cache values in a multi-threaded environment. Use Caffeine & the atomic get-or-create operation.

java
concurrency
27 Feb 2017

Using Kafka as a message queue

Apache Kafka is a very popular publish/subscribe system. What is the best way to leverage Kafka queue? Read the article here!

scala
java
kafka
messaging
kmq
Bring some color to your Scala compiler
31 Jan 2017

Bring some color to your Scala compiler

Only last week, Chris wrote about what's new in Scala Clippy, which included highlighting diffs in type mismatch errors.This week (in version 0.5.0), we are introducing another colorrelated feature: syntax highlighting in the Scala compiler output!. Here's how it looks in practice:. Much nicer than the all-same-color d

scala
Reader & Constructor-based Dependency Injection - friend or foe?
12 Dec 2016

Reader & Constructor-based Dependency Injection - friend or foe?

Constructors & the Reader Monad are often use to manage dependencies in code; the Reader Monad is a replacement for Dependency Injection frameworks.

scala
dependency injection
functional programming
macwire
Most popular keybind for push-to-talk
8 Dec 2016

Most popular keybind for push-to-talk

Being a distributed company and working remotely creates new challenges when it comes to efficient communication. Part of our solution is to use a pushto-talk system, TeamSpeak in our case. You might have last used it when playing your favorite PlayStation game, but it turns out it's also very useful for remote work. F

softwaremill
something different
1 Dec 2016

Open source big data landscape - paper presented at ITS World Congress 2016

The Intelligent Transport Systems (ITS) Congress 2016, which took place in Melbourne, Australia, was a great place to catch up on the current trends in the industry, as well as to present our paper on how the opensource Big Data ecosystem can be leveraged in ITS.Apart from being available in the congress proceedings, t

conferences
kafka
akka
big data
Beautiful folds in Scala
14 Nov 2016

Beautiful folds in Scala

Scala Fold definition. Folding is all about combining a sequence of input elements into a single output element. More inside this tutorial.

scala
functional programming
26 Oct 2016

Windowing data in Big Data Streams - Spark, Flink, Kafka, Akka

Processing data in a streaming fashion is more popular than batch-processing big data sets. When to choose Spark, Flink, Kafka, Akka or else?

akka
kafka
big data
Why I started learning Emacs in 2016
25 Aug 2016

Why I started learning Emacs in 2016

Why learn another editor in the first place? The main role of a good editor is to not get into your way while working, and maybe even help a bit from time to time.

something different
Replacing Akka actors with Akka streams
31 Aug 2016

Replacing Akka actors with Akka streams

Submit the RunTaskRequest, poll for task status, and finally get the results. This would work fine, however the pure-actor solution has flaws.

scala
akka
8 Aug 2016

Windowing data in Akka Streams

Comparing to Spark, Flink or Kafka Streams, windowing data in Akka Streams isn’t definitely a one-liner, but it’s also not that hard to implement it.

scala
akka
big data
Kafka Streams - how does it fit the stream processing landscape?
1 Jun 2016

Kafka Streams - how does it fit the stream processing landscape?

The streaming space is quickly becoming crowded, so how is Kafka Streams different & where does it fit in the stream processing developers toolbox?

kafka
big data
Securing REST response serialization with Scala implicits
17 May 2016

Securing REST response serialization with Scala implicits

When developing web apps and REST/HTTP APIs using Scala it's convenient to automatically serialize any case class as a response to the client.

scala
security
5 May 2016

Scalar 2016 Scala Memes

Results of the Scalar's conference contest for the best Scala Meme. Want to see how scala programmers see scala programming? It's fun!

conferences
scala
Add a “dependencies” badge & tree to your project using UpdateImpact
24 Feb 2016

Add a “dependencies” badge & tree to your project using UpdateImpact

Most Java/Scala/Groovy project depend on a number of libraries, these libraries depend on other libraries, and so on for many levels deep.

softwaremill
Approaches to data auditing and introducing Slick-Eventsourcing
1 Dec 2015

Approaches to data auditing and introducing Slick-Eventsourcing

I’ve been working on various ways to audit data for quite some time now, probably because when working in IT (Information Technology), it’s just so painful to see all that historical data go to waste. You never know when it might be useful, but often it’s too late! Moreover, a good technical approach to auditing

scala
rdbms
event sourcing
akka-http-session 0.2.0 - mobile (and web), JWT, optional cookies
16 Nov 2015

akka-http-session 0.2.0 - mobile (and web), JWT, optional cookies

akka-http-session provides directives for secure client-side session management in web and mobile applications, using cookies or custom headers + local storage and optional Json Web Tokens format support.

scala
akka
security
Event sourcing + free monads = free sourcing?
28 Oct 2015

Event sourcing + free monads = free sourcing?

I recently wrote about Event Sourcing and Free Monads. The natural next step is combining the two!

event sourcing
functional programming
scala
architecture
6 Oct 2015

Free monads - what? and why?

If you're into functional programming you'll encounter free monads. A free monad is a construction which allows to build a monad from any Functor.

scala
functional programming
MacWire 2.0: composing modules & cleanup
30 Sep 2015

MacWire 2.0: composing modules & cleanup

Recently we released MacWire 2.0, with a number of new features and general code cleanup. The majority of the work was done by Bruno Bieth – thanks!

dependency injection
metaprogramming
macwire
scala
Entry-level, synchronous & transactional event sourcing
17 Sep 2015

Entry-level, synchronous & transactional event sourcing

Event sourcing is an approach in which changes to application state are persistently stored as a stream of immutable events. This is in contrast to typical CRUD applications, where only the current state is stored and mutated when commands come into the system. There's a lot of great introductory material on event sour

scala
event sourcing
rdbms
Bootzooka is now based on Akka HTTP
28 Aug 2015

Bootzooka is now based on Akka HTTP

Akka HTTP is a HTTP client & server implementation on top of Akka & Akka Stream, with a very flexible and elegant routing DSL for defining endpoints.

scala
akka
Client-side sessions for akka-http
10 Jul 2015

Client-side sessions for akka-http

akka-http-session provides client-side sessions using session cookies with signed content, optionally encrypted & expiring after a given period.

scala
akka
When & why to use Supler for web forms?
30 Jun 2015

When & why to use Supler for web forms?

If you haven’t yet heard about Supler, it’s a Rapid Form Development library, working with your favorite Javascript frontend and Scala backend frameworks.

web
scala
Comparing akka-stream and scalaz-stream with code examples
28 May 2015

Comparing akka-stream and scalaz-stream with code examples

Comparing design, features, API and performance by implementing same data streaming code examples using either akka-stream or scalaz-stream.

scala
akka
Evaluating persistent, replicated message queues (2015 edition)
4 May 2015

Evaluating persistent, replicated message queues (2015 edition)

How does SQS, RabbitMQ, ActiveMQ, Artemis, EventStore, Kafka and MongoDB compare when it comes to queueing?

kafka
messaging
nosql
rdbms
performance
MacWire 1.0 is here!
7 Apr 2015

MacWire 1.0 is here!

A couple of days ago MacWire 1.0 was released! If you don’t yet know what MacWire is: a light-weight and non-intrusive Scala Dependency Injection library.

akka
dependency injection
metaprogramming
macwire
scala
Quicklens: traversing options and lists
14 Mar 2015

Quicklens: traversing options and lists

Quicklens is a small library which allows to modify deeply nested fields in case classes e.

functional programming
metaprogramming
scala
Supler update: 0.3.0 release
19 Mar 2015

Supler update: 0.3.0 release

It’s been some time since the last release of Supler. Just as a short reminder: Supler is a Rapid Form Development library, allowing you to use your favorite Javascript frontend, and Scala backend frameworks.

scala
web
Quicklens: modify deeply nested case class fields
28 Feb 2015

Quicklens: modify deeply nested case class fields

TL;DR: Quicklens: modify deeply nested fields in case classes, e.g.: modify(person)(_.address.street.name).using(_.toUpperCase). Similar to lenses, but without the actual lens creation.

functional programming
metaprogramming
scala
In today’s post-OO world, is dependency injection still relevant?
23 Feb 2015

In today’s post-OO world, is dependency injection still relevant?

It’s 2015. Most of the new popular languages are more or less functional. The old ones, like Java, gain functional programming elements.

dependency injection
clean code
functional programming
macwire
scala
MacWire 0.8.0: towards 1.0, tagging, anonymous functions support
20 Jan 2015

MacWire 0.8.0: towards 1.0, tagging, anonymous functions support

A couple of days ago MacWire 0.8.0 got released. It contains a couple of changes and new features.

dependency injection
macwire
scala
Supler 0.2.0: docs and features added, bugs removed
30 Jan 2015

Supler 0.2.0: docs and features added, bugs removed

Supler is a library which makes writing complex forms easier. It has a server-side (Scala) and a client-side (JavaScript) component.

scala
web
Scala type parameters riddle
13 Jan 2015

Scala type parameters riddle

Do you like functional programming puzzle? We came up with the following Scala riddle with Scala type parameters. Enjoy!

scala
Supler 0.1.0: complex forms made easier
16 Dec 2014

Supler 0.1.0: complex forms made easier

Supler aims to make complex web forms development easier, without tying you to a web framework.

scala
web
Clustering reactmq with akka-cluster
4 Nov 2014

Clustering reactmq with akka-cluster

In the last two posts on reactmq, I described how to write a reactive, persistent message queue.

akka
distributed
scala
messaging
Introducing Supler: a Functional Reactive Form Library
17 Sep 2014

Introducing Supler: a Functional Reactive Form Library

Let’s face it. Creating websites with complex forms is a pain. Writing the HTML in the frontend, the supporting javascript, defining mappings in the backed, server-side validation, and – let’s not forget, it’s 2014 – corresponding client-side validation, cause a lot of duplication of code and effort, and result in frustration.

metaprogramming
scala
web
Making the Reactive Queue durable with Akka Persistence
3 Jul 2014

Making the Reactive Queue durable with Akka Persistence

Some time ago I wrote how to implement a reactive message queue with Akka Streams. The queue supports streaming send and receive operations with back-pressure, but has one downside: all messages are stored in-memory, and hence in case of a restart are lost.

akka
event sourcing
scala
distributed
Evaluating persistent, replicated message queues (updated w/ Kafka)
1 Jul 2014

Evaluating persistent, replicated message queues (updated w/ Kafka)

An updated and extended version of this post is available on SoftwareMill’s website. Below you can find the original content containing benchmarks from 2014.

aws
cloud
distributed
messaging
performance
testing
Guide to Dependency Injection in Scala
30 Jul 2014

Guide to Dependency Injection in Scala

Dependency Injection is a standard when developing business applications. Implement DI frameworks in Java and other languages using Scala.

scala
dependency injection
MacWire 0.7: dynamically accessing the object graph
22 Jul 2014

MacWire 0.7: dynamically accessing the object graph

MacWire is a Lightweight and Nonintrusive Scala Dependency Injection library. While it would be great to be able to define in a type-safe way the whole object graph for an application upfront, there are cases when it is necessary to access and extend it dynamically.

dependency injection
macwire
modularity
scala
Benchmarking SQS
24 Jun 2014

Benchmarking SQS

SQS, Simple Message Queue, is a message-queue-as-a-service offering from Amazon Web Services. It supports only a handful of messaging operations, far from the complexity of e.

aws
cloud
messaging
distributed
testing
performance
Reactive Queue with Akka Reactive Streams
10 Jun 2014

Reactive Queue with Akka Reactive Streams

Update 15/09/2014: introduced API changes from akka-streams 0.7. Update 30/10/2014: introduced API changes from akka-streams 0.

akka
concurrency
scala
5 Jun 2014

Scaling Ruby to Scala? Yap.TV Case Study

SoftwareMill and Yap.TV began cooperation in September 2011. At the time, the Yap.TV server was entirely Rubybased. While this worked in the beginning, as the user base grew, high load on the servers, especially during prime time TV, caused significant issues with server performance and scalability.Not only was this de

softwaremill
scala
Cluster-wide Java/Scala application deployments with Docker, Chef and Amazon OpsWorks
12 Jun 2014

Cluster-wide Java/Scala application deployments with Docker, Chef and Amazon OpsWorks

Docker is great for running isolated containers on a single node. However, most software systems run on multiple nodes, so in addition to Docker, we need some way of specifying which containers should run on which nodes.

aws
cloud
distributed
Spray server in a Docker container
6 May 2014

Spray server in a Docker container

Docker is a pretty new, but very exciting project; with Docker you can create lightweight, self-sufficient containers with any application inside, and later run the containers on a variety of hosts.

http
cloud
docker
scala
Codebrag: why post- and per- commit?
21 May 2014

Codebrag: why post- and per- commit?

We have recently released version 2.0 of Codebrag, our code-review tool. Why a new code-review tool in the first place?

code review
softwaremill
Functional Discrete Optimization @ Coursera with Scala
13 May 2014

Functional Discrete Optimization @ Coursera with Scala

Recently I took part in the Discrete Optimization class at Coursera. I must say that it was the best MOOC I have attended so far, because of two factors.

something different
functional programming
scala
Inverse beacon positioning
24 Apr 2014

Inverse beacon positioning

Indoor positioning is a very popular topic recently, mostly due to the iBeacon technology promoted by Apple, and adopted by other vendors.

hardware
messaging
Makerland, hackaton and turtles
21 Mar 2014

Makerland, hackaton and turtles

The first Makerland is over – if you read only the first sentence of this blog, the conference was great, watch out for the second edition (hopefully there will be one)!

something different
hardware
conferences
Bootzooka update - fat-jar deployments
4 Mar 2014

Bootzooka update - fat-jar deployments

Bootzooka is our template web project, featuring Scala and Scalatra for the backend, an AngularJS singlepage-app for the frontend, and a joint SBT+Grunt build process.You can now create a single, runnable jar thanks to the SBT assembly plugin. The fat-jar includes all of Bootzooka's code, as well as the Javascript, sty

bootzooka
scala
Big data: when single node is better than clustered
6 Mar 2014

Big data: when single node is better than clustered

There’s a lot of hype about “big data” and a general trend to try to apply Hadoop to almost every problem.

machine learning
distributed
Bootzooka update - PBKDF2 for user passwords, smaller footprint
27 Feb 2014

Bootzooka update - PBKDF2 for user passwords, smaller footprint

Bootzooka is our template web project, featuring Scala and Scalatra for the backend, an AngularJS singlepage-app for the frontend, and a joint SBT+Grunt build process.Even a template project evolves all the time. Recently I've been speaking at Jfokus, and one of the most interesting presentations I attended was on secu

bootzooka
scala
Conway's Law and SoftwareMill?
20 Feb 2014

Conway's Law and SoftwareMill?

Some time ago I was reading a summary of the BuildStuff 2013 conference by Pieter Hintjens. It’s an interesting read as a whole, but here I’d like to draw your attention to the fragment about Conway’s Law.Conway’s Law says that the systems we create as a company reflect the communication patterns of the company

softwaremill
14 Feb 2014

First SoftwareMill hackaton - iBeacons

Last week, during our monthly face to-face meeting, we held the first Softwaremill hackaton. The main theme were iBeacons. As many of us already did some experiments with Bluetooth LE (the technolgy behind beacons), we had a couple of Estimote beacons, Gimbal beacons, RaspberryPis with BLE dongles and iPhones/MacBooks;

something different
hardware
Using Scala traits as modules, or the “Thin Cake” Pattern
25 Feb 2014

Using Scala traits as modules, or the “Thin Cake” Pattern

I would like to describe a pure-Scala approach to modularity that we are successfully using in a couple of our Scala projects.

dependency injection
macwire
modularity
scala
How do iBeacons work?
13 Jan 2014

How do iBeacons work?

iBeacons are certainly a trending topic recently. They allow indoor positioning, letting your phone know that you are in range of a beacon.

something different
hardware
Using JavaCV with Scala and SBT
24 Jan 2014

Using JavaCV with Scala and SBT

Recently I’ve been doing some simple face detection in a Scala-based project. The “industry standard” for such kind of tasks is OpenCV; face detection is one of its basic use-cases.

machine learning
scala
Traffic simulation game in Elm
7 Jan 2014

Traffic simulation game in Elm

A couple of weeks ago I read about Elm, a new functional language, which compiles to JavaScript and HTML.

functional programming
something different
BuildStuff 2013 is over – looking forward to ’14!
17 Dec 2013

BuildStuff 2013 is over – looking forward to ’14!

I just came back from the BuildStuff conference in Vilnius, Lithuania (actually this was almost a week ago, but I was writing that back at the airport ;) ).

conferences
dependency injection
metaprogramming
macwire
scala
4 Dec 2013

SoftwareMill Partners with Typesafe to deliver Scala and Akka consulting

We are happy to announce that SoftwareMill signed a consulting partnership agreement with Typesafe, Inc. Typesafe is dedicated to helping developers build Reactive applications on the JVM. With the Typesafe Reactive Platform, including Play Framework, Akka, and Scala, developers can deliver highly resp

softwaremill
SoftwareMill goes to Devoxx 2013
5 Nov 2013

SoftwareMill goes to Devoxx 2013

It is almost a tradition that a large representation from our company attends. Devoxx, the biggest Java conference in Europe.This year we are going with a strong team of 7 people. (Maciek,. Jarek,. Jacek,. Paweł,. Tomek,. Adam and. Łukasz),. joined by some friends from the Warsaw JUG and others. (So expect an even la

conferences
softwaremill
Creating an on-line recommender system with Apache Mahout
8 Oct 2013

Creating an on-line recommender system with Apache Mahout

Recently we’ve been implementing a recommender system for Yap.TV: you can see it in action after installing the app and going to the “Just for you” tab.

machine learning
softwaremill
Using Amazon’s Elastic Map Reduce to compute recommendations with Apache Mahout 0.8
15 Oct 2013

Using Amazon’s Elastic Map Reduce to compute recommendations with Apache Mahout 0.8

Apache Mahout is a “scalable machine learning library” which, among others, contains implementations of various single-node and distributed recommendation algorithms.

cloud
aws
distributed
machine learning
MacWire 0.5: Interceptors
1 Oct 2013

MacWire 0.5: Interceptors

Interceptors are very useful for implementing cross-cutting concerns. Classic use-cases include security, logging or transaction support.

dependency injection
macwire
modularity
scala
Automatic generation of delegate methods with Macro Annotations
7 Sep 2013

Automatic generation of delegate methods with Macro Annotations

Macro Annotations are a new type of macros, which are one of the candidates for inclusion (see also comment by Eugene below) in the upcoming Scala 2.

metaprogramming
annotations
scala
Java Zone 2013 trip report
22 Sep 2013

Java Zone 2013 trip report

This year I had the chance to attend JavaZone 2013. So far I mainly knew JavaZone from their conference trailers (e.

conferences
metaprogramming
scala
Verifying usage of 3rd party libraries using Veripacks
5 Aug 2013

Verifying usage of 3rd party libraries using Veripacks

Veripacks already allows to specify and verify which classes should be visible outside of a package (in a package-transitive way) as well as require importing and import packages within a project.

java
modularity
veripacks
Dependency Injection in Play! with MacWire
21 Aug 2013

Dependency Injection in Play! with MacWire

The most recent release of MacWire (0.4) (a Scala macro to generate wiring code for class instantiation, DI container replacement) comes with new utilities which make it easier to integrate with frameworks which require by-class instance lookup.

dependency injection
macwire
scala
ElasticMQ 0.7.0: long polling, non-blocking implementation using Akka and Spray
6 Jun 2013

ElasticMQ 0.7.0: long polling, non-blocking implementation using Akka and Spray

ElasticMQ 0.7.0, a message queueing system with an actor-based Scala and Amazon SQS-compatible interfaces, was just released.

cloud
aws
elasticmq
messaging
Akka vs Storm
25 Jun 2013

Akka vs Storm

I was recently working a bit with Twitter’s Storm, and it got me wondering, how does it compare to another high-performance, concurrent-data-processing framework, Akka.

akka
concurrency
distributed
architecture
Implementing factories in Scala & MacWire 0.3
18 Jun 2013

Implementing factories in Scala & MacWire 0.3

Factories are useful when we need to create multiple instances of a class at run-time, usually providing some parameters, but still without using new explicitly; we want to make some complex object creation abstract.

dependency injection
macwire
scala
Typed ask for Akka
21 May 2013

Typed ask for Akka

Akka is a great tool for writing distributed applications. One thing that always surprised me though is that while being based on Scala, which is a very type-safe language, the elementary construct in Akka – an actor – is not really type safe.

akka
scala
MacWire 0.2: Scopes are simple!
25 Apr 2013

MacWire 0.2: Scopes are simple!

MacWire generates new instance creation code of given classes, using values in the enclosing type for constructor parameters, with the help of Scala Macros.

dependency injection
metaprogramming
macwire
scala
Per-commit e-mail GitHub notifications
16 Apr 2013

Per-commit e-mail GitHub notifications

One thing that I miss in GitHub is the ability to get e-mail notifications on each push/commit.

code review
softwaremill
MacWire 0.1: Framework-less Dependency Injection with Scala Macros
4 Apr 2013

MacWire 0.1: Framework-less Dependency Injection with Scala Macros

Using Dependency Injection is almost a standard when developing software. However, in many cases it may seem that using the pattern implicates using a DI container/framework.

dependency injection
macwire
scala
How to replace a build module with Veripacks
26 Mar 2013

How to replace a build module with Veripacks

Compare the two trees below. In both cases the goal is to have an application with two independent modules (frontend and reporting), and one shared/common module (domain).

java
modularity
veripacks
Dependency injection with Scala macros: auto-wiring
14 Mar 2013

Dependency injection with Scala macros: auto-wiring

You can look at dependency injection as a fancy name for passing parameters to a function (or constructor arguments to a constructor).

dependency injection
metaprogramming
macwire
Veripacks 0.3: importing packages (transitively, of course)
12 Mar 2013

Veripacks 0.3: importing packages (transitively, of course)

Previous versions of Veripacks focused on defining what classes are visible outside of a package hierarchy (exporting).

java
testing
modularity
veripacks
5 Mar 2013

Monitor anything (with JBison)

We have recently released a new version of JBison (https://jbison.com), our software as-a-service web&application monitoring website.The highlight of this release are the so-called “JSON monitors”. What can you monitor with them? Basically – anything. JSON monitors allow to monitor an arbitrary metric of you

softwaremill
3 Mar 2013

Bootstrap Iteration 10: Angular usage improvements, Rogue

Overview. Here we are again! Bootstrap is evolving and a new contributor, Krzysztof Ciesielski, joined our ranks! This iteration was a technical one but very interesting at the same time. Highlights of the changes:. . better Angular files layout. testing Angular directives (= testing DOM manipulation!). migrating fro

bootzooka
scala
xsbt-proguard-plugin – taking over, new release
19 Feb 2013

xsbt-proguard-plugin – taking over, new release

I recently took over the maintenance of xsbt-proguard-plugin from siasia. The plugin lets you create single “fat” jars from your project, using the Proguard library.

scala
Veripacks 0.2: exporting subpackages
3 Feb 2013

Veripacks 0.2: exporting subpackages

Veripacks 0.1 allowed to specify which classes should be exported from a package hierarchy, by using a simple @Export annotation, and later verify that the specification is met.

java
testing
veripacks
modularity
Dry parameter names
26 Jan 2013

Dry parameter names

How often do you see code like this, especially when using dependency injection, single-responsibility principle, and other “good practices”?

clean code
Updating to Scala 2.10: ElasticMQ and scala-macro-debug
21 Jan 2013

Updating to Scala 2.10: ElasticMQ and scala-macro-debug

As Scala 2.10 was released some time ago, it is high time to update the projects using 2.

elasticmq
metaprogramming
scala
Veripacks 0.1 – Verify Package Specifications
5 Jan 2013

Veripacks 0.1 – Verify Package Specifications

Using some free time during my Christmas & New Year break, I worked on a new project, which implements some of the ideas from my earlier blog “Let’s turn packages into a module system”.

java
modularity
testing
veripacks
Starting with Scala Macros: a short tutorial
2 Dec 2012

Starting with Scala Macros: a short tutorial

Using some time during the weekend, I decided to finally explore one the new features in the coming Scala 2.

metaprogramming
scala
Let’s turn packages into a module system!
8 Nov 2012

Let’s turn packages into a module system!

Many projects are divided into modules/subprojects using the build system (Maven, Gradle, SBT …); and writing modular code is generally a Good Thing.

java
architecture
scala
clean code
ElasticMQ is now synced to Maven central
19 Nov 2012

ElasticMQ is now synced to Maven central

Thanks to Sonatype OSS repositories, ElasticMQ version 0.6.1 is now synced to central. All of the artifacts, except the standalone server (which depends on Ostrich, which isn’t available in the central repo) are synchronized.

aws
cloud
elasticmq
java
messaging
scala
Event streaming with MongoDB
27 Nov 2012

Event streaming with MongoDB

MongoDB is a really great “NoSQL” database, with a very wide range of applications. In one project that we are developing at SoftwareMill, we used it as a replicated event storage, from which we stream the events to other components.

distributed
nosql
ElasticMQ 0.6: batch operations, strict/relaxed SQS-compatibility mode
20 Oct 2012

ElasticMQ 0.6: batch operations, strict/relaxed SQS-compatibility mode

Summer is definitely over, so it’s about time to release a new version of ElasticMQ (0.

cloud
aws
elasticmq
messaging
Unexpected problems with Apache and mod_rewrite under high load
18 Sep 2012

Unexpected problems with Apache and mod_rewrite under high load

In one of the projects that we are currently working on we have a fairly typical setup with one server (Apache with mod_rewrite) proxying traffic to backend servers.

distributed
java
testing
Missing OO and FP bridge in Scala
18 Aug 2012

Missing OO and FP bridge in Scala

Scala blends functional and object-oriented programming in many nice ways. You can use both FP an OO-like constructs whichever fits the current problem better.

functional programming
scala
clean code
Connecting a piano pedal to a computer
15 Aug 2012

Connecting a piano pedal to a computer

It’s good to do something different once in a while. In my case, “different” still means things involving a computer – but far from the Java&Scala programming that I do daily.

softwaremill
something different
hardware
Generational caching and Envers
13 Jul 2012

Generational caching and Envers

Konrad recently shared on our company’s technical room an interesting article on how caching is done is a big polish social network, nk.

envers
hibernate
java
Implementing message replication in ElasticMQ with JGroups
12 Jun 2012

Implementing message replication in ElasticMQ with JGroups

ElasticMQ is a messaging server, with a Scala, Java, and an Amazon SQS-compatible interface. It supports guaranteed messaging by replicating the messages across a cluster of servers, and message persistence with journalling.

aws
cloud
elasticmq
java
distributed
Hibernate 4.1.4: Envers tests run&pass on multiple DBs
31 May 2012

Hibernate 4.1.4: Envers tests run&pass on multiple DBs

Envers is an entity auditing framework, making it possible to store and query for historical data.

envers
hibernate
java
ElasticMQ 0.5: journalling, stand-alone server
29 May 2012

ElasticMQ 0.5: journalling, stand-alone server

ElasticMQ is a message queue server, with Scala, Java, and an Amazon SQS-compatible interface. It also supports guaranteed messaging via replicating the messages across a cluster of servers.

distributed
elasticmq
java
cloud
aws
scala
messaging
Frameworks vs Libraries as Inheritance vs Composition?
17 Apr 2012

Frameworks vs Libraries as Inheritance vs Composition?

For quite some time inheritance was the dominant model of structuring programs in OO languages like Java.

architecture
clean code
ElasticMQ 0.4: message replication
28 Mar 2012

ElasticMQ 0.4: message replication

ElasticMQ is a message queue system, with Java, Scala and an Amazon SQS-compatible REST interface.

aws
cloud
distributed
elasticmq
java
messaging
scala
ElasticMQ 0.3: new API, new in-memory storage
6 Feb 2012

ElasticMQ 0.3: new API, new in-memory storage

ElasticMQ 0.3 just got released! ElasticMQ is a simple message queue system, which exposes both a native and an Amazon SQS-compatible interface.

aws
cloud
elasticmq
java
scala
messaging
ElasticMQ 0.2 – support for delayed queues and messages
12 Jan 2012

ElasticMQ 0.2 – support for delayed queues and messages

Time to start blogging in 2012 :) I just released version 0.2 of ElasticMQ – a simple message queue system, which implements the Amazon SQS interface.

aws
cloud
messaging
java
scala
elasticmq
ElasticMQ 0.1 released!
12 Oct 2011

ElasticMQ 0.1 released!

ElasticMQ is a simple messaging system, exposing an SQS-compatible REST interface. It can run using an in-memory H2 database (ideal for testing), or backed by a normal database (e.

aws
cloud
messaging
java
scala
elasticmq
Envers bundled with JBoss AS 7.0.2!
28 Sep 2011

Envers bundled with JBoss AS 7.0.2!

Using Envers is now even easier! Since version 7.0.2, Envers comes bundled with JBoss Application Server.

envers
hibernate
java
Blending Ruby (on Rails) and CDI on OpenBlend 2011
8 Sep 2011

Blending Ruby (on Rails) and CDI on OpenBlend 2011

I will have the pleasure to speak on OpenBlend 2011, in exactly a week: 15th September 2011, which will take place in Ljubljana, Slovenia.

conferences
ruby
jsf
java
How to handle inheritance and @Audited?
8 Sep 2011

How to handle inheritance and @Audited?

Some Envers uses had problems because of the limited flexibility in specifying which fields from superclasses (especially those annotated with @MappedSuperclass) should be audited or not.

envers
hibernate
java
Modules, modules, modules …
30 Aug 2011

Modules, modules, modules …

I think everybody will agree that writing modular applications and modularity in general is a good thing.

architecture
modularity
Introducing ElasticMQ: Scala SQS alternative
16 Aug 2011

Introducing ElasticMQ: Scala SQS alternative

Wanting to explore Scala and some new Scala/Java libraries I started writing ElasticMQ. It is a simple message queueing system, following closely Amazon SQS semantics and exposing a REST SQS-like interface.

aws
cloud
messaging
java
scala
elasticmq
Using Envers with AS7
4 Aug 2011

Using Envers with AS7

Recently I tried deploying a web application which uses Envers into AS7, but unfortunately I encountered some problems (see the forum discussion).

envers
java
hibernate
Trying to understand CAP
19 Jul 2011

Trying to understand CAP

The CAP theorem, stated by Brewer and proved by Gilbert and Lynch specifies a property of distributed systems.

rdbms
cloud
nosql
architecture
Envers: track entity types changed in revisions
4 Jul 2011

Envers: track entity types changed in revisions

Łukasz Antoniak, who is a regular contributor to Envers (thanks!), recently finished working on HHH-5580, a feature which enables you to quickly retrieve the entity types that have been modified in a revision, by optionally storing them in a dedicated table.

envers
java
hibernate
CDI Portable Extensions on Confitura 2011
1 Jun 2011

CDI Portable Extensions on Confitura 2011

In less than two weeks (11th June) I will have the opportunity to present a talk on CDI & Portable Extensions during the Confitura 2011 conference, organized by the Warsaw JUG.

testing
jee
java
conferences
Static typing is a great static analysis tool
27 Jun 2011

Static typing is a great static analysis tool

Statically-typed languages are great because, well, they have static typing. However very often developing using a dynamically-typed language is much more convenient.

java
static analysis
ruby
scala
clean code
After Confitura 2011
13 Jun 2011

After Confitura 2011

Confitura 2011 went past very quickly, it was a great conference and a great occasion to meet with the polish Java community on the SPOINA after-party.

testing
conferences
aws
jee
cloud
dependency injection
java
Envers & TorqueBox on RivieraJUG – May 6th
2 May 2011

Envers & TorqueBox on RivieraJUG – May 6th

This Friday (6th of May) I will have the pleasure to present two talks: one on Envers and one on Torquebox, thanks to an invitation from the RivieraJUG.

testing
jee
envers
hibernate
java
ruby
SoftwareMill a Confitura 2011 partner!
18 May 2011

SoftwareMill a Confitura 2011 partner!

Just like last year, SoftwareMill is a partner of the current edition of Confitura (formerly Javarsovia). Confitura is the largest community conference dedicated to Java in Poland, and had almost 1000 participants last year.Go register now, the programme is looking very interesting! We particularly recommend our e

softwaremill
conferences
DI in Scala: Cake Pattern pros & cons
29 Apr 2011

DI in Scala: Cake Pattern pros & cons

I’ve been looking at alternatives for java-style DI and DI containers which would use pure Scala; a promising candidate is the Cake Pattern (see my earlier blog post for information on how the Cake Pattern works).

dependency injection
java
scala
modularity
Envers and Hibernate 4.0.0.Alpha2 – automatic listener registration
18 Apr 2011

Envers and Hibernate 4.0.0.Alpha2 – automatic listener registration

Development of Hibernate4 is well under way, with the Alpha2 version released recently. It contains one major improvement which is quite significant for Envers, namely Integrators (see HHH-5562 & HHH-6081).

envers
java
hibernate
Mobicents in production – Attikis from the inside
11 Apr 2011

Mobicents in production – Attikis from the inside

One of the main parts of the Attikis system is a VoIP module that services incoming alarms and outgoing voice mail. The module was built 100% based on an opensource project, Mobicents. We used two components of Mobicents: Mobicents SIP Servlets and Mobicents Media Server.When Attikis gets an incoming connection

softwaremill
Timing interceptor for CDI/Weld
1 Mar 2011

Timing interceptor for CDI/Weld

Lately we did some performance tuning, and in order to find out which methods are the hotspots I wrote a simple timing interceptor (it uses some code from a Seam forum post by Tobias Hill).

jee
java
Ruby on Rails + CDI/Weld on Torquebox example app
11 Mar 2011

Ruby on Rails + CDI/Weld on Torquebox example app

For almost a year we’ve been successfully using Torquebox together with CDI/Weld as a base for two of our services: JBison and Circular.

jee
dependency injection
java
ruby
17 Mar 2011

References from Attikis

SoftwareMill got references for the development of the project Attikis – home monitoring service integrated with home alarm systems, based on VoIP technology. Let the letter speak for itself: .

softwaremill
Dependency Injection in Scala: Extending the Cake Pattern
14 Dec 2010

Dependency Injection in Scala: Extending the Cake Pattern

Continuing the mini-series on Dependency Injection (see my previous blogs: problems with DI, assisted inject for CDI and improving assisted inject), I took a look at how DI is handled in Scala.

dependency injection
java
scala
Improving autofactories/assisted inject
7 Dec 2010

Improving autofactories/assisted inject

In my two previous posts I wrote about some problems with DI and a solution to part of those problems: assisted inject (as known in Guice)/autofactories (my implementation for CDI).

jee
dependency injection
java
DB test: run tests with a database using Arquillian
30 Nov 2010

DB test: run tests with a database using Arquillian

DB test is a set of helper classes which let you run tests that use a database.

testing
jee
hibernate
java
Dependency injection discourages object-oriented programming?
13 Oct 2010

Dependency injection discourages object-oriented programming?

Suppose you have a Product entity and that you want to implement a method which sends the product to a customer (let’s call it ship).

jee
dependency injection
clean code
java
DI and OO: Assisted Inject in CDI / Weld
26 Oct 2010

DI and OO: Assisted Inject in CDI / Weld

My last post sparked quite a lot of interest – thanks for all the comments both on the blog and on dzone!

jee
dependency injection
java
Envers at JBoss One Day Talk 2010
25 Sep 2010

Envers at JBoss One Day Talk 2010

I will be presenting Envers (data auditing in Hibernate) at JBoss One Day Talk 2010 in Munich, on the 1st of October.

envers
java
hibernate
Envers query performance improvements with end-revision column
24 Sep 2010

Envers query performance improvements with end-revision column

Thanks to the patch provided by Matthew B. Jones, and improved by Erik-Berndt Scheper, the new Envers ValidTimeAuditStrategy (which will be renamed to ValidityAuditStrategy in upcoming releases) now leverages the additional information held in the end-revision column when creating queries; they no longer need to use subselects to find an entity at a given revision (JIRA issue HHH-5372).

envers
java
hibernate
New Envers contributor
27 Sep 2010

New Envers contributor

I’d like to welcome Erik-Berndt Scheper as our new Envers contributor. His first commit was yesterday (rev 20717 and 20718), resolving the HHH-5560 issue.

envers
java
hibernate
New features in cdi-ext
2 Aug 2010

New features in cdi-ext

Tomek Szymański just commited two new features to cdi-ext. The first is the ability to secure JSF pages when using the Nav component to handle navigation (more on it here).

jee
jsf
Envers 1.2.3-hibernate-3.3 – backport release
21 Aug 2010

Envers 1.2.3-hibernate-3.3 – backport release

Hernan Chanfreau backported some of the recent Envers changes and fixes from the 3.5 branch. The detailed list of the backported issues can be found in this forum post.

envers
java
hibernate
NEnvers
1 Jul 2010

NEnvers

If you are a .NET and NHibernate user, soon you’ll be able to use Envers in your project!

envers
java
hibernate
Ruby on Rails + CDI? Why not! Enter TorqueBox + Weld
27 Jul 2010

Ruby on Rails + CDI? Why not! Enter TorqueBox + Weld

I guess many people are often “unsatisfied” with how JSF works and how much time it sometimes takes to do a simple thing.

jee
dependency injection
java
jsf
ruby
Initial valid-time support in Envers
2 Jul 2010

Initial valid-time support in Envers

I just commited initial support for valid-time auditing in Envers, a feature that a lot of users has been (directly or indirectly) asking for.

envers
java
hibernate
Object Services in Scala
21 Jun 2010

Object Services in Scala

Using Scala’s implicits it’s possible to implement Object Services in a much more “user-friendly” way. Just to remind, the goal is to extend a class hierarchy with a method, polymorphically.

java
scala
Object Services, or bridging anemic and rich models, in CDI/Weld
27 May 2010

Object Services, or bridging anemic and rich models, in CDI/Weld

Rich domain models are certainly a nice, object-oriented idea, but I always had one problem with them: what if they become bloated with completely unrelated methods?

jee
java
CDI & Weld Extensions in Git
17 May 2010

CDI & Weld Extensions in Git

Hello, I’ve created a new cdiext project at github, initially with two extensions: Stackable Security Interceptors, about which I blogged here and here.

jee
dependency injection
java
Extending the security interceptor for Weld/JSF2
13 Apr 2010

Extending the security interceptor for Weld/JSF2

In my previous post, I described how to create a simple security interceptor, which checks conditions defined using EL expressions, e.

jee
java
jsf
Hibernate 3.5-Final, Envers included, released!
1 Apr 2010

Hibernate 3.5-Final, Envers included, released!

Hibernate 3.5 was just released; congratulations to Steve and the whole team! It’s the first final Hibernate release that includes Envers.

envers
java
hibernate
JSR-308, checkers framework and static analysis on GeeCON
26 Apr 2010

JSR-308, checkers framework and static analysis on GeeCON

I’ll be speaking about the JSR-308 specification (annotations on java types), which will be part of Java 7, on the GeeCON conference, which will take place from the 13th till the 14th of May 2010 in Poznan, Poland.

conferences
java
static analysis
JSF2 navigation: post->redirect->get
11 Mar 2010

JSF2 navigation: post->redirect->get

JSF2 improves a lot both how navigation can be done (you can now return a view id from an action method, no need to describe every navigation case in faces-config.

jee
java
jsf
Simple security interceptor in Weld/JSF2
31 Mar 2010

Simple security interceptor in Weld/JSF2

Waiting for the Seam3 security module, I wrote a simple security interceptor (inspired by the Seam2 security annotation).

jee
java
jsf
Projects Using Envers wikipage
1 Feb 2010

Projects Using Envers wikipage

I just created a new “Projects Using Envers” wikipage; so if you are using Envers in your project, make sure to add it to the list!

envers
java
Dependency Injection and replacing dependencies in CDI/Weld
16 Dec 2009

Dependency Injection and replacing dependencies in CDI/Weld

From time to time, in a system I develop, which uses EJB3 beans as the basic “component model”, I have a need to do some operations using a new entity manager (but still in the same transaction).

jee
dependency injection
java
Envers 1.2.2 released!
18 Dec 2009

Envers 1.2.2 released!

After quite a long break, I’m happy to announce a new release of Envers (available on the downloads page, or via Maven).

envers
java
hibernate
Nonnull-check generator: a scala compiler plugin
15 Oct 2009

Nonnull-check generator: a scala compiler plugin

Recently I played a bit with compiler plugins for Scala. My goal is to write a plugin which would generate checks in code for methods annotated with JSR305 annotations.

static analysis
java
scala
Typestate checker – checking iterators
23 Sep 2009

Typestate checker – checking iterators

In the new 0.2.2 release of the typestate checker (an extension to the JSR308 checkers framework), you can now specify a state, to which an object transits, if a method returns true or false using the afterTrue and afterFalse elements in state annotations.

java
static analysis
Javarsovia, static analysis and annotations
2 Jul 2009

Javarsovia, static analysis and annotations

If you’ll be in Warsaw this weekend, and if you speak polish, be sure not to miss Javarsovia, a one-day conference organized by the Warsaw JUG.

java
static analysis
Envers on Jazoon
21 Jun 2009

Envers on Jazoon

If you’ll be attending Jazoon next week, be sure not to miss the Envers presentation! It will take place on Wednesday (24th July), at 4pm (here are the presentation details).

envers
java
conferences
hibernate
Envers 1.2.1.GA released
6 Jun 2009

Envers 1.2.1.GA released

Yesterday I uploaded a new release of Envers, 1.2.1.GA. It is mainly a bugfix release, but there is also one new feature.

envers
java
hibernate
StaticAccess detector for FindBugs
11 May 2009

StaticAccess detector for FindBugs

The StaticAccess detector is a FindBugs plugin, which lets you verify that methods do not rely on static (global) state, that is, that they don’t read or write static variables which aren’t constant.

java
static analysis
New features in Typestate Checker
14 Apr 2009

New features in Typestate Checker

I’ve uploaded a new version (0.2) of the typestate checker (for an introduction, see this blog post), which contains bug fixes and much improved exception handling.

java
static analysis
Envers 1.2.0.GA released!
5 Mar 2009

Envers 1.2.0.GA released!

Today Envers 1.2.0.GA has been released! It is a Hibernate 3.3 compatible version of the newest Envers codebase, which will be included as a module in Hibernate 3.

envers
java
hibernate
Envers 1.2.0.GA in Maven repository; JSR308 typestate and maven plugin in GIT
11 Mar 2009

Envers 1.2.0.GA in Maven repository; JSR308 typestate and maven plugin in GIT

The recently released Envers 1.2.0.GA finally made it to the JBoss Maven repository; you can find it here:

envers
java
hibernate
static analysis
JSR308 Checkers Maven2 plugin
4 Feb 2009

JSR308 Checkers Maven2 plugin

I’ve written a prototype JSR308 Checkers Maven2 plugin. You can use the plugin to run any checker on the sources of your module(s).

java
static analysis
Envers in Anvers!
4 Dec 2008

Envers in Anvers!

December came, so it’s time for Devoxx! (formerly JavaPolis) If you are planning to visit Antwerp this year, make sure to come and see the Envers presentation (first conference day, 3pm)!

conferences
envers
java
hibernate
Typestate checker – introduction
17 Nov 2008

Typestate checker – introduction

When dealing with mutable objects in Java, we quite often see that “states” of the class considered emerge.

java
static analysis
Envers on JDD 08
14 Oct 2008

Envers on JDD 08

If you’ll be visting Java Developers’ Day 2008 in Cracow, Poland on Thursday, be sure to stop by and see my presentation of Envers.

envers
java
hibernate
Envers 1.1.0.GA released
21 Oct 2008

Envers 1.1.0.GA released

Today Envers 1.1.0.GA has been released. For the impatient: go straight to the downloads! :) This release contains only minor modifications from the last beta version.

envers
java
hibernate
Envers moves to Hibernate!
30 Oct 2008

Envers moves to Hibernate!

I’m happy to announce that Envers is now a module of Hibernate! This means that:

envers
java
hibernate
Adding structure to Seam events
23 Oct 2008

Adding structure to Seam events

The idea described here is originally by Tomek Szymański. I just enhanced it a little.

java
jboss
Envers is back from vacations
3 Sep 2008

Envers is back from vacations

Hello, after a vacation break, Envers is back with a 1.1.0.beta1 release. You can find the release notes here.

envers
java
hibernate
Envers 1.1.0.beta2 released with collections support
27 Sep 2008

Envers 1.1.0.beta2 released with collections support

Today Envers 1.1.0.beta2 has been released. This release focuses on supporting persistent collections. In earlier versions, it was only possible to version collections belonging to one-to-many bidirectional relations.

envers
java
hibernate
Envers on Herbstcampus 2008
19 Sep 2008

Envers on Herbstcampus 2008

Yesterday I came back from Herbstcampus 2008 in Nürnberg. I gave there a talk on Envers.

envers
java
hibernate
Envers 1.0.0.GA released!
16 Jul 2008

Envers 1.0.0.GA released!

Today the first general availability version of Envers has been released (downloads, release notes). This is a stable version containig all the features found in the preview and beta versions.

envers
java
hibernate
What data should be stored in versions tables? – a poll
4 Jun 2008

What data should be stored in versions tables? – a poll

Hello, I’ve posted a poll on what data should be stored in versions tables in Envers, see here and cast your vote:

envers
java
hibernate
Bi-temporal versioning with Envers
16 Jun 2008

Bi-temporal versioning with Envers

With the recent addition of queries to Envers, it is now possible to easily retrieve data in a bi-temporal way.

envers
java
hibernate
Envers beta – now with queries!
12 Jun 2008

Envers beta – now with queries!

So far Envers made it easy to store historical data; now, with version 1.0.0.beta1 (download here), you can also query it, in two “dimensions”: for entities at a given revision and for revisions, at which an entity changed.

envers
java
hibernate
Envers preview 3: logging data for revisions, Seam demo
6 May 2008

Envers preview 3: logging data for revisions, Seam demo

With the preview 3 release of Envers, you can easily associate additional data with revisions. This could be, for example, the name of the user making the change.

envers
java
hibernate
Envers preview 2: versioning relations
22 Apr 2008

Envers preview 2: versioning relations

You can now download a second preview version of the Envers library! As a quick reminder, the library enables you to easily version your JPA entities, by simply annotating their properties with @Versioned; it works as an extension to Hibernate and Hibernate Entity Manager.

envers
java
hibernate
Value-to-variable binding “let” tag for JSF, Facelets and Seam
28 Apr 2008

Value-to-variable binding “let” tag for JSF, Facelets and Seam

The “let” tag enables you to bind the value of any expression to a variable and later reuse it, without recalculating the value.

java
jsf
Introducing Envers: Easy Entity Versioning
10 Apr 2008

Introducing Envers: Easy Entity Versioning

Hello, Envers is a project which enables you to version your entities, simply by annotating them with @Versioned!

hibernate
envers
java
Clean URLs in Seam: URLRewriteFilter
31 Mar 2008

Clean URLs in Seam: URLRewriteFilter

Starting with Seam 2.0.1 (annoucement here, download here) you can fully use UrlRewriteFilter to make URLs in your Seam app nice and clean.

java
jboss
Instant Facelets: changes in .xhtml and no redeploying
7 Dec 2007

Instant Facelets: changes in .xhtml and no redeploying

If you are developing anything with Facelets/Seam/… frameworks, you probably know the pain of having to redeploy after each .

java
jboss
Developing with Seam and without frequent redeploying
12 Oct 2007

Developing with Seam and without frequent redeploying

Seam in combination with JBoss Tools already has the features I wrote about some time ago (see here), unless, for example, you aren’t using Eclipse or you want to develop with Seam 2, which isn’t supported by JBoss Tools yet.

java
jboss
UTF-8 in JBoss/Tomcat + MySQL + Hibernate + JavaMail
3 Oct 2007

UTF-8 in JBoss/Tomcat + MySQL + Hibernate + JavaMail

While most of (web)applications communicate with the end user in English, a lot of them use native languages, which often have some special characters (not to look too far for an example, we have the Polish alphabet, with ą, ę, ś, etc).

java
jboss
Developing JSP/JSF pages without frequent redeploying
27 Sep 2007

Developing JSP/JSF pages without frequent redeploying

Imagine you are developing a web application, which displays some JSP files. It is pretty annoying to have to re-deploy the application whenever you make any change to a JSP to see the result in the browser (there are other ways to get rid of that annoying problem, of course; here I’m describing only one way of many).

java
jsf

Any questions?

Can’t find the answer you’re looking for?