Tattoos
My (just slightly geeky) Tattoo
An FAQ to save myself from all of the questions! Many thanks to the people at the IOCCC from where the design is taken for their help and permission.
Update! I have a second, similarly geeky tattoo, after you have read this, info on it is here at tatttwo.
What does your tattoo look like?
int i;main(){for(;i["]<i;++i){--i;}"];read('-'-'-',i+++"hell\
o, world!\n",'/'/'/'));}read(j,i,p){write(j/p+p,i---j,i/i);}
Fresh and in the flesh:

Who did your Tattoo?
Adam at IllicitHQ in Auckland, New Zealand. Great guy, great business, highly recommended.
What is this?
Computer code.
What is this code?
An entry in the 1st International Obfuscated C Code Contest (IOCCC) from 1984, a competition that continues to this day. Essentially this competition is for programmers in the C language to create programs that do “interesting” things, which is not obvious when looking at the code itself (hence “obfuscated). This particular piece of code was the very first IOCCC entry received in the contest. You can see all of the entries and winners and more info on the contest at their website here. You can see this particular entry’s info here
Can I SEE what it does?
Sure, you can download the source code yourself here and compile it on your machine.
What does it do?
From the description on the IOCCC website, “This program is a unique variation on the age old “Hello, world” program. What reads like a read may be written like a write!” Quite simply, when compiled and run,it prints the phrase “Hello, world” to the screen!
What is a “Hello, world” program?
From Wikipedia, “A computer program that simply prints out “Hello world!” on a display device. It is used in many introductory tutorials for teaching a programming language and many students use it as their first programming experience in a language.
In the C programming language, this typically looks like:
#include<stdio.h>
int main(void){
printf("Hello World!\n");
return 0;
}
However, as noted, the version I have is obfuscated code.
Who wrote this code?
The IOCCC website lists the author as anonymous, saying, “The author was too embarrassed that he/she could write such trash, so I promised to protect their identity. I will say that the author of this program has a well known connection with the C programming language.” Landon Curt Noll of the IOCCC in an email also disclosed, “The author (for when people have asked me about them) has asked me to give this vague statement: “they are known for various things on the Internet and have used and been associated with the C programming language for decades”. Even more intriguingly, “Only the original author and I know who wrote this program. Nobody else, not even Larry Bassel (an IOCCC judge in those days) knows who wrote it. The author wishes to remain anonymous but has considered disclosing their authorship some number of years after their passing. I have promised not to disclose their name before they do.”
Is this code copyright?
Yes, as noted on the IOCCC website, this code is copyright but is free to be used for personal and non-profit reasons. I have obtained permission via e-mail from Landon Curt Noll of the IOCCC.
What gave you the idea?
The idea of having code tattooed on myself was sparked in the 90s by the furore caused amongst geeks when it was made public that the RSA encryption routine, used to make data unreadable except by those whom you want to be able to, was classified as “munitions” under USA law and thus was illegal to “export” outside the country. Doing something as simple as emailing the code to a friend outside the USA from within it was illegal despite the code not being copyright as such. From this sprung up a number of protests, including the creation of very small versions of the program to implement RSA that could be printed on t-shirts and the like (see here). A small number of individuals even had the code tattooed on themselves, making their leaving the USA a potential offence! This sort of irreverent dedication to showing the law to be the ass that it was in this instance struck a chord with me that stuck. In terms of design at least. My tattoo has no political statement to make, despite my being a supporter of the EFF and the likes. It does have some resonance with some ethical beliefs of mine, but it is more personal than anything.
What significance does this tattoo have (to you)?
- The program was written in 1984, the year my family got our first computer (a Commodore Vic 20), when I was 7.
- The program was written in 1984, the title year of George Orwell’s classic dystopian novel.
- The program is written in C, the first “high level” language I learned (on an Amiga).
- The program is in “obfuscated” code, that is, what it does is not readily apparent. This idea of hidden meaning appeals to me greatly. In addition it switches around read and write functions in a delightfully ambiguous fashion.
- The program is a version of “Hello, World”, the first program people learn in most every language, as it was for me. Ever since a young age I have used this expression to test output from most of my programs and on websites and the like as a first post.
- The authorship of the code is a mystery or a “deathbed secret”, adding an intrigue to the story surrounding it.
- The code ends in an emoticon AKA a smiley, ;} . Which I have been (over)using in writing ever since I first went online on BBSes in the early 90s.
- The second line has the lament, “o, world!”.
Does the author of the code know you are getting this tattoo?
They have been informed by Landon Curt Noll of this who remarked in an email to me that they reacted with, “I feel honored that my entry will be the first IOCCC winner to become a tattoo. It is the first entry to become a tattoo isn’t it?” as Landon replied, “Yes, to our knowledge it is.” Feel free to let me or the IOCCC know if it isn’t!
Any other interesting facts?
Landon Curt Noll was very helpful in providing some tidbits on the code which only made me more excited/determined to get it, he added, “The author, if they had to do it over again, regrets not making the program a one-liner and not moving the “int i” into an arg of main (so that the line would have started with main). On the other hand the author likes the “two line look” and the way hell o was split.
And they like the fact that it ends in a smily face: ;}”
Are there any “typos”?
hehe no! Adam was particularly careful, for which I am most grateful!>
How does the code work?
A slashdot.org reader posted a breakdown of the code which Landon Curt Noll from the IOCCC noted of, “Very good explanation…I was told that anonymous winner used almost (but not quite) the reverse of your explanation to construct the original entry.”. A copy of it is below.
int i;main(){for(;i["]i;++i){--i;}"];read('-'-'-',i+++ "hell\
o, world!\n",'/'/'/'));}read(j,i,p){write(j/p+p,i---j ,i/i);}
==== add some whitespace ==========
int i;
main()
{
for (; i["]i;++i){--i;}"]; read('-' - '-', i++ + "hello, world!\n", '/' / '/'));
}
read(j, i, p)
{
write(j / p + p, i-- - j, i / i);
}
===== and char subtraced from itself is 0, and char or pointer divided by itself is 1 =====
int i;
main()
{
for (; i["]i;++i){--i;}"]; read(0, i++ + "hello, world!\n", 1));
}
read(j, i, p)
{
write(j / p + p, i-- - j, 1);
}
======= j is always 0, p is always 1, lets remove them ======
int i;
main()
{
for (; i["]i;++i){--i;}"]; read(i++ + "hello, world!\n"));
}
read(i)
{
write(0 / 1 + 1, i-- - 0, 1);
}
======= 0 / 1 + 1 is 1, subtracting 0 does nothing, decrementing a local variable this is never used afterward also does nothing =======
int i;
main()
{
for (; i["]i;++i){--i;}"]; read(i++ + "hello, world!\n"));
}
read(i)
{
write(1, i, 1);
}
======== replace read(i) with write(1, i, 1) =====
int i;
main()
{
for (; i["]i;++i){--i;}"]; write(1, i++ + "hello, world!\n", 1));
}
====== i[n] can be rewritten *(i + n) or *(n + i) ======
int i;
main()
{
for (; *("]i;++i){--i;}" + i); write(1, "hello, world!\n" + i++, 1));
}
=== as i gets incrimented, we dereference the next char of the string which is always non-zero till we hit the null terminator, all the matters is that the string is the same length as "hello, world!\n" =====
int i;
main()
{
for (; *("hello, world!\n" + i); write(1, "hello, world!\n" + i++, 1));
}
===== so now we can see we incriment i, printing out the next character of hello world till we hit the null terminator ====