And this is the difference between academic code and commercial code. Ever looked at 90% of the research projects from graduate students? Most of them barely work, or only work on one specific set of hardware (and not anything else), or require a huge set of work-arounds to get the code up and running.
And you assert that 90% of commercial code isn't crap as well? And what about those research projects like PostgreSQL or JBoss? PostgreSQL started in the university environment as a database testbed. OK, JBoss isn't strictly a research project, but they openly state that a lot of work was done by folks working on features that ended up being the focus of a doctoral thesis. Linus Torvalds pursued a master's degree with the focus on porting Linux to new platforms. WebDAV (and most open protocols for that matter) is primarily driven by educational entities.
Mosaic was spawned from the cradle of UofI Champagne-Urbana. Or do people honestly believe that MA would have written it without the education or the advisors?
This whole "companies always make better software than universities" camp needs to get a wakeup call.
Irrelevant red herring, and a bad example to boot. You're equating a potentially dangerous situation (in your example, less solder means a less solid joint, which means the oil could leak) with a harmless situation (reusing your old code, crufty as it is). In one case you're making a conscious decision to be less safe, while in the other you're making a conscious decision to leverage the work that's already been done.
Electronics already permeate our lives. This technical saturation is only going to become more pronounced, not less. And that technology many times has software (sometimes in RAM, sometimes hard-coded in ROM).
How much time and money has Nimda or Code Red or any of the other electronic nuisances cost us? And all because of a "feature" of a class of operating system that has no executable bit and thinks that remote, no-check, executable code is acceptable rather than a rewrite. Painful to rewrite? Yes. Possibly crippling to Microsoft? Probably. Would benefit a lot of people to fix the cart with the square wheels. Maybe.
If the minimum wage had gone up at the same rate as CEO salaries since 1990, the minimum wage today would be $25.50/hr.
Or is it that CEOs work that much harder than they did ten or twenty years ago?
The guys at the top did NOT pull themselves up by the bootstraps. They were hoisted up on the backs of others. Don't get me wrong. I have met some truly brilliant minds that were in charge of some companies. But I've also met some true boneheads who still gleefully pulled in $500K/yr+. We're moving headlong back into the days of the robber baron who rules over his fiefdom with an iron fist. Yeah, those were good times. Well, of course! When was the last time you took a pay cut for some peon...er...someone else's job?
How many times have you seen, "i += 1;// increment pointer"? Doesn't help, does it? You document the trees but ignore the forest that way.
I agree that doesn't help. They're just restating code. If, however, the author of this code snippet had said something like
i += 1;// advance to the next character in the stream
This gives semantic context to the action being performed and THIS is the point of comments; it's not about the restatement of code.
Stop hiring idiots. Pay three times the average wage and hire only the best. You'll have much better productivity/cost ratios. So what if 4/5 programmers can't understand the code? The one you've got does the work of 2 to 3. And others like him can pick it up with little or no effort.
And then when your wunderkind has left the company because someone else offered a raise that you can't match, or the star decides to go into business for himself/herself, or dies from a caffeine overdose, and you are left with no documentation, no comments, no variables longer than four letters, and the "talent" isn't returning phone calls, then what? In your scenario you either lose a year going through the code one line at a time to find the off-by-one bug buried somewhere, your company goes bust making the attempt, or someone rewrites it (also wasting time). You're point would have merit if programmers were know for staying at a company for ten or twenty years. But in "the real development world" two years is the average.
So everyone should be screwed because some hotshot thought that LISP was a good idea for the problem at hand even though no one else at the company knows LISP? Sure the program is efficient and runs like a dream right now. Fat load of good that does you if it breaks or needs to be extended. And it will break. And it will need to be extended. All code has bugs. A large codebase has more bugs. And new requirements are a fact of life.
Egos don't keep companies in business and they certainly don't put food on the table.
If you can throw letters down in Emacs so quickly, why can't you seem to find time to have one line out of 15 be in English. It's not like you really have to switch tasks. You're supposed to be writing about the task at hand. I assume that you can program in more than one language; why isn't English one of them?
(Apologies in advance to those programmers who are in non-English-speaking development environments)
for (i = 0; i array_size; i++)
free(array[i]);
free(array);
and now let's look at:
// get rid of the array
for (i = 0; i array_size; i++)
free(array[i]);
free(array);
Has your life *really* been so harmed? Is this *really* so terrible? Comments should not be written with the thought that your university professor would know what everything else means. Comments should be written so that all of those folks without a PhD in CompSci. know what it means.
What if the next joe to hit your code doesn't have a degree? What if the recently-hired intern was just handed a "C in 21 days" book and told by the manager to "fix it" because the programming team is snowed in (or similarly unavailable) and the customer is screaming? (Yeah, try and tell me that's never happened...)
A fine use of comments is (for example) every ten lines to say, in general, what is going on. One thing I used to do is write a comment at least every 10-15 lines. Why? When the next joe who comes along has to read/edit my code, scanning through some periodically placed comments will *always* be quicker and easier than reading the code....assuming they are English speakers of course. Proof? I have programmed (I don't count the BASIC years) for ~10 years. I have been writing/speaking English for over twice that long. Which do you think I'm better at?
The code effectively shows my implementation, but may not show my intention. I have coded for years. I started dreaming in code several years ago. Shortly thereafter, the code actually worked when I typed it in the next morning. That isn't the point. How good a coder you are isn't the point.
When you have a hundred thousand lines of code to go through, comments become like "Cliff's Notes." For the quick patch (probably the majority of code being written by most people), comments are invaluable. Who cares if I didn't read Moby Dick if I can still pass the pop quiz? If I need to make an indepth study, I can still do this, but thank god for the "Cliff's Notes."
Now then, on to the "proper" use of comments.
1. Write out what you are planning to do in English. (or whatever else may be the dominant language in your development group) Fill in every step in the problem. This is NOT psuedo code. This is akin to: Find out who www.yahoo.com is, open a connection, ask for the main page, and check to see if our cache is still valid. If the cache is stale (the yahoo page has been updated), get a new copy of the main page. If the cache is still valid, pull the page from cache instead. Drop the page into the "ready" bin and send a message to the user that the page is here.
2. Make a copy and label it "documentation."
3. Go back to the original, fill in all of the logic in whatever programming language at the appropriate points in your "documentation," and label it "source file."
This means that your documentation is done, your code is adequately commented, and your algorithm and intent(!) are clearly defined for both your co-workers (and yourself when you have to fix something ten months from now). If you can't spell out the problem and the solution in your primary native language, you sure as hell better not be trying to spell it out in a programming language that members of your team have only been using for two years.
The only excuse not to do the above is laziness. For some people, laziness is not considered a bad thing. It was noted as being one of the main virtues of a hacker -- hubris, laziness, and impatience. Hell, according to this measure, I myself am lazy from time to time. But cut the bravado, the beating of the chest, the battle cries of "I'm smart enough to figure this out, so should you be," and call a spade a spade. Avoiding comments means that you are being lazy.
Yeah, it'll be around for the next fifty years (or more). Just like COBOL. Better to find ways of interfacing with COBOL than to look at other languages in your development environment. Yes, that was sarcasm.
Strict constraint model? Like datatypes (XML Schema)? Like document structure (XML Schema)?
XML has this model. It is simply not as used yet (not as optimized yet). There is nothing inherent to XML that precludes its use for data storage. The fact that it is plain text in its *serialized* form is immaterial to its internal storage format in a hierarchical database. Nor does the fact that it's XML preclude the possibility of indexing the information just as you would a table column.
Something that relational databases are not as good at handling: web accessible data where the data does not allow for rigid guidelines. For example, in a web magazine, many articles are somewhat structured with author, date, title, etc., but otherwise tend to be very free-form.
Not a problem in and of itself, but what happens when you try to search it? How do you differentiate between a search for info in the title of a component use case and a search within a biliography? So you create a relational model that handles an arbitrary number of use cases and biliography entries -- all indexed by article. But some use cases have more information than others. Some have associated graphics. Suddenly we are shown not a many-to-many relationship, but a many-to-many-to-many-to-"Aw screw it. It'll take two days to query" relationship. Do you put markup data in the database? A regular expression on all of the content? Yeah, THAT's efficient.
We tend to think that anything that we put into a relational database can be adequately represented in XML. And we'd be right. Unfortunately many people believe that the reverse is also true. It is not.
Others have made the point of LDAP and naively assumed (as I once did) that a full blown relational database on the backend would be a better solution than the pansy in-process, flexible data model, file-based BerkeleyDB that's commonly used. What was found? User queries (VERY common query) from a listing of 400 users took about five seconds with BerkeleyDB behind OpenLDAP, and over a minute (!) using PostgreSQL behind LDAP. Why? The overhead involved in trying to represent a hierarchical tree in a relational model proved to have more overhead than it was worth.
An object database may have performed better than the relational model, but if you are mainly handling text or simple datatypes such as dates and integers (as most databases do), why not use XML and optimize for that case?
People scream that their relational database is enough and can be used for anything that an XML database can be used. These people sound very much like people screaming that a singly linked list is inherently better than a red-black binary tree. After all, they both hold data just as well. In fact, a linked list does it more efficiently (look! fewer pointers!) and there's nothing stopping you from sorting the singly linked list (plenty of efficient algorithms already out there for this). Yes, that was also sarcasm. And objects are useless, just use C.:-/
Use the right tool for the job. In many (most?) cases,a relational database fits the bill. Sometimes an object database is called for. Sometimes a hybrid of the two. Is it so hard to accept that maybe, just maybe, when the only thing that you do is XML processing and XML data sharing (more and more common these days) that a dedicated XML datastore might be what the doctor ordered?
Not really... Netscape Portable Runtime is at version 4.1. The APR came about with the development of Apache 2.0 (still not out of beta yet). NSPR had been tested and used since before Mozilla started development. It's been the cross-platform glue that put Netscape Communicator on so many different kinds of computer.
Not to slight the APR, it's a well engineering library. However I still think that the ASF would have been better served by reusing (and improving) the NSPR than making their own.
So much for code reuse in free software...:-/
Re:On correct use of apostrophes
on
God's Debris
·
· Score: 2
If I wrote a book that said that English had a new letter, does that make it so?
While this particular point may be in contention, I would side with such works as The Elements of Style by Strunk and White. The New York Times, The Boston Globe, The Wall Street Journal, The New Yorker, and others would seem to agree with me.
If I had to choose between a web site grammar reference and one of the seminal works on the topic for over forty years (and longer for students of William Strunk Jr. back to the beginning of the 20th century), I'll choose the little book.
Just in case anyone is wondering, the notes on apostrophes appear on page one.
I'll be sure and tell that to all of the good actors, artists, musicians, and writers out there who still act in local non-profit productions, play music in the park, or write short stories (or novels!) in their apartment with no intention of trying to publish.
Programmers are not paragons of altruism. People will work for free if it suits them. Sometimes those people are programmers.
As far as reasons why artists and writers don't work en masse on open source projects, I'm sure it's a matter of interest and coupled with the fact that far too many programmers don't have the decency to be polite when in close company with others (There's a reason the stereotype exists).
Take a look at all of the posts recently on Slashdot. Now count up the number of times someone derides users because they are stupid or ignorant. Check to see if those users are thought of in this way because they do not spend their weekends indoors in front of a computer tweaking bash scripts. Now imagine that a non-expert in computers reads this (or more likely hears this from the "expert" in person). Can anyone honestly blame a large segment of the population for shunning software authors?
People quit projects all of the time because someone involved in the project is an absolute dick. As a software author, I find it easier to deal with assholes as long as they know their stuff. If you don't know computers that well, there is no good reason to put up with it. Artists are NEVER gonna be in it because the lead came up with a great indexing algorithm using suffix trees.
Customers asked for an easy-to-use installer. Who delivered? Debian? Not even close. Debian is great for administration after it's installed, but getting it on the box in the first place has historically always been much harder than it needed to be.
"The defects found in RedHat and Windows are really stupid."
You haven't programmed much have you? (At all? No, patching a C file a couple of times and writing some bash scripts does not count as programming much) Most programmers know that there will be (not might be) bugs in the code. As far as stupid defects, yes they've both had their share. However RedHat is nowhere near Windows in terms of sheer volume of severe bugs. I don't know where you got your data. The last one that I saw was clearly biased (they counted general Linux bugs and RedHat-specific bugs together even though there was significant overlap).
Also note that RedHat uses newer versions of programs than most other Linux distributions. They don't hide this fact. I applaud them for it. Why? Because if they didn't, glibc2 would not have been adopted as quickly as it was. And what about the "broken" compiler that came out with RedHat 7? People railed and hollered because they couldn't compile their kernels. Actually they could, but people conveniently forgot that RedHat posted notices in big letters that they have to use the older version of the compiler to compile (oh no! you have to use kgcc instead of gcc! how will users ever figure that out, especially if RedHat explicitly tells them that they have to). Yes there were bugs in the compiler. It was patched, but the kernel still didn't build. Why not? Because there was code in the kernel that was not compliant with the C99 standard. People's C++ code wouldn't compile anymore. Why? Because a lot of C++ code is plainly incompatible with the ISO98 standard of C++. You know that thing that Slashdotters are always railing about: STANDARDS. Or do you advocate ignoring standards when they don't suit you? Wouldn't that make you like Microsoft? These are standards that were ratified and publically announced two and three years ago. How can you say that they snuck up on you?
What does C99 give you?
void myfunction ( int size ) {
char foo[size];
}
Allocated on the stack so no need for malloc or free (and less corresponding bugs) and basically eliminates the hacks out there to accomplish them same like alloca.
What does ISO98 C++ give you? The Standard Template Library. 'Nuff said.
These are examples, but are indicative of a general trend.
New library or suite that is noticeably better comes out
RedHat recognizes that it is better, includes it in their distribution, tests, and releases
People bitch and moan about how it breaks things that don't come with the distribution
Everyone blames RedHat for doing a horrible job
Because it is being used, the library in question gets a shakedown and most bugs are worked out quickly
People reluctantly fix their programs to work with the updated library/suite so that they can run on RedHat
In the course of fixing, people come across the advantages of the new library/suite and herald its arrival
People deride the older version
People forget it was RedHat that drove the newer, better library/suite into general use
Goto 1 because geek memories appear to be very short
If you want a closer-to-perfect RedHat box, install a copy from two versions ago and install all of the associated patches for it. This will be about the equivalent of a standard Debian install: very secure, but quite out of date. If you run Debian unstable or testing, while having more up-to-date software, you find that many of those "stupid defects" find their way into that distribution as well.
VBScript comes with all installs of Windows. The JavaScript engine is installed with IE (and therefore effectively all installs of Windows). PerlScript works in exactly the same way (Perl talking to COM objects instead of VBScript talking to COM objects for example), but is a separate download.
As far as the downside, the reasons why it has been abused (I still think that WSH is a good idea) is that (a) Windows launches files ignorantly by file extension, (b) all files are effectively executable (as though everything was chmod +x) and (c) mail programs et al on Windows launch attachments directly to the system execution engine (which is based on file type). Oh wait! They added an alert box to Outlook!:-/
As far as perl2exe is concerned, you were probably using the basic pack which ships as a single executable (no -tiny option -- no that's not a joke or typo). If you have many of these programs on a system, you can install a single large DLL (just like VB) and distribute much smaller application EXEs for your actual programs.
The fact that Perl is interpreted is basically immaterial. Any language can be interpreted if you run it through an interpreter instead of a compiler. There is even a C interpreter out now! The converse is also true. Any language could be compiled as well. What do you think an interpreter does? It takes textual input and translates them to machine code on the fly. Compiling does the same, but prior to use and only once (as opposed to every time the program is started).
An optimizing compiler is technically difficult and options like perl2exe and ActiveState's product are not optimizing compilers. They merely package the interpreter with each executable to avoid the explicit need to install an interpreter. This doesn't mean that someone couldn't write an optimizing complete compiler for Perl. It would (and has historically been) quite difficult, but difficult != impossible.
By the way, I didn't mean to criticize you per se. I just wanted people to know what's really out there and not vague suppositions.
On a related note, someone mod the grandparent (not the parent) down. While happily towing the party line, it is still completely inaccurate (except for the bit about OS/2 having REXX installed by default).
Most modern operating systems have an advanced file cache. If you think of your disk cache as a dynamic RAM drive, you're getting the idea. A dedicated file server will serve commonly used files at RAM drive speeds due to the file data already located in the server's RAM.
Let's analyze the options.
2GB Network RAM Drive
Pros: None
Cons: Very expensive for the storage while bound by network bandwidth. No advantages over a harddrive-based network drive with a healthy RAM cache. Data is volitile -- needs constant power.
2GB RAM Drive
Pros: Very fast access for non-sequential access
Cons: Performance bound by IDE/SCSI bus. Low total storage when compared to hard drives. Data is volitile -- needs constant power.
40GB Hard Drive + 2GB RAM
Pros: Just about as fast as dedicated RAM drive access for most data sets. Hard drives 1/10 the cost of similar RAM-only solution. Very large sizes available. RAM cache adapts to filesets used. Data is non-volitile -- does not require constant power.Cons: Not as glamourous.
Conclusion: Unless you have nothing better to do or have a specific need (space or vibration-resistance?), hard drives backed with a RAM cache win.
Well it is being re-written from scratch. Same name though.
http://httpd.apache.org/docs-2.0/new_features_2_ 0. html
Many times the original design has been stressed past its breaking point. Either due to lack of foresight or due to lack of a crystal ball, some projects are better off being rewritten. Believe it or not, sometimes rewriting saves time.
Apache (and others) runs on Windows. ASP can be served from non-IIS boxes.
http://www.chilisoft.com/chiliasp/windows.asp
That being said, why do people have to run IIS? Granted, ISAPI filters need IIS (to my knowledge). How many ASP shops are dependent upon ISAPI filters? 1 out of 100? 1 out of 1,000? The vast majority are simply VBScript talking to COM objects; hardly bleeding edge technology.
Unless you were connected to a different Internet than the rest of us, you did. We all did whether we run with Apache on Linux or IIS on Windows. You just kept that one particular (group of?) server from adding to the overall problem.
I and many of my coworkers run Linux at the office. Those that were running Windows machines (IIS for development purposes and not production) got hit and started saturating the local network.
Folks who aren't even running Windows are more than pissed. With old time bootsector viruses, those of us with sane virus protection and/or non-Windows systems could scold from afar. With the advent of (equivalent of) remote root exploits popping up on a regular basis, everyone is getting hit with a DoS attack.
I'm glad to hear that there is at least one more IIS administrator out there with half a brain and thinking about security. Unfortunately we need far greater numbers of IIS administrators than one more.
As the old adage goes, "If any idiot supposedly can administer a Windows box, any idiot will."
Microsoft started trying to kill Java back with IE 4 when they had a kick ass JVM, but decided to "forget" certain features such as RMI. The lawsuit simply formalized the animosity.
If MS stops including it, it will be a blow against Java. How big a blow remains to be seen. Alternative browsers are supporting Java through the Java plugin quite consistently. Also, many OEMs have committed to install Java on new Windows systems without Microsoft's help. MS still provides a JVM as a separate download, and Sun still provides the Java plugin for IE. It remains to be seen whether or not this will be a major issue or not.
Browsers that use the plugin have at least Java2 functionality. This allows a significantly greater featureset and raises the bar on compatibility.
With regards to differences, if AWT is used, yes they will look different from one another. This was the point with AWT, that it would look like the underlying platfrom (with the same widgets).
Mozilla (and Opera) uses the Java plugin (and not its own JVM like Netscape 2.0-4.x and IE). Also it is obvious that you haven't used Mozilla with Java recently. The crash bugs that you mention have been stamped out to a large extent. Is it bulletproof? No, but then again are most browsers bulletproof? The point is that I go to sites with Java applets on a regular basis (every day) and have not crashed due to an applet in a couple of months now. I'd say that was stable enough for most.
Chat applications do not have to be trusted applets. I know. I've written a few. Applets can do anything except for the following restrictions: You can only make a network connection to the server the applet came from, you cannot make local filesystem calls, and you cannot call native code. I don't know about you, but that has left quite a bit of room for me to fiddle before having to sign the applet. Your only real limitation is what the client's JVM version is right now. Note that the versioning runs into the same problem that we all face with HTML vs. XHTML vs. DHTML vs. CSS2 -- it's not just Java's problem.
Regarding taking too long to load, this is a programming issue. When Gnome took a while to start up, did you blame C? There are things that you can do to make the applet visible earlier (judicious use of init() and start()). Just as with every other language, there are crap coders in Java as well. And many of those crap coders make applets. Are applets perfect? Of course not, but bad coders have done more to tarnish the Java moniker than any inefficient JVMs.
Use the right tool for the job. Use HTML/DHTML to general presentation, Flash for multimedia, and Java for the things that the previous two just can't handle. In fact, both IBM (DirectDOM) and Mozilla (Blackwood) have make considerable inroads on having Java manage logic on the browser while leaving the UI to the browser widgets. Imagine! The power of a full, typed, OO language with the ease of a browser's DOM. Network-aware, portable programs can be a good thing. In this arena, Java is the best choice. What else are you going to use? ActiveX? In many cases, when it comes down to it, you use Java or you don't do it all. I prefer to use Java rather than sticking my head in the sand and pining for the simpler times.
The simpler times covered 40% of the problems on the 'Net. Some of us want to get the other 60% underway.
---------------
Now then, back to the main topic. Those out there who are worried about security in other languages, ActiveScript on IE (the framework behind VBScript, JavaScript, PythonScript, and PerlScript) does not allow you to instantiate objects that talk to the local filesystem. The trick there was that the various languages had to conform to the framework's security model as opposed to the framework trying to work with all of the different languages/versions out there.
The next one? Try the first one. The original U.S. Revolutionary War fought against not only a monarchy, but a corporate tyrant (East India Company) sanctioned by that monarchy. To whom do you think the tea in the Boston Harbor belonged? Prior to the latter end of the 19th century (around the time of the U.S. Civil War), corporate charters were regularly revoked when it was found that the corporation worked contrary to the public good.
The U.S. doesn't need a new Constitution or Bill of Rights. It just needs to enforce what is already there. If there is another revolution, it should simply be a reiteration of the first one.
That said, I don't think a revolution is really necessary at this point. The system's broken, but not THAT broken. Also, revolution does not happen when a populace doesn't care enough to watch what's going on. Apathy from the citizens regarding government/corporate control is the greatest tyrant.
Remember that the next time you see only a 1/4-1/3 turnout on election day or decide not to protest what you believe is wrong because you can't seem to get yourself out from in front of the television.
1) Agreed about the face recognition when and only when used in places where privacy/anonymity is not expected.
2) With regards to Vietnam, the US Congress never declared war. The soldiers over there were "advisors." We never declared war in Korea. It was a "police action."
3) Is this why Japanese-Americans were interned (what a wonderful euphemism for institutionalized kidnapping) during World War II? What about blacklisting and red-baiting in the 50's? What about the Jim Crow laws in the south? For that matter, what about the treatment of Native Americans from 1776 through today? Where was the Supreme Court then? Do you really think with the history of the US that somehow crypto will get special treatment and is somehow exempt from corruption?
Do not confuse FUD with intelligent discourse and disagreement.
Would you be more specific? I haven't personally had the pleasure of writing Lisp and therefore can't say one way or another whether it is good or bad.
On the other hand, the "complex mess" to which you refer is a necessary component of modern software development. I am not saying that those particular keywords or that their implementation in specific languages such as Java and C++ are the best that will ever come to be. However the ability to say "You may not call this function. This function was not meant for you," is very necessary in order to keep careless keystrokes (and careless coworkers) away from important data structures.
Do I read you correctly that Lisp cannot enforce private members? I certainly hope I misunderstood. And if so, could someone please tell me what was intended?
To all of the folks that say that average Joe user can't deal with multiple operating systems on a system
To all of the folks that say that average Joe user doesn't want some things from one OS and other things from a second (or third) OS
To all of the folks that say that average Joe user would never reboot to use a different program
I put forth some counter-examples.
1) A pair of OSes, lauded on the fact that Joe sixpack and grandma can use them, have a dual boot option for the entire line of new computers on which they are shipped.
2) Depending on their needs, some users spend all of their time in OS X and others spend all of their time in OS 9.x quite happily.
-------------------
When it comes down to it, people will accept *anything* if they don't realize that there is a choice. As soon as you are shown your choices, you will fight back when a choice is removed. Most of the people in the US do not complain because they never realized that there was a choice. Most users of Be, Linux, BSD, etc. have been shown the choice and fight back (or at least complain loudly;-)) when one of those choices has been unfairly removed.
Why is this so difficult to grasp? The easiest way to deprive someone of their rights is to convince them that they don't have rights in the first place. What do you think high school is for?;-)
Nope. XHTML is valid XML, but not regular HTML. HTML allows for the tag (no closing tag) and tags such as where attributes have no clear key/value pair or enclosing quotation marks. *Definitely* not well-formed XML, but perfectly valid HTML.
What if the XML document is representative of a dynamic aggregate of multiple schemas?
Say what? Heh heh...
Let's say you have an XHTML document (one DTD) that contains MathML (another DTD) and some SVG for good measure (third DTD). This would not be handled in your static DTD compile unless you made specific provisions for all of them in a single document. But what if the next document only has one of them used? Or two? Or includes some other one later? Are you going to compile every permutation of DTD that could ever occur?
This is where the strength of XML is not necessarily compatible with the strengths of ASN.1.
Adolescents thundered into drug use over three decades ago, and the world has never been the same, for better or worse (both, really). Are brilliant 15-year-old acid freaks running the world, upending existing institutions? Does it matter that childhood sometimes ends when drug use begins? Some have argued that trippers and stoners are committing a form of social parricide, turning on their parents and almost all other elders, as clueless, hostile and incompetent.
-----------
I think Jon Katz needs to watch the movie "Rebel Without A Cause" again; Teenage angst and rebellion in the 50s. The more things change, the more they stay the same. For example, when exactly was this golden age where fifteen year olds got along with their elders and didn't scream for revolution?
Computers are just the new outlet to an old, unresolved set of problems.
Java means a few things: the language, the bytecodes and the virtual machine. I think it's safe to say that sheldon was referring to the latter two.
The CLI and the JVM are comparable in this instance. As for which is better, I'm still not sure. For example, Python (through the use of Jython) can be compiled to Java bytecodes and can extend/be extended from Java classes (or anything else appropriately compiled to Java bytecodes). The same is true for ECMAScript (Javascript) through the use of Rhino.
Through the use of gcj, Java can be compiled to native code and has excellent two-way hooks to C++ for "native" code with CNI. C bigots can still use JNI (ugh) if they so choose. Java VMs are definitely more mature and "battle tested" than.NET's CLI, but I'm hard pressed to really pick a theoretical (intrinsic technical merits) winner. The more I hear about.NET, the more it truly does look like some things that Java has been doing for years.
And who knows, maybe the Java language will be ported to.NET. It can't be too hard considering the similarity with C#. If this is the case, Java becomes the more flexible solution again in that it could have three targets: Java bytecodes, CLI bytecodes or compile to native.
"Remember,.NET is a platform for distributed computing. Platform/language neutrality is a key part of that."
Ummm... Shouldn't that read, ".NET is an environment for language and platform neutrality. Distributed computing is a key part of that?"
Distributed computing is one part of it (a big part when you factor in Passport), but no bigger than EJBs (and related techs such as RMI-IIOP, CORBA, JNDI, etc.) are for Java. The distributed aspects are dependant upon the language/bytecode aspects, not the other way around. What good is Passport without the language/platform support and the CLI? What good are EJBs, Jython and Rhino if there is no JVM? Slightly different comparisons, but not by much.
And for the record, OpenBSD *is* better than Perl.;)
And you assert that 90% of commercial code isn't crap as well? And what about those research projects like PostgreSQL or JBoss? PostgreSQL started in the university environment as a database testbed. OK, JBoss isn't strictly a research project, but they openly state that a lot of work was done by folks working on features that ended up being the focus of a doctoral thesis. Linus Torvalds pursued a master's degree with the focus on porting Linux to new platforms. WebDAV (and most open protocols for that matter) is primarily driven by educational entities.
Mosaic was spawned from the cradle of UofI Champagne-Urbana. Or do people honestly believe that MA would have written it without the education or the advisors?
This whole "companies always make better software than universities" camp needs to get a wakeup call.
I'll remember that the next time the US Navy has a blue screen of death.
Electronics already permeate our lives. This technical saturation is only going to become more pronounced, not less. And that technology many times has software (sometimes in RAM, sometimes hard-coded in ROM).
How much time and money has Nimda or Code Red or any of the other electronic nuisances cost us? And all because of a "feature" of a class of operating system that has no executable bit and thinks that remote, no-check, executable code is acceptable rather than a rewrite. Painful to rewrite? Yes. Possibly crippling to Microsoft? Probably. Would benefit a lot of people to fix the cart with the square wheels. Maybe.
If the minimum wage had gone up at the same rate as CEO salaries since 1990, the minimum wage today would be $25.50/hr.
Or is it that CEOs work that much harder than they did ten or twenty years ago?
The guys at the top did NOT pull themselves up by the bootstraps. They were hoisted up on the backs of others. Don't get me wrong. I have met some truly brilliant minds that were in charge of some companies. But I've also met some true boneheads who still gleefully pulled in $500K/yr+. We're moving headlong back into the days of the robber baron who rules over his fiefdom with an iron fist. Yeah, those were good times. Well, of course! When was the last time you took a pay cut for some peon...er...someone else's job?
I agree that doesn't help. They're just restating code. If, however, the author of this code snippet had said something like
i += 1;
This gives semantic context to the action being performed and THIS is the point of comments; it's not about the restatement of code.
And then when your wunderkind has left the company because someone else offered a raise that you can't match, or the star decides to go into business for himself/herself, or dies from a caffeine overdose, and you are left with no documentation, no comments, no variables longer than four letters, and the "talent" isn't returning phone calls, then what? In your scenario you either lose a year going through the code one line at a time to find the off-by-one bug buried somewhere, your company goes bust making the attempt, or someone rewrites it (also wasting time). You're point would have merit if programmers were know for staying at a company for ten or twenty years. But in "the real development world" two years is the average.
So everyone should be screwed because some hotshot thought that LISP was a good idea for the problem at hand even though no one else at the company knows LISP? Sure the program is efficient and runs like a dream right now. Fat load of good that does you if it breaks or needs to be extended. And it will break. And it will need to be extended. All code has bugs. A large codebase has more bugs. And new requirements are a fact of life.
Egos don't keep companies in business and they certainly don't put food on the table.
If you can throw letters down in Emacs so quickly, why can't you seem to find time to have one line out of 15 be in English. It's not like you really have to switch tasks. You're supposed to be writing about the task at hand. I assume that you can program in more than one language; why isn't English one of them?
(Apologies in advance to those programmers who are in non-English-speaking development environments)
Let's compare:
...assuming they are English speakers of course. Proof? I have programmed (I don't count the BASIC years) for ~10 years. I have been writing/speaking English for over twice that long. Which do you think I'm better at?
for (i = 0; i array_size; i++)
free(array[i]);
free(array);
and now let's look at:
// get rid of the array
for (i = 0; i array_size; i++)
free(array[i]);
free(array);
Has your life *really* been so harmed? Is this *really* so terrible? Comments should not be written with the thought that your university professor would know what everything else means. Comments should be written so that all of those folks without a PhD in CompSci. know what it means.
What if the next joe to hit your code doesn't have a degree? What if the recently-hired intern was just handed a "C in 21 days" book and told by the manager to "fix it" because the programming team is snowed in (or similarly unavailable) and the customer is screaming? (Yeah, try and tell me that's never happened...)
A fine use of comments is (for example) every ten lines to say, in general, what is going on. One thing I used to do is write a comment at least every 10-15 lines. Why? When the next joe who comes along has to read/edit my code, scanning through some periodically placed comments will *always* be quicker and easier than reading the code.
The code effectively shows my implementation, but may not show my intention. I have coded for years. I started dreaming in code several years ago. Shortly thereafter, the code actually worked when I typed it in the next morning. That isn't the point. How good a coder you are isn't the point.
When you have a hundred thousand lines of code to go through, comments become like "Cliff's Notes." For the quick patch (probably the majority of code being written by most people), comments are invaluable. Who cares if I didn't read Moby Dick if I can still pass the pop quiz? If I need to make an indepth study, I can still do this, but thank god for the "Cliff's Notes."
Now then, on to the "proper" use of comments.
1. Write out what you are planning to do in English. (or whatever else may be the dominant language in your development group) Fill in every step in the problem. This is NOT psuedo code. This is akin to: Find out who www.yahoo.com is, open a connection, ask for the main page, and check to see if our cache is still valid. If the cache is stale (the yahoo page has been updated), get a new copy of the main page. If the cache is still valid, pull the page from cache instead. Drop the page into the "ready" bin and send a message to the user that the page is here.
2. Make a copy and label it "documentation."
3. Go back to the original, fill in all of the logic in whatever programming language at the appropriate points in your "documentation," and label it "source file."
This means that your documentation is done, your code is adequately commented, and your algorithm and intent(!) are clearly defined for both your co-workers (and yourself when you have to fix something ten months from now). If you can't spell out the problem and the solution in your primary native language, you sure as hell better not be trying to spell it out in a programming language that members of your team have only been using for two years.
The only excuse not to do the above is laziness. For some people, laziness is not considered a bad thing. It was noted as being one of the main virtues of a hacker -- hubris, laziness, and impatience. Hell, according to this measure, I myself am lazy from time to time. But cut the bravado, the beating of the chest, the battle cries of "I'm smart enough to figure this out, so should you be," and call a spade a spade. Avoiding comments means that you are being lazy.
Yeah, it'll be around for the next fifty years (or more). Just like COBOL. Better to find ways of interfacing with COBOL than to look at other languages in your development environment. Yes, that was sarcasm.
:-/
Strict constraint model? Like datatypes (XML Schema)? Like document structure (XML Schema)?
XML has this model. It is simply not as used yet (not as optimized yet). There is nothing inherent to XML that precludes its use for data storage. The fact that it is plain text in its *serialized* form is immaterial to its internal storage format in a hierarchical database. Nor does the fact that it's XML preclude the possibility of indexing the information just as you would a table column.
Something that relational databases are not as good at handling: web accessible data where the data does not allow for rigid guidelines. For example, in a web magazine, many articles are somewhat structured with author, date, title, etc., but otherwise tend to be very free-form.
Not a problem in and of itself, but what happens when you try to search it? How do you differentiate between a search for info in the title of a component use case and a search within a biliography? So you create a relational model that handles an arbitrary number of use cases and biliography entries -- all indexed by article. But some use cases have more information than others. Some have associated graphics. Suddenly we are shown not a many-to-many relationship, but a many-to-many-to-many-to-"Aw screw it. It'll take two days to query" relationship. Do you put markup data in the database? A regular expression on all of the content? Yeah, THAT's efficient.
We tend to think that anything that we put into a relational database can be adequately represented in XML. And we'd be right. Unfortunately many people believe that the reverse is also true. It is not.
Others have made the point of LDAP and naively assumed (as I once did) that a full blown relational database on the backend would be a better solution than the pansy in-process, flexible data model, file-based BerkeleyDB that's commonly used. What was found? User queries (VERY common query) from a listing of 400 users took about five seconds with BerkeleyDB behind OpenLDAP, and over a minute (!) using PostgreSQL behind LDAP. Why? The overhead involved in trying to represent a hierarchical tree in a relational model proved to have more overhead than it was worth.
An object database may have performed better than the relational model, but if you are mainly handling text or simple datatypes such as dates and integers (as most databases do), why not use XML and optimize for that case?
People scream that their relational database is enough and can be used for anything that an XML database can be used. These people sound very much like people screaming that a singly linked list is inherently better than a red-black binary tree. After all, they both hold data just as well. In fact, a linked list does it more efficiently (look! fewer pointers!) and there's nothing stopping you from sorting the singly linked list (plenty of efficient algorithms already out there for this). Yes, that was also sarcasm. And objects are useless, just use C.
Use the right tool for the job. In many (most?) cases,a relational database fits the bill. Sometimes an object database is called for. Sometimes a hybrid of the two. Is it so hard to accept that maybe, just maybe, when the only thing that you do is XML processing and XML data sharing (more and more common these days) that a dedicated XML datastore might be what the doctor ordered?
Not really... Netscape Portable Runtime is at version 4.1. The APR came about with the development of Apache 2.0 (still not out of beta yet). NSPR had been tested and used since before Mozilla started development. It's been the cross-platform glue that put Netscape Communicator on so many different kinds of computer.
:-/
Not to slight the APR, it's a well engineering library. However I still think that the ASF would have been better served by reusing (and improving) the NSPR than making their own.
So much for code reuse in free software...
While this particular point may be in contention, I would side with such works as The Elements of Style by Strunk and White. The New York Times, The Boston Globe, The Wall Street Journal, The New Yorker, and others would seem to agree with me.
If I had to choose between a web site grammar reference and one of the seminal works on the topic for over forty years (and longer for students of William Strunk Jr. back to the beginning of the 20th century), I'll choose the little book.
Just in case anyone is wondering, the notes on apostrophes appear on page one.
I'll be sure and tell that to all of the good actors, artists, musicians, and writers out there who still act in local non-profit productions, play music in the park, or write short stories (or novels!) in their apartment with no intention of trying to publish.
Programmers are not paragons of altruism. People will work for free if it suits them. Sometimes those people are programmers.
As far as reasons why artists and writers don't work en masse on open source projects, I'm sure it's a matter of interest and coupled with the fact that far too many programmers don't have the decency to be polite when in close company with others (There's a reason the stereotype exists).
Take a look at all of the posts recently on Slashdot. Now count up the number of times someone derides users because they are stupid or ignorant. Check to see if those users are thought of in this way because they do not spend their weekends indoors in front of a computer tweaking bash scripts. Now imagine that a non-expert in computers reads this (or more likely hears this from the "expert" in person). Can anyone honestly blame a large segment of the population for shunning software authors?
People quit projects all of the time because someone involved in the project is an absolute dick. As a software author, I find it easier to deal with assholes as long as they know their stuff. If you don't know computers that well, there is no good reason to put up with it. Artists are NEVER gonna be in it because the lead came up with a great indexing algorithm using suffix trees.
"The defects found in RedHat and Windows are really stupid."
You haven't programmed much have you? (At all? No, patching a C file a couple of times and writing some bash scripts does not count as programming much) Most programmers know that there will be (not might be) bugs in the code. As far as stupid defects, yes they've both had their share. However RedHat is nowhere near Windows in terms of sheer volume of severe bugs. I don't know where you got your data. The last one that I saw was clearly biased (they counted general Linux bugs and RedHat-specific bugs together even though there was significant overlap).
Also note that RedHat uses newer versions of programs than most other Linux distributions. They don't hide this fact. I applaud them for it. Why? Because if they didn't, glibc2 would not have been adopted as quickly as it was. And what about the "broken" compiler that came out with RedHat 7? People railed and hollered because they couldn't compile their kernels. Actually they could, but people conveniently forgot that RedHat posted notices in big letters that they have to use the older version of the compiler to compile (oh no! you have to use kgcc instead of gcc! how will users ever figure that out, especially if RedHat explicitly tells them that they have to). Yes there were bugs in the compiler. It was patched, but the kernel still didn't build. Why not? Because there was code in the kernel that was not compliant with the C99 standard. People's C++ code wouldn't compile anymore. Why? Because a lot of C++ code is plainly incompatible with the ISO98 standard of C++. You know that thing that Slashdotters are always railing about: STANDARDS. Or do you advocate ignoring standards when they don't suit you? Wouldn't that make you like Microsoft? These are standards that were ratified and publically announced two and three years ago. How can you say that they snuck up on you?
What does C99 give you?
Allocated on the stack so no need for malloc or free (and less corresponding bugs) and basically eliminates the hacks out there to accomplish them same like alloca.What does ISO98 C++ give you? The Standard Template Library. 'Nuff said.
These are examples, but are indicative of a general trend.
- New library or suite that is noticeably better comes out
- RedHat recognizes that it is better, includes it in their distribution, tests, and releases
- People bitch and moan about how it breaks things that don't come with the distribution
- Everyone blames RedHat for doing a horrible job
- Because it is being used, the library in question gets a shakedown and most bugs are worked out quickly
- People reluctantly fix their programs to work with the updated library/suite so that they can run on RedHat
- In the course of fixing, people come across the advantages of the new library/suite and herald its arrival
- People deride the older version
- People forget it was RedHat that drove the newer, better library/suite into general use
- Goto 1 because geek memories appear to be very short
If you want a closer-to-perfect RedHat box, install a copy from two versions ago and install all of the associated patches for it. This will be about the equivalent of a standard Debian install: very secure, but quite out of date. If you run Debian unstable or testing, while having more up-to-date software, you find that many of those "stupid defects" find their way into that distribution as well.VBScript comes with all installs of Windows. The JavaScript engine is installed with IE (and therefore effectively all installs of Windows). PerlScript works in exactly the same way (Perl talking to COM objects instead of VBScript talking to COM objects for example), but is a separate download.
:-/
As far as the downside, the reasons why it has been abused (I still think that WSH is a good idea) is that (a) Windows launches files ignorantly by file extension, (b) all files are effectively executable (as though everything was chmod +x) and (c) mail programs et al on Windows launch attachments directly to the system execution engine (which is based on file type). Oh wait! They added an alert box to Outlook!
As far as perl2exe is concerned, you were probably using the basic pack which ships as a single executable (no -tiny option -- no that's not a joke or typo). If you have many of these programs on a system, you can install a single large DLL (just like VB) and distribute much smaller application EXEs for your actual programs.
The fact that Perl is interpreted is basically immaterial. Any language can be interpreted if you run it through an interpreter instead of a compiler. There is even a C interpreter out now! The converse is also true. Any language could be compiled as well. What do you think an interpreter does? It takes textual input and translates them to machine code on the fly. Compiling does the same, but prior to use and only once (as opposed to every time the program is started).
An optimizing compiler is technically difficult and options like perl2exe and ActiveState's product are not optimizing compilers. They merely package the interpreter with each executable to avoid the explicit need to install an interpreter. This doesn't mean that someone couldn't write an optimizing complete compiler for Perl. It would (and has historically been) quite difficult, but difficult != impossible.
By the way, I didn't mean to criticize you per se. I just wanted people to know what's really out there and not vague suppositions.
On a related note, someone mod the grandparent (not the parent) down. While happily towing the party line, it is still completely inaccurate (except for the bit about OS/2 having REXX installed by default).
Most modern operating systems have an advanced file cache. If you think of your disk cache as a dynamic RAM drive, you're getting the idea. A dedicated file server will serve commonly used files at RAM drive speeds due to the file data already located in the server's RAM.
Let's analyze the options.
2GB Network RAM Drive
Pros: None
Cons: Very expensive for the storage while bound by network bandwidth. No advantages over a harddrive-based network drive with a healthy RAM cache. Data is volitile -- needs constant power.
2GB RAM Drive
Pros: Very fast access for non-sequential access
Cons: Performance bound by IDE/SCSI bus. Low total storage when compared to hard drives. Data is volitile -- needs constant power.
40GB Hard Drive + 2GB RAM
Pros: Just about as fast as dedicated RAM drive access for most data sets. Hard drives 1/10 the cost of similar RAM-only solution. Very large sizes available. RAM cache adapts to filesets used. Data is non-volitile -- does not require constant power.Cons: Not as glamourous.
Conclusion: Unless you have nothing better to do or have a specific need (space or vibration-resistance?), hard drives backed with a RAM cache win.
If any idiot can administer a Windows server, any idiot will.
Well it is being re-written from scratch. Same name though.
_ 0. html
http://httpd.apache.org/docs-2.0/new_features_2
Many times the original design has been stressed past its breaking point. Either due to lack of foresight or due to lack of a crystal ball, some projects are better off being rewritten. Believe it or not, sometimes rewriting saves time.
Apache (and others) runs on Windows. ASP can be served from non-IIS boxes.
http://www.chilisoft.com/chiliasp/windows.asp
That being said, why do people have to run IIS? Granted, ISAPI filters need IIS (to my knowledge). How many ASP shops are dependent upon ISAPI filters? 1 out of 100? 1 out of 1,000? The vast majority are simply VBScript talking to COM objects; hardly bleeding edge technology.
Unless you were connected to a different Internet than the rest of us, you did. We all did whether we run with Apache on Linux or IIS on Windows. You just kept that one particular (group of?) server from adding to the overall problem.
I and many of my coworkers run Linux at the office. Those that were running Windows machines (IIS for development purposes and not production) got hit and started saturating the local network.
Folks who aren't even running Windows are more than pissed. With old time bootsector viruses, those of us with sane virus protection and/or non-Windows systems could scold from afar. With the advent of (equivalent of) remote root exploits popping up on a regular basis, everyone is getting hit with a DoS attack.
I'm glad to hear that there is at least one more IIS administrator out there with half a brain and thinking about security. Unfortunately we need far greater numbers of IIS administrators than one more.
As the old adage goes, "If any idiot supposedly can administer a Windows box, any idiot will."
Hmmm... Where to start?
Microsoft started trying to kill Java back with IE 4 when they had a kick ass JVM, but decided to "forget" certain features such as RMI. The lawsuit simply formalized the animosity.
If MS stops including it, it will be a blow against Java. How big a blow remains to be seen. Alternative browsers are supporting Java through the Java plugin quite consistently. Also, many OEMs have committed to install Java on new Windows systems without Microsoft's help. MS still provides a JVM as a separate download, and Sun still provides the Java plugin for IE. It remains to be seen whether or not this will be a major issue or not.
Browsers that use the plugin have at least Java2 functionality. This allows a significantly greater featureset and raises the bar on compatibility.
With regards to differences, if AWT is used, yes they will look different from one another. This was the point with AWT, that it would look like the underlying platfrom (with the same widgets).
Mozilla (and Opera) uses the Java plugin (and not its own JVM like Netscape 2.0-4.x and IE). Also it is obvious that you haven't used Mozilla with Java recently. The crash bugs that you mention have been stamped out to a large extent. Is it bulletproof? No, but then again are most browsers bulletproof? The point is that I go to sites with Java applets on a regular basis (every day) and have not crashed due to an applet in a couple of months now. I'd say that was stable enough for most.
Chat applications do not have to be trusted applets. I know. I've written a few. Applets can do anything except for the following restrictions: You can only make a network connection to the server the applet came from, you cannot make local filesystem calls, and you cannot call native code. I don't know about you, but that has left quite a bit of room for me to fiddle before having to sign the applet. Your only real limitation is what the client's JVM version is right now. Note that the versioning runs into the same problem that we all face with HTML vs. XHTML vs. DHTML vs. CSS2 -- it's not just Java's problem.
Regarding taking too long to load, this is a programming issue. When Gnome took a while to start up, did you blame C? There are things that you can do to make the applet visible earlier (judicious use of init() and start()). Just as with every other language, there are crap coders in Java as well. And many of those crap coders make applets. Are applets perfect? Of course not, but bad coders have done more to tarnish the Java moniker than any inefficient JVMs.
Use the right tool for the job. Use HTML/DHTML to general presentation, Flash for multimedia, and Java for the things that the previous two just can't handle. In fact, both IBM (DirectDOM) and Mozilla (Blackwood) have make considerable inroads on having Java manage logic on the browser while leaving the UI to the browser widgets. Imagine! The power of a full, typed, OO language with the ease of a browser's DOM. Network-aware, portable programs can be a good thing. In this arena, Java is the best choice. What else are you going to use? ActiveX? In many cases, when it comes down to it, you use Java or you don't do it all. I prefer to use Java rather than sticking my head in the sand and pining for the simpler times.
The simpler times covered 40% of the problems on the 'Net. Some of us want to get the other 60% underway.
---------------
Now then, back to the main topic. Those out there who are worried about security in other languages, ActiveScript on IE (the framework behind VBScript, JavaScript, PythonScript, and PerlScript) does not allow you to instantiate objects that talk to the local filesystem. The trick there was that the various languages had to conform to the framework's security model as opposed to the framework trying to work with all of the different languages/versions out there.
The next one? Try the first one. The original U.S. Revolutionary War fought against not only a monarchy, but a corporate tyrant (East India Company) sanctioned by that monarchy. To whom do you think the tea in the Boston Harbor belonged? Prior to the latter end of the 19th century (around the time of the U.S. Civil War), corporate charters were regularly revoked when it was found that the corporation worked contrary to the public good.
;-)
The U.S. doesn't need a new Constitution or Bill of Rights. It just needs to enforce what is already there. If there is another revolution, it should simply be a reiteration of the first one.
That said, I don't think a revolution is really necessary at this point. The system's broken, but not THAT broken. Also, revolution does not happen when a populace doesn't care enough to watch what's going on. Apathy from the citizens regarding government/corporate control is the greatest tyrant.
Remember that the next time you see only a 1/4-1/3 turnout on election day or decide not to protest what you believe is wrong because you can't seem to get yourself out from in front of the television.
...or a Slashdot forum.
1) Agreed about the face recognition when and only when used in places where privacy/anonymity is not expected.
2) With regards to Vietnam, the US Congress never declared war. The soldiers over there were "advisors." We never declared war in Korea. It was a "police action."
3) Is this why Japanese-Americans were interned (what a wonderful euphemism for institutionalized kidnapping) during World War II? What about blacklisting and red-baiting in the 50's? What about the Jim Crow laws in the south? For that matter, what about the treatment of Native Americans from 1776 through today? Where was the Supreme Court then? Do you really think with the history of the US that somehow crypto will get special treatment and is somehow exempt from corruption?
Do not confuse FUD with intelligent discourse and disagreement.
Would you be more specific? I haven't personally had the pleasure of writing Lisp and therefore can't say one way or another whether it is good or bad.
On the other hand, the "complex mess" to which you refer is a necessary component of modern software development. I am not saying that those particular keywords or that their implementation in specific languages such as Java and C++ are the best that will ever come to be. However the ability to say "You may not call this function. This function was not meant for you," is very necessary in order to keep careless keystrokes (and careless coworkers) away from important data structures.
Do I read you correctly that Lisp cannot enforce private members? I certainly hope I misunderstood. And if so, could someone please tell me what was intended?
To all of the folks that say that average Joe user can't deal with multiple operating systems on a system
;-)) when one of those choices has been unfairly removed.
;-)
To all of the folks that say that average Joe user doesn't want some things from one OS and other things from a second (or third) OS
To all of the folks that say that average Joe user would never reboot to use a different program
I put forth some counter-examples.
1) A pair of OSes, lauded on the fact that Joe sixpack and grandma can use them, have a dual boot option for the entire line of new computers on which they are shipped.
2) Depending on their needs, some users spend all of their time in OS X and others spend all of their time in OS 9.x quite happily.
-------------------
When it comes down to it, people will accept *anything* if they don't realize that there is a choice. As soon as you are shown your choices, you will fight back when a choice is removed. Most of the people in the US do not complain because they never realized that there was a choice. Most users of Be, Linux, BSD, etc. have been shown the choice and fight back (or at least complain loudly
Why is this so difficult to grasp? The easiest way to deprive someone of their rights is to convince them that they don't have rights in the first place. What do you think high school is for?
Nope. XHTML is valid XML, but not regular HTML. HTML allows for the tag (no closing tag) and tags such as where attributes have no clear key/value pair or enclosing quotation marks. *Definitely* not well-formed XML, but perfectly valid HTML.
What if the XML document is representative of a dynamic aggregate of multiple schemas?
Say what? Heh heh...
Let's say you have an XHTML document (one DTD) that contains MathML (another DTD) and some SVG for good measure (third DTD). This would not be handled in your static DTD compile unless you made specific provisions for all of them in a single document. But what if the next document only has one of them used? Or two? Or includes some other one later? Are you going to compile every permutation of DTD that could ever occur?
This is where the strength of XML is not necessarily compatible with the strengths of ASN.1.
Adolescents thundered into drug use over three decades ago, and the world has never been the same, for better or worse (both, really). Are brilliant 15-year-old acid freaks running the world, upending existing institutions? Does it matter that childhood sometimes ends when drug use begins? Some have argued that trippers and stoners are committing a form of social parricide, turning on their parents and almost all other elders, as clueless, hostile and incompetent.
-----------
I think Jon Katz needs to watch the movie "Rebel Without A Cause" again; Teenage angst and rebellion in the 50s. The more things change, the more they stay the same. For example, when exactly was this golden age where fifteen year olds got along with their elders and didn't scream for revolution?
Computers are just the new outlet to an old, unresolved set of problems.
Please substitute "CLI" with "CLR" where appropriate. Oops... :)
The CLI and the JVM are comparable in this instance. As for which is better, I'm still not sure. For example, Python (through the use of Jython) can be compiled to Java bytecodes and can extend/be extended from Java classes (or anything else appropriately compiled to Java bytecodes). The same is true for ECMAScript (Javascript) through the use of Rhino.
Through the use of gcj, Java can be compiled to native code and has excellent two-way hooks to C++ for "native" code with CNI. C bigots can still use JNI (ugh) if they so choose. Java VMs are definitely more mature and "battle tested" than .NET's CLI, but I'm hard pressed to really pick a theoretical (intrinsic technical merits) winner. The more I hear about .NET, the more it truly does look like some things that Java has been doing for years.
And who knows, maybe the Java language will be ported to .NET. It can't be too hard considering the similarity with C#. If this is the case, Java becomes the more flexible solution again in that it could have three targets: Java bytecodes, CLI bytecodes or compile to native.
Ummm... Shouldn't that read, ".NET is an environment for language and platform neutrality. Distributed computing is a key part of that?"Distributed computing is one part of it (a big part when you factor in Passport), but no bigger than EJBs (and related techs such as RMI-IIOP, CORBA, JNDI, etc.) are for Java. The distributed aspects are dependant upon the language/bytecode aspects, not the other way around. What good is Passport without the language/platform support and the CLI? What good are EJBs, Jython and Rhino if there is no JVM? Slightly different comparisons, but not by much.
And for the record, OpenBSD *is* better than Perl. ;)