"It's hard for me to be a libertarian and stand by my principles when I hear news like this, but I have to stick to my guns, even when I fervently personally disagree with something."
And stuff like this is why I'm no longer a Libertarian.
Libertarians excel at being suspicious of government, and rightly so.
Libertarians see government as a massive power that can and, routinely does, swamp the power of individuals.
But Libertarians have a blind spot: they see corportions as nothing more than a Mom & Pop store scaled up, and so desire to extend to the "Big Mom & Pop" store the same rights as Mom and Pop.
But -- as so often in software -- there's a scaling problem. A big corporation accumulates far more power than Mom & Pop's Conveneience Store: it can hire legions of lawyers, armies of lobbyists and PR men and advertisers. To the point that it can harness the State to its bidding in a way that a Mom & Pop never could.
And unlike Mom & Pop's -- where you can complain directly to Mom or Pop -- the mega-corporation has few of the vulnerabilities of a small enterprise.
But the Libertain mind-set continues to see a mega-corporations as "nothing more than" a successful small business.
To a Libertarian, military conscription is slavery, but a town with only one major employer -- such as a WalMart -- literally locking employees in the store after their shifts end is just good capitalism.
Liberatarians, I think, in their hearts believe in some idealistic Jeffersonian ecomony made up of small businesses and gentlemen farmers, with a wide Western frontier for the disgruntled to relocate to.
Maybe this was true two hundred years ago, but today Libertarians have to extend their suspicions of government to also encompass any super-large centralized power-weilders -- notably, Big Business.
Or Libertarianism becomes increasingly irrelvant, "protecting" us from government intrusion but shrugging when Mega-Corp does exactly the same. In the end, the injury to me from the intrusion is the same, because as an individual I'm just as unable to fight Corporate Tower as City Hall.
"Is anyone really browsing the web from their cell phone? PDA? The resolution and functionality in these things are terrible."
Data point: for quite a while, I read Slashdot -- and even replied to comments -- on my Zaurus PDA.
As cell phones with decent screens become more ubiquitous, more and more people will be browsing from them, and you'll be locking out more and more potential customers.
"Okay, I'll buy that. However, nothing prevents you from creating your own ImmutableList wrapper around a List instance and not exposing any mutators."
Sure. No argument from me on that. Nothing prevents me from creating my own class that doesn't throw NoSuchMethod.
But the whole point of libraries, you'll agree, is to save the client programmer from having to roll his own, design his own, test his own, code his own -- and then make it interoperate with your code or his code.
And it's his code (not yours, not mine) where the problem sneaks in. (It's always his code, not mine.;) )
Say I'm using Joe's Nifty Library O' Functions. Joe, being a good programmer, doesn't try to roll his own container code -- he knows that no one wants to read up on how his JoeArray or JoeInterator or JoeList are different from the standard, so Joe -- and he's right to do this -- uses standard Java core library classes.
So far so good. But to be good, Joe has to use java.util.List. That's actually an interface, so Joe uses List as his public contract and java.util.ArrayList as the actual implementing class. He uses it as a public member of Joe's Own Nifty Widget with Lots O' Features.
Now you use Joe's library in your code, and you routinely use Widget.getObserverList() like this: myWidget.getObserverList().add( myCallback ) and all is well.
But at some point Joe adds Lenny's Luscious Library to his own code, because it adds all sorts of new functionality to Joe's stuff. But Lenny's library requires that Jow use Lenny's List class. It also implements the java.util.List interface, so Joe -- rather than copy stuff back and forth between lists, just replaces the ArrayList with a LennyList. Joe's code still works, and he releases Joe's Library 2.0.
You upgrade to Joe 2.0, to take advantage of all the new functionality he's added -- in fact, your 2.0 release leverages and relies on lots of the new functionality in Joe's library, and there's no way you could roll your own version in time to meet your client's deadline. And the compiler never complains about your upgrade, because all the interfaces are right, no method calls are made to functions that don't exist.
But at runtime, your code fails. Because Lenny's List has an add function, but never implements beyond throwing an exception. Incredibly enough, Lenny's List is a special proxy listinstanceof too often, they'll just say "see, I told you, object oriented code and using exceptions just ain't reliable."
Of course, the problem is that in using NoSuchMethod, Java isn't actually being object oriented, but after the code throws, try explaining that to the converted C programmers doing java. (Again, not you, not anyone who has read this far -- but we all know and have worked with someone like this, no?)
Now of course, these sort of problems won't arise on small projects. But they'll inevitably arise when your JSP library is calling your Java App server's code which is calling, via RMI, your Distributed Business Object which is calling, via JSQL either an Oracle database (for your domestic operations) or a Sybase database (for the European subsidiary).
"I sometimes find distributing an extra 30 MB [the.net run-time] a bit inconvenient."
Please download my new folding bicycle! Its lightweight aluminum frame means it's easily portable and rugged too! when not biking, fold it up and carry it under your arm like a briefcase! The perfect form of personal transportation!*
* Note: lightweight bicycle application is powered by a Soviet-era nuclear submarine, a separate download.
"That exception lets you know when you're breaking an API contract -- though a List may have add() methods, if you want that List to be immutable, is it preferable to throw an exception from a mutator or remove the mutator from the subclass completely? Or should we just take add() out of the List interface?"
If those are the motivations, we should have an ImmutableList class without an add function, and derive the List with an add function from it (in C++, probably by private inheritance, that is, inheritance of implementation). Only the List class with the (working) add should publically inherit from the interface with an add function.
Problem solved.
"I could read stupid C++/D/C/Ruby/whatever code and then blame the language too, you know."
Sure, sure. Don't be touchy. I code Java too, in fact I'm Sun Certified.
What I'm saying is, you tell me you'd "fight" unnecessary uses of instanceof, and I believe you. I'm just trying to make your fight easier. The point is, if your core libraries don't take liberties, your fellow client coders will be less likely to -- or at least less likely to use the bad example ("but the core library does it, why can't I?") when a good java programmer, like you, points out the problem.
MSC++ exclusive features are only slightly different from the ANSI standard, while GCC ones are so absurdly different that you need to learn a whole new way of thinking
You make a good point, and what GCCs does is actually a good thing: something slightly different is like The Crying Game -- hey, she looked like a chick until I'd invested in weeks of dating, and when after all that effort I got into her pants, out popped a pee-pee!
Same with Microsoft extension -- you gets lots of people who don't notice the slight difference -- the Adam's Apple, if you will -- and think that C++ is what Microsoft calls C++. Then they get a real girl, and don't know what to do with her, because they've been dating Microsoft "almost girls" all their lives.
GCC's extensions, on the other hand, are like a big, hairy, honest gay guy buying you a drink in gay bar: you see the bulge in the pants, it's totally different, and hey, if you want to try that lifestyle, it's gay, but, as Seinfeld says, "not that there's anything wrong with that". But it's different enough that you know it's different, and you know if you go back to girls, you'll need an entirely different technique to get anywhere.
No offense to anyone intended by the analogy: the point is that obvious differences are honest -- they don't fool you into thinking you're not using an extension. Slight differences are pernicious, not because they're necessarily bad, but because it makes it hard to recognize when an extension is being used.
A similar concern is why C++'s casting is so ugly compared to C's: a C style cast (MemPtr *a = (MemPtr) 0xb800;) looks too much like a function call or an expression to be easily grepped for. A C++ cast (MemPtr* a = reinterpret_cast 0xb800;) looks like a cast and nothing else. And it's ugly to boot, to remind you that casting should be done only when absolutely necessary.
Shaving off a 'few' rough edges to make it more easy for newbies... It's that what Sun tried to do? (hint: java)
Java's ok, but a few mistakes were made. Among the worst: over-reliance on the instanceof operator, and the need for something called a MethodNotSupported exception.
Now think about what MethodNotSupported means in the context of Barbara Liskov's Substitution Principle:
We've got a language that supports inheritance. Inheritance makes sense only insofar as Liskov's Principle is followed. Put simply, if class D inherits from class B, any "promises" that B made -- it's interface, both syntactically, in terms of public member names, and semantically, that the member functions really do do some particular thing -- any of those promises must also be kept by D, because we are saying, as Liskov tells us, that D is-a B.
If I hand you an instance of D, and you plug it in place of am instance of B, anything that the B instance does, the D instance must at least do. Otherwise, how can you safely and with confidence substitute a the D in where the B used to be?
But along comes Java, and the MethodNotSupported exception -- a method used by some of Java's core library, including, dismayingly enough, commonly used container classes. It's used so that a derived class can suddenly and at run-time throw it, telling you, "Whoops! Ha ha! Trickled you, I can't in fact really do what B promises! I claim I'm a B, but really, I'm not!"
Now imagine you had a component stereo, and you replaced your tuner with a "better" tuner with all the same jacks as the original. You'd plug it in and expect it to do the same work as the original tuner, just with better reception or fidelity or whatever. Now what if you plugged in the new tuner to the old connections, and suddenly its display read: "Sure, I have a two-plug RCA input, but it's not actually connected to anything, so you can plug in an RCA jack but no sound will come out". That's what having a method that throws MethodNotSupport is like: the jack -- or member function name -- is there, but the implementation is not.
D inherits ("extends") B, it says so right there on the label, but no sound comes out. With Liskov undermined, you don't really have an object oriented language at all. You don't really have true inheritance. What you have is a sham, a sham that can break down on you at run-time because an object is lying to you.
And the upshot is that you don't see enough real object oriented programming by client Java coders. If the core library can get it that wrong, why should clients of that library bother to adhere to a standard?
So you get lots of java code that does RTTI using instanceof and if( p instanceof Foo )... else if( p instanceof Bar ) ladders rather than calling p.virtualFunction(). Because coders won't take seriously OO that the language and its core libraries don't take seriously.
It is interesting to see how an abstract language like a programming language evolves through time
If you find that interesting, you're going to love Stroustrup's The Design and Evolution of C++.
It's an almost novelistic discussion of how he made C in to C++, the various trade-offs required, and how he decided what changes to make or not make. For example, why the dot operator (".") can't be overloaded, but the parentheses can be, and why (contra Goslings Java) operator overloading is a good thing (short answer: it makes syntax match semantics).
If you ever want, or need, to develop a large-scale, flexible and general system of anything (and what's more general than C++, a programming language used by millions to write both Object Oriented and just "better C" code?), D&E is a wealth of experience, carefully and fully explained.
And, like a novel, it's for the most part a fun read. Grab a copy, and you'll not only understand C++ better, you'll understand why C++ is what it is, and how it got there from C.
So MS denies something they clearly did wrong, what's new?
You, sir, are entirely unfair!
Microsoft clearly said The downgrade in threat level merely represented an effort to be "fair and consistent with how Windows AntiSpyware (Beta) handles similar software from other vendors,"
It's entirely consistent. Microsoft has consistently held their software offerings to, ahem, an improved standard.
I mean, have you ever looked at how Microsoft's C++ compilers, um, pioneered their own standard, entirely different -- and, so long as you don't like correct exception handling, consistent RTTI, or the availability of a Standard library, entirely better -- from the ANSI/ISO standard. Or look at the, um, improvements to JavaScript and the browser DOM.
Or just look at the XML for Word docs. Ok, well absent a non-disclosure agreement you can't actually look at it, but trust Microsoft it's entirely consistently inconsistent with anything else out there.
How anyone can say Microsoft isn't being consistent in its approach I just don't understand at all.
Just from the linked article, I'm not sure that I buy the premise.*
HOWEVER, it appears the parent poster is one of the three authors of the paper under discussion, so somebody ought to mod the parent post up as "Informative".
*(Just for a start, the article quotes the researcher as saying,
"In thinking of cognition as working as a biological organism does, on the other hand, you do not have to be in one state or another like a computer, but can have values in between -- you can be partially in one state and another, and then eventually gravitate to a unique interpretation, as in finally recognizing a spoken word," Spivey said.
But a computer can and routinely does represent multiple or partial states.
A multiple state representation: const ONE_STATE = 0x1; const ANOTHER_STATE = 0x2 ; int currentState = ONE_STATE | ANOTHER_STATE ; while( dataSupportsEitherState() ) getAdditionalData();
A partial state, or a "value in between": double quantity = 0.5;
(A purist will point out that multiple or partial states are implemented as additional states; but it's the interpretation, not the implementation, that matters.))
By the way, angels are in the Bible and part of the basic Christian theology, so equating them in with belief in witches... in a derogatory manner is highly insulting. Your lumping of belief in God along with aliens also reveals your trollish, elitist slant is about as reputable as these garbage poll results.
I didn't insult you, Jack. Those were the questions on Fox News's poll, which I linked to.
But rather than follow the link, you chose to feel insulted, to blame me for it, and call be "trollish" and "elitist". So much for your cool temper, informed judgment, or reading comprehension, friend.
Not to mention thmany many Americans who still believe Iraq had WMDs and was aiding Osama bin Laden, who believe Abu Ghraib was solely the fault of low-level rankers, while simultaneously believing the latest justication for the war, that its aim was to "give Iraq the 'Gift of Democracy'".
Oh hell, I'll mention that too. Verbatim from the Harris Poll, February of this year:
88 percent of U.S. adults believe that Saddam Hussein would have made weapons of mass destruction if he could have (down slightly from 90% in November).
76 percent believe that the Iraqis are better off now than they were under Saddam Hussein (same as November).
64 percent believe that history will give the U.S. credit for bringing freedom and democracy to Iraq (up slightly from 63% in November).
64 percent believe that Saddam Hussein had strong links to Al Qaeda (up slightly from 62% in November).
61 percent believe that Iraq, under Saddam Hussein, was a serious threat to U.S. security (down slightly from 63% in November).
More surprising perhaps are the large numbers (albeit not majorities) who believe the following claims not made by the president and which virtually no experts believe to be true:
47 percent believe that Saddam Hussein helped plan and support the hijackers who attacked the U.S. on September 11, 2001 (up six percentage points from November).
44 percent actually believe that several of the hijackers who attacked the U.S. on September 11 were Iraqis (up significantly from 37% in November).
36 percent believe that Iraq had weapons of mass destruction when the U.S. invaded (down slightly from 38% in November).
I guess if you believe in angels and witches you can also believe that teaching creationism and limiting stem cell won't undermine the very science you count on to keep you healthy into your nineties, because you can just count on your benificent god to save you with miracles.
As to why it is your problem, it means if you don't watch the show in a way ACNielsen tracks it, the show is more likely to go away.
So you're saying we should only trade bad shows over BitTorrrent, in hope they'll go away? That's just zocky!
You've convinced me! I'm going to reformat one of my harddrives and stock it full of NBC's Bible-based miniseries Christ vs. Satan smackdown, Revelations.
Uhm, do Fundies waiting on "The Rapture" know how to use BitTorrent? Maybe we could hand out CD-ROMs at Sunday schools and Revival meetings?
Maybe I'll have room for Fox's paean to the effectiveness and morality of torture as an everyday (every Day, get it?) tool of extra-legal terrorist hunting, 24. (Yeah, it's a decent show, but its pernicious message is, only naive Democrats don't enjoy breaking fingers for Patriotism.)
"Sadly, it seems more astonishing if a day does by when a major personal information breech is NOT reported."
Right.
These breaches are inevitable. That's why, as I've said for a while, it doesn't really matter if an organization -- whether it's Google or the government -- promises to "do no evil".
Even an organization run by saints -- and no organization is run by saints -- can be breached.
So there are two things that need to be done: first, we need to convince organizations, both corporate and governmental, to limit the information they collect to what is actually necessary for their functioning. And access needs to limited and audited to prevent misuse.
Given prevailing corporate ethics -- that whatever is good for profits is ethical -- the "convincing" will have to be in the form of data-protection laws and privacy-protection laws that limit information collecting and impose penalties for misuse or failing to adequately safeguard it.
Second, what information is collected needs to be encrypted. While that won't prevent all hacking, it will mean that copies of data stolen in bulk will be pretty much useless to the thieves.
Again, it's not sufficient to think, "well, I trust Google (or the FBI or Social security administration or my bank) won't misuse my information" -- it's necessary to remember that organizations change sometimes without warning (see the first link, above), and that external hackers internal misusers can pervert any system (see the second link).
Our response has to be more than "whistling past the graveyard" hoping that nothing will go wrong. Breaches are inevitable, and our laws and our data-retention worse practices -- not the best practices we hope for, but the worst we allow -- must reflect that.
"But how about sharing it with a multinational company that is able to throw massive resources into helping you to develop your program?"
You make a persuasive argument, and I largely agree with you -- my problem isn't with the companies that have and do contribute to OS, or that hire OS coders to work on OS projects.
I agree, that's the sort of arrangement that helps everyone. But it's also an honest arrangement: the businesses know that they're getting a great deal -- a whole operating system that drives the sales of their products and services -- and the coders know they're getting a great deal -- good pay for what they'd do for free as a hobby.
And you're largely right that the freeloaders only cost download bandwidth.
My problem is when the freeloaders start telling Linus that he can't take what is still his hobby (and now lots of other people's hobby too) in the direction he wishes to take it.
My larger question is how to get the freeloading companies to act more like the honest-dealing companies.
Because the freeloaders hurt the hobby with their demands, and they also get -- to a certain degree -- a competitive advantage over the Transmeta and IBMs which are supporting them by hiring the coders. Of course, I say "to a certain degree" because Transmeta and Red Hat, by hiring the coders, do get some say in where the coding is going.
If other companies want that, then, to be fair, rather than bitch about linux's direction, they ought to hire a linux kernel coder.
I mean, I've never contributed to the kernel, but I also don't call up Linus (or haunt the newsgroups) with demands.
Again, I think we're largely in agreement and I want to emphasize that your points are good.
(I've amazed that my (not open source) spell-checker has learned to spell Transmeta.)
"CA wants Linus and Andrew to spend all of their time working on "Enterprise" features and none of it on things like improving Linux's real-time performance and integrating drivers for non-server hardware."
And this points to the real evolution in linux that has Microsoft sweating: what CA wants is a kernel that works better for businesses. Why? Because businesses have come to rely on linux.
Business (in general, I'm not talking about CA specifically but about all the businesses that now use linux in their operations or, even more, in their firmware) to linux: "Linus, we didn't pay you to write the kernel, we didn't give you much help in writing it, we've often appropriated it and ignored our legal responsibility under the GPL while at the same time keeping out own drivers closed-source and binary only. But, ah, now that we use -- for free -- what started out as your hobby project, we expect you to give up your hobbyist ways and toe the line, because it's now our bottom line."
This really isn't all that much different from the RIAA's "buggy-whip manufacturers'" outlook on file-sharing: "we've always made buggy-whips, and we loved it when Linus and the rest of the OS community were producing free leather for us to make buggy-whips, but now that you're producing those infernal auto-mobiles, we'll, you better stop before you threaten our profits."
The one thing I've never liked about the GPL was that it gave the same rights to a for-profit business as to a fellow hobbyist. I'm more than glad to share my code with a fellow, who like me, is coding for the love of it. I'm a bit less happy to share with someone who just sees my uncompensated work as a way for him to parasite off it.
Linus should tell CA that businesses have gotten far far more -- just in dollars, I'm not talking intangibles -- from Linus than they can ever repay, and that he's going to go on doing what makes Linus happy. After all, that attitude worked out pretty well for the parasites last time around.
As for the rest of us, maybe those of us who can and do code should ask ourselves why we're so happy to give our work away for free to businesses that do their level best, day in and day out, not to give away anything for free.
"let's note that you fled Wikipedia just as an arbcom case was accepted against you"
Fled? You really do think you're running a police-state, don't you? Yes, I was shaking in fear, one step ahead of your thought-policing.
Actually I did "flee" -- to Ohio. I gave up my apartment lease, moved out, and moved to Ohio for a month to volunteer at the Ohio headquarters for Kerry-Edwards.
After weeks of 18 hour days seven days a week, I created from scratch (and local Boards of Election data) a distributable offline database that could be taken on laptops all over the state, which probably got somewhere from 5,000-15,000 Democrats to their correct polling places on Election Day. This was especially important, as Ohio had redistricted since the original Kerry-Edwards database had been populated, and Ohio's Republican Secretary of State had ruled that votes cast at incorrect polling places wouldn't be counted.
You of course, spent your time more wisely, getting people banned from Wikipedia.
I thought saving America from George Bush was just a leetle more important than, oh, your (admittedly successful) effort to save "Steak and Blowjob Day" from deletion at Wikipedia.
"I'm fascinated at how #2's drive away a few and attack (managing?) the ones that hang around for the punishment, decrease the production of quality content AND be praised for doing it. It's counter intuitive to me."
Well, in defense of admin ("#2"), he climbed to power based on going after unpopular editors.
Basically, there's a lot of groupthink at Wikipedia, and a tremendous amount of defensiveness too. Why, I'm not quite sure, but there's a cadre there that takes any criticism very personally, and, believing themselves all to be central to the smooth functioning of Wikipedia, they take personal criticism as criticism of, and a threat to, Wikipedia itself.
Guy #2 -- and let me apologize for mincing words, as anyone familiar with Wikipedia knows who I'm talking about, guy #2 is a user who calls himself "Snowspinner". Snowspinner made his Wikipedia "career" by attacking those critics. Some of them were genuinely bad editors, and many Wikipedia users were relived to see them gone and willing to overlook the way Snowspinner got rid of them, by means fair or foul. Because in many cases, Snowspinner got rid of people by relentless, petty harassment, until the victim finally broke a Wikipedia rule in his frustration (usually the rule against personal attacks).
One of his tactics should be familiar to any student of recent American politics: Snowspinner declared his victims to be "trolls" -- an elastic term with no real meaning but with strongly pejorative connotations. He then said or implied that anyone defending a troll must also be a troll -- compare to John Ashcroft's "Your tactics only aid terrorists, for they erode our national unity and diminish our resolve...."
While there were real disruptive editors, Snowspinner pretty much called anyone who questioned his tactics a "troll", and implied that arguing for due process was a "delaying tactic" only used by trolls. (Compare to the Slashdot chestnut, "if you're innocent, why do you fear police surveillance?") So it became politically highly costly to oppose Snowspinner, or defend his victims, or even to argue that his victims -- whatever they'd done -- deserved due process and fair treatment.
Snowspinner himself made it abundantly clear -- he has stated with pride on his user page -- that even as he "prosecutes" dissenters for breaking Wikipedia rules, he does not feel himself bound by the very rules he enforces. So Snowspinner was willing to go farther and take more risks in going after the questioners who threatened the established powers. And those in the power structure were delighted to have Snowspinner as their attack dog. Due process and fair treatment got thrown out the window as the established Wikipedians saw a quick and easy way to get rid of thorns in their sides that had bothered them for some time.
Ironically enough, for someone so concerned about ridding Wikipedia of trolls, Snowspinner may himself be a troll. Unlike most new users, Snowspinner
on his first day as an editor already knew about Wikipedia:Requests for adminship (a page I didn't find until some months into editing);
by his second day as a editor had found Votes for Deletion and was asking that the page "Roman Catholic Church" (!) be deleted;
by his fifth day editing had opened a "Request for Comment" (a sort of Wikipedia "dispute resolution" public semi-trial);
and by his 13th day of editing was involved in a Wikipedia Arbitration case, Wikipedia's highest "court".
How does a new user even know about these esoteric corners of Wikipedia? And what new user involves himself so confidently and so quickly? Either a fire-brand or someone who is not really a new user and is editing as under a sockpuppet account.
Once Snowspinner had burrowed into the power structure, by being the "dishonorable hatchet-man" willing to go to almost any lengths to get rid of "bad" editors, he then went after anyone threatening the status quo. Because whether or
"This rant is all very well, but there is of course another side to this story."
Well, ok, we're all listening. What is the other side of the story?
(Unlike some Wikipedia admins,) I'm not so convinced that I'm always right that I feel a need to silence other opinions; to the contrary, I'd very much like to hear what you think the other side of the story is. So tell us. If you're right -- and I'm sure some of your points will be right -- I'll gladly admit that in a follow-up post.
"It's hard for me to be a libertarian and stand by my principles when I hear news like this, but I have to stick to my guns, even when I fervently personally disagree with something."
And stuff like this is why I'm no longer a Libertarian.
Libertarians excel at being suspicious of government, and rightly so.
Libertarians see government as a massive power that can and, routinely does, swamp the power of individuals.
But Libertarians have a blind spot: they see corportions as nothing more than a Mom & Pop store scaled up, and so desire to extend to the "Big Mom & Pop" store the same rights as Mom and Pop.
But -- as so often in software -- there's a scaling problem. A big corporation accumulates far more power than Mom & Pop's Conveneience Store: it can hire legions of lawyers, armies of lobbyists and PR men and advertisers. To the point that it can harness the State to its bidding in a way that a Mom & Pop never could.
And unlike Mom & Pop's -- where you can complain directly to Mom or Pop -- the mega-corporation has few of the vulnerabilities of a small enterprise.
But the Libertain mind-set continues to see a mega-corporations as "nothing more than" a successful small business.
To a Libertarian, military conscription is slavery, but a town with only one major employer -- such as a WalMart -- literally locking employees in the store after their shifts end is just good capitalism.
Liberatarians, I think, in their hearts believe in some idealistic Jeffersonian ecomony made up of small businesses and gentlemen farmers, with a wide Western frontier for the disgruntled to relocate to.
Maybe this was true two hundred years ago, but today Libertarians have to extend their suspicions of government to also encompass any super-large centralized power-weilders -- notably, Big Business.
Or Libertarianism becomes increasingly irrelvant, "protecting" us from government intrusion but shrugging when Mega-Corp does exactly the same. In the end, the injury to me from the intrusion is the same, because as an individual I'm just as unable to fight Corporate Tower as City Hall.
"Is anyone really browsing the web from their cell phone? PDA? The resolution and functionality in these things are terrible."
Data point: for quite a while, I read Slashdot -- and even replied to comments -- on my Zaurus PDA.
As cell phones with decent screens become more ubiquitous, more and more people will be browsing from them, and you'll be locking out more and more potential customers.
Mod parent up. An excellent post for a number of reasons.
"Okay, I'll buy that. However, nothing prevents you from creating your own ImmutableList wrapper around a List instance and not exposing any mutators."
;) )
Sure. No argument from me on that. Nothing prevents me from creating my own class that doesn't throw NoSuchMethod.
But the whole point of libraries, you'll agree, is to save the client programmer from having to roll his own, design his own, test his own, code his own -- and then make it interoperate with your code or his code.
And it's his code (not yours, not mine) where the problem sneaks in. (It's always his code, not mine.
Say I'm using Joe's Nifty Library O' Functions. Joe, being a good programmer, doesn't try to roll his own container code -- he knows that no one wants to read up on how his JoeArray or JoeInterator or JoeList are different from the standard, so Joe -- and he's right to do this -- uses standard Java core library classes.
So far so good. But to be good, Joe has to use java.util.List. That's actually an interface, so Joe uses List as his public contract and java.util.ArrayList as the actual implementing class. He uses it as a public member of Joe's Own Nifty Widget with Lots O' Features.
Now you use Joe's library in your code, and you routinely use Widget.getObserverList() like this: myWidget.getObserverList().add( myCallback ) and all is well.
But at some point Joe adds Lenny's Luscious Library to his own code, because it adds all sorts of new functionality to Joe's stuff. But Lenny's library requires that Jow use Lenny's List class. It also implements the java.util.List interface, so Joe -- rather than copy stuff back and forth between lists, just replaces the ArrayList with a LennyList. Joe's code still works, and he releases Joe's Library 2.0.
You upgrade to Joe 2.0, to take advantage of all the new functionality he's added -- in fact, your 2.0 release leverages and relies on lots of the new functionality in Joe's library, and there's no way you could roll your own version in time to meet your client's deadline. And the compiler never complains about your upgrade, because all the interfaces are right, no method calls are made to functions that don't exist.
But at runtime, your code fails. Because Lenny's List has an add function, but never implements beyond throwing an exception. Incredibly enough, Lenny's List is a special proxy listinstanceof too often, they'll just say "see, I told you, object oriented code and using exceptions just ain't reliable."
Of course, the problem is that in using NoSuchMethod, Java isn't actually being object oriented, but after the code throws, try explaining that to the converted C programmers doing java. (Again, not you, not anyone who has read this far -- but we all know and have worked with someone like this, no?)
Now of course, these sort of problems won't arise on small projects. But they'll inevitably arise when your JSP library is calling your Java App server's code which is calling, via RMI, your Distributed Business Object which is calling, via JSQL either an Oracle database (for your domestic operations) or a Sybase database (for the European subsidiary).
"I sometimes find distributing an extra 30 MB [the .net run-time] a bit inconvenient."
Please download my new folding bicycle! Its lightweight aluminum frame means it's easily portable and rugged too! when not biking, fold it up and carry it under your arm like a briefcase! The perfect form of personal transportation!*
* Note: lightweight bicycle application is powered by a Soviet-era nuclear submarine, a separate download.
"That exception lets you know when you're breaking an API contract -- though a List may have add() methods, if you want that List to be immutable, is it preferable to throw an exception from a mutator or remove the mutator from the subclass completely? Or should we just take add() out of the List interface?"
If those are the motivations, we should have an ImmutableList class without an add function, and derive the List with an add function from it (in C++, probably by private inheritance, that is, inheritance of implementation). Only the List class with the (working) add should publically inherit from the interface with an add function.
Problem solved.
"I could read stupid C++/D/C/Ruby/whatever code and then blame the language too, you know."
Sure, sure. Don't be touchy. I code Java too, in fact I'm Sun Certified.
What I'm saying is, you tell me you'd "fight" unnecessary uses of instanceof, and I believe you. I'm just trying to make your fight easier. The point is, if your core libraries don't take liberties, your fellow client coders will be less likely to -- or at least less likely to use the bad example ("but the core library does it, why can't I?") when a good java programmer, like you, points out the problem.
MSC++ exclusive features are only slightly different from the ANSI standard, while GCC ones are so absurdly different that you need to learn a whole new way of thinking
;) looks too much like a function call or an expression to be easily grepped for. A C++ cast (MemPtr* a = reinterpret_cast 0xb800 ;) looks like a cast and nothing else. And it's ugly to boot, to remind you that casting should be done only when absolutely necessary.
You make a good point, and what GCCs does is actually a good thing: something slightly different is like The Crying Game -- hey, she looked like a chick until I'd invested in weeks of dating, and when after all that effort I got into her pants, out popped a pee-pee!
Same with Microsoft extension -- you gets lots of people who don't notice the slight difference -- the Adam's Apple, if you will -- and think that C++ is what Microsoft calls C++. Then they get a real girl, and don't know what to do with her, because they've been dating Microsoft "almost girls" all their lives.
GCC's extensions, on the other hand, are like a big, hairy, honest gay guy buying you a drink in gay bar: you see the bulge in the pants, it's totally different, and hey, if you want to try that lifestyle, it's gay, but, as Seinfeld says, "not that there's anything wrong with that". But it's different enough that you know it's different, and you know if you go back to girls, you'll need an entirely different technique to get anywhere.
No offense to anyone intended by the analogy: the point is that obvious differences are honest -- they don't fool you into thinking you're not using an extension. Slight differences are pernicious, not because they're necessarily bad, but because it makes it hard to recognize when an extension is being used.
A similar concern is why C++'s casting is so ugly compared to C's: a C style cast (MemPtr *a = (MemPtr) 0xb800
Shaving off a 'few' rough edges to make it more easy for newbies... It's that what Sun tried to do? (hint: java)
... else if( p instanceof Bar ) ladders rather than calling p.virtualFunction(). Because coders won't take seriously OO that the language and its core libraries don't take seriously.
Java's ok, but a few mistakes were made. Among the worst: over-reliance on the instanceof operator, and the need for something called a MethodNotSupported exception.
Now think about what MethodNotSupported means in the context of Barbara Liskov's Substitution Principle:
We've got a language that supports inheritance. Inheritance makes sense only insofar as Liskov's Principle is followed. Put simply, if class D inherits from class B, any "promises" that B made -- it's interface, both syntactically, in terms of public member names, and semantically, that the member functions really do do some particular thing -- any of those promises must also be kept by D, because we are saying, as Liskov tells us, that D is-a B.
If I hand you an instance of D, and you plug it in place of am instance of B, anything that the B instance does, the D instance must at least do. Otherwise, how can you safely and with confidence substitute a the D in where the B used to be?
But along comes Java, and the MethodNotSupported exception -- a method used by some of Java's core library, including, dismayingly enough, commonly used container classes. It's used so that a derived class can suddenly and at run-time throw it, telling you, "Whoops! Ha ha! Trickled you, I can't in fact really do what B promises! I claim I'm a B, but really, I'm not!"
Now imagine you had a component stereo, and you replaced your tuner with a "better" tuner with all the same jacks as the original. You'd plug it in and expect it to do the same work as the original tuner, just with better reception or fidelity or whatever. Now what if you plugged in the new tuner to the old connections, and suddenly its display read: "Sure, I have a two-plug RCA input, but it's not actually connected to anything, so you can plug in an RCA jack but no sound will come out". That's what having a method that throws MethodNotSupport is like: the jack -- or member function name -- is there, but the implementation is not.
D inherits ("extends") B, it says so right there on the label, but no sound comes out. With Liskov undermined, you don't really have an object oriented language at all. You don't really have true inheritance. What you have is a sham, a sham that can break down on you at run-time because an object is lying to you.
And the upshot is that you don't see enough real object oriented programming by client Java coders. If the core library can get it that wrong, why should clients of that library bother to adhere to a standard?
So you get lots of java code that does RTTI using instanceof and if( p instanceof Foo )
It is interesting to see how an abstract language like a programming language evolves through time
If you find that interesting, you're going to love Stroustrup's The Design and Evolution of C++.
It's an almost novelistic discussion of how he made C in to C++, the various trade-offs required, and how he decided what changes to make or not make. For example, why the dot operator (".") can't be overloaded, but the parentheses can be, and why (contra Goslings Java) operator overloading is a good thing (short answer: it makes syntax match semantics).
If you ever want, or need, to develop a large-scale, flexible and general system of anything (and what's more general than C++, a programming language used by millions to write both Object Oriented and just "better C" code?), D&E is a wealth of experience, carefully and fully explained.
And, like a novel, it's for the most part a fun read. Grab a copy, and you'll not only understand C++ better, you'll understand why C++ is what it is, and how it got there from C.
So MS denies something they clearly did wrong, what's new?
You, sir, are entirely unfair!
Microsoft clearly said The downgrade in threat level merely represented an effort to be "fair and consistent with how Windows AntiSpyware (Beta) handles similar software from other vendors,"
It's entirely consistent. Microsoft has consistently held their software offerings to, ahem, an improved standard.
I mean, have you ever looked at how Microsoft's C++ compilers, um, pioneered their own standard, entirely different -- and, so long as you don't like correct exception handling, consistent RTTI, or the availability of a Standard library, entirely better -- from the ANSI/ISO standard. Or look at the, um, improvements to JavaScript and the browser DOM.
Or just look at the XML for Word docs. Ok, well absent a non-disclosure agreement you can't actually look at it, but trust Microsoft it's entirely consistently inconsistent with anything else out there.
How anyone can say Microsoft isn't being consistent in its approach I just don't understand at all.
HOWEVER, it appears the parent poster is one of the three authors of the paper under discussion, so somebody ought to mod the parent post up as "Informative".
*(Just for a start, the article quotes the researcher as saying, But a computer can and routinely does represent multiple or partial states.
A multiple state representation: const ONE_STATE = 0x1; const ANOTHER_STATE = 0x2 ; int currentState = ONE_STATE | ANOTHER_STATE ; while( dataSupportsEitherState() ) getAdditionalData()
A partial state, or a "value in between": double quantity = 0.5
(A purist will point out that multiple or partial states are implemented as additional states; but it's the interpretation, not the implementation, that matters.))
By the way, angels are in the Bible and part of the basic Christian theology, so equating them in with belief in witches... in a derogatory manner is highly insulting. Your lumping of belief in God along with aliens also reveals your trollish, elitist slant is about as reputable as these garbage poll results.
I didn't insult you, Jack. Those were the questions on Fox News's poll, which I linked to.
But rather than follow the link, you chose to feel insulted, to blame me for it, and call be "trollish" and "elitist". So much for your cool temper, informed judgment, or reading comprehension, friend.
And in any case, witches are in the Bible too. Ten times in the King James Version.
The parent poster continues: 92% believe in God -- some people might take that as a hint that YOU are wrong.
A majority of people once thought heavier objects fell faster than light objects. Does that convince you they were right about that too?
I live in Germany. Waiting months or years for good shows or movies to play at the cinemas or air on television is business as usual.
Yeah, but it all evens out: you guys always get to invade Poland first.
And where
And where
Not to mention thmany many Americans who still believe Iraq had WMDs and was aiding Osama bin Laden, who believe Abu Ghraib was solely the fault of low-level rankers, while simultaneously believing the latest justication for the war, that its aim was to "give Iraq the 'Gift of Democracy'".
Oh hell, I'll mention that too. Verbatim from the Harris Poll, February of this year:
I guess if you believe in angels and witches you can also believe that teaching creationism and limiting stem cell won't undermine the very science you count on to keep you healthy into your nineties, because you can just count on your benificent god to save you with miracles.
As to why it is your problem, it means if you don't watch the show in a way ACNielsen tracks it, the show is more likely to go away.
.
So you're saying we should only trade bad shows over BitTorrrent, in hope they'll go away? That's just zocky!
You've convinced me! I'm going to reformat one of my harddrives and stock it full of NBC's Bible-based miniseries Christ vs. Satan smackdown, Revelations
Uhm, do Fundies waiting on "The Rapture" know how to use BitTorrent? Maybe we could hand out CD-ROMs at Sunday schools and Revival meetings?
Maybe I'll have room for Fox's paean to the effectiveness and morality of torture as an everyday (every Day, get it?) tool of extra-legal terrorist hunting, 24. (Yeah, it's a decent show, but its pernicious message is, only naive Democrats don't enjoy breaking fingers for Patriotism.)
"Sadly, it seems more astonishing if a day does by when a major personal information breech is NOT reported."
Right.
These breaches are inevitable. That's why, as I've said for a while, it doesn't really matter if an organization -- whether it's Google or the government -- promises to "do no evil".
Even an organization run by saints -- and no organization is run by saints -- can be breached.
So there are two things that need to be done: first, we need to convince organizations, both corporate and governmental, to limit the information they collect to what is actually necessary for their functioning. And access needs to limited and audited to prevent misuse.
Given prevailing corporate ethics -- that whatever is good for profits is ethical -- the "convincing" will have to be in the form of data-protection laws and privacy-protection laws that limit information collecting and impose penalties for misuse or failing to adequately safeguard it.
Second, what information is collected needs to be encrypted. While that won't prevent all hacking, it will mean that copies of data stolen in bulk will be pretty much useless to the thieves.
Again, it's not sufficient to think, "well, I trust Google (or the FBI or Social security administration or my bank) won't misuse my information" -- it's necessary to remember that organizations change sometimes without warning (see the first link, above), and that external hackers internal misusers can pervert any system (see the second link).
Our response has to be more than "whistling past the graveyard" hoping that nothing will go wrong. Breaches are inevitable, and our laws and our data-retention worse practices -- not the best practices we hope for, but the worst we allow -- must reflect that.
"Yet you attack the poster personally simply because of a difference of political opinion?"
Actually, to be fair, I think the grandparent poster's reply to me was meant as a joke.
He lays it on just a bit too thick ("frenchie"), and "STFU lib'rul" is a trope I often use in my sarcastic posts at MetaFilter.com.
Hi! I'm Clippy!
You seem to be in a firefight with Muslim extremists. Would you like to:
Or do you want to change your Clippy Patriot Avatar into:
"I agree with your sentiment, but I don't think Linus should tell them anything. They aren't paying him to waste his time explaining anything."
Nicely put.
"But how about sharing it with a multinational company that is able to throw massive resources into helping you to develop your program?"
You make a persuasive argument, and I largely agree with you -- my problem isn't with the companies that have and do contribute to OS, or that hire OS coders to work on OS projects.
I agree, that's the sort of arrangement that helps everyone. But it's also an honest arrangement: the businesses know that they're getting a great deal -- a whole operating system that drives the sales of their products and services -- and the coders know they're getting a great deal -- good pay for what they'd do for free as a hobby.
And you're largely right that the freeloaders only cost download bandwidth.
My problem is when the freeloaders start telling Linus that he can't take what is still his hobby (and now lots of other people's hobby too) in the direction he wishes to take it.
My larger question is how to get the freeloading companies to act more like the honest-dealing companies.
Because the freeloaders hurt the hobby with their demands, and they also get -- to a certain degree -- a competitive advantage over the Transmeta and IBMs which are supporting them by hiring the coders. Of course, I say "to a certain degree" because Transmeta and Red Hat, by hiring the coders, do get some say in where the coding is going.
If other companies want that, then, to be fair, rather than bitch about linux's direction, they ought to hire a linux kernel coder.
I mean, I've never contributed to the kernel, but I also don't call up Linus (or haunt the newsgroups) with demands.
Again, I think we're largely in agreement and I want to emphasize that your points are good.
(I've amazed that my (not open source) spell-checker has learned to spell Transmeta.)
"CA wants Linus and Andrew to spend all of their time working on "Enterprise" features and none of it on things like improving Linux's real-time performance and integrating drivers for non-server hardware."
And this points to the real evolution in linux that has Microsoft sweating: what CA wants is a kernel that works better for businesses. Why? Because businesses have come to rely on linux.
Business (in general, I'm not talking about CA specifically but about all the businesses that now use linux in their operations or, even more, in their firmware) to linux: "Linus, we didn't pay you to write the kernel, we didn't give you much help in writing it, we've often appropriated it and ignored our legal responsibility under the GPL while at the same time keeping out own drivers closed-source and binary only. But, ah, now that we use -- for free -- what started out as your hobby project, we expect you to give up your hobbyist ways and toe the line, because it's now our bottom line."
This really isn't all that much different from the RIAA's "buggy-whip manufacturers'" outlook on file-sharing: "we've always made buggy-whips, and we loved it when Linus and the rest of the OS community were producing free leather for us to make buggy-whips, but now that you're producing those infernal auto-mobiles, we'll, you better stop before you threaten our profits."
The one thing I've never liked about the GPL was that it gave the same rights to a for-profit business as to a fellow hobbyist. I'm more than glad to share my code with a fellow, who like me, is coding for the love of it. I'm a bit less happy to share with someone who just sees my uncompensated work as a way for him to parasite off it.
Linus should tell CA that businesses have gotten far far more -- just in dollars, I'm not talking intangibles -- from Linus than they can ever repay, and that he's going to go on doing what makes Linus happy. After all, that attitude worked out pretty well for the parasites last time around.
As for the rest of us, maybe those of us who can and do code should ask ourselves why we're so happy to give our work away for free to businesses that do their level best, day in and day out, not to give away anything for free.
Is the GPL really our best answer?
"let's note that you fled Wikipedia just as an arbcom case was accepted against you"
Fled? You really do think you're running a police-state, don't you? Yes, I was shaking in fear, one step ahead of your thought-policing.
Actually I did "flee" -- to Ohio. I gave up my apartment lease, moved out, and moved to Ohio for a month to volunteer at the Ohio headquarters for Kerry-Edwards.
After weeks of 18 hour days seven days a week, I created from scratch (and local Boards of Election data) a distributable offline database that could be taken on laptops all over the state, which probably got somewhere from 5,000-15,000 Democrats to their correct polling places on Election Day. This was especially important, as Ohio had redistricted since the original Kerry-Edwards database had been populated, and Ohio's Republican Secretary of State had ruled that votes cast at incorrect polling places wouldn't be counted.
You of course, spent your time more wisely, getting people banned from Wikipedia.
I thought saving America from George Bush was just a leetle more important than, oh, your (admittedly successful) effort to save "Steak and Blowjob Day" from deletion at Wikipedia.
I blame myself for having the wrong priorities.
Well, in defense of admin ("#2"), he climbed to power based on going after unpopular editors.
Basically, there's a lot of groupthink at Wikipedia, and a tremendous amount of defensiveness too. Why, I'm not quite sure, but there's a cadre there that takes any criticism very personally, and, believing themselves all to be central to the smooth functioning of Wikipedia, they take personal criticism as criticism of, and a threat to, Wikipedia itself.
Guy #2 -- and let me apologize for mincing words, as anyone familiar with Wikipedia knows who I'm talking about, guy #2 is a user who calls himself "Snowspinner". Snowspinner made his Wikipedia "career" by attacking those critics. Some of them were genuinely bad editors, and many Wikipedia users were relived to see them gone and willing to overlook the way Snowspinner got rid of them, by means fair or foul. Because in many cases, Snowspinner got rid of people by relentless, petty harassment, until the victim finally broke a Wikipedia rule in his frustration (usually the rule against personal attacks).
One of his tactics should be familiar to any student of recent American politics: Snowspinner declared his victims to be "trolls" -- an elastic term with no real meaning but with strongly pejorative connotations. He then said or implied that anyone defending a troll must also be a troll -- compare to John Ashcroft's "Your tactics only aid terrorists, for they erode our national unity and diminish our resolve...."
While there were real disruptive editors, Snowspinner pretty much called anyone who questioned his tactics a "troll", and implied that arguing for due process was a "delaying tactic" only used by trolls. (Compare to the Slashdot chestnut, "if you're innocent, why do you fear police surveillance?") So it became politically highly costly to oppose Snowspinner, or defend his victims, or even to argue that his victims -- whatever they'd done -- deserved due process and fair treatment.
Snowspinner himself made it abundantly clear -- he has stated with pride on his user page -- that even as he "prosecutes" dissenters for breaking Wikipedia rules, he does not feel himself bound by the very rules he enforces. So Snowspinner was willing to go farther and take more risks in going after the questioners who threatened the established powers. And those in the power structure were delighted to have Snowspinner as their attack dog. Due process and fair treatment got thrown out the window as the established Wikipedians saw a quick and easy way to get rid of thorns in their sides that had bothered them for some time.
Ironically enough, for someone so concerned about ridding Wikipedia of trolls, Snowspinner may himself be a troll. Unlike most new users, Snowspinner
How does a new user even know about these esoteric corners of Wikipedia? And what new user involves himself so confidently and so quickly? Either a fire-brand or someone who is not really a new user and is editing as under a sockpuppet account.
Once Snowspinner had burrowed into the power structure, by being the "dishonorable hatchet-man" willing to go to almost any lengths to get rid of "bad" editors, he then went after anyone threatening the status quo. Because whether or
"Wow! Hi! Long time no see! You're still a total dick! -That admin"
(Hey, no one's going to see that when you post as anonymous coward, so let me give you the benefit of quoting you at my "Karma Bonus" +2.)
So I'm a total dick, and you're -- you're too much of an Anonymous Coward to post under your own account?
"This rant is all very well, but there is of course another side to this story."
Well, ok, we're all listening. What is the other side of the story?
(Unlike some Wikipedia admins,) I'm not so convinced that I'm always right that I feel a need to silence other opinions; to the contrary, I'd very much like to hear what you think the other side of the story is. So tell us. If you're right -- and I'm sure some of your points will be right -- I'll gladly admit that in a follow-up post.