hrbrpkgs: list Bob Rudis' packages

Recently I needed to count lines of code for a project at work work (this is an expression of the person honored in this post), and happened to discover that Bob Rudis had started an R package wrapping the Perl CLOC script. Of course! He has packages for a lot of things! And he’s always ready to help: after I asked him a question about the package, and made a pull request to renew its wrapped CLOC script, he made it all pretty and ready-to-go!

He himself defined his Stack Overflow Driven-Development (SODD) workflow in a blog post: someone will ask him a question on Stack Overflow, and he’ll write a long answer eventually becoming a package, that will or will not make it to CRAN… Which is the motivation of this blog post. How can I output a list of all packages Bob has on GitHub?

The magic of GitHub API V4, ghql and jq/jqr

I’ve recently started using GitHub API V4 instead of V3, that you might have seen on this blog in my post about random seeds and my post about initial commit messages. I’ll probably introduce my workflow more formally and extensively elsewhere but here are a few appetizers:

The results of my recent discoveries, and my using the API for work work stuff, can be found in my very nascent/work-in-progress ghrecipes package. By the way if you’re after something similar i.e. high-level, but for GitHub API V3, check ghapi out.

Using my own GitHub package

I first retrieved all GitHub repositories of Bob’s. My ghrecipes package iterates for you thanks to a piece of code by Scott Chamberlain.

You’ll note some things could be made easier if the output of my own functions was a bit different so you can imagine that yes, I’ll break my own package from time to time, but at least this gives a taste of what can be done.

You can read the code of my ghrecipes::get_repos function on GitHub.

repos <- ghrecipes::get_repos("hrbrmstr")
repos <- tidyr::separate(repos, name, into = c("owner", "repo"),
                         remove = FALSE, sep = "/")
# remove forks
repos <- dplyr::filter(repos, !is_fork)

I found 274 repos.

head(repos) %>%
name owner repo created_at updated_at description is_fork
hrbrmstr/dbClone hrbrmstr dbClone 2011-04-17 03:04:54 2017-11-12 15:07:47 OS X native-port of Moloch’s dbClone utility ( FALSE
hrbrmstr/slopegraph hrbrmstr slopegraph 2012-05-29 01:15:20 2017-10-19 08:00:32 A ‘slopegraph’ (‘table-chart’) generator in Python using Cairo/Raphaël. Currently handles a two column chart with many output options. Look at the ‘/examples’ directory for sample configurations, data files and output formats. FALSE
hrbrmstr/sandy hrbrmstr sandy 2012-10-28 13:09:36 2017-07-04 11:42:37 An example of how to plot path & cone of Hurricane SANDY in R… FALSE
vz-risk/veris vz-risk veris 2013-01-04 17:19:19 2018-03-02 11:41:31 Vocabulary for Event Recording and Incident Sharing (VERIS) FALSE
hrbrmstr/netintel hrbrmstr netintel 2013-02-08 17:21:15 2018-02-12 18:08:53 A collection of “network intelligence” utilities for R. ASN info, IP reputation, etc. FALSE
vz-risk/public-data vz-risk public-data 2013-03-07 13:46:19 2018-02-07 20:40:36 data from publicly disclosed incidents FALSE

Now as you see I’m nearly done since my own function returns the GitHub description of the repo (I had forgotten about that when starting to write this post!) and since Bob seems to often write a description for his repos which we should all do; but I only want packages. Fear not, I already have a recipe for this as well, is_package_repo! It looks whether a repo contains man, R, DESCRIPTION and NAMESPACE. Now I’m pretty sure the code below could be hugely simplified, but I’m in a hurry.

is_pkg <- function(df){
  tibble::tibble(owner = df$owner,
                 repo = df$repo,
                 is_pkg = ghrecipes::is_package_repo(owner, repo))

are_pkgs <- split(repos, repos$name) %>%

are_pkgs <- dplyr::left_join(repos, are_pkgs, by = c("owner", "repo"))
hrbrpkgs <- dplyr::filter(are_pkgs, is_pkg)

I found 170 packages whose whole table I’ll put at the very end of this post. I can’t wait to browse it!

The end?

What can you do with this list? Explore it to find the package(s) you didn’t know you needed, or the package(s) you’d like to contribute to, because I can recommend contributing to Bob’s packages, and he encourages people to!

And as promised here is the table!

hrbrpkgs %>%
  # thanks
  dplyr::mutate(link = glue::glue("{repo}"),
                link = glue::glue("<a href='{link}'>{link}</a>")) %>%
  dplyr::mutate(created_at = lubridate::as_date(created_at),
                updated_at = lubridate::as_date(updated_at)) %>%
  dplyr::rename(package = repo) %>%
  dplyr::select(package, description, created_at, updated_at, link) %>%
  dplyr::arrange(package) %>%
package description created_at updated_at link
adobecolor Use Adobe swatch files as R color palettes 2015-03-20 2016-05-22
albersusa Tools, shapefiles & data to work with an “AlbersUSA” composite projection in R 2016-03-28 2018-03-03
algorithmia R interface to the Algorithmia API 2016-07-22 2017-05-15
asam :anchor: R package providing tools to access, download, update, process and visualize Anti-shipping Activity Messages (ASAM) Database Files 2015-09-19 2017-12-29
berate Provide Insightful Motivation During Interactive R Sessions 2015-10-29 2017-09-10
bismer Generate Shakespearean Insults with R 2017-03-26 2017-07-19
blocklist :guardsman: Tools to Work with the 'API' in R 2016-04-04 2016-04-04
bloomsky Tools to Work with ‘BloomSky’ Weather Station Data in R 2017-04-19 2017-12-08
bom Tools to Identify and Work with Byte Order Marks in R 2016-10-01 2017-11-30
burrp :bookmark: Tools to Import and Process ‘PortSwigger’ ‘Burp’ Proxy Data 2017-02-18 2017-07-08
cdcfluview :mask: R package to Retrieve U.S. Flu Season Data from the CDC FluView Portal (WHO & ILINet) 2015-01-11 2018-01-27
censys R interface to the Censys “cyber”/scans search engine • 2016-01-11 2017-12-21
cfhttr :construction_worker: Workaround Cloudflare Anti-DDoS Protection 2017-12-10 2018-01-08
cloc R package to the perl cloc script (which counts blank lines, comment lines, and physical lines of source code in source files/trees/archives) 2015-07-02 2018-02-17
cloudcidrs Tools to Obtain and Work with Cloud Provider CIDR Blocks in R 2016-10-04 2016-11-06
crafter :microscope: An R package to work with PCAPs 2015-08-13 2018-02-04
curlconverter :curly_loop: :arrow_right: :heavy_minus_sign: Translate cURL command lines into parameters for use with httr or actual httr calls (R) 2016-01-28 2018-01-15
cymruservices :dragon: package that provides interfaces to various Team Cymru Services 2015-07-22 2017-05-15
czdaptools R tools for downloading zone data from ICANN’s CZDS application 2015-10-02 2018-01-13
darksky :cloud: R interface to the Dark Sky API 2016-09-21 2017-12-29
databox Tools to Work with the databox API in R 2016-08-01 2017-05-15
ddsecblog knitr format for ddsec blog posts 2015-10-06 2015-10-06
decapitated Headless ‘Chrome’ Orchestration in R 2017-05-02 2018-02-13
decapitated Chrome headless but rly websockets 2017-05-25 2018-01-08
devd Install, Start and Stop ‘devd’ Instances from R 2017-04-29 2017-05-09
dmarc Tools to Machinate ‘DMARC’ in R (WIP libopendmarc wrapper) 2018-02-07 2018-02-07
docxtractr :scissors: Extract Tables from Microsoft Word Documents with R 2015-08-24 2018-02-17
domaintools R API interface to the DomainTools API 2015-08-09 2016-01-01
dtupdate The dtupdate package has functions that try to make it easier to keep up with the non-CRAN universe 2014-08-21 2018-01-24
epidata :chart_with_downwards_trend: Tools to Retrieve Economic Policy Institute Data Library Extracts in R 2017-01-04 2017-11-28
exiv :camera: Read and Write ‘Exif’ Image/Media Tags with R 2017-11-14 2018-02-17
fishpals A package to generate fish color palettes 2017-09-21 2017-11-12
flowdockr R package to work with the Flowdock API 2016-02-12 2017-11-12
forceaccounted The Force, Accounted (in R) 2016-01-08 2018-01-08
freepst An ‘rJava’ wrapper around ‘java-libpst’ to read PST/OST files 2017-08-23 2018-02-21
gdns Tools to work with the Google DNS over HTTPS API in R 2016-04-09 2017-07-10
getdns 🕵🏽‍♀️ Query Domain Name System Using the ‘getdns’ Application Programming Interface 2018-01-25 2018-01-25
ggalt :earth_americas: Extra Coordinate Systems, Geoms, Statistical Transformations & Scales for ‘ggplot2’ 2015-09-08 2018-03-01
ggcounty :globe_with_meridians: Generate ggplot2 geom_map county maps 2014-04-17 2017-12-15
gghazard Improved Base and Grid Plots for Survival Hazard Cox Regression 2015-08-31 2017-12-03
greynoise Query ‘GreyNoise Intelligence ‘API’ in R 2017-11-13 2018-01-29
gzmem :arrow_double_up::arrow_double_down: Partial resurrection of the Rcompression package since memCompress/memDecompress are brain dead 2016-09-26 2017-11-30
harbor An R package for controlling docker containers on local and remote hosts 2014-10-22 2018-02-21
hgr :running: Tools to Work with the ‘Postlight’ ‘Mercury’ ‘API’ — — in R 2017-04-19 2017-11-12
hilbert super basic non-vectorized hilbert Rcpp example for an SO question 2017-01-15 2017-01-15
hilbertv4 Create and Annotate ‘Hilbert Curve’ ‘IPv4’ Heatmaps in R 2018-02-05 2018-03-02
hrbraddins Additional Addins for RStudio 2017-03-12 2018-01-26
hrbrmisc personal R pkg 2015-08-05 2017-12-16
hrbrmiscpp C/C++-backed R functions that have no real home yet 2016-06-30 2017-03-22
hrbrmrkdn Personal R Markdown templates 2016-01-20 2016-12-06
hrbrthemes :lock_with_ink_pen: Opinionated, typographic-centric ggplot2 themes and theme components 2017-02-11 2018-03-01
hrbrthemeslite hrbrthemes w/o spell check 2017-02-27 2017-02-27
htmltidy :do_not_litter: Tidy Up and Test XPath Queries on HTML and XML Content in R 2016-05-06 2018-02-21
hubway R interface to the Hubway “API” 2016-07-14 2016-07-14
humanparser :person_with_blond_hair: R package to decompose full (human) names into component parts 2015-08-20 2015-11-21
hyphenatr R interface to Hunspell hyphenation 2016-03-14 2017-04-03
infermedica (migrated from gitlab to keep a copy in the event intermedica decides to be stupid and violate AGPL) 2018-01-26 2018-01-26
ipapi An R package to geolocate IPv4/6 addresses and/or domain names using’s API 2015-03-09 2017-11-06
iptools :fork_and_knife: A toolkit for manipulating, validating and testing IP addresses and ranges, along with datasets relating to IP addresses. While it primarily has support for the IPv4 address space, more extensive IPv6 support is intended. 2014-08-29 2018-02-23
irced :phone: Putting the “R” into IRC 2016-09-24 2017-10-25
jasmine simple json parser (just a parser) 2016-04-05 2016-09-12
jericho :notebook_with_decorative_cover: Extract plain or structured text from HTML content in R 2017-09-04 2018-02-14
jerichojars Java Archive Wrapper Supporting the ‘jericho’ R Package 2017-09-05 2017-11-12
Johnson NA 2017-11-22 2017-11-22
jsonview JSON pretty printer & viewer in R 2016-01-22 2018-03-02
jwatjars Java ‘.jar’ Files for ‘jwatr’ 2017-08-18 2017-11-12
jwatr :card_index: Tools to Query and Create Web Archive Files Using the Java Web Archive Toolkit in R 2017-08-18 2017-11-24
keybase :japanese_castle: Tools to Work with the ‘Keybase’ ‘API’ 2017-03-04 2018-02-11
knitrengines An R package to collect and seamlessly add new language engines to knitr 2015-09-07 2017-11-03
kumo wordclouds (more info soon) 2018-01-03 2018-01-03
kumojars wordclouds (more info soon) 2018-01-03 2018-01-03
lineworkmaps Use Project Linework maps easily in R 2015-07-21 2017-02-21
localgeo small R package for geocoding of US city/state to lon/lat 2015-01-09 2017-11-26
lodes Retrieve Data from LEHD Origin-Destination Employment Statistics Server in R 2017-01-20 2018-02-23
longurl :information_source: Small R package for the URL Expander API 2015-06-23 2017-11-12
maRalago Is 🍊 at Mar-a-Lago 2017-04-14 2017-10-23
markdowntemplates :white_check_mark::small_red_triangle_down: A collection of alternate R markdown templates 2016-02-04 2018-03-03
melting5jars MELTING 5 jars 2018-01-06 2018-01-10
metis Helpers for Accessing and Querying Amazon Athena using R, Including a lightweight RJDBC shim 2017-05-22 2018-02-26
metricsgraphics :chart_with_upwards_trend: htmlwidget interface to the MetricsGraphics.js D3 chart library 2015-01-05 2017-12-22
mgrs :globe_with_meridians: An R Package to Convert ‘MGRS’ (Military Grid Reference System) References To and From Other Coordiante Systems 2017-04-09 2017-10-30
mhn :honey_pot: Analyze and Visualize Data from Modern Honey Network Servers with R 2015-08-22 2017-05-12
moviemeter Tools to work with the MovieMeter API in R 2016-10-08 2016-10-09
mqtt :telephone_receiver: Interoperate with ‘MQTT’ Message Brokers with R 2017-12-14 2017-12-20
mrt Tools to Retrieve and Process ‘BGP’ Files in R 2016-07-18 2017-10-19
msgxtractr :card_index: Extract contents from Outlook ‘.msg’ files in R 2017-08-23 2018-02-24
mtblr R package to work with mtbls 2016-04-23 2016-04-24
myip Tools to Determine Your Public ‘IP’ Address in R 2016-07-04 2017-05-16
mywx Tools to Query the ‘MetMalaysia’ Web Service ‘API’ 2017-08-13 2017-11-19
ndjson :hotsprings: Wicked-Fast Streaming ‘JSON’ (‘ndjson’) Reader in R 2016-09-07 2018-01-03
netintel A collection of “network intelligence” utilities for R. ASN info, IP reputation, etc. 2013-02-08 2018-02-12
newsflash Tools to Work with the Internet Archive and GDELT Television Explorer in R 2017-01-26 2018-03-01
newsfreq R package to search for keyword frequencies in news articles via 2015-01-31 2016-11-12
nifffty Small R package to post events to IFTTT Maker channel/recipes 2015-06-19 2018-01-02
nominatim :earth_asia: Tools for Working with the ‘Nominatim’ API in R 2015-07-28 2018-02-06
notary :lock_with_ink_pen::package: Signing & verification of R packages 2017-05-25 2017-12-24
ohby R interface to the ‘ohby’ URL & content shortener 2016-06-13 2016-06-13
omdbapi R package to access the OMDB API ( 2015-06-16 2018-01-14
opengraph Tools to Mine ‘Open Graph’-like Tags From ‘HTML’ Content 2017-12-25 2017-12-26
overpass :information_source: Tools to Work With the OpenStreetMap (OSM) Overpass API in R 2015-08-10 2018-01-21
pantone R package for Pantone colors of the year 2013-12-06 2017-11-12
passivetotal Useful tools for working with the PassiveTotal API in R 2015-06-11 2017-10-04
passwordrandom :lock: Access the API in R 2015-08-02 2017-10-23
pastebin :clipboard: Tools to work with the pastebin API in R 2017-02-05 2017-05-15
pdfbox Create, Maniuplate and Extract Data from PDF Files (R Apache PDFBox wrapper) 2017-10-22 2018-01-02
pdfboxjars Java ‘.jar’ Files for ‘pdfbox’ 2017-10-22 2017-11-14
pigeon :horse: Parse Portable Game Notation (‘PGN’) Files in R 2017-09-25 2017-12-03
pluralize An R package to “Pluralize and Singularize Any Word” 2016-01-06 2017-12-25
porc :boar: Tools to Work with ‘Snort’ Rules, Logs and Data 2017-12-08 2017-12-30
pressur ä·® Query and Orchestrate the ‘WordPress’ ‘API’ with R 2017-12-27 2018-01-04
punycode R code to work with punycode domains 2015-06-03 2017-10-23
qrencoder :white_square_button: Make QR codes in R via libqrencode 2015-08-02 2018-01-24
r7snr R tools to work with Rapid7 Sonar scans 2016-07-15 2017-05-15
radb :microscope: Tools to Query the ‘Merit’ ‘RADb’ Network Route Server 2017-04-02 2017-04-07
radviz R htmlwidget for radviz! 2016-03-03 2017-12-08
rappalyzer :microscope: :: WIP :: R port of Wappalyzer 2017-09-22 2017-10-02
RBerkeley :cat: Oracle ‘Berkeley DB’ Interface for R 2015-07-27 2017-08-14
rdatainfo helper pkg for the macOS QuickLook plugin 2016-08-06 2016-08-06
resolv ldns DNS resolver wrapper libary for R 2014-04-26 2017-11-16
Rforecastio :cloud: Simple R interface to weather data 2013-09-08 2017-12-08
rgeocodio Tools to Work with the API 2017-03-05 2017-12-25
rosette Tools to Work with the Rosette API in R 2016-10-10 2017-05-16
rpwnd :no_good: The Most Benignly Malicious R Package on the Internet 2017-03-31 2018-01-31
safebrowsing R interface to the XHR Google Safe Browsing “API” 2016-03-05 2016-03-05
sanders WIP!!! — Web-scraping and Web-crawling Content Parsing, Validation and Sanitization Helpers 2017-09-21 2017-11-12
satcat :satellite: Tools to Work with the ‘CelesTrak’ Satellite Catalog API in R 2017-01-14 2017-12-26
saucy Searching for Automorphisms in Underlying CNF, yes? 2017-12-17 2017-12-27
scamtracker R pacakge interface to the BBB ScamTracker : 2016-01-11 2017-04-08
scimple :heavy_minus_sign::heavy_minus_sign::heavy_minus_sign::large_orange_diamond::heavy_minus_sign::heavy_minus_sign: Tidy Simultaneous Confidence Intervals for Multinomial Proportions 2017-03-03 2018-02-08
securitytxt 🔐 Identify and Parse Web Security Policies Files in R 2017-10-09 2017-11-12
sentimental Tools to Work with the ‘’ API in R 2016-07-24 2017-05-20
sergeant :guardsman: Tools to Transform and Query Data with ‘Apache’ ‘Drill’ 2016-06-03 2018-03-01
shodan :new_moon: R package to work with the Shodan API 2015-08-07 2018-02-16
slackr :hash: A package to send webhook API messages to channels/users from R 2014-09-04 2018-03-02
SnakeCharmR SnakeCharmR - R and Python Integration 2016-05-18 2017-04-06
speedtest :triangular_ruler: Measure upload/download speed/bandwidth for your network with R 2017-11-10 2018-01-02
spiderbar Lightweight R wrapper around rep-cpp for robot.txt (Robots Exclusion Protocol) parsing and path testing in R 2017-08-14 2018-01-02
splashr :sweat_drops: Tools to Work with the ‘Splash’ JavaScript Rendering Service in R 2017-02-03 2018-01-03
ssllabs Tools to Work with the SSL Labs API in R 2016-06-05 2016-07-25
sslsaran Tools to Work with Certificate Transparency (‘CT’) Logs and Various ‘CT’ ‘APIs’ 2018-02-18 2018-02-20
statebins Alternative to choropleths of US States ala 2014-08-26 2018-03-01
streamgraph :wavy_dash: htmlwidget for creating streamgraph visualizations in R 2015-02-12 2018-01-12
stringore Tidy Regular Expression Operations with Extensive Character Encoding Support 2018-01-01 2018-01-03
swatches 🎨 Read, Inspect, and Manipulate Color Swatch Files 2015-03-21 2018-02-02
taucharts :bar_chart: An R htmlwidget interface to the TauCharts javascript library 2015-08-03 2017-09-08
terminator Rcpp implementation of day/night terminator generator 2018-01-25 2018-01-27
threatcrowd R tools to work with the ThreatCrowd API 2016-01-20 2017-08-18
tidyweb Easily Install and Load Modern Web-Scraping Packages 2017-07-04 2018-02-21
tinyjs tinyjs R wrapper pkg 2016-04-05 2016-10-29
tlsobs :telescope: Tools to Work with the ‘Mozilla’ ‘TLS’ Observatory ‘API’ in R 2017-05-14 2017-12-11
triage Tools to Aid in Debugging Issues Across R Sessions 2017-11-23 2017-11-23
uaparserjs Parse Browser ‘User-Agent’ Strings into R Data Frames 2016-08-04 2018-02-08
urltools Elegant URL handling in R 2014-12-07 2018-03-03
vegalite R ggplot2 “bindings” for Vega-Lite 2016-02-23 2018-03-01
verisr R package for working with VERIS data 2013-06-03 2017-07-14
verisr R package for working with data stored within VERIS framework 2013-09-20 2018-02-16
voteogram U.S. House and Senate Voting Cartogram Generators in R 2017-05-06 2017-12-25
waffle :maple_leaf: Make waffle (square pie) charts in R 2015-03-18 2018-03-01
wand :tophat: R interface to libmagic - returns file mime type 2016-08-12 2018-01-24
warc :card_index: Tools to Work with the Web Archive Ecosystem in R 2016-09-07 2018-02-18
wayback :rewind: Tools to Work with the Various Internet Archive Wayback Machine APIs 2017-02-26 2018-01-28
webhose :hammer: Tools to Work with the ‘’ ‘API’ in R 2017-09-27 2017-12-29
whoisxmlapi :grey_question: R package to interface with the service 2015-08-09 2015-08-09
wondr Tools to Work with there CDC WONDER API in R 2016-10-04 2017-12-29
xlsxtractr Extract Things From Excel (xlsx) Files in R 2016-09-16 2018-02-10
xmlview :page_with_curl: Format, Query and Pretty Print ‘HTML’/’XML’ Content in R (RStudio viewer or browser) 2016-01-12 2017-11-12
xslt lightweight XSLT processing package for R based on xmlwrapp 2015-07-08 2017-11-12
zellingenach A visual exploration of the spatial patterns in the endings of German town and village names in R 2016-01-03 2017-08-09
zkcmd Tools to Administer ‘Zookeeper’ Instances with Four-letter Commands in R 2017-01-01 2017-01-03
zoneparser A V8-powered R package to parse Domain Name System (DNS) zone files 2015-10-01 2015-10-01