Blog

checkglobals: an(other) R-package for static code analysis

Introduction An important aspect of writing an R-script or an R-package is ensuring reproducibility and maintainability of the developed code, not only for others, but also for our future selves. The modern R ecosystem provides various tools and packages to help organize and validate written R code. Some widely used packages include roxygen2 (for function documentation), renv (for dependency management and environment isolation), and testthat, tinytest and Runit for unit testing[1].

Continue reading

Getting started with Crane

As the Common Crane (Grus grus) is migrating back to their breeding area, it’s time to set up your own Crane server. Crane is a new open source product to host data science artifacts: data analysis reports, documentation sites, packages and libraries, you can read the introduction blog post here. This post provides a simple setup to get started with Crane using Docker Compose. First of all, make sure to install Docker and Docker compose.

Continue reading

Crane 1.0.0 released!

Publishing is an integral part of the data analysis process. Whether it’s in the form of code, reports or technical documentation, at some point artifacts need to be shared. More often than not, such artifacts are confidential and their access needs to be properly secured. There exist solutions for at least some types of artifacts, but we needed one simple tool that could help us with all the use cases we encounter in our daily practice, built with modern technology and security standards.

Continue reading

tinytest2JUnit: report your tinytest results in the CI

tinytest2JUnit: report your tinytest results in the CI Introduction “Lightweight is the right weight” is the motto of packages adhering to the tinyverse principle. One of the packages following this principle is the tinytest package, a zero-dependency unit testing framework. It is a nice alternative to the heavy-weight testthat testing framework, which (at the time of writing and including its recursive dependencies) has a dependency footprint of 30 packages!

Continue reading

ShinyProxy 3.1.0

ShinyProxy 3.1.0 Last year we released a major update of ShinyProxy, bringing High Availability, Scaling, App parameters, improved integration with Kubernetes and much more. Today’s release goes even further, bringing Pre-Initialization, Container sharing and even a new container backend. Along with these major features, the release is packed with numerous small improvements. ShinyProxy is a novel, open source platform to deploy Shiny apps for the enterprise or larger organizations. Nevertheless, ShinyProxy is also an excellent choice for deploying a handful of apps in smaller organizations.

Continue reading

ShinyProxy 3.0.0

ShinyProxy 3.0.0 Today we release version 3.0.0 of ShinyProxy, providing improvements on all aspects of using and deploying ShinyProxy. ShinyProxy is a novel, open source platform to deploy Shiny apps for the enterprise or larger organizations. Nevertheless, ShinyProxy is also an excellent choice for deploying a handful of apps in smaller organizations. While ShinyProxy is generally used to host Shiny applications, it has always been designed with the idea to host any application that can be packaged into a Docker container.

Continue reading

Spreadsheets and robust backends: a love story?

The source of every data science project is a dataset or even multiple. In general, scientists prefer to share data using a spreadsheet. This allows to quickly explore, enter and modify data. Software developers on the other hand, prefer to build around properly designed schemes and backends that ensure data integrity. Whoever wins this battle decides where the data is stored: in a type of spreadsheet file or in some kind of database.

Continue reading

Complete monitoring stack for ShinyProxy on Kubernetes

Introduction For some time now, ShinyProxy is able to export metrics using Prometheus. After releasing this feature, we provided a dashboard for Grafana to visualize these metrics. Although this provides a good basis to build a monitoring setup around ShinyProxy, it does not provide insights in logs or resource usage of individual apps. To fill this gap, we are publishing a GitHub repository containing a comprehensive monitoring set up for ShinyProxy on Kubernetes.

Continue reading

New nonlinear least squares solvers in R with {gslnls}

Introduction Solving a nonlinear least squares problem consists of minimizing a least squares objective function made up of residuals $g_1(\boldsymbol{\theta}), \ldots, g_n(\boldsymbol{\theta})$ that are nonlinear functions of the parameters of interest $\boldsymbol{\theta} = (\theta_1,\ldots, \theta_p)'$: $$ \boldsymbol{\theta}^* \ = \ \arg \min_{\boldsymbol{\theta}} \frac{1}{2} \Vert g(\boldsymbol{\theta}) \Vert^2 $$ In the context of regression, this problem is usually formulated as: $$ \begin{align} \boldsymbol{\theta}^* & \ = \ \arg \min_{\boldsymbol{\theta}} \frac{1}{2} \Vert \boldsymbol{y} - f(\boldsymbol{\theta}) \Vert^2 \\ & \ = \ \arg \min_{\boldsymbol{\theta}} \frac{1}{2} \sum_{i = 1}^n (y_i - f_i(\boldsymbol{\theta}))^2 \end{align} $$

Continue reading

Rotating log files in Rust, and reassembling them for inspection

Context Open Analytics is working on a huge data processing pipeline in the context of high-content imaging. The latest work to this end is a new product that will work in conjunction with Phaedra as part of the pipeline which now covers much more ground than before. The entire backend of this new component is written in Rust and consists of several web servers. Proper log rotation has been a focus as of late, since it is critical to be able to keep on top of things in this massive processing pipeline.

Continue reading