Great. Now they'll be able to seize your house for copyright infringement. Keep in mind that there are much lower thresholds in place now thanks to the drug laws put in place since the 80s.
I second Steelcase. I, however, got a Steelcase Think. It has saved my back. I get back pain within 15 minutes sitting on many other chairs. With the Steelcase, I can sit for 10 hours a day with no discomfort.
It's interesting in that it is fully recyclable. It has fewer adjustments than, say, the HM. It has and adjustable lumbar support, with a mesh on the back. Cloth on the seat, with forward/backward adjustment. The armrests are fully adjustable (up/down, in/out, and they rotate).
First off, the article intro should be updated, unless/. would like to further capitalize on the false (and defamatory) title. There was no "C# Memory Leak" in this code just as there is no "C memory leak" in other similar, poorly-tested programs.
I was sadly unsurprised when I read TF Advertisement and found that, in fact, C# and the runtime had been working perfectly WRT this problem. The delegate reference (anonymous function pointer) was holding a reference to the target object, the source of the event, just as expected.
Second, I am shocked that this bug was not used as a "learning moment" for the people working on this project. This type of problem will continue to vex these people as they move from academia into the real world of building systems and applications. That is, until they learn how to debug problems. A significant portion of a developer's time is tracking down and fixing this sort of thing. It's also something that would have been found rather quickly with basic debugging skills.
For future reference, here's a little tutorial.
1. Start the system and let it run. 2. Watch memory consumption. You may even use a basic tool such as the Task Manager on Windows (although I'm sure, what was it?...Red Gate, is a fine product). 3. If memory consumption grows unabated, you have a leak somewhere. Time to start instrumenting your code. 4. Look at all of your allocations (grep new *.cs), start with those key objects that there are likely to be a lot of (e.g., ones that get added to lists). 5. Add two static variables to any such classes: allocatedCount and deletedCount. 6. Restart the program.
You can trace or dump these variables and start watching trends (liveCount = allocatedCount - deletedCount). If it had been done in this program, the problem would have been spotted instantly. You're lucky that it was a leak--usually easy to find--not the kind of "Heisenbug" that can bite developers in other languages, like C, in which an uninitialized variable can cause a problem to only show up sometimes; for example, only when run for 10 hours and only when run outside of a debugger.
When working on problems like this, the kind that can take hours or days to find and fix, the finding part is what takes all of the time. The diagnosing and fixing part is usually pretty quick and painless. The delegate reference that was the cause of this problem would have been spotted pretty quickly, I would venture.
I have just made an international move myself. I decided to move from the States to France for a few years. I am in the job hunt phase now.
Since I haven't completed the latter, I will give a few details on the former.
Unemployment is 8-10% here, but 20% among the youth. Naturally, it is difficult to get a work visa unless a company sponsors you. The way I did it was to get a non-work/visitor's visa, by showing sufficient resources and stating that I would not seek employment in France. I explained that I am a software developer and that I would seek work with US companies and work remotely.
To do this right, you need about 6 or more months' worth of living expenses. I am near Paris, so I can get by without a car, but you really need one to experience Europe fully (the trains don't go to all the places you might want to see). Shopping and setting up house can also be a pain without one.
Paperwork is a real chore. You must apply for a visa about two or three months before you leave. It takes between six weeks and three months to have one issued. You must apply at a French Embassy (not a consulate) and they are beginning a biometrics program, so you may need to go in person. We live(d) in Washington State and had to fly to San Francisco. Once the visa is issued, you have a window of time to enter the country. Once there, you must apply for the residence card immediately. This process is the other half of the visa process and is very similar. There is much information on the web about this. I mention these details because they are not immediately evident.
Once you arrive, paperwork continues: registering your car, applying for a house, opening a bank account, etc. To apply for a house, you need to put together a 'dossier', which contains financial records and much more. Your realtor will help you. Estimate one month for realtor fees, two months for deposit and, sometimes, last month's rent. In total, you will need four to five months' worth of rent to move in.
In short, doing this yourself is doable as a non-EU citizen, but it is a real trial. Good luck.
One great thing about Emacs is that a directory browser is built-in. It doesn't use the native operating system's file/directory browse dialog by default (although it's there in GUI builds). The browser is in the same window as the editor. This means you don't have to use the mouse and click on five things to open a file.
You can navigate from one directory to another just by pressing the up/down keys and enter. For example, pressing enter on the '..' line moves you up one directory. You can then 'close' the directory as if it were a text file and you're back where you started from. This makes traversing directories and files a very quick process, with stack behavior--all from the keyboard.
Of course, it comes with the attendant price of the Emacs learning curve. One mitigating factor is that directory browsing is often covered early in the tutorials and if that's all you're using it for, it shouldn't be too painful.
I learned Emacs because I needed to master an editor on Linux (I came from the Windows world). I can't live without it. Even though I'm back on Windows most of the time these days, I pop out of my "latest and greatest" Visual Studio 2003, 2005,... be-all-and-end-all IDE dozens of times a day to use Emacs. It's just faster when all I want to do is find a file and search through it or edit it.
On a seprate but related note, I use V 2000 http://www.fileviewer.com/. It's faster than any directory/text-oriented file browser than anything I've used (even Emacs). It saves a couple of keystrokes for each file, compared to Emacs, and they add up. I've used it for years and love it.
Wasn't it Gonzalez who attempted to justify the use of torture while he was a Bush advisor? Wasn't it our government who engaged in deviant torture pornography at Abu Gharib?
I'm not too sure about this, but I think it might have been 'invented' in the 18th century--before the patent office existed. By invented, I mean discovered, since it's mathematics (which, by the way, is not patentable).
Ah, you're right. My firewall wasn't allowing FTP to that URL.
It is indeed Win32 (still quite stale, though). The shooter still works, at least.
It's sad and baffling why they did this. For an app that is this old, it's a testament to its quality and uniqueness that it still has such a loyal following.
If they can't monetize it and maintain it, thanks to NetManage for letting us use it, at least.
ActionOutline (http://www.actionoutline.com/) is nice for Windows users. It's got a hierarchical view and you can add arbitrary rich text for each node. You can also add hyperlinks and flag things in various ways.
The best, in my experience, was Ecco. After NetManage bought it and destroyed it, it died. Luckily, they still (ostensibly) offer it via FTP, but I haven't been able to access that link for a long time. Plus, it's the last build, so it's a very stale Win16 app now. Still usable, though, if long in the tooth.
What I mean is that the UIs on most keyboards suck by virtue of the fact that the designers must cram thousands of voices, features, and functions into a 320x160 display having eight function keys and a dial. The option to pay extra for a full blown screen, for example, is something that many musicians would jump at.
Actually, it doesn't look any more computerized than many other keyboard workstations out there (e.g., Yamaha Motif). The fact that you can hook up external LCDs, etc. in order to more fully exploit what's under the hood will put it a generation beyond.
The fundamental question is: should these kids be learning fundamental CS--algorithms and data structures--or should they be learning something practical, with which they can also learn fundamental CS (albeit applied)?
If the former, then go the way of MIT and teach Scheme (a clean, older dialect of Common LISP). See *The Structure and Interpretation of Computer Programs* (or, colloquially, SICP) for more info.
My guess is that many of these kids will go on to other disciplines. Some will just want to be hackers. Do we really want to unleash bright, potentially excellent Open Source hackers on the world with a working knowledge of Scheme only?! What might they do? Could they tweak the Linux kernel's scheduling algorithm? Hmmm.
I think the best way to teach how computers work is to use a language that talks directly to them: C. People who propose ASM have their hearts in the right place, but ASMs come in as many flavors as ice cream (and from a productivity POV, they're about as nutritious).
A course should start with 2-4 months of C. Students can learn, for example, how the instruction pointer works, how arguments are passed on the stack, and how registers are used to do various things on whatever platform they're coding to. All of this is learned as a natural result of debugging simple problems.
Having learned the basics, the course can then shift gears and talk about OOP and how C++ implements its special variety. At this point they can learn, for example, about the extern "C" linkage specification and name mangling. These things are actually very easy to understand if you've used C--and are if the utmost practical importance; many libraries are still only available in C.
Algorithms and data stuctures can act as the landscape that these kids paint with their new knowledge and tools. Learning a language like C++, that is close to the hardware, they will be able to pick up any language with much greater ease.
WRT the Java vs. C++ issue, the answer should be clear. C has been around for 30 years, C++ almost 20. There have been hundreds of compilers written. Java? Not even a standard. Oh, and let's not forget that it was patterned after C++, along with several other languages (though to a lesser degree) like Perl and <ahem> UnrealScript.
If the rationale for using Java is that they want a simpler, cleaner, don't-show-me-the-hardware-messiness language, then why choose a C++ spin-off (that retains much of the syntactical messiness)? Use an elegant, open, intuitive language. The only one out there that I know of is Python. For a good description from Eric Raymond see Why Python?
All I can say is that I'm glad korporate amerika(tm) doesn't invent anything new, in general. If, for example, they had invented HTML, HTTP, or TCP/IP, we would never have had the Web. So let us pray and give thanks to St. Berners-Lee and the others before him who gave of their time and effort so that we might all benefit.
As far as corporate efforts go, there were some interesting attempts along the way. Let them serve as reminders. Take Lotus Notes(tm), for example. They're roadkill now. The fact is, no one should have to shell out $79 in order to communicate (or worse, just receive) ideas. The market has spoken.
I think this is the single best way to kill WAP (already foundering) and similar efforts. Not only do we now have to cough-up $50 for wireless/ISP charges, for a degraded network connection and 1980-style, monochrome, 320x240, largely text-based UI. But on top of it, we're expected to pay royalties to one shyster of a corporation, a usurper of prior art. No thanks. I'll stick with my T1 connection and save my "disconnected state" for some down time--that which people used to refer to as "being human."
Agreed. It's a shame that corporate interests conflict with the advancement of the state of the art. By that token, you're right about TeX. Indeed, Linux is one of the greatest things to happen in the history of computing, IMO, regardless of beauty or elegance (of which there is plenty within the Linux kernel).
If you want a glimpse of the NT code, some is provided in the DDK. For example, ntddk.h contains many important microkernel datastructures and entrypoints, macros and inline functions. It's not the inner workings, but you can get an idea of the style and structure.
Oh well, once Linux democratizes computing, I think MS will come out with a Linux distro to try to kill the rest (like they did with IE), introducing nonstandard extensions that become defacto because of developer adoption. Maybe when they do that, they'll "open source" NT and we can all appreciate it.
The finest code I've seen is Quake and the Windows NT kernel.
Quake is impressive for a few reasons. Though relatively terse in comments, the code speaks for itself. Carmack, Cash and the rest know how to express the essence of a game in the fewest number of lines imaginable. This is what you would expect, of course. Then there are the deeper aspects of seeing arguably the master of high performance game programming at work. By following the flow of execution (literally or figuratively) over the course of weeks, you begin to develop an understanding (albeit pale) of what a decade on the leading edge means.
One of the few things I enjoyed doing while working at MS was browsing the NT kernel source. The group that Dave Cutler (author of VMS) assembled to write NT was really the quintessential systems team. Now the code is definitely NOT what *nix folks would usually like in terms of style. But the clarity of thought, evident to anyone reasonably well versed in the practice, screamed a quiet elegance. A simplicity of design that I hadn't seen prior, nor have seen since.
I had a very similar experience. It's nice to see the story behind a passion. I learned to program when I was 13 on the Apple II. A year later I got a C64 and delved deeper. My interest in amateur radio led me towards EE, so by the time I got to college, that was my major.
I was a disillusioned kid at that point and learning EE only to go work for some part of the military industrial complex (this was the late 80's) made me like the prospect even less.
Then one day I was talking to some comp-sci grad students about the state of the art and realized that the world of computing hadn't actually passed me by! This was an avenue that was still achievable. So I scraped some money together, bought a 386/SX-16 (without the HD at first, to save money) and taught myself to program. Shortly thereafter, I dropped out of college to pursue a career. Ten years and countless remedial books on algorithms and datastructures later, I can call myself a programmer.
BTW, some of the most elegant code I've ever seen is the Windows NT kernel. That comment's likely to draw distain from this crowd, but the effort was led by Dave Cutler, the same guy who led the VMS crew. Dispite what people say about MS, this man's creation is a masterpiece (disregarding whatever is layered on top of it).
Two thoughts:
1. It seems that if not everyone who contributed to the site signed the copyright transfer agreement or if those who did sign were not aware that the site would be removed from the web (in part or in whole--who ever heard of rotating exclusion to information access!?), then those people might instigate a class action lawsuit against CRC.
2. Perhaps a new model of web publishing should be started, in the spirit of Eric's site, but with a legally binding, non-transferable GPL type of contract which is implicitly "signed" by anyone who contributes to the site. It might be structured in such a way that the copyright may never be transferred, in part or in whole. But maybe rights could be assigned non-exclusively in the event that a print form would be useful.
So, who is going to set up the new be-all-end-all Encyclopedia?!
Great. Now they'll be able to seize your house for copyright infringement. Keep in mind that there are much lower thresholds in place now thanks to the drug laws put in place since the 80s.
I second Steelcase. I, however, got a Steelcase Think. It has saved my back. I get back pain within 15 minutes sitting on many other chairs. With the Steelcase, I can sit for 10 hours a day with no discomfort.
It's interesting in that it is fully recyclable. It has fewer adjustments than, say, the HM. It has and adjustable lumbar support, with a mesh on the back. Cloth on the seat, with forward/backward adjustment. The armrests are fully adjustable (up/down, in/out, and they rotate).
First off, the article intro should be updated, unless /. would like to further capitalize on the false (and defamatory) title. There was no "C# Memory Leak" in this code just as there is no "C memory leak" in other similar, poorly-tested programs.
I was sadly unsurprised when I read TF Advertisement and found that, in fact, C# and the runtime had been working perfectly WRT this problem. The delegate reference (anonymous function pointer) was holding a reference to the target object, the source of the event, just as expected.
Second, I am shocked that this bug was not used as a "learning moment" for the people working on this project. This type of problem will continue to vex these people as they move from academia into the real world of building systems and applications. That is, until they learn how to debug problems. A significant portion of a developer's time is tracking down and fixing this sort of thing. It's also something that would have been found rather quickly with basic debugging skills.
For future reference, here's a little tutorial.
1. Start the system and let it run.
2. Watch memory consumption. You may even use a basic tool such as the Task Manager on Windows (although I'm sure, what was it?...Red Gate, is a fine product).
3. If memory consumption grows unabated, you have a leak somewhere. Time to start instrumenting your code.
4. Look at all of your allocations (grep new *.cs), start with those key objects that there are likely to be a lot of (e.g., ones that get added to lists).
5. Add two static variables to any such classes: allocatedCount and deletedCount.
6. Restart the program.
You can trace or dump these variables and start watching trends (liveCount = allocatedCount - deletedCount). If it had been done in this program, the problem would have been spotted instantly. You're lucky that it was a leak--usually easy to find--not the kind of "Heisenbug" that can bite developers in other languages, like C, in which an uninitialized variable can cause a problem to only show up sometimes; for example, only when run for 10 hours and only when run outside of a debugger.
When working on problems like this, the kind that can take hours or days to find and fix, the finding part is what takes all of the time. The diagnosing and fixing part is usually pretty quick and painless. The delegate reference that was the cause of this problem would have been spotted pretty quickly, I would venture.
This looks great. Thanks for posting.
I have just made an international move myself. I decided to move from the States to France for a few years. I am in the job hunt phase now.
Since I haven't completed the latter, I will give a few details on the former.
Unemployment is 8-10% here, but 20% among the youth. Naturally, it is difficult to get a work visa unless a company sponsors you. The way I did it was to get a non-work/visitor's visa, by showing sufficient resources and stating that I would not seek employment in France. I explained that I am a software developer and that I would seek work with US companies and work remotely.
To do this right, you need about 6 or more months' worth of living expenses. I am near Paris, so I can get by without a car, but you really need one to experience Europe fully (the trains don't go to all the places you might want to see). Shopping and setting up house can also be a pain without one.
Paperwork is a real chore. You must apply for a visa about two or three months before you leave. It takes between six weeks and three months to have one issued. You must apply at a French Embassy (not a consulate) and they are beginning a biometrics program, so you may need to go in person. We live(d) in Washington State and had to fly to San Francisco. Once the visa is issued, you have a window of time to enter the country. Once there, you must apply for the residence card immediately. This process is the other half of the visa process and is very similar. There is much information on the web about this. I mention these details because they are not immediately evident.
Once you arrive, paperwork continues: registering your car, applying for a house, opening a bank account, etc. To apply for a house, you need to put together a 'dossier', which contains financial records and much more. Your realtor will help you. Estimate one month for realtor fees, two months for deposit and, sometimes, last month's rent. In total, you will need four to five months' worth of rent to move in.
In short, doing this yourself is doable as a non-EU citizen, but it is a real trial. Good luck.
One great thing about Emacs is that a directory browser is built-in. It doesn't use the native operating system's file/directory browse dialog by default (although it's there in GUI builds). The browser is in the same window as the editor. This means you don't have to use the mouse and click on five things to open a file.
... be-all-and-end-all IDE dozens of times a day to use Emacs. It's just faster when all I want to do is find a file and search through it or edit it.
You can navigate from one directory to another just by pressing the up/down keys and enter. For example, pressing enter on the '..' line moves you up one directory. You can then 'close' the directory as if it were a text file and you're back where you started from. This makes traversing directories and files a very quick process, with stack behavior--all from the keyboard.
Of course, it comes with the attendant price of the Emacs learning curve. One mitigating factor is that directory browsing is often covered early in the tutorials and if that's all you're using it for, it shouldn't be too painful.
I learned Emacs because I needed to master an editor on Linux (I came from the Windows world). I can't live without it. Even though I'm back on Windows most of the time these days, I pop out of my "latest and greatest" Visual Studio 2003, 2005,
On a seprate but related note, I use V 2000 http://www.fileviewer.com/. It's faster than any directory/text-oriented file browser than anything I've used (even Emacs). It saves a couple of keystrokes for each file, compared to Emacs, and they add up. I've used it for years and love it.
Canon has been using CMOS sensors for years.
There is also Password Safe, from Bruce Schneier, author of the venerable Applied Cryptography tome. It's an open source project and very good, IMO.
Wasn't it Gonzalez who attempted to justify the use of torture while he was a Bush advisor? Wasn't it our government who engaged in deviant torture pornography at Abu Gharib?
Just checking...
I'm not too sure about this, but I think it might have been 'invented' in the 18th century--before the patent office existed. By invented, I mean discovered, since it's mathematics (which, by the way, is not patentable).
See Bayes theorem.
Uh...free? I think I just paid for some of that data. Maybe Accuweather could compete the old fashioned way--in the marketplace.
As long as the allocation is fair, and your company has some chance of success, these tend to generally motivate people as well as anything else.
Ah, you're right. My firewall wasn't allowing FTP to that URL.
It is indeed Win32 (still quite stale, though). The shooter still works, at least.
It's sad and baffling why they did this. For an app that is this old, it's a testament to its quality and uniqueness that it still has such a loyal following.
If they can't monetize it and maintain it, thanks to NetManage for letting us use it, at least.
ActionOutline (http://www.actionoutline.com/) is nice for Windows users. It's got a hierarchical view and you can add arbitrary rich text for each node. You can also add hyperlinks and flag things in various ways.
The best, in my experience, was Ecco. After NetManage bought it and destroyed it, it died. Luckily, they still (ostensibly) offer it via FTP, but I haven't been able to access that link for a long time. Plus, it's the last build, so it's a very stale Win16 app now. Still usable, though, if long in the tooth.
What I mean is that the UIs on most keyboards suck by virtue of the fact that the designers must cram thousands of voices, features, and functions into a 320x160 display having eight function keys and a dial. The option to pay extra for a full blown screen, for example, is something that many musicians would jump at.
Actually, it doesn't look any more computerized than many other keyboard workstations out there (e.g., Yamaha Motif). The fact that you can hook up external LCDs, etc. in order to more fully exploit what's under the hood will put it a generation beyond.
How is this different than ye olde filesystem directory? Does that qualify as prior art?
The fundamental question is: should these kids be learning fundamental CS--algorithms and data structures--or should they be learning something practical, with which they can also learn fundamental CS (albeit applied)?
If the former, then go the way of MIT and teach Scheme (a clean, older dialect of Common LISP). See *The Structure and Interpretation of Computer Programs* (or, colloquially, SICP) for more info.
My guess is that many of these kids will go on to other disciplines. Some will just want to be hackers. Do we really want to unleash bright, potentially excellent Open Source hackers on the world with a working knowledge of Scheme only?! What might they do? Could they tweak the Linux kernel's scheduling algorithm? Hmmm.
I think the best way to teach how computers work is to use a language that talks directly to them: C. People who propose ASM have their hearts in the right place, but ASMs come in as many flavors as ice cream (and from a productivity POV, they're about as nutritious).
A course should start with 2-4 months of C. Students can learn, for example, how the instruction pointer works, how arguments are passed on the stack, and how registers are used to do various things on whatever platform they're coding to. All of this is learned as a natural result of debugging simple problems.
Having learned the basics, the course can then shift gears and talk about OOP and how C++ implements its special variety. At this point they can learn, for example, about the extern "C" linkage specification and name mangling. These things are actually very easy to understand if you've used C--and are if the utmost practical importance; many libraries are still only available in C.
Algorithms and data stuctures can act as the landscape that these kids paint with their new knowledge and tools. Learning a language like C++, that is close to the hardware, they will be able to pick up any language with much greater ease.
WRT the Java vs. C++ issue, the answer should be clear. C has been around for 30 years, C++ almost 20. There have been hundreds of compilers written. Java? Not even a standard. Oh, and let's not forget that it was patterned after C++, along with several other languages (though to a lesser degree) like Perl and <ahem> UnrealScript.
If the rationale for using Java is that they want a simpler, cleaner, don't-show-me-the-hardware-messiness language, then why choose a C++ spin-off (that retains much of the syntactical messiness)? Use an elegant, open, intuitive language. The only one out there that I know of is Python. For a good description from Eric Raymond see Why Python?
All I can say is that I'm glad korporate amerika(tm) doesn't invent anything new, in general. If, for example, they had invented HTML, HTTP, or TCP/IP, we would never have had the Web. So let us pray and give thanks to St. Berners-Lee and the others before him who gave of their time and effort so that we might all benefit.
As far as corporate efforts go, there were some interesting attempts along the way. Let them serve as reminders. Take Lotus Notes(tm), for example. They're roadkill now. The fact is, no one should have to shell out $79 in order to communicate (or worse, just receive) ideas. The market has spoken.
I think this is the single best way to kill WAP (already foundering) and similar efforts. Not only do we now have to cough-up $50 for wireless/ISP charges, for a degraded network connection and 1980-style, monochrome, 320x240, largely text-based UI. But on top of it, we're expected to pay royalties to one shyster of a corporation, a usurper of prior art. No thanks. I'll stick with my T1 connection and save my "disconnected state" for some down time--that which people used to refer to as "being human."
Agreed. It's a shame that corporate interests conflict with the advancement of the state of the art. By that token, you're right about TeX. Indeed, Linux is one of the greatest things to happen in the history of computing, IMO, regardless of beauty or elegance (of which there is plenty within the Linux kernel).
If you want a glimpse of the NT code, some is provided in the DDK. For example, ntddk.h contains many important microkernel datastructures and entrypoints, macros and inline functions. It's not the inner workings, but you can get an idea of the style and structure.
Oh well, once Linux democratizes computing, I think MS will come out with a Linux distro to try to kill the rest (like they did with IE), introducing nonstandard extensions that become defacto because of developer adoption. Maybe when they do that, they'll "open source" NT and we can all appreciate it.
The finest code I've seen is Quake and the Windows NT kernel.
Quake is impressive for a few reasons. Though relatively terse in comments, the code speaks for itself. Carmack, Cash and the rest know how to express the essence of a game in the fewest number of lines imaginable. This is what you would expect, of course. Then there are the deeper aspects of seeing arguably the master of high performance game programming at work. By following the flow of execution (literally or figuratively) over the course of weeks, you begin to develop an understanding (albeit pale) of what a decade on the leading edge means.
One of the few things I enjoyed doing while working at MS was browsing the NT kernel source. The group that Dave Cutler (author of VMS) assembled to write NT was really the quintessential systems team. Now the code is definitely NOT what *nix folks would usually like in terms of style. But the clarity of thought, evident to anyone reasonably well versed in the practice, screamed a quiet elegance. A simplicity of design that I hadn't seen prior, nor have seen since.
I had a very similar experience. It's nice to see the story behind a passion. I learned to program when I was 13 on the Apple II. A year later I got a C64 and delved deeper. My interest in amateur radio led me towards EE, so by the time I got to college, that was my major.
I was a disillusioned kid at that point and learning EE only to go work for some part of the military industrial complex (this was the late 80's) made me like the prospect even less.
Then one day I was talking to some comp-sci grad students about the state of the art and realized that the world of computing hadn't actually passed me by! This was an avenue that was still achievable. So I scraped some money together, bought a 386/SX-16 (without the HD at first, to save money) and taught myself to program. Shortly thereafter, I dropped out of college to pursue a career. Ten years and countless remedial books on algorithms and datastructures later, I can call myself a programmer.
BTW, some of the most elegant code I've ever seen is the Windows NT kernel. That comment's likely to draw distain from this crowd, but the effort was led by Dave Cutler, the same guy who led the VMS crew. Dispite what people say about MS, this man's creation is a masterpiece (disregarding whatever is layered on top of it).
Two thoughts:
1. It seems that if not everyone who contributed to the site signed the copyright transfer agreement or if those who did sign were not aware that the site would be removed from the web (in part or in whole--who ever heard of rotating exclusion to information access!?), then those people might instigate a class action lawsuit against CRC.
2. Perhaps a new model of web publishing should be started, in the spirit of Eric's site, but with a legally binding, non-transferable GPL type of contract which is implicitly "signed" by anyone who contributes to the site. It might be structured in such a way that the copyright may never be transferred, in part or in whole. But maybe rights could be assigned non-exclusively in the event that a print form would be useful.
So, who is going to set up the new be-all-end-all Encyclopedia?!