Racket's built-in web-server package is great, but parts of it are low-level enough that it can be confusing to people who are new to the language. In this post, I'm going to try to clear up some of that confusion by providing some definitions and examples for things beginners might wonder about. Servlets A servlet is a function from a request to a response. It has the contract: 1 (-> request?
I'd been meaning to play with Racket's built-in sandboxing capabilities for a while so yesterday I sat down and made Try Racket. It's a web app that lets you type in Racket code and run it. The code you run is tied to your session and each session is allocated up to 60 seconds of run time per evaluation, with up to 128MB of memory used. Filesystem and network access is not permitted and neither is access to the FFI.
/u/myfreeweb pointed out to me in a lobste.rs thread yesterday that Racket compiles just fine on aarch64 and that led me down a rabbit hole trying to get Racket running inside an iOS application. I finally succeeded so I figured I'd write down my findings in hopes of helping future Racketeers (myself included) going down this path! Compile Racket for macOS A recent-enough version of Racket is required in order to compile Racket for iOS.
A couple of days ago, I released a native macOS application called Remember. It is a small, keyboard-driven application for stashing away notes/reminders for later. One of the cool things about it from a programming nerd perspective is that, while it is a completely native Cocoa application whose frontend is built with Swift, the core business logic is all in Racket! Why not use racket/gui? I started out with a proof of concept that used Racket for the GUI, but I realized that I'd have to write a bunch of Objective-C FFI code to get the UI to look the way I wanted (a carbon copy of Spotlight) and it seemed like it would be a pain to try and integrate DDHotKey and to add support for launching at login into a package that is easy to distribute.
I've been using org-mode capture templates for years and I've always wished I had something like that for the whole system. I took advantage of the holiday break to build Remember, a little reminders application with Spotlight-like UX. It's available on Gumroad and you can pay what you want for it (inlcuding $0!) at the moment so I hope you'll give it a go! Although the app isn't Open Source, it source code is available on GitHub.
I just open sourced one of the very first Racket code bases I've worked on. The project is called nemea and it's a tiny, privacy-preserving, website analytics tracker. It doesn't do anything fancy, but it does enough for my needs and, possibly, yours too so check it out!
Another Racket thing! redis-rkt is a new Redis client for Racket that I've been working on these past few weeks. Compared to the existing redis and rackdis packages, it: is fully documented, is safer due to strict use of contracts, is faster, supports more commands and its API tries to be idiomatic, rather than being just a thin wrapper around Redis commands. Check it out!
I made a new Racket thing today! chief is a port of a subset of foreman‘s functionality to Racket. It lets you run sets of processes together based on a Procfile. If that sounds useful to you, do check it out!
Generators in Python One of the nice things about Python is that it comes with in-built support for “generators”, functions that can suspend themselves and be resumed in the middle of processing. Here's a generator that produces the fibonacci series: 1 2 3 4 5 6 def fib(): x = 0 y = 1 while True: y, x = x + y, y yield x A generator is instantiated every time you call the fib function.