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.”
Projects
The Specials
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 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:
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-navigationYou can find out more from the viewport navigation website, and get the source code from the GitLab repository.
Security.txt
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/
file so that its integrity and authenticity may be verified.security.txt
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 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/
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
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.iniIf you are running Fedora you can get PyINILint via a Copr repository. Install it with:
dnf copr enable danieljrmay/pyinilint dnf install pyinilintYou can find out more at the PyINILint GitLab page.
Emacs Flycheck PyINILint Integration
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
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
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
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 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
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
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
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
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.