Sign in

Tan

@tanho.ca
2.9K followers 652 following 910 posts

#rstats carver, @nflverse.com wizard, pumpkin engineer, easily nerdsniped, he/him. soccer @ teamworks intelligence, mentor @dslc.io. tanho.ca

PostsRepliesMedia
Tan @tanho.ca · 16/09/2026
I aspire to the gloriousness of @travisgerke.bsky.social’s talk-giving outfit
Travis wearing his 80s outfit while presenting: Mohawk haircut, aviator sunglasses, red puffer vest over denim jacket over plaid, and baggy jeans.
3180
Tan @tanho.ca · 16/09/2026
Dammit Wes I’m not ready for the feels this early in the morning 😭
A slide from Wes McKinney’s keynote:

2015: Burnout

“The lives-of-the-living we touch matter more than the paper trail of intellectual accomplishments we leave behind us.”
0110
Tan @tanho.ca · 16/09/2026
family photo
photo of the teamworks soccer engineering team at positconf: me, Lydia, Michael, and Andrew
3180
Tan @tanho.ca · 14/09/2026
enjoying the new options for pimping your #positconf2026 nametag, these ribbons are fun!
Picture of my name badge for positconf. It has my name (Tan Ho) and company (Teamworks) printed on it, and then additionally it has an nflverse sticker attached as well as the positconf pin (primarily used to counterbalance my badge holder only being attached on the right side to help hold it straighter) and then has four fabric ribbons attached: positconf veteran, shiny happy person, team R, and he/him.
1170
Tan @tanho.ca · 13/09/2026
Pro tip for #positconf: lanyards naturally hang your nametag rather far from your face, which can lead to an awkward downwards scan for someone who is looking at your face to read your name. You can either a) shorten the lanyard by tying a knot in it or b) bringing a different nametag holder!
Picture of me illustrating where name tags tend to sit when hung from a lanyard, which is basically around my belly button, as compared to the normal spot of being in the upper chest area
3203
Tan @tanho.ca · 04/09/2026
can confirm apparently minnesota is canadian
my dialect score which is most similar to minnesota (and alaska, parts of vermont/new hampshire as well as southern california) and least like the american south. not surprising I guess.
160
Tan @tanho.ca · 28/08/2026
Food nerdery: I recently set up a home dry aging fridge and just finished my first 45 day dry age! It’s been a fun little project to set up a raspberry pi to monitor it and keep on top of temperature and humidity.
4253
Tan @tanho.ca · 09/07/2026
rediscovering ancient memes
An "increasing levels of clown meme" that says

1. I'm gonna write a blog post
2. Man my blog site feels clunky
3. I'll just rewrite it
4. and write the blog post tomorrow
270
Tan @tanho.ca · 20/06/2026
I’m also just in Opus 4.8 I think
TAN HO
R PROGRAMMER AND DATA SCIENTIST

43 STRENGTH · TOP 95%

CLAUDE OPUS 4.8 SAYS
R PROGRAMMER AND DATA SCIENTIST KNOWN FOR CONTRIBUTIONS TO THE FANTASY FOOTBALL ANALYTICS COMMUNITY, INCLUDING THE FFVERSE AND NFLVERSE R PACKAGES.
110
Tan @tanho.ca · 11/06/2026
apparently this is a Whole Thing because it made it into an april fool's joke over on the other site
screenshot of @OptaJabu's 2026 april fool's tweet that says 

"724 - Khuliso Mudau has chewed through 724 pieces of gum during league matches since joining Sundowns, the most by a player for one club in PSL history. Chappies."
000
Tan @tanho.ca · 10/06/2026
I’m happy for Conor and if this “title” promotion earns him more money all the better, but also lol @ predictive modelling now being part of his job description as if it wasn’t already part of it
010
Tan @tanho.ca · 01/06/2026
this is in base now, I thought? I guess it also adds length(a) == 0 as a conditional. either way it's probably redundant
screenshot of R text

R> `%||%`
function (x, y) 
if (is.null(x)) y else x
<bytecode: 0x5d9d748d26a8>
<environment: namespace:base>
R> R.version
               _                           
platform       x86_64-pc-linux-gnu         
arch           x86_64                      
os             linux-gnu                   
system         x86_64, linux-gnu           
status                                     
major          4                           
minor          5.2                         
year           2025                        
month          10                          
day            31                          
svn rev        88974                       
language       R                           
version.string R version 4.5.2 (2025-10-31)
nickname       [Not] Part in a Rumble
001
Tan @tanho.ca · 23/04/2026
0271
Tan @tanho.ca · 07/04/2026
Me: @niccrane.bsky.social how do I get a dput of an arrow schema pls halp Nic: try schema$code() R6 method? Me: uh what where I’ve never seen that _works exactly as expected_ Me: how tf, that wasn’t in the docs?! _consults google_ wtf, google returns to v12.0 as the first result (not v23) #rstats
Me googling “arrow schema R” and then clicking on the first resultturns out the first result links to arrow v12.0.1 which is an impressive 11 versions out of date
240
Tan @tanho.ca · 21/03/2026
Annual DynastyProcess meetup!
My friend Joe Sydlowski and I attending a Toronto FC game against the Columbus Crew
0120
Tan @tanho.ca · 11/03/2026
I've been really enjoying playing volleyball lately and have finally gotten into a few consistently good teams and drop-ins. It's so nice to be making new friends and getting out of the house (where I also WFH). Also, I finally got one of these egg paintings I'd been wanting!
Image focuses on a painting of a fried egg mounted on a column in my basement office above a print of a business-dressed frog lounging and drinking coffee, while in the background you can see my wall of sports jerseys (a pittsburgh steelers, liverpool fc, toulouse fc, and ottawa senators retro jersey are visible), assorted knick-knacks on a long horizontal bookshelf, and my dog Jasper sitting in my office chair.
110
Tan @tanho.ca · 28/02/2026
first time I only managed 32.84, next time I did better lol
a 32.84/50 on the dialed.gg colour memory test, to which the website says “almost respectable. almost. don’t get comfortable.” (this score also apparently ranks 338923/345625 so clearly I did very badly)43.84/50 on my second attempt, “genuinely unsettling accuracy. please find a hobby”
110
Tan @tanho.ca · 27/01/2026
Yo Dawg meme that reads:

"yo dawg, we heard you like converting dplyr to sql ... so we made a parser to convert your dplyr to sql inside sql"
1152
Tan @tanho.ca · 24/01/2026
Wandering out into -24C with my @rfortherestofus.com hat, thanks @dgkeyes.com!
Snapshot of car thermometer readout, -24CMe wearing a light and dark blue striped tuque in the car because Cold.
180
Tan @tanho.ca · 10/12/2025
Seems like you can disable it here now github.com/settings/cop...
Screenshot of option to disable copilot commit messages
250
Tan @tanho.ca · 26/11/2025
careful…
A meme about progressively sinking into the rabbit hole of rewriting your website instead of doing the real task of writing a blog post

1. I’m gonna write a blog post (hook)
2. Man, my blog site feels clunky (line)
3. I’ll just rewrite it and write the blog post tomorrow (sinker)
130
Tan @tanho.ca · 26/11/2025
Lamb riblets, pad kra pao, morning glory, and aubergine pad phet were all superb Thai bites at Singburi (9.3). Really comforting with a bowl of rice, and brings the heat too 🌶️
Lamb riblets with crushed peanut topping, a slice of lime and a brown soy saucepad kra pao: ground beef, red and green chilis, and green beans stir fried together. aubergine (aka eggplant) with red and green chilis stir fried together with a shiny glaze-like sauce. morning glory sauteed with whole garlic cloves - a very simple and satisfying greens dish
140
Tan @tanho.ca · 26/11/2025
Finally got in to Regency Cafe (8.2) - really tasty rendition of english breakfast and a good value too. Busy busy though.
English breakfast: two fried eggs, bacon, sausages, tomatoes, hash browns, and toast
120
Tan @tanho.ca · 26/11/2025
Excellently executed Sunday roast at Quality Chop House (9.7, mostly from accumulation of past visits). The olive oil ice cream is an absolute treat too!
A plate of Sunday roast: a fat-edged piece of roast beef, yorkshire pudding, a small amount of pulled brisket, gravy over top. a trio of desserts, including chocolate mousse, treacle tart with clotted cream, and my (far superior) olive oil ice cream
110
Tan @tanho.ca · 26/11/2025
Wrestler's naan roll from Dishoom (9.7) with the extended Zelus fam. Dishoom is a tourist-hyped spot that somehow always manages to live up to the hype, and I'm an absolute sucker for their breakfast. So much so that I dragged my sister here again two days later, actually.
wrestler's naan roll with chili jam - it's a warm naan flatbread with eggs, bacon, sausage, and some herbs stuffed inside. A group of friends around a table, clockwise from top right: James, Sergio, Arielle, JM, Tomas, and myself.
110
Tan @tanho.ca · 26/11/2025
Butter chicken and prawn curry from Gymkhana (9.5) with the teamworks soccer squad. Shut down that inner hipster voice that says the butter chicken is for mainstream noobs, this one is insanely good. Tasting menu is a little overkill though, just get a few dishes :)
An array of Indian food: butter chicken, shrimp curry, venison biryani, white rice, and a basket of naan. group photo with soccer teammates Sergio, James, and JM
110
Tan @tanho.ca · 26/11/2025
Lechon with liver peppercorn sauce, Chicken Inasal with lemongrass/tom yum sauce from Donia, a modern Filipino restaurant (9.7 on my personal Beli score)
Sliced crispy pork belly served with a pool of liver peppercorn sauce and cooked swiss chard, with a bowl of white rice on the sidequarter chicken roasted and served in a pool of yellow lemongrass tom yum sauce
110
Tan @tanho.ca · 17/11/2025
Credit where due, there are some bluebird days around here
A picture of a blue bird day walking through Clapham Common park
120
Tan @tanho.ca · 16/11/2025
A pickup volleyball gym
030
Tan @tanho.ca · 16/11/2025
Good morning, it is 9am here in London. I am confident that the woman who wrote fifty shades of grey was inspired by the London skyline. However, I am happily on my way to pickup volleyball by tube so I have zero complaints.
A picture of a grey skyline taken from inside a Circle line tube ride.
260
Tan @tanho.ca · 31/10/2025
pumpkin carving 2025.02: big ducky energy 😎
A pumpkin carving of a rubber ducky sitting on a laptop. The ducky is grinning and wearing sunglasses.
0181
Tan @tanho.ca · 30/10/2025
Prepping for a pumpkin carving party later tonight 😎🐥
A pumpkin with a drawing of a rubber ducky sitting on top of a laptop
0141
Tan @tanho.ca · 26/10/2025
Pumpkin szn! This carving is of my current obsession: playing a lot of rec volleyball 🏐
A pumpkin carving of a volleyball scene in which a player is jumping to attempt a spike over a defender reaching upwards with both arms outstretched to try and block them
1121
Tan @tanho.ca · 26/10/2025
in my happy place
Pumpkin carving in progress: a volleyball scene is drawn onto a pumpkin with dry erase marker, depicting a player about to spike the ball over the net against a blocker. In the background, you can see that I’m watching the arsenal vs crystal palace soccer match
050
Tan @tanho.ca · 09/10/2025
Ah the trouble more specifically is that I’d want to do my dog Jasper, but then I’d need to do him justice and that feels daunting haha
Jasper, a 12 year old shih tzu, grinning up at me in the gym like the good boy he is
200
Tan @tanho.ca · 09/10/2025
IT'S #PUMPKINSZN, TIME TO QRP PUMPKIN ART (more at tanho.ca/pumpkins)
A pumpkin carving showing the loch ness monster chilling in loch nessa pumpkin carving of mudkip! a pumpkin carving of a liona pumpkin carving of a euchre hand
2214
Tan @tanho.ca · 05/10/2025
yeah it's great
fantasypros gameday page showing live matchup scoring of my teams across four different leagues
100
Tan @tanho.ca · 19/09/2025
Stoked about this awesome little TDD2025 coin! Big shoutout to everyone who came, and to all the r-lib / tidyverse maintainers for being awesome!
tidyverse dev day hex coin!
1141
Tan @tanho.ca · 19/09/2025
happy tidy dev day!
menu of coffee options at tidyverse dev day, featuring fun R puns for coffee drinks like theme_white(), ggbombon, map()uccino, cubanoverse, gnutella
2120
Tan @tanho.ca · 05/09/2025
It seems like data was available as of 5am ET this morning. Do you have a caching thing set up?
output of nflreadr::load_pbp(2025)
100
Tan @tanho.ca · 02/09/2025
load_participation(): thanks to @realfrankbrank.bsky.social and @ftnfantasy.com, we're now able to have **historical** participation data similar to what we were previously pulling from NGS! This data is graciously provided to us after every season, and we now have complete 2023 and 2024 data avail.
Screenshot of 2024 participation data from FTN
2145
Tan @tanho.ca · 02/09/2025
load_depth_charts(): we lost access to the NFL Data Exchange where we were previously pulling depth charts, so we've now switched over to ESPN and can pull by date. This means that there are now preseason depth charts! nflreadr.nflverse.com/reference/lo...
screenshot of nflreadr::load_depth_charts() showing depth charts by date
152
Tan @tanho.ca · 02/09/2025
load_team_stats(): thanks to this infra work, we can now provide team-level game and season statistics with all of the same detail! nflreadr.nflverse.com/reference/lo...
screenshot of load_team_stats(2024) showing 570 rows and 102 columns of data
142
Tan @tanho.ca · 02/09/2025
load_player_stats(): we also updated how we calculate player game and season stats, so we can now return week, regular season, post-season, and reg+post season summary_levels. It also no longer has a stat_type = off/def/kicking arg, instead returning all of these at once.
screenshot of nflreadr::load_player_stats(2024, summary_level = "reg"), showing 1997 rows and 113 columns of data
132
Tan @tanho.ca · 12/08/2025
github.com/Lexedia/VixB... has it right i think
a screenshot of a discord preview of a link created by vixbluesky. it has a nicely condensed count of replies, retweets, and likes, unlike what seb posted where the count types are spelled out and take up a lot of room
200
Tan @tanho.ca · 16/07/2025
mildly deprecated but you can use ggplot2::qplot(mtcars$hp, mtcars$cyl) to quiet those naysayers 😅
output plot from ggplot2::qplot(mtcars$hp, mtcars$cyl)
010
Tan @tanho.ca · 23/06/2025
I think I would have switched from a named list to a named character vector and then used subsetting but I'm not sure what the sticking point is from the various replies I'm reading
likert_mapping <- c( # named character vector here
  "1" = "Strongly disagree",
  "2" = "Disagree",
  "3" = "Neutral",
  "4" = "Agree",
  "5" = "Strongly agree"
)

# Create fake data
tibble::tibble(
    question = c("pr1", "pt3", "qr6", "cc2", "pr2", "qr8", "pt5"),
    score = c("1", "2", "1", "2", "5", "8", "4")
) |> 
  dplyr::mutate(
    score_label = likert_mapping[as.character(score)]
  )
120
Tan @tanho.ca · 20/06/2025
Had fun on VizBuzz last night - fitting that both @johnbedwards.io and I landed the nfl viz, although I didn't do as well as I'd hoped considering the nflplotR advantage. In the end I was done in by the imagemagick algo :( Thank you @nickwan.bsky.social and @libbyheeren.bsky.social for hosting!
My attempt of the nfl stadium plot in 40 minutesgoal dataviz, it's an nfl stadium plot showing the distance and direction of each nfl stadium from the city's downtown
241
Tan @tanho.ca · 12/06/2025
built my first raspberry pi as a spotify connect player for my dumb bookshelf speakers last night, that late night eureka feeling is just incredible
0231
Tan @tanho.ca · 09/06/2025
Got to see the Canada vs Japan women’s volleyball game over the weekend, aka holy crap the Yukiko Wada show
030