Apparently Mozilla developers use Vi. On the feature description for TypeAheadFind, it says: Type / before your string to search all text.
Wonder if it supports ? for backwards searching, i for case insensitive...;-) This is good, 'cuz I've found myself hitting / occasionally to do a search in Mozilla.
Then someone other than AMD and Intel will sell chips without DRM. There is obviously a market for it, and market forces are more powerful than legal ones in the long run.
Geeks no longer own desktop computing. We still own our own segment, but now that computers are mainstream, a mainstream OS has surfaced and will do this sort of thing. That doesn't mean, however, that our hobby will disappear. We'll just fade back into oblivion again.
State machines are provably better than using threads, but they're also much harder to implement. Basically, a state machine is implementing your own threading model. Since you know when is a good time to release your timeslice, you will produce a better application.
In Windows you can do a very nice completely asynchronous state-machine IP server, using IO completion ports. I believe this is how IIS is implemented. For extremely heavy loads (many thousands of connections) this is the only way to go. Microsoft added a few syscalls to Win2k just to support this sort of thing: a sendfile() command which is obviously targeted at webservers, and the ability to reuse sockets to avoid the overhead of creating and destroying them.
Are each of the processes for a virtual host spawned on startup, and remain around even if no requests have come in? I imagine there's an option to only spawn the processes as needed, and terminate them if they are inactive for a certain period.
At any rate, 1000 processes isn't that much for a modern server. Furthermore, that's the *most* you'll ever have, even if you have 10,000 simultaneous requests. However, threads in Linux are just processes anyway, so you'll see 10,000 entries in ps. But you'll know there's a difference...
I think the main process simply passes the socket descriptor for the new connection to the virtual host process. Passing descriptors isn't terribly efficient, but it only happens on connection, and certainly more efficient than piping data the way you describe. I'm pretty sure the Apache 2.0 design is efficient and scalable.
Ken's back door program is most definitely the most interesting hack ever devised, IMO. Read about it here.
At the bottom, ESR claims that he "has heard two separate reports that suggest that the crocked login did make it out of Bell Labs, notably to BBN, and that it enabled at least one late-night login across the network by someone using the login name `kt'."
Just to add to Bruce's points above: from what I heard, the biggest problem wasn't technical, but rather ESR's refusal to negotiate. The userbase of the kernel config system is the kernel developers; they had several tried-and-true ways of configuring kernels. Many of them were in fact quite happy with the existing system, and didn't see a need to upgrade at all; there was a general consensus that there were some shortcomings in the existing system, but those were very specific.
ESR solved these problems very well with CML2. By he also added a dozen features and changed a hundred other minor things, simply because he felt it was better that way. ESR was solving problems which only he perceived. For example, he was very interested in making it easy for "Aunt Tillie" to configure a kernel. Unfortunately, Aunt Tillie doesn't have a say in whether something goes into the kernel. Linus was apparently OK with CML2, but most of the other kernel developers were very resistant. No one ever explicitly refused CML2, but it never went in either, and ESR eventually gave up.
The impression I got was that ESR should have minimized the changes to the UI in his first version. If he had built something exactly like the old config, but with a new language and backend, most of the objections would have gone away. He then could have submitted the other changes; they may or may not have been accepted, but at least the underlying system would have been improved.
If I have time I'll write a formal HOWTO and maybe submit it to/. In the meantime, here's a synopsis:
You need a Linux machine with a static IP address. If you can't have a static IP I suppose you can play games with dynamic IP addresses to access the server. Get a DNS entry to make it easier to access.
Set up fetchmail . Fetchmail is a simple program (written by ESR) which downloads mail via POP or IMAP. You configure it with your mail server, username, and password, and it downloads mail to the local machine. Actually, it re-delivers your mail locally. Your remote email might be chris2912@earthlink.net, and your username on your Linux server might be ces; fetchmail delivers the mail it downloads to ces@localhost.
At this point, you can use pine or mutt to read your mail. By default, they read mail from your local spool. Note that your "inbox" is/var/spool/mail/username, but other mail folders are usually under your home directory. Configure pine or mutt to put your mail folders in ~/mail.
Install procmail. Procmail allows you to set up filters for handling mail. It will let you move mail to a folder based on sender (something like various mail client's rules) and more importantly, it will let you run SpamAssassin (or junkfilter, but I recommend SpamAssassin). Set up procmail to run SpamAssassin on each email, and then either delete the spam or move it to a certain folder. The SpamAssassin documentation is pretty clear on how to do this. Make sure procmail is configured to use the folders in ~/mail.
Install an IMAP server. I use the standard UW server; there are others. The UW server runs via [x]inetd. I recommend setting up the SSL support (imaps).
What IMAP does is allow you to access your email remotely, without downloading it like POP. Mail is kept on the server, in folders. Through an IMAP client, you "subscribe" to a certain set of folders; these are the only folders IMAP clients will see. You want to configure your IMAP clients to use ~/mail as your root folder; otherwise you will see any other folders in your home directory (IMAP isn't limited to email).
When you set up an IMAP client (Outlook will work, though Outlook 2000 has an annoying bug, always reporting "server dropped connection", I use Mozilla mail) you provide the IP address of your server, and your username and password on that server.
IMAP is strange about deleting. Many IMAP clients by default want to move deleted messages into a folder. That's okay if you want to do that, I prefer to actually delete them. Even if you actually delete a message, it is only marked as deleted; it's still there until you purge it. Pine asks if you want to purge messages when you leave a folder; other clients do similar things.
Finally, install a web email package. IMP is the best, but it can be very hard to set up. I resorted to another package called squirrelmail before I finally got IMP set up. Squirrelmail is perfectly fine. Configure the package to use IMAP, using localhost as the server.
That's the basic points. Email me at ceswiedler@mindspring.com if you want any further help.
For me, the killer app for using Linux at home was fetchmail / IMAP / procmail / SpamAssassin. I was using POP3 to download email from several accounts, into mail clients at home and at work. I was tired of re-downloading the same messages, and of sorting the messages into folders in one place and having those changes not reflected other places.
So I set up my Linux server, which up to that point didn't do much except NAT, to fetchmail my messages from various accounts, run them through procmail and Spamassassin, and then publish the messages via IMAP. Now my email is accessible from anywhere, through an IMAP client or over the web (running IMP) or through ssh/pine. It's filtered for spam and sorted into folders, and I can back it up easily.
I wish Mozilla mail supported addressbooks stored in IMAP folders, but instead I have to run an LDAP server (way overkill) to manage contacts. IMP's address book component, Turba, is just about the only LDAP client which acts like a sensible contact manager and allows adding / editing entries.
I'm serious when I say this is a killer app for me. Before, I could have replaced my Linux server with a NAT router and not really missed it. Now it's essential to the way I work and communicate.
I don't remember how memory allocation works under DOS/BIOS; writing data to disk was indeed done using the BIOS, same with TSR applications and console string handling.
DOS was implemented in BIOS calls. It was a completely "userspace" application. It could be replaced by (bootable) applications, such as games, which were willing to manage their own files.
Not BIOS interrupts, but (i believe) int 80h is used to switch to kernel-mode for processing syscalls. Also, I'd say that was...important. The startup code (boot.S, setup.S) uses BIOS calls to read the kernel from the boot drive, since there's nothing else available at that point.
It's interesting that for all practical purposes, the IBM operating system prior to Windows 95 was the BIOS. DOS was nothing more than a shell; the BIOS did everything. Somehow, though, the BIOS was reverse-engineered (almost immediately) and became a commodity, while DOS never had a serious competitor. DOS launched Microsoft; IBM backed out of the PC market (for a while).
There's even less "will" in an evolutionary system than you yourself credit. Evolutionary processes are simply a set of patterns. With the correct stimuli, patterns will form. Patterns which "reproduce" and "survive" will obviously be around longer than patterns which occur once and disappear.
The trick is to apply the correct stimuli to get the pattern you want. I'm impressed that this guy can end up with something as complex as an oscillator circuit.
Why do you assume that these physical accomplishments (impressive, certainly) remove you from the category of loser? In my opinion, if you're happy with yourself and have productive relationships with other people, then not much else matters.
An obscure (though syntactically correct) usage like if (i = 0) definitely should be commented. A real world example would probably be
if (i = SomeFunc())
where you want to set the variable and test it at the same time. I prefer
if ((i = SomeFunc()) != 0)
which clearly indicates that you're setting the value, and then testing it as well. Whether you agree with this convention or not, this is what people mean when they talk about "self-documenting code." Make things obvious, not clever.
I've heard knowledgeable people say that not enforcing a patent for long enough (when the patent was obviously being infringed) results in the loss of the patent, for the exact reasons you mention.
That said, I'm not sure how that relates to mp3s. Did these companies with mp3 decoders license the code from the patent holder? If they did, then the license is enforcement, even if the cost of the license is zero. If the license terms allowed for future changes, then this would be legal.
That said, I doubt strongly that everyone who has ever written an mp3 decoder obtained a license in advance.
I installed woody -- wasn't much better. Sure, it installed less, but to really get what I wanted I still needed to use dselect.
When you say woody installed less, do you mean it did not install more? Or do you mean it installed less (not more), i.e. more? When potato didn't install less, did it install more?
Another neat thing about raytracing is that it's very easy to render just a subset of pixels. I remember Strata, an old 3D program for the Mac, had an option to select a part of the screen and render just that bit. It really helped when you were trying to get a particular detail on the screen (like a reflection or shading or image map) to come out right.
I don't know if that has any application to realtime raytracing for games, but it's neat anyhow.
By the way, I've performed full man-in-the-middle with a real bank involved and myselft as victim. It's easy and works perfectly, so I've put a brief description and screenshots at http://arch.ipsec.pl/inteligo.html Details on programs' setup and fake certificate generation are omitted not to provide script-kiddies with a ready recipe.
Actually, you can use Mike's https://www.thoughtcrime.org/ as demo site but you first need to DNS spoof your browser into thinking that www.amazon.com has address of 66.93.78.63, which is easy using dnsspoof from dsniff for example.
From the SecurityFocus thread referenced in another post.
We can bitch about Valenti's and the MPAA's techniques all we want. We can force them either to broadcast their movies in a way we can record perfectly, or not broadcast them at all. But there's a reason the MPAA is whining: they see this as undercutting their revenues. And no corporation will be satisifed with producing the same product for less compensation.
You like watching $100 million movies like LOTR and the Matrix? Where do you think that $100 million comes from? Part is from theatres; part of it is from broadcast rights. A large chunk comes from video/DVD sales and rentals, which is what they're worried will go down if people can trade perfect copies.
It's an equation, it has to balance out. Either the cost of making the movies will go down (resulting in lower-quality movies) or the price at the theatre, the TV station*, and the video store will go up. Think about it long and hard before you lobby Congress to allow everyone to record and exchange perfect copies of movies. Somewhere, somehow, you'll pay for it.
As many people have pointed out, the media companies do not have a guaranteed right to profit. But neither do you have a guaranteed right to high-quality media for low prices.
* If the TV station or cable channel has to pay more for the movies, then they'll pass that on to you in the form of more commercials or higher subscription fees.
Price isn't everything. From what I've understood of big FX companies switching to Linux (for workstations) was that they were interesting in having total control over the system. Most of the big houses have their own proprietary software to augment Maya, etc. Being able to modify the OS (right down to the kernel) to fit the application they developed was the most important feature of Linux.
Just because it's been done doesn't make it a good idea. You obviously know something about OS programming (though someone corrected you about the Be kernel). But you can't deny that the majority of modern operating systems are written in C, and not C++.
My point is that there is no GC algorithm which you can write (ahead of time) for a given application that is better than the GC implementation I can custom-write for my application. I can analyze my code and decide for myself when memory should be freed. It's the same thing with compilers; compiler-generated code is never going to be better than the hand-written code of a good programmer.
Now, everything is a tradeoff, and I'm all for compilers and GC when appropriate. But another thing I've noticed is that programmers get dependent on GC. More than that, a program written for GC (i.e., without any free() or delete calls) cannot be ported to a system which doesn't support GC.
Apparently Mozilla developers use Vi. On the feature description for TypeAheadFind, it says: Type / before your string to search all text.
;-) This is good, 'cuz I've found myself hitting / occasionally to do a search in Mozilla.
Wonder if it supports ? for backwards searching, i for case insensitive...
Then someone other than AMD and Intel will sell chips without DRM. There is obviously a market for it, and market forces are more powerful than legal ones in the long run.
Geeks no longer own desktop computing. We still own our own segment, but now that computers are mainstream, a mainstream OS has surfaced and will do this sort of thing. That doesn't mean, however, that our hobby will disappear. We'll just fade back into oblivion again.
State machines are provably better than using threads, but they're also much harder to implement. Basically, a state machine is implementing your own threading model. Since you know when is a good time to release your timeslice, you will produce a better application.
In Windows you can do a very nice completely asynchronous state-machine IP server, using IO completion ports. I believe this is how IIS is implemented. For extremely heavy loads (many thousands of connections) this is the only way to go. Microsoft added a few syscalls to Win2k just to support this sort of thing: a sendfile() command which is obviously targeted at webservers, and the ability to reuse sockets to avoid the overhead of creating and destroying them.
Are each of the processes for a virtual host spawned on startup, and remain around even if no requests have come in? I imagine there's an option to only spawn the processes as needed, and terminate them if they are inactive for a certain period.
At any rate, 1000 processes isn't that much for a modern server. Furthermore, that's the *most* you'll ever have, even if you have 10,000 simultaneous requests. However, threads in Linux are just processes anyway, so you'll see 10,000 entries in ps. But you'll know there's a difference...
I think the main process simply passes the socket descriptor for the new connection to the virtual host process. Passing descriptors isn't terribly efficient, but it only happens on connection, and certainly more efficient than piping data the way you describe. I'm pretty sure the Apache 2.0 design is efficient and scalable.
Ken's back door program is most definitely the most interesting hack ever devised, IMO. Read about it here.
At the bottom, ESR claims that he "has heard two separate reports that suggest that the crocked login did make it out of Bell Labs, notably to BBN, and that it enabled at least one late-night login across the network by someone using the login name `kt'."
Just to add to Bruce's points above: from what I heard, the biggest problem wasn't technical, but rather ESR's refusal to negotiate. The userbase of the kernel config system is the kernel developers; they had several tried-and-true ways of configuring kernels. Many of them were in fact quite happy with the existing system, and didn't see a need to upgrade at all; there was a general consensus that there were some shortcomings in the existing system, but those were very specific.
ESR solved these problems very well with CML2. By he also added a dozen features and changed a hundred other minor things, simply because he felt it was better that way. ESR was solving problems which only he perceived. For example, he was very interested in making it easy for "Aunt Tillie" to configure a kernel. Unfortunately, Aunt Tillie doesn't have a say in whether something goes into the kernel. Linus was apparently OK with CML2, but most of the other kernel developers were very resistant. No one ever explicitly refused CML2, but it never went in either, and ESR eventually gave up.
The impression I got was that ESR should have minimized the changes to the UI in his first version. If he had built something exactly like the old config, but with a new language and backend, most of the objections would have gone away. He then could have submitted the other changes; they may or may not have been accepted, but at least the underlying system would have been improved.
If I have time I'll write a formal HOWTO and maybe submit it to /. In the meantime, here's a synopsis:
/var/spool/mail/username, but other mail folders are usually under your home directory. Configure pine or mutt to put your mail folders in ~/mail.
You need a Linux machine with a static IP address. If you can't have a static IP I suppose you can play games with dynamic IP addresses to access the server. Get a DNS entry to make it easier to access.
Set up fetchmail . Fetchmail is a simple program (written by ESR) which downloads mail via POP or IMAP. You configure it with your mail server, username, and password, and it downloads mail to the local machine. Actually, it re-delivers your mail locally. Your remote email might be chris2912@earthlink.net, and your username on your Linux server might be ces; fetchmail delivers the mail it downloads to ces@localhost.
At this point, you can use pine or mutt to read your mail. By default, they read mail from your local spool. Note that your "inbox" is
Install procmail. Procmail allows you to set up filters for handling mail. It will let you move mail to a folder based on sender (something like various mail client's rules) and more importantly, it will let you run SpamAssassin (or junkfilter, but I recommend SpamAssassin). Set up procmail to run SpamAssassin on each email, and then either delete the spam or move it to a certain folder. The SpamAssassin documentation is pretty clear on how to do this. Make sure procmail is configured to use the folders in ~/mail.
Install an IMAP server. I use the standard UW server; there are others. The UW server runs via [x]inetd. I recommend setting up the SSL support (imaps).
What IMAP does is allow you to access your email remotely, without downloading it like POP. Mail is kept on the server, in folders. Through an IMAP client, you "subscribe" to a certain set of folders; these are the only folders IMAP clients will see. You want to configure your IMAP clients to use ~/mail as your root folder; otherwise you will see any other folders in your home directory (IMAP isn't limited to email).
When you set up an IMAP client (Outlook will work, though Outlook 2000 has an annoying bug, always reporting "server dropped connection", I use Mozilla mail) you provide the IP address of your server, and your username and password on that server.
IMAP is strange about deleting. Many IMAP clients by default want to move deleted messages into a folder. That's okay if you want to do that, I prefer to actually delete them. Even if you actually delete a message, it is only marked as deleted; it's still there until you purge it. Pine asks if you want to purge messages when you leave a folder; other clients do similar things.
Finally, install a web email package. IMP is the best, but it can be very hard to set up. I resorted to another package called squirrelmail before I finally got IMP set up. Squirrelmail is perfectly fine. Configure the package to use IMAP, using localhost as the server.
That's the basic points. Email me at ceswiedler@mindspring.com if you want any further help.
For me, the killer app for using Linux at home was fetchmail / IMAP / procmail / SpamAssassin. I was using POP3 to download email from several accounts, into mail clients at home and at work. I was tired of re-downloading the same messages, and of sorting the messages into folders in one place and having those changes not reflected other places.
So I set up my Linux server, which up to that point didn't do much except NAT, to fetchmail my messages from various accounts, run them through procmail and Spamassassin, and then publish the messages via IMAP. Now my email is accessible from anywhere, through an IMAP client or over the web (running IMP) or through ssh/pine. It's filtered for spam and sorted into folders, and I can back it up easily.
I wish Mozilla mail supported addressbooks stored in IMAP folders, but instead I have to run an LDAP server (way overkill) to manage contacts. IMP's address book component, Turba, is just about the only LDAP client which acts like a sensible contact manager and allows adding / editing entries.
I'm serious when I say this is a killer app for me. Before, I could have replaced my Linux server with a NAT router and not really missed it. Now it's essential to the way I work and communicate.
I don't remember how memory allocation works under DOS/BIOS; writing data to disk was indeed done using the BIOS, same with TSR applications and console string handling.
DOS was implemented in BIOS calls. It was a completely "userspace" application. It could be replaced by (bootable) applications, such as games, which were willing to manage their own files.
Not BIOS interrupts, but (i believe) int 80h is used to switch to kernel-mode for processing syscalls. Also, I'd say that was...important. The startup code (boot.S, setup.S) uses BIOS calls to read the kernel from the boot drive, since there's nothing else available at that point.
It's interesting that for all practical purposes, the IBM operating system prior to Windows 95 was the BIOS. DOS was nothing more than a shell; the BIOS did everything. Somehow, though, the BIOS was reverse-engineered (almost immediately) and became a commodity, while DOS never had a serious competitor. DOS launched Microsoft; IBM backed out of the PC market (for a while).
There's even less "will" in an evolutionary system than you yourself credit. Evolutionary processes are simply a set of patterns. With the correct stimuli, patterns will form. Patterns which "reproduce" and "survive" will obviously be around longer than patterns which occur once and disappear.
The trick is to apply the correct stimuli to get the pattern you want. I'm impressed that this guy can end up with something as complex as an oscillator circuit.
Why do you assume that these physical accomplishments (impressive, certainly) remove you from the category of loser? In my opinion, if you're happy with yourself and have productive relationships with other people, then not much else matters.
An obscure (though syntactically correct) usage like if (i = 0) definitely should be commented. A real world example would probably be
if (i = SomeFunc())
where you want to set the variable and test it at the same time. I prefer
if ((i = SomeFunc()) != 0)
which clearly indicates that you're setting the value, and then testing it as well. Whether you agree with this convention or not, this is what people mean when they talk about "self-documenting code." Make things obvious, not clever.
I've heard knowledgeable people say that not enforcing a patent for long enough (when the patent was obviously being infringed) results in the loss of the patent, for the exact reasons you mention.
That said, I'm not sure how that relates to mp3s. Did these companies with mp3 decoders license the code from the patent holder? If they did, then the license is enforcement, even if the cost of the license is zero. If the license terms allowed for future changes, then this would be legal.
That said, I doubt strongly that everyone who has ever written an mp3 decoder obtained a license in advance.
I installed woody -- wasn't much better. Sure, it installed less, but to really get what I wanted I still needed to use dselect.
When you say woody installed less, do you mean it did not install more? Or do you mean it installed less (not more), i.e. more? When potato didn't install less, did it install more?
Sopwith...oh, sopwith... with to control... oh sopwith
I'm pretty sure that they're saying "Glory of, the Old One."
That's what I (and others) always thought, and I seem to recall the rumor being substantiated. But then again, it might have been refuted.
Another neat thing about raytracing is that it's very easy to render just a subset of pixels. I remember Strata, an old 3D program for the Mac, had an option to select a part of the screen and render just that bit. It really helped when you were trying to get a particular detail on the screen (like a reflection or shading or image map) to come out right.
I don't know if that has any application to realtime raytracing for games, but it's neat anyhow.
By the way, I've performed full man-in-the-middle with a real bank
involved and myselft as victim. It's easy and works perfectly, so I've put
a brief description and screenshots at http://arch.ipsec.pl/inteligo.html
Details on programs' setup and fake certificate generation are omitted
not to provide script-kiddies with a ready recipe.
Actually, you can use Mike's https://www.thoughtcrime.org/ as demo
site but you first need to DNS spoof your browser into thinking
that www.amazon.com has address of 66.93.78.63, which is easy using
dnsspoof from dsniff for example.
From the SecurityFocus thread referenced in another post.
We can bitch about Valenti's and the MPAA's techniques all we want. We can force them either to broadcast their movies in a way we can record perfectly, or not broadcast them at all. But there's a reason the MPAA is whining: they see this as undercutting their revenues. And no corporation will be satisifed with producing the same product for less compensation.
You like watching $100 million movies like LOTR and the Matrix? Where do you think that $100 million comes from? Part is from theatres; part of it is from broadcast rights. A large chunk comes from video/DVD sales and rentals, which is what they're worried will go down if people can trade perfect copies.
It's an equation, it has to balance out. Either the cost of making the movies will go down (resulting in lower-quality movies) or the price at the theatre, the TV station*, and the video store will go up. Think about it long and hard before you lobby Congress to allow everyone to record and exchange perfect copies of movies. Somewhere, somehow, you'll pay for it.
As many people have pointed out, the media companies do not have a guaranteed right to profit. But neither do you have a guaranteed right to high-quality media for low prices.
* If the TV station or cable channel has to pay more for the movies, then they'll pass that on to you in the form of more commercials or higher subscription fees.
No. But you have a right for others not to profit from your work.
And linux is not an operating system, it's a kernel. So what? Do we have to be that pedantic?
Price isn't everything. From what I've understood of big FX companies switching to Linux (for workstations) was that they were interesting in having total control over the system. Most of the big houses have their own proprietary software to augment Maya, etc. Being able to modify the OS (right down to the kernel) to fit the application they developed was the most important feature of Linux.
Just because it's been done doesn't make it a good idea. You obviously know something about OS programming (though someone corrected you about the Be kernel). But you can't deny that the majority of modern operating systems are written in C, and not C++.
My point is that there is no GC algorithm which you can write (ahead of time) for a given application that is better than the GC implementation I can custom-write for my application. I can analyze my code and decide for myself when memory should be freed. It's the same thing with compilers; compiler-generated code is never going to be better than the hand-written code of a good programmer.
Now, everything is a tradeoff, and I'm all for compilers and GC when appropriate. But another thing I've noticed is that programmers get dependent on GC. More than that, a program written for GC (i.e., without any free() or delete calls) cannot be ported to a system which doesn't support GC.