Racket News - Issue 49

Permalink: https://racket-news.com/2021/05/racket-news-issue-49.html

Welcome to the forty-ninth issue of Racket News.

At this point, you might have noticed the missing issues in April. For that I apologize. This year has not been treating me kindly and things got really bad during the month of April. This made me unable to focus on Racket News (and just about every else I regularly did). But fear not, things have improved considerably. Lets put that now behind our backs and move on with a new month and more Racket.

If you just recently subscribed to Racket News, Welcome! Although there was no issue during April, I try to have two issues per month. One published during the first Monday of the month and one on the Monday on or after the 15th of the month. So you can expect next issue to come on week 20, on the 17th or throughout that week.

Due to the missing issue last month, this issue has project stats for both March and April and you’ll notice the heroic effort of the community in cleaning stale issues, having closed 72 issues in the month of April alone.

The Racketfest videos are now up on Youtube as well and there’s a lot of catch up to do. So lets start!

Grab one ginormous coffee cup and enjoy!

Table of Contents

  1. What’s New?
  2. Racket Around the Web
  3. New Releases
  4. Call to Racket!
  5. DrRacket Quickscript of the day
  6. Project in the Spotlight
  7. Featured Racket Paper
  8. Upcoming Meetups
  9. Racket Project Statistics - March
  10. Racket Project Statistics - April
  11. Sponsors

What’s New?

Racket around the web

Do you blog about Racket? Let me know!

New Releases

If you know of library releases or maybe your own libraries and you want them to be featured, please let me know.

  • scribble-minted (pkg/src) is a scribble library for using pygmentize, by William Bowman.
  • koyo-sessions-redis (pkg/src) is a redis-based session store for Koyo, by Bogdan Popa.
  • resource-pool (pkg/src) is a generic blocking resource pool, by Bogdan Popa.
  • codespells-live (pkg/src) is the language for interacting with the codespells Twitch stream, by Stephen Foster.
  • intellij (pkg/src) is wrapper adding support for IntelliJ editor features, by aymanosman.
  • scramble (pkg/src) is an assorted utility libraries, by Ryan Culpepper.
  • raco-pkg-env (pkg/src) is a virtualenv like tool for Racket, by Sam Phillips.
  • cbor (pkg/src) is a library that implements RFC 8949 (Concise Binary Object Representation) serialization routines for Racket, by Vincent Lee.
  • irandom (pkg/src) is a implementation of Bob Jenkins’ ISAAC pseudorandom number generator, by hkrish.
  • tabtree (pkg/src) is a library to handle files of Tabtree format, by Denis Shirshov.
  • odysseus (pkg/src) is a library with handy general-purpose functions and macro as well as specific ones, by Denis Shirshov.
  • basm (pkg/src) is an assembler for Buzz’s Custom CPU project, by Graham Scheaffer.
  • drracket-workspaces (pkg/src) is a DrRacket tool that lets you save multiple files as a workspace and open them later all at once, by Jason Chen.
  • openapi-type-provider (pkg/src) is a typed/racket type provider for OpenAPI schemas inspired by F# type providers, by Jason Chen.
  • on-macro (pkg/src) is Racket’s missing predicate language, by Siddhartha Kasivajhula.
  • libsqlite3 (pkg/src) is a distribution for recent versions of sqlite3, by Bodgan Popa.

Call to Racket!

Want to contribute to Racket? Don’t know where to start? Each RN issue I choose an easy issue to fix to get you started contributing to Racket. Come, give it a go.

Today’s is the first from racket/pict. Can you flip the pict? Issue #29 is up for grabs. If you are interested in fixing this but need some guidance, feel free to comment on the issue page. Will you be our next Champion?

Good luck!

DrRacket Quickscript of the day

Quickscript (featured project of issue 38) provides an easy way to extend DrRacket with small Racket scripts to automate some actions in the editor, while avoiding the need to restart DrRacket. In this new section, contributed by Stephen De Gabrielle, we will be highlighting some of the most interesting scripts out there. Do you have a favourite script? Share it with us!

The featured Quickscript this time around is abstract-variable: Create a variable from the selected expression.

This is a classic from the quickscript-extra collection.

Video: https://www.youtube.com/watch?v=qgjAZd4eBBY

#lang racket/base
(require racket/gui
         quickscript)

(script-help-string
 "Create a variable from the selected expression
[video](https://www.youtube.com/watch?v=qgjAZd4eBBY)")

(define-script abstract-variable
  #:label "&Abstract variable"
  #:menu-path ("Re&factor")
  (λ (str) 
    (cond
      [(string=? str "")
       (message-box "Empty selection"
                    "No expression selected"
                    #f
                    '(ok caution))]
      [else
       (define var (get-text-from-user "Variable Abstraction" "Variable name:"
                                       #:validate (λ (s) #t)))
       (if var
           (begin
             (send the-clipboard set-clipboard-string 
                   (string-append "(define " var " " str ")")
                   0)
             var)
           str)])))

;; Select `"badinka"`, then click on Script>Abstract variable, enter `my-var`,
;; add a newline just after `begin` and past what's in the clipboard.
#;(begin
    (string-append "zorglub" "badinka"))

Quickscript is included in DrRacket, and scripts are managed by the Script menu. See the documentation at https://docs.racket-lang.org/quickscript/

Project in the Spotlight

This week’s project in the spotlight is Racket Cord by Ben Simms.

From the website:

Racket Cord is a library for interfacing with Discord using Racket.

Featured Racket Paper

This issue’s featured paper is Does Blame Shifting Work? by Lukas Lazarek, Alexis King, Samanvitha Sundar, Robert Findler, and Christos Dimoulas.

Abstract:

Contract systems, especially of the higher-order flavor, go hand in hand with blame. The pragmatic purpose of blame is to narrow down the code that a programmer needs to examine to locate the bug when the contract system discovers a contract violation. Or so the literature on higher-order contracts claims. In reality, however, there is neither empirical nor theoretical evidence that connects blame with the location of bugs. The reputation of blame as a tool for weeding out bugs rests on anecdotes about how programmers use contracts to shift blame and their attention from one part of a program to another until they discover the source of the problem. This paper aims to fill the apparent gap and shed light to the relation between blame and bugs. To that end, we introduce an empirical methodology for investigating whether, for a given contract system, it is possible to translate blame information to the location of bugs in a systematic manner. Our methodology is inspired by how programmers attempt to increase the precision of the contracts of a blamed component in order to shift blame to another component, which becomes the next candidate for containing the bug. In particular, we construct a framework that enables us to ask for a contract system whether (i) the process of blame shifting causes blame to eventually settle to the component that contains the bug; and (ii) every shift moves blame “closer” to the faulty component. Our methodology offers a rigorous means for evaluating the pragmatics of contract systems, and we employ it to analyze Racket’s contract system. Along the way, we uncover subtle points about the pragmatic meaning of contracts and blame in Racket: (i) the expressiveness of Racket’s off-the-shelf contract language is not sufficient to narrow down the blamed portion of the code to the faulty component in all cases; and (ii) contracts that trigger state changes (even unexpectedly, perhaps in the runtime system’s data structures or caches) interfere with program evaluation in subtle ways and thus blame shifting can lead programmers on a detour when searching for a bug. These points highlight how evaluations such as ours suggest fixes to language design.

Upcoming Meetups

Do you know of any upcoming meetups I can advertise? Let me know.

Racket Project Statistics - March

Some data about the activity in the Racket et al. repositories, for the month of March, 2021.

# commits Issues (new/closed/open) PRs (new/closed/open)
racket 88 21/24/421 25/25/82
drracket 15 5/2/199 1/2/2
typed-racket 8 8/4/247 9/7/23
scribble 5 1/0/71 1/3/15
plot 4 0/0/9 6/3/3
redex 1 3/1/44 0/0/7

Contributions by (23):

  • Alex Harsányi
  • Alex Knauth
  • Bob Burger
  • Bogdan Popa
  • Brian Adkins
  • Fred Fu
  • Gustavo Massaccesi
  • Hazel Levine
  • Ismael Luceno
  • Jack Firth
  • Matthew Flatt
  • Matthias Felleisen
  • Noah Ma
  • Paulo Matos
  • Philip McGrath
  • Robby Findler
  • Ryan Culpepper
  • Sam Tobin-Hochstadt
  • William J. Bowman
  • bdeket
  • sorawee
  • xxyzz
  • yjqww6

Of these, 8 are new contributors for 2021:

  • Alex Knauth
  • Brian Adkins
  • Hazel Levine
  • Ismael Luceno
  • Paulo Matos
  • Philip McGrath
  • William J. Bowman
  • xxyzz

Repositories included above are: racket, ChezScheme, redex, typed-racket, drracket, scribble, plot.

Racket Project Statistics - April

Some data about the activity in the Racket et al. repositories, for the month of April, 2021.

# commits Issues (new/closed/open) PRs (new/closed/open)
racket 105 27/72/376 30/27/85
typed-racket 9 7/7/245 9/8/24
drracket 5 4/1/202 3/2/3
redex 5 2/3/43 1/0/8
plot 3 1/2/8 3/5/1
scribble 2 0/1/70 2/0/17

Contributions by (22):

  • Alex Harsányi
  • Amirouche
  • Bob Burger
  • Doc Mo
  • Fred Fu
  • Greg Hendershott
  • Gustavo Massaccesi
  • Jamie Taylor
  • John Clements
  • K
  • Lazerbeak12345
  • Matthew Flatt
  • Mike Sperber
  • Philip McGrath
  • Robby Findler
  • Ryan Culpepper
  • Sam Tobin-Hochstadt
  • William J. Bowman
  • bdeket
  • plan-do-break-fix
  • shhyou
  • sorawee

Of these, 7 are new contributors for 2021:

  • Amirouche
  • Doc Mo
  • Greg Hendershott
  • Jamie Taylor
  • K
  • Lazerbeak12345
  • plan-do-break-fix

Repositories included above are: racket, ChezScheme, redex, typed-racket, drracket, scribble, plot.

Sponsors

Many thanks to my sponsors:

  • Jesse Alama. Jesse is a Racketeer, mathematician, and writer based in Main, Germany. He is the organizer of RacketFest, and writer of various Racket books and libraries.
  • John Clements. John is a researcher and professor at Cal Poly, a member of the core Racket, and Racket release manager.
  • Sam Tobin-Hochstadt. Sam is a researcher and associate professor at Indiana University, a member of the core Racket team, and the brains behind Typed Racket and Pycket.
  • Stephen De Gabrielle. Stephen is a product manager at epro. He is a long time Racket community contributor, moderating r/racket, editing the Racket wiki, running many community competitions and events, among many other things.
  • and my private sponsors, who shall remain anonymous.

If you wish to sponsor me and my work on Racket and Racket News - feel free to visit my GitHub Sponsors webpage. All sponsorship levels are welcome.

Contributors

Thanks to

  • Lîm (Danny) Tsú-thuàn
  • Stephen De Gabrielle

for their contributions to this issue.

The next issue is planned for publication during week 20, specifically May, 17. Contributions welcome - deadline for next issue: Sunday, May 16, 2021.

Disclaimer

This issue is brought to you by Paulo Matos. Any mistakes or inaccuracies are solely mine and they do not represent the views of the PLT Team, who develop Racket.

I have also tried to survey the most relevant things that happened in Racket lang recently. If you have done something awesome, wrote a blog post or seen something that I missed - my apologies. Let me know so I can rectify it in the next issue.


Contribute

Have you seen something cool related Racket? Send it in and we will feature it in the next issue.