From d949ca9e4e0e07a692cc619b8ae1bc61941b6a78 Mon Sep 17 00:00:00 2001 From: Cody Boone Ferguson <53008573+xexyl@users.noreply.github.com> Date: Sun, 10 Dec 2023 12:01:37 -0800 Subject: [PATCH] Format/typo check 2015/endoh1 The FAQ has been updated to say how to compile and install tcpserver (for systems that don't have a package in their package manager) as this entry requires it. The FAQ does not mention this entry. The README.md file has been format/typo checked. --- 2015/endoh1/README.md | 88 ++++++++++++++++++++++++++----------------- faq.md | 23 +++++++++++ 2 files changed, 76 insertions(+), 35 deletions(-) diff --git a/2015/endoh1/README.md b/2015/endoh1/README.md index 6b53cc62e..9f133e0c5 100644 --- a/2015/endoh1/README.md +++ b/2015/endoh1/README.md @@ -4,21 +4,18 @@ make ``` +NOTE: this program requires the tool `tcpserver` to use. If you do not have this +program see [FAQ 3.14 - How do I compile and install tcpserver for entries that +require it](/faq.md#tcpserver). + ## To use: ```sh -./prog +tcpserver -v 127.0.0.1 10333 ./prog ioccc.txt ``` -Connect to port http://localhost:10333 with your browser. - - -### Try: - -```sh -echo "Do or do not. There is no try." -``` +Then connect to http://localhost:10333 with your browser. ## Judges' remarks: @@ -42,6 +39,7 @@ machine](https://en.wikipedia.org/wiki/Turing_machine)? [Turing test](https://en.wikipedia.org/wiki/Turing_test)? This program is also based on his work. + ### Whirlwind tour Compile the program as follows: @@ -65,7 +63,7 @@ Show"](../../1991/brnstnd/brnstnd.c) ([README.md](../../1991/brnstnd/README.md)) tcpserver -v 127.0.0.1 10333 ./prog ioccc.txt ``` -Finally, open `http://127.0.0.1:10333/` by a modern browser supporting HTML5. +Finally, open `http://127.0.0.1:10333/` in a modern browser supporting HTML5. You can use the mouse cursor to place drops into the [Petri dish](https://en.wikipedia.org/wiki/Petri_dish) interactively. @@ -75,15 +73,17 @@ dish](https://en.wikipedia.org/wiki/Petri_dish) interactively. This is a simulator of [reaction-diffusion systems](https://en.wikipedia.org/wiki/Reaction-diffusion_system). -Reaction-diffusion systems, proposed by Alan Turing in [1], are mathematical +Reaction-diffusion systems, proposed by Alan Turing in [^1], are mathematical models in which two chemical substances are transformed into each other (*local chemical reactions*) and spread out (*diffusion*). Their interactions sometimes form non-trivial patterns, such as spots, spiral, dappling, and labyrinths. The systems are generally formulated as follows: - du/dt = F(u, v) + Du * laplacian(u) - dv/dt = G(u, v) + Dv * laplacian(v) +``` +du/dt = F(u, v) + Du * laplacian(u) +dv/dt = G(u, v) + Dv * laplacian(v) +``` The functions `F(u, v)` and `G(u, v)` represent reactions of each substance, and the parameters `Du` and `Dv` are diffusion coefficients. By changing the @@ -95,7 +95,8 @@ detail. This program simulates the systems. The field consists of 128 x 128 cells. Each cell includes information of an amount of the two substances, and interacts -with neighbor cells (in terms of von Neumann neighborhood) in each frame. +with neighbor cells (in terms of [von Neumann +neighborhood](https://en.wikipedia.org/wiki/Von_Neumann_neighborhood)) in each frame. ### Configuration @@ -111,25 +112,32 @@ example, the following is [the Gray-Scott model](http://groups.csail.mit.edu/mac/projects/amorphous/GrayScott/) in TeX notation. - \frac{\partial u}{\partial t} = D_u \Delta u - u v^2 + F (1 - u) - \frac{\partial v}{\partial t} = D_v \Delta v + u v^2 - v (F + K) +``` +\frac{\partial u}{\partial t} = D_u \Delta u - u v^2 + F (1 - u) +\frac{\partial v}{\partial t} = D_v \Delta v + u v^2 - v (F + K) +``` You can specify this model as follows: - -Delta_u="Du*laplacian(u)-u*v*v+F*(1-u)" \ - -Delta_v="Dv*laplacian(v)+u*v*v-v*(F+K)" +``` +-Delta_u="Du*laplacian(u)-u*v*v+F*(1-u)" \ +-Delta_v="Dv*laplacian(v)+u*v*v-v*(F+K)" +``` `Du`, `Dv`, `F`, and `K` are parameters of that model. + #### Initial pattern: `-DUV_BACKGROUND=, -DUV_DROP=,` -The definitions specifies the initial amount of the two substances u and v. All -cells have `(u0, v0)` by default. +The definitions specifies the initial amount of the two substances `u` and `v`. +All cells have `(u0, v0)` by default. You can specify a pattern file when the executable is invoked (not -compile-time). The file should include a sequence of points, see `ioccc.txt`, -`center.txt`, or `line.txt` as examples. Each amount in cells near to the point -included in the file, will be added by `(u1, v1)`. +compile-time). The file should include a sequence of points, see +[ioccc.txt](ioccc.txt), [center.txt](center.txt), or [line.txt](line.txt) as +examples. Each amount in cells near to the point included in the file, will be +added by `(u1, v1)`. + #### Simulation speed: `-DTIMESTEP=ts -DSPEED=spd` @@ -137,7 +145,8 @@ The definitions are for changing the simulation speed. `TIMESTEP` is a simulation time step. The bigger, the faster but more unstable. -`SPEED` is a frameskip parameter. The bigger, the faster but more sluggish. +`SPEED` is a frame skip parameter. The bigger, the faster but more sluggish. + #### Rendering color: `-DRGB=r:g:b` @@ -147,7 +156,7 @@ This specifies a color used for rendering. ### Examples Some interesting parameters are included in `Makefile`. Do one of the following -command and open `http://127.0.0.1:10333`. +commands and open `http://127.0.0.1:10333`. ``` make gray-scott-1 && tcpserver -v 127.0.0.1 10333 ./gray-scott-1 ioccc.txt @@ -163,19 +172,22 @@ make oregonator && tcpserver -v 127.0.0.1 10333 ./oregonator ioccc.txt These examples are created by drawing (and modifying) the pattern files of [Ready](https://github.com/GollyGang/ready), a cross-platform implementation of -various reaction-diffusion systems [2]. +various reaction-diffusion systems [^2]. + ### Compatibility + #### C part This program compiles clean with no warnings under `-std=c99 -Wall -Wextra -pedantic`. Since it uses `long long` for 64bit integers, C99 is required. + #### Browser part You must use a modern browser that supports the latest specification of -WebSocket [3]. All the following browsers worked for me: +WebSocket [^3]. All the following browsers worked for me: * Google Chrome 45 * Mozilla Firefox 39 @@ -183,22 +195,28 @@ WebSocket [3]. All the following browsers worked for me: I think Safari 6 will work but I haven't tested. (I have no recent macOS.) +NOTE from the judges in 2023: recent versions of Safari also work. + + #### tcpserver alternatives I think you may use `inetd` and `xinetd` instead of `tcpserver`. Here is an -example of inetd configuration. +example `inetd` configuration. - 10333 stream tcp nowait nobody /path/to/prog /path/to/prog /path/to/initial-pattern.txt +``` +10333 stream tcp nowait nobody /path/to/prog /path/to/prog /path/to/initial-pattern.txt +``` But note that I didn't test well. + ### Internal 1. The C program accepts HTTP connection from the browser, and sends a HTML document. 2. The browser tries to upgrade the connection to WebSocket. 3. The C program accepts WebSocket upgrade. This negotiation process requires -SHA1 hash [4] and Base64 encoding [5]. The C program calculates them without +SHA1 hash [^4] and Base64 encoding [^5]. The C program calculates them without the aid of any external libraries. 4. The C program simulates the reaction-diffusion system, and then send the field data to the browser on each frame. @@ -207,11 +225,11 @@ field data to the browser on each frame. ### References -* [1] Turing, A. M., "The Chemical Basis of Morphogenesis", Philosophical Transactions of the Royal Society, 1952. -* [2] The Ready Bunch, "Ready", A cross-platform implementation of various reaction-diffusion systems, since 2011, . -* [3] Fette, I. and A. Melnikov, "The WebSocket Protocol", RFC 6455, DOI 10.17487/RFC6455, December 2011, . -* [4] Eastlake 3rd, D. and P. Jones, "US Secure Hash Algorithm 1 (SHA1)", RFC 3174, DOI 10.17487/RFC3174, September 2001, . -* [5] Josefsson, S., "The Base16, Base32, and Base64 Data Encodings", RFC 4648, DOI 10.17487/RFC4648, October 2006, . +* [^1]: Turing, A. M., "The Chemical Basis of Morphogenesis", Philosophical Transactions of the Royal Society, 1952. +* [^2]: The Ready Bunch, "Ready", A cross-platform implementation of various reaction-diffusion systems, since 2011, . +* [^3]: Fette, I. and A. Melnikov, "The WebSocket Protocol", RFC 6455, DOI 10.17487/RFC6455, December 2011, . +* [^4]: Eastlake 3rd, D. and P. Jones, "US Secure Hash Algorithm 1 (SHA1)", RFC 3174, DOI 10.17487/RFC3174, September 2001, . +* [^5]: Josefsson, S., "The Base16, Base32, and Base64 Data Encodings", RFC 4648, DOI 10.17487/RFC4648, October 2006, . ## Copyright and CC BY-SA 4.0 License: diff --git a/faq.md b/faq.md index 351de6964..02e48e84d 100644 --- a/faq.md +++ b/faq.md @@ -36,6 +36,7 @@ - [3.11 - Why do Makefiles use -Weverything with clang?](#faq3_11) - [3.12 - How do I find out how to send interrupt/EOF etc. for entries that require it?](#faq3_12) - [3.13 - Why does an IOCCC winner fail to compile or or fail run?](#faq3_13) +- [3.14 - How do I compile and install tcpserver for entries that require it?](#faq3_14) ## Section 4 - [Changes made to IOCCC winners](#faq4) - [4.0 - Why are some winning author remarks incongruent with the winning IOCCC code?](#faq4_0) @@ -1239,6 +1240,28 @@ request](https://github.com/ioccc-src/temp-test-ioccc/pulls). Please see [FAQ 5.2](#faq5_2) for how to submit a fix to an IOCCC winner. +### FAQ 3.14 - How do I compile and install tcpserver for entries that require it? + +If your OS package manager does not have the package `tcpserver` you can +download, making sure you're in a temporary directory, and compile the source +like: + +```sh +wget http://cr.yp.to/ucspi-tcp/ucspi-tcp-0.88.tar.gz +tar ucspi-tcp-0.88.tar.gz +cd ucspi-tcp-0.88 +make +``` + +Then as root or via `sudo(1)` enter: + +```sh +make setup check +``` + +That will install it to `/usr/local/bin`. Now you should be able to use the +entry in question. + ## Section 4: Changes made to IOCCC winners