Daniel J. R. May

Hello. Nice of you to drop by!

Development

You can use the following paragraph to easily see the number of characters per line. Anything from 45 to 75 characters is widely regarded as a satisfactory length of a line in single-column prose; a 66 character line is regarded as ideal. For multiple column work a better range is 40 to 50 characters per line.

1 3 5 7 9 12 15 18 21 24 27 30 33 36 39 42 45 48 51 54 57 60 63 66 69 72 75 78 81 84 87 90 93 96 99 103 107

About me

I’m a software developer, TV producer, audiophile and committed tea drinker. I have worked across a wonderfully diverse range of things, from particle physics and mathematical e‑learning sytems to running my own television production company.

“I’m a great fan of science, you know.”

— Slartibartfast.

Projects

The Specials

Sampled data duration logo.

Back in 2009, my wife Katy and I started making “The Specials”, an observational documentary series following Sam, Hilly, Lucy, Lewis & Megan — 5 friends with learning disabilities who share a house in Brighton. We beavered away: filming on location, turning our spare bedroom into a broadcast standard post-production suite, and developing a bespoke Drupal-based website. When we launched the first season online we were delighted to find that people loved the show and it won quite a few international prizes, including 2 Webby Awards for Best Reality.

“The jury unanimously decided to reward this daring, accomplished, touching and funny work.”

“Le jury a unanimement décidé de récompenser cette oeuvre audacieuse, aboutie, touchante et drôle.”

The show caught the eye of Carolyn Strauss & D. B. Weiss, the creators of “Game of Thrones”, who in turn brought it to the attention of Oprah Winfrey. All three became our Executive Producers during the making of Season 2. Both seasons were subsequently broadcast in USA on the Oprah Winfrey Network. You can watch “The Specials” online along with loads of extras.

“It’s more than a TV show, it’s a voice for unrepresented young people.”

Viewport Navigation

Viewport navigation logo

Viewport Navigation is a handy JavaScript library which enhances webpages with a navigation menu and slideshow presentation functionality. You can see it in action on this page!

I first started writing it to just help visualise where you are in a long web page — its all to easy to get lost in a long technical document with lots of subsections. However, it has grown more features as time has gone on, including:

  • Automatic generation of the navigation menu.
  • Various display modes like slideshow and fullscreen.
  • Keyboard shortcut controls.
  • Dark and light themes.
  • Responsive theming.

It is available as a npm package so Node.js users can install it with:

npm install viewport-navigation

If Fedora is your chosen Linux distribution then you then you can get it via a Copr repository, so you can simply install with:

dnf copr enable danieljrmay/viewport-navigation dnf install viewport-navigation

You can find out more from the viewport navigation website, and get the source code from the GitLab repository.

Security.txt

Security.txt module logo

I have been using the Drupal CMS since version 4. In that time it has seen its fair share of security vulnerabilities — a problem far from unique to Drupal. How to write robust and secure software is, of course, one of the great wicked problems of our time. Another somewhat easier, but still surprisingly difficult issue, is how do you report problems when you find them? This is where the security.txt standard comes in. Currently an IETF draft RFC the standard provides a canonical way to document your website or web application’s security contact details and policy. This gives users and researchers a proper channel to securely disclose any risks or vulnerabilities they may have discovered.

The standard defines two paths which your website or application should serve:

/.well-known/security.txt
contains the site’s contact and public key encryption details. It can also contain optional fields such as links to a disclosure policy, an acknowledgements page, or even a security-related job hiring page!
/.well-known/security.txt.sig
contains a digital signature of the /.well-known/security.txt file so that its integrity and authenticity may be verified.

I have written a module for Drupal (versions 7 & 8/9), also called Security.txt, which provides a friendly user interface to configure the content of these paths. This also allows per-site configurations on multi-site Drupal installations. You can find out more, and download the module from the Security.txt page on the Drupal website.

srvrepoctl

srvrepoctl logo

srvrepoctl is a utility for managing software repositories hosted on the local system. Once configured it allows you to easily:

  • Create or update single or multiple repositories.
  • Add and remove packages from single or multiple repositories.
  • Clean a repository by deleting old package versions.
  • Copy packages from upstream, or to downstream repositories.

The configuration of each managed repository is defined in a /etc/srvrepoctl.d/REPO_FAMILY.repo file. The syntax of these files resembles that of a REPO_FAMILY.repo file which represents an RPM repository which can be interacted with via yum or dnf.

You can find out more at the GitLab repository.

PyINILint

pyinilint logo

Lots of software uses an INI‑like syntax for its configuration files.

I was writing some software which made pretty heavy use of INI files & I kept making silly little mistakes in them — putting me into a hack-compile-fix cycle frenzy! Once I’d calmed down, I realised I needed an INI-file linter, and that’s what PyINILint is.

It returns silently with a zero exit code if everything is alright, and non-zero with an error messages otherwise. So you can put it in your Git pre-commit hook scripts, like I sometimes — no sorry, I meant to say “always” — do! 😉

It provides quite a few other nifty features like the inspection of variable interpolation with something like:

pyinilint --serialize myfile.ini

If you are running Fedora you can get PyINILint via a Copr repository. Install it with:

dnf copr enable danieljrmay/pyinilint dnf install pyinilint

You can find out more at the PyINILint GitLab page.

Emacs Flycheck PyINILint Integration

Flycheck INI PyINILint logo

If you use Emacs and you write INI-files then this is for you! You can add PyINILint as a Flycheck checker with my flycheck-ini-pyinilint package. It is available via MELPA too. 😀

You can find out more at the flycheck-ini-pyinilint GitLab page.

XMLSrc

XMLSrc logo

Quite often you might want to display the source code of an XML document or XML fragment within a web browser. XMLSrc allows you to do just that. It is essentially an application of XML — an XML syntax which describes XML source code.

The project contains:

  • An XML Schema which defines the XMLSrc markup language.
  • A CSS file which provides default styling and syntax highlighting for XMLSrc files.

You can find out more at the XMLSrc GitLab page.

DSF

Sampled data duration logo.

A Rust library which allows the inspection and playback of DSF files. These files encapsulate a high-resolution audio format which consists of a lossless 1-bit audio stream in DSD format. This format can be handled nativley by DSD-compatible DACs, without the need to transcode it to the more ususal PCM format.

You can download the source code from the GitLab repository, obtain the crate from crates.io and view the API documentation at docs.rs.

Git Repos

Sampled data duration logo.

The git-repos command line tool allows you to administer multiple unrelated git repositories with a single command. It searches under a specified directory (defaulting to current working directory) for repositories and operates on them each in turn.

You can find out more about it and download the source code from the GitLab repository. You can also install it on an RPM based system via a Copr respository.

Sampled Data Duration

Sampled data duration logo.

Sampled Data Duration is a Rust library for handling durations of temporaily-sampled data, e.g. digital audio.

It provides two structs: ConstantRateDuration and MixedRateDuration. A ConstantRateDuration represents the duration of any data-set which has been sampled at a constant frequency, a prime example might be an audio file sampled at 44.1 kHz. While a MixedRateDuration represents the duration of a collection of data-sets which have different sampling frequencies. A typical example might be a playlist of audio files where some have been sampled at 44.1 kHz, and others at 48 kHz or 96 kHz, etc.

You can perform arithmetic and display both types of duration.

You can download the source code from the GitLab repository, obtain the crate from crates.io and view the API documentation at docs.rs.

Morph CV

Morphcv logo.

Generate a CV in multiple formats from a single XML source file. Output formats include PDF, DOCX, LATEX, RTF and XHTML.

The input morphcv XML format is defined by an XML Schema which can be validated against.

You can find out more about it and download the source code from the GitLab repository. You can also install it on an RPM based system via a Copr respository.

Flycheck Fish

Flycheck fish logo.

If you use Emacs to write your fish shell scripts, then this simple package will help you by flagging syntax errors on the fly as you type.

You can find out more about it and download the source code from the GitLab repository.

XML Tokens

XML Tokens logo

Rust library to parse XML to tokens and serialize them out again.

You can find out more about it and download the source code from the GitLab repository.

XHTML Minimizer

XHTML Minimizer logo

Rust application to minimize the size of XHTML files.

You can find out more about it and download the source code from the GitLab repository.