What if I'm installing IE in Korea on a 14.4 connection?
So, you're saying this is an argument for putting IE on my Windows CD? Hell, being on a 14.4 in Korea is a strong incentive for me to get all my software on CD. I don't know what it has to do with DLLs, or really IE, for that matter. Frankly, if I were in charge of Microsoft, Koreans who use 8-year-old technology to access the Internet wouldn't be my primary consideration when making architectural decisions:)
Like if you and I were in business together, let's call it RichmanSoft, and we were building a browser, our goal might be something like "let's give consumers a great browsing experience" not "let's architect this so it's as convenient as possible for our competitors."
I agree. But our web browser would have nothing at all to do with my comment about software distribution in the Windows world. The software installation application that enables more modular software distribution need not even be written by Micro(Richman)soft; none of the major installers used today are.
If Micro(Richman)soft still chooses an "architecture" that bundles with Windows as many DLLs as they can write in order to exclude library competition, and if their libraries are better than the competition, then theirs will be used, and rightly so; congratulations to them. Of course, bundling random DLLs with the purpose of destroying competitors doesn't sound too advisable from an antitrust standpoint.
Another example is on page 22, where the author writes that increasing the maintainability of applications written for Windows because a lot of functionality used by them is already built in the OS has no direct benefit to consumers. Again I disagree: for instance, if all applications use the same built-in serializer for a certain fileformat, changes to that format would only require a single componentupdate to the operating system. This means the consumer won't have to update all the applications seperately - not to even mention all the possible bugs that could result from the various implementations.
As you point out yourself, "standard" DLLs pretty much destroy this point of your argument. For instance, lots of programs share the Microsoft Visual C++ runtime libraries on my computer. If Microsoft discovered a catastrophic bug in msvcrt40.dll or mfc40.dll or any other DLL, I would only have to replace one file. Have you ever installed a program and seen an alert that asks you to confirm the replacement of a DLL with a more recent version?
Ofcourse, using a standard DLL in Windows to perform certain tasks doesn't require it to be part of the Operating System, but in what other way can you be certain that all your potential customers have it installed?
Ah, now this point provides ripe fodder for a rant. The quick answer is, they don't know if their customers have it installed. So they bundle all necessary DLLs with their installer. This is a pretty fucked up part of the Windows software distribution world, that people are constantly and unknowingly downloading msvcrt DLLs and other DLLs that they already have on their computers.
If I'm installing Enlightenment on my Linux box, I need imlib (amongst other things). How do the Enlightenment folks know that I have the proper version of imlib on my computer? They don't. They don't care. Having imlib is a precondition to being able to run Enlightenment, and the onus is on me to install it. In fact, if you go to Rpmfind.net, you'll find that pretty much every RPM they have requires that you have some other stuff installed.
Does it suck that I have to install these libraries and ancillary programs? Is it inconvenient? No. The reason is that there are nice graphical applications that install my Linux software for me (some better than others), and they can automatically check dependencies for me and download and install the required shared libraries. Even in the absence of such a handy application, I'm a big boy and can cope with following links to download required libraries if I don't already have them.
Now, many Windows users aren't big boys. I remember downloading a few programs over the years from sites that offered different versions of their installer depending on which libraries you already had installed. I liked this a lot, but many Windows users wouldn't know what the hell they were talking about. I'm sure most people could learn to download libraries on their own if they had to (although these libraries would probably get left behind when they uninstalled), but they shouldn't have to. There should be a nice installer mechanism that downloads, installs, and keeps track of all required libraries for you. If Microsoft wanted to bundle a useful program with their operating systems that scored mad points in the battle of modularity and code reuse, this strikes me as a nicer choice than foisting IE on people.
It would be nice if the system were such that if a company decided that Mozilla's HTML rendering engine was superior to Microsoft's and chose to use it in their product, they could do so without having to worry too much about the bloat it would introduce in their installer download.
"For
example, in the Caldera case Microsoft claimed that one of the benefits of combining
improved versions of Windows and DOS was the pretty cloud pattern that is
displayed when Windows 95 is starting."
In the wake of their announcement that they will be chargine $9.95 to users who use more than 40 hours a month, it would seem that they are doing everything they can to increase their revenues and become the dominant force in the free isp game.
Riiiiight... nothing like charging some of your customers $9.95 a month to become the dominant force in the free ISP game.
I believe the article addressed every one of your points.
Umm, first of all, this is only possible *if* you can actively steal and replace every packet between the two (man-in-the-middle).
According to the article, dsniff includes a pretty complete suite of tools with functionality to help you accomplish this, including redirecting targets from the link level (ARP spoofing) on up to DNS.
Second, SSL is generally used with a key signed by a CA, so no breach there.
As the article pointed out, although servers usually have CA-signed public keys, the clients accessing them usually do not. If user A is connecting to host H, user A generates a public and private key for itself and sends is public key to H. If an attacker B intercepts this and instead sends B's public key to H, then H will encrypt everything it sends to A with B's public key. B can then decrypt H's messages, read them, encrypt them with A's public key, and pass them on to A. Neither endpoint is any the wiser, but the attacker can now read half of A and H's conversation (the messages from H to A).
Third, at least my version of tera-term with ttssh, stores the key the first time you connect, and will warn you if that key ever changes in a future session.
Well, this obviously still only addresses the server key side. Additionally, this is of little use if I use a client from a different location that doesn't have the public key database. E.g., if I regularly connect to a computer in my school's CS department from home with SSH, all is well. But if one day I'm at a public terminal in my school's library and I want to connect to the same machine in the CS department, the public key database on my computer at home does me little good. You really need a trusted CA.
Further, as the article points out, there is a social engineering aspect. Many users (myself included) don't care that much and hit "ignore" when they get "public key changed" warnings. In my case, this is because I'm connecting to a computer lab of homogeneous machines that isn't very well managed from a PKI standpoint: hosts are renamed to other hosts when the computers fail or the configuration changes (not to mention the round-robin DNS alias that references any one of 40 boxen). "Ignore" is always the easiest option; to borrow a phrase, "my data isn't *that* important."
If I *really cared*, I could put the key on my https server (key signed by verisign), and download the key from there, install it into my ssh client, and bingo, secure connection.
I assume you mean you're retrieving your own personal (client) keys, as retrieving the server's public key doesn't solve any new problems (why trust your CA-verified web server to give you some other server's key when having the server's key CA-signed in the first place would have sufficed?). As I mentioned above, in an SSL conversation in which the client keys are generated for the session, the client key can be spoofed by a man in the middle. This means when you go to retrieve your personal public and private keys from your web server, I could intercept your personal private key. Hell, I could intercept your key and pass a different private key onto you if I wanted. Once I get your private key, I'm set; I can sniff every message sent to you in every "secure" session you enter until you changed your keys, and without having to go through the hassle of the whole man-in-the-middle attack.
I shouldn't have to pay taxes for something twice.
You forgot about that fact that 40% of your salary was taken in income taxes before you even got the paycheck that you're using on that new car.
And what service do I get with my income tax? I get "The Government." But what's that? Welfare. But what if I'm an asshole and could care less about impoverished people I'll never meet? The National Endowment for the Arts. What do I care about art; give me my Limp Bizkit and I'm happy. AIDS research. But I don't have AIDS; why should I pay money to save those people? Defense. Yah, but when was the last time the US was invaded? What if I don't want to spend my hard earned dollars so the US can uphold democracy in countries I've never heard of?
Yes, as anybody could pithily point out, taxes are a fact of life. But, more important than that, there's not always a one-to-one correspondence between the taxes I'm paying and the services I'm receiving in return. You can't say, "What the fuck did I get out of the 8 cents I just paid my goverment for this 7-layer Burrito;" it just doesn't work. Property taxes probably offer the most logical correspondence between inflows and outflows, but ultimately the tax system just has to be accepted as a complicated beast of sales taxes, property taxes, income taxes, tarrifs, tolls, and whatever else, the revenues of which make their way into the hands of everyone from the smallest local government to Washington.
Whether this is "right" is obviously a matter of personal opinion. Most people would probably agree on things like defendants having legal counsel made available to them if they cannot afford it, but there is an enormous area open to debate. Income tax withholding, for instance, is something that everyone takes for granted these days, but that has only existed in this country since 1943. Some political parties advocate a much smaller government, and some presidential candidates in the last election were running on a platform that included the complete abolition of the income tax.
A person who makes $100,000 a year pays a *lot* more in takes (income, property, sales, etc.) than a person who makes $15,000 a year, even though the person who makes $15,000 a year probably receives a lot more services from governement. Personally, I'm young and liberal. I pay more in taxes than most of my friends earn. This does not bother me, as I can appreciate the benefits of my taxes, whether I enjoy them personally or philanthropically. If you're paying taxes for some stupid government program you don't believe in, use your vote to express your disapproval. If enough people disagree with you and the program continues, then it was probably for the greater good, as defined by the popular sentiment of the time; you just have to accept this and fork over your hard-earned dollars. The system in which consensus selects representatives who make fiscal decisions works pretty well. Bitch about it all you want, but listing taxes for which you feel you personally receive no tangible service in return is, in my opinion, unenlightened and greedy. If the voters have sided against you, then my opinion is quite possibly "right."
The federal government commissions the Fed to print money, which it does out of thin air.
The Fed controls the money supply by changing the reserve requirement for banks, buying and selling Treasury bills and notes, and changing interest rates. The Fed does not just print more cash at the whims of the govenment; this can drastically affect the economy and is difficult to take back. I would not describe the issuance of T-Bills as "Printed out of thin air when someone else wants money," but rather as a modern economic implement to control the money supply.
Re:Real programmers use 64-bit time_t
on
13 Month Calendar?
·
· Score: 2
Real programmers use 32-bit time_t, for job security purposes: it guarantees extra work for them to do when January 19, 2038 rolls around (or should I say rolls over).
Yeah, I just love how this calculator nerd proposes a calendar totally changes what has been in use by most of the world for over four centuries and says we should start using the new system on January 1, yet he hasn't quite bothered to figure out how leap years will work.
Leap years just strike me as one of those minor issues that should be hammered out *before* you propose a drastic change to the calendar system if you expect to be taken seriously...
The goal of computer science education is not to churn out C++ coders
Nor is the goal of AP Computer Science to turn out C++ coders. I'd imagine you'd find the College Board's goals for AP CS students are not far off from your own ideals. If you took the actual test, you'd see that it's very little about "What do you use endl for?" and very much about "What are the properties and structure of a binary tree?"
That is why the language for the AP class ought to be absolutely as simple as possible to convey the concepts.
Then what language do you propose? I agree that Java is a simpler, cleaner language than C++; I'd imagine most people would concur. There are lots of other good object-oriented programming languages in the world; some people posted to this story requesting Smalltalk, others might want Ada 95, others might want Steven's Toy Language. These, of course, are not good choices, not as much because they are of little practical value to the student, but because they are foreign to the instructors. But, despite what you might think, I would consider practical value to the students to be a worthwhile consideration: Smalltalk is a clean, simple, pure-OO language, and superior to C++ in most every way, but if you take a student who has learned to program in nothing but Smalltalk and a student who has learned to program in nothing but C++ and put them both in front of a Java compiler with the job of writing your LZW compression project, who do you think would fare better?
The fact of the matter is, computer programming has for a very long time been focused squarely on imperative programming languages, and is these days very focused on object oriented programming. These seem to me, then, to be reasonable topics for a high school-level CS class to endeavor to impart knowledge about. At the time the College Board made the switch from Pascal, C++ was the natural choice to satisfy the pedagogical demands. Java had no doubt not proven itself to the glacial folks in the standardized testing world.
You might argue that imperative programming is not a good medium for teaching the concepts of computer science. I wouldn't disagree. I spent a year studying at the University of Edinburgh, where the CS students all start out learning ML. The students bitched and bitched and decried ML left and right -- even more so after they learned an imperative language -- but I though it was pretty cool that they hadn't been thrown into the murk of pointer arithmetic and endianness like I had.
Finally, some people have posted suggesting that the all-powerful language-neutral exemplar, pseudocode, should be used, as language isn't important. This is ridiculous. The AP CS test has to test knowledge of things like pass by reference vs pass by value, self-referential data types, etc. To do so you need constructs in your programming language to support this (e.g., pointers/references). In a multiple choice question on a pseudocode code sample, how is the College Board going to express whether an rvalue is having its value taken or a reference to it? You obviously have to have notes or syntax to express these things, and the kids taking the test have to digest it. I'd much rather spend a little bit of time learning the basics of a "real" language rather than have to guess at the intentions of the author of some fucked up pseudocode...
C++ is the medium, not the message.
Marshall McLuhan would argue that the medium strongly controls the discourse available to the entities conversing in a given programming language. I would agree; a C++ programmer will think very differently from a Prolog programmer. Ultimately, though, C++ was a good, practical choice of CS worlds for the high school-aged computer scientist to dip his feet into. (And Java, of course, is better.)
AP courses in high schools have their content largely determined by the subject matter of the test. So, unless you're taking the AP CS test without having taking the class, you probably did take a class in Java.
Besides, it's pretty much impossible to offer a standardize multiple choice test on programming if you don't assume some common PL knowledge. The GRE Computer Science Subject Test, for instance, assumes you know C and Pascal.
...the AP Computer Science Development Committee made a formal request to the College Board that the AP Computer Science curriculum be revised to include object orientation...
Doesn't the current AP CS test, which is on C++, already cover OO? I have no experience with it (I took the Pascal version in 1996), but it seems from the AP CS course description on the College Board website that OO is already very much a part of the course... Does someone who has taken the C++ version want to comment?
Besides, how can you teach C++ without teaching OO? That's just C (well, plus iostream, default parameter values, const,...).
If you read the post to which I was responding, you'll see the point I was making wasn't that C has a fixed word size, it was that Java has no such thing as native support for arbitrary precision numbers.
Yah, I'd like to say "who cares about IM compatibility." I didn't think instant messaging programs were a big deal. I quit using them.
But several weeks ago I followed a banner on Yahoo to a survey that solicited people's opinions on various IM topics to help Yahoo improve Messenger. It had questions asking me to rate the importance of features like streaming telivision and MP3 playback in my instant messaging tool. MPFUCKING3 playback? Are people mentally retarded and unable to install any program on their computer other an IM?
Well, it sounded at least like Yahoo's betting on it... IMs have that whole contagion thing going for them: your coworkers and girlfriends and grandparents and grandchildren all want to send you their ten word thoughts-of-the-minute, so you have to install the appropriate program. You never get grandparents emailing you, prodding you to install Windows Media Player on your computer...
Sorry about the rant. I live in an igloo and am out of touch with the trends of the Internet. But at least I'll be safe from future IM mind control plots.
Hmmm... I hope they're not claiming to solve the halting problem with this statement.
Programs can be proven correct in any language for which there exists a complete formal semantic definition.
For instance, using denotational semantics you can reduce every state and state transformation in the rules of a programming language to mathematical functions (e.g., defining the mathematical functions and states for what a while loop does). Then, with these functions, you can prove correctness properties (e.g., this state will always provably go to this state, which will always provably go to this state, in accordance with the specifications of the problem we're trying to solve).
In practice, this isn't very useful or practical for proving that Word 2000 won't crash. Nor will it let you prove that a TM will halt with a certain input; it's more about proving that the steps the TM takes are correct. It can be useful for proving correctness of things like translation (compilation) by guaranteeing that the transformations you apply to elements of the source language yield elements of the target language that have the same meaning.
Uh, Java is absolutely no different from C/C++ in this regard. Java's ints will always be 32 bits, its longs will always be 64 bits.
BigInteger has nothing to do with the Java language. It's just a regular old class written in Java that stores its magnitude as a big-endian array of those 32 bit ints. If it didn't already exist in the API you could write it yourself. If you download the API source and used BitInteger as a reference, you could probably write the same thing in C/C++ in under an hour. Or you could use one of the many existing aribitrary precision C math libraries in the world.
Last year a group called UBSB came out with a noise album, Traceroute, on Ash International records. The music was created by taking a dump of backbone traffic and turning it into sound. Here's a review I found:
"UBSB
-Traceroute (ash) LP SFR 21.-
Great collaboration between Ulf Bilting, Edwin van der Heide, Zbigniew Karkowski and Atau Tanaka. The concept : "Data harvested from the internet in early 1999, from a research center in Scandinavia. This data is rendered to analog to protect the original data from being reverse engineered or reconstructed. We created a Unix software agent that sat along a high bandwidth backbone pipe, essentially eavesdropping, gathering data, writing out a soundfile of everything it saw. Ethernet datapackets were consecutively written out to a file with no timestamp. Later the file header was hacked to open it in an audio editor." A succession of digital noises and loops manipulated to create a hypnotical and intense work. Really good in the field of digital noise. Recommended."
There are two contexts in which fork() is used in a *n?x environment: when the system call is immediately followed by transfer of control to another executable (that is, as a very expensive way to execute CreateProcess()), or as a way to spawn a separate handler for an event (that is, as a very expensive way of calling CreateThread()). In neither case is fork() itself a useful or efficient system call.
Both uses seem pretty useful to me.
Both seem pretty efficient, too, as modern forks are copy-on-write.
And for the former use (a fork followed by an exec) you'd be using vfork.
In general, this is true: threads share a memory space and other things that processes do not. A process is an independently executing instance of a program; a thread is a sequence of execution within a process.
In the Linux world, though, process creation (fork) and thread creation are both built on top of a Linux-specific system call called clone() that has arguments that specify what you resources (file descriptors, data pages, etc.) you want shared between the new and parent process/thread and what you want duplicated. This is why, in Linux, threads have their own process IDs and show up separately in process listings. And in top.
So, you're saying this is an argument for putting IE on my Windows CD? Hell, being on a 14.4 in Korea is a strong incentive for me to get all my software on CD. I don't know what it has to do with DLLs, or really IE, for that matter. Frankly, if I were in charge of Microsoft, Koreans who use 8-year-old technology to access the Internet wouldn't be my primary consideration when making architectural decisions :)
Like if you and I were in business together, let's call it RichmanSoft, and we were building a browser, our goal might be something like "let's give consumers a great browsing experience" not "let's architect this so it's as convenient as possible for our competitors."
I agree. But our web browser would have nothing at all to do with my comment about software distribution in the Windows world. The software installation application that enables more modular software distribution need not even be written by Micro(Richman)soft; none of the major installers used today are.
If Micro(Richman)soft still chooses an "architecture" that bundles with Windows as many DLLs as they can write in order to exclude library competition, and if their libraries are better than the competition, then theirs will be used, and rightly so; congratulations to them. Of course, bundling random DLLs with the purpose of destroying competitors doesn't sound too advisable from an antitrust standpoint.
Another example is on page 22, where the author writes that increasing the maintainability of applications written for Windows because a lot of functionality used by them is already built in the OS has no direct benefit to consumers. Again I disagree: for instance, if all applications use the same built-in serializer for a certain fileformat, changes to that format would only require a single componentupdate to the operating system. This means the consumer won't have to update all the applications seperately - not to even mention all the possible bugs that could result from the various implementations.
As you point out yourself, "standard" DLLs pretty much destroy this point of your argument. For instance, lots of programs share the Microsoft Visual C++ runtime libraries on my computer. If Microsoft discovered a catastrophic bug in msvcrt40.dll or mfc40.dll or any other DLL, I would only have to replace one file. Have you ever installed a program and seen an alert that asks you to confirm the replacement of a DLL with a more recent version?
Ofcourse, using a standard DLL in Windows to perform certain tasks doesn't require it to be part of the Operating System, but in what other way can you be certain that all your potential customers have it installed?
Ah, now this point provides ripe fodder for a rant. The quick answer is, they don't know if their customers have it installed. So they bundle all necessary DLLs with their installer. This is a pretty fucked up part of the Windows software distribution world, that people are constantly and unknowingly downloading msvcrt DLLs and other DLLs that they already have on their computers.
If I'm installing Enlightenment on my Linux box, I need imlib (amongst other things). How do the Enlightenment folks know that I have the proper version of imlib on my computer? They don't. They don't care. Having imlib is a precondition to being able to run Enlightenment, and the onus is on me to install it. In fact, if you go to Rpmfind.net, you'll find that pretty much every RPM they have requires that you have some other stuff installed.
Does it suck that I have to install these libraries and ancillary programs? Is it inconvenient? No. The reason is that there are nice graphical applications that install my Linux software for me (some better than others), and they can automatically check dependencies for me and download and install the required shared libraries. Even in the absence of such a handy application, I'm a big boy and can cope with following links to download required libraries if I don't already have them.
Now, many Windows users aren't big boys. I remember downloading a few programs over the years from sites that offered different versions of their installer depending on which libraries you already had installed. I liked this a lot, but many Windows users wouldn't know what the hell they were talking about. I'm sure most people could learn to download libraries on their own if they had to (although these libraries would probably get left behind when they uninstalled), but they shouldn't have to. There should be a nice installer mechanism that downloads, installs, and keeps track of all required libraries for you. If Microsoft wanted to bundle a useful program with their operating systems that scored mad points in the battle of modularity and code reuse, this strikes me as a nicer choice than foisting IE on people.
It would be nice if the system were such that if a company decided that Mozilla's HTML rendering engine was superior to Microsoft's and chose to use it in their product, they could do so without having to worry too much about the bloat it would introduce in their installer download.
"For example, in the Caldera case Microsoft claimed that one of the benefits of combining improved versions of Windows and DOS was the pretty cloud pattern that is displayed when Windows 95 is starting."
Riiiiight... nothing like charging some of your customers $9.95 a month to become the dominant force in the free ISP game.
Umm, first of all, this is only possible *if* you can actively steal and replace every packet between the two (man-in-the-middle).
According to the article, dsniff includes a pretty complete suite of tools with functionality to help you accomplish this, including redirecting targets from the link level (ARP spoofing) on up to DNS.
Second, SSL is generally used with a key signed by a CA, so no breach there.
As the article pointed out, although servers usually have CA-signed public keys, the clients accessing them usually do not. If user A is connecting to host H, user A generates a public and private key for itself and sends is public key to H. If an attacker B intercepts this and instead sends B's public key to H, then H will encrypt everything it sends to A with B's public key. B can then decrypt H's messages, read them, encrypt them with A's public key, and pass them on to A. Neither endpoint is any the wiser, but the attacker can now read half of A and H's conversation (the messages from H to A).
Third, at least my version of tera-term with ttssh, stores the key the first time you connect, and will warn you if that key ever changes in a future session.
Well, this obviously still only addresses the server key side. Additionally, this is of little use if I use a client from a different location that doesn't have the public key database. E.g., if I regularly connect to a computer in my school's CS department from home with SSH, all is well. But if one day I'm at a public terminal in my school's library and I want to connect to the same machine in the CS department, the public key database on my computer at home does me little good. You really need a trusted CA.
Further, as the article points out, there is a social engineering aspect. Many users (myself included) don't care that much and hit "ignore" when they get "public key changed" warnings. In my case, this is because I'm connecting to a computer lab of homogeneous machines that isn't very well managed from a PKI standpoint: hosts are renamed to other hosts when the computers fail or the configuration changes (not to mention the round-robin DNS alias that references any one of 40 boxen). "Ignore" is always the easiest option; to borrow a phrase, "my data isn't *that* important."
If I *really cared*, I could put the key on my https server (key signed by verisign), and download the key from there, install it into my ssh client, and bingo, secure connection.
I assume you mean you're retrieving your own personal (client) keys, as retrieving the server's public key doesn't solve any new problems (why trust your CA-verified web server to give you some other server's key when having the server's key CA-signed in the first place would have sufficed?). As I mentioned above, in an SSL conversation in which the client keys are generated for the session, the client key can be spoofed by a man in the middle. This means when you go to retrieve your personal public and private keys from your web server, I could intercept your personal private key. Hell, I could intercept your key and pass a different private key onto you if I wanted. Once I get your private key, I'm set; I can sniff every message sent to you in every "secure" session you enter until you changed your keys, and without having to go through the hassle of the whole man-in-the-middle attack.
Uh, nevermind....
26 + 21 = 47... if those 21 states were voted out of the Union, the other 3 must have been blown off the face of the earth.
You forgot about that fact that 40% of your salary was taken in income taxes before you even got the paycheck that you're using on that new car.
And what service do I get with my income tax? I get "The Government." But what's that? Welfare. But what if I'm an asshole and could care less about impoverished people I'll never meet? The National Endowment for the Arts. What do I care about art; give me my Limp Bizkit and I'm happy. AIDS research. But I don't have AIDS; why should I pay money to save those people? Defense. Yah, but when was the last time the US was invaded? What if I don't want to spend my hard earned dollars so the US can uphold democracy in countries I've never heard of?
Yes, as anybody could pithily point out, taxes are a fact of life. But, more important than that, there's not always a one-to-one correspondence between the taxes I'm paying and the services I'm receiving in return. You can't say, "What the fuck did I get out of the 8 cents I just paid my goverment for this 7-layer Burrito;" it just doesn't work. Property taxes probably offer the most logical correspondence between inflows and outflows, but ultimately the tax system just has to be accepted as a complicated beast of sales taxes, property taxes, income taxes, tarrifs, tolls, and whatever else, the revenues of which make their way into the hands of everyone from the smallest local government to Washington.
Whether this is "right" is obviously a matter of personal opinion. Most people would probably agree on things like defendants having legal counsel made available to them if they cannot afford it, but there is an enormous area open to debate. Income tax withholding, for instance, is something that everyone takes for granted these days, but that has only existed in this country since 1943. Some political parties advocate a much smaller government, and some presidential candidates in the last election were running on a platform that included the complete abolition of the income tax.
A person who makes $100,000 a year pays a *lot* more in takes (income, property, sales, etc.) than a person who makes $15,000 a year, even though the person who makes $15,000 a year probably receives a lot more services from governement. Personally, I'm young and liberal. I pay more in taxes than most of my friends earn. This does not bother me, as I can appreciate the benefits of my taxes, whether I enjoy them personally or philanthropically. If you're paying taxes for some stupid government program you don't believe in, use your vote to express your disapproval. If enough people disagree with you and the program continues, then it was probably for the greater good, as defined by the popular sentiment of the time; you just have to accept this and fork over your hard-earned dollars. The system in which consensus selects representatives who make fiscal decisions works pretty well. Bitch about it all you want, but listing taxes for which you feel you personally receive no tangible service in return is, in my opinion, unenlightened and greedy. If the voters have sided against you, then my opinion is quite possibly "right."
The Fed controls the money supply by changing the reserve requirement for banks, buying and selling Treasury bills and notes, and changing interest rates. The Fed does not just print more cash at the whims of the govenment; this can drastically affect the economy and is difficult to take back. I would not describe the issuance of T-Bills as "Printed out of thin air when someone else wants money," but rather as a modern economic implement to control the money supply.
Real programmers use 32-bit time_t, for job security purposes: it guarantees extra work for them to do when January 19, 2038 rolls around (or should I say rolls over).
Yeah, I just love how this calculator nerd proposes a calendar totally changes what has been in use by most of the world for over four centuries and says we should start using the new system on January 1, yet he hasn't quite bothered to figure out how leap years will work.
Leap years just strike me as one of those minor issues that should be hammered out *before* you propose a drastic change to the calendar system if you expect to be taken seriously...
What the hell is a computer? Is it related to pewter?
Nor is the goal of AP Computer Science to turn out C++ coders. I'd imagine you'd find the College Board's goals for AP CS students are not far off from your own ideals. If you took the actual test, you'd see that it's very little about "What do you use endl for?" and very much about "What are the properties and structure of a binary tree?"
That is why the language for the AP class ought to be absolutely as simple as possible to convey the concepts.
Then what language do you propose? I agree that Java is a simpler, cleaner language than C++; I'd imagine most people would concur. There are lots of other good object-oriented programming languages in the world; some people posted to this story requesting Smalltalk, others might want Ada 95, others might want Steven's Toy Language. These, of course, are not good choices, not as much because they are of little practical value to the student, but because they are foreign to the instructors. But, despite what you might think, I would consider practical value to the students to be a worthwhile consideration: Smalltalk is a clean, simple, pure-OO language, and superior to C++ in most every way, but if you take a student who has learned to program in nothing but Smalltalk and a student who has learned to program in nothing but C++ and put them both in front of a Java compiler with the job of writing your LZW compression project, who do you think would fare better?
The fact of the matter is, computer programming has for a very long time been focused squarely on imperative programming languages, and is these days very focused on object oriented programming. These seem to me, then, to be reasonable topics for a high school-level CS class to endeavor to impart knowledge about. At the time the College Board made the switch from Pascal, C++ was the natural choice to satisfy the pedagogical demands. Java had no doubt not proven itself to the glacial folks in the standardized testing world.
You might argue that imperative programming is not a good medium for teaching the concepts of computer science. I wouldn't disagree. I spent a year studying at the University of Edinburgh, where the CS students all start out learning ML. The students bitched and bitched and decried ML left and right -- even more so after they learned an imperative language -- but I though it was pretty cool that they hadn't been thrown into the murk of pointer arithmetic and endianness like I had.
Finally, some people have posted suggesting that the all-powerful language-neutral exemplar, pseudocode, should be used, as language isn't important. This is ridiculous. The AP CS test has to test knowledge of things like pass by reference vs pass by value, self-referential data types, etc. To do so you need constructs in your programming language to support this (e.g., pointers/references). In a multiple choice question on a pseudocode code sample, how is the College Board going to express whether an rvalue is having its value taken or a reference to it? You obviously have to have notes or syntax to express these things, and the kids taking the test have to digest it. I'd much rather spend a little bit of time learning the basics of a "real" language rather than have to guess at the intentions of the author of some fucked up pseudocode...
C++ is the medium, not the message.
Marshall McLuhan would argue that the medium strongly controls the discourse available to the entities conversing in a given programming language. I would agree; a C++ programmer will think very differently from a Prolog programmer. Ultimately, though, C++ was a good, practical choice of CS worlds for the high school-aged computer scientist to dip his feet into. (And Java, of course, is better.)
Besides, it's pretty much impossible to offer a standardize multiple choice test on programming if you don't assume some common PL knowledge. The GRE Computer Science Subject Test, for instance, assumes you know C and Pascal.
Doesn't the current AP CS test, which is on C++, already cover OO? I have no experience with it (I took the Pascal version in 1996), but it seems from the AP CS course description on the College Board website that OO is already very much a part of the course... Does someone who has taken the C++ version want to comment?
Besides, how can you teach C++ without teaching OO? That's just C (well, plus iostream, default parameter values, const, ...).
If you read the post to which I was responding, you'll see the point I was making wasn't that C has a fixed word size, it was that Java has no such thing as native support for arbitrary precision numbers.
Maybe you've just never met any of the 64 million users AOL claims.
Yah, I'd like to say "who cares about IM compatibility." I didn't think instant messaging programs were a big deal. I quit using them.
But several weeks ago I followed a banner on Yahoo to a survey that solicited people's opinions on various IM topics to help Yahoo improve Messenger. It had questions asking me to rate the importance of features like streaming telivision and MP3 playback in my instant messaging tool. MPFUCKING3 playback? Are people mentally retarded and unable to install any program on their computer other an IM?
Well, it sounded at least like Yahoo's betting on it... IMs have that whole contagion thing going for them: your coworkers and girlfriends and grandparents and grandchildren all want to send you their ten word thoughts-of-the-minute, so you have to install the appropriate program. You never get grandparents emailing you, prodding you to install Windows Media Player on your computer...
Sorry about the rant. I live in an igloo and am out of touch with the trends of the Internet. But at least I'll be safe from future IM mind control plots.
Programs can be proven correct in any language for which there exists a complete formal semantic definition.
For instance, using denotational semantics you can reduce every state and state transformation in the rules of a programming language to mathematical functions (e.g., defining the mathematical functions and states for what a while loop does). Then, with these functions, you can prove correctness properties (e.g., this state will always provably go to this state, which will always provably go to this state, in accordance with the specifications of the problem we're trying to solve).
In practice, this isn't very useful or practical for proving that Word 2000 won't crash. Nor will it let you prove that a TM will halt with a certain input; it's more about proving that the steps the TM takes are correct. It can be useful for proving correctness of things like translation (compilation) by guaranteeing that the transformations you apply to elements of the source language yield elements of the target language that have the same meaning.
BigInteger has nothing to do with the Java language. It's just a regular old class written in Java that stores its magnitude as a big-endian array of those 32 bit ints. If it didn't already exist in the API you could write it yourself. If you download the API source and used BitInteger as a reference, you could probably write the same thing in C/C++ in under an hour. Or you could use one of the many existing aribitrary precision C math libraries in the world.
Nice pun.
Last year a group called UBSB came out with a noise album, Traceroute, on Ash International records. The music was created by taking a dump of backbone traffic and turning it into sound. Here's a review I found:
"UBSB
-Traceroute (ash) LP SFR 21.-
Great collaboration between Ulf Bilting, Edwin van der Heide, Zbigniew Karkowski and Atau Tanaka. The concept : "Data harvested from the internet in early 1999, from a research center in Scandinavia. This data is rendered to analog to protect the original data from being reverse engineered or reconstructed. We created a Unix software agent that sat along a high bandwidth backbone pipe, essentially eavesdropping, gathering data, writing out a soundfile of everything it saw. Ethernet datapackets were consecutively written out to a file with no timestamp. Later the file header was hacked to open it in an audio editor." A succession of digital noises and loops manipulated to create a hypnotical and intense work. Really good in the field of digital noise. Recommended."
It's pretty good.
Both uses seem pretty useful to me.
Both seem pretty efficient, too, as modern forks are copy-on-write.
And for the former use (a fork followed by an exec) you'd be using vfork.
Considering the register's called AH, I'd guess he's writing x86 assembly.
In Intel assembly, MOV's destination parameter is on the left. This is switched compared to most of the Unix world. And the 68k world.
In general, this is true: threads share a memory space and other things that processes do not. A process is an independently executing instance of a program; a thread is a sequence of execution within a process.
In the Linux world, though, process creation (fork) and thread creation are both built on top of a Linux-specific system call called clone() that has arguments that specify what you resources (file descriptors, data pages, etc.) you want shared between the new and parent process/thread and what you want duplicated. This is why, in Linux, threads have their own process IDs and show up separately in process listings. And in top.