0119220e — Amirouche 3 months ago
document free domain names
08b77ac8 — Amirouche 3 months ago
second hint: reveal it!
b1f275e9 — Amirouche 3 months ago


browse log



You can also use your local clone with git send-email.

Schemers Competition 2019

Static Blog Generator

The goal of the competition is to build static blog generator using one of the many Scheme programming language implementations.

All the features are described along the number of points given for their completion. Code style will also be scored.

honeycomb electronic circuitery generative art by shvembldr

(austerity by /u/shvembldr [instagram])

Official Mailing List

The mailing list DOES NOT support HTML. Configure your mail agent to send only text to the mailing list. Thanks!


contact email address.


  1. Three Typical Hacker accounts on sr.ht for a value of 50$ each
  2. One copy of serverracket.com
  3. Free domain name: socialiter.space or hypersocial.space for 9 years

Specifications and Scoring

The goal is to create a static blog generator with a mystery feature that will be revealed little by little in the following months.

The general scheme is the following:

  • Create a static blog generator
  • Implement the mystery feature
  • Submit your project at staticgen.com

Good luck!

Scheme Implementation Bonus

  • Classic: 50 points
  • Racket: 25 points
  • R5RS: 25 points
  • R6RS: 25 points
  • R7RS: 75 points

Other Bonus

  • A short README with an image (25 points)
  • A colored stderr logging output (50 points)
  • Continuous Integration Setup (100 points)
  • Phlog: support for Gopher protocol (100 points)
  • An original template blog theme (150 points)

The Right Thing

Simplicity — the design must be simple, both in implementation and interface. It is more important for the interface to be simple than that the implementation be simple.

Correctness — the design must be correct in all observable aspects. Incorrectness is simply not allowed.

Consistency — the design must not be inconsistent. A design is allowed to be slightly less simple and less complete to avoid inconsistency. Consistency is as important as correctness.

Completeness — the design must cover as many important situationsas is practical. All reasonably expected cases must be covered. Simplicity is not allowed to overly reduce completeness.

Richard P. Gabriel

It is highly recommended to have a Continuous Integration facility hooked into the git repository (it is worth 100 points) whatever the platform you are developing for. Example, on source hut check man.sr.ht/builds.sr.ht/. Otherwise, describe in the README and in the documentation the steps required to run your project.

All submission must come with a Makefile with the following targets:

  • make init will setup a local environment for running the blog generator from source that must not require superuser privileges.
  • make check will run any unit tests you have written.
  • make doc must build the documentation.
  • make html must render the source files into html as described in the following specification.
  • make http will spawn a web server suitable to browser the generated website.
  • make gopher will spawn a gopher server suitable to browser the generated phlog
  • make pdf must render the blog in .pdf format
  • make epub must render the blog in .epub format
  • make extra execute the mysterious feature

The following scoring takes into account the fact that any public feature must be documented.

Getting started
  • Render an index page sorted by date chronologically (50 points)
  • Render posts based on the following formats: sxml, skribe, org-mode, markdown, html (25 points per supported formats)
  • Syntax highlighting for Scheme code (50 points)
  • Add optional rainbow delimiter highlighting for Scheme code (50 points)
  • Post feeds in chronological order: RSS, ATOM (25 points per supported formats)
  • Make the base url of the blog configureable (50 points)
  • Add support for keywords in posts the best way you can (25 points per supported post formats)
  • Add pages for keywords listing posts with the given keyword in chronological order (50 points)
  • Add a feed per keyword (25 points per supported formats)
  • Add support for .pdf rendering of the whole blog (50 points)
  • Add support for .epub rendering of the whole blog (50 points)
  • Add support for custom templates (100 points)
  • Add support for popular posts by parsing apache, nginx or lighthttp access logs (150 points)
  • Add a custom favicon (200 points)

The worse-is-better

Simplicity — the design must be simple, both in implementation and interface. It is more important for the implementation to be simple than the interface. Simplicity is the most important consideration in a design.

Correctness — the design must be correct in all observable aspects. It is slightly better to be simple than correct.

Consistency — the design must not be overly inconsistent. Consistency can be sacrificed for simplicity in some cases, but it is better to drop those parts of the design that deal with less common circumstances than to introduce either implementational complexity or inconsistency.

Completeness — the design must cover as many important situations as is practical. All reasonably expected cases should be covered. Completeness can be sacrificed in favor of any other quality. In fact, completeness must be sacrificed whenever implementation simplicity is jeopardized. Consistency can be sacrificed to achieve completeness if simplicity is retained; especially worthless is consistency of interface.

Richard P. Gabriel

The goal of this part of the challenge is to be creative. Preliminary hints are given for the mysterious feature in the form of latin riddles.

100 points

First Hint: Animata magna minimis

The first mysterious hint is: Lorem ipsum.

The hint comes with the following links that might help you gather relevant vocabulary:

Second Hint: Voluptaria cupiditatis parens

The second mysterious hint is: Scheme expressions.

Last Hint: Fake Bibendum

The last mysterious hint was not revealed yet!


  • 2019/07/18: Official start of the competition.
  • 2019/08/01: first mysterious hint will be revealed!
  • 2019/09/01: second mysterious hint will be revealed!!
  • 2019/10/01: last mysterious hint will be revealed!!!
  • 2019/11/14: End of the competition
  • 2019/12/XY: The score board will be published.


Should the source of my program be freely available?

Yes. Don't forget to add a LICENCE file.

Can I use pandoc?

If you find it is useful: yes!

What can I do ahead of time?

There is nothing like ahead of time, the competition is already started!

Can I fork an existing project?

Yes, but you must actually produce some Scheme code.

What happens if I’m not going to finish in time?

Commit your code! If anything works, it will be scored based on that.

What is in it for you?

More Scheme code!

What is fun?

Scheme is fun!