The pageview counter designed for this site, i.e., the one at the footer. I estimate that 99% of people nowadays use Python when dealing with MNIST. But this site promises not to use Python, thus chooses C++ for this gadget. The overall experience is not much complicated than Python, while it is expected to save a lot of carbons😁.
Implementation
Download MNIST testset and uncompress by gzip.
LeCun said that the first 5k images are easier, so the program only use the first 5k images.
Counter is saved into a file fcounter.db.
Digits are randomly chosen from test images, assembled into one PNG image,
(with Magick++ which is easier),
then returned to the webserver via FastCGI.
Code
| 1 | 
 | 
The code is put in public domain now.
Compilation
- Install APT packages libmagick++-dev libfcgi-dev.
- For FastCGI++, compiler flags -lfcgi++ -lfcgiare required.
- CMake can found Magick++ automatically. Otherwise, append compiler flags from magick++-config.
Deployment
I use spawn-fcgi to spawn the compiled binary (set as a service in systemd).
Most webservers support FastCGI, a reverse proxy to the port set by spawn-fcgi completes the deployment.
I use Caddy:
| 1 | reverse_proxy /counter.png localhost:21930 { | 
Add /counter.png to the footer HTML, then you see digits bump on refresh.
Go through internal links will not bump if the explorer cached the image.