Dear All,
I am very happy to announce the first beta version of our new package, called DrWatson:
https://juliadynamics.github.io/DrWatson.jl/dev/
Motivation
DrWatson is the result of some scientists being “fed up” with the hardship of handling scientific projects. We want to stop repeating the same processes for every project, stop screaming our lungs out in frustration, and make handling our scientific projects easier. Things like:
- Urgh, I moved my folders and now my load commands don’t work anymore!
- Do I have to produce a dataframe of my finished simulations AGAIN?!
- PFfffff I am tired of typing
savename = "w=$w_f=$f_x=$x.jld2
, can’t I do it automatically?
are what we want to battle.
Why this can really help you
I believe that DrWatson is a package that can truly make your life easier as a scientist, by removing the annoying parts of managing a project.
In the Description page of the documentation of DrWatson you find the core principles of the package:
- Non-Invasive.
- Simple.
- Consistent.
- Allows increments.
- Reproducible.
- Modular.
- Scientific.
Want I want to really focus on are the first two points. Many other similar approaches exist, that aim to support scientific project management (see the “Inspirations” section of our documentation) but what I have come to notice is that they suffer from a common problem: they just aren’t simple enough. You have to do too much work to use them!
DrWatson takes a radically new approach: instead of complicated pipelines that you have to follow to benefit, DrWatson only asks you to just use a couple of functions.
Example 1: savename
As a first example, lets look the very common situation of using variable values to create file names. E.g. you have the case of running a simulation with variables a=3, b=5, model="water"
. Typically, when saving the simulation data resulting from your script you would consider writing a name prefix_a=$a_b=$b_model=$model
. At some point you might be frustrated with having to do this all the time, and you might write down a function that takes in a dictionary and produces such a string.
This is what the function savename(c)
from DrWatson does. It transforms any key-based Julia container c
(Dict, NamedTuple, Composite Type) into a string like the one above. And besides of doing what you want, it also is deterministic and allows for customization.
(of course, you don’t have to use the customization aspects, this is where the Modular aspect of DrWatson shines)
Example 2: tagsave
Wouldn’t it be awesome if every saved datafile contains a record of the Git commit of the project, when the file was saved? Wouldn’t it be awesome if achieving this required no additional effort?
If in your code you replace the function save(file, data)
with tagsave(file, data)
then the saved file will have one additional field called :commit
, which will contain the commit ID of your project when you saved the file. And without writing a single extra line of code, all of your saved data tell you the commit they come from!
Of course, this requires your scientific project to be a Git repository as well. Well, no worries, since DrWatson also offers a simple template for a scientific project which is also a Git repository.
Beta Invitation
We actively looking for beta testers and contributors!
Please, consider using DrWatson. Consider helping us in the development and please report problems, and give us ideas and feedback by using the GitHub page of the repository.
DrWatson is part of JuliaDynamics, so you can also chat in the channel #dynamics-bridged
of the Julia Slack.
logo developed by @cormullion (of course)