Actually, the ears of the KOffice developers are not deaf, they just *don't exist* in many cases. The fact is that KOffice is incredibly undermanned, and many of the components are simply unmaintained (including KChart and the equation editor, I think). It is amazing they have been able to make an office suite at all with as few people as they have. So if you want a part of KOffice to improve, you'll have to fix it yourself.
The point is that a person experienced in using a library can find just as much or more information than a person experienced with the Internet can, and almost as fast (though I think the times given in the article are a bit optimistic, unless you're The Flash). In most cases the found information will be more accurate and trustworthy. Libraries have many, many excellent resources that most people don't know about. Who's Who is only one example (any library worth anything will have a copy, and experienced library users know this).
The problem with libraries is that the interface to their resources leaves a lot to be desired. If they want to compete with Google, they will have to change. People say "it's a disgrace that our young people aren't learning how to use libraries," but I say that if libraries want to avoid becoming irrelevant, they should do the changing, not the young people.
Multiple reference librarians should be available at all times, in a prominent location with signs explaining that they are available for help. Those librarians should be approachable, helpful, and courteous. The cataloguing system should be clear and laid out on the library floor in a logical, continuous manner, with large signs explaining where different sections are and maps posted at various locations. The computer catalog should be fast and extremely easy to use. No computer card catalog I've ever seen fits this description. For example, when you find a book, the computer should show you a map of the library with its location highlighted. Instead of requiring you to specify that you're searching for books by an author, it should let you type anything, and if you type in an author's name it should ask whether you want books by or about that author. The results of a search should be able to be sorted in different ways such as by date. They layout of search results should be uncluttered, with only relevant information shown. If you search for things that are better found in one of the library's specialized reference books, it should direct you to those. And if libraries are really serious about competing with Google, they should look into licensing Amazon's "search inside the book" technology.
Hehe, c is argc, so it's set to 1 when main is called. In fact c can be any positive integer when the code starts, because if it is less than 31 it's not a problem, and if it's greater than 31 it gets reset to 0 (!r-- always equals 0 unless r is 0). However, if you use main(r,c) instead of main(c,r), the code could fail if the pointer argv is large enough to make it negative when interpreted as a signed int.
I can't take full credit for the code myself. Since I first wrote it several slashdotters have helped me improve it, and its size has been cut almost in half. You might say it's an open-source sig;-) See my journal for details if you want. Really the magic is all in the ~c&r part; it's the part that actually generates the triangle. The rest is just obfuscated, compacted formatting code.
Replying to myself; turns out navigating the site wasn't as hard as I expected; there's enough english to point the way. They posted their flyer in these places, and their text message in these places. They were very organized; their Wiki system of keeping track of where things were posted seems to have worked excellently. The success of this event should be a model for people planning other community events.
Solutions will be found. More powerful modeling tools will create better-looking objects with less effort. More polygon-pushing power will help artists spend more time creating cool stuff and less time optimizing polygon counts. 3D scanning techniques could be used to remove some of the modeling burden. Libraries of prefabricated high-detail 3d objects might become available, licensable for a fee. Don't worry, the game industry isn't headed for any sort of catastrophic collapse due to too much processing power. With more power comes the need for more detail, but it becomes easier to achieve that detail. And if it ever becomes too expensive to make games, they will simply make less expensive games. There's no problem inherent in that.
What debugger allows you to step backwards? Point me to it! I can't count the number of times I've wished I could step backwards a few loop iterations instead of running the whole program through again.
What do you mean it's not really a practicality? From where I'm standing, one of the major problems with installing and using Linux today is getting the bootloader set up correctly. Red Hat may set up its bootloader fine in the case of a dual-boot with windows, but what if there is another distro installed you would also like to boot? Red Hat will overwrite your old bootloader, and it's back to editing bootloader files, where one error could make your system unbootable. What if you want to install a new kernel? You'll likely need to edit your bootloader files. Given how easy it would be to include some simple heuristics in the bootloader to detect installed kernels, and how much pain it causes when a system is unbootable because of a misconfigured bootloader, I should think it's a no-brainer to add autoconfiguring support in. There's no reason a bootloader should need any setup at all for most cases. Even for power users, there's no point in making things harder than they have to be. GRUB already has filesystem-reading capabilities and a command prompt with tab-completion. The amount of code autodetection would take is small compared to all that.
You may think that it should be the job of the distro to manage the bootloader configuration, but I think that's the wrong place to put the burden. That way, the quality of your distro determines the quality of your bootloader management; I don't want a bad package to be able to make my entire system unbootable. Plus, having multiple OSes all trying to cooperate in managing the same bootloader is just asking for trouble. So many problems are solved quite simply if the bootloader just doesn't need any configuration to do its job. It's easier, it's more elegant; I can't see any disadvantages.
Multiple kernels versions would all be put in the menu./boot on a different partition wouldn't be that hard either. Linux kernels are pretty easy to detect, so it could realize that one partition was full of them in its root. It's also pretty easy to detect root filesystems (presence of/etc,/usr, etc). The bootloader could give you a choice of kernels with a choice of root filesystems. If it turns out one of the combinations doesn't work, then oh well, boo hoo, that option doesn't work when the user tries it. Who cares? It doesn't have to be perfect, it just needs to give at least one working option so the computer isn't unbootable.
Of course it can't work in every convoluted case, so in some cases you would still need to configure it (and of course you would be able to override the detection if you are a bootloader guru who loves partitioning his hard drive into tiny useless chunks). But at least it would work without configuration in the vast majority of cases, instead of requiring precise configuration in _every_ case. If it worked in almost all cases, don't you agree that would be a big improvement?
Well then there's two possibilities. Is it so hard to tell the difference between Windows and OS/2? All that's needed is a simple heuristic to tell the difference. Sure, it might not work for the next version of windows when it comes out, but at least it would work in the vast majority of cases. In fact, even if it failed for OS/2, it would still work in the vast majority of cases:-). If OS/2 was installed and you didn't know how to configure your bootloader, it would just fail to work. Which is exactly what happens now when you don't know how to configure your bootloader, except that it fails in _all cases_ instead of just on OS/2. So it would still be a huge improvement. Just because it can't work perfectly doesn't mean it shouldn't be done.
The bootloader doesn't do it. The installer does it. If you change anything afterwards, you're screwed. Plus, Debian's installer hasn't done it until now.
Why oh why hasn't someone come out with a bootloader that detects what OSes are installed _itself_? It can't be that hard. I mean, if there's an NTFS partition, it's not that hard to guess what OS is installed there and how to boot it. For Linux, it's a little more complex. But since GRUB can read Linux filesystems, it could at least look in the/boot directory for promising kernel-type files and put them in the menu for you. I don't know about other OSes, but even if the autoconfiguration only worked for Windows and Linux, it would be a huge step up bootloaders. Think how many newbies would be saved from making their computer unbootable (the scariest thing that can happen to a would-be Linux convert)!
machine, n. Sense 4: An intricate natural system or organism, such as the human body. (Dictionary.com)
When I say "interest in 'nanobots'" I mean the common vision shared by many technologists of tiny machines concieved and built entirely by humans, operating mainly by familiar mechanical principles, completely differently from the way biological systems work. I'm sure you grasped my meaning quite precisely the first time you read my post. Do you have any objections to the content of my post, or just its presentation? Making pedantic philosophical arguments about word meanings is missing the point and a waste of time.
I like the idea of being able to transmute a set of molecular chains into another
...which is _exactly_ what bacteria already do! Jillions of times per second in your body right now! Not to mention your body's own cells. We don't need to design "nanobots" to do these things when nature has done most of the designing for us.
You underestimate evolution. It may not have a specific plan, but it has experimented a lot more than we can since it's been doing its thing for billions of years. It's tried more combinations than we ever will. Sure, human ingenuity will eventually be able to create specialized tools to do things that we want done better than nature does them. But using nature's predefined library of parts instead of making everything from scratch is the way to go.
My point is, we're so far behind nature that at this point, our best bet is to copy biology and learn from it. Later, when we've mastered our own biology, maybe we'll know enough to start designing nano-systems of our own.
The fact is, though, that right now nanotech is all wild hype based on speculation. Nobody knows how to build self-replicating nanomachines, and if you don't let yourself be blinded by all the overly optimistic speculation out there (like this article, which is mostly a geek's wet dream about the possibilities of nanotechnology, glossing over the major hurdles that must be solved first and may not be solvable at all!), you'll realize that we're nowhere close to constructing them (as in, not in the next 50 years at least).
We're going to re-define what biology is. Maybe even invent non-carbon biologies.
Sure, eventually. But that's waaay off in the future. I don't expect to be alive to see it.
Wow, they did a really good job in the first game making Max look like this guy. If I saw Sam Lake walking down the street I'd sure do a double take. Especially if he was wearing a long black coat and scowling.
Sorry to disappoint, but Samir Gupta is a troll from way back. Check his post history. He has claimed, at various times, to be high up in both Nintendo and Sega. He claims to have a PhD to give an air of credibility to his posts. If you want to look at some real cutting edge research into interactive stories, check out InteractiveStory.net. The website isn't that impressive but seeing it in action is amazing. I hope they remember to release it as a free download like they claim they will.
You nano-enthusiasts crack me up. You think you don't already have whole armies fighting for survival in your skin and tissues? Bacteria, man! Bacteria are nature's nanomachines. They already exist, and they already fight wars in and with your body, which already has the means to fight nano-invaders. Nanomachines are NOT NEW! Why do people think we're suddenly going to be able to build nanomachines to do amazing feats that bacteria can't do after billions of years of evolution? We have so much more learning to do before we can even begin to approach building nanomachines as advanced as the simplest microorganism.
Personally, I think interest in "nanobots" is misguided. We have a template for working nanomachines that is time-tested and proven: DNA for central program storage and replication, RNA for messaging, and protiens for catalyzing reactions, molecular manufacturing, and general utility functions. Nano-research should focus on biology, so we can better understand the principles involved and then design new biological systems to do what we want.
It's a Google spamming technique, exactly like spamming your meta tags full of keywords. Google places higher relevance on keywords in a document's URL, so it's suddenly become extremely popular to give descriptive names to documents. This might not be such a bad thing, but it can certainly be overdone.
GC doesn't preclude those constructs. It makes them unnecessary for memory management, and as a result they might be overlooked by bad language designers, but they are not precluded by any means. Did you mean to use a different word?
So we should ignore GC because it doesn't solve all the world's resource problems at once? Your post doesn't provide a convincing argument against the use of GC. Non-portability is a non-issue; only language writers have to worry about that, and it's already their job. The cache-thrashing issue is the only real problem you mention. Generational GC significantly reduces this problem, to the point where the small runtime performance hit (if there is one at all; malloc and free take time too you know) is balanced out by increased programmer productivity (giving more time to optimize if you so desire, or add features if that's what you value more).
Side note: Boost Lambda and FC++ are impressive but ugly hacks with horrible syntax, lots of "gotchas" that make code not work (often related to operator precedence and order of evaluation), and compiler errors from hell. Probably not the best examples of the power of C++. (OTOH, maybe that makes them the perfect examples of the "power" of C++;-)
I think the main(c,r) trick may be an artifact of support for old-style C argument lists, i.e.:
foo(x,y) char x; int** y; {
}
I found a copy of the ISO C99 spec. It seems that when functions are declared this way, they are different from normally declared functions. The compiler promotes all of the arguments to these functions to int size (or double size in the case of floats), and isn't required to check that the types of the arguments match, or even that the number of arguments matches. If they don't, the behavior is undefined (much in the same way that printf and other varargs functions work; ever wondered how printf can tell the difference between a float and double argument, when they use the same formatting code? I have, and now I know: all float arguments to varargs functions are promoted to doubles by the compiler, so they're the same size).
Now, the C99 spec requires that all variables used in a function declaration must have their types defined before the code block starts, but I can only assume that previous versions of C didn't require this and defaulted to int (which is what GCC does).
So the answer to the question of whether this is legal is: It's not exactly legal in C99, but it used to be legal. It's kinda fun: you can declare a function like this and then give it a hundred arguments of different types, and GCC won't complain. Just goes to show you how complex computer languages are, and how many nooks and crannies show up when you start testing their limits. I wouldn't want to be a GCC developer!
About the running time issue: it took a long time (like 20 seconds) for anything at all to be printed, because many bell characters are printed before the first #. I first assumed it had failed to work at all and killed it. I think I may stick with the 73-character version at this point, since it is guaranteed to work on all systems and doesn't print hundreds of bells. It was a clever idea, and if Windows stuck to the ASCII standard instead of printing stupid smiley faces and playing-card symbols, it would have worked beautifully.
About non-centered triangles: the centered ones are so much cooler. The only reason I suggested the diamond version was because it worked as intended on Linux.
I'll probably change my sig to the 73-char version:
Hmm, I'm having trouble making your improvements work in a cross-platform way. The smiley-face thing only works on Windows, because windows assigns random graphical characters to ASCII 1-31 (except for 7). Also, the program takes forever to run, pausing after each bell (this may be because I'm running it over remote desktop, though I don't know why that would cause it), and I imagine it beeps a lot too. I don't like printing out hundreds of bell characters; that could be really annoying, especially if your terminal puts them in a queue and plays them all sequentially like some do. On Linux, unlike windows, characters 0-6 don't print, so we can use them instead of bell, but the 68-character version won't work because it relies on character 1 being a smiley face.
So the 68-character version is out. The 71-character version works on Windows only when bell is used, but this could be annoying and slow. The best I've been able to do so far is use ASCII 4 (EOT) as the non-printing character. That way it won't beep on Linux and it won't beep or go slowly on Windows (though it will print out lots of diamonds).
I like this version even more because slashcode doesn't mangle it and it doesn't even need any HTML escaping (no <s). If only it worked as intended on Windows!
P.S. Using GCC 3 you can remove the 4 and the ?: will return the value of the conditional expression if it is true (1, which works on Linux as a non-printing character). This only seems to work on GCC though, and it may be specific to GCC 3.
Nice! Man, last time I looked at optimizing this thing, I thought for sure all the excess characters had been squeezed out. I can't believe I overlooked moving the ++ and using !c instead of c<0.
I have thought before about removing the top # but I think it would really degrade the elegance of the hack. However, I think I see a way to take advantage of argc without sacrificing the all-important top #. How about this, weighing in at 73 characters (a savings of 9 over my previous version):
But both GCC and VS.NET barf all over that version, complaining about c not being a valid lvalue. This makes me think that maybe the first version isn't really valid C either, but it compiles, so who cares?;-)
Do you mind if I incorporate your improvements into the version in my sig? It's a constantly evolving sig (one might even say it was "open-source";-). I'm really interested to see how small the contributions from all the coders on Slashdot can make this thing.
Actually, the ears of the KOffice developers are not deaf, they just *don't exist* in many cases. The fact is that KOffice is incredibly undermanned, and many of the components are simply unmaintained (including KChart and the equation editor, I think). It is amazing they have been able to make an office suite at all with as few people as they have. So if you want a part of KOffice to improve, you'll have to fix it yourself.
The problem with libraries is that the interface to their resources leaves a lot to be desired. If they want to compete with Google, they will have to change. People say "it's a disgrace that our young people aren't learning how to use libraries," but I say that if libraries want to avoid becoming irrelevant, they should do the changing, not the young people.
Multiple reference librarians should be available at all times, in a prominent location with signs explaining that they are available for help. Those librarians should be approachable, helpful, and courteous. The cataloguing system should be clear and laid out on the library floor in a logical, continuous manner, with large signs explaining where different sections are and maps posted at various locations. The computer catalog should be fast and extremely easy to use. No computer card catalog I've ever seen fits this description. For example, when you find a book, the computer should show you a map of the library with its location highlighted. Instead of requiring you to specify that you're searching for books by an author, it should let you type anything, and if you type in an author's name it should ask whether you want books by or about that author. The results of a search should be able to be sorted in different ways such as by date. They layout of search results should be uncluttered, with only relevant information shown. If you search for things that are better found in one of the library's specialized reference books, it should direct you to those. And if libraries are really serious about competing with Google, they should look into licensing Amazon's "search inside the book" technology.
I can't take full credit for the code myself. Since I first wrote it several slashdotters have helped me improve it, and its size has been cut almost in half. You might say it's an open-source sig ;-) See my journal for details if you want. Really the magic is all in the ~c&r part; it's the part that actually generates the triangle. The rest is just obfuscated, compacted formatting code.
Replying to myself; turns out navigating the site wasn't as hard as I expected; there's enough english to point the way. They posted their flyer in these places, and their text message in these places. They were very organized; their Wiki system of keeping track of where things were posted seems to have worked excellently. The success of this event should be a model for people planning other community events.
What exactly did this extremely effective guerilla marketing campaign consist of?
Solutions will be found. More powerful modeling tools will create better-looking objects with less effort. More polygon-pushing power will help artists spend more time creating cool stuff and less time optimizing polygon counts. 3D scanning techniques could be used to remove some of the modeling burden. Libraries of prefabricated high-detail 3d objects might become available, licensable for a fee. Don't worry, the game industry isn't headed for any sort of catastrophic collapse due to too much processing power. With more power comes the need for more detail, but it becomes easier to achieve that detail. And if it ever becomes too expensive to make games, they will simply make less expensive games. There's no problem inherent in that.
What debugger allows you to step backwards? Point me to it! I can't count the number of times I've wished I could step backwards a few loop iterations instead of running the whole program through again.
You may think that it should be the job of the distro to manage the bootloader configuration, but I think that's the wrong place to put the burden. That way, the quality of your distro determines the quality of your bootloader management; I don't want a bad package to be able to make my entire system unbootable. Plus, having multiple OSes all trying to cooperate in managing the same bootloader is just asking for trouble. So many problems are solved quite simply if the bootloader just doesn't need any configuration to do its job. It's easier, it's more elegant; I can't see any disadvantages.
Of course it can't work in every convoluted case, so in some cases you would still need to configure it (and of course you would be able to override the detection if you are a bootloader guru who loves partitioning his hard drive into tiny useless chunks). But at least it would work without configuration in the vast majority of cases, instead of requiring precise configuration in _every_ case. If it worked in almost all cases, don't you agree that would be a big improvement?
Well then there's two possibilities. Is it so hard to tell the difference between Windows and OS/2? All that's needed is a simple heuristic to tell the difference. Sure, it might not work for the next version of windows when it comes out, but at least it would work in the vast majority of cases. In fact, even if it failed for OS/2, it would still work in the vast majority of cases :-). If OS/2 was installed and you didn't know how to configure your bootloader, it would just fail to work. Which is exactly what happens now when you don't know how to configure your bootloader, except that it fails in _all cases_ instead of just on OS/2. So it would still be a huge improvement. Just because it can't work perfectly doesn't mean it shouldn't be done.
The bootloader doesn't do it. The installer does it. If you change anything afterwards, you're screwed. Plus, Debian's installer hasn't done it until now.
Why oh why hasn't someone come out with a bootloader that detects what OSes are installed _itself_? It can't be that hard. I mean, if there's an NTFS partition, it's not that hard to guess what OS is installed there and how to boot it. For Linux, it's a little more complex. But since GRUB can read Linux filesystems, it could at least look in the /boot directory for promising kernel-type files and put them in the menu for you. I don't know about other OSes, but even if the autoconfiguration only worked for Windows and Linux, it would be a huge step up bootloaders. Think how many newbies would be saved from making their computer unbootable (the scariest thing that can happen to a would-be Linux convert)!
When I say "interest in 'nanobots'" I mean the common vision shared by many technologists of tiny machines concieved and built entirely by humans, operating mainly by familiar mechanical principles, completely differently from the way biological systems work. I'm sure you grasped my meaning quite precisely the first time you read my post. Do you have any objections to the content of my post, or just its presentation? Making pedantic philosophical arguments about word meanings is missing the point and a waste of time.
You underestimate evolution. It may not have a specific plan, but it has experimented a lot more than we can since it's been doing its thing for billions of years. It's tried more combinations than we ever will. Sure, human ingenuity will eventually be able to create specialized tools to do things that we want done better than nature does them. But using nature's predefined library of parts instead of making everything from scratch is the way to go.
My point is, we're so far behind nature that at this point, our best bet is to copy biology and learn from it. Later, when we've mastered our own biology, maybe we'll know enough to start designing nano-systems of our own.
The fact is, though, that right now nanotech is all wild hype based on speculation. Nobody knows how to build self-replicating nanomachines, and if you don't let yourself be blinded by all the overly optimistic speculation out there (like this article, which is mostly a geek's wet dream about the possibilities of nanotechnology, glossing over the major hurdles that must be solved first and may not be solvable at all!), you'll realize that we're nowhere close to constructing them (as in, not in the next 50 years at least).
We're going to re-define what biology is. Maybe even invent non-carbon biologies.
Sure, eventually. But that's waaay off in the future. I don't expect to be alive to see it.
Wow, they did a really good job in the first game making Max look like this guy. If I saw Sam Lake walking down the street I'd sure do a double take. Especially if he was wearing a long black coat and scowling.
Sorry to disappoint, but Samir Gupta is a troll from way back. Check his post history. He has claimed, at various times, to be high up in both Nintendo and Sega. He claims to have a PhD to give an air of credibility to his posts. If you want to look at some real cutting edge research into interactive stories, check out InteractiveStory.net. The website isn't that impressive but seeing it in action is amazing. I hope they remember to release it as a free download like they claim they will.
Personally, I think interest in "nanobots" is misguided. We have a template for working nanomachines that is time-tested and proven: DNA for central program storage and replication, RNA for messaging, and protiens for catalyzing reactions, molecular manufacturing, and general utility functions. Nano-research should focus on biology, so we can better understand the principles involved and then design new biological systems to do what we want.
It's a Google spamming technique, exactly like spamming your meta tags full of keywords. Google places higher relevance on keywords in a document's URL, so it's suddenly become extremely popular to give descriptive names to documents. This might not be such a bad thing, but it can certainly be overdone.
GC doesn't preclude those constructs. It makes them unnecessary for memory management, and as a result they might be overlooked by bad language designers, but they are not precluded by any means. Did you mean to use a different word?
Side note: Boost Lambda and FC++ are impressive but ugly hacks with horrible syntax, lots of "gotchas" that make code not work (often related to operator precedence and order of evaluation), and compiler errors from hell. Probably not the best examples of the power of C++. (OTOH, maybe that makes them the perfect examples of the "power" of C++ ;-)
RPN interface for TI-89/92
Now, the C99 spec requires that all variables used in a function declaration must have their types defined before the code block starts, but I can only assume that previous versions of C didn't require this and defaulted to int (which is what GCC does).
So the answer to the question of whether this is legal is: It's not exactly legal in C99, but it used to be legal. It's kinda fun: you can declare a function like this and then give it a hundred arguments of different types, and GCC won't complain. Just goes to show you how complex computer languages are, and how many nooks and crannies show up when you start testing their limits. I wouldn't want to be a GCC developer!
About the running time issue: it took a long time (like 20 seconds) for anything at all to be printed, because many bell characters are printed before the first #. I first assumed it had failed to work at all and killed it. I think I may stick with the 73-character version at this point, since it is guaranteed to work on all systems and doesn't print hundreds of bells. It was a clever idea, and if Windows stuck to the ASCII standard instead of printing stupid smiley faces and playing-card symbols, it would have worked beautifully.
About non-centered triangles: the centered ones are so much cooler. The only reason I suggested the diamond version was because it worked as intended on Linux.
I'll probably change my sig to the 73-char version:
main(c,r) {for(r=32;r;)printf(++c>31?c=!r--,"\n":c<r?" ":~c&r?" `":" #");}
Although, it's small enough now to encase it in a shell script and still fit it into the sig box:
echo 'main(c,r) {for(r=32;r;)printf(++c>31?c=!r--,"\n":c<r?" ":~c&r?" `":" #");}'>s.c;gcc s.c;./a.out
Argh! That one encounters the lameness filter if you put it in your sig box. Oh well. The 73-char one works.
So the 68-character version is out. The 71-character version works on Windows only when bell is used, but this could be annoying and slow. The best I've been able to do so far is use ASCII 4 (EOT) as the non-printing character. That way it won't beep on Linux and it won't beep or go slowly on Windows (though it will print out lots of diamonds).
main(c,r){for(r=32;r;)printf(" %c",++c>31?c=!r--,10:r>c?4:~c&r?96:35);}
I like this version even more because slashcode doesn't mangle it and it doesn't even need any HTML escaping (no <s). If only it worked as intended on Windows!
P.S. Using GCC 3 you can remove the 4 and the ?: will return the value of the conditional expression if it is true (1, which works on Linux as a non-printing character). This only seems to work on GCC though, and it may be specific to GCC 3.
I have thought before about removing the top # but I think it would really degrade the elegance of the hack. However, I think I see a way to take advantage of argc without sacrificing the all-important top #. How about this, weighing in at 73 characters (a savings of 9 over my previous version):
main(c,r){for(r=32;r;) printf(++c>31?c=!r--,"\n":c<r?" ":~c&r?" `":" #");}
Now, if that works, I would expect the following to work (and not require any extra spaces to get past slashcode):
main(c,r){for(r=32;r;)printf(++c<32?c<r?" ":~c&r?" `":" #":c=!r--,"\n");}
But both GCC and VS.NET barf all over that version, complaining about c not being a valid lvalue. This makes me think that maybe the first version isn't really valid C either, but it compiles, so who cares? ;-)
Do you mind if I incorporate your improvements into the version in my sig? It's a constantly evolving sig (one might even say it was "open-source" ;-). I'm really interested to see how small the contributions from all the coders on Slashdot can make this thing.
Two out of three ain't bad. (Open-source, MMORPG) Doesn't use this Torque thing, but it looks impressive.