24 years ago AcceptanceTests

-1591502 seconds later AllocateMillions

Only in history//AllocateMillions: 20021107
Only in history//AllocateMillions: 20021108
Only in history//AcceptanceTests: 20021126
Only in history//AcceptanceTests: 20021127

-6081 seconds later AllocateTenNumbers

diff -w history//AllocateMillions/20021107 history//AllocateTenNumbers/20021107
1c1,5
Get numbers wholesale here and pass them out yourself. We only ask that you take responsibility for those numbers and let us know how you will do so. We'd especially like to have a web page that readers here can go to if they find one of your numbers anytime in the future.
Plan on explaining what you do. Before you start, come here to get some numbers that you can use while you do.

  [x] give me a password that will let me save my answers
  [x] give my browser a cookie that will let save my answers
  [Allocate Numbers]
diff -w history//AllocateMillions/20021108 history//AllocateTenNumbers/20021108
1,2c1
Get numbers wholesale here and pass them out yourself. We only ask that you take responsibility for those numbers and let us know how you will do so. We'd especially like to have a web page that readers here can go to if they find one of your numbers anytime in the future. Write before you use this form: mailto:ward@c2.com.

Plan on explaining what you do. Before you start, come here to get some numbers that you can use while you do.
5c4
Use this form to allocate a million numbers for your own registry.
Choose either or both of these options then press Allocate.
8,10c7,9
<input type=text width= 40 name=site> is our registry website. (required) <br>
<input type=text width= 40 name=mail> is my email address. (required).<br>
<input type=submit value=Allocate> one million numbers for our own use.
<input type=checkbox name=password> Give me a password that will let me save my answers.<br>
<input type=checkbox name=password> Remember this allocation as a cookie in this browser.<br>
<input type=submit value=Allocate>
15,21c14
You will receive a password for the allocation by email. Reply to this email to complete the transaction. You will received a conformation email with your allocatioin of one million numbers. It will look something like this.

     Congratualtions.
     You have been allocated the following "build for life" numbers:
     BFL 23000000 to 23999999
     See http://bfl.c2.com for tips allocating these numbers.

You can automate the allocation of numbers. Here is a perl script that invokes the above form handler and writes the allocated numbers to standard output.
23c16
Good luck with your registry.
        * http:files/alocate10.pl

49 minutes later AllocateThousands

diff -w history//AllocateTenNumbers/20021107 history//AllocateThousands/20021107
1,5c1
Plan on explaining what you do. Before you start, come here to get some numbers that you can use while you do.

  [x] give me a password that will let me save my answers
  [x] give my browser a cookie that will let save my answers
  [Allocate Numbers]
Get all the numbers for your project now and allocate them yourself. Running low on numbers, get some more.
diff -w history//AllocateTenNumbers/20021108 history//AllocateThousands/20021108
1c1
Plan on explaining what you do. Before you start, come here to get some numbers that you can use while you do.
Get all the numbers for your project now and allocate them yourself. Save your own answers with your project files. Running low on numbers? Get some more.
4c4
Choose either or both of these options then press Allocate.
Use this form to allocate numbers for your whole project.
7,9c7,10
<input type=checkbox name=password> Give me a password that will let me save my answers.<br>
<input type=checkbox name=password> Remember this allocation as a cookie in this browser.<br>
<input type=submit value=Allocate>

<input type=text width= 40 name=mail> is our project name. (optional) <br>
<input type=text width= 40 name=mail> is my email address. (optional).<br>
<input type=submit value=Allocate> one thousand numbers for our project.
13,17d13

You can automate the allocation of numbers. Here is a perl script that invokes the above form handler and writes the allocated numbers to standard output.

        * http:files/alocate10.pl

3 weeks later BitRot

diff -w history//AllocateThousands/20021107 history//BitRot/20021107
1c1,3
Get all the numbers for your project now and allocate them yourself. Running low on numbers, get some more.
Stuff made of atoms will rot. The forces that hold stuff together are not strong enough to preserve its organization against entropy and exploitation. Organization goes away.

Stuff made of bits will rot too. Software that works one day will stop the next. This is called bit rot, as if entropy were wearing away at the bits themselves. In fact the bits probably didn't change. Rather some decision made elsewere reversed some behavior that the bits required. Uninformed decision making creates bit rot.
Only in history//AllocateThousands: 20021108

-365693 seconds later BuiltForLife

diff -w history//BitRot/20021107 history//BuiltForLife/20021107
1,3c1
Stuff made of atoms will rot. The forces that hold stuff together are not strong enough to preserve its organization against entropy and exploitation. Organization goes away.

Stuff made of bits will rot too. Software that works one day will stop the next. This is called bit rot, as if entropy were wearing away at the bits themselves. In fact the bits probably didn't change. Rather some decision made elsewere reversed some behavior that the bits required. Uninformed decision making creates bit rot.
The Built for Life workshop was organized by BrianMarick and held at OOPSLA 2002 in Seattle, Washington, USA.
Only in history//BuiltForLife: 20021127

-1721085 seconds later BuiltForLifeNumber

diff -w history//BuiltForLife/20021107 history//BuiltForLifeNumber/20021107
1c1,7
The Built for Life workshop was organized by BrianMarick and held at OOPSLA 2002 in Seattle, Washington, USA.
We allocate numbers. The're called BuiltForLife numbers in honor of the workshop where they were invented. The are also known as BFL numbers recognizing the exact form they take as hyperlinks in program source code and related documents and resources.

A BFL number matches the RegularExpression:

   BFL[1-9][0-9]*

This says, a BFL number consists of the three capital letters, B, F, L, followed by an arbitrarily large integer without leading zeros. It also implys that the number will not be followed by a digit, but may be preceeded by any character. Typically BFL numbers are enclosed by the comment marks prescribed by the language in use.
Only in history//BuiltForLife: 20021127

33 hours later LookupAnAnswer

diff -w history//BuiltForLifeNumber/20021107 history//LookupAnAnswer/20021107
1c1
We allocate numbers. The're called BuiltForLife numbers in honor of the workshop where they were invented. The are also known as BFL numbers recognizing the exact form they take as hyperlinks in program source code and related documents and resources.
You've found some code that has a BflNumber something like BFL12887. You can find code and documents related to this code by searching your own directories. In unix you would use a command like:
3c3
A BFL number matches the RegularExpression:
     grep -r BFL12887 src
5c5
   BFL[1-9][0-9]*
You can also check this site for an answer related to the code you find. The answer is to the question "Why?".
7c7,12
This says, a BFL number consists of the three capital letters, B, F, L, followed by an arbitrarily large integer without leading zeros. It also implys that the number will not be followed by a digit, but may be preceeded by any character. Typically BFL numbers are enclosed by the comment marks prescribed by the language in use.
<blockquote>
<form method=post action="lookup.cgi">
<input type=text width=20><br>
<input type=submit value=" Lookup">
</form>
</blockquote>
Only in history//LookupAnAnswer: 20021108

-36 seconds later RecordAnAnswer

diff -w history//LookupAnAnswer/20021107 history//RecordAnAnswer/20021107
1c1
You've found some code that has a BflNumber something like BFL12887. You can find code and documents related to this code by searching your own directories. In unix you would use a command like:
Your programming partner asks you "Why did you do that there?" You answer. He's satisfied. But what about future readers?
3c3
     grep -r BFL12887 src
Type your answer here and we will keep it. We'll assign a number that you can use to refer to this answer anywhere you'd like.
5,10c5,8
You can also check this site for an answer related to the code you find. The answer is to the question "Why?".

<blockquote>
<form method=post action="lookup.cgi">
<input type=text width=20><br>
<input type=submit value=" Lookup">
<form method=post action="record.cgi?RecordAnAnswer">
<textarea name=Text rows=16 cols=60 wrap=virtual>
</textarea>
<p><input type="submit" value=" Save ">
12c10,11
</blockquote>

Pressing Save places your answer in the PublicDomain and allocates one permenant BuiltForLifeNumber. See LegalDetails.
diff -w history//LookupAnAnswer/20021108 history//RecordAnAnswer/20021108
1c1
You've found some code that has a BuiltForLifeNumber something like BFL12887. You can find code and documents related to this code by searching your own directories. In unix you would use a command like:
Your programming partner asks you "Why did you do that there?" You answer. He's satisfied. But what about future readers?
3,5c3
     grep -r BFL12887 src

You can also check this site for an answer related to the code you find. The answer is to the question "Why?"
Type your answer here and we will keep it. We'll assign a number that you can use to refer to this answer anywhere you'd like.
8d5
Enter answer number.
10,12c7,10
<form method=post action="lookup.cgi">
<input type=text width=12 value=BFL><br>
<input type=submit value=" Lookup">
<form method=post action="record.cgi?RecordAnAnswer">
<textarea name=Text rows=16 cols=60 wrap=virtual>
</textarea><br>
<input type="submit" value=" Save ">
15a14,15

Pressing Save places your answer in the PublicDomain and allocates one permenant BuiltForLifeNumber. See LegalDetails.

35 minutes later RecordTenAnswers

diff -w history//RecordAnAnswer/20021107 history//RecordTenAnswers/20021107
1c1
Your programming partner asks you "Why did you do that there?" You answer. He's satisfied. But what about future readers?
You can save answers here up to ten at a time.
3c3,7
Type your answer here and we will keep it. We'll assign a number that you can use to refer to this answer anywhere you'd like.
<form action=record10.cgi>
<blockquote>
<input width=20 name=first value=BFL> first number in range, if we've already assigned numbers.<br>
<input width=20 name=password value=brx243vhy687> password we assigned with those numbers.
</blockquote>
5,8c9,17
<form method=post action="record.cgi?RecordAnAnswer">
<textarea name=Text rows=16 cols=60 wrap=virtual>
</textarea>
<p><input type="submit" value=" Save ">
Fill out the above if you already have permenant numbers. If you used TemporaryNumbers we will assign permenant numbers when you save. Be sure to update those numbers in your source as soon as you are done here.

<blockquote>
<p>Answer 1<br><textarea name=0 rows=16 cols=60 wrap=virtual></textarea></p>
<p>Answer 1<br><textarea name=0 rows=16 cols=60 wrap=virtual></textarea></p>
<p>Answer 1<br><textarea name=0 rows=16 cols=60 wrap=virtual></textarea></p>
<p>Answer 1<br><textarea name=0 rows=16 cols=60 wrap=virtual></textarea></p>
<p>Answer 1<br><textarea name=0 rows=16 cols=60 wrap=virtual></textarea></p>
</blockquite>
11d19
Pressing Save places your answer in the PublicDomain and allocates one permenant BuiltForLifeNumber. See LegalDetails.
diff -w history//RecordAnAnswer/20021108 history//RecordTenAnswers/20021108
1c1
Your programming partner asks you "Why did you do that there?" You answer. He's satisfied. But what about future readers?
You can save answers here up to ten at a time.
3c3
Type your answer here and we will keep it. We'll assign a number that you can use to refer to this answer anywhere you'd like.
You can enter answers for permenant numbers that you've already allocated or have new numbers assigned right now.
4a5
<form action=record10.cgi>
5a7
Enter password for allocated numbers.<br>
7,11c9,11
<form method=post action="record.cgi?RecordAnAnswer">
<textarea name=Text rows=16 cols=60 wrap=virtual>
</textarea><br>
<input type="submit" value=" Save ">
</form>
<input width=12 name=password value=BFL1288> is first number. <br>
<input width=12 name=password value=brx243vhy687> is password.<br>
<input type=submit value=Refresh> with my answers. (optional)
15c15,31
Pressing Save places your answer in the PublicDomain and allocates one permenant BuiltForLifeNumber. See LegalDetails.
If you used TemporaryNumbers we will assign permenant numbers when you save.

Fill out the above if you already have permenant numbers. Be sure to update those numbers in your source as soon as you are done here.

<blockquote>
Enter answers for corresponding numbers.
<table cellpadding=10><tr><td bgcolor=ffff7f>
<p>BFL10<br><textarea name=0 rows=8 cols=60 wrap=virtual></textarea></p>
<p>BFL11<br><textarea name=0 rows=8 cols=60 wrap=virtual></textarea></p>
<p>BFL12<br><textarea name=0 rows=8 cols=60 wrap=virtual></textarea></p>
<p>BFL13<br><textarea name=0 rows=8 cols=60 wrap=virtual></textarea></p>
<p>BFL14<br><textarea name=0 rows=8 cols=60 wrap=virtual></textarea></p>
<input type=submit value="Save All">
</td></tr></table>
</blockquite>
</form>

-27603 seconds later TemporaryNumbers

Only in history//RecordTenAnswers: 20021107
diff -w history//RecordTenAnswers/20021108 history//TemporaryNumbers/20021108
1c1
You can save answers here up to ten at a time.
BuiltForLifeNumbers 10 through 99 are temporary numbers used while programming when it is inconvenient to assign permentent numbers. Normally one doesn't check-in code with temporary numbers. Instead, when convenient, one can AllocateTenNumbers and use a number SubstitutionUtility like bfl.pl to replace the temporary numbers with the new permenent numbers.
3c3
You can enter answers for permenant numbers that you've already allocated or have new numbers assigned right now.
For example, say a team writes five answers while programming. Since they were very busy they don't bother to get perment numbers and choose to use the numbers 10, 11, 12, 13 and 14 instead. Then, when finished, they use bfl.pl, to change these to perment numbers, 23170, 23171, 23172, 23173 and 23174 which they allocate with AllocateTenNumbers.
5,13c5,6
<form action=record10.cgi>
<blockquote>
Enter password for allocated numbers.<br>
<table cellpadding=10><tr><td bgcolor=ffff7f>
<input width=12 name=password value=BFL1288> is first number. <br>
<input width=12 name=password value=brx243vhy687> is password.<br>
<input type=submit value=Refresh> with my answers. (optional)
</td></tr></table>
</blockquote>
    bfl.pl -s 10 23170 .
      17 substitutions
15c8
If you used TemporaryNumbers we will assign permenant numbers when you save.
The bfl.pl script can communicate with this site to allocate numbers for you. Use the -a option to allocate numbers.
17,30c10,13
Fill out the above if you already have permenant numbers. Be sure to update those numbers in your source as soon as you are done here.

<blockquote>
Enter answers for corresponding numbers.
<table cellpadding=10><tr><td bgcolor=ffff7f>
<p>BFL10<br><textarea name=0 rows=8 cols=60 wrap=virtual></textarea></p>
<p>BFL11<br><textarea name=0 rows=8 cols=60 wrap=virtual></textarea></p>
<p>BFL12<br><textarea name=0 rows=8 cols=60 wrap=virtual></textarea></p>
<p>BFL13<br><textarea name=0 rows=8 cols=60 wrap=virtual></textarea></p>
<p>BFL14<br><textarea name=0 rows=8 cols=60 wrap=virtual></textarea></p>
<input type=submit value="Save All">
</td></tr></table>
</blockquite>
</form>
    bfl.pl -as 10 .
      password: 437axr432pzq
      first of 10 numbers: 23170
      17 substitutions

2 weeks later TestReorganizingDirectoryOverflow

Only in history//TemporaryNumbers: 20021108
Only in history//TestReorganizingDirectoryOverflow: 20021126

-1263 seconds later TestSimpleDirectoryOverflow

diff -w history//TestReorganizingDirectoryOverflow/20021126 history//TestSimpleDirectoryOverflow/20021126
1c1
When we fill up the tenth directory (90, 900, 9000, etc) we have to make more room by creating a next higher level directory and putting all of our current numbers under the first directory (000, 0000, 00000, etc) within it.
Setup defines the file configuration that we will be recording within. Here we start with a second level directory structure, partially full.
3,5c3
We will run several setups in this test. Our first few are with no established directories.

| Setup |||
| Setup |
6a5,6
| 00 | 0,1,2,3,4,5,6,7,8,9 | setup data 0-9 |
| 01 | 0,1,2,3,4,5,6,7 | setup data 10-17 |
9c9
Now we will fill this with 12 files. A reorganization takes place after 10.
First we will fill the teens directory and see that we go on to twenty.
13,24c13,16
| text for 0-9 | 0 |
| text for 0-9 | 1 |
| text for 0-9 | 2 |
| text for 0-9 | 3 |
| text for 0-9 | 4 |
| text for 0-9 | 5 |
| text for 0-9 | 6 |
| text for 0-9 | 7 |
| text for 0-9 | 8 |
| text for 0-9 | 9 |
| text for 10 | 10 |
| text for 11 | 11 |
| eighteen | 18 |
| nineteen | 19 |
| twenty | 20 |
| twenty-one | 21 |
26c18
We should have two directories, one for 0-9 and another for 10-11.
We will do a simple directory list to be sure we have what we want.
30d21
| 00 |
41d31
| 10 |
44,82c34,43

Now we will try the same thing but with an allocate10 triggering the reorganization, which will happen whether 0-9 have been fully allocated or not.

| Setup |||
| directory | files | contents |

| Record ||
| text | number() |
| text for 0-9 | 0 |
| text for 0-9 | 1 |
| text for 0-9 | 2 |
| text for 0-9 | 3 |

| Allocate10 |||
| password | cookie | number() |
| no | no | 10 |
| no | no | 20 |

| Record ||
| text | number() |
| text for 0-9 | 4 |
| text for 0-9 | 5 |
| text for 0-9 | 6 |
| text for 0-9 | 7 |

| Directory ||
| path() | isDir() |
| 00 | yes |
| 00/0 | no |
| 00/1 | no |
| 00/2 | no |
| 00/3 | no |
| 00/4 | no |
| 00/5 | no |
| 00/6 | no |
| 00/7 | no |
| 10 | no |
| 20 | no |

| 10/2 |
| 10/3 |
| 10/4 |
| 10/5 |
| 10/6 |
| 10/7 |
| 10/8 |
| 10/9 |
| 20/0 |
| 20/1 |

6 days later TestSimpleRecordAndLookup

diff -w history//TestSimpleDirectoryOverflow/20021126 history//TestSimpleRecordAndLookup/20021126
1c1
Setup defines the file configuration that we will be recording within. Here we start with a second level directory structure, partially full.
Setup defines the file configuration that we will be recording within. Here we start with nothing to keep our first tests simple.
4,6d3
| directory | files | contents |
| 00 | 0,1,2,3,4,5,6,7,8,9 | setup data 0-9 |
| 01 | 0,1,2,3,4,5,6,7 | setup data 10-17 |
9c6
First we will fill the teens directory and see that we go on to twenty.
You can record text without having a preallocated number. Here we record our first three answers, the single words zero, one and two. They will be assigned the corresponding bfl numbers.
13,43c10,23
| eighteen | 18 |
| nineteen | 19 |
| twenty | 20 |
| twenty-one | 21 |

We will do a simple directory list to be sure we have what we want.

| Directory |
| path() |
| 00/0 |
| 00/1 |
| 00/2 |
| 00/3 |
| 00/4 |
| 00/5 |
| 00/6 |
| 00/7 |
| 00/8 |
| 00/9 |
| 10/0 |
| 10/1 |
| 10/2 |
| 10/3 |
| 10/4 |
| 10/5 |
| 10/6 |
| 10/7 |
| 10/8 |
| 10/9 |
| 20/0 |
| 20/1 |
| zero | 0 |
| one | 1 |
| two | 2 |

We can look this text up by number in any order.

| Lookup ||
| number | text() |
| 1 | one |
| 2 | two |
| 1 | one |
| 0 | zero |
| 00 | error |
| 3 | error |
Only in history//TestSimpleRecordAndLookup: 20021201
Only in history//TestSimpleRecordAndLookup: 20021203

-596167 seconds later TestTensAllocation

diff -w history//TestSimpleRecordAndLookup/20021126 history//TestTensAllocation/20021126
1c1
Setup defines the file configuration that we will be recording within. Here we start with nothing to keep our first tests simple.
Setup defines the file configuration that we will be recording within. Here we start with a second level directory structure, partially full.
3c3,6
| Setup |
| Setup |||
| directory | files | contents |
| 00 | 0,1,2,3,4,5,6,7,8,9 | setup data 0-9 |
| 01 | 0,1,2,3,4,5,6,7 | setup data 10-17 |
6c9,17
You can record text without having a preallocated number. Here we record our first three answers, the single words zero, one and two. They will be assigned the corresponding bfl numbers.
First we will allocate 10 numbers. This will skip over the rest of the teens so that the ten start on a modulo 10 boundary.

| Allocate10 ||
| password | cookie | number() |
| no | no | 20 |
| no | no | 30 |


Now we fill the teens directory and see that we go on to forty.
10,23c21,56
| zero | 0 |
| one | 1 |
| two | 2 |

We can look this text up by number in any order.

| Lookup ||
| number | text() |
| 1 | one |
| 2 | two |
| 1 | one |
| 0 | zero |
| 00 | error |
| 3 | error |
| eighteen | 18 |
| nineteen | 19 |
| twenty | 40 |
| twenty-one | 41 |

We will check the directory list to be sure we have what we want. Here we list the full path of each file and directory we expect to find.

| Directory |
| path() | isDir() |
| 00 | yes |
| 00/0 | no |
| 00/1 | no |
| 00/2 | no |
| 00/3 | no |
| 00/4 | no |
| 00/5 | no |
| 00/6 | no |
| 00/7 | no |
| 00/8 | no |
| 00/9 | no |
| 10 | yes |
| 10/0 | no |
| 10/1 | no |
| 10/2 | no |
| 10/3 | no |
| 10/4 | no |
| 10/5 | no |
| 10/6 | no |
| 10/7 | no |
| 10/8 | no |
| 10/9 | no |
| 20 | no |
| 30 | no |
| 40 | yes |
| 40/0 | no |
| 40/1 | no |
Only in history//TestSimpleRecordAndLookup: 20021201
Only in history//TestSimpleRecordAndLookup: 20021203

11 hours later WardCunningham

Only in history//TestTensAllocation: 20021126
Only in history//WardCunningham: 20021127

36 minutes later WelcomeVisitors

Only in history//WelcomeVisitors: 20021107
Only in history//WelcomeVisitors: 20021108
Only in history//WelcomeVisitors: 20021126
diff -w history//WardCunningham/20021127 history//WelcomeVisitors/20021127
0a1
Decisions accumulate in software. Some decisions are wiser than others. BitRot is nothing more than the accumulation of poor decisions, decisions that usually look good at first but interact poorly with decisions made elsewhere. If only we had known.
2,3c3,5
        * mailto:ward@c2.com
        * http://c2.com/~ward/


Caution: This site is a mockup for evaluation purposes only. We are writing fit-style acceptance tests for the database and cgi scripts that will perform the operations described in these pages. See AcceptanceTests.


4a7,32
This site, spawned from the BuiltForLife workshop, is one small contribution to the reveral of bit rot. It contributes by by asking and answering one question: Why? Try it yourself:

        * RecordAnAnswer
        * LookupAnAnswer

Although we are happy to hold answers here, we recognize that our primary responsibility is to allocate the space of answer numbers. We do this in small, medium and large batches.

        * AllocateTenNumbers then RecordTenAnswers
        * AllocateThousands of numbers for your own use.
        * AllocateMillions of numbers for your public or private service.




Search this site. Enter one word and press enter.
[Search]


Here are a few more sources of information and ways to navigate this site. We thank you for your interest.

        * http:changes.cgi -- recent updates here.
        * WhosWho -- among friends and helpers.
        * SisterSites -- we link to automatically.




Legal Notice: This site, the text and the site design are Copyright (c) 2002, Cunningham & Cunningham, Inc. Answers recorded here are released to the public domain by their authors as a condition of storage, but materials linked by are not. See LegalDetails.
6d33
I set up this site and designed the logo. The 6 in the logo is this color: R: 118, G:23, B:4 or #761704 in hex.

110 minutes later WhosWho

Only in history//WelcomeVisitors: 20021107
diff -w history//WelcomeVisitors/20021108 history//WhosWho/20021108
1c1
Decisions accumulate in software. Some decisions are wiser than others. BitRot is nothing more than the accumulation of poor decisions, decisions that usually look good at first but interact poorly with decisions made elsewhere. If only we had known.
Your host and SystemAdiministrator.
3c3
This site, spawned from the BuiltForLife workshop, is one small contribution to the reveral of bit rot. It contributes by by asking and answering one question: Why?
        * WardCunningham
5,6c5
        * RecordAnAnswer
        * LookupAnAnswer
Attendees at the BuiltForLife workshop.
8,20c7,10
Although we are happy to hold answers here, we recognize that our primary responsibility is to allocate the space of answer numbers. We do this in small, medium and large batches.

        * AllocateTenNumbers then RecordTenAnswers
        * AllocateThousands of numbers for your own use.
        * AllocateMillions of numbers for your public or private service.

Learn more about this site, it's author, and the workshop that spawned this concept.

        * http:changes.cgi -- Recent changes to this site.
        * BuiltForLife workshop.
        * WhosWho, SisterSites

Legal Notice: This site, the text and the site design are Copyright (c) 2002, Cunningham & Cunningham, Inc. Answers here are released to the public domain by their authors as a condition of storage, but materials linked by are not. See LegalDetails.
        * BrianMarick
        * DaveThomas
        * Andy
        * Cooper
Only in history//WelcomeVisitors: 20021126
diff -w history//WelcomeVisitors/20021127 history//WhosWho/20021127
1c1
Decisions accumulate in software. Some decisions are wiser than others. BitRot is nothing more than the accumulation of poor decisions, decisions that usually look good at first but interact poorly with decisions made elsewhere. If only we had known.
Your host and System Adiministrator.
3,5c3


Caution: This site is a mockup for evaluation purposes only. We are writing fit-style acceptance tests for the database and cgi scripts that will perform the operations described in these pages. See AcceptanceTests.


        * WardCunningham
7c5
This site, spawned from the BuiltForLife workshop, is one small contribution to the reveral of bit rot. It contributes by by asking and answering one question: Why? Try it yourself:
Attendees at the BuiltForLife workshop.
9,32c7,10
        * RecordAnAnswer
        * LookupAnAnswer

Although we are happy to hold answers here, we recognize that our primary responsibility is to allocate the space of answer numbers. We do this in small, medium and large batches.

        * AllocateTenNumbers then RecordTenAnswers
        * AllocateThousands of numbers for your own use.
        * AllocateMillions of numbers for your public or private service.




Search this site. Enter one word and press enter.
[Search]


Here are a few more sources of information and ways to navigate this site. We thank you for your interest.

        * http:changes.cgi -- recent updates here.
        * WhosWho -- among friends and helpers.
        * SisterSites -- we link to automatically.




Legal Notice: This site, the text and the site design are Copyright (c) 2002, Cunningham & Cunningham, Inc. Answers recorded here are released to the public domain by their authors as a condition of storage, but materials linked by are not. See LegalDetails.
        * BrianMarick
        * DaveThomas
        * AndyHunt
        * AlanCooper

6 days later

Only in history//WhosWho: 20021108
Only in history//WhosWho: 20021127
Only in pages/: AcceptanceTests
Only in pages/: AllocateMillions
Only in pages/: AllocateTenNumbers
Only in pages/: AllocateThousands
Only in pages/: BitRot
Only in pages/: BuiltForLife
Only in pages/: BuiltForLifeNumber
Only in pages/: LegalDetails
Only in pages/: LookupAnAnswer
Only in pages/: PublicDomain
Only in pages/: RecordAnAnswer
Only in pages/: RecordTenAnswers
Only in pages/: SisterSites
Only in pages/: TemporaryNumbers
Only in pages/: TestReorganizingDirectoryOverflow
Only in pages/: TestSimpleDirectoryOverflow
Only in pages/: TestSimpleRecordAndLookup
Only in pages/: TestTensAllocation
Only in pages/: WardCunningham
Only in pages/: WelcomeVisitors
Only in pages/: WhosWho