add to FAQ

Added:

- [5.5  - How may I correct or update IOCCC author information?](#faq5_5)
- [6.5  - What is an author handle?](#faq6_5)
- [6.6  - What is a author_handle.json file and how are they used?](#faq6_6)
- [6.7  - What is a winner_id?](#faq6_7)
This commit is contained in:
Landon Curt Noll committed 2023-11-30 20:34:17 -08:00
1 parent 327b7c645c
commit f112155e78
1 file changed
+628 -3
+628 -3
View File
@@ -50,6 +50,7 @@ other inconsistencies with the original entry?](#faq4_3)
- [5.2 - How may I submit a fix to an IOCCC winner?](#faq5_2)
- [5.3 - How may I report an IOCCC web site problem?](#faq5_3)
- [5.4 - How may I submit a fix to an IOCCC web site?](#faq5_4)
- [5.5 - How may I correct or update IOCCC author information?](#faq5_5)
## Section 6 - [Miscellaneous IOCCC](#faq6)
- [6.0 - How did an entry breaks the size rule 2, win the IOCCC?](#faq6_0)
@@ -57,6 +58,9 @@ other inconsistencies with the original entry?](#faq4_3)
- [6.2 - May I mirror the IOCCC web site?](#faq6_2)
- [6.3 - May I use parts of the IOCCC in an article, book, newsletter, or instructional material?](#faq6_3)
- [6.4 - Why do you sometimes use the first person plural?](#faq6_4)
- [6.5 - What is an author handle?](#faq6_5)
- [6.6 - What is a author_handle.json file and how are they used?](#faq6_6)
- [6.7 - What is a winner_id?](#faq6_7)
# The IOCCC FAQ
@@ -1349,8 +1353,6 @@ section may offer you important fixing clues.
### We welcome your help on fixing the IOCCC web site
XXX
### <a name="faq5_1"></a><a name="pullrequst"></a>FAQ 5.1: How do I report a bug in an IOCCC winner?
@@ -1455,7 +1457,7 @@ If you see lines containing:
```
This means that the file is generated by a tool from the
[build-ioccc](https://github.com/ioccc-src/build-ioccc) repo
[build-ioccc repo](https://github.com/ioccc-src/build-ioccc)
using files found in the
[ioccc-src/winner repo](https://github.com/ioccc-src/winner) repo.
@@ -1482,6 +1484,24 @@ When in doubt, consider opening up an [IOCCC issue](https://github.com/ioccc-src
See [FAQ 5.3](#faq5_3) for information on opening up an IOCCC issue.
## <a name="faq5_5"></a>FAQ 5.5: How may I correct or update IOCCC author information?
Authors of IOCCC winning entries are kept in JSON files of the form:
```
author/author_handle.json
```
where _author_handle_ is an author handle. See [FAQ 6.5](#faq6_5) for more
information about an author handles.
The contents of these JSON files contain the best known information
about authors of IOCCC winners. See [FAQ 6.6](#faq6_6) for information
about the contents of these JSON file and how they are used.
XXX
## <a name="faq6"></a>Section 6: Miscellaneous IOCCC
@@ -1560,3 +1580,608 @@ exaggeration](https://books.google.com/books?id=ms3tce7BgJsC&lpg=PA134&vq=%22the
p.s. Here is an image of F. D. C. Willard:
[F D C Willard](png/F.D.C.Willard.png)
### <a name="faq6_5"></a><a name="author_handle"></a>FAQ 6.5: What is an author handle?
An `author_handle` is string that refers to a given author and is unique to the
IOCCC. Each author has exactly one `author_handle`.
For each `author_handle`, there will be a JSON file of the form:
```
author/author_handle.json
```
See [FAQ 6.6](#faq6_6) for information about the contents of these JSON file and
how they are used.
Because the `author_handle` is used to form a JSON filename, the string must be
POSIX safe string. Furthermore, the `author_handle` must be an ASCII
string that matches this regexp:
```re
^[0-9A-Za-z][0-9A-Za-z_]*$
```
Default `author_handle`'s do not have multiple consecutive `_` (underscore)
characters. Nevertheless, multiple consecutive `_` (underscore) characters are
allowed. Contest submitters who wish to override their default `author_handle` may do so.
The `author_handle` is derived from the name of the author. While there is a
algorithm that maps the name of the author (which can contain any UTF-8
characters) into a default `author_handle` string, those who submit an entry to
the IOCCC are free to choose a different `author_handle` string if they so
desire.
An `author` who has won a previous IOCCC is encouraged to reuse their
`author_handle` so that new winning entries can be associated with the same
author.
For an anonymous `author`, their handle is one of these forms:
```
Anonymous_year
```
or:
```
Anonymous_year.digits
```
The latter form is in case there are more than one anonymous author in a given
year.
NOTE: even if the directory name is not `anonymous` the above rules apply as in
in the case of [2005/anon](/2005/anon/anon.c).
Anonymous `author_handle`'s match this regexp:
```re
Anonymous_[0-9][0-9][0-9][0-9][.0-9]*$
```
See [FAQ 5.5](#faq5_5) for information about how to update
and/or correct IOCCC author information.
### <a name="faq6_6"></a><a name="author_json"></a>FAQ 6.6: What is a author_handle.json file and how are they used?
**TL:DR**: The contents of these JSON files contain the best known
information about authors of IOCCC winners and is used to help form
HTML files as well to contact an author.
The content of these JSON files are used by tools from the [build-ioccc
repo](https://github.com/ioccc-src/build-ioccc) to help build HTML
content for the [official IOCCC web site](https://www.ioccc.org).
For example, the `index.html` file for each IOCCC winner contains
selected information about the authors. Tools from the [build-ioccc
repo](https://github.com/ioccc-src/build-ioccc) use the content of
these JSON files to generate the `index.html` files for each IOCCC
winning entry.
Moreover, should the [IOCCC judges](judges.html) need to
contact an authors of a IOCCC winner, they will consult the contents
of the author's JSON file for ways to contact them.
Each author of an IOCCC winning entry has their own `author_handle.json` file
of the form:
```
author/author_handle.json
```
where _author_handle_ is an author handle. See [FAQ 6.5](#faq6_5) for more
information about an author handles.
#### author_handle.json JSON file contents
The syntax of a `author_handle.json` follows the _So-called JSON spec_.
See [json_README.md](https://github.com/ioccc-src/mkiocccentry/blob/master/jparse/json_README.md#so_called_json_spec)
for information on the _So-called JSON spec_.
A good way to understand the JSON file contents of a `author_handle.json` file
is to look at an example, the `author_handle.json` file for Yusuke Endoh:
```
author/Yusuke_Endoh.json
```
As of _Thu Nov 30 23:51:12 UTC 2023_, the contents was as follows:
```json
{
"no_comment" : "mandatory comment: because comments were removed from the original JSON spec",
"author_JSON_format_version" : "1.0 2023-06-10",
"author_handle" : "Yusuke_Endoh",
"full_name" : "Yusuke Endoh",
"sort_word" : "endoh",
"location_code" : "JP",
"location_name" : "Japan",
"email" : "mame@ruby-lang.org",
"url" : "https://mametter.hatenablog.com",
"alt_url" : null,
"deprecated_twitter_handle" : null,
"mastodon" : "@mame@ruby.social",
"mastodon_url" : "https://ruby.social/@mame",
"github" : "@mame",
"affiliation" : null,
"winning_entry_set" : [
{ "winner_id" : "2012_endoh1" },
{ "winner_id" : "2012_endoh2" },
{ "winner_id" : "2013_endoh1" },
{ "winner_id" : "2013_endoh2" },
{ "winner_id" : "2013_endoh3" },
{ "winner_id" : "2013_endoh4" },
{ "winner_id" : "2014_endoh1" },
{ "winner_id" : "2014_endoh2" },
{ "winner_id" : "2015_endoh1" },
{ "winner_id" : "2015_endoh2" },
{ "winner_id" : "2015_endoh3" },
{ "winner_id" : "2015_endoh4" },
{ "winner_id" : "2018_endoh1" },
{ "winner_id" : "2018_endoh2" },
{ "winner_id" : "2019_endoh" },
{ "winner_id" : "2020_endoh1" },
{ "winner_id" : "2020_endoh2" },
{ "winner_id" : "2020_endoh3" }
]
}
```
We now will walk thru the above JSON document looking at various JSON members:
##### no_comment
``` json
"no_comment" : "mandatory comment: because comments were removed from the original JSON spec",
```
Because the authors of the so-called JSON spec removed the ability to use comments in JSON
(for reason(s) that seem to be less than credible), the IOCCC mandates this _JSON member_
be present in all IOCCC related JSON files.
There **MUST** be one and only one `no_comment` _JSON member_ and the _JSON value_ **MUST**
be the exact _JSON string_ as shown above.
##### author_JSON_format_version
```json
"author_JSON_format_version" : "1.0 2023-06-10",
```
This _JSON member_ holds the format version of the `author_handle.json` JSON file.
There **MUST** be one and only one `author_JSON_format_version`
_JSON member_ and the _JSON value_ **MUST** be a _JSON string_.
This is **NOT** the version of the contents! When updating an
`author_handle.json` JSON file, **DO NOT MODIFY author_JSON_format_version**!
As of _Thu Nov 30 23:51:12 UTC 2023_, the _JSON value_ **MUST** be _"1.0 2023-06-10"_.
The _author_JSON_format_version_ would only changed when the overall format
of the these files is modified: and then only those who maintain the
[official IOCCC web site](https://www.ioccc.org) would be the one to do this
in conjunction with changes to the [build-ioccc
repo](https://github.com/ioccc-src/build-ioccc).
##### author_handle
```json
"author_handle" : "Yusuke_Endoh",
```
This _JSON member_ holds the author handle of the author.
There **MUST** be one and only one `author_handle` _JSON member_
and the _JSON value_ **MUST** be a _JSON string_ that is also a value author handle.
See [FAQ 6.5](#faq6_5) for more information about an author handles.
Normally the _author_handle_ _JSON value_ should **NOT** be changed
**unless there is a strong reason to do so**. If the _JSON value_
changes, then all of the `.winner.json` files for all of this authors
winning IOCCC entries should also be changed. The _author_handle_
_JSON value_ must match the basename (without the leading path and
without the trailing `.json`) of the `author_handle.json` file. So
a change of _author_handle_ _JSON value_ would also require the
`author_handle.json` file to also be renamed.
##### full_name
```json
"full_name" : "Yusuke Endoh",
```
This _JSON member_ holds the full name of the author.
There **MUST** be one and only one `full_name` _JSON member_ and the _JSON value_ **MUST**
be a _JSON string_.
The full name of an author may use non-ASCII characters so long as the
full name is properly encoded as a _JSON string_.
##### sort_word
```json
"sort_word" : "endoh",
```
This _JSON member_ holds the string that will be used to sort the author.
There **MUST** be one and only one `sort_word` _JSON member_ and the _JSON value_ **MUST**
be a _JSON string_. Moreover the string **MUST** be a lower case ASCII
alphanumeric string that starts with a lower case ASCII letter.
The _JSON value_ is used, for example, to place a reference to the author
in the `/winners.html` file.
Normally the `sort_word` _JSON member_ _JSON value_ is the last
name of the author, translated into lower case ASCII alphanumeric
string that starts with a lower case ASCII letter. If the author
wishes to be found in the `/winners.html` file under a different
string, such as if they wish to be listed under their first name
or their username, then they may change this accordingly.
##### location_code
```json
"location_code" : "JP",
```
This _JSON member_ holds the string that is the
[ISO 3166-1 alpha-2 code](https://en.wikipedia.org/wiki/ISO_3166-1_alpha-2#Decoding_table)
of the author's location or country.
There **MUST** be one and only one `location_code` _JSON member_ and the _JSON value_ **MUST**
be a _JSON string_. Moreover the string **MUST** be 2 character UPPER case ASCII
alphabetic string that is **NOT** an Unassigned
[ISO 3166-1 alpha-2 code](https://en.wikipedia.org/wiki/ISO_3166-1_alpha-2#Decoding_table) value
(not a 2 character symbol with a gray background on that Wikipedia table)
The `soup/location` tool from the [mkiocccentry repo](https://github.com/ioccc-src/mkiocccentry),
when run without arguments, will print the ISO 3166-1 alpha-2 codes that permitted, along with
the location name.
We use the term "location" (and not "country") because some of the
ISO 3166-1 alpha-2 codes belong to locations that are not technically
a country, such as "Antarctica" or a User-assigned code.
If the author wishes to not specify a location, they should select **XX**.
##### location_name
```json
"location_name" : "Japan",
```
This _JSON member_ holds the string that is the canonical location name as reported by the
`soup/location` tool from the [mkiocccentry repo](https://github.com/ioccc-src/mkiocccentry),
when given the [location code](#location_code) as specified above.
There **MUST** be one and only one `location_code` _JSON member_ and the _JSON value_ **MUST**
be a _JSON string_. Moreover the string **MUST** be what the `soup/location` tool prints
when given the `location_code` as an argument.
We use the term "location" (and not "country") because some of the
ISO 3166-1 alpha-2 codes belong to locations that are not technically
a country, such as "Antarctica" or a User-assigned code.
Often a given location may have a long official name, and multiple common names.
For names associated with the location **DE** might be:
```
Germany
Federal Republic of Germany
Bundesrepublik Deutschland
Deutschland
...
```
The "location_name" printed by the `soup/location` tool is often a
short, common string that is sometimes called the formal location
name for the given ISO 3166 code. Thus in the above example for _DE_,
the location name of _Germany_ is used.
If the author wishes to not specify a location, they should select **Anonymous location**.
##### email
```json
"email" : "mame@ruby-lang.org",
```
This _JSON member_ holds the email address of the author, or is the value null.
There **MUST** be one and only one `email` _JSON member_ and the _JSON value_ **MUST**
be a _JSON string_ or it **MUST** be a _JSON null_.
If the author wishes to not specify an email address, or if the email address is
unknown, they should use the _JSON null_ as the _JSON value_ of this _JSON member_.
For example:
```json
"email" : null,
```
NOTE: The _JSON null_ is **NOT** enclosed in quotes!
##### url
```json
"url" : "https://mametter.hatenablog.com",
```
This _JSON member_ holds the URL of the author's home page.
There **MUST** be one and only one `url` _JSON member_ and the _JSON value_ **MUST**
be a _JSON string_ or it **MUST** be a _JSON null_.
If the author wishes to not specify an email address, or if the URL is
unknown, they should use the _JSON null_ as the _JSON value_ of this _JSON member_.
For example:
```json
"url" : null,
```
NOTE: The _JSON null_ is **NOT** enclosed in quotes!
##### alt_url
```json
"alt_url" : null,
```
This _JSON member_ holds an alternate or 2nd URL a home page for the author.
There **MUST** be one and only one `url` _JSON member_ and the _JSON value_ **MUST**
be a _JSON string_ or it **MUST** be a _JSON null_.
In some cases the author may wish to record a special URL for their IOCCC entry,
or a 2nd URL such as a work or school or personal home page. For example,
Cody as of _Thu Nov 30 23:51:12 UTC 2023_ used:
```json
"alt_url" : "https://ioccc.xexyl.net",
```
If the author wishes to not specify an email address, or if the alternate URL is
unknown, they should use the _JSON null_ as the _JSON value_ of this _JSON member_.
For example:
```json
"url" : null,
```
NOTE: The _JSON null_ is **NOT** enclosed in quotes!
##### deprecated_twitter_handle
This _JSON member_ used to hold the twitter handle of the author.
There **MUST** be one and only one `deprecated_twitter_handle` _JSON member_ and the _JSON value_ **MUST**
be a _JSON string_ or it **MUST** be a _JSON null_.
The IOCCC no longer is associated with twitter (or whatever someone chooses to call it),
and so the `deprecated_twitter_handle` is **no longer used**. A _JSON value_ that is
not a _JSON null_ is kept for only historic reasons. For example, Anthony C. Howe
once used:
```json
"deprecated_twitter_handle" : "@SirWumpus",
```
If the author wishes to not specify an twitter handle, or if the twitter handle is
unknown, they should use the _JSON null_ as the _JSON value_ of this _JSON member_.
For example:
```json
"deprecated_twitter_handle" : null,
```
NOTE: The _JSON null_ is **NOT** enclosed in quotes!
##### mastodon
```json
"mastodon" : "@mame@ruby.social",
```
This _JSON member_ holds the
[Mastodon social network](https://en.wikipedia.org/wiki/Mastodon_\(social_network\))
handle of the author.
There **MUST** be one and only one `mastodon` _JSON member_ and the _JSON value_ **MUST**
be a _JSON string_ or it **MUST** be a _JSON null_. The _JSON string_ just be a valid
Mastodon handle. In particular is must start with an at sign (_@_), followed by the
Mastodon username, followed by a 2nd sign (_@_), followed by the Mastodon server instance
used by the author.
For more information in Mastodon, see the [Mastodon help](https://mastodon.help) guide.
See the "Mastodon Address" section of that page in particular.
The IOCCC Mastodon handle is:
```json
@ioccc@fosstodon.org
```
The IOCCC uses the Mastodon social network for announcements such
as the opening and closing of a new IOCCC, changes to the IOCCC web
site, updates during the judging process, and when new IOCCC winners
are selected. We recommend you follow us on Mastodon.
If the author wishes to not specify an Mastodon handle, or if the Mastodon handle is
unknown, they should use the _JSON null_ as the _JSON value_ of this _JSON member_.
For example:
```json
"mastodon" : null,
```
NOTE: The _JSON null_ is **NOT** enclosed in quotes!
##### mastodon_url
```json
"mastodon_url" : "https://ruby.social/@mame",
```
This _JSON member_ holds the URL of the author's Mastodon page.
There **MUST** be one and only one `mastodon_url` _JSON member_ and the _JSON value_ **MUST**
be a _JSON string_ or it **MUST** be a _JSON null_. The _JSON string_ just be a valid URL.
If the `mastodon` handle is a _JSON null_, them the `mastodon_url` **MUST** be a _JSON null_.
If the `mastodon` handle is a _JSON string_, then the `mastodon_url` **MUST** be a _JSON string_.
The `mastodon_url` is just a translation of the above mentioned [mastodon](#mastodon) handle.
For example, if the Mastodon handle is:
```
@user@server.domain
```
Then the `mastodon_url` would be:
```
https://server.domain/@user
```
If the author wishes to not specify an Mastodon URL, or if the Mastodon URL is
unknown, they should use the _JSON null_ as the _JSON value_ of this _JSON member_.
For example:
```json
"mastodon_url" : null,
```
NOTE: The _JSON null_ is **NOT** enclosed in quotes!
##### github
```json
"github" : "@mame",
```
This _JSON member_ holds the [GitHub](https://github.com) handle of the author.
There **MUST** be one and only one `github` _JSON member_ and the _JSON value_ **MUST**
be a _JSON string_ or it **MUST** be a _JSON null_. The `github` _JSON string_ **MUST**
start with an at sign (_@_) and **MUST** be a valid GitHub username.
The IOCCC uses GitHub to hold the [official winner repo of the IOCCC](https://github.com/ioccc-src/winner),
and hosts [official IOCCC web site](https://www.ioccc.org) on GitHub pages.
The IOCCC GitHub handle is:
```
@ioccc-src
```
If the author wishes to not specify an GitHub handle, or if the GitHub handle is
unknown, they should use the _JSON null_ as the _JSON value_ of this _JSON member_.
For example:
```json
"github" : null,
```
NOTE: The _JSON null_ is **NOT** enclosed in quotes!
##### affiliation
```json
"affiliation" : null,
```
This _JSON member_ holds the affiliation of the author.
There **MUST** be one and only one `affiliation` _JSON member_ and the _JSON value_ **MUST**
be a _JSON string_ or it **MUST** be a _JSON null_.
An affiliation might be the name of a school, university, company, or organization.
It is recommended that the affiliation _JSON string_ be the formal affiliation name.
For example, the affiliation for the IOCCC would be:
```
The International Obfuscared C Code Contest
```
If the author wishes to not specify an affiliation, or if the affiliation is
unknown, they should use the _JSON null_ as the _JSON value_ of this _JSON member_.
For example:
```json
"affiliation" : null,
```
NOTE: The _JSON null_ is **NOT** enclosed in quotes!
##### winning_entry_set
##### winner_id
```json
"winning_entry_set" : [
{ "winner_id" : "2012_endoh1" },
{ "winner_id" : "2012_endoh2" },
{ "winner_id" : "2013_endoh1" },
...
{ "winner_id" : "2020_endoh1" },
{ "winner_id" : "2020_endoh2" },
{ "winner_id" : "2020_endoh3" }
]
```
The `winning_entry_set` _JSON member_ holds _JSON array_ containing one or more `winner_id` _JSON member_s.
There **MUST** be one and only one `winning_entry_set` and the _JSON value_ **MUST**
be a non-empty _JSON array_. Each value in that _JSON array_ **MUST** must contain
a _JSON member_ whose _JSON name_ **MUST** be "_winner_id_" and those _JSON value_
is a valid winner ID.
Due to the nature of the _So-called JSON spec_, the last value of the `winning_entry_set`
_JSON array_ cannot end in a comma (_,_).
See [FAQ 6.7](#faq6_7) for information about winner ids.
See [FAQ 5.5](#faq5_5) for information about how to update
and/or correct IOCCC author information.
### <a name="faq6_7"></a><a name="author_json"></a>FAQ 6.7: What is a winner_id?
A `winner_id` is a string that identifies a winning entry of the IOCCC.
A `winner_id` is a 4-digit year, followed by an underscore, followed by a directory name.
For example, the `winner_id` associated with Cody Boone Ferguson's 2nd winning IOCCC entry
of 2020 is found under the following directory:
```
2020/ferguson2
```
The `winner_id` for that winning entry is:
```
2020_ferguson2
```