Ah, yes. I believe I first saw this in Knightmer's.sig:
<\\swing> and if we're playing old distributions... whatever happened to
Yggdrasil?:)
<joost> \\swing: everybody who tried to pronounce it got their tongue in a
knot and choked
  -- #debian
--Phil (And you should see the source file for my.sig quotes...)
Would it be better if I'd said I wanted to pipe the changelog to grep? Approve or reject upgrades with scheme
code? Run diff3 --merge on the current, old, and new config files, starting $EDITOR on the result to resolve conflicts while popping up the new man
page for the config file in another xterm? You can't do any of these things now because the information's not there, and the infrastructure's not there.
The information is there. When I do an upgrade in Debian, it checks the config files. If a file has been changed from outside the package management system, I get:
Setting up ssh (2.2.0p1-1)...
Configuration file `/etc/ssh/sshd_config'
==> File on system created by you or by a script.
==> File also in package provided by package maintainer.
What would you like to do about it ? Your options are:
Y or I : install the package maintainer's version
N or O : keep your currently-installed version
D : show the differences between the versions
Z : background this process to examine the situation
The default action is to keep your current version.
*** sshd_config (Y/I/N/O/D/Z) [default=N] ?
Picking option D gives me a context diff run though the default system pager (normally 'less'). Option Z gives you a shell and you're free to do whatever you want. The new file is in <old file name>.dpkg-new
--Phil (No, dpkg isn't perfect, but it is really nice.)
I might've been able to finish it, but the disk my copy was on (a 5.25" ProDOS disk!) had some bad spots and the game would always die horribly at specific spots in two of the lint-gathering sections. I'll have to try that java version and see if I remember enough to even get that far.
--Phil (A nasty-looking dwarf throws an axe at you--oh, wait. Wrong game.)
Yes, definitely. Such a location would also be safer if the cable ever broke. There would be fewer people around (although the base station would still have a lot) and the water would take the energy of the fall.
--Phil (The best solution, of course, would be to not have the cable break in the first place.)
The asterisk isn't usually intended as a trademark avoidance method; it's usually a globbing character. Due to Bell Labs' enforcement of their trademark on "Unix", most Unix workalikes were given "Unix" soundalike names that ended with some of the same characters as "Unix". (e.g. Ultrix, Xenix, AIX, HP/UX, even Minix and Linux (although the latter names probably stemmed more from the by-then tradition of names sounding like "Unix", not directly from worries of trademark infringement))
--Phil (Yes, most of those names don't end in "nix". It's the spirit of the thing that counts.)
Thanks to this woman every cup must have a warning label stating its contents are hot.
No; thanks to this woman, McDonalds now serves their coffee at a reasonable temperature. The coffee will still burn you if you accidentally spill it on yourself, but it will take about twenty seconds for it to do the damage it did to Liebeck in three seconds. The coffee is also no longer served at a temperature that will scald your mouth if you drink it immediately.
Firecrackers are not intended to be held in the hand when ignited. Coffee is intended to be ingested, and one ought to be able to reasonably assume that the coffee will not burn you severely enough to require skin grafts.
--Phil (Read my other post for some informative URLs.)
This is almost as bad as the old lady who spilled hot coffee on her lap or the asshole woman suing nike for shoelaces coming untied.
Well, I'm not familiar with the shoelace lawsuit you reference, but the coffee lawsuit (Liebeck vs. McDonalds) was a lot more justified that many people seem to think. Tahe a look at what the Consumer Attorneys of California have to say about the case. Another good reference is at http://www.quellerfisher.com/liebeck.html.
Basically, the woman was awarded $200,000 to cover her medical bills (she suffered third-degree burns, acquired in three seconds), but that amount was reduced to $160,000 because she was deemed to be partially at fault. She was also awarded $2.7 million in punitive damages, because McDonalds' statements showed that they knew they were putting people at risk for severe burns, but continued to serve the coffee at high temperatures. McDonalds was also able to get the punitive damages reduced to $480,000 in appeals court.
--Phil (I wish more people would research stories like this before spreading them.)
Just because Google still gets used doesn't mean that it still gets used by the people that complained. In Google's case this is still true. But in
Slashdot's case I think a lot of us "founding members" have drifted away (or tried to).
Everything goes through changes. Both Slashdot and Google have been growing, and some changes are necessary.
Sometimes, the changes are not what people want. I remember when Slashdot went from completely flat comments, where new comments were added to the end of the list, to a flat nested layout, where replies were added immediatly after the comment to which they were in response. Some people liked it for the ability to better follow a thread. Some didn't, because they were used to reading all of the new posts at the end of the list. (I was among the latter; these days, I browse in nested.) Ultimately, we got a choce of threading schemes, and I doubt there are many people who read comments flat, oldest first.
What my rambling is supposed to illustrate is that sites have a tendency to change. Some people oppose the change because they're just used to the old way (cf. Slashdot's change to its green color scheme). Those people will either adjust or leave. There will, however, be people that stay and more people that join. Remember the uproar when Rob implemented user accounts? Many, many people objected vehemently to the change. The addition of user accounts, however, allowed a number of (IMHO) really beneficial things--stored user preferences, (a degree of) accountability (i.e. I'm the only person who can post as "Phil Gregory" (especially since I'm not well known enough to have imposters:) )), and the moderation system (as it currently stands, at least).
Google, likewise, is going to change. Running such a site takes money, and one of the most common ways of funding a site is with banner ads. If they put an ad on each page, they'll probably chase off some people who can't stand the thought of a company making money. They would, however, then be able to support the rest of the people that just want to use a good search engine, while probably adding other things they might find useful.
I still miss the old Slashdot at times, too. It was nice when there was a feeling of a small community. I met a number of people via email responses to my posts (including one interesting exchange about fractional approximations to pi, inspired by my.sig). I remember being able to actually converse with Rob in posts on Slashdot. I remember the inevitable half-dozen obligatory posts from "Bill Gates" (with varying email addresses) attached to Microsoft stories and the scattered half-flamebait, half-troll, half-thought-provoking posts from MEEPT. I also like Slashdot as it exists now. There are more people, and thus more diversity. Slashdot article topics are also more diverse, and I like that. Sure, we have Jon Katz, but we also have Robin. All in all, I think that the changes have resulted in a site that is at least as good as it used to be, and I don't really see Google doing otherwise, either.
--Phil (Hey! Let's start an "old farts of Slashdot" club!)
But people can still use web-based (semi)secure email like
hushmail (I think the password is sent over SSL, so it might only be good for one-offs...
The problem with this is that they're not just controlling the network, but the computers, too. If they have the resources to intercept every email and determine how they want it routed, they certainly have the resources to put at least a keystroke logger on each of the kiosk computers. Given the circumstances, I wouldn't trust those computers with my Slashdot password, let alone the password for an email account.
--Phil (A friend used to tell me, "There are two types of paranoia: total and insufficient.")
I cannot now see a movie or TV show that puts a little "Present Day" at the bottom of the screen at the beginning of the show without thinking to myself, "Present time! Hahahahaha!". On one occasion, when watching such a movie with friends who had also seen Lain, I said it out loud--at the same time they did. Maybe I'm just easily amused sometimes...
Slashdot is, by and large, a techie site (Katz notwithstanding). Not everything on it, however, is purely technical. There are movie reviews, Star Wars news, a lot of science news that isn't really computer-related, and Anime. While much of that isn't completely computer related, many of those things appeal to a large segment of Slashdot's readership.
It is also helpful to keep in mind that from the days of Chips and Dips, this site been "stuff that Rob and his friends like". Rob and his friends being pretty average geeks, a lot of the things that are interesting to them are interesting to the rest of us, too. Just keep in mind whose site it is and that you can always check the little box to keep from seeing topics you don't like.
--Phil (Personally, I'm happy that Rob finally got hooked on anime.)
Yup. I've got a working KatzBot, and this article was one of the final tests. I'd love to release it for general consumption, but ZDNet is paying me huge amounts of money to customize it for their use and not let anyone else have it.
--Phil (I might be able release Sig11Bot, which does mostly the same thing, but in fewer words...)
This is the hairy part. Exception are, by definition exceptional, and the code have to deal with exception that they never envisionned.
Not really. Exceptions are merely events that are not part of the "normal" operation of the program. Oftentimes, you have at least some idea of what could go wrong, and can either handle it or complain.
try
<get some data>
except
on ERecordNotFound do
try
<get data from somewhere else>
except
on ERecordNotFound do
raise ENoData.Create('Could not locate the requested data');
end;
end;
end;
You can also do things like
try
<do some stuff>
except
on EArea1Error do
<handle that error>
on EArea2Error do
<handle this error>
on EArea3Error do
<complain to the user because this was their problem>
end;
Using delegation and frameworks from different vendors ends-up with code dealing with exception it was never prepared to use.
Hopefully, the vendors documented their code properly so that you know what exceptions their functions can throw. At the very least, all of their exceptions should be children of a single, vendor-specific exception so that you can at least catch exceptions by vendor.
As for handling completely unexpected exceptions, there's always
try
<call the top level functions>
except
on E: Exception do
MessageDlg('Exception "' + E.Message + '" occurred. Please tell <contact person> about it.', mtError, [mbOk], 0);
end;
--Phil (The code is all Delphi, typed from memory, so don't complain too much about typos.)
I'll object (take exception?) to your statements. Most of my experience in exceptions comes from Delphi, not C++, but I'm assuming the concepts remain similar. (Although one poster seems to imply that you can't re-throw exceptions in C++. Is that correct?)
I've found that exceptions make for much cleaner error handling in my code. I can enclose a sequence of events in a try...except block and execution will only continue until something bad happens, after which point execution jumps to the except clause and I get to sort out what went wrong. Exceptions in Delphi are defined as classes, with normal polymorphic features. Thus, I can subclass exceptions for fine-grained error detection but still have overall exception handlers with wider scope.
Only somewhat on a different tack, I recently found a copy of Knuth's Literate Programming at a used book store. I purchased it and was amused to find Knuth, in a 1974 essay, promoting what were basically exceptions.
--Phil (And if you haven't read Literate Programming, I highly recommend it.)
Note that those items are "factors to be considered", not absolute rules. Furthermore, in many cases companies will go straight for guideline four. In a number of cases (enumerated multiple times elsewhere in this topic), companies have rereleased old games for newer platforms. Most companies' knee-jerk reaction to "abandonware" is along the lines of, "Yeah, we're not selling it right now, but we still own it and we might want to try to make more money off it in the future." They would argue that making a game available for free right now would undercut their sales if they ever tried to remarket the game themselves in the future.
For other, non-game, software, there are usually more recent versions out, and the company owning the software would probably take the stance that, if you want program X, you ought to be buying the latest version, not getting an older one for free. I'm not sure where I stand on this issue. I tend not to like counting non-purchased programs as "losses", because that gets silly very rapidly, but it seems vaguely wrong to use, for free, an older version of a program in place of purchasing a newer one.
Personally, I think we just need to drastically shorten copyright duration. That would make a lot of these issues a great deal simpler and would result in a lot more reuse of ideas, in contrast to today's information hoarding.
--Phil ("Rereleased"--now there's a word that looks horribly redundant.)
If you are spending time playing an old
abandonware game, that is less time for you to be playing that new PS game, or Diablo2 or whatever game they just came out with. That is one of the biggest reason game companies
are against abandonware.
As others have posted in this story, this seems a really silly argument. At any given moment, the endeavors which I am currently undertaking prevent me from doung countless other things. Nintendo should sue Sega for having a product that takes away possible Nintendo revenue by keeping people from playing Nintendo games. The recording industry should sue the publishing industry (or vice versa--the publishers were here first) for offering products that occupy people who might otherwise be purchasing CDs.
--Phil (Ithink I'll sue Slashdot for occupying time I would otherwise have spent reading books.)
Well, actually, what you call it depends on your mindset.
Big corporate mindset:
Alpha: You're still writing down requirements and haven't actually started on the code yet.
Beta: It compiles.
Release: You've put in most of the features you want, and it's time to do some testing.
Free software coder:
Alpha: You've just released this program that's really going to rock someday. Right now, it only prints "Hello, world," but just look at that TODO list!
Beta: The program does some of what you want it to do. Other people are starting to pick it up and test it out, too.
Still Beta: Most of the features are implemented. A lot of people are using the program, with a good degree of success all around.
Version 0.99.x: People have been successfully yousing your program in production environments for the last six months, but there are just a few more bugs you want to squash/features you want to add before you make it 1.0. You probably have your own icon on Slashdot.
Version 1.0: The near-mythical state where your program actually does everything you want it to. Now, you can start doing even more coordination among all those other people submitting patches to make your program do what they want it to...
--Phil (Not that any of my projects even have enough code to release yet...)
DMZ stands for DeMilitarized Zone. Basically, a decent firewall will have three interfaces--external, internal, and DMZ. The DMZ is where you put your servers and (ideally) anything you want accessible to the Internet at large. This keeps incoming (possibly hostile) traffic away from your internal machines. It also maintains a degree of separation between your Internet-accessible and possibly compromisable machines and the protected computers behind the firewall.
--Phil (The ipchains HOWTO talks a bit about DMZs, too.)
Depending on how advanced your students are, they could write a rudimentary machine code emulator. I remember writing one of these for one of my computer science courses, and it was quite interesting (to me, at least). We were given a list of opcodes and a description of what each was to do. Our program had to assemble them, creating a file with the binary output, and then run the file.
IIRC, it was a simple assembly language. Each opcode was an int long, as were the opcode's parameters (although some parameters were floats). Space was always reserverd for two parameters, whether they were needed or not (this allowed jumps to specify the number of instructions over which to jump--there were no symbolic labels). IIRC, the main opcodes were mathematical ones. There were also load and save for memory addresses, but the addresses were always immediate--no indirect references. There were two registers.
I beleve the opcodes included
add registers A and B, put result in A
subtract A - B, result in A
multiply
divide (all numbers were floats)
load from memory address to register (There was a space of about 16 floats for memory. memory locations were for sequential numbers--the intent was to implement memory locations as subscripts on an array of floats.)
save to memory address from register
put literal number in register
jump N instructions if specified register is zero
end program, final result (to be reported by the interpreting program) in register A
Those are all I remember. There may have been others, but those are enough to write simple mathematical test programs.
This may be a bit advanced for a high school class, but it was certainly an interesting project for me. If the students can handle it, I suspect that they will like it, too.
--Phil (The fun thing is that I'm pretty sure that I did this project before I took assembly.)
When I started on my computer science degree, the first project in computer science I was to write a series of functions to do basic mathematical calculations. The catch was that we couldn't use any math operators or external math functions, except for two simple functions, one of which added one to a number, the other of which subtracted one from a number. On those building blocks, we had to implement (IIRC) addition, subtraction, multiplication, integer division, modulo division, greatest common denominator, least common multiple, and integer exponentiation. These had to return correct values for all positive integers.
This would probably be a decent project for high school students. If the class is advanced, the parameters can be expanded. Ensure that the functions work for negative integers, too. (Not too hard, and I remember taking this step with my project just to make it slightly more interesting.) Add other mathematical functions, such as factorials or integer roots (square roots of square numbers, etc.). Add, perhaps as an additional project, the requirement of creating a rudimentary calculator with functions. There's a good bit of room for expansion; it depends on how good the students are.
--Phil (I can't remember most of the other projects I did in those classes--they weren't as interesting, I suppose.)
Hmm. What browser are you using? Strictly speaking, that's incorrect behaviour, since these are (according to the HTML spec) SGML character references. An SGML character reference is defined as an ampersand followed by a alphabetic string, optionally terminated by a semicolon. ("Optionally" because any non-alphabetic character implicitly terminates the reference.) Thus, '<I' is a valid SGML character reference. For an HTML rendering agent, however, there is no defined 'ltI' character reference (there are, in fact, no other references beginning with 'lt'), and it is understandable behaviour to assume a semicolon was omitted and try to figure out what the actual reference was. The underlying HTML remains non-W3C-compliant, though.
I'll finish with the W3C's note on semicolons in HTML character references.
In SGML, it is possible to eliminate the final ";" after a character reference in some cases (e.g., at a line break or immediately before a tag). In other circumstances it may not be eliminated (e.g., in the middle of a word). We strongly suggest using the ";" in all cases to avoid problems with user agents that require this character to be present.
--Phil (Some people call me "anal retentive". I prefer to think of myself as "pedantic".)
And, while we're enlightening people, you really need semicolons to mark the ends of your special characters: '<', not '<'. Otherwise, they run into the next word and are usually rendered literally by the browser.
Ah, yes. I believe I first saw this in Knightmer's .sig:
<\\swing> and if we're playing old distributions... whatever happened to :)
Yggdrasil?
<joost> \\swing: everybody who tried to pronounce it got their tongue in a
knot and choked
  -- #debian
--Phil (And you should see the source file for my
The information is there. When I do an upgrade in Debian, it checks the config files. If a file has been changed from outside the package management system, I get:
Setting up ssh (2.2.0p1-1)Configuration file `/etc/ssh/sshd_config'
==> File on system created by you or by a script.
==> File also in package provided by package maintainer.
What would you like to do about it ? Your options are:
Y or I : install the package maintainer's version
N or O : keep your currently-installed version
D : show the differences between the versions
Z : background this process to examine the situation
The default action is to keep your current version.
*** sshd_config (Y/I/N/O/D/Z) [default=N] ?
Picking option D gives me a context diff run though the default system pager (normally 'less'). Option Z gives you a shell and you're free to do whatever you want. The new file is in <old file name>.dpkg-new
--Phil (No, dpkg isn't perfect, but it is really nice.)
I might've been able to finish it, but the disk my copy was on (a 5.25" ProDOS disk!) had some bad spots and the game would always die horribly at specific spots in two of the lint-gathering sections. I'll have to try that java version and see if I remember enough to even get that far.
--Phil (A nasty-looking dwarf throws an axe at you--oh, wait. Wrong game.)
Yes, definitely. Such a location would also be safer if the cable ever broke. There would be fewer people around (although the base station would still have a lot) and the water would take the energy of the fall.
--Phil (The best solution, of course, would be to not have the cable break in the first place.)
The quote should be "Phenominal Cosmic Power! (Itty-bitty living space.)".
--Phil (Some people say I'm anal-retentive. I prefer to think of myself as detail-oriented.)
The asterisk isn't usually intended as a trademark avoidance method; it's usually a globbing character. Due to Bell Labs' enforcement of their trademark on "Unix", most Unix workalikes were given "Unix" soundalike names that ended with some of the same characters as "Unix". (e.g. Ultrix, Xenix, AIX, HP/UX, even Minix and Linux (although the latter names probably stemmed more from the by-then tradition of names sounding like "Unix", not directly from worries of trademark infringement))
--Phil (Yes, most of those names don't end in "nix". It's the spirit of the thing that counts.)
No; thanks to this woman, McDonalds now serves their coffee at a reasonable temperature. The coffee will still burn you if you accidentally spill it on yourself, but it will take about twenty seconds for it to do the damage it did to Liebeck in three seconds. The coffee is also no longer served at a temperature that will scald your mouth if you drink it immediately.
Firecrackers are not intended to be held in the hand when ignited. Coffee is intended to be ingested, and one ought to be able to reasonably assume that the coffee will not burn you severely enough to require skin grafts.
--Phil (Read my other post for some informative URLs.)
Well, I'm not familiar with the shoelace lawsuit you reference, but the coffee lawsuit (Liebeck vs. McDonalds) was a lot more justified that many people seem to think. Tahe a look at what the Consumer Attorneys of California have to say about the case. Another good reference is at http://www.quellerfisher.com/liebeck.html.
Basically, the woman was awarded $200,000 to cover her medical bills (she suffered third-degree burns, acquired in three seconds), but that amount was reduced to $160,000 because she was deemed to be partially at fault. She was also awarded $2.7 million in punitive damages, because McDonalds' statements showed that they knew they were putting people at risk for severe burns, but continued to serve the coffee at high temperatures. McDonalds was also able to get the punitive damages reduced to $480,000 in appeals court.
--Phil (I wish more people would research stories like this before spreading them.)
Everything goes through changes. Both Slashdot and Google have been growing, and some changes are necessary.
Sometimes, the changes are not what people want. I remember when Slashdot went from completely flat comments, where new comments were added to the end of the list, to a flat nested layout, where replies were added immediatly after the comment to which they were in response. Some people liked it for the ability to better follow a thread. Some didn't, because they were used to reading all of the new posts at the end of the list. (I was among the latter; these days, I browse in nested.) Ultimately, we got a choce of threading schemes, and I doubt there are many people who read comments flat, oldest first.
What my rambling is supposed to illustrate is that sites have a tendency to change. Some people oppose the change because they're just used to the old way (cf. Slashdot's change to its green color scheme). Those people will either adjust or leave. There will, however, be people that stay and more people that join. Remember the uproar when Rob implemented user accounts? Many, many people objected vehemently to the change. The addition of user accounts, however, allowed a number of (IMHO) really beneficial things--stored user preferences, (a degree of) accountability (i.e. I'm the only person who can post as "Phil Gregory" (especially since I'm not well known enough to have imposters :) )), and the moderation system (as it currently stands, at least).
Google, likewise, is going to change. Running such a site takes money, and one of the most common ways of funding a site is with banner ads. If they put an ad on each page, they'll probably chase off some people who can't stand the thought of a company making money. They would, however, then be able to support the rest of the people that just want to use a good search engine, while probably adding other things they might find useful.
I still miss the old Slashdot at times, too. It was nice when there was a feeling of a small community. I met a number of people via email responses to my posts (including one interesting exchange about fractional approximations to pi, inspired by my .sig). I remember being able to actually converse with Rob in posts on Slashdot. I remember the inevitable half-dozen obligatory posts from "Bill Gates" (with varying email addresses) attached to Microsoft stories and the scattered half-flamebait, half-troll, half-thought-provoking posts from MEEPT. I also like Slashdot as it exists now. There are more people, and thus more diversity. Slashdot article topics are also more diverse, and I like that. Sure, we have Jon Katz, but we also have Robin. All in all, I think that the changes have resulted in a site that is at least as good as it used to be, and I don't really see Google doing otherwise, either.
--Phil (Hey! Let's start an "old farts of Slashdot" club!)
The problem with this is that they're not just controlling the network, but the computers, too. If they have the resources to intercept every email and determine how they want it routed, they certainly have the resources to put at least a keystroke logger on each of the kiosk computers. Given the circumstances, I wouldn't trust those computers with my Slashdot password, let alone the password for an email account.
--Phil (A friend used to tell me, "There are two types of paranoia: total and insufficient.")
I cannot now see a movie or TV show that puts a little "Present Day" at the bottom of the screen at the beginning of the show without thinking to myself, "Present time! Hahahahaha!". On one occasion, when watching such a movie with friends who had also seen Lain, I said it out loud--at the same time they did. Maybe I'm just easily amused sometimes...
--Phil (I'm going to start on Evangelion soon.)
Slashdot is, by and large, a techie site (Katz notwithstanding). Not everything on it, however, is purely technical. There are movie reviews, Star Wars news, a lot of science news that isn't really computer-related, and Anime. While much of that isn't completely computer related, many of those things appeal to a large segment of Slashdot's readership.
It is also helpful to keep in mind that from the days of Chips and Dips, this site been "stuff that Rob and his friends like". Rob and his friends being pretty average geeks, a lot of the things that are interesting to them are interesting to the rest of us, too. Just keep in mind whose site it is and that you can always check the little box to keep from seeing topics you don't like.
--Phil (Personally, I'm happy that Rob finally got hooked on anime.)
Yup. I've got a working KatzBot, and this article was one of the final tests. I'd love to release it for general consumption, but ZDNet is paying me huge amounts of money to customize it for their use and not let anyone else have it.
--Phil (I might be able release Sig11Bot, which does mostly the same thing, but in fewer words...)
Not really. Exceptions are merely events that are not part of the "normal" operation of the program. Oftentimes, you have at least some idea of what could go wrong, and can either handle it or complain.
try<get some data>
except
on ERecordNotFound do
try
<get data from somewhere else>
except
on ERecordNotFound do
raise ENoData.Create('Could not locate the requested data');
end;
end;
end;
You can also do things like
try<do some stuff>
except
on EArea1Error do
<handle that error>
on EArea2Error do
<handle this error>
on EArea3Error do
<complain to the user because this was their problem>
end;
Hopefully, the vendors documented their code properly so that you know what exceptions their functions can throw. At the very least, all of their exceptions should be children of a single, vendor-specific exception so that you can at least catch exceptions by vendor.
As for handling completely unexpected exceptions, there's always
try<call the top level functions>
except
on E: Exception do
MessageDlg('Exception "' + E.Message + '" occurred. Please tell <contact person> about it.', mtError, [mbOk], 0);
end;
--Phil (The code is all Delphi, typed from memory, so don't complain too much about typos.)
I'll object (take exception?) to your statements. Most of my experience in exceptions comes from Delphi, not C++, but I'm assuming the concepts remain similar. (Although one poster seems to imply that you can't re-throw exceptions in C++. Is that correct?)
I've found that exceptions make for much cleaner error handling in my code. I can enclose a sequence of events in a try...except block and execution will only continue until something bad happens, after which point execution jumps to the except clause and I get to sort out what went wrong. Exceptions in Delphi are defined as classes, with normal polymorphic features. Thus, I can subclass exceptions for fine-grained error detection but still have overall exception handlers with wider scope.
Only somewhat on a different tack, I recently found a copy of Knuth's Literate Programming at a used book store. I purchased it and was amused to find Knuth, in a 1974 essay, promoting what were basically exceptions.
--Phil (And if you haven't read Literate Programming, I highly recommend it.)
Note that those items are "factors to be considered", not absolute rules. Furthermore, in many cases companies will go straight for guideline four. In a number of cases (enumerated multiple times elsewhere in this topic), companies have rereleased old games for newer platforms. Most companies' knee-jerk reaction to "abandonware" is along the lines of, "Yeah, we're not selling it right now, but we still own it and we might want to try to make more money off it in the future." They would argue that making a game available for free right now would undercut their sales if they ever tried to remarket the game themselves in the future.
For other, non-game, software, there are usually more recent versions out, and the company owning the software would probably take the stance that, if you want program X, you ought to be buying the latest version, not getting an older one for free. I'm not sure where I stand on this issue. I tend not to like counting non-purchased programs as "losses", because that gets silly very rapidly, but it seems vaguely wrong to use, for free, an older version of a program in place of purchasing a newer one.
Personally, I think we just need to drastically shorten copyright duration. That would make a lot of these issues a great deal simpler and would result in a lot more reuse of ideas, in contrast to today's information hoarding.
--Phil ("Rereleased"--now there's a word that looks horribly redundant.)
As others have posted in this story, this seems a really silly argument. At any given moment, the endeavors which I am currently undertaking prevent me from doung countless other things. Nintendo should sue Sega for having a product that takes away possible Nintendo revenue by keeping people from playing Nintendo games. The recording industry should sue the publishing industry (or vice versa--the publishers were here first) for offering products that occupy people who might otherwise be purchasing CDs.
--Phil (Ithink I'll sue Slashdot for occupying time I would otherwise have spent reading books.)
Yes, but according to the alt.usage.english FAQ, the sense in which the original poster used it is currently the more common usage.
--Phil (Estimations on the number of people jumping off bridges together is left as an exercise for the reader.)
Well, actually, what you call it depends on your mindset.
Big corporate mindset:
--Phil (Not that any of my projects even have enough code to release yet...)
DMZ stands for DeMilitarized Zone. Basically, a decent firewall will have three interfaces--external, internal, and DMZ. The DMZ is where you put your servers and (ideally) anything you want accessible to the Internet at large. This keeps incoming (possibly hostile) traffic away from your internal machines. It also maintains a degree of separation between your Internet-accessible and possibly compromisable machines and the protected computers behind the firewall.
--Phil (The ipchains HOWTO talks a bit about DMZs, too.)
Depending on how advanced your students are, they could write a rudimentary machine code emulator. I remember writing one of these for one of my computer science courses, and it was quite interesting (to me, at least). We were given a list of opcodes and a description of what each was to do. Our program had to assemble them, creating a file with the binary output, and then run the file.
IIRC, it was a simple assembly language. Each opcode was an int long, as were the opcode's parameters (although some parameters were floats). Space was always reserverd for two parameters, whether they were needed or not (this allowed jumps to specify the number of instructions over which to jump--there were no symbolic labels). IIRC, the main opcodes were mathematical ones. There were also load and save for memory addresses, but the addresses were always immediate--no indirect references. There were two registers.
I beleve the opcodes included
- add registers A and B, put result in A
- subtract A - B, result in A
- multiply
- divide (all numbers were floats)
- load from memory address to register (There was a space of about 16 floats for memory. memory locations were for sequential numbers--the intent was to implement memory locations as subscripts on an array of floats.)
- save to memory address from register
- put literal number in register
- jump N instructions if specified register is zero
- end program, final result (to be reported by the interpreting program) in register A
Those are all I remember. There may have been others, but those are enough to write simple mathematical test programs.This may be a bit advanced for a high school class, but it was certainly an interesting project for me. If the students can handle it, I suspect that they will like it, too.
--Phil (The fun thing is that I'm pretty sure that I did this project before I took assembly.)
When I started on my computer science degree, the first project in computer science I was to write a series of functions to do basic mathematical calculations. The catch was that we couldn't use any math operators or external math functions, except for two simple functions, one of which added one to a number, the other of which subtracted one from a number. On those building blocks, we had to implement (IIRC) addition, subtraction, multiplication, integer division, modulo division, greatest common denominator, least common multiple, and integer exponentiation. These had to return correct values for all positive integers.
This would probably be a decent project for high school students. If the class is advanced, the parameters can be expanded. Ensure that the functions work for negative integers, too. (Not too hard, and I remember taking this step with my project just to make it slightly more interesting.) Add other mathematical functions, such as factorials or integer roots (square roots of square numbers, etc.). Add, perhaps as an additional project, the requirement of creating a rudimentary calculator with functions. There's a good bit of room for expansion; it depends on how good the students are.
--Phil (I can't remember most of the other projects I did in those classes--they weren't as interesting, I suppose.)
A quote/tagline that's been floating around for a while:
--Phil (My mouse has three buttons and a wheel and that's still not as many as I'd like for Quake...)
Hmm. What browser are you using? Strictly speaking, that's incorrect behaviour, since these are (according to the HTML spec) SGML character references. An SGML character reference is defined as an ampersand followed by a alphabetic string, optionally terminated by a semicolon. ("Optionally" because any non-alphabetic character implicitly terminates the reference.) Thus, '<I' is a valid SGML character reference. For an HTML rendering agent, however, there is no defined 'ltI' character reference (there are, in fact, no other references beginning with 'lt'), and it is understandable behaviour to assume a semicolon was omitted and try to figure out what the actual reference was. The underlying HTML remains non-W3C-compliant, though.
I'll finish with the W3C's note on semicolons in HTML character references.
--Phil (Some people call me "anal retentive". I prefer to think of myself as "pedantic".)
And, while we're enlightening people, you really need semicolons to mark the ends of your special characters: '<', not '<'. Otherwise, they run into the next word and are usually rendered literally by the browser.
'<I>' becomes '<I>' whereas '<I>' becomes '<I>'.
--Phil (I wish more people understood the HTML they used to post, or at least used 'Prieview'.)