That's what's supposed to happen in a few short billion years, correct?
Nope. It will just gradually swell to about the orbit of Mars. Planet cores might survive, but wouldn't be exactly suitable for living. Or something like that. My last physics class was more than a decade ago.:-)
The fact is that before Bill Gates, there was no Microsoft, no employees, no product, no sales.
Well I give you one out of four here. There was, in fact no Microsoft, but people were employed, made products and sold them all the same. Monopoly is definitely reducing the total number of software jobs and products.
what an incredibly successful accomplishment it is
If you mean his personal accomplishment to make money for himself, then definitely. If you mean the contribution to society - well there is a good but crazily expensive word processor and a decent C++ development IDE. This doesn't make up for all the areas where they destroyed or diminished other companies - Apple *, Netscape, Real, Corel, Lotus - and stopped making improvements to their own product once they had all or most of the market.
Are you seriously implying that giving people a work environment where opening an e-mail message without any attachments wipes out your HD is an accomplishment?
* Yes, this one actually needed a wake up call from MS to make a better product. But now they do have one, and would be enourmously popular if not for MS monopoly. And cheaper too - high volume == low cost.
Linux configuration (and use) can be mostly done from the command line, which is nicely amendable to a screen reader interface. Windows and OSX configuration on the other hand...
e-commerce web applications certainly need performance, security, stability and scaling to large number of concurrent sessions. Therefore all of them are written in C. Oh wait...
SSL already adds a performance overhead. On the other hand, Java web servers have been known to handle a large number of sessions.
If the security is really critical, it doesn't make sense to use software with potential buffer overflows. If security is not important, just use telnet. For something in the middle, use a shell with symmetric encryption like AES using a hash of your login password, without sending the password itself over. This kind of simple code is far less likely to have memory problems than OpenSSL.
Of course, a portable mp3 player alone can not save a computer company. They need to continue improving notebooks, get IBM to release CPUs with monsterous performance, make music store profitable (I am buying $40 audiobooks - should be some way there), add really impressive features to the OS...
But above all, they need to continue making new gadgets. iPod is sweet, now I want an HD-based camcoder/QT player that fits comfortably in my pocket and syncs with my DVD collection. How about an elegant stereo/video/game player box in my living room that talks to a Mac through an AirPort extreme station? How about a PDA with really fantastic voice/handwritting recognition?
I have some problems with its lack of language features, but for security-critical components memory safety, configurable security settings and controlled crashes (exceptions that can be caught and terminate just one thread) can not be beat. sshd should be written in Java, at least as an option for extra security, with as little native code as possible.
With an exception for static linking. Makes a big difference for commercial development, although geniuses in my company decided that even using public domain code is illegal without a "license". Think I can make a quick buck selling licenses for BSD sources and textbook examples?
As in automatic mounting and unmounting, syncing with multiple devices and so on, rather than remain unpolished like so many Linux projects. I remember trying to sync a USB Clie with Linux and, although programs like kpilot were out for a while, they still required manual commands in a terminal window to work.
No, but we do have the author's address.
on
Junkie Loves His Spam
·
· Score: 4, Funny
"Write to Mylene Mangalindan at mylene.mangalindan@wsj.com". Shall we?
As annoying as ads may be, I'd rather have a site with heavy full motion ads and quality content than no ads and poor content.
Well, it depends on the nature of the content, doesn't it? If it's some essential professional information, then yes I would put up with ads but would prefer to buy a day pass for a reasonable price. If it's purely for entertainment though, I would absolutely for poor, ad-free content (USENET anyone?), or so-so, non-intrusive ad content? Actually "poor" is not the right word, because hobbyists often publish good stuff, but surely getting paid to work full time counts for something.
X can not impose a contract on Y not to do so, because it would violate the GPL. And from the point of view of Y, all distributing the source would do is create some competition to X, which can only be good by lowering the prices. And besides, all one would need to do is buy one chip from X and make the code public.
I guess the only case to worry about is when X and Y are actually controlled by the same people, for the specific purpose of flouting the GPL. This is the case to be sorted out in court (IANAL), but most probably X and Y will lose.
By that logic, an OS without memory protection or preemptive multitasking is not to be blamed for lock ups - applications are.
Maybe device drivers a bit different because some operations can cause a hardware malfunction that will bring down the machine no matter what the OS does. But I bet most crashes are due to more trivial reasons - a driver corrupting kernel memory, waiting forever for a failed operation, taking 100% of CPU time an so on.
There is no excuse why device drivers can not have their own protected memory space, swap to virtual memory, only be able to access mapped memory and I/O ports they are supposed to use, communicate with the kernel through regular system calls and receive queued interrupts by reading from sockets. There is no reason device drivers can not be implemented in Java.
Have real-time concerns or chicken-and-egg problems (disk drivers will have a hard time using virtual memory)? Fine, implement that driver - or just the portion that needs to be real time - in kernel. Just don't tell me my Palm USB driver needs to corrupt kernel memory and crash the system.
In both languages you can force a garbage collection of an object, and also specify code to be run att finalization.
You can explicitely call socket.close() on a particular object or force a global GC (but you still need to set all references to null explicitely and I believe new VMs ignore it). However, there is no clean, readable and fast equivalent of C++ destructors for local variables.
Are you kidding me? Ugly hacks like refcounting doesn't make your code ugly? Heh, yeah, sure.
They make class implementation kind of ugly, but class use is unchanged. The whole point of OOP is to define a class once and use it many times, so the ugliness is confined to a small portion of the code.
A real OO-language as Java or C# doesn't need for example templates since all objects inherit Object as they should.
You must really like explicit casts. I know about generics in Java 1.5 and will have a good look. As I understand, there is a trade-off of reduced code size vs performance/runtime memory use, especially for primitive types. I am not sure if there are big semantic holes vs C++ templates as well.
They also both have usigned types
Care to list ones in Java?
Multiple inheritance is usually seen as A Really Bad Idea and should be done with interfaces
A method in an interface often has a sensible default implementation. Why should I be forced to re-type it for each class?
And what exactly am I supposed to do in catch [...]? If you can not do anything else with an object, you better be able to at least get rid of it. Errors can go to some log file or class static variable that can be examined from time to time.
By the way, Java doesn't address the problem any better than C++. If you don't explicitely close the socket, the exception will be thrown in finalizer thread. On the other hand, in C++ you can define an explicit close method if you wish and even add assert(isClosed) in the actual destructor to enforce use.
C++ has a guarantee that destructors of local variables will be called immediatelly when the variable goes out of scope. Java doesn't have any solution for that except hand-writting finally blocks.
... if I had an equivalent set of class libraries. Haven't actually seen one for C++, but Cocoa for Objective C is pretty good and there is an ObjC++ compiler.
The way I see it, the benefit of garbage collection is nearly canceled by the lack of stack variables and guaranteed destructor calls. I want to just declare a "Socket" variable in the middle of my function and have a guarantee that the socket will be closed when the block is existed in whatever way. finally or with just don't cut it. Say, I use 2 sockets, 1 file, a mutex and a temporary hash table entry at different points in a function. Imagine the mess of nested blocks, especially since Socket.close can actually throw an exception!
By contrast, memory management problems in C++ can be mitigated by destructors, reference counting and containers that automatically free members. Not ideal, but usually doesn't disfigure your code.
Now add other things missing from Java and/or C# - preprocessor, templates, multiple inheritence, operator overloading, unsigned types - and the new languages are really not that compeling for large projects that need heavy-duty, "dirty" features to manage complexity and can afford a regression suite that runs under Purify to fix memory corruption or leaks.
I know Java 1.5 has generics and C# has some more of C++ features compared to Java, but the matter of fact is that both languages are still tradeoffs compared to C++ in terms of productivity and stability rather than a clear step forward.
I would like to see a language that preserves as many features of C++ as possible while adding garbage collection, memory safety, language-based security and guaranteed binary compatibility between platforms/OSes. I don't think managed C++ is "it". Why can't a VM support multiple inheritence? Any pointers?
He can think whatever he wants, but I wish he should stop assuming most other free software developers have a political agenda. Most people release free software because they wrote something for their own use, have no plans to make money off it (one has to be disturbed to try making money of everything he or she does) and don't want good work to go to waste. GPL and LGPL help to enforce respect for the original author - if I have a free game on my home page, I don't want other people to sell a trivial modification as their own.
But with the way things are going, I am tempted to use another license next time I release a free program. If anything I don't want to write that my program can be used under "GPL version 2 or later", because I am scared of what RMS might put in version 3.
I am looking for an existing license that lets a closed-source project take my code, use it for some fixed time (say 5 years) and then they have to release their changes to the public. This would be an equivalent of the original copyright law, modified for specific requirements/development speed of software.
...a datastream of an unknown kind which is compressed, hidden using steganography, has plausable deniability using an legal, escrowed key and so on?
FBI might as well accept that people are able to talk privately in virtual space just as they usually can in real world. They'll just have to rely on common carelessness or on some other methods to stop crime.
You could say the same thing about a great lot of things:
global variables
goto statements
multithreading
C preprocessor
XML
parser generators like yacc
And yet any huge programming project is likely to need all of these things to remain readable. Operator overloading is not that difficult to use correctly, really. + means append 2 entities together. a[n] means a is some kind of map and n is the key. > are for I/O if not used for algebraic entities. ++ and -- are for iterators.
The biggest problem with C++ is that it doesn't allow you to define your own infix operators and specify their precedence and associativity, for the cases where none of the built-in ones really make sense.
That's what's supposed to happen in a few short billion years, correct?
:-)
Nope. It will just gradually swell to about the orbit of Mars. Planet cores might survive, but wouldn't be exactly suitable for living. Or something like that. My last physics class was more than a decade ago.
The fact is that before Bill Gates, there was no Microsoft, no employees, no product, no sales.
Well I give you one out of four here. There was, in fact no Microsoft, but people were employed, made products and sold them all the same. Monopoly is definitely reducing the total number of software jobs and products.
what an incredibly successful accomplishment it is
If you mean his personal accomplishment to make money for himself, then definitely. If you mean the contribution to society - well there is a good but crazily expensive word processor and a decent C++ development IDE. This doesn't make up for all the areas where they destroyed or diminished other companies - Apple *, Netscape, Real, Corel, Lotus - and stopped making improvements to their own product once they had all or most of the market.
Are you seriously implying that giving people a work environment where opening an e-mail message without any attachments wipes out your HD is an accomplishment?
* Yes, this one actually needed a wake up call from MS to make a better product. But now they do have one, and would be enourmously popular if not for MS monopoly. And cheaper too - high volume == low cost.
Linux configuration (and use) can be mostly done from the command line, which is nicely amendable to a screen reader interface. Windows and OSX configuration on the other hand...
e-commerce web applications certainly need performance, security, stability and scaling to large number of concurrent sessions. Therefore all of them are written in C. Oh wait...
SSL already adds a performance overhead. On the other hand, Java web servers have been known to handle a large number of sessions.
If the security is really critical, it doesn't make sense to use software with potential buffer overflows. If security is not important, just use telnet. For something in the middle, use a shell with symmetric encryption like AES using a hash of your login password, without sending the password itself over. This kind of simple code is far less likely to have memory problems than OpenSSL.
Of course, a portable mp3 player alone can not save a computer company. They need to continue improving notebooks, get IBM to release CPUs with monsterous performance, make music store profitable (I am buying $40 audiobooks - should be some way there), add really impressive features to the OS...
But above all, they need to continue making new gadgets. iPod is sweet, now I want an HD-based camcoder/QT player that fits comfortably in my pocket and syncs with my DVD collection. How about an elegant stereo/video/game player box in my living room that talks to a Mac through an AirPort extreme station? How about a PDA with really fantastic voice/handwritting recognition?
Are you sure about that?
I have some problems with its lack of language features, but for security-critical components memory safety, configurable security settings and controlled crashes (exceptions that can be caught and terminate just one thread) can not be beat. sshd should be written in Java, at least as an option for extra security, with as little native code as possible.
With an exception for static linking. Makes a big difference for commercial development, although geniuses in my company decided that even using public domain code is illegal without a "license". Think I can make a quick buck selling licenses for BSD sources and textbook examples?
As in automatic mounting and unmounting, syncing with multiple devices and so on, rather than remain unpolished like so many Linux projects. I remember trying to sync a USB Clie with Linux and, although programs like kpilot were out for a while, they still required manual commands in a terminal window to work.
"Write to Mylene Mangalindan at mylene.mangalindan@wsj.com". Shall we?
As annoying as ads may be, I'd rather have a site with heavy full motion ads and quality content than no ads and poor content.
Well, it depends on the nature of the content, doesn't it? If it's some essential professional information, then yes I would put up with ads but would prefer to buy a day pass for a reasonable price. If it's purely for entertainment though, I would absolutely for poor, ad-free content (USENET anyone?), or so-so, non-intrusive ad content? Actually "poor" is not the right word, because hobbyists often publish good stuff, but surely getting paid to work full time counts for something.
Preferences/Advanced/Style Sheet. Works like a charm!
X can not impose a contract on Y not to do so, because it would violate the GPL. And from the point of view of Y, all distributing the source would do is create some competition to X, which can only be good by lowering the prices. And besides, all one would need to do is buy one chip from X and make the code public.
I guess the only case to worry about is when X and Y are actually controlled by the same people, for the specific purpose of flouting the GPL. This is the case to be sorted out in court (IANAL), but most probably X and Y will lose.
By that logic, an OS without memory protection or preemptive multitasking is not to be blamed for lock ups - applications are.
Maybe device drivers a bit different because some operations can cause a hardware malfunction that will bring down the machine no matter what the OS does. But I bet most crashes are due to more trivial reasons - a driver corrupting kernel memory, waiting forever for a failed operation, taking 100% of CPU time an so on.
There is no excuse why device drivers can not have their own protected memory space, swap to virtual memory, only be able to access mapped memory and I/O ports they are supposed to use, communicate with the kernel through regular system calls and receive queued interrupts by reading from sockets. There is no reason device drivers can not be implemented in Java.
Have real-time concerns or chicken-and-egg problems (disk drivers will have a hard time using virtual memory)? Fine, implement that driver - or just the portion that needs to be real time - in kernel. Just don't tell me my Palm USB driver needs to corrupt kernel memory and crash the system.
In both languages you can force a garbage collection of an object, and also specify code to be run att finalization.
You can explicitely call socket.close() on a particular object or force a global GC (but you still need to set all references to null explicitely and I believe new VMs ignore it). However, there is no clean, readable and fast equivalent of C++ destructors for local variables.
Are you kidding me? Ugly hacks like refcounting doesn't make your code ugly? Heh, yeah, sure.
They make class implementation kind of ugly, but class use is unchanged. The whole point of OOP is to define a class once and use it many times, so the ugliness is confined to a small portion of the code.
A real OO-language as Java or C# doesn't need for example templates since all objects inherit Object as they should.
You must really like explicit casts. I know about generics in Java 1.5 and will have a good look. As I understand, there is a trade-off of reduced code size vs performance/runtime memory use, especially for primitive types. I am not sure if there are big semantic holes vs C++ templates as well.
They also both have usigned types
Care to list ones in Java?
Multiple inheritance is usually seen as A Really Bad Idea and should be done with interfaces
A method in an interface often has a sensible default implementation. Why should I be forced to re-type it for each class?
You must really like explicit casts.
Does it include a free (as in not demanding anything back from me) UI library with visual design tools? :-)
... of using it to cleanup things like sockets and files? Could be a huge clean up of my Java code if it works.
And what exactly am I supposed to do in catch [...]? If you can not do anything else with an object, you better be able to at least get rid of it. Errors can go to some log file or class static variable that can be examined from time to time.
By the way, Java doesn't address the problem any better than C++. If you don't explicitely close the socket, the exception will be thrown in finalizer thread. On the other hand, in C++ you can define an explicit close method if you wish and even add assert(isClosed) in the actual destructor to enforce use.
C++ has a guarantee that destructors of local variables will be called immediatelly when the variable goes out of scope. Java doesn't have any solution for that except hand-writting finally blocks.
How does it reduce the number of nested blocks compared to Java "finally"? :-)
... if I had an equivalent set of class libraries. Haven't actually seen one for C++, but Cocoa for Objective C is pretty good and there is an ObjC++ compiler.
The way I see it, the benefit of garbage collection is nearly canceled by the lack of stack variables and guaranteed destructor calls. I want to just declare a "Socket" variable in the middle of my function and have a guarantee that the socket will be closed when the block is existed in whatever way. finally or with just don't cut it. Say, I use 2 sockets, 1 file, a mutex and a temporary hash table entry at different points in a function. Imagine the mess of nested blocks, especially since Socket.close can actually throw an exception!
By contrast, memory management problems in C++ can be mitigated by destructors, reference counting and containers that automatically free members. Not ideal, but usually doesn't disfigure your code.
Now add other things missing from Java and/or C# - preprocessor, templates, multiple inheritence, operator overloading, unsigned types - and the new languages are really not that compeling for large projects that need heavy-duty, "dirty" features to manage complexity and can afford a regression suite that runs under Purify to fix memory corruption or leaks.
I know Java 1.5 has generics and C# has some more of C++ features compared to Java, but the matter of fact is that both languages are still tradeoffs compared to C++ in terms of productivity and stability rather than a clear step forward.
I would like to see a language that preserves as many features of C++ as possible while adding garbage collection, memory safety, language-based security and guaranteed binary compatibility between platforms/OSes. I don't think managed C++ is "it". Why can't a VM support multiple inheritence? Any pointers?
He can think whatever he wants, but I wish he should stop assuming most other free software developers have a political agenda. Most people release free software because they wrote something for their own use, have no plans to make money off it (one has to be disturbed to try making money of everything he or she does) and don't want good work to go to waste. GPL and LGPL help to enforce respect for the original author - if I have a free game on my home page, I don't want other people to sell a trivial modification as their own.
But with the way things are going, I am tempted to use another license next time I release a free program. If anything I don't want to write that my program can be used under "GPL version 2 or later", because I am scared of what RMS might put in version 3.
I am looking for an existing license that lets a closed-source project take my code, use it for some fixed time (say 5 years) and then they have to release their changes to the public. This would be an equivalent of the original copyright law, modified for specific requirements/development speed of software.
...a datastream of an unknown kind which is compressed, hidden using steganography, has plausable deniability using an legal, escrowed key and so on?
FBI might as well accept that people are able to talk privately in virtual space just as they usually can in real world. They'll just have to rely on common carelessness or on some other methods to stop crime.
And yet any huge programming project is likely to need all of these things to remain readable. Operator overloading is not that difficult to use correctly, really. + means append 2 entities together. a[n] means a is some kind of map and n is the key. > are for I/O if not used for algebraic entities. ++ and -- are for iterators.
The biggest problem with C++ is that it doesn't allow you to define your own infix operators and specify their precedence and associativity, for the cases where none of the built-in ones really make sense.