Reside-IC https://reside-ic.github.io/ Recent content on Reside-IC Hugo en-US Wed, 04 Oct 2023 00:00:00 +0000 RESIDE-IC Web Applications https://reside-ic.github.io/articles/web-apps/ Wed, 04 Oct 2023 00:00:00 +0000 https://reside-ic.github.io/articles/web-apps/ Introduction This page describes some aspects to think about when considering a new RESIDE web application to present research: why a research team might want a web application whether a Shiny app or full web application would better meet their needs the components of a full research web application what we require from research in order to build an interface to it which a new web application can use some different patterns of application we can provide Why have a web application? MPI from R - Part One - The Basics https://reside-ic.github.io/blog/mpi-from-r-part-one-the-basics/ Thu, 29 Jun 2023 00:00:00 +0000 https://reside-ic.github.io/blog/mpi-from-r-part-one-the-basics/ MPI is a standard for allowing a team of processes to solve a problem together. Various implementations of that standard exist; MPICH is perhaps the most well known. Microsoft MPI mimics MPICH on Windows, as does Intel MPI on various platforms. Typically you’d then include these libraries in projects written in C, C++, or Fortran. Furthermore, recent releases of Rtools have included support for Microsoft MPI. My plan is a couple of blogs on how to get this working, some exploration of performance, and an attempt at testing / CI. Symbolic differentiation in a few lines of code https://reside-ic.github.io/blog/symbolic-differentiation-in-a-few-lines-of-code/ Mon, 26 Jun 2023 00:00:00 +0000 https://reside-ic.github.io/blog/symbolic-differentiation-in-a-few-lines-of-code/ We are working on automatic differentiation of odin models, which requires support for differentiating expressions symbolically, in order to write new equations that can be used to numerically propagate derivatives of a model. R already has support for doing this via the D function: D(quote(2 * x^2 * log(sqrt(x))), "x") ## 2 * (2 * x) * log(sqrt(x)) + 2 * x^2 * (0.5 * x^-0.5/sqrt(x)) and the Deriv package provides an extensible interface. Conditionally running Ingest Pipelines with Filebeat, Docker and Elastic https://reside-ic.github.io/blog/conditionally-running-ingest-pipelines-with-filebeat-docker-and-elastic/ Thu, 04 May 2023 00:00:00 +0000 https://reside-ic.github.io/blog/conditionally-running-ingest-pipelines-with-filebeat-docker-and-elastic/ TL;DR - if you want to apply an Ingest Pipeline conditionally in Elastic, consider defining it as a processor in another pipeline and setting its if property. Background We use Filebeat to ship application logs to Elastic from our Docker containers. Since we dockerise anything that moves, we have many types of docker container, including containers for Kotlin and JavaScript web applications, for APIs written in R, and for NGINX web proxies. Frictionless Data Package Validation in R https://reside-ic.github.io/blog/frictionless-data-package-validation-in-r/ Thu, 30 Mar 2023 00:00:00 +0000 https://reside-ic.github.io/blog/frictionless-data-package-validation-in-r/ Our work often involves researcher-written models that we want to make available to non-technical users. To ensure that both the model will run and that it will produce a good fit, validating users’ data and returning actionable error messages is essential. For the UNAIDS Naomi project we collaborate closely with a team that manages data storage for users. They use Frictionless Data Packages for describing the resources that need to be present and validating them. Continuous Delivery with Buildkite https://reside-ic.github.io/blog/continuous-delivery-with-buildkite/ Thu, 20 Oct 2022 00:00:00 +0000 https://reside-ic.github.io/blog/continuous-delivery-with-buildkite/ Introduction Our deployments at RESIDE typically consist of a bash script or a python script using constellation to bring up a set of docker containers each of which contains a separate part of the application. We might have one docker image for the web app, one for the database, one for redis, one for an R backend API, and multiple workers. We use Buildkite as part of our CI (continuous integration) process to build these images and test them. R packages https://reside-ic.github.io/projects/r-packages/ Thu, 03 Mar 2022 00:00:00 +0000 https://reside-ic.github.io/projects/r-packages/ The most commonly used language in the department is R, and so we have written many R packages to support research. These: beers - interpolation and subdivision for demography A small package that implements the Beers ordinary and modified methods, notably used by UNWPP to subdivide 5-year age groups into single years of age, and interpolate 5-year time points down to single years of time. Package webpage cinterpolate - interpolation from C, for R A small utility R package for interpolation (piecewise constant, linear and spline) from C for use within R packages R Markdown Internationalisation https://reside-ic.github.io/blog/r-markdown-internationalisation/ Thu, 08 Jul 2021 00:00:00 +0000 https://reside-ic.github.io/blog/r-markdown-internationalisation/ As part of our work on naomi we’ve been asked to produce reports from R which can be distributed to country teams across Sub-Saharan Africa in English, French and Portuguese. R Markdown has no built in support for translating documents, but there are many options available to make this possible. This post covers 3 possible approaches: code chunks, custom blocks and tabsets each of which has advantages and trade offs around scalability, ease of maintenance and complexity. Orderly 1.3.0 released to CRAN https://reside-ic.github.io/blog/orderly-1.3.0-released-to-cran/ Tue, 22 Jun 2021 00:00:00 +0000 https://reside-ic.github.io/blog/orderly-1.3.0-released-to-cran/ After 18 months of heavy use within VIMC and in the COVID-19 modelling response, we have released orderly 1.3.0 to CRAN. This is a major update with many new features (more than 100 PRs since version 1.0.4 was published in early 2020). Orderly is our reproducible research framework, designed to keep track of multiple versions of reports and allow researchers to automatically audit and roll back their data, or construct workflows around long running tasks. Debugging memory errors with valgrind and gdb https://reside-ic.github.io/blog/debugging-memory-errors-with-valgrind-and-gdb/ Thu, 10 Jun 2021 00:00:00 +0000 https://reside-ic.github.io/blog/debugging-memory-errors-with-valgrind-and-gdb/ Many R packages use C or C++ code to power performance-critical sections of code. These langauges are easy to shoot yourself in the foot with, as seemingly innocuous code may cause crashes (or just junk output) by reading from memory that is uninitialised or out of range. There are a couple of tools for helping diagnose this sort of issue: “valgrind” is great for tracking down is sort of error as it highlights invalid memory accesses “gdb” can be used to step through a program, or inspect the internal state after a crash We’ve already written about debugging R packages with valgrind and gdb separately here. Creating project templates using Cookiecutter https://reside-ic.github.io/blog/creating-project-templates-using-cookiecutter/ Tue, 30 Mar 2021 00:00:00 +0000 https://reside-ic.github.io/blog/creating-project-templates-using-cookiecutter/ Introduction We recently took the opportunity presented by some new projects to build a re-usable web application project template. This post explains our objectives, the implementation, and some reflections on the process. Objectives We develop and/or maintain a number of applications that provide web-based user interfaces to research data and scientific models. They all include a Kotlin backend and are built using Gradle but differ in other implementation details: Some use a database, whereas others don’t need to persist or access data directly The most recent use TypeScript - older ones use vanilla Javascript We mostly use Vue 2, but we have a couple using React We use several server-side HTTP frameworks, reflecting their maturity (and that of Kotlin) when the relevant apps were developed We have standardised on Spring Boot for new apps, but we have also used Spark in the past There are other differences, but this should demonstrate the kind of divergence that we’re aiming to address, primarily based on our learnings about each technology or framework since adopting them. Aggregating logs from services deployed with Docker https://reside-ic.github.io/blog/aggregating-logs-from-services-deployed-with-docker/ Thu, 18 Feb 2021 00:00:00 +0000 https://reside-ic.github.io/blog/aggregating-logs-from-services-deployed-with-docker/ Introduction If you’re managing a number of applications across multiple servers then having easy access to their logs can make discovering and debugging issues much more efficient. Deploying a system to aggregate and visualise this information greatly reduces the need to identify and log into the relevant server(s) directly, and enables more sophisticated analysis such as error tracing across systems (see 5 Good Reasons to Use a Log Server for more). Sheffield/NVIDIA GPU hackathon https://reside-ic.github.io/blog/sheffield/nvidia-gpu-hackathon/ Tue, 25 Aug 2020 00:00:00 +0000 https://reside-ic.github.io/blog/sheffield/nvidia-gpu-hackathon/ Last month we attended (virtually) a GPU hackathon hosted by Sheffield and NVIDIA, in order to learn how to create GPU-capable models to accelerate our simulations. We are working as part of the centre COVID response on models of COVID-19 transmission within the UK. The epidemiologists working on the model are writing stochastic compartmental models where populations are modelled as “Susceptible”, “Exposed”, “Infected”, “Recovered”, etc - movement between these compartments happens stochastically using a set of parameters. A warning about warning() https://reside-ic.github.io/blog/a-warning-about-warning/ Mon, 06 Jul 2020 00:00:00 +0000 https://reside-ic.github.io/blog/a-warning-about-warning/ I believe that warning() should be used very rarely in R - it’s a weird function that is partly logging and partly flow control but doesn’t do a great job at either. Package authors use warning for a range of conditions ranging from informational through to catastrophic and users are left ignoring warnings due to the former or debugging issues a significant distance from the source due to the latter. Shades of meaning: visualising geographical data with colour in a data-driven web application https://reside-ic.github.io/blog/shades-of-meaning-visualising-geographical-data-with-colour-in-a-data-driven-web-application/ Wed, 01 Jul 2020 00:00:00 +0000 https://reside-ic.github.io/blog/shades-of-meaning-visualising-geographical-data-with-colour-in-a-data-driven-web-application/ Colour and maps are two crucial aspects of data visualisation, and putting them together is a classic technique for revealing geographical patterns in data. William Smith's geological map of 1815 If data values are discrete, selecting the colours to use is straightforward - just choose an appropriate colour for each value. For continuous data, a colour scale is required, where any numeric value in the data range can be mapped to a colour, and where the gradations in colour are visually meaningful. 2019-nCoV-SARS/COVID-19 pandemic response https://reside-ic.github.io/projects/covid/ Mon, 01 Jun 2020 00:00:00 +0000 https://reside-ic.github.io/projects/covid/ Our team is providing technical and software support to the ongoing 2019-nCoV-SARS/COVID-19 pandemic. Much of this builds on tools that we have developed over the previous 5 years, with some ongoing development of these tools to track the research needs: orderly and OrderlyWeb, our reproducible reporting framework developed for the Vaccine Impact Modelling Consortium, is being used to coordinate research results amongst our (now distributed) team of researchers in a reproducible and traceable way. We're hiring: Full-stack web developer https://reside-ic.github.io/blog/hiring-2020-web-developer/ Mon, 06 Apr 2020 11:50:00 +0100 https://reside-ic.github.io/blog/hiring-2020-web-developer/ We are hiring! While many people of the department and some of the RSE group are focussed on COVID-19 at the moment, research and public health action on malaria, HIV, and other diseases continues in the department and we’re looking for someone to help us develop web applications that translate research into public health outcomes. Just because one pandemic is raging does not decrease the impact of other diseases - in fact it’s more important than ever in this current crisis that these programmes can continue. Gotta catch 'em all https://reside-ic.github.io/blog/gotta-catch-em-all/ Mon, 30 Mar 2020 00:00:00 +0000 https://reside-ic.github.io/blog/gotta-catch-em-all/ Great packages have great test suites. Packages with C++ are not exceptions. You might be surprised to find how easy it is to add C++ unittests to your package. This post will focus on testthat’s Catch integration. There are plenty of C++ testing frameworks, each with their own pros and cons. The benefit of this approach is the really low setup cost and no dependency management. Set up The first step is to add some boilerplate to your package. cyphr 1.1.0 https://reside-ic.github.io/blog/cyphr-1.1.0/ Tue, 10 Mar 2020 00:00:00 +0000 https://reside-ic.github.io/blog/cyphr-1.1.0/ We have released a new version of our cyphr package, which makes data analysis workflows with R much easier. The aim of the package is to make encrypted workflows as easy as: d <- cyphr::decrypt(read.csv("secret-input.csv"), key) ... cyphr::encrypt(write.csv(processed, "secret-output.csv"), key) using modern encryption technologies and taking care of most of the details so that data is not inadvertently leaked. This new version has lots of small features which improve the behaviour of its collaborative data process Front-end Javascript Frameworks - A Beginner's Guide https://reside-ic.github.io/blog/front-end-javascript-frameworks-a-beginners-guide/ Thu, 27 Feb 2020 00:00:00 +0000 https://reside-ic.github.io/blog/front-end-javascript-frameworks-a-beginners-guide/ We’ve put together a little resource for RSEs (or anyone else!) who are writing browser based apps and want to be using the latest Javascript web technologies, but aren’t sure where to start. The full poster was presented at RSLondonSouthEast on 6th February. Why use a framework? This StackOverflow blog is an excellent overview of the advantages and disadvantages of using a framework: Is it time for a front end framework? RSlondonSE 2020 https://reside-ic.github.io/blog/rslondonse-2020/ Tue, 11 Feb 2020 00:00:00 +0000 https://reside-ic.github.io/blog/rslondonse-2020/ Last Thursday, almost all of RESIDE went to RSLondonSE, a small and friendly one-day meeting of RSEs. We presented two posters - in the first we outline the basic idea behind three common JavaScript frameworks (Angular, React and Vue.js) and reasons for choosing one over another. We will rework this poster as a more detailed blog post or article and also as a standalone seminar later this year. In the other poster, we present the ideas behind our Naomi project, where we developed a pattern for exposing research software “as a service” using HTTP APIs and a modern web front end (written in Vue. Naomi https://reside-ic.github.io/projects/naomi/ Mon, 03 Feb 2020 00:00:00 +0000 https://reside-ic.github.io/projects/naomi/ https://naomi.unaids.org A web interface for a model estimating various HIV epidemic indicators at a regional level. The application is used by teams of health officials from sub-Saharan African countries to inform HIV programme targets. The tool was rolled out during a series of UNAIDS-led workshops in Johannesburg and Abidjan from December 2019 - January 2020. The model produces district-level estimates of people living with HIV, coverage of and unmet need for antiretroviral treatment, and new HIV infections. Handling long arrays performantly in Vue.js https://reside-ic.github.io/blog/handling-long-arrays-performantly-in-vue.js/ Thu, 23 Jan 2020 00:00:00 +0000 https://reside-ic.github.io/blog/handling-long-arrays-performantly-in-vue.js/ TL;DR Use Object.freeze on large objects that don’t have to be reactive. If you want to know a bit more about why this works and how big a performance gain it is, read on. Context Reactive JavaScript frameworks like Vue.js are amazing for developing Single Page Apps like the one in our project Naomi. Everything is connected as if by magic - when data changes, the UI updates. But that magic has overheads associated with it that need to be understood to optimise for performance where large-ish datasets are being handled. Debugging and Fixing CRAN's 'Additional Checks' errors https://reside-ic.github.io/blog/debugging-and-fixing-crans-additional-checks-errors/ Fri, 17 Jan 2020 00:00:00 +0000 https://reside-ic.github.io/blog/debugging-and-fixing-crans-additional-checks-errors/ R packages that are published on CRAN are tested every night on a variety of platforms and on the development version of R to ensure that they continue to work. In addition, packages that contain compiled code (C, C++ or Fortran) are put through a raft of additional checks to ensure that the compiled code will not cause R to crash. Once an issue is found, the package maintainer gets an email and usually a fairly short window to fix the package before it is removed from CRAN. My most used keyboard shortcuts https://reside-ic.github.io/blog/my-most-used-keyboard-shortcuts/ Thu, 09 Jan 2020 00:00:00 +0000 https://reside-ic.github.io/blog/my-most-used-keyboard-shortcuts/ Anyone who uses a computer for a significant amount of time each day should spend some time learning keyboard shortcuts - they can save you so much time! When I started working as a developer, I learnt keyboard shortcuts through pair programming, asking more experienced programmers what their favourite shortcuts were, and just reading documentation for the IDE (Intelligent Development Editor) I was using (VisualStudio with Resharper at the time, now IntelliJ. A custom directive for translations in Vue.js https://reside-ic.github.io/blog/a-custom-directive-for-translations-in-vue.js/ Thu, 19 Dec 2019 00:00:00 +0000 https://reside-ic.github.io/blog/a-custom-directive-for-translations-in-vue.js/ We’ve spent the last few months developing Naomi - a web app for interfacing with an HIV model developed by researchers at GIDA in association with UNAIDS. To support the West African countries who are the users of Naomi we are providing two language modes - French and English. The front-end of the app is written in Vue.js and makes use of Vuex, a flux library for Vue. There are two ways we could have implemented translations in Vue - with components or directives. Experiments in transforming Excel into R https://reside-ic.github.io/blog/experiments-in-transforming-excel-into-r/ Tue, 19 Nov 2019 00:00:00 +0000 https://reside-ic.github.io/blog/experiments-in-transforming-excel-into-r/ Last week was the Health Economics in R Hackathon, bringing together health economists, epidemiologists and research software engineers. We learned that complex spreadsheet models are common in health economics, and that the users of these models feel constrained by what they can achieve with them - having constructed a decision tree model in Excel, the analyst might want to carry out a sensitivity analysis, varying the models’ parameters to see how the model outcomes vary. orderly 1.0.1 released to CRAN https://reside-ic.github.io/blog/orderly-1.0.1-released-to-cran/ Fri, 18 Oct 2019 00:00:00 +0000 https://reside-ic.github.io/blog/orderly-1.0.1-released-to-cran/ We are pleased to announce the first public release of orderly, our reproducible reporting framework, implemented as an R package and now available on CRAN. The orderly package was designed to help with a common pattern in reporting, where a piece of analysis might be run multiple times (over say a number of weeks or months) and where the inputs to the analysis might change. Any piece of analysis has numerous inputs (data & metadata, source code & packages) and changes in any of these might change the results of the analysis. gotchaR - Bumps in the road for the learneR driver. https://reside-ic.github.io/blog/gotchar-bumps-in-the-road-for-the-learner-driver./ Tue, 08 Oct 2019 00:00:00 +0000 https://reside-ic.github.io/blog/gotchar-bumps-in-the-road-for-the-learner-driver./ I am about 3 years into the journey of learning R. There is a lot to get used to, when my previous landmarks have been languages based around Java, C, Pascal, Basic and some dabblings with assemblers of various breeds. Mostly, my adjustment has been about doing things the way R likes; turning loop-ish code into vector-ish code, using the right base functions properly and thinking about data in columns for a start. All carrot, no stick - virtuous circles and useful tools https://reside-ic.github.io/blog/all-carrot-no-stick-virtuous-circles-and-useful-tools/ Fri, 27 Sep 2019 00:00:00 +0000 https://reside-ic.github.io/blog/all-carrot-no-stick-virtuous-circles-and-useful-tools/ A vicious circle of software use might go something like this: A user employs a suite of generic software tools, together with their own domain knowledge and sense of good practice, to design their own workflow to get a task done. This workflow starts off with the best of intentions, but really only exists in the user’s head. Consequently, as time goes on, as deadlines threaten, corners are cut. Next, the cutting of those corners becomes habitual, and the workflow degenerates. Deferring errors with R https://reside-ic.github.io/blog/deferring-errors-with-r/ Fri, 09 Aug 2019 00:00:00 +0000 https://reside-ic.github.io/blog/deferring-errors-with-r/ How do you run a block of code and collect up all the errors in order to report them back in a batch? This is the sort of thing that might turn up in a validation exercise where we want to check a number of properties of the provided data and then report back in one go all the errors so that the user can fix multiple problems at each upload attempt. Querying for foreign key constraints https://reside-ic.github.io/blog/querying-for-foreign-key-constraints/ Fri, 09 Aug 2019 00:00:00 +0000 https://reside-ic.github.io/blog/querying-for-foreign-key-constraints/ Over the past few months we’ve been developing a tool to assist with database import from R. As part of that we want to automate some of the import steps to both reduce the development work needed for each import and to make code review easier. We want to be able to take a list of data frames in R and append those to the relevant tables in the database automatically. We're hiring: R/C++/Malaria Developer https://reside-ic.github.io/blog/hiring-2019-malaria-developer/ Wed, 03 Jul 2019 07:57:16 +0100 https://reside-ic.github.io/blog/hiring-2019-malaria-developer/ We are hiring! We’re looking for a developer to join our team to work with the malaria modelling research group on developing simulation models that will be used to investigate the impact of interventions to prevent the spread of malaria. No prior experience with malaria or epidemiology is needed as you’ll be working closely with a friendly team of computational researchers. You’ll work with the rest of our RSE team who will help you gather requirements from the researchers, understand the existing code, and review your code. jsonvalidate 1.1.0 https://reside-ic.github.io/blog/jsonvalidate-1.1.0/ Tue, 25 Jun 2019 07:38:50 +0100 https://reside-ic.github.io/blog/jsonvalidate-1.1.0/ JSON is useful as a data-interchange format, due to the massive popularity of javascript. Basically every language supports reading and writing JSON now, so it makes a nice lowest common denominator. When generating JSON from an application, it is useful to be able to describe how the data is structured - so if we return output like { "id": 1, "name": "A green door", "price": 12.50, "tags": ["home", "green"] } We might describe it in words like: jQuery TreeTables 1.1.1 https://reside-ic.github.io/blog/jquery-treetables-1.1.1/ Tue, 11 Jun 2019 00:00:00 +0000 https://reside-ic.github.io/blog/jquery-treetables-1.1.1/ We just released a new npm package TreeTables for displaying tree data when using jQuery DataTables. DataTables is a powerful and extremely well established plugin for displaying tabular data, but has no native support for tree (nested) data. Examples of tree data include family trees, phylogenetic trees, and organisational hierarchies. The TreeTables plugin adds that support with an interface that is almost identical to that of DataTables. Features include: dde 1.0.0 https://reside-ic.github.io/blog/dde-1.0.0/ Mon, 20 May 2019 00:00:00 +0000 https://reside-ic.github.io/blog/dde-1.0.0/ Last week we released the first public version of dde. This package implements a method for solving delay differential equations, which we use with odin to model disease dynamics. With ordinary differential equations, you express the system of equations as dy/dt = f(y(t), t); the rate of change of the system depends on the current state of the system and the current time, but with delay differential equations dy/dt also depends on y(t - τ), where τ is a length of time back into the past. vaultr 1.0.2 https://reside-ic.github.io/blog/vaultr-1.0.2/ Thu, 16 May 2019 00:00:00 +0000 https://reside-ic.github.io/blog/vaultr-1.0.2/ We are pleased to announce the first public release of vaultr, our R client for HashiCorp’s “vault”, a system for storing secrets and sensitive data and enabling these secrets to be used in applications. Vault (the server) is a little like a password manager (e.g., LastPass or Bitwarden) but designed for use within applications, rather than for storing personal passwords. With vault, you can have a central source of secrets and sensitive data (ssh keys, database passwords, ssl certificates) that can be used when deploying or using applications. Debugging at the edge of reason https://reside-ic.github.io/blog/debugging-at-the-edge-of-reason/ Wed, 01 May 2019 00:00:00 +0000 https://reside-ic.github.io/blog/debugging-at-the-edge-of-reason/ What do you do if this code… printf("Before loop\n"); while ((a>0) && (b>0)) { printf("Inside loop\n"); // Other loop code } if (a>0) printf("a>0\n"); if (b>0) printf("b>0\n"); if ((a>0) && (b>0)) printf("Both a>0 and b>0!"); …produces this output? Before loop a>0 b>0 Both a>0 and b>0! If a and b are both above zero, then why didn’t the while-loop do any iteration; why didn’t we see Inside loop in the output? Integrating YouTrack and GitHub workflows https://reside-ic.github.io/blog/integrating-youtrack-and-github-workflows/ Wed, 24 Apr 2019 00:00:00 +0000 https://reside-ic.github.io/blog/integrating-youtrack-and-github-workflows/ Like most technical teams we use an issue tracker to manage our work. Our tool of choice for this is YouTrack. We also make extensive use of GitHub and to synchronise our workflow across the two platforms we name our git branches with YouTrack ticket ids, so every pull request corresponds to a ticket. This naming convention makes it easier to track work in progress across the two platforms, plus the custom tool we use to deploy our software can use git to look at which branches have been merged in and auto-update the corresponding YouTrack tickets. cinterpolate 1.0.0 https://reside-ic.github.io/blog/cinterpolate-1.0.0/ Mon, 15 Apr 2019 00:00:00 +0000 https://reside-ic.github.io/blog/cinterpolate-1.0.0/ Last week we released the first official version of cinterpolate to available on CRAN. This package provides a minimal set of interpolation methods (piecewise constant, linear and spline) designed to be compatible with R’s builtin approx and spline functions, but but callable from C. It will primarily be of interest to people writing R packages that include C or C++. When writing an R package with C or C++ extensions, you have to forgo many of the the functions that make operating in a high-level easy. odin 0.2.0 https://reside-ic.github.io/blog/odin-0.2.0/ Tue, 09 Apr 2019 00:00:00 +0000 https://reside-ic.github.io/blog/odin-0.2.0/ After a rather long period of gestation, yesterday I merged in a long-running rewrite of odin. This is a major rework of odin which lays the groundwork for future improvements later this year. Odin is our package for working with differential equations at a high level - it includes support for the sort of “structured compartmental models” that we use a lot in the department, compiling these to C for efficient execution. Metrics at Imperial* https://reside-ic.github.io/blog/metrics-at-imperial/ Mon, 08 Apr 2019 00:00:00 +0000 https://reside-ic.github.io/blog/metrics-at-imperial/ What metrics should a software team be recording to measure their performance? Should these metrics have a different focus for RSE teams in general, and ourselves in particular? In previous jobs in a more commercial setting, I had become accustomed to thinking about ‘metrics’ in two broad categories - firstly those defining the performance and health of online systems (number of requests served, click through rate, uptime etc), and secondly those measuring the productivity of the team in making additions and improvements to those systems (story point burndown, number of open bugs, feature leadtime). Pull Request review process https://reside-ic.github.io/articles/pull-requests/ Tue, 05 Mar 2019 14:53:37 -0700 https://reside-ic.github.io/articles/pull-requests/ Our pull request review process is an ongoing work-in-progress. This document outlines the timeline, expectations, general points and ongoing issues. Some of it is particular to how we work (using YouTrack and TeamCity in addition to GitHub) but it may be of use to others. Expectations What the different parties expect to get out of the PR review process Author All authors appreciate feedback on: What have I done wrong, or what could I do better? About https://reside-ic.github.io/about/ Sat, 22 Aug 2015 00:00:00 +0000 https://reside-ic.github.io/about/ Research Software for Infectious Disease Epidemiology - we are a team of 7 research software engineers working within the MRC Centre for Global Infectious Disease Analysis and the Department of Infectious Disease Epidemiology at Imperial College London. ~ The team Anmol Thapar Anmol is a software engineer who loves building clean UI/UX, scalable backends and robust infrastructure. He is all the way from New Zealand and outside of work loves basketball, snowboarding and the gym. Home https://reside-ic.github.io/home/ Mon, 01 Jan 0001 00:00:00 +0000 https://reside-ic.github.io/home/ Research Software for Infectious Disease Epidemiology - we are a team of 7 research software engineers working within the MRC Centre for Global Infectious Disease Analysis and the Department of Infectious Disease Epidemiology at Imperial College London. License https://reside-ic.github.io/license/ Mon, 01 Jan 0001 00:00:00 +0000 https://reside-ic.github.io/license/ You can use this page to put a license on the contents of your blog, like so: The MIT License (MIT) Copyright (c) 2015 Nishanth [email protected] Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the “Software”), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: