it comes with the territory since X never came with a standard widget set.
Not true: X came with a standard widget framework, X Toolkit Intrinsics (Xt) on top of which the first two X widget sets were built (Athena and Motif.)
GTK and KDE both chose to ignore the existence of Xt.
One of the (several) unfortunate side-effects of this decision is that it's not possible to mix and match (for example) Motif and GTK widgets in the same application (or GTK and KDE widgets, for that matter.) Whereas, it was possible to mix Athena and Motif widgets together.
I did a lot of work on the GNUS threading algorithm in 1991 or so, and so the Netscape 2.x/3.x threading algorithm (1995) is a descendant of that. You can read about it here. This threading algorithm is used in a number of other programs now (at least: Evolution, Balsa, and a server-side IMAP extension.)
The threading algorithm in Netscape 4.x was rewritten by others, and was completely screwed up.
I don't know what it's like in Mozilla these days. I hope they fixed it.
What's the threading like in MacOSX Mail.app? Actually, it would be interesting to see a compare-and-contrast survey of the quirks of the threading algorithms in various programs...
One of the fun tricks you can do is use the bottom 2 bits for tagged data type, and then reserve two of those for immediate integers: one for even ints, and one for odd. That way, you get 3 tag types, with 30 bits of pointer, but you still get 31 bit integers instead instead of 30 bit. So the tags might look like:
00: odd int
01: even int
10: pointer to object header
11: pointer to array/string header
Then you convert raw data to an int with >>1, and to a pointer with &~3 (you only need 30 bits of pointer if all objects are word-aligned in a 32 bit address space.)
Lucid Common Lisp used this kind of system, and Lucid Emacs/XEmacs do something similar.
Well what can I say in response to your unsubstantiated claim, other than "you don't know what you're talking about."
GTK exists because Motif was not widely available to the potential users of GIMP. GIMP had originally been written using Motif, and then GTK was written to replace Motif so that GIMP would not have a dependency on non-free software.
And also because (by their own admission) the GIMP authors didn't know Motif that well, and thought it would be easier to just write their own toolkit that only did the few things they needed: GTK was never intended to be general-purpose.
Fast forward a few years, and GTK has bloated out to do all the things that Motif did, from i18n on down.
Gigantic waste of effort. Colossal.
You can read their own summary of the history on gimp.org.
Imagine if X had been shipped with Motif as its native toolkit? Who the hell would use that in 2003?
Absolutely everybody, that's who.
The only reason that GTK and Qt exist is that Motif was expensive, and therefore not widely available on free Unixen. Lesstif was not usable until several years too late.
It remains one of the classic, tragic, colossal wastes of time that so many people put so much work into building GTK and Qt from scratch, instead of sinking that same amount of effort into fixing Lesstif. We would be years farther ahead of the game if they hadn't felt the need to play the "Not Invented Here" game.
As someone who's done a lot of work with both, I can tell you that the differences between the Motif and GTK APIs are really pretty trivial.
Has anyone found a before/after map of what happened to the shelf? That "90% of the shelf is gone" doesn't mean much without a sense of how big it was to begin with...
Nice how Slashdot lets you type a long subject then silently truncates it. That was supposed to read:
Unicode & Perl go together like apples & razors.
Unicode & Perl go together like apples & r
on
Can You Raed Tihs?
·
· Score: 1
A few people had trouble with my script, and it turns out to be some kind of stupid Unicode lossage: it only seems to malfunction if $LANG has "utf8" in it, which is the default on recent Red Hat systems. That screws up the interpretation of "^\w" among other things. Check this out:
Re:I downloaded the script - the copyright is no g
on
Can You Raed Tihs?
·
· Score: 2, Interesting
You know, I'm not so sure about that -- is a license rendered invalid just because contains spelling errors? I strongly suspect not.
(Anyway, the copyright is enforcable because everything is copyrighted by default, even if it has no notice at all. The interesting question is whether the license I put on that thing actually grants you any rights. I think it probably does.)
Re:bah! real men only need 1 line
on
Can You Raed Tihs?
·
· Score: 3, Insightful
Uh huh, and you probably post to Slashdot by tapping on the ethernet jack with battery and a paper clip, right?
People who actually know how to program realize that while line noise one-liners are sometimes a cute party trick, it's a worthless way to program.
The more your Perl looks like static, the less well you have written it.
Just a sidenote, but POP itself isn't insecure auth-wise, and neither is telnet. POP3 supports APOP, which uses CRAM-MD5 to encode the password, and is rather secure.
APOP is pretty worthless: it is trading one problem for an even worse one.
The USER/PASS approach means sending all passwords in the clear, so you're subject to evesdropping/replay attacks. (That's, obviously, not so good.) But the server never holds on to your plaintext password; it just encrypts it and compares the result to ciphertext.
The APOP approach is immune to evesdropping/replay on the password itself, but it requires that the server have access to the clear-text password of every user of the server. So if you hack the server, you've got the passwords of every user of the system, rather than every user who happened to connect while you were snooping; and thus you've made the server be a much more attractive target than it was before.
With USER/PASS, at least the passwords can be stored encrypted on the server side (as in/etc/shadow).
On top of all that, even when using APOP with POP, the password is protected in transit, but the mail is not! So, yeah, the attacker can't get your password: they can only get all of the mail you ever download instead. Wasn't it the mail you were trying to protect in the first place?
I think APOP adds 0.1% security to one end, while borrowing 99.9% of the security from the other end. Encrypt the pipe.
Richard never provides a comforting answer to all the good-hearted programmers thinking [...] "Now that I've done this nice generous thing, how do I live nicely and not like a pauper?"
That's easy -- you should just live in your office at MIT like Richard did for thirteen years.
With analog there is continual loss (more if the tapes are actually played).
Actually, VHS tapes last longer if they are played regularly than if they are not played. If they aren't played, the tape tends to adhere and you get really bad color bleed. This happens more slowly if the tapes are actually used.
Hey, don't you dare blame me for this shit -- I've opposed both of the from-scratch rewrites that happened (Netscape's 4.0 and Mozilla's 1.0.) And the abortive Grendel/Javagator thing got cancelled due to Gessner's group's incompetence; my project was ready.
I never write scripts in csh (I use perl or sh) but I still use csh as my interactive shell, because (aside from trivially launching programs) the most common thing I use any of the actual syntax of the shell for is pounding out stuff like:
foreach f ( *.jpg ) djpeg $f | pnmscale... | cjpeg > $f:r-thumb.jpg end
sh/bash don't support the $var:r and related syntaxes, and so it's a lot more typing to do:
for f in *.jpg ; do djpeg $f | pnmscale... | cjpeg > \ `echo $f | sed 's/\..*/-thumb.jpg/'` end
What kind of a sad world has it become when easter eggs get announced before they've even made it into a beta? The whole point of these things used to be the treasure hunt. Do you read the walk-through before you even start playing a new game?
Not true: X came with a standard widget framework, X Toolkit Intrinsics (Xt) on top of which the first two X widget sets were built (Athena and Motif.)
GTK and KDE both chose to ignore the existence of Xt.
One of the (several) unfortunate side-effects of this decision is that it's not possible to mix and match (for example) Motif and GTK widgets in the same application (or GTK and KDE widgets, for that matter.) Whereas, it was possible to mix Athena and Motif widgets together.
I did a lot of work on the GNUS threading algorithm in 1991 or so, and so the Netscape 2.x/3.x threading algorithm (1995) is a descendant of that. You can read about it here. This threading algorithm is used in a number of other programs now (at least: Evolution, Balsa, and a server-side IMAP extension.)
The threading algorithm in Netscape 4.x was rewritten by others, and was completely screwed up.
I don't know what it's like in Mozilla these days. I hope they fixed it.
What's the threading like in MacOSX Mail.app? Actually, it would be interesting to see a compare-and-contrast survey of the quirks of the threading algorithms in various programs...
One of the fun tricks you can do is use the bottom 2 bits for tagged data type, and then reserve two of those for immediate integers: one for even ints, and one for odd. That way, you get 3 tag types, with 30 bits of pointer, but you still get 31 bit integers instead instead of 30 bit. So the tags might look like:
01: even int
10: pointer to object header
11: pointer to array/string header
Then you convert raw data to an int with >>1, and to a pointer with &~3 (you only need 30 bits of pointer if all objects are word-aligned in a 32 bit address space.)
Lucid Common Lisp used this kind of system, and Lucid Emacs/XEmacs do something similar.
It's called "ADD ONE TO COBOL GIVING COBOL."
(Yes, this joke is at least 15 years old...)
Hmm, I always assumed that happened because some customer had set it to lock as a prank, and the staff couldn't be bothered to fix it...
Does the fact that they are finally open-sourcing the client mean that there will eventually be a Seti@Home xscreensaver module that actually works?
Well what can I say in response to your unsubstantiated claim, other than "you don't know what you're talking about."
GTK exists because Motif was not widely available to the potential users of GIMP. GIMP had originally been written using Motif, and then GTK was written to replace Motif so that GIMP would not have a dependency on non-free software.
And also because (by their own admission) the GIMP authors didn't know Motif that well, and thought it would be easier to just write their own toolkit that only did the few things they needed: GTK was never intended to be general-purpose.
Fast forward a few years, and GTK has bloated out to do all the things that Motif did, from i18n on down.
Gigantic waste of effort. Colossal.
You can read their own summary of the history on gimp.org.
"object oriented methodology" was well understood in 1982, sparky.
Absolutely everybody, that's who.
The only reason that GTK and Qt exist is that Motif was expensive, and therefore not widely available on free Unixen. Lesstif was not usable until several years too late.
It remains one of the classic, tragic, colossal wastes of time that so many people put so much work into building GTK and Qt from scratch, instead of sinking that same amount of effort into fixing Lesstif. We would be years farther ahead of the game if they hadn't felt the need to play the "Not Invented Here" game.
As someone who's done a lot of work with both, I can tell you that the differences between the Motif and GTK APIs are really pretty trivial.
Has anyone found a before/after map of what happened to the shelf? That "90% of the shelf is gone" doesn't mean much without a sense of how big it was to begin with...
A few people had trouble with my script, and it turns out to be some kind of stupid Unicode lossage: it only seems to malfunction if $LANG has "utf8" in it, which is the default on recent Red Hat systems. That screws up the interpretation of "^\w" among other things. Check this out:
echo -n "foo.bar" | \
perl -e '$_ = <>; print join (" | ", split (/([^\w]+)/)) . "\n";'
=> "foo | . | bar" (right)
setenv LANG en_US.utf8
echo -n "foo.bar" | \
perl -e '$_ = <>; print join (" | ", split (/([^\w]+)/)) . "\n";'
=> "foo.bar" (wrong!)
perl-5.8.0-88, Red Hat 9. WTF?
You know, I'm not so sure about that -- is a license rendered invalid just because contains spelling errors? I strongly suspect not.
(Anyway, the copyright is enforcable because everything is copyrighted by default, even if it has no notice at all. The interesting question is whether the license I put on that thing actually grants you any rights. I think it probably does.)
Uh huh, and you probably post to Slashdot by tapping on the ethernet jack with battery and a paper clip, right?
People who actually know how to program realize that while line noise one-liners are sometimes a cute party trick, it's a worthless way to program.
The more your Perl looks like static, the less well you have written it.
APOP is pretty worthless: it is trading one problem for an even worse one.
The USER/PASS approach means sending all passwords in the clear, so you're subject to evesdropping/replay attacks. (That's, obviously, not so good.) But the server never holds on to your plaintext password; it just encrypts it and compares the result to ciphertext.
The APOP approach is immune to evesdropping/replay on the password itself, but it requires that the server have access to the clear-text password of every user of the server. So if you hack the server, you've got the passwords of every user of the system, rather than every user who happened to connect while you were snooping; and thus you've made the server be a much more attractive target than it was before.
With USER/PASS, at least the passwords can be stored encrypted on the server side (as in /etc/shadow).
On top of all that, even when using APOP with POP, the password is protected in transit, but the mail is not! So, yeah, the attacker can't get your password: they can only get all of the mail you ever download instead. Wasn't it the mail you were trying to protect in the first place?
I think APOP adds 0.1% security to one end, while borrowing 99.9% of the security from the other end. Encrypt the pipe.
That's easy -- you should just live in your office at MIT like Richard did for thirteen years.
Oh wait, I guess that doesn't scale, does it.
Actually, VHS tapes last longer if they are played regularly than if they are not played. If they aren't played, the tape tends to adhere and you get really bad color bleed. This happens more slowly if the tapes are actually used.
Hey, don't you dare blame me for this shit -- I've opposed both of the from-scratch rewrites that happened (Netscape's 4.0 and Mozilla's 1.0.) And the abortive Grendel/Javagator thing got cancelled due to Gessner's group's incompetence; my project was ready.
I still read my mail with Netscape 3.02.
Currently the top two articles on "Ask Slashdot" are:
That's funny, that is.
I never write scripts in csh (I use perl or sh) but I still use csh as my interactive shell, because (aside from trivially launching programs) the most common thing I use any of the actual syntax of the shell for is pounding out stuff like:
djpeg $f | pnmscale
end
sh/bash don't support the $var:r and related syntaxes, and so it's a lot more typing to do:
djpeg $f | pnmscale
`echo $f | sed 's/\..*/-thumb.jpg/'`
end
For the record, I don't care what you think either.
But I didn't send in that link, someone forged the submission. I guess that was "comedy" of some form.
It wasn't me, someone forged that submission. I guess that was "comedy" of some form.
What kind of a sad world has it become when easter eggs get announced before they've even made it into a beta? The whole point of these things used to be the treasure hunt. Do you read the walk-through before you even start playing a new game?
In what way does this statement differ from "I have a job?", besides using large obfuscatory words?