Welcome to the fifth issue of Racket News.
Last week Racketfest took place in Berlin, where I had the opportunity to meet some of you and have some great Racket time. It was an awesome event - thanks to Jesse once again for setting it up. Thank you for the support you showed for Racket News during the event! A last comment to point out that we have now passed 100 subscribers to the Racket News newsletter - you may have that extra espresso today in celebration of this momentous achievement.
In this issue, I have added a new section: Featured Racket Paper. We all know Racket is born and nurtured in a state of the art academic lab where researchers do not sleep in order to bring us this amazing Programming Language. In celebration of this academic effort, I will start choosing papers related to Racket to feature in this newsletter. If you have a suggestion for a paper you would like to see featured here let me know.
Due to some travelling arrangements in the middle of this month, which will coincide with Issue 6 publishing date, I will either publish it a few days earlier or if there is not enough content, delay it until May 1st.
Now, grab that cup of coffee and enjoy!
Table of Contents
- What’s New?
- Racket Around the Web
- New Releases
- Project in the Spotlight
- Featured Racket Paper
- Upcoming Meetups
- Help Needed
- Racket Project Statistics
- Racket Jobs
These last couple weeks were full of Racket. Here are a few things happening in the Racket World.
- Racket has made it into CodeWars so give this Kata a try and if you want to see more Racket on the site consider contributing some Katas;
- A more accurate
tanhfunction made it into the Racket repo through PR 2565 by
bdeket. If you are into numerical computing take a look, run some benchmarks and if something is off let us know;
- Philip McGrath mentioned, on the mailing list, the RealWorld project, which defines a simple but realistic client-server web application. If you would like to contribute a Racket example app, join forces with Philip at Racket RealWorld App;
- Alex Harsanyi has improved on Greg’s racket mode by adding better scribble support;
- There is an editor called Kakoune, and it seems to also have Racket support. Check it out!
- There is also an editor called Vim… :)
- recently I found there a slightly dated DrRacket mode for Vim. Not sure it is usable but if you are a Vim user you might want to check it out and improve on it;
Racket around the web
Do you blog about Racket? Let me know!
- Building a GUI Application for the Password Generator by Alex Harsanyi
If you know of library releases or maybe your own libraries and you want them to be featured, please let me know.
- Algebraic Racket by Eric Griffis - an extension for algebraic structures in untyped Racket
Algebraic structures provide the operational under-pinnings for algebraic data types. What’s missing is the static typing constraints.
The initial release provides a
#lang algebraic/racket/base that extends
#lang racket/base with:
- first class, lexically scoped, naturally ordered data constructors; and
> (data Maybe (Just Nothing)) > (define maybe (function* [(n _ Nothing) n] [(_ f (Just x)) (f x)])) > (maybe #f values (Just 123)) 123 > (maybe #f values Nothing) #f
- a consistent destructuring syntax for functions and macros.
> (define fib (function [n #:if (< n 2) 1] [n (+ (fib (- n 1)) (fib (- n 2)))])) > (map fib (build-list 7 values)) '(1 1 2 3 5 8 13) > (define-syntax m-fib (macro [n:nat #:if (< (var n) 2) 1] [n:nat (+ (m-fib #,(- (var n) 1)) (m-fib #,(- (var n) 2)))])) > (list (m-fib 0) (m-fib 1) (m-fib 2) (m-fib 3) (m-fib 4) (m-fib 5) (m-fib 6)) '(1 1 2 3 5 8 13)
The package is fully documented. The documentation includes the first of three tutorials in a series on building interpreters with Algebraic Racket.
Algebraic Racket is the first major milestone in a larger effort to produce a complete language-oriented toolkit for integrating algebraic structure into more sophisticated designs.
The project aims to:
Implement and document the forms, functions, and syntax classes comprising Algebraic Racket for maximum potential reuse.
Support the development of modular type systems and other language-facing components as libraries.
Project in the Spotlight
I got several the suggestions for projects to highlight - thanks for that. I have queued them all for future issues.
In celebration of the start of the triathlon season in Europe, I would like to feature one of the most polished Racket GUI applications I have seen implemented in Racket.
Import swim, bike and run and other activities from .FIT files. Display plots, scatter plots, histograms, maps and other views for activities. Show reports and trends from activity data and track equipment usage.
- Import Run, Bike and Swim activities from FIT files (as generated by Garmin devices, and others)
- Show data charts, histograms, scatter plots, best-average plots
- Show GPS track on a map, with several map tile styles
- Show hill climbs and best sections (e.g. best 5k, best 20 min power)
- Elevation correction (see Notes)
- Show weather information for sessions with GPS data
- Fix recording errors in swim activities (merge or split lengths, fix stroke type)
- Export data as CSV for analyzing it with other tools
- Export settings sport zones to the device
- Show trend plots and reports
- Track equipment usage and service reminders (e.g. replace running shoes or service the bike).
- Shows firmware version and battery voltage for all sensors (e.g HRM or Bike Cadence sensor), displays a warning on low battery.
- Track body weight, and other metrics
- Estimate Critical Power
- Generate workout files for downloading to the Garmin device.
Featured Racket Paper
We kick off this new section with the One Paper everyone should read: The Racket Manifesto.
By Matthias Felleisen, Robert Bruce Findler, Matthew Flatt, Shriram Krishnamurthi, Eli Barzilay, Jay McCarthy, Sam Tobin-Hochstadt.
The creation of a programming language calls for guiding principles that point the developers to goals. This article spells out the three basic principles behind the 20-year development of Racket. First, programming is about stating and solving problems, and this activity normally takes place in a context with its own language of discourse; good programmers ought to formulate this language as a programming language. Hence, Racket is a programming language for creating new programming languages. Second, by following this language-oriented approach to programming, systems become multi-lingual collections of interconnected components. Each language and component must be able to protect its specific invariants. In support, Racket offers protection mechanisms to implement a full language spectrum, from C-level bit manipulation to soundly typed extensions. Third, because Racket considers programming as problem solving in the correct language, Racket also turns extra-linguistic mechanisms into linguistic constructs, especially mechanisms for managing resources and projects. The paper explains these principles and how Racket lives up to them, presents the evaluation framework behind the design process, and concludes with a sketch of Racket’s imperfections and opportunities for future improvements.
In addition to the paper there are a few resources related to the paper:
- An update journal version;
- A video at CurryOn 2016;
- A video by ACM from 2018;
- Some slides by Matthias Felleisen from RacketCon 2015;
Please note I am not hosting any of these files, but instead I am linking to the PDFs hosted by the researchers themselves. If you think there is a better way to do this or if I should host the files myself, drop me a line.
Racket School and RacketCon tickets are now for sale in a website near you. Click on the links below!
- Racket School 2019 - taught by Racket heavyweights it’s your time to get you #lang-fu up to scratch. Will take place in Salt Lake City, US on July 8–12.
- RacketCon 2019 - taking place in Salt Lake City, US on July 13, 14, just after Racket School.
Do you know a project looking for contributors or help with a task? I would love to hear about it.
Racket Project Statistics
Some data about the activity in the Racket repository for the month of March, 2019.
|Number of master Commits||109|
|Number of Opened PRs||9|
|Number of Merged PRs||19|
|Number of Opened Bugs||21|
|Number of Closed Bugs||23|
|Bugs open - currently||302|
|PRs open - currently||92|
Contributions by (20):
- Alexander McLin
- Alexis King
- Alex Knauth
- Ben Greenman
- Georges Dupéron
- Gustavo Massaccesi
- John Clements
- Lassi Kortela
- Marc Kaufmann
- Matthew Butterick
- Matthew Flatt
- Matthias Felleisen
- Michael MacLeod
- Paulo Matos
- Philip McGrath
- Robby Findler
- Ryan Culpepper
- Sam Tobin-Hochstadt
Of which, making the list the first time this year (6):
- Alex Knauth
- Georges Dupéron
- Lassi Kortela
- Matthew Butterick
- Michael MacLeod
- Jay McCarthy
for his contributions to this issue.
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.