mailmerge is a command line mail merge emailing tool that supports the jinja2 template engine.
If your organisation uses Microsoft email but has disabled password-based authentication, I've written a post about using mailmerge with OAuth authentication instead.
www.macs.hw.ac.uk/~rs46/posts/...
Posts by Rob Stewart
Holy shit.
In 2019 I gave a lecture series about DSLs to PhD students at SPLV'19. I covered 1970s DSL examples, advantages and disadvantages of DSLs, internal vs external DSLs and a discussion about defining DSLs. I've written a LinkedIn article, which links to the slides.
www.linkedin.com/pulse/domain...
Architectures for accelerating functional languages.
We recently gave a seminar at IOG (IOHK).
We presented our 3 functional programming language processors: Heron, KappaMutor and Siege. We discussed the historical computer architectures that influences our work (see slide) and also our desire to lower the barrier for industry adoption of our tech.
We have just sent the code 435841 to a phone number.
Please enter the phone number this was sent to:
#Emacs
"If you are a professional writer [...] emacs outshines all other editing software in approximately the same way that the noonday sun does the stars. It is not just bigger and brighter; it simply makes everything else vanish."
From "In the Beginning was the Command Line" by Neal Stephenson.
The final post-reviewed paper will be published by Springer in a few months.
The work is supported by the EPSRC HAFLANG project.
haflang.github.io
Structured combinators are hardware-friendly encodings that more directly represent user functions compared to fine-grained SKI combinators, meaning generated programs are shorter. Our compiler supports Haskell 2010, and employs code-gen strategies to support full laziness and minimise program size.
Our paper "From Haskell to a New Structured Combinator Processor", accepted to TFP 2025 after post-symposium review, presents our new compact FPGA-based processor. Based on structured combinators, it exploits parallel memories for single-cycle reductions.
researchportal.hw.ac.uk/en/publicati...
A list of more architectures would be great, I would happily add them to the timeline. Thanks for your interest.
MFA fatigue: when your phone is not nearby to type in a one-time password, so you don't bother doing 2 minute micro tasks. Linux and MacOS users can use the command line to generate verification codes instead, for websites that authenticate with Microsoft accounts.
www.macs.hw.ac.uk/~rs46/posts/...
If you provide me with a list of related computer architectures that I've missed entirely from this timeline, I would be very grateful to receive this to update the timeline.
And Gyula Magó's cellular's processor architecture here:
haflang.github.io/history#even...
I mention Keller's (Utah) LISP machine here:
haflang.github.io/history#even...
As for a Japanese machine, I very briefly mention the Evlis machine here, though you may have a different machine in mind:
haflang.github.io/history#even...
And the Knight Machine at MIT machine that supported LISP in 1973, but perhaps that's a different MIT machine to the one you had in mind?
haflang.github.io/history#even...
I completely agree about how important dataflow architectures were in the 1980s. I (briefly) mention the Manchester dataflow machine in the timeline:
haflang.github.io/history#even...
Tiny suggestion - I'm unsure whether the 1st edition included an example of recursive Eval monad parallelism. Performance-wise, `runEval` is free, recursive calls to it doesn't have overhead. See the attached example. Apologies if recursive `runEval` calls is discussed, I must've missed it.
Which is to ask: could a 2nd edition of the book be as clear as saying: if you're not in the habit of representing your computations as lazy data structures and you don't wish to familiarise yourself with evaluation strategies, then use the simpler Par monad API?
When I advocate for the Eval monad in lectures, my analogy is it's parallel *breadth-first* search. E.g. the sudoku solver in your book, you want to eat away at lots of possible solutions rather than going down the rabbit hole of one: if you can fully embrace laziness, the Eval monad is for you.
Any more reflections you have about Eval vs Par monads would be great. I still teach rpar/rseq, but I understand that @nishiorain.bsky.social taught using the Par monad. Could like-for-like code examples and their performance be given to demonstrate these pros/cons:
www.oreilly.com/library/view...
Perhaps expanding on your December 2018 views about distributed-process on the parallel-haskell mailing list would be offer a retrospective insight about that library.
groups.google.com/g/parallel-h...
Today I added a slide about the collapse of the LISP machine market around 1987.
haflang.github.io/history.html...
In 2023 I curated a 100 year timeline about hardware implementations of functional programming languages. Best viewed on a desktop or laptop screen. I occasionally add to it.
haflang.github.io/history.html
I often point students to The Elements of Style by Strunk & White for dissertation or paper writing. I've come across researcher Laura Lisabeth, who "combines historiography and cultural studies to critically examine" this guide, touching on racial identity, social power and marginalised identities.
I often point students to The Elements of Style by Strunk & White for dissertation or paper writing. I've come across researcher Laura Lisabeth, who "combines historiography and cultural studies to critically examine" this guide, touching on racial identity, social power and marginalised identities.