2023-08-12 - Refurbishing my bike
2023-06-10 - Excel Scottish Land Tax calculator
2023-06-01 - Geo-referenced Teixeira (1968) Bicuar National Park vegetation map
2023-05-24 - An email about estimating productivity
2023-05-18 - R functions to download data from KoboToolbox
2023-05-15 - Vegetation map of Bicuar National Park - Teixeira 1968
2023-04-13 - Presentations for lectureship interview
2023-03-14 - Blog post on fieldwork in Ongava Game Reserve
2023-03-13 - Importing data layers into Avenza Maps Android app
2023-03-01 - Yoga routine for fieldwork
2023-01-03 - Command line tools I'd like to use but can't
2022-12-29 - Shell script to extract colours from macOS Terminal.app themes
2022-12-23 - R function to find nearest named colour
2022-12-08 - CMUS colour scheme and persistent settings
2022-11-23 - `BIOMASS::getWoodDensity()` description
2022-09-10 - Shiny app to explore climate space of SEOSAW region
2022-08-27 - Comparing coordinates of tree stems collected with GPS or tape measures
2022-08-16 - Tracking meals for a year
2022-08-14 - Using `any()` with `ifelse()` and `group_by()`
2022-06-20 - Todo lists in Vim, syntax highlighting
2022-06-12 - Voronoi tessellation to measure tree spatial distribution
2022-06-07 - Starting a repeat census of the New Wood
2022-06-01 - Guide for analysing forest canopy photos
2022-05-12 - Measuring stick for DBH measurements
2022-03-18 - Fieldwork in Namibia
2022-03-15 - Building adjustable tree mounts for camera traps
2022-02-19 - Thoughts on setting up permanent vegetation monitoring plots
2022-02-18 - Omajowa mushrooms
2022-01-19 - Ecology projects and acronyms
2022-01-15 - Food on New Year's Eve
2022-01-05 - Making bark thickness punches
2021-12-30 - Pros and cons of conducting ecological fieldwork with ODK
2021-12-20 - Processing data from the TRY traits database
2021-12-10 - Why big square vegetation plots are best
2021-11-30 - First setup for nvim-lsp with nvim-cmp
2021-11-26 - SEOSAW plot metadata Shiny app
2021-11-14 - Minimum bounding rectangles around sf polygons in R
2021-10-26 - Extracting pages with colour from a PDF
2021-10-12 - Walking three days of the Cleveland Way
2021-09-30 - Mulching trees to stop grass growth
2021-09-25 - Display lots of points with tiles in ggplot2
2021-09-20 - Data management during and after my PhD
2021-08-31 - Sensible page breaks in LaTeX grouped longtables
2021-08-21 - Collecting qualitative colour palettes
2021-08-15 - Flowering Aechmea fasciata
2021-08-08 - Grabbing BibTeX from a DOI
2021-08-01 - siunitx 'S' table column 'table-format' option
2021-07-31 - Diagrams to explain niche complementarity
2021-07-15 - BibLaTeX reference formatting
2021-07-10 - tmux popup windows for quickly launching scripts
2021-07-05 - Scraping museum catalogues
2021-06-25 - Network graph of R package usage
2021-06-23 - Interview presentation for SECO post-doc position
2021-06-17 - ASCII/UTF8 terrestrial carbon cycle diagram
2021-06-03 - A blog post on the Edinburgh Teaching Award
2021-06-01 - Diagrams to summarise Biodiversity - Ecosystem Function Research
2021-05-20 - compInd: An R package for forest tree-tree competition indices
2021-05-15 - Using nnn.vim as a filepicker for neomutt attachments
2021-05-10 - Calculating the winkelmass in R
2021-05-05 - FZF in vim and bash
2021-04-30 - ASCII charts in R
2021-04-25 - Polygon SVG diagrams
2021-04-20 - Pretty pictures from Terrestrial LiDAR
2021-04-20 - Reading on disc pasture meters
2021-04-15 - Empirical Cumulative Density Function (ECDF) plots
2021-03-30 - Modelling stem diameter class distribution with Weibull distributions
2021-03-25 - Planting 10 acres of woodland
2021-03-20 - Splitting a large woodland survey plot into 1 ha subdivisions
2021-03-10 - RSS feeds for scientific journals
2021-03-01 - Microsoft Azure Translator API call in R
2021-02-25 - LaTeX plot census forms
2021-01-20 - Making sense of the ODK ecosystem
2021-02-15 - Dynamic lists from user-added choices within repeats and groups, in ODK
2021-02-05 - What XLSForm+ODK cannot do
2021-01-25 - Playfair cipher in R
2021-01-15 - Estimating grassy volume from terrestrial LiDAR
2021-01-05 - Pandoc LaTeX shopping list template
2021-01-01 - Estimating canopy rugosity from terrestrial LiDAR
2020-12-30 - Extracting a vertical height profile from terrestrial LiDAR
2020-12-20 - Measuring canopy gap fraction from point clouds
2020-12-15 - Processing Terrestrial LiDAR with PDAL
2020-12-10 - Tiling wallpapers
2020-11-18 - Writing legibly in a field notebook
2020-11-08 - Querying the SoilGrids REST API
2020-10-31 - Making abundance matrices
2020-10-25 - Random effects plots
2020-10-17 - Scripting qutebrowser to grab papers with scidownl
2020-10-10 - Propagating basil
2020-10-05 - Comparing which simulated distribution is closest to the truth
2020-09-15 - Making a LaTeX thesis template
2020-09-10 - Making playlists for cmus
2020-09-05 - Display line segments with given slope in ggplot2
2020-08-24 - Sort and filter .bib files
2020-08-14 - Email about estimating competition with basal area
2020-08-08 - Curl-able contact card
2020-07-22 - Exporting draw.io images to LaTeX
2020-07-15 - How I cast Youtube videos to the TV
2020-07-10 - A weekend of consultations on woodland planting
2020-07-05 - Pretty correlation matrices with ggplot
2020-06-30 - Vim HTML img tag to markdown
2020-06-25 - Questions about operational IT for research
2020-06-15 - FZF script for searching a lookup table
2020-06-10 - Flow diagram for data cleaning process
2020-06-05 - An R function to split species names
2020-05-30 - Writing R package documentation
2020-05-25 - An email which tries to make sense of the RMarkdown ecosystem
2020-05-20 - Adventures in tweaking RMarkdown
2020-05-15 - Rendering list structure in R
2020-05-10 - Snippets to tweak macOS Finder.app
2020-05-05 - Thoughts on the publication process
2020-04-30 - Shiny app to visualise scaled planetary orbits on world map
2020-04-25 - Compiling a single master.tex from a modular document
2020-04-10 - Kit list for tropical fieldwork
2020-04-05 - Comparison of F-droid notetaking apps on Android
2020-03-30 - Too many software options for group working
2020-03-25 - Shell script for internet radio
2020-02-25 - Charging the laser scanner off a generator
2020-02-16 - Attaching threaded bar to rebar
2020-01-20 - Automate CSV typesetting for plot data sheets
2020-01-15 - An email about ordination and environmental fits
2020-01-07 - R functions for creating LaTeX variables
2019-12-20 - Workflow for writing an academic paper
2019-12-05 - Constructing diversity profiles with Hill numbers
2019-11-25 - Creating a personal library catalogue
2019-11-20 - Making a Gopherhole
2019-11-15 - Making better ggiNEXT plots
2019-11-10 - Making a LaTeX Beamer template
2019-11-05 - Shell script to get wifi password in macOS
2019-10-30 - UltiSnips cheatsheet
2019-10-25 - urlview to easily handle URLs in the terminal
2019-10-20 - Scraping instagram without an account
2019-10-15 - Writing ggplot2 grobs in a loop to maintain data values
2019-10-10 - A Pandoc template for converting markdown letters to LaTeX PDFs
2019-10-05 - Custom .sty files in LaTeX
2019-09-30 - Miscellaneous LaTeX snippets
2019-09-21 - Notes on Poisson regression
2019-09-12 - Analysing BibTeX files in R
2019-09-05 - Notes on diversity indices
2019-08-25 - My spot in Summer
2019-08-20 - Writing non-standard notation in ggplot2
2019-08-08 - Writing a Makefile for LaTeX and R
2019-07-31 - Vim fold expression for BibTeX files
2019-07-12 - Plotting a semi-variogram fit in ggplot2
2019-07-15 - Marking laser scanning targets to aid processing
2019-07-10 - An email about setting up 1 Ha plots
2019-07-05 - Compressing images for this website
2019-06-25 - Fetching mail with offlineimap within Mutt
2019-06-10 - The Mackenzie Dendrometer
2019-06-05 - Hotter than average map
2019-05-30 - Poster for Postgraduate Research Conference
2019-05-28 - Talk at Remote Sensing of Vegetation meeting
2019-05-25 - Task management macros in Vim
2019-05-17 - Plain text data entry in the terminal
2019-05-15 - Managing receipts on fieldwork
2019-05-10 - Edinburgh Teaching Award
2019-05-05 - Taking notes in the field
2019-04-30 - A 20 cm measuring stick
2019-04-25 - Thoughts on natural surroundings in Bicuar National Park
2019-04-20 - Angolan matchbox designs
2019-04-15 - Fermented drinks and exotic food in Huila province Angola
2019-04-10 - Ubuntu network timeout
2019-04-05 - DIY disc pasture meter in action
2019-03-15 - Exporting a list of R packages to install on a new machine
2019-02-28 - Python conda virtual environment in bash prompt
2019-02-20 - Making inset maps for publication
2019-02-15 - Using vifm to attach files to emails in Mutt
2019-02-05 - DIY disc pasture meter
2019-01-29 - Using the LaTeX 'float' package with Pandoc
2019-01-23 - Diagrams for tree measurements
2019-01-13 - Weekend walk on the Southern Upland Way and John Muir Link
2019-01-05 - Using notmuch to search email in Mutt
2018-12-29 - Putting a Linux distro on a USB, from a Mac
2018-12-23 - Converting Alpine addressbook to Mutt aliases
2018-12-15 - Updated Mutt config, multiple accounts
2018-12-05 - Calculating Vapour Pressure Deficit and other atmospheric things
2018-12-01 - Converting Qutebrowser bookmarks to w3m bookmarks
2018-11-25 - A better system for referencing
2018-11-20 - Calculating NDVI from Sentinel 2 images for Bicuar National Park
2018-11-15 - How much miombo is in each country
2018-11-06 - Making cider, bottling update
2018-11-02 - My spot in the woods in Autumn
2018-10-25 - Fixing up an Emmelle Diamond 5 bike
2018-10-19 - What I carry in my bag everyday
2018-10-15 - An R function to fill abbreviated genus names in a list of species
2018-10-10 - I made a mistake with cropping fisheye photos to a field of view
2018-10-02 - Hemispherical photography - should the focus be set to infinity?
2018-09-30 - Comparing forest canopy measurements with a phone lens and an expensive DSLR fisheye
2018-09-24 - Update on plant growth
2018-09-20 - Figuring out Sums of Squares in ANOVA
2018-09-12 - A method to crop hemispherical images to a field of view
2018-09-07 - A guide about processing hemispherical photos
2018-09-02 - An email about hemispherical photography
2018-08-31 - Ideas for a DIY bike chain tensioner
2018-08-25 - Foraging Chicken of the Woods
2018-08-20 - Pandoc CSS templates
2018-08-20 - Spoon carving trees in the SEOSAW network
2018-08-12 - Converting a bank .csv statement to ledger
2018-08-10 - Qutebrowser setup
2018-08-06 - VLC from the command line on macOS
2018-08-02 - Generating a static site using pandoc
2018-07-25 - Rebuilding a bike
2018-07-10 - Making a minimal wallet
2018-07-08 - Making a chopping board
2018-07-01 - Making arty renders of Belize's rivers
2018-06-25 - Updating pypodd to download most recent
2018-06-20 - Knife wear and tear
2018-05-05 - Foraging and making wild garlic pesto
2018-05-01 - Converting stem locations in a square plot to X Y metre coordinates
2018-04-28 - Mapping GPX tracks from AAT for Android, in R
2018-04-25 - A workshop on Git for version control
2018-04-18 - Making a geoJSON powered Leaflet map
2018-04-15 - New hemispherical photography equipment
2018-04-07 - Dirty Weekenders Kitchen Table Talk
2018-04-07 - Updating pypodd to run .opml files
2018-04-05 - Kalanchoe propagation
2018-03-26 - I made a command line podcast grabber in Python
2018-03-25 - Spring woodworking in my spot
2018-03-22 - How many trees have I measured?
2018-03-02 - Grievances with email clients and the state of email usage
2018-02-21 - How to properly roll and store DBH tape measure
2018-01-11 - Replacing the lightline.vim plugin with a custom statusline/tabline
2017-12-10 - What are the possible uses for local webpages in a shared flat?
2017-12-01 - Elephants affect the spatial distribution of savannah trees
2017-11-01 - Producing Gitbooks
2017-11-01 - Methods of writing and collaboration
2017-11-01 - My workflow, tmux, vim, etc.
2017-09-15 - Cycling from Bridge of Allan to Blackford
2017-09-25 - Initial PhD ideas
2017-10-12 - Automating imageJ leaf area processing
2017-09-27 - Using R to locate spatial data points inside map polygons
2017-09-27 - Making Coding Club logos in R
2017-09-25 - Reconditioning an old axe
2017-09-22 - Walking the Great Glen Way
2017-09-16 - Visualising Survey Data with Likert Scales
2017-09-15 - Brewing Plum Wine
2017-09-10 - Making Logos for Coding Club
2017-09-10 - Growing micro-greens on cotton wool
2017-09-05 - Mapping The Vegetation and Climate of Africa in R
2017-09-01 - Analysing Ledger Personal Accounting Data Using R
2017-08-20 - Fire experiments in the Congo
2017-08-14 - Constructing a Useful Bash Prompt
2017-07-20 - Configuring Ranger, a File Manager for macOS, with rifle.conf