diff --git a/faq.html b/faq.html index 2066c1b1c..7dd543acd 100644 --- a/faq.html +++ b/faq.html @@ -392,119 +392,117 @@
This is FAQ version 28.0.5 2024-10-14.
mkiocccentry tool?.auth.json file?.info.json file?.auth.json and/or .info.json files?fnamchk tool?mkiocccentry tool and how do I use it?mkiocccentry and related tools?mkiocccentry tool?.auth.json file?.info.json file?.auth.json and/or .info.json files?fnamchk tool?mkiocccentry tool and how do I use it?mkiocccentry and related tools?try.sh and try.alt.sh scripts and why should I use them?try.sh and try.alt.sh scripts and why should I use them?author handle?author_handle.json file and how are they used?entry_id?.entry.json file and how is it used?author handle?author_handle.json file and how are they used?entry_id?.top, .allyear, .year and .path files?.entry.json file and how is it used?Jump to: top
Jump to: top
-To submit your code to the IOCCC, you MUST follow these steps:
Jump to: top
Jump to: top
-There are types of entries that are frequently submitted to the IOCCC. While we do not wish to prevent people from sending a submission to the IOCCC on a frequently submitted theme, @@ -611,7 +605,7 @@ new and novel ways.
IMPORTANT HINT: Be sure to clearly explain near the beginning
of your remarks.md file, see the
FAQ on “remarks.md”,
-why you are submitting a entry based on a frequently
+why you are submitting an entry based on a frequently
submitted theme and how compares with previous IOCCC winners
of the same theme.
FAIR WARNING: Be sure to clearly explain near the beginning
of your remarks.md file, see the
FAQ on “remarks.md”,
-why you are submitting a entry based on a frequently
+why you are submitting an entry based on a frequently
submitted theme and how compares with previous IOCCC winners
of the same theme.
Jump to: top
-We recommend starting with the sample
Makefile
as found in the mkiocccentry GitHub repo,
@@ -722,11 +714,9 @@ your Makefile should copy prog.c into the desired file
make compatible make(1)
command that is compatible with GNU Make version 3.81.
Jump to: top
-While your entry’s source filename, as submitted, must be prog.c, your entry’s Makefile
may copy prog.c to a different filename as part of the compiling/building process. For example:
... Makefile continues above ...
@@ -768,7 +758,6 @@ For example:
... Makefile continues below ...
Jump to: top
-Your entry must compile with clang or gcc and run under at least one flavor of a UNIX system that conforms to the SUS, otherwise known as the The Single UNIX Specification Version 4 or later SUS.
Jump to: top
-The IOCCC judges to welcome feedback on the IOCCC rules, IOCCC guidelines and on the IOCCC mkiocccentry tools.
@@ -806,17 +792,15 @@ have to say, consider adding comments to that particular discussion. Otherwise consider opening a new mkiocccentry discussion.Jump to: top
-We realise that the IOCCC rules, IOCCC guidelines and the IOCCC mkiocccentry tools can be confusing or even seem overwhelming to some people.
-The IOCCC judges to welcomes questions about the IOCCC +
The IOCCC judges do welcome questions about the IOCCC and will be happy to help.
Chances are, if you have a question, there are a number of other people who have similar questions. So we recommend first view the @@ -827,16 +811,17 @@ even if to just say:
I have this question too.
Feel free to provide additional feedback in the existing discussion as needed.
-BTW: If your question just about the +
BTW: If your question is just about the IOCCC mkiocccentry tools, please view the mkiocccentry repo discussions instead.
-If you do not find an suitable open discussion, please consider opening a +
If you do not find a suitable open discussion, please consider opening a new IOCCC repo discussion with your question. Doing this may be of help to others with a question similar to yours.
-BTW: If your question just about the -IOCCC mkiocccentry tools, please -and suitable open discussion over there, then please consider opening a +
BTW: If your question is just about the +IOCCC mkiocccentry +tools, and you do not +see a suitable open discussion over there, then please consider opening a new mkiocccentry discussion over there.
If you do not feel, for some reason, comfortable asking your question in public @@ -854,13 +839,11 @@ others are wondering about as well!
See also the FAQ on “rules, guidelines, tools feedback”.
Jump to: top
-The IOCCC makes extensive use of markdown. For example, we submitting to the IOCCC, we have people to submit remarks about entry in markdown format. Every @@ -873,11 +856,9 @@ as it lists things you should not use in markdown files.
See the markdown syntax guide. See also CommonMark Spec.
Jump to: top
-mkiocccentry tool?As the mkiocccentry toolkit is crucial in the contest, both for submitters and the judges, if you find a bug (or you think you find a bug) we would be grateful if you were to report it at @@ -887,11 +868,9 @@ page.
FAQ on “reporting bugs and other issues in the mkiocccentry repo” in the mkiocccentry repo.Jump to: top
-.auth.json file?This file is constructed by the mkiocccentry(1) prior to forming the xz
compressed tarball of your submission. The .auth.json file contains
information about the author or authors of the submission, in JSON format.
.auth.json file.
If you wish to verify that your .auth.json file is valid JSON then see the
FAQ on “validating JSON documents”.
Jump to: top
-.info.json file?This file is constructed by the mkiocccentry(1) prior to forming the xz
compressed tarball of your submission. The .info.json file contains
information about the submission, in JSON format. The
@@ -1596,13 +1573,11 @@ validate the .info.json file.
If you wish to verify that your .info.json file is valid JSON then see the
FAQ on “validating JSON documents”.
Jump to: top
-If you want or need to verify that a JSON document (as a string or file) is valid, you can use the jparse @@ -1621,23 +1596,19 @@ repo:
sudo make installThe syntax of jparse(1) is very simple:
jparse foo.json
-If the tool shows valid JSON then the document is valid JSON; otherwise it’ll
-show an error message. If you don’t want to see any output unless it is invalid
-you can specify the -q option to jparse. In that case an exit code of 0
-indicates the JSON is valid.
If the tool exits 0 then the document is valid JSON; otherwise it’ll +show an error message.
If you want to see more information about the parsing you can increase the
verbosity with the -v option. For instance:
jparse -v 3 foo.json
If the tool is not installed then you will obviously have to specify the path of the tool.
Jump to: top
-.auth.json and/or .info.json files?If you want to validate the .auth.json or .info.json files you
should use chkentry(1) from the mkiocccentry
repo.
Jump to: top
-The tool that validates submission tarballs can be obtained from the IOCCC
mkiocccentry repo. The
mkiocccentry tool itself will run the validator after forming the tarball.
@@ -1705,13 +1674,11 @@ of this document to discuss the many tests that txzchk(1) runs; if
know we refer you to the source
code.
Jump to: top
-fnamchk tool?This tool, which is in the mkiocccentry repo, validates the directory name of your submission.
@@ -1727,11 +1694,9 @@ you can do so. For instance: FAQ on “validating your submission tarball” for more information.Jump to: top
-mkiocccentry tool and how do I use it?This tool also comes from the mkiocccentry repo and it is required that you use it to package your submission. Not doing so puts you at a great risk of @@ -1866,13 +1831,11 @@ or more of these tools manually.
See also the Guidelines and the Rules (and in particular Rule 17).
Jump to: top
-mkiocccentry and its related tools?After you downloaded the mkiocccentry repo
Quoting from the mkiocccentry repo FAQ:
@@ -1892,7 +1855,6 @@ for more up to date information on downloading, compiling, and related FAQ inforJump to: top
-It was a dark and stormy night…
OK, let’s go back to 1984, not 1830: one day (1984 March 23 to be exact), Larry Bassel and I (Landon Curt Noll) were working for National Semiconductor’s Genix porting @@ -1957,24 +1918,20 @@ and the tradition continues as the longest running contest on the Internet.
P.S. Part of the inspiration for making the IOCCC a contest goes to the Bulwer-Lytton fiction contest.
Jump to: top
-Some years, such as 1997, 1999, 2002-2003, 2007-2010, 2016-2017, 2021-2023, no IOCCC was held.
While we try to hold the IOCCC every year, sometime the other demands on the IOCCC judges do not permit us to hold a new IOCCC.
The pause during the 2021-2023 period was due to the IOCCC judges developing tools to -make is much more likely for the IOCCC to be held in a yearly basis later on.
+make it much more likely for the IOCCC to be held on a yearly basis later on.Jump to: top
-The long history of the official IOCCC website can be viewed at the Internet Wayback Machine Wayback Machine.
@@ -2130,13 +2087,11 @@ of the IOCCC winner repo. repo resulting in many, many substantial improvements to the official IOCCC website.Jump to: top
-The IOCCC size rule has changed over the years.
In later years, Rule 2 was split into two parts. These two parts of Rule 2 are:
Jump to: top
-The Great Fork Merge was when thousands of changes that had been applied to the temp-test-ioccc repo was applied to the Official IOCCC winner repo causing the @@ -2209,8 +2162,8 @@ to the Official IOCCC winner repo< FAQ on “Great Fork Merge Date” for more information.
Jump to: top
-Jump to: top
-By tradition, we do not say.
Jump to: top
-First, PLEASE read the IOCCC markdown guidelines.
Next, while you may put in as much or as little as you wish into your entry’s
remarks.md file, we do have few important suggestions:
Jump to: top
-Because the publication on the IOCCC site IS the award! Anyone is free to put their IOCCC hopefuls, lookalikes and/or entries that do not win on their web page for everyone to see.
Jump to: top
-It takes a fair amount of time to setup, run, respond to messages, process entries, review entries, trim down the set entries to a set of winning entries, doing the write-up of the entries, announcing the entries, reviewing final edits of the @@ -2297,27 +2242,26 @@ late entries to wait until the next contest, etc… It takes a few weekends and a number nights of study and work … which is hard given that we are busy with many other activities as well.
Note that we do not contact the author if an entry does not compile or does not -work as advertised, we might attempt to fix obvious compilation problems or +work as advertised; we might attempt to fix obvious compilation problems or incompatibilities, but no more than that - so be sure that your entry does work on at least a couple different platforms, at least one of them being UNIX or -POSIX-conforming.
+SUS-conforming. See the +FAQ on “SUS” +for more information.Jump to: top
-Are you trying to trick us? :-)
By tradition, we do not say how many judging rounds we have in a given IOCCC.
-We often report when the IOCCC judges start the 1st round, and when usually +
We often report when the IOCCC judges start the 1st round, and then usually report when the IOCCC judges start near final judging rounds, and sometimes we also report when we enter what we believe is the final judging round, so you may guess that we have at least 3 rounds. :-) The actual number of rounds is certainly more than 3.
Jump to: top
-In some years, the IOCCC judges discover a truly amazing IOCCC entry that stands out among all of the other IOCCC entries received that year. For such an IOCCC entry, the IOCCC judges award a “Grand Prize” @@ -2361,7 +2304,6 @@ from the judges, they used the following awards:
These could be considered the ‘best entry’ for those years with 1 or more other entries that came in close behind.
Jump to: top
-Once the IOCCC closes, the judges will:
Select the winning entries announce them on the @IOCCC
+ Judge the submissions. Select the winning entries and announce them on the @IOCCC
mastodon feed. Notify the authors of entries that won the IOCCC via email using their previously
registered email address. Announce who are authors of this year’s winning IOCCC entries via the @IOCCC mastodon
feed. Upload the winning code to the Official IOCCC winner repo Upload the winning code to the Official IOCCC winner
+repo. Update the Official IOCCC website, and in particular
display this year’s winning IOCCC entries at the top of the IOCCC
-winning entries page. Update the IOCCC news page.
Update the IOCCC news page, also by updating this repo.
Jump to: top
Jump to: top
-In general the best way to compile everything in an entry directory is to run:
make clobber all
If you wish to compile every entry for every year you should go to the top level
@@ -2432,13 +2373,11 @@ compilers might do different things, have different defects or other issues.
Note that the Makefiles check the CC variable by substrings so that if you
were to do something like make CC=gcc=mp-12 it would register as gcc.
Jump to: top
-Some entries that won the IOCCC, particularly entries from long ago, no longer compile on more modern systems because the C language has evolved (i.e. the modern C compilers are much more strict in what they accept as a valid program), or the entry @@ -2467,13 +2406,11 @@ for more information.
fixed so that they can compile in modern systems though just because an entry compiles does not mean it will run on your specific system.Jump to: top
-Unfortunately some older entries are non-portable and require 32-bit support or 32-bit binaries. A problem system here is macOS Catalina (10.15) as as of that version macOS no longer supports 32-bit binaries. If the entry acts on a certain @@ -2500,9 +2437,9 @@ for details. See also the FAQ on “GitHub pull request” for more information about pull requests.
Jump to: top
-Jump to: top
-Although we have fixed numerous entries to work with clang (sometimes in an alt version but usually in the program itself) there are some that simply cannot be -fixed or if they are fixable they have not yet been fixed (we are working on -this but other things have to be done too and all on free time).
-This is because clang has some defects where the args of main() are required to +fixed or if they are fixable they have not yet been fixed (and might or might +not ever be fixed).
+This is because clang has some defects where the args of main() are required to
be a specific type and some versions of clang allow only 1, 2 or 3 args, not 4,
-to main(). In the case of types of args many were changed to the right type and
-then what was main() became another function of the original main() type.
main(). In the case of types of args many were changed to the right type and
+then what was main() became another function of the original main() type.
At the same time some entries are not designed to work with clang. There might -be alternate code added at some point but as above this depends on free time and -other things that have to be done plus remembering to do it.
+be alternate code added at some point but at this point it is highly unlikely. +gcc is far more forgiving. Nonetheless some entries no longer work or worked
+with gcc. Some of these have been fixed (or in some cases partly fixed, much
+like with clang) but there might be some that do not work with gcc or
+clang or for that matter some other compiler.
See if the problem is mentioned in bugs.html. If you have a change
that fixes the problem (even if it just a change to the Makefile) that doesn’t
negatively impact the entry too much, consider submitting that change in the
@@ -2547,17 +2485,14 @@ See also the
FAQ on “GitHub pull request”
for more information about pull requests.
Jump to: top
-This was a C beautifier for Unix, both AT&T and Berkeley, but it seems to no
longer be available, code wise, except for Plan 9, but Plan 9 was never used for
judging the IOCCC. A Unix man page for cb
still exists.
Jump to: top
-cb
The simplest way to do this is to type reset. If echo was disabled you can get
usually away with stty echo. Sometimes you can also get away with stty sane.
-reset does the most but note that it will clear the screen (obviously clear
-will too but it won’t reset the terminal).
reset does the most but note that it will clear the screen; it is not the
+clearing of the screen, however, that solves the problem, so clear will not
+help.
Jump to: top
-Jump to: top
-This depends on your operating system but below are instructions for Linux and macOS with alternative methods for macOS and different package managers with Linux.
Jump to: top
-This depends on your operating system but below are instructions for Linux and macOS with alternative methods for macOS and different package managers with Linux.
We recommend trying a method suitable for your environment first, if possible.
Jump to: top
-This might depend on the entry but most likely the Swiss Army Knife of sound processing programs, SoX, will work. How to install depends on your OS.
@@ -2854,11 +2781,9 @@ include this here, at least for now.Usually the index.html file will explain how to use it under Linux so we do not include this here, at least for now.
Jump to: top
-While we know that use of -Weverything is generally not recommended
by clang C compiler developers, we do use the -Weverything
option in a certain case in IOCCC entry Makefiles.
1989/westley:
you can get your entry to work well in clang it might very well be considered
better than other entries.
Jump to: top
-For some entries one needs to send interrupt or EOF or some other signal/other
special characters. There are typical defaults like (where ^ = ctrl):
intr is set to:
reason it’s not you might have to do something else including just piping it to
just grep intr or whatever.
Jump to: top
-grep intr or whatever.
Please note that the IOCCC judges do NOT support IOCCC entries.
Nevertheless, there may be a number of reasons why an IOCCC entry
may fail to compile or run well or fail to run on your system.
-In some cases the American National Standards Institute’s ANSI C -committee has damaged the C standard to the point where perfectly -valid C programs no longer compile with modern compilers. As such -some old IOCCC entries cannot no longer be compiled with modern compilers.
+In some cases the American National Standards Institute’s ANSI C committee has +damaged the C standard to the point where perfectly valid C programs no longer +compile with modern compilers. As such some old IOCCC entries can no longer be +compiled with modern compilers (though a great deal of these were fixed in +2023).
In some cases programs that may have worked on an old computer system longer work on modern computers. Some IOCCC entries do not work well, -or no longer work on modern computers or modern operating systems. -Some IOCCC entries fail to compile under clang, or gcc. +or no longer work on modern computers or modern operating systems, though again +a great deal of these were fixed for modern systems.
+Some IOCCC entries fail to compile under clang, or gcc. Some IOCCC entries require operating system services that may not be present on your system.
In some cases the IOCCC entry simply has bugs or (Mis)features.
@@ -2978,7 +2903,7 @@ written by the authors. In some cases the problem is well known and we are looking for someone to attempt to fix it.In some cases there is an alternate version of the IOCCC entry that you may wish to try.
-It also possible that you may have discovered a bug in an winning IOCCC +
It also possible that you may have discovered a bug in a winning IOCCC entry. If so, you are invited to try and fix the IOCCC entry and submit that fix by way of a GitHub pull request. @@ -2986,11 +2911,9 @@ Please see the FAQ on “fixing an entry” for how to submit a fix to an IOCCC entry.
Jump to: top
-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:
make setup check
That will install it to /usr/local/bin. Now you should be able to use the
entry in question.
This depends on your operating system for which we describe a couple below.
Execute the following as root or via sudo:
@@ -3040,11 +2961,9 @@ packages: one for compiling and one for linking / running.Go to the netpbm website and follow their instructions for downloading, installing and using netpbm.
We recommend trying a method suitable for your environment first, if possible.
-This depends on your operating system for which we describe a couple below.
Execute the following as root or via sudo:
@@ -3078,11 +2997,9 @@ packages: one for compiling and one for linking / running.Go to the libjpeg-turbo website and follow their instructions for downloading, installing and using libjpeg-turbo.
We recommend trying a method suitable for your environment first, if possible.
-This depends on your operating system for which we describe a couple below.
Execute the following as root or via sudo:
@@ -3116,11 +3033,9 @@ packages: one for compiling and one for linking / running.Go to the ImageMagick website and follow their instructions for downloading, installing and using ImageMagick.
We recommend trying a method suitable for your environment first, if possible.
-This depends on your operating system for which we describe a couple below.
In general OpenGL needs X11 to be installed and the X Window Server to be running. See the FAQ on “X11” @@ -3128,7 +3043,7 @@ for general information about X11.
Once X11 is install and the X Window Server is running, one needs to compile and link with the two libraries, GL and GLU:
cc ... -lGL -lGLU -L _location-where-X11-libs-are-installed_ -lX11
-NOTE: The OpenGL development effort is being manageed by vulkan.org. +
NOTE: The OpenGL development effort is being managed by vulkan.org. We suggest you check out their resource for further information on OpenGL.
Execute the following as root or via sudo:
@@ -3156,11 +3071,13 @@ packages: one for compiling and one for linking / running.Go to the Vulkan website and follow their instructions for downloading, installing and using OpenGL.
We recommend trying a method suitable for your environment first, if possible.
-For the IOCCC mkiocccentry submission toolkit and the winning IOCCC entries we support ONLY GNU Makefile syntax. This means that if @@ -3178,8 +3095,8 @@ to the top level directory of the winner repo you can do:
it like: gmake MAKE=gmake
though of course for both you may specify a rule or rules to run.
-index.html file and then 1984/mullender/index.html you could point your
browser to 1984/index.html, scroll down to Winning Entries of 1984 - The 1st IOCCC and click on the link 1984/mullender which will take you to the
index.html file. Of course the caveats listed above still will apply.
-try.sh and try.alt.sh scripts and why should I use them?A lot of the entries, old and otherwise, have complicated uses or if not -complicated uses then numerous uses (sometimes both), and having a script that -automates these for viewers improves the usability of these entries so one can -enjoy them better.
+A lot of the entries, old and otherwise, have complicated uses or, if not +complicated uses, it has numerous uses (sometimes both), and having a script +that automates these for viewers improves the usability of these entries so one +can enjoy them better.
The try.sh script is for the original entry and the try.alt.sh script is for
alternate versions. These scripts are usually for the Try: and Alternate try: sections in the index.html files.
Some entries provide additional scripts that are meant to run the entry as well @@ -3286,8 +3201,8 @@ and there are some other benefits as well which you would miss if you did not use them. Nevertheless, if you prefer to do it manually, whether to help you process or appreciate the entry more, then please do so.
Jump to: top
-char *s, saying it is unsafe buffer
when it’s not (this might be enabled by -Weverything but it might not be; for
more details on why we use -Weverything in Clang see the FAQ on
“-Weverything”), and it is not detrimental to your submission
-if you disable this). This warning happens to be -Wno-unsafe-buffer-usage.
+if you disable this. This warning happens to be -Wno-unsafe-buffer-usage.
So in short, no you should not worry about these as they are sometimes inevitable in obfuscated code and even non-obfuscated code.
If you can work past this it might be good but this is not something that should be worried about too much as this is on the compiler developers, not you.
Jump to: top
-This depends on your operating system but below are instructions for Linux and macOS with alternative methods for macOS and different package managers with Linux.
We recommend trying a method suitable for your environment first, if possible.
Jump to: top
-Please see the official Ruby installation guide.
Jump to: top
-First, if gem is not installed, see the gem GitHub repo.
Assuming you have git(1) installed, you can do:
git clone https://github.com/rubygems/rubygems
@@ -3362,30 +3271,11 @@ then run:
Section 4: Changes made to IOCCC entries
Jump to: top
-It is very likely in this case that the code was fixed to work for modern
-systems as part of the reworking of the website. If you have this problem in
-some entries you should look at the original code as in dirname.orig.c or
-prog.orig.c. dirname is the directory name. For instance, one of Landon’s
-favourite entries of all time is 1984/mullender and
-the entry’s dirname there would be mullender. Sometimes the original is in an alt
-version like dirname.alt.c or prog.alt.c. In fact it is advisable to look at
-the original code when reading the author’s (and sometimes authors’) remarks.
See the -FAQ on “original source code” -for more information.
-Jump to: top
-Some may wonder: “Doesn’t this tamper with the entry too much?”
A fine line indeed has to be drawn here but it was decided that it is worth it because of alarming warnings that can be displayed, in some systems at runtime @@ -3408,16 +3298,17 @@ instance the fix to 1988/reddy required only these problems.
An annoying fact is that for ‘“compatibility” reasons’ fgets() retains the
newline and gets() does not. As the Unix version 7 man page used to say:
BUGS
-
- The fgets(3) function retains the newline while gets(3) does not, all in the
- name of backward compatibility.
++BUGS
+The fgets(3) function retains the newline while gets(3) does not, all +in the name of backward compatibility.
+
We’re not sure how this is compatibility but either way it can cause a problem and it is this that has complicated most of the fixes though again some can look almost identical.
Jump to: top
-Jump to: top
-If the entry has been fixed for modern systems and this fix required -modification to the code then invariably there will be entries where the remarks -of the author or authors are inconsistent with the original code, the size of -the code might be against rule 2 and other kinds of inconsistencies might also -be there.
+Because some entries had to be fixed for modern systems and often the fixes +required a change in code, sometimes significant changes. Thus the remarks can +be inconsistent in some cases.
This is why we recommend that when you read the remarks, sometimes the judges’
remarks and always the author’s or authors’ remarks, you look at the original
code. When the entry source code is called prog.c the original code is in
@@ -3525,25 +3416,25 @@ original code is in entry source code changes”
See the +FAQ on “original source code” +and the +FAQ on “entry source code changes” +for more information.
Jump to: top
-Due to the fact that the original code has sometimes had to change these files are the original winning entry or as close to as possible to the original that -we can find.
+we can find (in some cases a change was made by the Judges, for example, or an +author might have made a modification without saving the original).Jump to: top
-The alternate versions are exactly what they sound like, versions of their respective entries that were not the winning source code but have additional features added (often by the author) or fixes, updates at the request of the @@ -3568,13 +3459,11 @@ judgement call.
FAQ on “original source code” for more information.Jump to: top
-There are a number of reasons this was done but they usually come down to a
mis-feature or defect in the clang compiler.
In all versions of clang the first arg must be an int and the rest must be a
@@ -3588,11 +3477,9 @@ could no longer be so: main() instead had to call another function
the body of the old main() and that function would call itself again. In some
cases, however, this had to be done even without clang objections.
Jump to: top
-The reasons this was done varies. One of the earliest changes was making the old
.hint or .text files README.md files. The first time this was done was for
2019/README.text and 2020/README.text with commit
@@ -3612,17 +3499,18 @@ method of how to display files was devised).
There were certainly other reasons as well.
Jump to: top
-Like with files being renamed, there are multiple reasons files were added or
-removed. The addition of the try.sh and try.alt.sh scripts is the most
-significant example of files being added. These scripts, as the
-try.sh sometimes the try.alt.sh scripts
+
Like with files being renamed, there are multiple reasons files were added,
+removed or changed. The addition of the try.sh and try.alt.sh scripts is the most
+significant example of files being added. These scripts,
help demonstrate entries by automating commands, sometimes many
commands and not always simple commands, that one would previously have to run
manually (there are other benefits as well).
The end result is to help improve the presentation of the entries in some way or ways.
Jump to: top
-IMPORTANT NOTE: If you believe that the “original source file” is NOT the original source code, then plesse open an IOCCC issue and describe the -problem to the IOCCC judges, including that you believe +problem to the IOCCC judges, including what you believe is the correct “original source file”.
FYI: To determine the difference between the “original source file” and the source code as it is now now, try:
@@ -3678,16 +3566,14 @@ FAQ on “what changed” for more information and make rules relating to “original source file” differences.Jump to: top
Jump to: top
-The known bugs file, order by IOCCC years, contains a list of known bugs & (mis)features. If you are looking for an IOCCC entry @@ -3703,13 +3589,11 @@ In cases where the bug is known, the entry’s known bugs
Jump to: top
-We do not ‘maintain’ the contest entries as such. The code is made available on an ‘AS IS’ basis. If you have a FIX for an entry, we suggest that you submit your fixes in a GitHub pull request as we welcome pull requests that have a @@ -3728,13 +3612,11 @@ IOCCC entry. See also the FAQ on “GitHub pull request” for more information about pull requests.
Jump to: top
-If you see a problem with an IOCCC entry, first check the known bugs file. In some cases what you might think of as a bug is instead a known feature. In some cases the bug is known, but no fix has ever been submitted. @@ -3769,13 +3651,11 @@ for more information about pull requests.
Note that we’re much more inclined to accept an author’s fixes but the judges have the final say in the matter.
Jump to: top
-If you discover a problem with the IOCCC website that is related to a particular IOCCC entry, please see the FAQ on “report entry bug” @@ -3794,13 +3674,11 @@ website problem, we ask that you first look at the open a new IOCCC issue.
+to open a new IOCCC website issue.Jump to: top
-For IOCCC website problems that relate to a particular IOCCC entry, please see the FAQ on “fixing an entry” @@ -3858,11 +3736,9 @@ modify JSON files and/or change a bin directory toolfixing an entry” for information on opening up an IOCCC issue.
-You may correct or update IOCCC author information by submitting a
GitHub pull request that modifies an author’s author_handle.json file.
For example, if a given author_handle.json file contained:
See the FAQ on “fixing author information” for information about how to change author location codes.
-We would appreciate if you try to fix the broken (the link goes nowhere) or wrong (the link goes to something that clearly is not the original intent) web link. If wish to fix such links, you may open a GitHub pull request as described in @@ -3981,13 +3855,11 @@ replace that text with:
If you just wish to report the bad link issue, see FAQ on “report website problem”.
Jump to: top
-The IOCCC judges run the IOCCC entirely out of their own funds. This includes paying for IOCCC related hardware, services, registration, software and related technical items.
@@ -4001,7 +3873,6 @@ better for everyone. :-) efforts, we suggest making an Anonymous gift via the IOCCC Amazon wishlist.Jump to: top
-PLEASE NOTE: many winning authors have unobfuscated code of their own entries and you should look for this first, often on GitHub or on their website; see the FAQ on how to find more information about a winning @@ -4038,7 +3908,7 @@ least in most cases; other terms might be used, including on a rare occasion spoiler, this depending on context.
We ask that the deobfuscated code be identical in functionality to the winning IOCCC entry code.
-NOTE: Be aware that IOCCC entry code may contain extremely subtle and
+ PLEASE NOTE: Be aware that IOCCC entry code may contain extremely subtle and
obscure side effects (i.e., features). Those wishing to contribute a
deobfuscated version of code should strive to mimic the original (or
existing) IOCCC entry code as much as possible. Some authors can be contacted
@@ -4086,13 +3956,11 @@ that be prove helpful.Section 6: Miscellaneous IOCCC
Jump to: top
-As entries have been fixed it is entirely possible that some of the entries no longer fit within the year’s size restrictions. Invariably the length of columns and/or number of rows have also changed.
@@ -4104,7 +3972,6 @@ original winning entries as compressed tar files for a given year. “abuse of the rules” (although now blatant abuse of the rules to get around rule 2 size limits is discouraged).Jump to: top
-Yes! Please see bugs.html for a list of known bugs and/or issues of a variety of kinds.
Note that just because an entry is not in the bugs file does not mean there is not an issue and note that some issues are simply missing files, dead URL(s) or something like that.
Jump to: top
-We are not accepting mirror requests at this time, sorry. However you are free -to fork the IOCCC winner repo. We do ask -that your fork keep up to date with the latest changes when possible.
+There are a few steps in mirroring the website:
+Okay, backing up, on a more serious note: we are not accepting mirror requests at +this time, sorry. However you are free to fork the IOCCC winner +repo.
+Yes we are aware that some people have previously made their own repo of the +winning entries but these ARE UNOFFICIAL and VERY LIKELY out of date or +incorrect. What’s more, this repo is the source of the Official IOCCC +website so whenever a push is made to this repo the +Official IOCCC website is updated. When new winners are announced, this will +happen.
+To put it simply, please do NOT fork those repos, as they are UNOFFICIAL +and certainly OUT OF DATE.
+If you do make a new fork of THIS repo, we do ask that your fork keep up to +date with the latest changes when possible. Thank you.
Jump to: top
-While IOCCC judges look favorably on most requests to use IOCCC material, we request that you ask the IOCCC judges first. Of course, if you’re the winner of the entry you can make use of it as you want (make a shirt, @@ -4152,7 +4032,6 @@ See the Copyright at the bottom of IOCCC web pages for FAQ on “using IOCCC content”. For additional information on the Copyright and CC BY-SA 4.0 License.
Jump to: top
-As a precedent for first person -plural, we may sight Two-, +plural, we may cite Two-, Three-, and Four-Atom Exchange Effects in bcc in 3He and the co-authorship of F. D. C. @@ -4170,7 +4048,7 @@ Willard as well as the APS New Open Access Initiative.
The number of IOCCC judges has -always been “> 1” such that IOCCC judges often prefer to themselves +always been “> 1” such that IOCCC judges often refer to themselves in the plural, sometimes in the common plural, sometimes in the first person plural, there @@ -4189,13 +4067,13 @@ cat superposition may still be in effect and the 1982 report of death was an exaggeration.
p.s. Here is an image of F. D. C. Willard:
- +
Jump to: top
-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.
TL:DR: The contents of these JSON files contain the best known information about authors of IOCCC entries and is used to help form HTML files as well to contact an author.
@@ -4551,26 +4427,24 @@ FAQ on “fixing author information” for information about how to update and/or correct IOCCC author information.Jump to: top
-entry_id?A entry_id is a string that identifies a winning entry of the IOCCC.
A entry_id is a 4-digit year, followed by an underscore, followed by a directory name.
An entry_id is a string that identifies a winning entry of the IOCCC.
An entry_id is a 4-digit year, followed by an underscore, followed by a directory name.
For example, the entry_id associated with Cody Boone Ferguson’s 2nd winning IOCCC entry
of 2020 is found under the following directory:
2020/ferguson2
The entry_id for that winning entry is:
2020_ferguson2
Jump to: top
-.top, .allyear, .year and .path files?The .top file resides at the top directory. This file contains the complete list of IOCCC years.
-Under each IOCCC year. one will find a .year file. These files contain directory paths from the top directory,
+
Under each IOCCC year, one will find a .year file. These files contain directory paths from the top directory,
of the IOCCC entry directories for a given year. For example, see the 1984/.year file.
The .allyear file contains the contents of all .year files for all IOCCC years.
Under each IOCCC entry directory, you will find a .path file.
@@ -4587,11 +4461,9 @@ For example see top
The IOCCC is now attempting to use the following terms:
Jump to: top
-First, if you do not already have a GitHub account or you have not installed an ssh key to your account you must do so. For this we will assume you do not have a GitHub account. For the steps following creating a GitHub account you will @@ -4805,13 +4675,11 @@ example, you would type:
git checkout master && git pull https://github.com/ioccc-src/winner.git master && git push origin master
This will merge your pull request to your fork.
Jump to: top
-Disclaimer: This FAQ is not a license, has no legal value, and only highlights some of the key features and terms of the actual CC BY-SA 4.0 @@ -4835,13 +4703,9 @@ enjoy hat those working on the IOCCC have proper Attribution including, of course, the IOCCC winners themselves! It is designed to help ensure that everyone may enjoy the IOCCC.
Jump to: top
-The IOCCC uses Mastodon for news updates, announcements, and for various other social media purposes.
Please follow the IOCCC on Mastodon.
@@ -4867,11 +4731,9 @@ follow posts something so you will have to check the IOCCC feed manually. mastodon feed page and/or mastodon app from time to time to view IOCCC mastodon updates.Jump to: top
-If you are an author of a winning entry, you may find your own author_handle by going to your entry in the authors.html web page and viewing the string that follows the author_handle: line.
@@ -4902,11 +4764,9 @@ how they are used. FAQ on “Author, Entry, Submission” for more information on terms such as author, entry, and submission.Jump to: top
-Sometimes an author will state that for best viewing purposes you should have your tabstop set at say 4 or 8. If you use vim or vi or vim in no compatible mode you can do this easily: make sure you’re in command mode (in most cases you @@ -4914,11 +4774,9 @@ can hit ESC to do this) and then type the command:
:set tabstop=4
where 4 is the value you wish to set the tabstop to.
Jump to: top
-Jump to: top
-At the top of the index.html file of a winning entry with the author you want
information on, you should see a section called Author. All you have to do is
click on the author’s name (it’s a link) and it will take you to their
@@ -5019,10 +4875,8 @@ JSON files.
Jump to: top
-.entry.json file and how is they used?.entry.json file and how is it used?TL:DR: The contents of this JSON file contain information about each winning entry in JSON format.
@@ -5437,11 +5291,9 @@ source code (if there is an alternate version). Some, however, have another file name. Theentry_text for the try scripts will be script to try entry or
something along those lines.
Jump to: top
-The IOCCC stands for the International Obfuscated C Code Contest. The IOCCC is a C programming contest.
The goals of the IOCCC are:
diff --git a/faq.md b/faq.md index 3b1ed4360..b45008328 100644 --- a/faq.md +++ b/faq.md @@ -4,119 +4,117 @@ This is FAQ version **28.0.5 2024-10-14**. ## Section 0 - [Submitting to a new IOCCC](#faq0) -- 0.0 - How may I enter the IOCCC? -- 0.1 - What types of entries have been frequently submitted to the IOCCC? -- 0.2 - What should I put in my submission's Makefile? -- 0.3 - May I use a different source or compiled filename than prog.c or prog? -- 0.4 - What platform should I assume for my submission? -- 0.5 - How may I comment or make a suggestion on IOCCC rules, guidelines and tools? -- 0.6 - What is the best way to ask a question about the IOCCC rules, guideline and tools? -- 0.7 - What are the IOCCC best practices for using markdown? -- 0.8 - How do I report bugs in a `mkiocccentry` tool? -- 0.9 - What is a `.auth.json` file? -- 0.10 - What is a `.info.json` file? -- 0.11 - How can I validate any JSON document? -- 0.12 - How can I validate my `.auth.json` and/or `.info.json` files? -- 0.13 - How can I validate my submission tarball? -- 0.14 - What is the `fnamchk` tool? -- 0.15 - What is the `mkiocccentry` tool and how do I use it? -- 0.16 - How do I compile `mkiocccentry` and related tools? +- 0.0 - How may I enter the IOCCC? +- 0.1 - What types of entries have been frequently submitted to the IOCCC? +- 0.2 - What should I put in my submission's Makefile? +- 0.3 - May I use a different source or compiled filename than prog.c or prog? +- 0.4 - What platform should I assume for my submission? +- 0.5 - How may I comment or make a suggestion on IOCCC rules, guidelines and tools? +- 0.6 - What is the best way to ask a question about the IOCCC rules, guideline and tools? +- 0.7 - What are the IOCCC best practices for using markdown? +- 0.8 - How do I report bugs in a `mkiocccentry` tool? +- 0.9 - What is a `.auth.json` file? +- 0.10 - What is a `.info.json` file? +- 0.11 - How can I validate any JSON document? +- 0.12 - How can I validate my `.auth.json` and/or `.info.json` files? +- 0.13 - How can I validate my submission tarball? +- 0.14 - What is the `fnamchk` tool? +- 0.15 - What is the `mkiocccentry` tool and how do I use it? +- 0.16 - How do I compile `mkiocccentry` and related tools? ## Section 1 - [History of the IOCCC](#faq1) -- 1.0 - How did the IOCCC get started? -- 1.1 - Why are some years missing IOCCC entries? -- 1.2 - What is the history of the IOCCC website? -- 1.3 - How has the IOCCC size limit rule changed over the years? -- 1.4 - What is the **Great Fork Merge**? -- 1.5 - What is an IOCCC BOF? +- 1.0 - How did the IOCCC get started? +- 1.1 - Why are some years missing IOCCC entries? +- 1.2 - What is the history of the IOCCC website? +- 1.3 - How has the IOCCC size limit rule changed over the years? +- 1.4 - What is the **Great Fork Merge**? +- 1.5 - What is an IOCCC BOF? ## Section 2 - [IOCCC Judging process](#faq2) -- 2.0 - How many submissions do the judges receive for a given IOCCC? -- 2.1 - What should I put in the remarks.md file of my submission? -- 2.2 - Why don't you publish submissions that do not win? -- 2.3 - How much time does it take to judge the contest? -- 2.4 - How many judging rounds do you have? -- 2.5 - Why do some IOCCC entries receive the Grand Prize or Best of Show award? -- 2.6 - How are IOCCC entries announced? +- 2.0 - How many submissions do the judges receive for a given IOCCC? +- 2.1 - What should I put in the remarks.md file of my submission? +- 2.2 - Why don't you publish submissions that do not win? +- 2.3 - How much time does it take to judge the contest? +- 2.4 - How many judging rounds do you have? +- 2.5 - Why do some IOCCC entries receive the Grand Prize or Best of Show award? +- 2.6 - How are IOCCC entries announced? ## Section 3 - [Compiling and running IOCCC entries](#faq3) -- 3.0 - What Makefile rules are available to build or clean up IOCCC entries? -- 3.1 - Why doesn't an IOCCC entry compile? -- 3.2 - Why does an IOCCC entry fail on my 64-bit system? -- 3.3 - Why do some IOCCC entries fail to compile under macOS? -- 3.4 - Why does clang or gcc fail to compile an IOCCC entry? -- 3.5 - What is this cb tool that is mentioned in the IOCCC? -- 3.6 - An IOCCC entry messed up my terminal application, how do I fix this? -- 3.7 - How do I run an IOCCC entry that requires X11? -- 3.8 - How do I compile an IOCCC entry that requires SDL1 or SDL2? -- 3.9 - How do I compile an IOCCC entry that requires (n)curses? -- 3.10 - How do I compile and use an IOCCC entry that requires sound? -- 3.11 - Why do Makefiles use -Weverything with clang? -- 3.12 - How do I find out how to send interrupt/EOF etc. for entries that require it? -- 3.13 - Why does an IOCCC entry fail to compile and/or fail to run? -- 3.14 - How do I compile and install tcpserver for entries that require it? -- 3.15 - How do I compile and install netpbm for entries that require it? -- 3.16 - How do I compile and install libjpeg-turbo for entries that require it? -- 3.17 - How do I compile and install ImageMagick for entries that require it? -- 3.18 - How do I compile and install OpenGL for entries that require it? -- 3.19 - What kind of make(1) compatibility does the IOCCC support and will it support other kinds? -- 3.20 - How do I download individual winning entries or all winning entries of a given year? -- 3.21 - What are `try.sh` and `try.alt.sh` scripts and why should I use them? -- 3.22 - Are there any compiler warnings that I should not worry about? -- 3.23 - How do I compile an IOCCC entry that requires zlib? -- 3.24 - How do I install Ruby for entries that require it? -- 3.25 - How do I install rake for entries that require it? +- 3.0 - What Makefile rules are available to build or clean up IOCCC entries? +- 3.1 - Why doesn't an IOCCC entry compile? +- 3.2 - Why does an IOCCC entry fail on my 64-bit system? +- 3.3 - Why do some IOCCC entries fail to compile under macOS? +- 3.4 - Why does clang or gcc fail to compile an IOCCC entry? +- 3.5 - What is this cb tool that is mentioned in the IOCCC? +- 3.6 - An IOCCC entry messed up my terminal application, how do I fix this? +- 3.7 - How do I run an IOCCC entry that requires X11? +- 3.8 - How do I compile an IOCCC entry that requires SDL1 or SDL2? +- 3.9 - How do I compile an IOCCC entry that requires (n)curses? +- 3.10 - How do I compile and use an IOCCC entry that requires sound? +- 3.11 - Why do Makefiles use -Weverything with clang? +- 3.12 - How do I find out how to send interrupt/EOF etc. for entries that require it? +- 3.13 - Why does an IOCCC entry fail to compile and/or fail to run? +- 3.14 - How do I compile and install tcpserver for entries that require it? +- 3.15 - How do I compile and install netpbm for entries that require it? +- 3.16 - How do I compile and install libjpeg-turbo for entries that require it? +- 3.17 - How do I compile and install ImageMagick for entries that require it? +- 3.18 - How do I compile and install OpenGL for entries that require it? +- 3.19 - What kind of make(1) compatibility does the IOCCC support and will it support other kinds? +- 3.20 - How do I download individual winning entries or all winning entries of a given year? +- 3.21 - What are `try.sh` and `try.alt.sh` scripts and why should I use them? +- 3.22 - Are there any compiler warnings that I should not worry about? +- 3.23 - How do I compile an IOCCC entry that requires zlib? +- 3.24 - How do I install Ruby for entries that require it? +- 3.25 - How do I install rake for entries that require it? ## Section 4 - [Changes made to IOCCC entries](#faq4) -- 4.0 - Why are some winning author remarks incongruent with the winning IOCCC code? -- 4.1 - Why were some calls to the libc function gets(3) changed to use fgets(3)? -- 4.2 - What was changed in an IOCCC entry source code? -- 4.3 - Why do author remarks sometimes not match the source and/or why are there +- 4.1 - Why were some calls to the libc function gets(3) changed to use fgets(3)? +- 4.2 - What was changed in an IOCCC entry source code? +- 4.3 - Why do author remarks sometimes not match the source and/or why are there other inconsistencies with the original entry? -- 4.4 - What is the meaning of the file ending in .orig.c in IOCCC entries? -- 4.5 - What are alternate versions and why were alternate versions added to some entries when the original entry worked fine and well? -- 4.6 - Why was arg count and/or type changed in main() in some older entries? -- 4.7 - Why were some filenames changed? -- 4.8 - Why were files added or removed from some entries? -- 4.9 - What is the original source file? +- 4.4 - What is the meaning of the file ending in .orig.c in IOCCC entries? +- 4.5 - What are alternate versions and why were alternate versions added to some entries when the original entry worked fine and well? +- 4.6 - Why was arg count and/or type changed in main() in some older entries? +- 4.7 - Why were files added to, removed from or changed in some entries? +- 4.8 - What is the original source file? ## Section 5 - [Helping the IOCCC](#faq5) -- 5.0 - How may I help the IOCCC? -- 5.1 - How do I report a bug in an IOCCC entry? -- 5.2 - How may I submit a fix to an IOCCC entry? -- 5.3 - How may I report an IOCCC website problem? -- 5.4 - How may I submit a fix to the IOCCC website? -- 5.5 - How may I correct or update IOCCC author information? -- 5.6 - What should I do if I find a broken or wrong web link? -- 5.7 - How may I support the IOCCC? -- 5.8 - I deobfuscated some entry code, may I contribute the source? +- 5.0 - How may I help the IOCCC? +- 5.1 - How do I report a bug in an IOCCC entry? +- 5.2 - How may I submit a fix to an IOCCC entry? +- 5.3 - How may I report an IOCCC website problem? +- 5.4 - How may I submit a fix to the IOCCC website? +- 5.5 - How may I correct or update IOCCC author information? +- 5.6 - What should I do if I find a broken or wrong web link? +- 5.7 - How may I support the IOCCC? +- 5.8 - I deobfuscated some entry code, may I contribute the source? ## Section 6 - [Miscellaneous IOCCC](#faq6) -- 6.0 - How did an entry that breaks the size rule 2 win the IOCCC? -- 6.1 - Is there a list of known bugs and (mis)features of IOCCC entries? -- 6.2 - May I mirror the IOCCC website? -- 6.3 - May I use parts of the IOCCC in an article, book, newsletter, or instructional material? -- 6.4 - Why do you sometimes use the first person plural? -- 6.5 - What is an `author handle`? -- 6.6 - What is an `author_handle.json` file and how are they used? -- 6.7 - What is an `entry_id`? -- 6.8 - What is the purpose of the .top, .allyear, .year and .path files? -- 6.9 - What is the current meaning of the IOCCC terms Author, Entry, and Submission? -- 6.10 - How does someone make a change to a file and submit that change as a GitHub pull request? -- 6.11 - Am I allowed to use IOCCC content? -- 6.12 - What is Mastodon and why does IOCCC use it? -- 6.13 - How may I find my author handle? -- 6.14 - How do I set certain tabstops for viewing source code in vi(m)? -- 6.15 - How do the menus on the website work and what can I do if they don't work? -- 6.16 - How do I find more information about a winning author of an entry? -- 6.17 - What is a `.entry.json` file and how is it used? -- 6.18 - I do not understand the IOCCC, can you explain it to me? +- 6.0 - How did an entry that breaks the size rule 2 win the IOCCC? +- 6.1 - Is there a list of known bugs and (mis)features of IOCCC entries? +- 6.2 - May I mirror the IOCCC website? +- 6.3 - May I use parts of the IOCCC in an article, book, newsletter, or instructional material? +- 6.4 - Why do you sometimes use the first person plural? +- 6.5 - What is an `author handle`? +- 6.6 - What is an `author_handle.json` file and how are they used? +- 6.7 - What is an `entry_id`? +- 6.8 - What is the purpose of the `.top`, `.allyear`, `.year` and `.path` files? +- 6.9 - What is the current meaning of the IOCCC terms Author, Entry, and Submission? +- 6.10 - How does someone make a change to a file and submit that change as a GitHub pull request? +- 6.11 - Am I allowed to use IOCCC content? +- 6.12 - What is Mastodon and why does IOCCC use it? +- 6.13 - How may I find my author handle? +- 6.14 - How do I set certain tabstops for viewing source code in vi(m)? +- 6.15 - How do the menus on the website work and what can I do if they don't work? +- 6.16 - How do I find more information about a winning author of an entry? +- 6.17 - What is a `.entry.json` file and how is it used? +- 6.18 - I do not understand the IOCCC, can you explain it to me? Jump to: [top](#) @@ -131,13 +129,11 @@ Jump to: [top](#) Jump to: [top](#) -
Jump to: [top](#)
-
FAQ 0.5: How may I comment or make a suggestion on IOCCC rules, guidelines and tools?