Copyright is about making copies. It is not about what I do with your product. I am not legally allowed to make other then personal copies for OS X. I am allowed to do whatever I want however with my own copy. If I wish to take every bit and flip it then that is my choice.
I'm not going to address any laws out there, but here in the US, I don't believe that personal copies are allowed under copyright law.
So what exactly makes software companies like Apple so fucking special that they can dictate what I do with my copy of Mac OS X I bought from them?
How did you buy it from them? With a Mac? You're only allowed to use software on one computer (again, talking about the US here). Standalone? From whom? Apple doesn't sell unbundled OS X; the boxed sets at the store are upgrades.
So the only situation I see that would be legal is that you bought a Mac from Apple, overwrote the OS with Linux, and installed OS X on a different box. Is that what you're arguing that you're allowed to do?
Somehow, I doubt that most of the people running OS X on third-party boxes are doing that.
Now, you might argue that they should sell OS X unbundled. You'd probably get a lot of support. I'm not going to weigh in on that, since it's a business decision, not an ethical one. You can (and earlier did, IIRC) say this is like a gasoline station saying that you can only buy their gas for use with Frobozzco Brand Magic Cars. But a different point of view would be it's like saying that Toyota includes gas when I buy a car (and that clearly figures into the sale price); why won't they sell me gas for my Ford when I drive up?
Just thinking, but shouldn't it be perfectly legal to ignore that stuff & even strip it out of the file?
Sure, but to get to the region coding, you have to get through the CSS. The CSS has the DMCA's teeth, and you can only license CSS if you agree to respect region coding.
For the Big, Important Servers-- customer-facing web servers, product db backend, major fileservers, etc-- then IBM, HP, NetApp for fileservers, etc seem to be the way to go. Use somebody who's built a name for themselves in the enterprise by service, not marketing; Dell still doesn't know how to support those needs.
But for intermediate servers-- internal web servers, testing boxes, etc-- you can go with a smaller company. It's still worth going with a company, rather than DIY: the company deals with fixing servers every day, has the parts on hand, etc. Your organization may have great people, but the guy who is constantly building servers for a living is going to beat you on service.
The smaller companies, like OffMyServer (blatant plug for a company who's done well by my employer), can meet your needs without breaking the bank. We have dozens of servers in my department alone, and we just couldn't afford to put a big HP contract on each of them.
ObDisclaimer: Speaking for myself, not my employer, my own opinions. Not affiliated with any of the above companies that I know of, other than that my company buys from all of them.
While it is a self-enumerating sentence, it (and the Dutch one you gave) are not pangrams. As the link you so thoughtfully provided details, pangrams use every letter of the alphabet.
The summary talks about SACEM. The article talks about SNEP and SCPP. There are several more acronyms in the article. These are apparently well-known enough in France, but could somebody tell the rest of us who these groups are? Or would that be giving away too much of France's culture?
I'm surprised nobody's mentioned User Friendly. Also on my list are Queen of Wands (which finished its several-year run, and is now doing a rapid-fire rerun with commentary), Something Positive, Applegeeks (which just finished an uncharacteristic Batman parody and is now resuming its normal staples of inappropriate behavior and Ramadan jokes), and Mac Hall (unrelated, at least in name, to Apple Macs). For the grad students among us, may I recommend Piled Higher and Deeper; more so for those who are considering grad school.
Less traditionally, we also have Lore Brand Comics, which is pretty much standup in webcomic form. Alas, it hasn't been updated in months, but the archive is certainly worth looking through. Paradox Lost appears to be a comic book being written in webcomic form.
Other people mentioned them, but I have to say some of my favorites are Real Life and MegaTokyo.
Other than that, let me give you a start. If you want
under-the-hood, this is a starting point. It's pretty technical.
Unix is a multitasking, multiuser operating system with a
monolithic kernel. (Ignore whatever you don't understand about that
sentence.)
The basic organizational unit of access privileges is the user.
You know what a user is; I won't bore you with that. I'll just say
that, almost everywhere, users are identified internally by a user id
(uid), but displayed with their username (such as "piquan"). A
significant user is root, uid 0. In general, root has access to
everything.
The basic unit of execution under Unix is the process. When you
run "ls", then while ls is running, it is a process, with a unique
(during the time of execution) process id, or pid. You can get a list
of all the processes on the system by running ps -ax. (Note that ps's
flags vary from system to system.) (There's a smaller unit of
scheduling, the thread, but that's largely irrelevant to our
discussion.)
Each process has some information associated with it. This
includes the arguments used when the program was run (such as "ls -a
-l", which has three, including the command name). It also includes
the uid of the user who launched it (real uid), as well as the uid for
its authorizations (effective user id, or euid). These normally are
the same, but can vary.
For instance, the Apache web server is normally started by root (as
part of the boot sequence), but because it doesn't want bugs to give
an intruder root access, it changes its euid to a dummy user
("nobody", uid 65535) as soon as it can.
This can work in reverse, as well. For ping to work, it needs to
be able to access the interface directly. Since that also allows all
sorts of nasty spoofing things, it's restricted to root. Since a
normal user should be able to ping, the ping program is marked with a
flag saying "set the euid of the process to root". That's called the
suid flag, and we'll talk about it later. For now, my point is that
the real uid and effective uid can differ.
An individual can perform computations without any help (other than
from the MMU, like any other modern system), but to perform I/O with
the user, files, etc, they need to talk to the kernel. The general
interface between processes and the kernel is the syscall. This is
like INT 21h in DOS: it's a request for the kernel to do something on
behalf of the process's. Processes often make dozens or hundreds of
syscalls per second. Common syscalls are read, write, open, close,
exit (since the kernel manages processes, it has to be responsible for
terminating them), etc. There are 456 syscalls in FreeBSD 6.0
(including a few that are obsolete and have been retired), but only
about 200 are commonly used; the remainder are for highly specialized
tasks.
The kernel is always resident. It's not a process. It's stored in
a part of RAM that the CPU is set up to go to whenever a program
executes a syscall. (CPUs have special instructions for executing
syscalls, since every OS uses them.) The kernel has many tasks,
including managing and scheduling processes, coordinating I/O,
interpreting filesystems, paging virtual memory, etc.
For the purpose of task scheduling, each process can be in one of
several queues. One of those queues is the run queue, which means
that the process has something to compute. The kernel gives the CPU
(or one of the CPUs, in the case of SMP systems) to each process on
the run queue for a short time. The length of time is called the
scheduling quantum, and how often the kernel gives the CPU to a given
process is determined by a complex scheduler, but can be adjusted
by the user using val
Fair enough, but the millions of zombies hosted by comcast, bellsouth.net, or SBC doesn't interest them, the massive security flaws that allow any Microsoft machine to become a zombie just by connecting it to the internet and going for a pizza don't interest them, but a Van Zant (and other) CDs elicit a response from the tier 1 level?
There's a difference. Microsoft's security model is an existing threat, with no easy solution. This type of DRM is a new threat, with the easy solution of "don't start doing this". The DHS is simply advocating this easy solution.
That's not to say that the problems you mentioned aren't getting tier 1 attention. But they aren't a simple, sound-bitable public statement.
From Vigor's EULA, in a scrollbox that wouldn't let you scroll:
END-USER LICENSE AGREEMENT
IMPORTANT-READ CAREFULLY: This End-User License Agreement (EULA) is NOT a legal agreement between you (either an individual or a single entity, so take that Fare) and some other unnamed entity for whatever product we feel like it applies to. This includes media, printed materials, online or electronic documentation, products purchased because of or used with the product, or anything that happens to be nearby (SOFTWARE PRODUCT). By installing, copying, downloading, accessing, using, thinking about, hearing of, or being in the same universe as the SOFTWARE PRODUCT, you agree to be bound by the terms of this EULA. If you do not agree to the terms of this EULA, you can try to get your money back, but let's face it, that ain't gonna happen anyway, so why bother?
SOFTWARE PRODUCT LICENSE
The SOFTWARE PRODUCT is protected by copyright laws, international copyright treaties, several vaguely defined IPO laws and treaties that are easily clouded in a court of law, and a guy named Bubba with a shotgun.
1. GRANT OF LICENSE.
This EULA grants you the following rights:
The right to do whatever the publisher says.
Nothing else.
2. RESPONSIBILITIES OF THE USER.
By agreeing to this license, you agree to the following:
Give the provider your firstborn son, should the provider deem such is necessary and valuable.
Become Bill's towel boy for life.
Whatever else we think of later on, you already agreed to from the shrink-wrap license anyway
THIS TECHNOLOGY IS NOT FAULT TOLERANT AND IS NOT DESIGNED, MANUFACTURED, OR INTENDED FOR USE OR RESALE AS ON-LINE CONTROL EQUIPMENT IN HAZARDOUS ENVIRONMENTS REQUIRING FAIL-SAFE PERFORMANCE, SUCH AS THE OPERATION OF NUCLEAR FACILITIES, AIRCRAFT NAVIGATION OR COMMUNICATIONS SYSTEMS, AIR TRAFFIC CONTROL, DIRECT LIFE SUPPORT MACHINES, WEAPONS SYSTEMS, INTERNET SERVICE PROVIDERS, TECHNICAL SUPPORT LINES, NETWORK OPERATIONS CENTERS, IN WHICH THE FAILURE OF THE TECHNOLOGY OR NORMAL DAY-TO-DAY OPERATIONS COULD LEAD DIRECTLY TO DEATH, PERSONAL INJURY, OR SEVERE PHYSICAL OR ENVIRONMENTAL DAMAGE.
LIMITED WARRANTY
You have no warranty rights under this agreement whatsoever, expressed or implied. We don't want to hear from you if you've got any problems. We don't give you a number to call for just that reason. You've got to call the poor schmuck who sold this to you; they have to support you themselves, and we won't help them. We don't care. We don't have to.
If you're reading this because it's being displayed as part of the Vigor startup sequence, then please let me know by email at joelh@gnu.org. This dialog box is intended to be long enough so that it won't be displayed on the screen.
Exception: I know that you can click in the text box, and then hold down the down arrow key, and thus bypass the scroll overrides. I'll figure out a way to keep that from happening later.
The first paragraph refers to "Fare", who had made a minor splash the week before Vigor came out by claiming he'd found a loophole in the GPL. The Bill's towel boy crack is from Dilbert. The "not fault tolerant" bit is right out of the Java license; I couldn't think of any way to make that bit funnier.
I'm a grizzled old programmer. I also found Java 1.2 severely lacking. I picked it up again with 1.5, and now it's a usable language.
Generics are a big deal. I don't care what anybody says about "they're just casts": if you're going to build a strongly typed object-oriented language, you have to have generics. Otherwise, you're violating clean object design by either having casts everywhere, or reinventing the same code by implementing abstract data structures five times to hold five different object types.
Java 1.5 also has decent introspection capabilities. Any language that relies heavily on objects (e.g., Smalltalk, Objective C, some styles of Lisp) needs to have introspection. Otherwise, your tools-to-build-tools (e.g., Browser, IB, and Inspector, respectively) don't get built.
It has good locking capabilities. Java likes threads, but threads didn't like Java until it got past the whole thing about only having mutex locks.
I'm not saying that these are requirements for a non-toy language. I like C, which has none of these. But C doesn't pretend that it's some abstract HLL. It knows the kind of language it is, and is good at being that kind of language. Java didn't, and that made a big difference.
I'm not so sure. When I was coverting 10 and 15 year-old film to digital, I discovered that the degredation of the film seemed to significantly increase the encoded filesize. MPEG is good at dealing with surfaces, patterns, gradients, stuff like that. Not so much at dealing with random noise.
Given advances in technology by that point, it should make a great time to put men on Mars.
I mentioned this elsewhere in this article, but I'll repeat it here too since it's relevant.
While that is indeed considerably closer than it would be on the average random day, every couple of years Mars gets within about 49 million miles of Earth. This event's 43.1 million miles, while smaller than usual, doesn't represent an amazingly rare 4x difference.
Certainly it would save off a lot of travel distance, given that it is nearly 1/4 of the regular distance from Earth.
While that is indeed considerably closer than it would be on the average random day, every couple of years Mars gets within about 49 million miles of earth. This event's 43.1 million miles, while smaller than usual, doesn't represent an amazingly rare 4x difference.
A few years ago, I wrote the skeleton for this sort of thing. It was for a job, the guy never did the paperwork to hire me, so I stopped working on it and put my code on Sourceforge. It worked; I just hadn't polished anything. (The management interface, in particular, sucked.) It pretty much requires FreeBSD to use as your filter box.
The basic architecture is like this. First, there's a management interface that's just some PHP scripts talking to a MySQL database. That's how you add leases, how long you want them to last, etc. You could also add the leases to the database using any other means you want.
A daemon is running that frequently sweeps the database and reconfigures the kernel part (described in a minute). The daemon expires old leases, adds new leases, etc. It also watches the traffic (passively, so the traffic isn't going through the daemon) and logs usage stats. (This last was part of the spec the original customer gave me.)
The kernel part is what actually does the filtering. This doesn't need any custom kernel modules or anything; it's just a netgraph node inbetween the interfaces you're filtering on that uses the built-in BPF netgraph driver. (In those days, the packet filters in FreeBSD didn't support MAC filtering.)
Anyway, like I said, it all works-- or at least did when I wrote it, and I don't see any reason that anything would have broken seriously. Check it out; it's macf on SourceForge.
Long ago, the Lisp Machines roamed the Earth. They have a pretty wide set of characters available, as well as a swath of bucky bits. When people were writing for just Lispms, they'd use the extra characters sometimes. But then the code couldn't be brought over to other machines easily, or sent to a line printer, or... well, you get the idea. When Common Lisp came out, it defined a "standard character set"... a minimal set of characters that a Lisp implementation must support, and portable programs could only use it. This put an end to the flagrant use of the non-portable characters.
Same goes for the Knight keyboard at SAIL, the MIT keyboards that spawned the Lispms, etc, etc. The characters that aren't part of ASCII-- and aren't on most people's keyboards, let alone font sets-- cause too many problems.
That said, AppleScript does allow the use of some other characters in the MacRoman set. For example, not-equals can be written with the not-equals character, or <>, as you prefer. Personally, though, I stick with ASCII. Not even INTERCAL was perverse enough to deviate from it.
Hmmm... interesting. I've never heard that division before; it sounds pretty much like an HLL/low-level language distinction.
I tend to avoid such divisions when I'm speaking to others. It is far too easy to fall into the the Blub paradox. You tend to evaluate programming languages by going down the power scale from whatever you've learned, and therefore fail to recognize that there's a range up from what you've learned. If somebody generates a brilliant new language that has the potential to make programming simple, and you use this scale, then you'll only think it's as powerful as the most powerful language you've used.
That said, when I'm learning new languages, I do tend to use a similar idea internally. But this is only for a loose thought process about how to get things done in the language, and isn't meant to judge the language's merits... otherwise, I risk not evaluating merits that the language has that I haven't encountered.
That said, my scale also includes an entry with first-class functions and lexical closures, an entry for the "doesn't support recursion" languages (Fortran 77, early BASIC, etc), an entry for syntactic (as opposed to lexical) macros, and an entry for first-class classes (like Java, Objective C, and Smalltalk). A no-prize to the first person who guesses my language of choice.
I deliberately didn't order those reasonably, since I don't think that it's a good idea to think of these as an ordering. Instead, you can use them to help gauge the character of a language.
We used to turn old 256k 30-pin SIMMs into keychains and give or sell them to customers. The hole on the side can hold a keyring. More popular among the ladies, since it meant the keys were easier to find in the purse, and gents didn't care for the sharp corners. We ground the corners off a few for ourselves, but never really found them convenient for our pocket keychains. I did put one on my auxiliary keychain, though.
True. So I compiled it on a MIPS as well, which doesn't have a base+index register mode load instruction. Stock gcc 3.3.2, -march=mips32 -O3 (and also -dA -g -mrnames so I could more easily read the output):
I can't actually time these, since I don't have a MIPS box. (I do have simulators, but they're not entirely cycle-accurate, and besides I don't feel like pulling one out.) But it does appear that the pointer version is more efficient.
I find this interesting. GCC does support strength reduction; I wonder why I'm not seeing it have any effect here. It could be that the use of head++,tail-- is throwing it off: gcc doesn't recognize this as a pattern that can be strength reduced. So I tried a more common access model: straight sequential access.
unsigned int strlen_array (char array[]) { unsigned int i; for (i = 0; array[i]; i++); return i; }
unsigned int strlen_ptr (char* array_start) { char* array_end; for (array_end = array_start; *array_end; array_end++); return (array_end - array_start); }
Odd. Still no strength reduction. I wonder what's up here.
On an unrelated topic, you may know about the problem of page-widening posts. Well, apparently Slashdot doesn't like page-lengthening posts either: my comment currently has 21.1 characters / line, so it's not letting me post it. So instead I'll post a really long paragraph to help it along. You can really ignore this paragraph if you like. Alice was beginning to get very tired of sitting by her sister on the bank, and of having nothing to do: once or twice she had peeped into the book her sister was reading, but it had no pictures or conversations in it, `and what is the use of a book,' thought Alice `without pictures or conversation?' So she was considering in her own mind (as well as she could, for the hot day made her feel very sleepy and stupid), whether the pleasure of making a daisy-chain would be worth the trouble of getting up and picking the daisies, when suddenly a White Rabbit with pink eyes ran close by her. There was nothing so very remarkable in that; nor did Alice think it so very much out of the way to hear the Rabbit say to itself, `Oh dear! Oh dear! I shall be late!' (when she thought it over afterwards, it occurred to her that she ought to have wondered at this, but at the time it all seemed quite natural); but when the Rabbit actually took a watch out of its waistcoat-pocket, and looked at it, and then hurried on, Alice started to her feet, for it flashed across her mind that she had never before seen a rabbit with either a waistcoat-pocket, or a watch to take out of it, and burning with curiosity, she ran across the field after it, and fortunately was just in time to see it pop down a large rabbit-hole under the hedge.
Copyright is about making copies. It is not about what I do with your product. I am not legally allowed to make other then personal copies for OS X. I am allowed to do whatever I want however with my own copy. If I wish to take every bit and flip it then that is my choice.
I'm not going to address any laws out there, but here in the US, I don't believe that personal copies are allowed under copyright law.
So what exactly makes software companies like Apple so fucking special that they can dictate what I do with my copy of Mac OS X I bought from them?
How did you buy it from them? With a Mac? You're only allowed to use software on one computer (again, talking about the US here). Standalone? From whom? Apple doesn't sell unbundled OS X; the boxed sets at the store are upgrades.
So the only situation I see that would be legal is that you bought a Mac from Apple, overwrote the OS with Linux, and installed OS X on a different box. Is that what you're arguing that you're allowed to do?
Somehow, I doubt that most of the people running OS X on third-party boxes are doing that.
Now, you might argue that they should sell OS X unbundled. You'd probably get a lot of support. I'm not going to weigh in on that, since it's a business decision, not an ethical one. You can (and earlier did, IIRC) say this is like a gasoline station saying that you can only buy their gas for use with Frobozzco Brand Magic Cars. But a different point of view would be it's like saying that Toyota includes gas when I buy a car (and that clearly figures into the sale price); why won't they sell me gas for my Ford when I drive up?
Just thinking, but shouldn't it be perfectly legal to ignore that stuff & even strip it out of the file?
Sure, but to get to the region coding, you have to get through the CSS. The CSS has the DMCA's teeth, and you can only license CSS if you agree to respect region coding.
how much Xanax does it require to get a hamster to hover?
From your point of view, or the hamster's?
For the Big, Important Servers-- customer-facing web servers, product db backend, major fileservers, etc-- then IBM, HP, NetApp for fileservers, etc seem to be the way to go. Use somebody who's built a name for themselves in the enterprise by service, not marketing; Dell still doesn't know how to support those needs.
But for intermediate servers-- internal web servers, testing boxes, etc-- you can go with a smaller company. It's still worth going with a company, rather than DIY: the company deals with fixing servers every day, has the parts on hand, etc. Your organization may have great people, but the guy who is constantly building servers for a living is going to beat you on service.
The smaller companies, like OffMyServer (blatant plug for a company who's done well by my employer), can meet your needs without breaking the bank. We have dozens of servers in my department alone, and we just couldn't afford to put a big HP contract on each of them.
ObDisclaimer: Speaking for myself, not my employer, my own opinions. Not affiliated with any of the above companies that I know of, other than that my company buys from all of them.
Then why is Slashdot putting this in the Science: section? It obviously belongs in the Religion [bsd.slashdot.org] section!
Netcraft and Nietzsche confirm it...
While it is a self-enumerating sentence, it (and the Dutch one you gave) are not pangrams. As the link you so thoughtfully provided details, pangrams use every letter of the alphabet.
Doh! As soon as I posted that, I scrolled past the references. If anybody's as lost as I am, do the same.
The summary talks about SACEM. The article talks about SNEP and SCPP. There are several more acronyms in the article. These are apparently well-known enough in France, but could somebody tell the rest of us who these groups are? Or would that be giving away too much of France's culture?
Besides, what other distro has aSmoking Tux Logo?
There's a Smoking GNU pun here somewhere, I know it.
- Alan J. Perlis, "Epigrams in Programming"
I'm surprised nobody's mentioned User Friendly. Also on my list are Queen of Wands (which finished its several-year run, and is now doing a rapid-fire rerun with commentary), Something Positive, Applegeeks (which just finished an uncharacteristic Batman parody and is now resuming its normal staples of inappropriate behavior and Ramadan jokes), and Mac Hall (unrelated, at least in name, to Apple Macs). For the grad students among us, may I recommend Piled Higher and Deeper; more so for those who are considering grad school.
Less traditionally, we also have Lore Brand Comics, which is pretty much standup in webcomic form. Alas, it hasn't been updated in months, but the archive is certainly worth looking through. Paradox Lost appears to be a comic book being written in webcomic form.
Other people mentioned them, but I have to say some of my favorites are Real Life and MegaTokyo.
Try the daemon book (that's a link to Chapter 2, the overview, which is online), or the 4.4BSD architecture manual (which will never be a bestseller).
Other than that, let me give you a start. If you want under-the-hood, this is a starting point. It's pretty technical.
Unix is a multitasking, multiuser operating system with a monolithic kernel. (Ignore whatever you don't understand about that sentence.)
The basic organizational unit of access privileges is the user. You know what a user is; I won't bore you with that. I'll just say that, almost everywhere, users are identified internally by a user id (uid), but displayed with their username (such as "piquan"). A significant user is root, uid 0. In general, root has access to everything.
The basic unit of execution under Unix is the process. When you run "ls", then while ls is running, it is a process, with a unique (during the time of execution) process id, or pid. You can get a list of all the processes on the system by running ps -ax. (Note that ps's flags vary from system to system.) (There's a smaller unit of scheduling, the thread, but that's largely irrelevant to our discussion.)
Each process has some information associated with it. This includes the arguments used when the program was run (such as "ls -a -l", which has three, including the command name). It also includes the uid of the user who launched it (real uid), as well as the uid for its authorizations (effective user id, or euid). These normally are the same, but can vary.
For instance, the Apache web server is normally started by root (as part of the boot sequence), but because it doesn't want bugs to give an intruder root access, it changes its euid to a dummy user ("nobody", uid 65535) as soon as it can.
This can work in reverse, as well. For ping to work, it needs to be able to access the interface directly. Since that also allows all sorts of nasty spoofing things, it's restricted to root. Since a normal user should be able to ping, the ping program is marked with a flag saying "set the euid of the process to root". That's called the suid flag, and we'll talk about it later. For now, my point is that the real uid and effective uid can differ.
An individual can perform computations without any help (other than from the MMU, like any other modern system), but to perform I/O with the user, files, etc, they need to talk to the kernel. The general interface between processes and the kernel is the syscall. This is like INT 21h in DOS: it's a request for the kernel to do something on behalf of the process's. Processes often make dozens or hundreds of syscalls per second. Common syscalls are read, write, open, close, exit (since the kernel manages processes, it has to be responsible for terminating them), etc. There are 456 syscalls in FreeBSD 6.0 (including a few that are obsolete and have been retired), but only about 200 are commonly used; the remainder are for highly specialized tasks.
The kernel is always resident. It's not a process. It's stored in a part of RAM that the CPU is set up to go to whenever a program executes a syscall. (CPUs have special instructions for executing syscalls, since every OS uses them.) The kernel has many tasks, including managing and scheduling processes, coordinating I/O, interpreting filesystems, paging virtual memory, etc.
For the purpose of task scheduling, each process can be in one of several queues. One of those queues is the run queue, which means that the process has something to compute. The kernel gives the CPU (or one of the CPUs, in the case of SMP systems) to each process on the run queue for a short time. The length of time is called the scheduling quantum, and how often the kernel gives the CPU to a given process is determined by a complex scheduler, but can be adjusted by the user using val
I did. But there's still a bunch of insecure stuff connected to the Internet. My neighbors, for instance.
Fair enough, but the millions of zombies hosted by comcast, bellsouth.net, or SBC doesn't interest them, the massive security flaws that allow any Microsoft machine to become a zombie just by connecting it to the internet and going for a pizza don't interest them, but a Van Zant (and other) CDs elicit a response from the tier 1 level?
There's a difference. Microsoft's security model is an existing threat, with no easy solution. This type of DRM is a new threat, with the easy solution of "don't start doing this". The DHS is simply advocating this easy solution.
That's not to say that the problems you mentioned aren't getting tier 1 attention. But they aren't a simple, sound-bitable public statement.
From Vigor's EULA, in a scrollbox that wouldn't let you scroll:
The first paragraph refers to "Fare", who had made a minor splash the week before Vigor came out by claiming he'd found a loophole in the GPL. The Bill's towel boy crack is from Dilbert. The "not fault tolerant" bit is right out of the Java license; I couldn't think of any way to make that bit funnier.
Why did this get modded redundant? It's exactly right, and I didn't see anybody else say such a thing.
Anyway, Gorp can be remembered with the backronym "good old raisins & peanuts".
It's not just your experience.
I'm a grizzled old programmer. I also found Java 1.2 severely lacking. I picked it up again with 1.5, and now it's a usable language.
Generics are a big deal. I don't care what anybody says about "they're just casts": if you're going to build a strongly typed object-oriented language, you have to have generics. Otherwise, you're violating clean object design by either having casts everywhere, or reinventing the same code by implementing abstract data structures five times to hold five different object types.
Java 1.5 also has decent introspection capabilities. Any language that relies heavily on objects (e.g., Smalltalk, Objective C, some styles of Lisp) needs to have introspection. Otherwise, your tools-to-build-tools (e.g., Browser, IB, and Inspector, respectively) don't get built.
It has good locking capabilities. Java likes threads, but threads didn't like Java until it got past the whole thing about only having mutex locks.
I'm not saying that these are requirements for a non-toy language. I like C, which has none of these. But C doesn't pretend that it's some abstract HLL. It knows the kind of language it is, and is good at being that kind of language. Java didn't, and that made a big difference.
I'm not so sure. When I was coverting 10 and 15 year-old film to digital, I discovered that the degredation of the film seemed to significantly increase the encoded filesize. MPEG is good at dealing with surfaces, patterns, gradients, stuff like that. Not so much at dealing with random noise.
Given advances in technology by that point, it should make a great time to put men on Mars.
I mentioned this elsewhere in this article, but I'll repeat it here too since it's relevant.
While that is indeed considerably closer than it would be on the average random day, every couple of years Mars gets within about 49 million miles of Earth. This event's 43.1 million miles, while smaller than usual, doesn't represent an amazingly rare 4x difference.
Certainly it would save off a lot of travel distance, given that it is nearly 1/4 of the regular distance from Earth.
While that is indeed considerably closer than it would be on the average random day, every couple of years Mars gets within about 49 million miles of earth. This event's 43.1 million miles, while smaller than usual, doesn't represent an amazingly rare 4x difference.
A few years ago, I wrote the skeleton for this sort of thing. It was for a job, the guy never did the paperwork to hire me, so I stopped working on it and put my code on Sourceforge. It worked; I just hadn't polished anything. (The management interface, in particular, sucked.) It pretty much requires FreeBSD to use as your filter box.
The basic architecture is like this. First, there's a management interface that's just some PHP scripts talking to a MySQL database. That's how you add leases, how long you want them to last, etc. You could also add the leases to the database using any other means you want.
A daemon is running that frequently sweeps the database and reconfigures the kernel part (described in a minute). The daemon expires old leases, adds new leases, etc. It also watches the traffic (passively, so the traffic isn't going through the daemon) and logs usage stats. (This last was part of the spec the original customer gave me.)
The kernel part is what actually does the filtering. This doesn't need any custom kernel modules or anything; it's just a netgraph node inbetween the interfaces you're filtering on that uses the built-in BPF netgraph driver. (In those days, the packet filters in FreeBSD didn't support MAC filtering.)
Anyway, like I said, it all works-- or at least did when I wrote it, and I don't see any reason that anything would have broken seriously. Check it out; it's macf on SourceForge.
Long ago, the Lisp Machines roamed the Earth. They have a pretty wide set of characters available, as well as a swath of bucky bits. When people were writing for just Lispms, they'd use the extra characters sometimes. But then the code couldn't be brought over to other machines easily, or sent to a line printer, or... well, you get the idea. When Common Lisp came out, it defined a "standard character set"... a minimal set of characters that a Lisp implementation must support, and portable programs could only use it. This put an end to the flagrant use of the non-portable characters.
Same goes for the Knight keyboard at SAIL, the MIT keyboards that spawned the Lispms, etc, etc. The characters that aren't part of ASCII-- and aren't on most people's keyboards, let alone font sets-- cause too many problems.
That said, AppleScript does allow the use of some other characters in the MacRoman set. For example, not-equals can be written with the not-equals character, or <>, as you prefer. Personally, though, I stick with ASCII. Not even INTERCAL was perverse enough to deviate from it.
Hmmm... interesting. I've never heard that division before; it sounds pretty much like an HLL/low-level language distinction.
I tend to avoid such divisions when I'm speaking to others. It is far too easy to fall into the the Blub paradox. You tend to evaluate programming languages by going down the power scale from whatever you've learned, and therefore fail to recognize that there's a range up from what you've learned. If somebody generates a brilliant new language that has the potential to make programming simple, and you use this scale, then you'll only think it's as powerful as the most powerful language you've used.
That said, when I'm learning new languages, I do tend to use a similar idea internally. But this is only for a loose thought process about how to get things done in the language, and isn't meant to judge the language's merits... otherwise, I risk not evaluating merits that the language has that I haven't encountered.
That said, my scale also includes an entry with first-class functions and lexical closures, an entry for the "doesn't support recursion" languages (Fortran 77, early BASIC, etc), an entry for syntactic (as opposed to lexical) macros, and an entry for first-class classes (like Java, Objective C, and Smalltalk). A no-prize to the first person who guesses my language of choice.
I deliberately didn't order those reasonably, since I don't think that it's a good idea to think of these as an ordering. Instead, you can use them to help gauge the character of a language.
We used to turn old 256k 30-pin SIMMs into keychains and give or sell them to customers. The hole on the side can hold a keyring. More popular among the ladies, since it meant the keys were easier to find in the purse, and gents didn't care for the sharp corners. We ground the corners off a few for ourselves, but never really found them convenient for our pocket keychains. I did put one on my auxiliary keychain, though.
True. So I compiled it on a MIPS as well, which doesn't have a base+index register mode load instruction. Stock gcc 3.3.2, -march=mips32 -O3 (and also -dA -g -mrnames so I could more easily read the output):
Array version:
Pointer version:
I can't actually time these, since I don't have a MIPS box. (I do have simulators, but they're not entirely cycle-accurate, and besides I don't feel like pulling one out.) But it does appear that the pointer version is more efficient.
I find this interesting. GCC does support strength reduction; I wonder why I'm not seeing it have any effect here. It could be that the use of head++,tail-- is throwing it off: gcc doesn't recognize this as a pattern that can be strength reduced. So I tried a more common access model: straight sequential access.
On the MIPS, array version:
Pointer version:
Odd. Still no strength reduction. I wonder what's up here.
On an unrelated topic, you may know about the problem of page-widening posts. Well, apparently Slashdot doesn't like page-lengthening posts either: my comment currently has 21.1 characters / line, so it's not letting me post it. So instead I'll post a really long paragraph to help it along. You can really ignore this paragraph if you like. Alice was beginning to get very tired of sitting by her sister on the bank, and of having nothing to do: once or twice she had peeped into the book her sister was reading, but it had no pictures or conversations in it, `and what is the use of a book,' thought Alice `without pictures or conversation?' So she was considering in her own mind (as well as she could, for the hot day made her feel very sleepy and stupid), whether the pleasure of making a daisy-chain would be worth the trouble of getting up and picking the daisies, when suddenly a White Rabbit with pink eyes ran close by her. There was nothing so very remarkable in that; nor did Alice think it so very much out of the way to hear the Rabbit say to itself, `Oh dear! Oh dear! I shall be late!' (when she thought it over afterwards, it occurred to her that she ought to have wondered at this, but at the time it all seemed quite natural); but when the Rabbit actually took a watch out of its waistcoat-pocket, and looked at it, and then hurried on, Alice started to her feet, for it flashed across her mind that she had never before seen a rabbit with either a waistcoat-pocket, or a watch to take out of it, and burning with curiosity, she ran across the field after it, and fortunately was just in time to see it pop down a large rabbit-hole under the hedge.