projects

Project Status: Moved to http://github.com/matt-dray/personal-site –
The project has been moved to a new location, and the version at that
location should be considered
authoritative.

⚠️ This content is out of date and has moved to https://github.com/matt-dray/personal-site (1 Jan 2024).

Click to see old content 👨‍💻 A list of [public GitHub-based projects](https://github.com/matt-dray?tab=repositories) that I, [Matt Dray](https://www.matt-dray.com), have worked on for fun, mostly. Most things are written about in my blog: [rostrum.blog](https://www.rostrum.blog/). - 📦 [R packages](#-r-packages) - ✨ [R Shiny apps](#-r-shiny-apps) - 🕸 [Websites](#-websites) - 📽 [Presentations](#-presentations) - ➕ [Other](#-other) ## 📦 R Packages These are all hosted on GitHub; none are on CRAN. Install with `remotes::install_github()`. The majority are concepts with no guarantees. The source for the hex logos is [my matt-dray/stickers repo](https://github.com/matt-dray/stickers). | \# | Name | Hex | What | Links | |:---:|:-------------------|:-----------------------------------------------------------------------------------------------------------:|:--------------------------------------------------------------------------------------------------------------------------------------|:----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| | 1 | {a11ytables} | | Generate best-practice spreadsheets to support statistics publications in the public sector | [Source](https://github.com/co-analysis/a11ytables)
[Site](https://co-analysis.github.io/a11ytables/)
[Blogs](https://www.rostrum.blog/index.html#category=a11ytables) | | 1 | {ActionSquirrel} | | Play as a squirrel collecting nuts and avoiding an owl in an audiovisual tile-based game in your R console, thanks to {R6} | [Source](https://github.com/matt-dray/ActionSquirrel)
[Blog](https://www.rostrum.blog/2021/10/03/squirrel/) | | 2 | {altcheckr} | | Accessibility checker: scrape websites and assess image alt-text | [Source](https://github.com/matt-dray/altcheckr)
[Site](https://matt-dray.github.io/altcheckr/)
[Blog](https://www.rostrum.blog/2019/12/08/altcheckr/) | | 3 | {backtick} | | RStudio Addin to insert backtick constructions (maybe your keyboard doesn’t have a backtick key, or it’s mapped to do something else) | [Source](https://github.com/matt-dray/backtick)
[Blog](https://www.rostrum.blog/2022/02/19/backtick/) | | 4 | {badgr} | | Generate a customised README metadata badge from shields.io | [Source](https://github.com/matt-dray/badgr)
[Site](https://matt-dray.github.io/badgr/)
[Blog](https://www.rostrum.blog/2020/05/08/readme-badge/) | | 5 | {bd2q} | | Convert a {blogdown} blog structure to a Quarto blog structure | [Source](https://github.com/matt-dray/bd2q)
[Blog](https://www.rostrum.blog/posts/2023-05-07-bd2q/) | | 6 | {blogsnip} | | RStudio Addin for HTML and markdown constructions to make it easier for me to write {blogdown} content | [Source](https://github.com/matt-dray/blogsnip)
[Site](https://matt-dray.github.io/blogsnip/)
[Blog](https://www.rostrum.blog/2019/10/22/blogsnip/) | | 7 | {cabinet} | | Demo to teach package generation with {usethis} | [Source](https://github.com/matt-dray/cabinet)
[Site](https://matt-dray.github.io/cabinet/)
[Blog](https://www.rostrum.blog/2019/11/01/usethis/)
[Slides](https://matt-dray.github.io/r-pkg-slides/#1) | | 8 | {coloratio} | | Check the contrast ratio of two colours for accessibility | [Source](https://github.com/matt-dray/coloratio)
[Blog](https://www.rostrum.blog/2020/12/30/coloratio/) | | 9 | {cran} | | An extension for the {units} package so you can load an antiquated unit of uncleaned herrings (a ‘cran’) | [Source](https://github.com/matt-dray/cran)
[Site](https://matt-dray.github.io/cran/)
[Blog](https://www.rostrum.blog/2020/09/12/herring-units/) | | 10 | {choosethis} | | Demos for offpiste use of clickable console links, thanks to {cli} | [Source](https://github.com/matt-dray/choosethis)
[Blog](https://www.rostrum.blog/posts/2023-09-17-choosethis/) | | 11 | {dehex} | | Learn how to read a colour hex code | [Source](https://github.com/matt-dray/dehex)
[Blogs](https://www.rostrum.blog/tags/dehex/) | | 12 | {dialga} | | Convert R expressions to cron strings, convert cron strings to English | [Source](https://github.com/matt-dray/dialga)
[Blog](https://www.rostrum.blog/2021/04/10/dialga/) | | 13 | {dray} | | A small handful of miscellaneous personal functions | [Source](https://github.com/matt-dray/dray)
[Blog](https://www.rostrum.blog/2018/05/25/cloud-pie/) | | 14 | {emojiscape} | | Generate a small emoji scene in your console | [Source](https://github.com/matt-dray/emojiscape)
[Blog](https://www.rostrum.blog/2021/06/26/emojiscape/) | | 15 | {gdstheme} | | {xaringan} theme and template for the Government Digital Service, in package form | [Source](https://github.com/matt-dray/gdstheme)
[Site](https://matt-dray.github.io/gdstheme/)
[Blog](https://www.rostrum.blog/2019/05/24/xaringan-template/)
[Slides](https://matt-dray.github.io/gdstheme/#1) | | 16 | {ghdump} | | Download/clone all GitHub repos for a given user | [Source](https://github.com/matt-dray/ghdump)
[Site](https://www.github.com/matt-dray/ghdump/)
[Blog](https://www.rostrum.blog/2020/06/14/ghdump/) | | 17 | {gpx3d} | | Extract geospatial data from a GPX file and plot it as an interactive 3D object | [Source](https://github.com/matt-dray/gpx3d)
[Blog](https://www.rostrum.blog/2021/12/30/gpx3d/) | | 18 | {hokey} | | Three simple games in the terminal to demo the {keypress} package | [Source](https://github.com/matt-dray/hokey)
[Blog](https://www.rostrum.blog/2022/01/19/keypress/) | | 19 | {hiscore} | | A demonstration of how you can create a ‘save’ state for an R game (with a coinflip demo) | [Source](https://github.com/matt-dray/hiscore)
[Blog](https://www.rostrum.blog/2023/07/15/hiscore/) | | 20 | {kevinbacran} | | Calculate graph distances for CRAN authors, á la ‘the six degrees of Kevin Bacon’ | [Source](https://github.com/matt-dray/kevinbacran)
[Site](https://matt-dray.github.io/kevinbacran/)
[Blog](https://www.rostrum.blog/2019/02/27/hadley-number/)
[App](https://mattdray.shinyapps.io/hadley-number/) | | 21 | {linkrot} | | Scrape a webpage to detect ‘link rot’ (when links to a web page break because it’s been taken down or moved) | [Source](https://github.com/matt-dray/linkrot)
[Blog](https://www.rostrum.blog/2021/07/10/linkrot/) | | 22 | {monetize} | | Inspiration for monetising your R package, given a trick with `R_user_dir()` | [Source](https://github.com/matt-dray/monetize)
[Blog](https://www.rostrum.blog/posts/2023-08-01-monetize/) | | 23 | {oystr} | | Work with data from Transport for London’s Oyster card payment system | [Source](https://github.com/matt-dray/oystr)
[Site](https://matt-dray.github.io/oystr/)
[Blog](https://www.rostrum.blog/2019/12/23/oystr/) | | 24 | {pico} | | A package top help create R packages that have the minimum required content | [Source](https://github.com/matt-dray/pico)
[Blog](https://www.rostrum.blog/2021/04/18/pico-pkg/) | | 25 | {pixeltrix} | | Click ‘pixels’ in an interactive plot window and get your final image as a matrix (e.g. for pixel art, sprites) | [Source](https://github.com/matt-dray/pixeltrix)
[Blog](https://www.rostrum.blog/2022/09/24/pixeltrix/) | | 26 | {plunderplot} | | Extract datapoints from PNG images of plots | [Source](https://github.com/matt-dray/plunderplot) | | 27 | {potato} | | Play in your R console an interactive version of ‘Potato’, a one-page role-playing game (RPG) by Oliver Darkshire | [Source](https://github.com/matt-dray/potato)
[Blog](https://www.rostrum.blog/2022/09/13/potato/) | | 28 | {quartostamp} | | RStudio Addin to insert divs, classes, etc, to Quarto documents | [Source](https://github.com/matt-dray/quartostamp)
[Site](https://matt-dray.github.io/quartostamp/) | | 29 | {r2eng} | | Translate R expressions to English sentences | [Source](https://github.com/matt-dray/r2eng)
[Site](https://www.github.com/matt-dray/r2eng/)
[Blog](https://www.rostrum.blog/2020/11/14/hello-r2eng/)
[Binder](https://github.com/matt-dray/try-r2eng) | | 30 | {r.oguelike} | | A dungeon-crawling ASCII roguelike game for the R console | [Source](https://github.com/matt-dray/r.oguelike)
[Site](https://matt-dray.github.io/r.oguelike/)
[Blogs](https://www.rostrum.blog/index.html#category=r.oguelike)
[Binder](https://mybinder.org/v2/gh/matt-dray/play-r.oguelike/main?urlpath=rstudio) | | 31 | {remorse} | | Text to Morse Code to audio | [Source](https://github.com/matt-dray/remorse)
[Blog](https://www.rostrum.blog/2023/01/06/remorse/) | | 32 | {safar6} | | Playable in-console text-based simulation of the Safari Zone from Pokémon Blue using {R6} OOP | [Source](https://github.com/matt-dray/safar6)
[Blog](https://www.rostrum.blog/2021/01/04/safar6/) | | 33 | {soccercolleagues} | | Find footballers’ team mates and team-mates-in-common | [Source](https://github.com/matt-dray/soccercolleagues)
[Blog](https://www.rostrum.blog/2022/02/04/soccercolleagues/) | | 34 | {snorkel} | | RStudio Addin to insert roxygen2 formatting into function documentation | [Source](https://github.com/matt-dray/snorkel)
[Site](https://matt-dray.github.io/snorkel/)
[Blog](https://www.rostrum.blog/2022/08/11/quartostamp-snorkel/) | | 35 | {skyphone} | | Get contributions data from the GitHub Skyline API (deprecated) and visualise/sonify it | [Source](https://github.com/matt-dray/skyphone/)
[Blog](https://www.rostrum.blog/2021/02/21/skyphone/) | | 36 | {tide} | | Edit a data.frame with R’s inbuilt spreadsheet-like data editor and get some code to reproduce the manual changes you made | [Source](https://github.com/matt-dray/tide/)
[Blog](https://www.rostrum.blog/2022/04/27/tide/) | | 37 | {tamRgo} | | Tamagotchi-like digital pets in the R console that persist between sessions | [Source](https://github.com/matt-dray/tamRgo)
[Site](https://matt-dray.github.io/tamRgo/)
[Blog](https://www.rostrum.blog/2022/11/13/tamrgo/) | | 38 | {tidyquiz} | | A {learnr}/{shiny} hack to generate random quiz questions about {tidyverse} functions | [Source](https://github.com/matt-dray/tidyquiz)
[Blog](https://www.rostrum.blog/2019/03/18/tidyverse-quiz/) | | 39 | {trapinch} | | Wrapper for [the PokéAPI API](https://pokeapi.co/) using [{httr2}](https://httr2.r-lib.org/) | [Source](https://github.com/matt-dray/trapinch)
[Blog](https://www.rostrum.blog/2023/02/02/trapinch/) | | 40 | {wordup} | | Work-in-progress concept for converting a Word (docx) file to Govspeak Markdown, for publishing on GOV.UK | [Source](https://github.com/matt-dray/wordup)
[Blogs](https://www.rostrum.blog/index.html#category=wordup) | ## ✨ R Shiny apps Apps hosted [on shinyapps.io](https://www.shinyapps.io/). | Name | What | Links | |:-----------------------------------|:--------------------------------------------------------------------------------------------------|:--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| | Animal Crossing Popularity Contest | Swipe left or right on villagers from Nintendo’s Animal Crossing New Horizons, Tinder-style | [App](https://mattdray.shinyapps.io/acnh-swipe/)
[Source](https://github.com/matt-dray/acnh-swipe)
[Blog](https://www.rostrum.blog/posts/2022-01-07-acnh-swipe-results/) | | LeWitt ReMix | An app to remix ‘art’ in the style of Sol LeWitt for \#RecreationThursday | [App](https://mattdray.shinyapps.io/lewitt-remix-app/)
[Source](https://github.com/matt-dray/viz-recreation/tree/main/2021-07-01_rt_lewitt/lewitt-remix-app)
[Blog](https://www.rostrum.blog/2021/07/05/recreate-lewitt/) | | Randoflag | Small app to provide a new-browser-tab flag challenge | [App](https://mattdray.shinyapps.io/randoflag/)
[Source](https://github.com/matt-dray/randoflag/)
[Blog](https://www.rostrum.blog/2021/03/02/randoflag/) | | Tidyquiz | A {learnr}/{shiny} hack to generate random quiz questions about {tidyverse} functions | [App](https://mattdray.shinyapps.io/tidyquiz/)
[Source](https://github.com/matt-dray/tidyquiz)
[Blog](https://www.rostrum.blog/2019/03/18/tidyverse-quiz/) | | What’s your Hadley number? | Visual demo of my {kevinbacran} package: find shortest paths to Hadley Wickham by CRAN authorship | [App](https://mattdray.shinyapps.io/hadley-number/)
[Source](https://github.com/matt-dray/hadley-number)
[Blog](https://www.rostrum.blog/2019/02/27/hadley-number/) | [Shinylive](https://posit-dev.github.io/r-shinylive/) apps. | Name | What | Links | |:-------------------|:------------------------------------------------------|:---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| | Govspeakify tables | Convert a pasted table to Govspeak-flavoured Markdown | [App](https://matt-dray.github.io/govspeakify-tables/)
[Source](https://github.com/matt-dray/govspeakify-tables)
[Blog](https://www.rostrum.blog/posts/2023-10-08-govspeakify-tables/) | Apps on GitHub, but not hosted. | Name | What | Links | |:--------------------------------------------------------------|:------------------------------------------------------------------------------------|:-----------------------------------------------------------------------------------------------------------------------------| | Deer-vehicle collisions in Scotland | Explore open data on deer strikes in Scotland, 2000 to 2017 | [Source](https://github.com/matt-dray/scot-deer-collisions)
[Blog](https://www.rostrum.blog/2019/01/18/deer-collisions/) | | How many footballers at World Cup 2018 were younger than you? | Realise it’s too late for you to become a professional footballer | [Source](https://github.com/matt-dray/wc18-age)
[Blog](https://www.rostrum.blog/2018/07/17/world-cup-age-app/) | | Mission Across IOW | Investigate the easiest route to cross the Isle of Wight on foot in a straight line | [Source](https://github.com/matt-dray/mission-across-iow)
[Blog](https://www.rostrum.blog/2021/05/22/mission-across-iow/) | | Read a colour hex code | Learn how to interpret the colour encoded in a hex code with {dehex} | [Source](https://github.com/matt-dray/dehex-challenge)
[Blog](https://www.rostrum.blog/2021/08/10/dehex/) | ## 🕸 Websites Pages written with R Markdown. All source code on GitHub. | Name | Type | What | Served via | Links | |:--------------------------------------------|:--------------------------------------|:-----------------------------------------------------------------------------------|:--------------------------------------------|:----------------------------------------------------------------------------------------------------------------| | [matt-dray.com](https://www.matt-dray.com/) | Personal site made with {postcards} | A single-page launchpad for links to Twitter, GitHub, etc | [Netlify](https://www.netlify.com/) with CI | [Source](https://www.github.com/matt-dray/postcard/)
[Blog](https://www.rostrum.blog/2020/12/08/postcard/) | | [rostrum.blog](https://www.rostrum.blog/) | Blog made with {blogdown} | Fun and learning with R: posting tutorials, tips, data exploration, visualisations | [Netlify](https://www.netlify.com/) with CI | [Source](https://www.github.com/matt-dray/rostrum-blog/)
[About](https://www.rostrum.blog/about) | | [faxcrayon.art](https://www.faxcrayon.art/) | Single page RMarkdown with {bs4cards} | A gallery of recreations/remixes/original art | [GitHub Pages](https://pages.github.com/) | [Source](https://www.github.com/matt-dray/faxcrayon/)
[Blog](https://www.rostrum.blog/2021/07/25/faxcrayon/) | ## 📽 Presentations Selected presentations. Slides made with [the {xaringan} package](https://slides.yihui.org/xaringan/#1) or [Quarto](https://quarto.org/docs/presentations/revealjs/). | Title | Where, when | What | Links | |:------------------------------------------------------------------|:---------------------------------------------------------------------------------------------------------------|:------------------------------------------------------------------------------------------------------------------------------------------------------|:---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| | Base slaps! | NHS-R Conference, Birmingham, October 2023 | Base R is good for stability, minimising dependencies and ‘modern’, actually | [Slides](https://matt-dray.github.io/nhs-r-2023/)
[Source](https://github.com/matt-dray/nhs-r-2023)
[Blog](https://www.rostrum.blog/posts/2023-10-17-nhs-r-2023/) | | Panic! In The Toolshed | Cross-Government Data Science Community Meetup, remote, June 2023 | Public sector workers should prepare to share the tools that they make | [Slides](https://matt-dray.github.io/government-toolshed/)
[Source](https://github.com/matt-dray/government-toolshed)
[Blog](https://www.rostrum.blog/2023/06/13/panic-in-the-toolshed/) | | Fun and Learning. In a Dungeon! | Home Office Data Science Conference, London, March 2023 | Learning to code is more fun when you’re doing something silly? | [Slides](https://matt-dray.github.io/in-a-dungeon/)
[Source](https://github.com/matt-dray/in-a-dungeon)
[Blog](https://www.rostrum.blog/2023/03/15/in-a-dungeon/) | | Create reproducible and accessible spreadsheets with {a11ytables} | EARL 2022 conference, London, Sep 2022; Scottish Government, remote, Nov 2022; NHS-R Webinar, remote, Jan 2023 | Generate best-practice spreadsheets with help from the {a11ytables} R package | [Video 1](https://videos.ctfassets.net/k26sw1bgepr3/6QYherR2skslFhYvbWWuYR/d5f0cda59597cb1bfa0d163662ce5a01/Stream_1_Matt_Dray.mp4)
[Video 2](https://www.youtube.com/watch?v=VcEZBYDBJwo)
[Slides](https://matt-dray.github.io/earl22-presentation/)
[Source](https://github.com/matt-dray/earl22-presentation)
[Blog](https://www.rostrum.blog/2022/09/07/earl22/) | | Make a Twitter bot with {rtweet} and GitHub Actions | LondonR, London, Feb 2022 | Use free tools to create a simple automated Twitter bot that tweets on schedule, using [londonmapbot](https://twitter.com/londonmapbot) as an example | [Video](https://player.vimeo.com/video/683004567)
[Slides](https://matt-dray.github.io/mapbot-londonr/)
[Source](https://github.com/matt-dray/mapbot-londonr)
[Blog](https://www.rostrum.blog/2022/02/12/mapbotr-londonr/) | | Hit your reproducibility {targets} | Data Science Festival, UK Government, Sep 2020 | Introduction and demo of the {targets} package for workflow reproducibility in R | [Slides](https://matt-dray.github.io/targets-dsfest/)
[Source](https://github.com/matt-dray/targets-dsfest)
[Blog](https://www.rostrum.blog/2020/09/27/targets-dsfest/) | | {drake} for reproducible workflows | Bionformatics London Meetup, London, Jan 2020 | Introduction and demo of the {drake} package for workflow reproducibility in R | [Slides](https://matt-dray.github.io/drake-bioinformatics/#1)
[Source](https://github.com/matt-dray/drake-bioinformatics)
[Blog](https://www.rostrum.blog/2020/01/31/reprobioinformatics/) | | Reproducibility in R: three things | Data Science Week, Department for Education, Jan 2020 | Advice on making your R projects more reproducible | [Slides](https://matt-dray.github.io/reproducibility-ds-week/#1)
[Source](https://github.com/matt-dray/reproducibility-ds-week)
[Blog](https://www.rostrum.blog/2020/01/22/repro-three-things/) | | Easier R packages with {usethis} | Coffee & Coding, UK Government, London, Nov 2019 | How to build an R package from scratch with the {usethis} package | [Slides](https://matt-dray.github.io/r-pkg-slides/)
[Source](https://github.com/matt-dray/r-pkg-slides)
[Blog](https://www.rostrum.blog/2019/11/01/usethis/) | | Can {drake} RAP? | Coffee & Coding, UK Government, London, Oct 2019 | Introduction and demo of the {drake} package for workflows as part of a Reproducible Analytical Pipeline (RAP) | [Slides](https://github.com/matt-dray/drake-egg-rap/blob/master/docs/drake-presentation.pdf)
[Blog](https://www.rostrum.blog/2019/07/23/can-drake-rap/)
[Materials](https://github.com/matt-dray/drake-egg-rap) | | {crosstalk}: Shiny-like without Shiny | EARL 2018 conference, London, Sep 2018 | Intro and demo of the {crosstalk} package to allow HTML widgets to update dynamically without {shiny} | [Slides](https://matt-dray.github.io/earl18-presentation/#1)
[Source](https://github.com/matt-dray/earl18-presentation)
[Blog](https://www.rostrum.blog/2018/09/12/crosstalk-memes/)
[Materials](https://github.com/matt-dray/earl18-crosstalk)
[Memes](https://github.com/matt-dray/earl18-presentation/blob/master/memes/links.md) | ## ➕ Other These are some other bits and bobs that seem worthwhile to mention (alphabetically). In general you can visit my blog, [rostrum.blog](https://www.rostrum.blog/), for other stuff that I’ve dabbled with but aren’t mentioned specifically on this page. | Name | What | Links | |:--------------------|:--------------------------------------------------------------------------------------------------------------------------------------------------------------|:---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| | Dataviz recreations | Attempts to recreate/remix data visualisations and art (see also [faxcrayon.art](https://www.faxcrayon.art/)) | [Source](https://github.com/matt-dray/viz-recreation)
[Blogs](https://www.rostrum.blog/tags/recreation/) | | Emojis to SVG | Script to fetch SoftBank’s 1997 emoji set (the first-ever?) and convert them to SVG format | [Source](https://github.com/matt-dray/og-emoji-svg)
[Blog](https://www.rostrum.blog/2021/07/31/og-emoji-svg/) | | gamelad | An RStudio theme to mimic the original GameBoy’s green palette (intended for use with my {safar6} package) | [Source](https://github.com/matt-dray/gamelad/)
[Blog](https://www.rostrum.blog/2021/01/04/safar6/) | | Hastings Half maps | A page of interactive maps of the Hastings Half-Marathon route | [Site](https://matt-dray.github.io/hastings-half/)
[Source](https://github.com/matt-dray/hastings-half) | | Hex stickers | Hexagonal sticker designs, mostly for R packages | [Source](https://github.com/matt-dray/stickers) | | londonmapbot | A Mastodon (and former Twitter) bot that tweets a MapBox satellite image of a random part of London, made with {rtoot} (formerly {rtweet}) and GitHub Actions | [Mastodon](https://botsin.space/@londonmapbot)
[Twitter](https://twitter.com/londonmapbot)
[Source](https://github.com/matt-dray/londonmapbot)
[Blogs](https://www.rostrum.blog/index.html#category=londonmapbot) | | Splendid R games | A list of games made with R | [Source](https://github.com/matt-dray/awesome-r-games)
[Blog](https://www.rostrum.blog/posts/2023-04-02-splendid-r-games/) | | Tidyswirl | A work-in-progress introduction to the tidyverse using {swirl} for learning R from within R itself | [Source](https://github.com/matt-dray/tidyswirl)
[Blog](https://www.rostrum.blog/2019/11/02/tidyswirl/) | | Try R v4.1 | RStudio instance in the browser with R version 4.1 so you can try out the new base pipe (`\|>`) and lambda (`\()`) syntax | [Source](https://github.com/matt-dray/try-Rv4.1)
[Binder](https://mybinder.org/v2/gh/matt-dray/try-Rv4.1/main?urlpath=rstudio) |