2013-12-31
2013-12-23
2013-12-16
2013-12-08
2013-12-03
2013-11-29
Let's Code Jumi #283: Launcher Actors (Part 1)
The code which sends the startup command to the daemon is from the original walking skeleton and not unit tested, which makes it hard to modify. This part must be re-designed before we can add support for a second command - the shutdown command.
2013-11-22
2013-11-17
Let's Code Jumi #281: Process Liveliness (Part 1)
To get started on daemon shutdown commands, we need to expose the java.lang.Process
instance to assert whether it's dead or alive.
2013-11-13
Let's Code Jumi #280: Final Decoupling
The recent unit tests failed when doing a clean build because JumiLauncher
was still coupled with the embedded daemon JAR.
2013-11-08
2013-11-02
2013-10-25
Let's Code Jumi #277: System Properties (Part 1)
With command line parsing working, next up is passing parameters as system properties.
2013-10-20
2013-10-15
2013-10-12
Let's Code Jumi #274: Command Line Arguments (Part 1)
Next I will want to get the shutting down of the daemon process from walking skeleton quality to production quality. To get a feel for the code in that area, let's start with something easy - command line parsing.
2013-10-06
2013-10-03
Let's Code Jumi #272: More Robust Design (Part 1)
I have one more idea to make WorkerCounter
's API harder to use wrong and its implementation simpler.
2013-09-29
2013-09-23
2013-09-18
2013-09-15
Let's Code Jumi #268: Concurrency Bug (Part 1)
Though it had not yet bitten me, I realized that WorkerCounter
has a concurrency bug that could cause two onAllWorkersFinished
events being fired. Let's try to find a more reliable design...
2013-09-11
Let's Code Jumi #267: Continuous Delivery
Doing the first release of the Jumi Actors library. I will explain my deployment pipeline for implementing Continuous Delivery to deploy Maven artifacts into Maven Central using Go and Sonatype OSSRH.
You may also read about my deployment pipeline, and how to implement it yourself, in the article Continuous Delivery with Maven and Go into Maven Central.
2013-09-08
Let's Code Jumi #266: Final Polish
A couple of finishing touches before publishing the actor library. For example fixing a cyclic package dependency revealed by IntelliJ IDEA's Dependency Structure Matrix.
2013-09-05
2013-09-01
Let's Code Jumi #264: Custom POM Properties (Part 1)
Maven includes in every JAR a pom.properties file which contains the artifact's groupId, artifactId and version. I would like to include there also Git's revision ID. Unfortunately maven-jar-plugin's pomPropertiesFile option is broken and we need a workaround.
2013-08-28
2013-08-24
Let's Code Jumi #262: Actor Interface Contracts (Part 1)
Some polish before the Jumi Actors library is ready for being published, for example improved validation of actor interfaces.
2013-08-19
2013-08-16
2013-08-12
2013-08-09
2013-08-05
2013-08-02
2013-07-30
Let's Code Jumi #255: Failure Handling (Part 1)
Creating hooks for handling uncaught exceptions from actors. Originally only the single-threaded actors had them, but they are also needed in production.
2013-07-25
2013-07-22
2013-07-16
2013-07-13
Let's Code Jumi #251: Stopping Actor Threads (Part 1)
Jumi has not yet needed support for stopping actor threads (it just exits the whole JVM), but for the Jumi Actors library to be general-purpose, there should be a way to release resources.
2013-07-10
2013-07-06
2013-07-02
Let's Code Jumi #248: Executor Logging (Part 1)
Some actors delegate work to background threads, so those should also be logged to see the full picture.
2013-06-28
2013-06-25
2013-06-22
2013-06-16
2013-06-11
2013-06-08
2013-06-07
Let's Code Jumi #241: Message Logging (Part 1)
Making debugging actors easier by logging all messages sent to and from actors.
2013-06-01
Let's Code Jumi #240: Thread Naming
Moving thread management and naming from the actor library into an external thread pool and a custom thread factory.
2013-05-26
Let's Code Jumi #239: Microbenchmark
Measuring with Caliper whether it makes sense to cache the DynamicEventizer
instances.
2013-05-20
2013-05-17
Let's Code Jumi #237: Eventizer Providers (Part 1)
The usability of the actors library can be improved by making it a single configuration option to support actors of all interface types.
2013-05-13
Let's Code Jumi #236: Terminology Update
After introducing actor threads and removing the unattended workers, the actor tests require some updating.
2013-05-10
2013-05-07
2013-05-04
2013-04-30
Let's Code Jumi #232: Removing Unattended Workers (Part 2)
Migrating away from using unattended workers into using the new MonitoredExecutor
class.
2013-04-26
Let's Code Jumi #231: MonitoredExecutor (Part 3)
The MonitoredExecutor
class had a bug which was probably the reason why we failed to put it into use.
2013-04-22
Let's Code Jumi #230: Removing Unattended Workers (Part 1)
Migrating away from using unattended workers into using the new MonitoredExecutor
class.
2013-04-18
2013-04-14
Let's Code Jumi #228: MonitoredExecutor (Part 1)
If we create an Executor
which notifies when it has finished executing its commands, that should help in getting rid of Actors.startUnattendedWorker()
and the numerous callbacks of the old WorkerCounter
.
2013-04-08
2013-03-28
2013-03-23
Let's Code Jumi #225: Decoupled Actor Threads (Part 1)
Creating an actor used to be coupled with creating its thread (or reusing the current thread). By separating those operations we can unify "primary" and "secondary" actors, making the actors much simpler to use.
2013-03-18
2013-03-10
2013-03-02
Let's Code Jumi #222: Unified Actors (Part 1)
By unifying the processing of "primary" and "secondary" actors, the internal design can be improved considerably, and later we can get rid of those two different actor categories completely.
2013-02-26
2013-02-23
Let's Code Jumi #220: ActorRef (Part 1)
The Jumi Actors library can be made easier and safer to use by introducing a reference class, a bit like in Akka Actors. This is the first step for a bunch of design improvements to the actors library.
2013-02-16
2013-02-11
2013-02-09
2013-02-07
Let's Code Jumi #216: Demuxing Denormalizer (Part 1)
Extracting from TextUI
a bunch of reusable classes for processing suite results.
2013-02-03
2013-02-02
Let's Code Jumi #214: Misc Refactoring (Part 1)
Some small refactorings. A nice feature in IntelliJ IDEA is "Analyze | Run Inspection by Name" which lets you apply a quickfix with one command for all found problems in the whole project - in this case adding missing @Override
annotations.
2013-01-25
2013-01-22
2013-01-15
Let's Code Jumi #211: Redundant Parameters (Part 1)
With the onRunStarted
event and RunId
parameters in place, some of SuiteListener
's other parameters can be deduced from the RunId
, so they can be removed as redundant.
2013-01-14
Let's Code Jumi #210: Isolated Tests
When I rewrote TestClassRunnerTest
and SuiteRunnerTest
in specification style, I left behind tests which were not isolated - they were checking more things than just the one thing they were interested in. I figured out a way to write them better.