wouldn't the first thing you'd do in the system API design of any non-null language be, the creation of a singleton object instance of the superclass of all objects, named 'null' ?
Umm... no? The first thing done is usually a superclass called "Object". If you don't extend anything else, you extend Object. Depending on the language, the superclass of Object would either be self-referential or the option to obtain a superclass wouldn't exist. (The latter being the "correct" solution. See my next statement for why.)
Null is just a value
That's actually a problem. Null is a piece of data that represents the absence of data. The paradox here should be obvious. If the data doesn't exist, why do we create data about it not existing? If I have no apples, do I have an object that represents my lack of apples? No, I simply have no apples. At best, I might have a special container for apples. If it's empty, then I can infer that I have no apples. Just as a program can infer the absence of data through an empty collection.
Thirdly, a similar rant can be had against non-range checking of enums in C (but then warning against it in switches (WTF?)).
There's a lot of things wrong with C as a language. Don't try to use those as arguments. (Remember, C is more or less high-level assembly. On the scale of comp-sci it barely even rates. Its popularity stems from the excruciating slowness of computers in days gone by.)
I am having trouble of grokking null-reference free language.
If you're familiar with SQL, then a simple "MyColumn NOT NULL" definition should explain it. Basically, the value can never be set to a null value. Attempting to do so is an error condition itself.
In fact, DB design is a pretty good analogy for the concept as databases often are forced to wrestle with this issue.
Consider for a moment how you would design a database that has absolutely NO null references. Not a one. Zip, zero, nada. Obviously the best way of accomplishing such a database is to denormalize any value that might be null. So if Address2 is optional, you would want to split Address into its own table with a parent key pointing back to the user entry. If the user has an Address2 value, there will be a row. If the user does NOT have an Address2, the row will be missing. In that way, empty result sets take the place of null values.
In terms of programming languages, there are a varity of ways to map such a concept. Collections are a 1:1 mapping to result sets that can work. If you don't have any values in your collection, then you know that you don't have a value. Very easy. Similarly, you can be sure that none of the values passed to a function or method will ever contain a null value. Cases where you might want to pass some of the values but not all can be handled either by method overloading (e.g. Java) or by allowing a variable number of parameters. (e.g. C)
Some pieces of programming would become slightly more difficult. For example, 'if(hashmap.get("myvalue") != null)' would not be a valid construct. You'd need to perform a check like this: 'if(hashmap.exists("myvalue")'
Of course, the latter is the "correct" check anyway, so the theory goes that the software will be more robust and reliable.
I'd watch who you're calling "ineffective". I don't see you cratering any multi-billion dollar markets, thus allowing you to purchase the largest gaming company in the sector for little more than a song.
Ole' Jack may not have been an admirable business man, but he did have an effect. He even managed to leave the market with a significant amount of money in Atari's bank! (Go figure.)
The Tragedy of the Commons is a perfect example of what happens when everyone or no one owns a resource.
The Tragedy of the Commons happens because of human self-interest and imperfection. Which was the exact point I made. Communal living falls flat on its face because of human self-interest. Capitalism works because it plays to the self-interest of mankind, not because it is a superior way to live.
And yet, how much effort do we humans put into creating "communities"? Perhaps because community is a very good thing, even if we must balance our need for a community against our own self-interests.;-)
But, the OP posted a brilliant hedge: he italicized "ideal"; which means, all of our posts disputing his claims are for naught.
Or more to the point, because the "ideal" I refer to is simply unrealistic. It would be nice if the universe always worked the way we wanted it to. Unfortunately, it doesn't. So we have to accept that the ivory tower ideal is not the same as the real-world practical. Which isn't to say that there isn't quite a bit of middle ground...
why should people work for the betterment of the whole of human society rather than for themselves?
Who said it's an either/or? Communal work usually benefits everyone including the person doing the work. The problem is that the benefits are not always obvious or easy to internalize. Whereas, "I do X, I get back [money|food|power|etc.]" is a very simple concept that very few people struggle with.
One of the key issues here is a huge misunderstanding of why the US clings to capitalism. Regardless of anything else, communism and/or socialism in their many forms are the ideal forms of society. If humans were never selfish and always worked for the betterment of everyone, there would be no need for anything like money, wealth, or capitalism.
The problem is that humans are not perfect. Even the best of us attribute more value to our selves or our families than random strangers. Thus a system is required that meets the challenges of an imperfect society. The most natural form of such a system is a risk/reward system where work is done with the expectation of a possible reward. This is, for better or for worse, capitalism. While it may be a long way from an ideal solution, it is a solution that works.
However, just having such a system does not prevent humans from striving for the benefits of cooperation and community strength. Co-ops, condominiums, small towns, and civic centers are just a few examples of ideas which obtain their strength from the community rather than the individual. Open Source is yet another example of such ideals. An opportunity where working together can strengthen the whole.
If there was one way to sum it up, it would be "Together we stand. Divided we fall." Because at some point everyone, even enemies, have to work together if they want to move forward. Open Source just happens to be the technological way of working together.:-)
Just because Windows has a long way to fall doesn't mean that Microsoft isn't bleeding to death. The point of getting Windows 7 out ASAP is to prevent all those XP downgraders from running into an issue during the next upgrade cycle. What do they do then? Buy XP again or... ?
It's the ellipse that scares Microsoft. And rightly so.
More to the point, I think this technology helps with drives which have trouble reading CD-Rs. The Blu-Spec discs will work better, exercise the drive less, and prevent unexpected drop-outs in audio.
Of course, most drives manufactured these days are designed to handle the oddities of CD-Rs, so the point is probably moot for 98% of hardware on the market.
Here's my take: Microsoft took 6 years to release Vista. While I realize they're hemorrhaging market share (how sad), they should consider taking a bit of time to meet as many user needs as possible. The end result will be a product that people actually want to use rather than Vista with a little less suck.
Of course, that would require a re-engineering of the development philosophy. Longhorn/Vista was a perfect example of how "too many cooks spoil the broth". Microsoft needs to get back to being customer-focused if they want to compete.
Re:I know no one likes a smartypants but ...
on
Jurassic Web
·
· Score: 1
You did not just say "kewl". I remember how we all thought we were hip for spelling "cool" wrong. Meh. Some things are better left in the 90's.:-P
(The Gibson has a virus? Type "cookie" you idiot!)
Re:Paying for Internet by the hour?
on
Jurassic Web
·
· Score: 1
QuakeWorld != Quake
Quake's early networking engine worked, but was insufficient for smooth play. QuakeWorld eventually came out to fix the problem and brought the awesome CTF mod with it. (Grappling hook FTW!)
Re:In some ways it was much better in 1996
on
Jurassic Web
·
· Score: 1
far less Flash-based sites
Flash wasn't around yet. (Well, it kinda was, but it didn't see wide deployment until much later.) Macromedia's big technology was Shockwave. Which was an absolutely horrid platform for developing web games. Java Applets were much better back then.:-)
Re:When I think about the internet in 1996
on
Jurassic Web
·
· Score: 5, Insightful
What, like Hamster Dance? Shrines to music stars? MIDI background music that sounded awful on the hardware of the day? Streaming RealPlayer files so blurry you needed to be half-blind to make them out? Web Rings containing hundreds of links pointing to nothing at all? Personal homepages consisting of an export of Netscape bookmarks? Company web pages that were little more than brochures? (Often less than that!) Everyone on the interwebz thinking they're 1337 h4x0rz? (The 'z' was real popular back then.) XTrek competitions? MSN-only Startrek.com? Pages that would only render in Netscape or IE? (Complete with a "this page looks best in X" buttons.) Frames?!?
The web was definitely a more innocent place back then, but it was in no way a more useful place. What you are remembering is the subculture that went with the web of the day. If you had Internet access... man, you had something special. This crazy ability to make friends from around the world, to meet people who like the same shows or games as you, the ability to load up your computer with all the shareware it could hold, to access amateur content like MODs, MIDIs, animations done in GIFs, fan fiction, web comics, and even Java Applet games!
It was an exciting and fun time to be alive and I'm glad I was a part of it. But like all things, its time has passed and very little content of value was lost. In fact, most of the truly interesting content is still around. It simply doesn't shine very well in the face of what the modern Internet can do.
Actually, you're slowing the page load down even more. Now not only does it have to load your Javascript, it has to load all the JQuery libraries as well. Each and every one of those loads is going to result in a pause whether or not you're running logic.
Take this Javascript as an example:
function abc() { alert("ABC!"); } function xyz() { alert("XYZ!"); }
Nothing's happening, right? Wrong. Here's what's going on:
1. Script tag encountered. Rendering is blocked until script tag is completed.
2. Wait for script to download.
3. Send script to the Javascript evaluator.
4. Convert script to internal bytecode.
5. Hoist named functions as static values.
6. Begin script execution.
7. Run "window.abc = function() {...}" and "window.xyz = function() {...}".
8. Script tag handling complete. Resume rendering.
So in effect, the world STOPS with each script. Don't think for a moment you're getting anything for free by deferring execution of a function. The script still has to load via execution. If you're curious as to the reason, consider the issue of having abc() and xyz() in two different script files. If the xyz() script called abc(), then the first script file would need to be completely loaded before the xyz() script can be executed.
On a more personal note, I highly recommend understanding the underlying language rather than relying on a framework so heavily. I'm not saying the framework is necessarily a bad thing, but it can lead to situations of false confidence like the one you just exhibited. And besides, is the following really so hard to use in conversation?
document.onload = function() {};
Alternatively:
setTimeout(function() {}, 100);
The latter is a fun trick because the Javascript thread doesn't get freed until rendering is done. So you can begin execution after the page is rendered, but not have to wait until everything is fully loaded.;-)
Text reflow fails miserably once you get past a certain size. If your intent is to inspect the page close up, then text reflow is a problem. Why don't you just download Safari and try it out? I think you'll answer your own question fast enough.
Alternatively, go watch this video. You can see how zooming allows you to focus on the areas of interest rather than dealing with a terrible layout. (Given the size of the screen, three column would work out to barely a word or two per line. I don't think there's anyone who finds vertically stacked words pleasant.)
Yes I've heard of it, and no; cooperative multi-tasking techniques a la windows 3.1 is not multi-threading.
Then apparently you haven't studied it enough. We're not talking about cooperative multi-threading. A true, honest to God thread gets spawned to handled these requests. "Cooperative multithreading" is the practice of scheduling processing and voluntarily using a limited amount of time for each turn. That's feasible without Gears or HTML5, but it's not what the XMLHttpRequest object does.
That's pretty pointless. Why would I really want the peace of mind that that only google gets to data mine my messages?:)
Relationships are about trust. You can't both voluntarily use Google's services and not trust them. Complaining that you don't trust them doesn't change your implicit trust of them.
Personally, I've been very happy with Google's handling of privacy. I've used their professional domains service and it has worked out very well in that situation. I just wish my current employer thought the same.;-)
As for the laundry list of features that you partially responded to; I don't really care if any of them are in gmail or not. None of them are email features.
That's okay. Because GMail is about more than just email. If you don't like their services, you're not required to use them. That doesn't stop them from providing a product that most users find superior to native clients.
Besides, you brought them up.;-)
I think its the wrong direction. I don't want to cram thousands of features into one ginormous app to take advantage of its unified search. That's just stupid.
That's your opinion and you're entitled to it. However, it has nothing to do with the original argument. GMail is a competitive software application. Arguing whether or not it meets some artificial barriers or not does nothing to change the fact that it is a superior experience for most users. There's a reason why users are moving from email clients in droves, and it's not just because they don't have to install anything.
In Firefox, the page is re-rendered to fit the screen after a zoom. Fonts start wrapping as they hit the page boundaries. In Safari, the layout does not change. You may need to scroll to see the complete content.
the *IAA would go crazy trying to issue them region-relevant subpoenas wherever they go
No they wouldn't. The Pirate Bay's business is effectively non-regional. Which means that there is no difference between the servers sitting in Sweden, Germany, Switzerland, or the high seas. The actual laws under which they are held responsible would generally be determined by their home port and/or under which flag they fly.
If all you need is a hull that floats, there are a lot cheaper ways of getting one than acquiring Navy hardware. Check out the standard crew complement of just about any naval vessel sometime and you'll come to understand that these are overly complicated beasts that are not designed for civilian use.
(As an aside, a few non-superpowers tried to float aircraft carriers after WWII. They proved to be so expensive to operate, that most were decommissioned.)
No. Experimental new features are often deployed via browser-specific CSS until the standard has been finalized. This was added to the standard to ensure that developers don't rely on a feature that might change. (Or if they do, they know that it may change.) CSS3 is not yet finalized, so Safari is following the standard on this.
FYI, I haven't tested in any detail yet, so the non-browser tags may be supported by Safari already. If they are, use at your own risk.
Umm... no? The first thing done is usually a superclass called "Object". If you don't extend anything else, you extend Object. Depending on the language, the superclass of Object would either be self-referential or the option to obtain a superclass wouldn't exist. (The latter being the "correct" solution. See my next statement for why.)
That's actually a problem. Null is a piece of data that represents the absence of data. The paradox here should be obvious. If the data doesn't exist, why do we create data about it not existing? If I have no apples, do I have an object that represents my lack of apples? No, I simply have no apples. At best, I might have a special container for apples. If it's empty, then I can infer that I have no apples. Just as a program can infer the absence of data through an empty collection.
There's a lot of things wrong with C as a language. Don't try to use those as arguments. (Remember, C is more or less high-level assembly. On the scale of comp-sci it barely even rates. Its popularity stems from the excruciating slowness of computers in days gone by.)
If you're familiar with SQL, then a simple "MyColumn NOT NULL" definition should explain it. Basically, the value can never be set to a null value. Attempting to do so is an error condition itself.
In fact, DB design is a pretty good analogy for the concept as databases often are forced to wrestle with this issue.
Consider for a moment how you would design a database that has absolutely NO null references. Not a one. Zip, zero, nada. Obviously the best way of accomplishing such a database is to denormalize any value that might be null. So if Address2 is optional, you would want to split Address into its own table with a parent key pointing back to the user entry. If the user has an Address2 value, there will be a row. If the user does NOT have an Address2, the row will be missing. In that way, empty result sets take the place of null values.
In terms of programming languages, there are a varity of ways to map such a concept. Collections are a 1:1 mapping to result sets that can work. If you don't have any values in your collection, then you know that you don't have a value. Very easy. Similarly, you can be sure that none of the values passed to a function or method will ever contain a null value. Cases where you might want to pass some of the values but not all can be handled either by method overloading (e.g. Java) or by allowing a variable number of parameters. (e.g. C)
Some pieces of programming would become slightly more difficult. For example, 'if(hashmap.get("myvalue") != null)' would not be a valid construct. You'd need to perform a check like this: 'if(hashmap.exists("myvalue")'
Of course, the latter is the "correct" check anyway, so the theory goes that the software will be more robust and reliable.
I'd watch who you're calling "ineffective". I don't see you cratering any multi-billion dollar markets, thus allowing you to purchase the largest gaming company in the sector for little more than a song.
Ole' Jack may not have been an admirable business man, but he did have an effect. He even managed to leave the market with a significant amount of money in Atari's bank! (Go figure.)
If Jack Trmaiel was dead, he'd be rolling in his grave. As it is, you better watch your back.
Remember son, business is war. And ole' Jack intends to win!
The Tragedy of the Commons happens because of human self-interest and imperfection. Which was the exact point I made. Communal living falls flat on its face because of human self-interest. Capitalism works because it plays to the self-interest of mankind, not because it is a superior way to live.
And yet, how much effort do we humans put into creating "communities"? Perhaps because community is a very good thing, even if we must balance our need for a community against our own self-interests. ;-)
Or more to the point, because the "ideal" I refer to is simply unrealistic. It would be nice if the universe always worked the way we wanted it to. Unfortunately, it doesn't. So we have to accept that the ivory tower ideal is not the same as the real-world practical. Which isn't to say that there isn't quite a bit of middle ground...
Who said it's an either/or? Communal work usually benefits everyone including the person doing the work. The problem is that the benefits are not always obvious or easy to internalize. Whereas, "I do X, I get back [money|food|power|etc.]" is a very simple concept that very few people struggle with.
One of the key issues here is a huge misunderstanding of why the US clings to capitalism. Regardless of anything else, communism and/or socialism in their many forms are the ideal forms of society. If humans were never selfish and always worked for the betterment of everyone, there would be no need for anything like money, wealth, or capitalism.
The problem is that humans are not perfect. Even the best of us attribute more value to our selves or our families than random strangers. Thus a system is required that meets the challenges of an imperfect society. The most natural form of such a system is a risk/reward system where work is done with the expectation of a possible reward. This is, for better or for worse, capitalism. While it may be a long way from an ideal solution, it is a solution that works.
However, just having such a system does not prevent humans from striving for the benefits of cooperation and community strength. Co-ops, condominiums, small towns, and civic centers are just a few examples of ideas which obtain their strength from the community rather than the individual. Open Source is yet another example of such ideals. An opportunity where working together can strengthen the whole.
If there was one way to sum it up, it would be "Together we stand. Divided we fall." Because at some point everyone, even enemies, have to work together if they want to move forward. Open Source just happens to be the technological way of working together. :-)
Damn. s/ellipse/ellipsis/g
Just because Windows has a long way to fall doesn't mean that Microsoft isn't bleeding to death. The point of getting Windows 7 out ASAP is to prevent all those XP downgraders from running into an issue during the next upgrade cycle. What do they do then? Buy XP again or... ?
It's the ellipse that scares Microsoft. And rightly so.
More to the point, I think this technology helps with drives which have trouble reading CD-Rs. The Blu-Spec discs will work better, exercise the drive less, and prevent unexpected drop-outs in audio.
Of course, most drives manufactured these days are designed to handle the oddities of CD-Rs, so the point is probably moot for 98% of hardware on the market.
79/100. What about it?
STOP THE PRESSES!
Here's my take: Microsoft took 6 years to release Vista. While I realize they're hemorrhaging market share (how sad), they should consider taking a bit of time to meet as many user needs as possible. The end result will be a product that people actually want to use rather than Vista with a little less suck.
Of course, that would require a re-engineering of the development philosophy. Longhorn/Vista was a perfect example of how "too many cooks spoil the broth". Microsoft needs to get back to being customer-focused if they want to compete.
You did not just say "kewl". I remember how we all thought we were hip for spelling "cool" wrong. Meh. Some things are better left in the 90's. :-P
(The Gibson has a virus? Type "cookie" you idiot!)
QuakeWorld != Quake
Quake's early networking engine worked, but was insufficient for smooth play. QuakeWorld eventually came out to fix the problem and brought the awesome CTF mod with it. (Grappling hook FTW!)
Flash wasn't around yet. (Well, it kinda was, but it didn't see wide deployment until much later.) Macromedia's big technology was Shockwave. Which was an absolutely horrid platform for developing web games. Java Applets were much better back then. :-)
What, like Hamster Dance? Shrines to music stars? MIDI background music that sounded awful on the hardware of the day? Streaming RealPlayer files so blurry you needed to be half-blind to make them out? Web Rings containing hundreds of links pointing to nothing at all? Personal homepages consisting of an export of Netscape bookmarks? Company web pages that were little more than brochures? (Often less than that!) Everyone on the interwebz thinking they're 1337 h4x0rz? (The 'z' was real popular back then.) XTrek competitions? MSN-only Startrek.com? Pages that would only render in Netscape or IE? (Complete with a "this page looks best in X" buttons.) Frames?!?
The web was definitely a more innocent place back then, but it was in no way a more useful place. What you are remembering is the subculture that went with the web of the day. If you had Internet access... man, you had something special. This crazy ability to make friends from around the world, to meet people who like the same shows or games as you, the ability to load up your computer with all the shareware it could hold, to access amateur content like MODs, MIDIs, animations done in GIFs, fan fiction, web comics, and even Java Applet games!
It was an exciting and fun time to be alive and I'm glad I was a part of it. But like all things, its time has passed and very little content of value was lost. In fact, most of the truly interesting content is still around. It simply doesn't shine very well in the face of what the modern Internet can do.
Thus the "might be". Being in Beta is farther along than Opera 10. So Safari is likely to beat Opera to the market.
Actually, you're slowing the page load down even more. Now not only does it have to load your Javascript, it has to load all the JQuery libraries as well. Each and every one of those loads is going to result in a pause whether or not you're running logic.
Take this Javascript as an example:
Nothing's happening, right? Wrong. Here's what's going on:
1. Script tag encountered. Rendering is blocked until script tag is completed.
2. Wait for script to download.
3. Send script to the Javascript evaluator.
4. Convert script to internal bytecode.
5. Hoist named functions as static values.
6. Begin script execution.
7. Run "window.abc = function() {...}" and "window.xyz = function() {...}".
8. Script tag handling complete. Resume rendering.
So in effect, the world STOPS with each script. Don't think for a moment you're getting anything for free by deferring execution of a function. The script still has to load via execution. If you're curious as to the reason, consider the issue of having abc() and xyz() in two different script files. If the xyz() script called abc(), then the first script file would need to be completely loaded before the xyz() script can be executed.
On a more personal note, I highly recommend understanding the underlying language rather than relying on a framework so heavily. I'm not saying the framework is necessarily a bad thing, but it can lead to situations of false confidence like the one you just exhibited. And besides, is the following really so hard to use in conversation?
Alternatively:
The latter is a fun trick because the Javascript thread doesn't get freed until rendering is done. So you can begin execution after the page is rendered, but not have to wait until everything is fully loaded. ;-)
Text reflow fails miserably once you get past a certain size. If your intent is to inspect the page close up, then text reflow is a problem. Why don't you just download Safari and try it out? I think you'll answer your own question fast enough.
Alternatively, go watch this video. You can see how zooming allows you to focus on the areas of interest rather than dealing with a terrible layout. (Given the size of the screen, three column would work out to barely a word or two per line. I don't think there's anyone who finds vertically stacked words pleasant.)
Then apparently you haven't studied it enough. We're not talking about cooperative multi-threading. A true, honest to God thread gets spawned to handled these requests. "Cooperative multithreading" is the practice of scheduling processing and voluntarily using a limited amount of time for each turn. That's feasible without Gears or HTML5, but it's not what the XMLHttpRequest object does.
Relationships are about trust. You can't both voluntarily use Google's services and not trust them. Complaining that you don't trust them doesn't change your implicit trust of them.
Personally, I've been very happy with Google's handling of privacy. I've used their professional domains service and it has worked out very well in that situation. I just wish my current employer thought the same. ;-)
That's okay. Because GMail is about more than just email. If you don't like their services, you're not required to use them. That doesn't stop them from providing a product that most users find superior to native clients.
Besides, you brought them up. ;-)
That's your opinion and you're entitled to it. However, it has nothing to do with the original argument. GMail is a competitive software application. Arguing whether or not it meets some artificial barriers or not does nothing to change the fact that it is a superior experience for most users. There's a reason why users are moving from email clients in droves, and it's not just because they don't have to install anything.
In Firefox, the page is re-rendered to fit the screen after a zoom. Fonts start wrapping as they hit the page boundaries. In Safari, the layout does not change. You may need to scroll to see the complete content.
No they wouldn't. The Pirate Bay's business is effectively non-regional. Which means that there is no difference between the servers sitting in Sweden, Germany, Switzerland, or the high seas. The actual laws under which they are held responsible would generally be determined by their home port and/or under which flag they fly.
(See: Flag of convenience)
If all you need is a hull that floats, there are a lot cheaper ways of getting one than acquiring Navy hardware. Check out the standard crew complement of just about any naval vessel sometime and you'll come to understand that these are overly complicated beasts that are not designed for civilian use.
(As an aside, a few non-superpowers tried to float aircraft carriers after WWII. They proved to be so expensive to operate, that most were decommissioned.)
No. Experimental new features are often deployed via browser-specific CSS until the standard has been finalized. This was added to the standard to ensure that developers don't rely on a feature that might change. (Or if they do, they know that it may change.) CSS3 is not yet finalized, so Safari is following the standard on this.
FYI, I haven't tested in any detail yet, so the non-browser tags may be supported by Safari already. If they are, use at your own risk.