7 Oct 2024
Direct-style concurrent streaming
Let's take a closer look at how flows work and interoperate with channels.
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.
5 Aug 2024
Direct-style Bootzooka: 2024 update
See what's new in the update we made to Bootzooka this year.
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.
3 Jun 2024
WebSocket chat using structured concurrency, Ox & Tapir
A quick introduction to implementing WebSocket chat using structured concurrency, Ox & Tapir.
8 May 2024
Kafka queues: now and in the future
Compare consumer groups, share groups and the KMQ pattern.
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.
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?
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.
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.
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.
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.
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.
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!
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!
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.
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.
16 Aug 2023
Principles of developing applications in Scala
Here are some principles to consider when developing code with functional programming and Scala.
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?
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.
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?
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)
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.
3 Feb 2023
Prototype Loom-based concurrency API for Scala
Prototype of what a Loom based concurrency API for Scala might look like
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
21 Nov 2022
The architecture of Mastodon
Let's take a look at one of Twitter alternatives: Mastodon. Will it scale?
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.
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.
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.
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.
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.
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.
30 Aug 2022
Implementing Raft using Project Loom
A closer look at the implementation of Raft using a different approach to concurrency: Project Loom.
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.
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.
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?
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.
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.
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.
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.
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.
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.
22 Nov 2021
Security improvements in tapir 0.19
Tapir 0.19 comes with security improvements. What's new?
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.
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.
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?
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.
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.
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?
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.
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…
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…
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?
18 Nov 2020
Functional pancakes
Let’s apply functional programming to a practical problem. Can you guess what it’s going to be?
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.
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?
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.
17 Aug 2020
Structured concurrency and pure functions
How are these two concepts related?
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…
1 Jun 2020
Scalar 2020 whiteboard voting
Wait … whiteboard voting in 2020? How? When? Why?
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?
4 May 2020
Starting with Scala 3 macros: a short tutorial
Writing a simple “debug” macro step-by-step using Scala 3 / Dotty 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?
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.
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!
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…
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…
28 Jan 2020
Will Project Loom obliterate Java Futures?
Project Loom has three main goals: introducing continuations, fibers, and tail-call elimination.
21 Jan 2020
Testing Doobie programs
Testing Doobie, one of the most popular Scala libraries to work with relational databases.
6 Jan 2020
ZIO environment meets constructor-based dependency injection
Is ZIO environment a functional solution to dependency injection? When should it be used?
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
14 Nov 2019
Working with HTTP in Polynote
Exploring some data using sttp client in a polynote notebook
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!
1 Oct 2019
sttp2: an overview of proposed changes
sttp: the Scala HTTP client you always wanted! And now it’s getting even better :)
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
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.
10 Jul 2019
Ethereum in practice: a durable medium for tender offers
An example of a very simple contract which aids the tendering process.
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…
24 Jun 2019
Comparing Ethereum and the Libra blockchain
Is Facebook’s new cryptocurrency Libra, really a 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!
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.
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.
13 May 2019
GraalVM installation and setup on macOS
Enjoy faster Java execution with just released 19.0 version of GraalVM.
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…
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.
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 —…
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.
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.
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!
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…
11 Jul 2018
Supervision & error handling in ZIO, Akka and Monix (part 3) + series summary
In the previous parts we’ve seen:
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…
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…
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…
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…
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…
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…
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…
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…
7 Nov 2017
Simple Scala Stack
Let’s use simple code to solve simple problems!
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…
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…
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.
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.
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.
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?
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
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!
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.
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
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.
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!
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
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.
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
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
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.
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?
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.
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.
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.
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?
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.
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!
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.
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
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.
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!
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.
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!
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
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.
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.
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.
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.
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?
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.
14 Mar 2015
Quicklens: traversing options and lists
Quicklens is a small library which allows to modify deeply nested fields in case classes e.
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.
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.
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.
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.
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.
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!
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.
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.
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.
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.
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.
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.
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.
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.
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.
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
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.
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.
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?
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.
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.
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)!
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
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.
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
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
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;
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.
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.
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.
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.
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 ;) ).
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
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
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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).
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).
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).
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
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
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.
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.
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”?
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.
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”.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
28 Mar 2012
ElasticMQ 0.4: message replication
ElasticMQ is a message queue system, with Java, Scala and an Amazon SQS-compatible REST interface.
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.
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.
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.
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.
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.
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.
30 Aug 2011
Modules, modules, modules …
I think everybody will agree that writing modular applications and modularity in general is a good thing.
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.
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).
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.
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.
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.
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.
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.
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.
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
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).
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).
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
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).
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.
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: .
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.
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).
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.
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).
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!
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.
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).
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.
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).
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.
1 Jul 2010
NEnvers
If you are a .NET and NHibernate user, soon you’ll be able to use Envers in your project!
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.
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.
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.
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?
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.
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.
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.
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.
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.
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).
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!
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).
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).
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.
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.
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.
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).
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.
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.
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.
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.
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:
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).
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)!
17 Nov 2008
Typestate checker – introduction
When dealing with mutable objects in Java, we quite often see that “states” of the class considered emerge.
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.
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.
30 Oct 2008
Envers moves to Hibernate!
I’m happy to announce that Envers is now a module of Hibernate! This means that:
23 Oct 2008
Adding structure to Seam events
The idea described here is originally by Tomek Szymański. I just enhanced it a little.
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.
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.
19 Sep 2008
Envers on Herbstcampus 2008
Yesterday I came back from Herbstcampus 2008 in Nürnberg. I gave there a talk on Envers.
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.
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:
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.
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.
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.
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.
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.
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!
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.
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 .
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.
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).
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).
Any questions?
Can’t find the answer you’re looking for?