Sign in

Randy Boyes

@randy.pub
470 followers 547 following 393 posts

Analytics at @presage.group | PhD Epidemiology | Wolfe Island Volunteer Firefighter | #julialang #python #rstats | publications at www.randy.pub | GitHub @rdboyes

PostsRepliesMedia
Randy Boyes @randy.pub · 23/09/2026
My family had newer computers that I used before this but the first computer that was MINE was one of these Commodore XTs that I salvaged from my Dad's shelf of spare parts and busted computers
020
Randy Boyes @randy.pub · 01/09/2026
nice
000
Reposted by Randy Boyes
Presage Group @presage.group · 21/08/2026
New blog post: Reducing Human Error in Scientific Publishing Can LLM code review catch and reduce human error in scientific publishing? presagegroup.com/posts/science_erro… #analytics #ai #science
presagegroup.com
Reducing Human Error in Scientific Publishing
Can LLM code review catch and reduce human error in scientific publishing?
011
Randy Boyes @randy.pub · 30/07/2026
This joke goes nuts if you, like me, are the son of a evangelical pastor who became an epidemiologist
3294
Randy Boyes @randy.pub · 30/06/2026
Ooof
100
Randy Boyes @randy.pub · 15/06/2026
[grossed out] --dangerously-skip-permissions
[interested] auto mode
021
Randy Boyes @randy.pub · 13/06/2026
Anthropic’s marketing department must be ecstatic
071
Randy Boyes @randy.pub · 11/06/2026
vince mcmahon meme format:
MDPI is predatory
Frontiers is predatory
Elsevier is predatory
Publishing as a model is predatory
0245
Randy Boyes @randy.pub · 24/05/2026
I wish claude would just admit it doesn't know instead of attempting to gaslight me
023
Randy Boyes @randy.pub · 09/05/2026
Bruce only likes to chew toys while holding them over the edge of the couch, and gets very upset when he drops them
010
Randy Boyes @randy.pub · 29/04/2026
“Hey codex what are your ‘likes’”
media.tenor.com
a man with a beard is sitting on a couch and talking about ghouls .
ALT: a man with a beard is sitting on a couch and talking about ghouls .
020
Randy Boyes @randy.pub · 02/04/2026
The flexibility of `geom_polygon` lets you do basically whatever you want with your plots, e.g. (code: gist.github.com/rdboyes/7a7f...)
001
Randy Boyes @randy.pub · 28/01/2026
Cool study, and I’m convinced they’re generally correct. Very high lizardman quotient in this figure though - if you’re not getting 100% strong agreement that “betting (real money)” is a form of gambling, something is off, and the SVK sample “strong agree” for that item is <50%
110
Randy Boyes @randy.pub · 24/01/2026
Average programming language enjoyer: there are two hard things, cache invalidation and naming things #julialang programmers:
171
Randy Boyes @randy.pub · 05/12/2025
Only had time to finish part 1 of #adventofcode today - hoping to get back to p2 on the weekend though!
1110
Randy Boyes @randy.pub · 04/12/2025
Two #adventofcode solutions for the price of one today, since I was too busy working yesterday. TypeScript feeling ok, but how is array.sum() not a thing!?
function solve(line: string, bat_length: number) {
  const arr = line.split("").map(function (char: string) {
    return Number(char);
  });

  let end: number = arr.length - bat_length + 1;
  let start: number = 0;
  let digits: number[] = [];

  while (digits.length < bat_length) {
    const selected = Math.max(...arr.slice(start, end));
    digits.push(selected);
    end += 1;
    start += 1 + arr.slice(start, end).indexOf(selected);
  }

  return digits
    .reverse()
    .map(function (n, i) {
      return n * 10 ** i;
    })
    .reduce((a, b) => {
      return a + b;
    }, 0);
}

console.log(
  require("fs")
    .readFileSync("data/2025/3.txt", "utf-8")
    .split(/\r?\n/)
    .filter((line) => line.trim().length > 0)
    .map(function (line: string) {
      return [solve(line, 2), solve(line, 12)];
    })
    .reduce(function (a, b) {
      return [a[0] + b[0], a[1] + b[1]];
    }),
);var input_matrix = require("fs")
  .readFileSync("data/2025/4.txt", "utf-8")
  .split(/\r?\n/)
  .filter((line) => line.trim().length > 0)
  .map(function (line: string) {
    return line.split("").map(function (char) {
      if (char == "@") {
        return 1;
      } else {
        return 0;
      }
    });
  });

var count = 0;
var remove = [];
var exit = false;

while (exit == false) {
  for (const target of remove) {
    input_matrix[target[0]][target[1]] = 0;
  }
  var remove = [];

  for (var i = 1; i < input_matrix.length - 1; i++) {
    for (var j = 1; j < input_matrix.length - 1; j++) {
      if (
        input_matrix[i - 1]
          .slice(j - 1, j + 2)
          .concat(
            input_matrix[i].slice(j - 1, j + 2),
            input_matrix[i + 1].slice(j - 1, j + 2),
          )
          .reduce((a, b) => {
            return a + b;
          }, 0) <= 4
      ) {
        if (input_matrix[i][j] == 1) {
          count++;
          remove.push([i, j]);
        }
      }
    }
  }
  if (remove.length == 0) {
    exit = true;
  }
}

console.log(count);
020
Randy Boyes @randy.pub · 02/12/2025
TypeScript #adventofcode Day 2 complete! Rocky one, really missing some of the builtin functions from my "home languages", but we got there
const range = (start: number, stop: number): number[] =>
  Array.from({ length: 1 + stop - start }, (_, i) => start + i);

function chunkString(str: string, length: number) {
  return str.match(new RegExp(".{1," + length + "}", "g"));
}

const divisors = (num: number) =>
  [...Array(num)].map((x, i) => i).filter((x) => num % x === 0);

function solve(id_range: string): number {
  const arr_range = id_range.split("-");
  const possibles = range(Number(arr_range[0]), Number(arr_range[1]));

  const ans = possibles
    .map(function (element: number): number {
      let id_string = `${element}`;

      const checks: number[] = divisors(id_string.length).map((num) => {
        return new Set(chunkString(id_string, num)).size;
      });

      if (Math.min(...checks) == 1) {
        return element;
      } else {
        return 0;
      }
    })
    .reduce((a, b) => {
      return a + b;
    }, 0);

  return ans;
}

console.log(
  require("fs")
    .readFileSync("data/2025/2.txt", "utf-8")
    .split(",")
    .map(function (id_range: string) {
      return solve(id_range);
    })
    .reduce((a, b) => {
      return a + b;
    }, 0),
);
150
Randy Boyes @randy.pub · 01/12/2025
Doing #adventofcode in TypeScript this year since I need to learn it for work... missing #julialang but it's not too bad. Day 1:
Typescript solution to advent 2025 day 1. Code: class Dial {
  current: number = 50;
  zeros: number = 0;
  pass_zero: number = 0;

  turn(s: string): void {
    if (s[0] == "R") {
      this.current += Number(s.substring(1));
      if (this.current >= 100) {
        this.pass_zero += Math.trunc(this.current / 100);
        this.current = this.current % 100;
      }
    } else {
      if (this.current == 0) {
        this.pass_zero -= 1;
      }
      this.current -= Number(s.substring(1));
      if (this.current <= 0) {
        this.pass_zero += -Math.trunc(this.current / 100) + 1;
        this.current = 100 + (this.current % 100);
      }
    }
    if (this.current == 0 || this.current == 100) {
      this.zeros += 1;
      this.current = 0;
    }
  }
}

var p1 = new Dial();

require("fs")
  .readFileSync("data/2025/1.txt", "utf-8")
  .split(/\r?\n/)
  .forEach(function (line: string) {
    p1.turn(line);
  });

console.log(p1.zeros);
console.log(p1.pass_zero);
0100
Randy Boyes @randy.pub · 18/11/2025
I assume the reviewers didn’t like the original title, “oh no: we have to throw out all survey data collected in the last 1,084 days”
000
Randy Boyes @randy.pub · 15/11/2025
accidentally opening the app formerly known as twitter
media.tenor.com
a group of star wars characters standing next to each other with a robot in the background
ALT: a group of star wars characters standing next to each other with a robot in the background
030
Reposted by Randy Boyes
Umair Durrani @transport-talk.bsky.social · 20/10/2025
I am giving 2 talks abt making your data analysis outputs into polished products with the power of #RStats and #Python pkgs + my pkg {brandthis}. Talk 1: DevFest 2025. Register here: wedevfest.com Talk 2: R+AI 2025 organized by R Consortium. Register here: rconsortium.github.io/RplusAI_webs...
063
Reposted by Randy Boyes
Carlos Scheidegger @cscheid.net · 14/10/2025
This may just be the best CS paper I’ve read this year. Just read the abstract and first para of the intro! The rest of the intro is really wild too, but very very good: dl.acm.org/doi/pdf/10.1...
A screenshot of an academic paper. It reads:

Abstract
A "
'quine" is a deterministic program that prints itself. In this essay, I will show you a "gauguine": a probabilistic program that infers itself. A gauguine is repeatedly asked to guess its own source code. Initially, its chances of guessing correctly are of course minuscule. But as the gauguine observes more and more of its own previous guesses, it detects patterns of behavior and gains information about its inner workings.
This information allows it to bootstrap self-knowledge, and ultimately discover its own source code. We will discuss how-and why-we might write a gauguine, and what we stand to learn by constructing one.
CCS Concepts: • Computing methodologies → Philo-sophical/theoretical foundations of artificial intelli-gence; Theory of mind.
Keywords: reflection, probabilistic programming
ACM Reference Format:
Kartik Chandra, Amanda Liu, Jonathan Ragan-Kelley, and Joshua B.
Tenenbaum. 2025. Gauguin, Descartes, Bayes: A Diurnal Golem's Brain. In Proceedings of the 2025 ACM SIGPLAN International Symposium on New Ideas, New Paradigms, and Reflections on Programming and Software (Onward! '25), October 12-18, 2025, Singapore, Singa-pore. ACM, New York, NY, USA, 9 pages. https://doi.org/10.1145/
3759429.3762631

1 A Way of Knowing

From time to time, we all have crises of identity-moments of radical and overwhelming uncertainty about our selves.
I' don't know whether the doubts that seize us can really be externalized in language, but if I were to try, I would express them as questions, questions like: Who am I? What am I?
What kind of person? What kind of mind?
1028176
Randy Boyes @randy.pub · 12/10/2025
Exploring some ideas for how to create a macro-free (or macro-light) implementation of the tidyverse in #julialang (get out the jolly roger 🏴‍☠️): www.randy.pub/posts/piracy/
randy.pub
You wouldn't pirate a type
172
Randy Boyes @randy.pub · 26/09/2025
I’m doing my honest best to listen to this with an open mind but hooiiioill There are so many words said that have absolutely no bearing on the facts of the case podcasts.apple.com/ca/podcast/t...
podcasts.apple.com
The Law, such as it is
Government Podcast · Monthly Series · An exploration of a broken, if beautiful, institution, the law, and tradition, America. Season one told the story of a case, LESSIG v. NYT. Season two begins the ...
010
Randy Boyes @randy.pub · 19/09/2025
I miss being able to just buy a thing and have it, I hate paying for subscriptions
2181
Randy Boyes @randy.pub · 18/09/2025
Am I the only one who thinks Liquid Glass actually looks kinda good
000
Reposted by Randy Boyes
Nicola Rennie @nrennie.bsky.social · 03/09/2025
I really enjoyed giving a brief introduction to Julia for statisticians yesterday - thanks to Jake Grainger and Charles Dufour for organising such a great session! Slides: nrennie.rbind.io/talks/rss-in... #RStats #JuliaLang #ggplot2 #RSS2025Conf @tidierjl.bsky.social
Screenshot of slides comparing R and Julia code for visualisation
2427
Randy Boyes @randy.pub · 21/08/2025
No wonder they were having a blast
040
Randy Boyes @randy.pub · 06/08/2025
Nutrition research continues to fill the library’s hexagonal galleries
030
Randy Boyes @randy.pub · 26/07/2025
Another #juliacon in the books! Check out my talk on TidierPlots.jl here: www.youtube.com/live/HMdBi9L... and the State of Tidier.jl (by Daniel Rizk) here: www.youtube.com/live/_Uf2KQX... to see what's been going on with @tidierjl.bsky.social in #julialang
youtube.com
JuliaCon Global 2025 | Else Room | Day 2
YouTube video by The Julia Programming Language
0138
Randy Boyes @randy.pub · 20/07/2025
These values are required to do science - acting like this is a problem is like saying that CEOs valuing “professionalism” or “punctuality” more than the average person means they aren’t value-aligned with the average person
000
Randy Boyes @randy.pub · 22/06/2025
Easily GOTY so far, and it’s hard to imagine anything knocking it out of that spot
120
Randy Boyes @randy.pub · 20/06/2025
Oxygen not included AoE 2 SSBM
000
Randy Boyes @randy.pub · 17/06/2025
The spectrum between “guy who occasionally plays an hour or two of video games with his kids” and “guy who still plays WoW 8 hours/night” is so vast here that it’s essentially two different ideas
220
Randy Boyes @randy.pub · 11/06/2025
Not dead, but: - no growth in the last 3 years - almost half of all users are students (summer user decline), and they’re not staying after grad - at least not in enough numbers to increase overall use Counterpoint: Positron use may be growing? I personally switched and don’t use RStudio anymore
100
Randy Boyes @randy.pub · 05/06/2025
Trying out some old Vizz Buzz challenges in TidierPlots - is there any way in #makie to easily add small images? The original version had flags as labels...
Code to recreate a data visualization showing the medal progress at the 2018 olympics, reproduced below: 

using TidierPlots, TidierFiles, TidierData, DataFrames, Dates

wo = read_csv("data/bump (1).csv")

wo_plot = @chain wo begin
    @mutate total = gold + silver + bronze
    transform(:date => ByRow(x -> 1 + (x-Date("2018-02-10")).value) => :day)
    @group_by date
    @mutate rank = 1:n() 
    @ungroup
end

top5 = @chain wo_plot begin
    @filter country in ["NED", "GER", "CAN", "USA", "NOR"]
end

final = @chain top5 begin
    @filter day == 16
end

ggplot(wo_plot) +
    geom_point(@aes(x = day, y = rank, group = country), alpha = .4, size = 15, color = :lightgrey) + 
    geom_line(@aes(x = day, y = rank, group = country), alpha = .4, linewidth = 6, color = :lightgrey) + 
    geom_point(data = top5, @aes(x = day, y = rank, color = country), size = 15, alpha = 0.5) + 
    geom_line(data = top5, @aes(x = day, y = rank, color = country), linewidth = 6, alpha = 0.5) + 
    geom_point(data = top5, @aes(x = day, y = rank), color = :white, size = 5) +
    scale_y_reverse() + 
    lims(y = c(0.5, 10.5), x = c(0, 18)) +
    labs(title = "Pyongchang 2018 Olympic Winter Games",
    subtitle = "Countries ranked by overall medals after each competition day",
    x = "Competition Days with Medals", y = "Rank") +
    scale_color_manual(values = c(:red, :black, :orange, :green, :blue)) +
    guides(color = :none) +
    theme_minimal() + 
    theme(
        xgridstyle = :solid, 
        xgridcolor = :lightgray, 
        xgridvisible = true,
        xticks = 1:16,
        yticks = 1:10,
        leftspinevisible = false,
        bottomspinevisible = false,
        titlealign = :left,
        titlesize = 24,
        subtitlesize = 16
    )
291
Randy Boyes @randy.pub · 22/05/2025
Accidentally installed monokai pro, I’ll pay for winzip before I pay for your hexcodes bro
000
Reposted by Randy Boyes
Ambassador Frank Hull @frankiethull.bsky.social · 23/04/2025
Participating in #TidyTuesday with Julia has never been easier! #Tidier #TidierTuesday @tidierjl.bsky.social @jonthegeek.com
Screenshot of Positron IDE, displays a quarto document using TidierPlots and TidyTuesday.jl to download and plot pokemon data. A scatterplot of attack vs HP, color coded by type appears next to the document
2318
Randy Boyes @randy.pub · 10/04/2025
The one piece of good news in the portfolio today
140
Randy Boyes @randy.pub · 09/04/2025
If we can’t right-assign, we should just use =
061
Randy Boyes @randy.pub · 31/03/2025
Because this is a little annoying to set up, here's a simple example in the form of a blog post: www.randy.pub/posts/multif...
randy.pub
Knitting Quarto Docs with a Dynamic Number of Figures
000
Reposted by Randy Boyes
Tidier.jl @tidierjl.bsky.social · 27/03/2025
Tidier.jl brings modern data science workflows into #julialang. Batteries included. ✅ Logging data transformations ✅ Unnesting database tables with SQL ✅ Same syntax for dataframes and databases (supporting 12 flavors of SQL) ✅ Customizable grammar of graphics for plotting …and many more features.
0104
Reposted by Randy Boyes
Tidier.jl @tidierjl.bsky.social · 25/03/2025
TidierData.jl + logging = 🔥 #julialang #rstats #tidyverse
0223
Randy Boyes @randy.pub · 14/03/2025
"I could only process 60k rows before my hard drive overheated"
0121
Randy Boyes @randy.pub · 04/03/2025
Catastrophic failure of my desktop means I’ll be using a laptop for the next 2 weeks like some kind of dang pilgrim
130
Reposted by Randy Boyes
Tidier.jl @tidierjl.bsky.social · 28/02/2025
Love the #rstats tidyverse and curious about Julia? We are aiming to bring TidierPlots to feature parity with ggplot2. We would love to get your help. We have some examples to get you started! Take a look: github.com/TidierOrg/Ti...
github.com
Add additional `geom`s · Issue #180 · TidierOrg/TidierPlots.jl
Describe how it works in R's ggplot2 Add geoms! This is a list of the currently non-implemented geoms that are available in ggplot2 in R. For the easier geoms, something similar to the RainCloud ex...
165
Reposted by Randy Boyes
Peter Tennant @pwgtennant.bsky.social · 24/02/2025
"Selection bias: where are we now?" Incredibly excited to announce the next Causal Inference Interest Group seminar with @haidonglu.bsky.social will take place on 10th March 2025 at 3pm GMT (11am EDT). Don't miss this one! Register at: turing-uk.zoom.us/meeting/regi... #EpiSky #CausalSky #CIIG
54420
Reposted by Randy Boyes
Tidier.jl @tidierjl.bsky.social · 15/02/2025
It’s like that scene in Inception when you spin the top thinking you’re in #RStats but you’re actually in #JuliaLang. We need to go deeper…
0233
Reposted by Randy Boyes
Tidier.jl @tidierjl.bsky.social · 08/02/2025
Coming soon: facet_grid support for TidierPlots.jl #JuliaLang 📊📊📊 📊📊📊
0144
Reposted by Randy Boyes
Tidier.jl @tidierjl.bsky.social · 24/01/2025
🧹📊 TidierPlots.jl sighted in the *Embrace Uncertainty* eBook by Phillip Alday, Reinhold Kliegl, and Douglas Bates. embraceuncertaintybook.com/largescaleob...
043