Skip to content

Instantly share code, notes, and snippets.

Q. If you could collaborate with an engineer to design or build a solution for a problem in your archaeological work, what specific problem would you want them to address?
A. I'd like a highly mobile little robot that can drive or walk to an artefact on the ground, record its location by scanning it on the ground, then pick it up and 3D scan the entire artefact, then put it back exactly where it found the artefact, and move on to the next artefact. I want a swarm of these robots so I can map an entire site and scan many artefacts quickly without having to collect them and take them to a lab.
Q. What are some of your typical daily or weekly activities as an archaeologist?
A. Daily tasks include teaching archaeology, preparing to teach, grading, responding to messages from students. Daily tasks also include analysing data collected during field work, writing technical reports to describe the data analysis, writing articles for scholars and the public to communicate the results of our fieldwork. Planning f
@benmarwick
benmarwick / remove-rst-from-adif-logs.R
Created May 12, 2025 16:43
Remove RST from PoLo log ADIF file
adif_data_string <- c("ADIF for WA7BEN: SOTA at W7U/CA-007 SOTA W7U/CA-007 on 2025-05-10
<ADIF_VER:5>3.1.4
<PROGRAMID:21>Ham2K Portable Logger
<PROGRAMVERSION:6>25.4.6
<EOH>
<CALL:5>AA7OY <MODE:2>CW <BAND:3>40m <FREQ:8>7.064000 <QSO_DATE:8>20250510 <TIME_ON:6>183820 <RST_RCVD:3>599 <RST_SENT:3>599 <STATION_CALLSIGN:6>WA7BEN <OPERATOR:6>WA7BEN <DXCC:3>291 <STATE:2>AZ <CQZ:1>3 <ITUZ:1>6 <COMMENT:9>s599 r599 <QSLMSG:15>SOTA W7U/CA-007 <MY_SOTA_REF:10>W7U/CA-007 <SOTA_REF:10>W7A/AP-007 <EOR>
<CALL:4>KX0R <MODE:2>CW <BAND:3>40m <FREQ:8>7.064000 <QSO_DATE:8>20250510 <TIME_ON:6>184026 <RST_RCVD:3>599 <RST_SENT:3>599 <STATION_CALLSIGN:6>WA7BEN <OPERATOR:6>WA7BEN <DXCC:3>291 <STATE:2>KS <CQZ:1>4 <ITUZ:1>7 <COMMENT:9>s599 r599 <QSLMSG:15>SOTA W7U/CA-007 <MY_SOTA_REF:10>W7U/CA-007 <SOTA_REF:10>W0C/FR-086 <EOR>
<CALL:4>K9PM <MODE:2>CW <BAND:3>40m <FREQ:8>7.064000 <QSO_DATE:8>20250510 <TIME_ON:6>184216 <RST_RCVD:3>559 <RST_SENT:3>559 <STATION_CALLSIGN:6>WA7BEN <OPERATOR:6>WA7BEN <DXCC:3>291 <STATE:2>SD <CQZ:1>4 <ITUZ:1>8
@benmarwick
benmarwick / csss-490-group-assignments.R
Created March 28, 2025 20:30
CSSS 490 weekly discussion group assignments
library(tidyverse)
gradebook <- read_csv("2024-03-28T1049_Grades-CS&SS_490_A.csv")
# random assignments into groups with leader and backup leader
gradebook <-
gradebook %>%
filter(!Student %in% c(NA, "Points Possible", "Student, Test"))
n_people_per_group <- 6 # six people per group
@benmarwick
benmarwick / final-grade-calculations-488.R
Last active March 24, 2025 21:42
Final grade calculations from a Canvas gradebook that uses an additive grading policy
## Introduction
# This code will take grades on the Canvas gradebook, and add up the individual
# assignments to get a final grade, according to the policy for the class, in this
# case, here https://docs.google.com/spreadsheets/d/1-6f7mpgStojP4Gb3mk2PSwupGY2MiSrnIDD_KlxxEzk/edit?gid=874302185#gid=874302185
## Get the Canvas gradebook
# Go to the Canvas course page, go to the gradebook for that
# course, click 'Actions' then 'Export'. That will download a CSV file to
@benmarwick
benmarwick / prepare-radiocarbon-data-for-analyses-signbase.R
Last active November 16, 2024 21:52
Simple tasks with the SignBase dataset
library(tidyverse)
library(rcarbon)
signbase <- read_csv("signBase_Version1.0.csv")
# clean up and separate the data in the radiocarbon age columns
# so we can use it for plotting and analyses. This will generate some
# warnings, that's ok, nothing to worry about
signbase_years <-
signbase %>%
@benmarwick
benmarwick / gist:9778b094e95ee6f06d2db6e1831cc225
Created October 25, 2024 19:01
Take output from rcarbon::calibrate and plot with ggridges::geom_ridgeline
# Load required libraries
library(rcarbon)
library(ggplot2)
library(ggridges)
library(dplyr)
# Step 1: Calibrate dates
# Example data: replace with your actual radiocarbon dates and errors
dates <- c(4500, 4800, 5000) # Replace with your dates
errors <- c(30, 50, 100) # Replace with your errors
@benmarwick
benmarwick / gist:da75e66d8a8e989ba0ff4f19e58c54e4
Created October 24, 2024 04:17
what is the correct boxplot for this histogram?
data <- tibble( x = c(
# Peak 1 (around 0-2)
rep(1, 50), rep(2, 30), rep(3, 20),
# Dip (middle values)
rep(4, 10), rep(5, 8), rep(6, 8), rep(7, 10),
# Peak 2 (around 10-12)
rep(8, 20), rep(9, 30), rep(10, 50)
))
@benmarwick
benmarwick / gist:d0789be8014bb8dd079dd8c57cc587ea
Created April 12, 2024 05:54
Get data from the SOTA api to plot how many activations have been logged in each region of an association
library(rvest)
library(httr)
library(tidyverse)
# get list of regions in the W7W association
# via API
sota_regions_w7w <- "https://api2.sota.org.uk/api/associations/w7w"
r <- GET(sota_regions_w7w)
dat <-
jsonlite::fromJSON(content(r, as = "text")) %>%
@benmarwick
benmarwick / computing-sota-az-boundaries.R
Last active March 21, 2025 00:14
Compute polygons for SOTA activation zone boundaries for the W7W Association
library(raster)
library(terra)
library(tidyterra)
library(ggplot2)
library(sf)
library(tidyverse)
library(ggrepel)
library(ggspatial)
# get all summits via the GeoJSON download
@benmarwick
benmarwick / magnetic-susceptibility-data.R
Last active February 8, 2024 23:23
Exploring the magnetic susceptibility data from Boomplas
library(tidyverse) # you may need to install.packages("tidyverse") in the console
library(googlesheets4) # ditto
# change to your own UW email
gs4_auth("[email protected]")
# Get our google sheet of information about the location of each point
ms_data <-
read_sheet("https://docs.google.com/spreadsheets/d/1rDyfJQ6OnWJktIWMZfnLe8YRtCiW1PVrP9nKW1kERN4/edit?pli=1#gid=0")