<commit_before># pixelflood

A fast, asynchronous implementation of [Pixelflut](https://cccgoe.de/wiki/Pixelflut).

- Uses GLFW and GLEW (optional) to display the buffer
- Uses epoll on linux or asio (boost or standalone) for networking
- Uses FreeType to draw IP address, port, etc., to buffer (optional)

Using epoll, each open TCP connection only takes 8 bytes of user space memory.

epoll can be used edge triggered, but level triggered (default) seems to be fairer across multiple connections.

## How to start (Linux)
```
$ mkdir build
$ cd build
$ cmake -DCMAKE_BUILD_TYPE=Release ..
$ make
$ ./pixelflood
```

### GLFW soft dependency
If GLFW is not installed or not found, fbdev display will be used which requires exclusive framebuffer access on `/dev/fb0`. That's more suitable for embedded systems. Probably, you want to make sure GLFW is found (see CMake output).

### Increase open files ulimit
On most systems, one process can't open more than 1024 files (max 1024 connections). To allow more connections, add `/etc/security/limits.d/90-pixelflood.conf` containing:
```
pxuser hard nofile 1000000
```
Replace `pxuser` with the username of the user running pixelflood, and execute
```
$ ulimit -n 1000000
```
in the shell before starting `./pixelflood`. This will allow about 1000000 connections. To see the maximum settable number of open files, read `/proc/sys/fs/file-max`.
<commit_msg>Clarify license<commit_after># pixelflood

A fast, asynchronous implementation of [Pixelflut](https://cccgoe.de/wiki/Pixelflut).

- Uses GLFW and GLEW (optional) to display the buffer
- Uses epoll on linux or asio (boost or standalone) for networking
- Uses FreeType to draw IP address, port, etc., to buffer (optional)

Using epoll, each open TCP connection only takes 8 bytes of user space memory.

epoll can be used edge triggered, but level triggered (default) seems to be fairer across multiple connections.

## How to start (Linux)
```
$ mkdir build
$ cd build
$ cmake -DCMAKE_BUILD_TYPE=Release ..
$ make
$ ./pixelflood
```

### GLFW soft dependency
If GLFW is not installed or not found, fbdev display will be used which requires exclusive framebuffer access on `/dev/fb0`. That's more suitable for embedded systems. Probably, you want to make sure GLFW is found (see CMake output).

### Increase open files ulimit
On most systems, one process can't open more than 1024 files (max 1024 connections). To allow more connections, add `/etc/security/limits.d/90-pixelflood.conf` containing:
```
pxuser hard nofile 1000000
```
Replace `pxuser` with the username of the user running pixelflood, and execute
```
$ ulimit -n 1000000
```
in the shell before starting `./pixelflood`. This will allow about 1000000 connections. To see the maximum settable number of open files, read `/proc/sys/fs/file-max`.

## License
pixelflood is free software: you can redistribute it and/or modify
it under the terms of the GNU Affero General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.

pixelflood is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
GNU Affero General Public License for more details.

You should have received a copy of the GNU Affero General Public License
along with pixelflood.  If not, see <http://www.gnu.org/licenses/>.

{'fraction_non_alphanumeric': 0.0780388743835219, 'fraction_numerical': 0.01943719176095155, 'mean_word_length': 4.438485804416404, 'pattern_counts': {'":': 0, '<': 4, '<?xml version=': 0, '>': 4, 'https://': 2, 'lorem ipsum': 0, 'www.': 1, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'dir': 'git-commits-cleaned', 'id': '994490', 'n_tokens_mistral': 1051, 'n_tokens_neox': 937, 'n_words': 481}