Sign in

James Balamuta

@coatless.bsky.social
1.2K followers 16 following 490 posts

omnipresent explorer of the unknown, fashionably caffeinated informatics phd, amorous cavalier. design, build, analyze. #rstats on #macos + #webr and #python with #pyodide

PostsRepliesMedia
James Balamuta @coatless.bsky.social · 16h
The spice must flow.
010
James Balamuta @coatless.bsky.social · 16h
The best time to play with webR was 3 years ago. The second best time is now 😀 Looking forward to seeing what you come up with!
000
James Balamuta @coatless.bsky.social · 17h
Unfortunately, no. Shiny requires a lot of special setup and has its own dedicated tools for this specific task via shinylive under r-shinylive and quarto-shinylive extensions/packages. We could have a mode toggle that would allow it in future versions. I'm not sure there's a need though.
120
James Balamuta @coatless.bsky.social · 04/10/2026
webrarian runs on webR, the WebAssembly distribution of R, by the webR team. Version 0.1.0 is on GitHub. pak::pak("coatless-wasm/webrarian") Guides and reference coatless-wasm.github.io/webrarian/ Source github.com/coatless-was...
coatless-wasm.github.io
webrarian
Build websites where R runs in the browser, with your packages and files in place
130
James Balamuta @coatless.bsky.social · 04/10/2026
No compute server sits behind the site. A static host hands out the files and the reader's browser does the computing, so GitHub Pages, Netlify, Cloudflare Pages or your own web server can publish it.
A card for the R package webrarian. Very large text reads "R in the browser". Under it, a red stamp tilted like a library date stamp reads "NO COMPUTE SERVER". A line says "A static host hands out the files. The reader's browser does the computing." Four dark labels name places to publish: GitHub Pages, Netlify, Cloudflare Pages and your own server. The webrarian hex logo, a brick-red library shelf, sits on the right.
191
James Balamuta @coatless.bsky.social · 04/10/2026
The page is a small workspace, with an editor, an R console, your files and your plots. Visitors run your script, change it, and share their version as a link. Their edits stay in their own browser. There is a live demo to try. coatless-wasm.github.io/webrarian/de...
A card for the R package webrarian. Text reads "An editor, a console, your files and your plots. Readers run your script, change it, and share their version as a link." Beside it, a browser window shows the workspace: a script named lab.R in an editor with Run, Run All and Share buttons, an R console under it with a summary table, an Environment panel listing a data frame named cars, and a scatterplot in the Plots tab.
143
James Balamuta @coatless.bsky.social · 04/10/2026
Five steps take a folder to a site. catalog() starts a collection, acquire_package() and acquire_file() fill it, bind() builds the site, reading_room() previews it, and circulate_via_github() sets up publishing on GitHub Pages. Watch it in 100 seconds. youtu.be/Ujoa-zBFKpY
A card for the R package webrarian. Large text reads "Five steps from folder to site". Under it, a dark R console lists the calls in order. Step 1, catalog(), starts a collection. Step 2, acquire_package(c("dplyr", "ggplot2")) and acquire_file(c("data/", "scripts/*.R")), adds packages and files. Step 3, bind(), builds the site. Step 4, reading_room(), previews it. Step 5, circulate_via_github(), sets up publishing.
150
James Balamuta @coatless.bsky.social · 04/10/2026
webrarian is a new R package. It turns a folder of R scripts and data into a static website where R runs in the visitor's browser, with no compute server and nothing to install. blog.thecoatlessprofessor.com/posts/introd... #rstats #webr #webassembly
A card for the R package webrarian. Large text reads "A folder in. A website out." On the left, a small card lists a folder named lab-01 holding lab.R, setup.R and a data folder. A red arrow points from it to a browser window that shows a scatterplot of car weight against miles per gallon with brick-red points. The address coatless-wasm.github.io/webrarian is on the card.
415865
James Balamuta @coatless.bsky.social · 27/09/2026
Lastly, for the tablet users out there, we've greatly improved the classic four-pane Workspace layout. If you haven't yet, try out webRoid on your Android 15 or later Phone or Tablet! Google Play: play.google.com/store/apps/d... Release write-up: blog.thecoatlessprofessor.com/posts/webroi...
Promotional card for webRoid, headed "See your code and its results side by side", with the line "The Workspace shows your script, the console, your variables and a plot at once." A tablet in light mode shows four panes: an R script about study time and exam scores, the Console with a fitted model, the Environment with a function and values, and three plot thumbnails.
020
James Balamuta @coatless.bsky.social · 27/09/2026
webRoid also now allows you to request a "Copy Files Back from R" to sync files to your folders. Plus, you can now tap an excel file opens Import Dataset, which reads Excel once readxl is installed.
The Files screen on a phone in light mode, after Copy Files Back from R. The project lists analysis.R, cars.rds, mtcars.csv, sample_data.csv and scatter_plot.R, with cars.rds the file R just wrote, and a message at the bottom reads "Copied 1 file from R."
100
James Balamuta @coatless.bsky.social · 27/09/2026
Starting in webRoid v1.1.1, you can restart R instead of restarting the app! After a minute, a banner says R is still working and offers a fresh session. Your variables in the current session will go away though and need to be redefined!
The top of webRoid's Console on a phone in light mode, after running Sys.sleep(120), a command that waits two minutes. A pink banner titled "R Session Unresponsive" says R is still running a command past the time limit, with Check Again and a red Restart R button. A red line below says R did not finish within 60 seconds and is still running.
100
James Balamuta @coatless.bsky.social · 27/09/2026
One heads-up before you update... The new R version can’t load R packages installed by the old one. So, the app clears them the first time it opens. A notice lists them, and one tap on Reinstall brings back each one the webR repository has. R on PC requires the same when going from 4.5 to 4.6.
The top of webRoid's Console on a phone in light mode. A purple notice, "Packages removed by the update", says the app now runs webR 0.6.0, which can't load packages from the previous version, so 15 were removed, including ggplot2, lme4 and mice. It offers Show All, Dismiss and Reinstall. Below, library(ggplot2) fails with "there is no package called ggplot2".The top of webRoid's Packages screen on a phone in light mode, after tapping Reinstall. A notice reads "Reinstall finished. 2 packages are installed again. 1 is no longer in the webR repository: waffle." Below it, the Installed tab lists base, datasets, grDevices and graphics, each loaded at version 4.6.0.
100
James Balamuta @coatless.bsky.social · 27/09/2026
webRoid 1.1.1 is on Google Play. The app that runs R on your Android phone or tablet moves up to R 4.6.0, and its charts are now the kind you’re allowed to poke. App: play.google.com/store/apps/d... Docs: webroid.caffeinatedmath.com #rstats #webr #android #webassembly
Promotional card for webRoid on a dark navy background, headed "Make interactive charts", with the line "Open a plotly chart from your Workspace, then zoom and pan it with your fingers." A tilted tablet in dark mode shows a plotly scatter plot titled Weight vs mileage, its points colored pink, green and blue for cars with 4, 6 and 8 cylinders.
161
James Balamuta @coatless.bsky.social · 23/09/2026
{webroid} v1.1.0 update is coming soon to the Play Store for review. This boosts the version up to R 4.6.0 (wasm). However, we are lacking the ability to handle curl requests despite webR advances on device due to limitations with AndroidView. issues.chromium.org/issues/40914...
issues.chromium.org
Chromium
000
James Balamuta @coatless.bsky.social · 22/09/2026
New \bibshow feature in R 4.6's details. cran.r-project.org/doc/manuals/...
cran.r-project.org
Writing R Extensions
Writing R Extensions
000
James Balamuta @coatless.bsky.social · 22/09/2026
{bibtex} 0.5.3 is on CRAN with better parsing of: 1. Comment lines 2. BibLaTeX dates and journaltitle Fun fact: base R 4.6 uses {bibtex} for its new \bibshow help-page citations. GitHub: github.com/ropensci/bib... #rstats #rOpenSci #BibTeX #LaTeX
blog.thecoatlessprofessor.com
180
James Balamuta @coatless.bsky.social · 17/09/2026
{macrtools} v0.0.8 is out, with macOS 27 support. Install the compiler tools R needs on a Mac, right from the R console. Site: mac.thecoatlessprofessor.com/macrtools/ GitHub: github.com/coatless-mac... #rstats #macos
mac.thecoatlessprofessor.com
macrtools: R Development Toolchain for macOS
An R package to install and manage the complete R development toolchain on macOS, including Xcode CLI, gfortran, and essential development libraries.
070
James Balamuta @coatless.bsky.social · 08/09/2026
Responses will be delayed for a couple of weeks.
Carriage waiting for green lightView out from the RockiesView out from the Rockies
030
James Balamuta @coatless.bsky.social · 06/09/2026
Binary shenanigans themselves are likely a large attack vector now.
010
James Balamuta @coatless.bsky.social · 05/09/2026
both {webrios} and {webroid} will be heading to there respective app stores in about 2 weeks.
120
James Balamuta @coatless.bsky.social · 01/09/2026
Install at the gate, write Python at cruising altitude without worrying about plane wifi. Pyodios 1.1.0 makes it happen with #Python 3.14 via #Pyodide (#WebAssembly) on #iOS 26+. apps.apple.com/us/app/pyodi...
Two iPhones side by side: matplotlib code and its chart in a notebook on the left, six finished charts in the Plots gallery on the right.
030
James Balamuta @coatless.bsky.social · 30/08/2026
{Pyodios} v1.1.0 has been sent over to the App Store for approval. It includes a host of fixes, features, and a bump from Python v3.13 to v3.14. This requires iOS 26 or above. Once approved, we'll be pulling back the initial Pyodios v1.0.0 version to avoid it being available on iOS 17/18 devices.
041
Reposted by James Balamuta
The R Foundation @r-foundation.bsky.social · 19/08/2026
We invite #RStats users to contribute to a fund dedicated to helping the family of Tomáš Kalibera following his untimely death in April. Find out more and donate here: www.r-project.org/foundation/k...
r-project.org
R: Tomáš Kalibera Family Fund
04434
James Balamuta @coatless.bsky.social · 10/08/2026
Yup. Already in progress.
010
James Balamuta @coatless.bsky.social · 10/08/2026
Nothing says your niche R Observatory project has made it like a hosting provider gently asking if you are aware you are being attacked. Happy Monday!
Screenshot of an email from a hosting provider that reads: "Hello, This email is being sent to inform you that your site r-observatory.thecoatlessprofessor.com is currently receiving an unusually high volume of traffic from a large number of IP addresses simultaneously. This pattern is consistent with a distributed denial-of-service (DDoS) attack or aggressive bot/crawler activity, and it is generating" (text cuts off).
270
James Balamuta @coatless.bsky.social · 08/08/2026
Five runtime strategies, both languages: offline shinylive (WebR/Pyodide), a bundled interpreter, the system install, auto-download on first launch, or a container. Several apps can share one launcher. Full tour: blog.thecoatlessprofessor.com/posts/reintr...
blog.thecoatlessprofessor.com
Reintroducing shinyelectron – TheCoatlessProfessor
020
James Balamuta @coatless.bsky.social · 08/08/2026
{shinyelectron} is on CRAN. install.packages("shinyelectron") Turn an R or Python Shiny app into a desktop app your users double-click. macOS, Windows, Linux. One export() call builds the installer. cran.r-project.org/package=shin... #rstats #python #rshiny #pyshiny
cran.r-project.org
shinyelectron: Export 'Shiny' Applications as Desktop Apps using 'Electron'
Provides tools to export 'Shiny' applications written in 'R' or 'Python' as standalone desktop applications using 'Electron'. The applications run as native, cross-platform programs. Depending on the ...
3429
James Balamuta @coatless.bsky.social · 08/08/2026
And everything in one place... CRAN: cran.r-project.org/package=paintr Source: github.com/coatless-rpk... Release notes/Blog: blog.thecoatlessprofessor.com/software-rel...
cran.r-project.org
paintr: Create Graphics of 'R' Data Structures
Draws teaching diagrams of the contents of common 'R' data structures (vectors, matrices, data frames, lists, and arrays) so their shape and values can be read at a glance. Two backends render the sam...
000
James Balamuta @coatless.bsky.social · 08/08/2026
Every painter has a gpaint_*() twin that returns a real ggplot, so it works with ggsave() and patchwork() like other ggplot2 extension packages. Thus, you get the same drawing either way, in four palettes.
A four-up comparison showing one data frame drawn by paintr in each of its four palettes. Three modern cards, mint, slate, and warm, share the refined look: a tinted header band, bold column names over lighter type tags, hairline borders, and softly rounded corners, each in its own colour family of cool green, cool grey, and warm amber. The fourth, classic, shows the original flat look with a hard black grid and square corners. All four draw the identical structure and the same labels, so only the styling differs. Both the base graphics and ggplot2 backends produce these identical cards because the style travels as data on the cell table.
100
James Balamuta @coatless.bsky.social · 08/08/2026
Formatting further aims to emphasize magnitude by showing significant figures, but the digits it drops go grey rather than vanishing, so 123456.789 still reads as a bold 123 with a faded 457 with decimals rounded if its a large number. NA is red. Inf is blue.
The vector 123456.789, one third, NA, Inf, and e drawn by paintr's paint_vector() as a horizontal row of five boxes in the mint palette, chosen to show how the package handles values that are awkward to print. The first box reads 123457 with the leading 123 in solid black and the trailing 457 in light grey, so the three significant figures stand out while the dropped digits stay visible and the magnitude is never hidden. One third shows as 0.333 and e as 2.72. NA is drawn in red and Inf in blue, so missing and infinite values are recognisable at a glance rather than blending into the numbers around them.
100
James Balamuta @coatless.bsky.social · 08/08/2026
show_indices = 'cell' stamps every matrix cell with the [row, column] that reaches it. Useful when the thing you are explaining is not the values but the addressing.
A matrix of the numbers 1 through 20, laid out in four rows and five columns and drawn by paintr's paint_matrix() with show_indices set to cell, in the mint palette. Every cell carries two things, the value itself and the bracketed row and column subscript that reaches it, running from bracket 1 comma 1 in the top left corner to bracket 4 comma 5 in the bottom right. Reading the picture and reading the code are the same act, so m[2, 4] stops being an incantation and becomes a box you can point at.
100
James Balamuta @coatless.bsky.social · 08/08/2026
You already know a data frame is a list whose elements happen to share a length. Your students do not. paint_list() and paint_data_frame() draw the same card until one element changes length and the bottom edge goes ragged. That is the lesson, drawn.
A list of three numeric elements named mpg, cyl, and gear, drawn by paintr's paint_list() in the mint palette. Each element becomes a column of boxed values under its own bold name and a grey dbl type tag, and every cell carries the double-bracket accessor that reaches it, such as bracket bracket 1 bracket bracket bracket 1. The mpg and gear columns run four rows deep, but cyl holds only three values, so its fourth cell is missing and the bottom edge of the card is ragged rather than square. That ragged edge is the whole difference between a list and a data frame, since a data frame is a list whose elements happen to share a length.
100
James Balamuta @coatless.bsky.social · 08/08/2026
Every R course has the whiteboard moment where you draw a vector as a row of boxes. {paintr} draws it and writes the accessor in each cell, so the diagram and the code are one object. Now on CRAN. #rstats blog.thecoatlessprofessor.com/software-rel...
The numeric vector 10, 20, 30, 40, 50 drawn by paintr's paint_vector() as a single horizontal row of five boxes in the mint palette. Each box holds its value in large type with the bracketed position it answers to underneath, running from bracket 1 through bracket 5. The third box, holding 30, is filled with a soft mint highlight, so the picture shows what x[3] selects rather than describing it. A caption above reads that the vector has 5 elements and is numeric.
1171
Reposted by James Balamuta
Martyn Plummer @martynplummer.bsky.social · 02/08/2026
JAGS 5.0.0 is released martynplummer.wordpress.com/2026/08/02/j...
22510
James Balamuta @coatless.bsky.social · 01/08/2026
Bum bum be-dum, bum bum be-dum bum www.youtube.com/watch?v=IGY5...
youtube.com
R & D Demo: Apptrope Data Science App Viewer
YouTube video by TheCoatlessProfessor
010
James Balamuta @coatless.bsky.social · 28/07/2026
webrios and pyodios let you run R and Python on #iOS, and new releases are close. Hit a bug? Missing something you need? Tell us before we cut the build: github.com/hjjb-llc/web... github.com/hjjb-llc/pyo... #rstats #python
github.com
GitHub - hjjb-llc/webrios: Issue tracker for webRios, an iOS app that runs R locally via WebAssembly
Issue tracker for webRios, an iOS app that runs R locally via WebAssembly - hjjb-llc/webrios
051
James Balamuta @coatless.bsky.social · 24/07/2026
Now on CRAN: {livelink}. Hand it a string, a file path, or your clipboard and get back a URL that opens a live R session in the browser, code already loaded. CRAN: cran.r-project.org/web/packages... Release notes: blog.thecoatlessprofessor.com/software-rel... #rstats
Three-panel diagram showing how livelink works. Panel 1, "You write R": a code block wrapping a short script in webr_repl_link(), where the script loads the mtcars dataset and plots mpg against weight with steelblue points. A caption notes that a string, a file path, or the clipboard work too. Panel 2, "You get a URL": a long webr.r-wasm.org link with the code encoded in the fragment. Panel 3, "They get a live R session": a browser window with four panes, an editor holding script.R, a file browser showing home/web_user/script.R, a terminal where source('script.R') and mean(mtcars$mpg) return 20.09062, and a pane displaying the resulting scatter plot.
0183
James Balamuta @coatless.bsky.social · 23/07/2026
What about the forthcoming quarto-hub.com that's moving into Release Candidate (RC) status for Quarto v2? c.f. bsky.app/profile/coat... github.com/quarto-dev/q...
github.com
quarto-hub: track invitations centrally · Issue #344 · quarto-dev/q2
"User X shares project Y with user Z" is a thing we could track in the same service that will track (user_id, project_set_automerge_id) tuples.
020
James Balamuta @coatless.bsky.social · 21/07/2026
RcppEnsmallen 0.3.11.0.1 is on CRAN, bringing ensmallen 3.11.0 and two new optimizers: DeltaBarDelta and MomentumDeltaBarDelta. blog.thecoatlessprofessor.com/software-rel... #rstats #rcpp #mlpack
blog.thecoatlessprofessor.com
RcppEnsmallen v0.3.11.0.1 Released - New DeltaBarDelta and MomentumDeltaBarDelta Optimizers – TheCoatlessProfessor
021
James Balamuta @coatless.bsky.social · 21/07/2026
{livelink} will also soon be expanded over to Python just after Pyodidarian launches as the later comes with a Pyodide powered Python enhanced 4-panel editor based off of webR's. #pyodide #livelink #python
Screenshot of the Pyodide REPL, a browser-based Python environment. The left pane shows example code using pandas and matplotlib; the right pane shows an Environment panel of variables and a Plots tab with a line chart titled "n squared."
023
James Balamuta @coatless.bsky.social · 21/07/2026
#webR and #Shinylive already share browser-runnable links from their editors. livelink is a small #Rstats wrapper around that idea: build those links from R (scripts & projects) and decode any of them back into files. GH github.com/coatless-rpk... Post blog.thecoatlessprofessor.com/programming/...
A split comparison of two ways to share an R project. The top path, 'send the instructions,' runs through install steps to a laptop marked 'runs, if it installs.' The bottom path, 'send a link,' goes straight to a browser already running the plot.A loop showing encode and decode as inverse steps. Three project files flow along webr_repl_project() into a single URL, then back along decode_webr_link() into the same three files.
092
James Balamuta @coatless.bsky.social · 19/07/2026
v0.2.0 coming soon with even more goodness.
010
Reposted by James Balamuta
hrbrmstr 🇺🇦 🇬🇱 🇨🇦🇧🇪 @hrbrmstr.mastodon.social.ap.brid.gy · 15/07/2026
#RStats #macOS folks => XQuartz has a security fix for folks running it on Apple Silicon www.xquartz.org/releases/XQuartz-2.…
xquartz.org
XQuartz - XQuartz 2.8.6
042
James Balamuta @coatless.bsky.social · 13/07/2026
Last week I gave a quick overview on R Observatory. Here's the longer write-up of what it does. blog.thecoatlessprofessor.com/posts/beginn... #rstats
blog.thecoatlessprofessor.com
The Beginnings of the R Observatory – TheCoatlessProfessor
062
James Balamuta @coatless.bsky.social · 12/07/2026
I know I'm sleeping, 'cause this dream's too amazin'
Screenshot showing Apptrope Data Science fixed with a Shiny for Python app open along with 10 other app frameworks.
052
Reposted by James Balamuta
Thomas Lumley @tslumley.bsky.social · 08/07/2026
Here's the official ad: we're hiring for a continuing position up to A/Prof. It's a large stats dept with a broad view of statistics. Research areas include probability, computing, ecology, astronomy, stats education, biostats. We care about teaching quality: students are our main funding source
jobs.smartrecruiters.com
Pouako|Lecturer to Senior Lecturer to Associate Professor - Te Kura Tatauranga|Department of Statistics
Company Description: Waipapa Taumata Rau | The University of AucklandTe Whare Pūtaiao | Faculty of Science is the leading science faculty in Aotearoa New Zealand and one of the largest in Au...
02012
Reposted by James Balamuta
coolbutuseless @coolbutuseless.bsky.social · 08/07/2026
Introducing {rdoom} - Play Doom in #RStats (in time for #UseR2026 !) github.com/coolbutusele... This is a demonstration that {tigerfb} + {nara} can do realtime interactivity in R! Includes: keyboard & mouse control, audio, cheat modes!
410132
James Balamuta @coatless.bsky.social · 11/07/2026
Fun guy to talk to. I didn't realize he had cancer 😔. Norm's Obit: cypresslawn.com/obituaries/n...
cypresslawn.com
Norman Saul Matloff | Cypress Lawn
It is with great sadness that we announce the passing of Dr. Norman Matloff on June 12, 2026, surrounded by his family. Norman had a...
060
Reposted by James Balamuta
Dirk Eddelbuettel @eddelbuettel.com · 11/07/2026
Norm Matloff (1948-2026) @matloff.bsky.social I was made aware of the post below made by his daughter. We lost another friend and valued long-time contributor the #Rstats community, gone far too soon, and sure to be missed. His memory will be a blessing.
Screenshot of post on X in the account of Norm Matloff in which his daughter announces his passing. Gone too soon, and sure to be missed.
313038
James Balamuta @coatless.bsky.social · 10/07/2026
Popups? There shouldn't be any as Adsense is locked to only banners (max 6, 1000px between _lowest_ possible setting). For PDF downloads, those are likely due to more of the Quarto-based content adsense is picking up and some scripts I wrote about regarding merging PDFs.
000