Why, we went from "whiny 1%" to "6 percent of web users" already - and 6 percent of web users is "whiny hundred million people". And then, what matters in decision to support/don't support a feature is not percentage of _web_ users, but percentage of _this program_ users. For FF it makes "whiny every one of five".
You mean "only 150 thousand use that extension". That's different
First, 17% of FF users are still on 3.6 - sure, not everyone of them does that due to UI changes, but a sizable part of them cares.
Second, not everyone who cares cares and knows enough to find that extension. Some just try to get used, others change browsers.
So, yep, my point still stands, that's UI designers who don't care. User 1: "Meh, I'll hold on this version", User 2: "Meh, if they make it look like $otherproduct, why not just switch to fucking $otherproduct then?", Dev team (disregarding slowly melting userbase): "Hah! See, nobody cares"
In the same vein, we've yet to see how Win8 will help iOS and Android adoption.
But yeah, your attitude is exactly what's wrong with UI designers. "Requests? Configurability? Fuck you, exceptionally whiny bitches, you'll eat what I spit out and like it! Now excuse me while I try more Revolutionary Design Changes".
May be you don't. For others, 20 pixels out of >1200 is not precious, but status bar flashing in and out and showing incomplete link URL is distracting and annoying.
Perhaps the closest comparison to Opera might be SeaMonkey because it has the built-in mail and news client. How big is SeaMonkey installed?
42M. Unless I'm missing something, it doesn't include anything like AdBlock/FlashBlock/NoScript (Opera has URL filter and "load plugins on demand"/"enable Javascript" configurable on site-per-site basis out of the box)
On the other hand, with Google Groups, Facebook, and the like, who uses NNTP for text newsgroups anymore? And with the shutdown of Usenet providers due to rampant copyright infringement in binary groups, who uses binary newsgroups anymore?
Not me, for sure. So much "not me", in fact, that I forgot about NNTP (which Opera handles as well) and referred to RSS reader as "news reader".
Facebook and Gmail have even been eating into the SMTP/IMAP market.
Sure, that's question of preference. Some keep separate program, some are happy with browser tab, I find it convenient to have RSS and mail in browser's sidebar.
Chrome, includes Flash and PDF plugins, no extra functionality, 82M installed. Mozilla, no Flash, no PDF, no extra functionality, 38M. Opera, no Flash, no PDF, built-in news reader/mail, URL-based adblocker and a bunch of other stuff commonly installed as extensions on FF/Chrome - fits it all in 35M
"The fact is private encryption keys only work when P and Q are not known. You can also decrypt the cyphertext without the key - just search for $5 wrench"
You're mistaking "secret", which is necessary part of every encryption scheme, with "obscurity", which is useful only in very specific circumstances.
Following your analogy, security by obscurity is making key duplication method secret and hiding the lock's inner working. Good security, on the other hand, is when you can't duplicate the key unless you snatch it from the owner and can't pick the lock even if you know how it's built.
Security by obscurity is useful only as preliminary defense line to stall an attacker until he gathers enough information about your systems to begin targeted attack.
Where the hell do you get those numbers? Down there is AC with a Gartner link, check it.
There's 90M PCs shipped in Q4'11, 5M - or 5.5% - of those are Macs. Now if you include 15M iPads (and exclude Android tablets), yeah, you'll get ~20% market share Q4'11. Clearly shows Wintel desktop is dead, yup. Mere 80%.
You're right I'm not mistaking it. I explicitly said unit sales growth and that's what I meant. Also known as market share.
You explicitly said:
It's good to see (mostly Windows) PCs on their way out, replaced by Macs.
To say "PC is on the way out" you need to compare not sales and market share, but install base. That's why I said you're mistaken.
Yeah right. Because those PCs will still be running in 80 years. And suddenly the growth in Mac unit sales is going to stop.
No, they will extrapolate indefinitely and in some ten years there will be 1 bln. Macs sold annually. PC sales, on the other hand, will continue the negative growth and soon PC vendors will start taking computers away.
Windows PC desktop might be on its way out, though it's still not somewhere in the near future, but it surely won't be replaced by Macs. Even "Soon everyone will throw away PC and buy a tablet" (note the "a") sounds more reasonable than this.
Oh my, how optimistic. You're totally not mistaking sales growth with installed base share.
There's a billion or so PCs in the world with about 5% of them being Macs. With about 12 million Macs sold last year, it'll take just ~80 years to completely replace the PC - and that's if ~300 millions PC sales suddenly disappear.
Also note that it's not like decline in new sales means people throw PCs out of the window to replace them with Mac.
That's where +- part comes from. For x86 it's just CMP reg, imm32, for x64 you could probably spare one of 16 general registers to hold it for the loop, etc etc etc.
Anyways, it's a moot point. Using linked lists for performance critical parts is already bad idea and a few dozens cycles won't make difference in other cases.
Aaaaand here we go from general case to an unrelated corner case.
"How would you trigger a run-away truck breaking through your datacenter? What, catching NPEs ain't helping you now, buddy?"
We were discussing software and catching exceptions, and here you go with hardware and catching faults.
Anyways, if you're testing software detecting and reacting to ECC faults, you do it on a test rig with ECC error injection, no need to keep broken DRAM around. Don't you notice the oxymoron in "Untested fault-tolerant software"?
But as we were not talking about software detection of hardware faults, your argument is invalid.
Well, it's a good thing nobody speaks about dumping C++ for rust-0.1 then! Seems like they're putting it out for enthusiasts to play with, provide feedback and assess it.
But isn't it a nice Catch 22: "To get a language accepted by serious project, show us a serious project written in this language". Good thing not everyone is so busy and serious as you, or we'd still be writing in assembler.
Well, check all those accounts supernatural psychic ability to know without subsciption when the article gets published, which allows them supernatural first post with same timestamp as article.
That's sure a lot of a) freshly registered, b) subscribers, c) all clicking "No karma bonus" so their subscriber status doesn't show in postings, d) all hating Google and loving MS, e) sharing similar writing style. Or just a single puppeteer with a new sockpuppet every day. You decide!
Returns true if a list contains an element with the given value */ fn has<T: copy>(ls: list<T>, elt: T) -> bool {
let ls = ls;
while true {
alt ls {
cons(hd, tl) { if elt == hd { ret true; } else { ls = *tl; } }
nil { break; }
}
}
ret false; }
Notice the "alt ls { }" statement (which is Rust's equivalent "case ls of Cons x xs... ; Nil... ; end") - that's where the tagged union magic breaks in. Compiler knows there's exactly two variants in type "list" - cons(x,xs) and nil. If you omit one of them from alt statement, it's an incomplete match error. If you try to write "let cons(x,xs) = ls" - it's a type error, as you forgot about null again.
But if you omit "if(ls == NULL)" - it's not even a warning, and that's how you get a run time exception where you could have had a compile time error.
How does NULL help here? If the bug is creation of circular linked list in the first place, proper answer is "don't let programmer tweak head/tail pointers", which is handled alright by making them private. If you want to be anal, you can even formally verify list building algorithms to forbid possibility of circular references.
2) Returning an invalid/sentinel value
If the invalid/sentinel value is not a member of return type - it's a compile error.
3) Exceptions
Exceptions are by definition run-time - though compiler can help here too by pointing out places you should catch them. If you're talking just NullPointerExceptions - compiler'll tell you where you are possibly dereferencing a null.
Yeah, right. Show me all the Java programs which do that.
Why, they do. "Not all programs do that" != "nobody does that".
Furthermore, "caught an unexpected exception" is nonsense, as well as "no idea what the state of the system is". It is caught because it was expected - except for generic catch-all top level exception handler, which indeed has no idea and is just there for post-mortem actions, like possible dump/log.
Yes, sometimes "just crash" is a proper way to go. And many other times correct answer is "do a cold restart" or "try to recover what possible" or "ask user for intervention".
Proper tagged union has to be explicitly "de-unionized" before trying to do something with it - that's when you can catch stray nulls/Nones/Nothings.
Basically, proper type system _forces_ you to go from Option[Sometype]/Maybe Sometype to Sometype before you can do anything with it, null, on the other hand, pretends to be a part of Sometype - when type union "Sometype + null" should be a separate type, so compiler doesn't know if you properly checked for it or not.
There is type systems with explicit "nullable" type attribute, this is closer to Option type.
And with proper optimization "Option[Type]" should yield approximately same code as "nullable Type"
> and your thread probably throws a null pointer exception... and you catch it and do a graceful shutdown. Just like you can do with C++, though.
Anyways, properly typed languages won't even compile if there's a possibility of uncaught null pointer dereferencing. null is just a remnant of dark ages.
In short: downloading ROMs are illegal, because you must do backup copies yourself, you dirty thief; copiers are illegal, because you can upload copied ROMs, you dirty thief (how the fuck you're supposed to make legal backups without copiers is beyond me); emulators are illegal, because you use them to play illegal downloaded ROMs, you dirty thief; by pirating NES games you damage $15 bln. industry with tens of thousands jobs, you dirty thief; not available anymore != copyright expired, so you won't be playing such gems as Action 52 legally for another half century, you dirty thief.
All around pleasant people.
I wonder, can you go to individual authors asking for permission to distribute, like ZX Spectrum guys do, or Nintendo has a say in it, so you might as well go and get fucked?
Why, we went from "whiny 1%" to "6 percent of web users" already - and 6 percent of web users is "whiny hundred million people". And then, what matters in decision to support/don't support a feature is not percentage of _web_ users, but percentage of _this program_ users. For FF it makes "whiny every one of five".
Same for Ubuntu and Unity, seems like they had "whiny every next one".
Because UI designers know better and users are just whiny.
You mean "only 150 thousand use that extension". That's different
First, 17% of FF users are still on 3.6 - sure, not everyone of them does that due to UI changes, but a sizable part of them cares.
Second, not everyone who cares cares and knows enough to find that extension. Some just try to get used, others change browsers.
So, yep, my point still stands, that's UI designers who don't care. User 1: "Meh, I'll hold on this version", User 2: "Meh, if they make it look like $otherproduct, why not just switch to fucking $otherproduct then?", Dev team (disregarding slowly melting userbase): "Hah! See, nobody cares"
In the same vein, we've yet to see how Win8 will help iOS and Android adoption.
Sure, if it's actually 1%.
But yeah, your attitude is exactly what's wrong with UI designers. "Requests? Configurability? Fuck you, exceptionally whiny bitches, you'll eat what I spit out and like it! Now excuse me while I try more Revolutionary Design Changes".
May be you don't. For others, 20 pixels out of >1200 is not precious, but status bar flashing in and out and showing incomplete link URL is distracting and annoying.
Why not just make it configurable?
Perhaps the closest comparison to Opera might be SeaMonkey because it has the built-in mail and news client. How big is SeaMonkey installed?
42M. Unless I'm missing something, it doesn't include anything like AdBlock/FlashBlock/NoScript (Opera has URL filter and "load plugins on demand"/"enable Javascript" configurable on site-per-site basis out of the box)
On the other hand, with Google Groups, Facebook, and the like, who uses NNTP for text newsgroups anymore? And with the shutdown of Usenet providers due to rampant copyright infringement in binary groups, who uses binary newsgroups anymore?
Not me, for sure. So much "not me", in fact, that I forgot about NNTP (which Opera handles as well) and referred to RSS reader as "news reader".
Facebook and Gmail have even been eating into the SMTP/IMAP market.
Sure, that's question of preference. Some keep separate program, some are happy with browser tab, I find it convenient to have RSS and mail in browser's sidebar.
Define "extra crap".
Chrome, includes Flash and PDF plugins, no extra functionality, 82M installed.
Mozilla, no Flash, no PDF, no extra functionality, 38M.
Opera, no Flash, no PDF, built-in news reader/mail, URL-based adblocker and a bunch of other stuff commonly installed as extensions on FF/Chrome - fits it all in 35M
Can you spell "b-l-o-a-t"?
"The fact is private encryption keys only work when P and Q are not known. You can also decrypt the cyphertext without the key - just search for $5 wrench"
You're mistaking "secret", which is necessary part of every encryption scheme, with "obscurity", which is useful only in very specific circumstances.
Following your analogy, security by obscurity is making key duplication method secret and hiding the lock's inner working. Good security, on the other hand, is when you can't duplicate the key unless you snatch it from the owner and can't pick the lock even if you know how it's built.
Security by obscurity is useful only as preliminary defense line to stall an attacker until he gathers enough information about your systems to begin targeted attack.
Where the hell do you get those numbers? Down there is AC with a Gartner link, check it.
There's 90M PCs shipped in Q4'11, 5M - or 5.5% - of those are Macs. Now if you include 15M iPads (and exclude Android tablets), yeah, you'll get ~20% market share Q4'11. Clearly shows Wintel desktop is dead, yup. Mere 80%.
You're right I'm not mistaking it. I explicitly said unit sales growth and that's what I meant. Also known as market share.
You explicitly said:
It's good to see (mostly Windows) PCs on their way out, replaced by Macs.
To say "PC is on the way out" you need to compare not sales and market share, but install base. That's why I said you're mistaken.
Yeah right. Because those PCs will still be running in 80 years. And suddenly the growth in Mac unit sales is going to stop.
No, they will extrapolate indefinitely and in some ten years there will be 1 bln. Macs sold annually. PC sales, on the other hand, will continue the negative growth and soon PC vendors will start taking computers away.
Windows PC desktop might be on its way out, though it's still not somewhere in the near future, but it surely won't be replaced by Macs. Even "Soon everyone will throw away PC and buy a tablet" (note the "a") sounds more reasonable than this.
Meant to paste this one.
Oh my, how optimistic. You're totally not mistaking sales growth with installed base share.
There's a billion or so PCs in the world with about 5% of them being Macs. With about 12 million Macs sold last year, it'll take just ~80 years to completely replace the PC - and that's if ~300 millions PC sales suddenly disappear.
Also note that it's not like decline in new sales means people throw PCs out of the window to replace them with Mac.
That's where +- part comes from. For x86 it's just CMP reg, imm32, for x64 you could probably spare one of 16 general registers to hold it for the loop, etc etc etc.
Anyways, it's a moot point. Using linked lists for performance critical parts is already bad idea and a few dozens cycles won't make difference in other cases.
Aaaaand here we go from general case to an unrelated corner case.
"How would you trigger a run-away truck breaking through your datacenter? What, catching NPEs ain't helping you now, buddy?"
We were discussing software and catching exceptions, and here you go with hardware and catching faults.
Anyways, if you're testing software detecting and reacting to ECC faults, you do it on a test rig with ECC error injection, no need to keep broken DRAM around. Don't you notice the oxymoron in "Untested fault-tolerant software"?
But as we were not talking about software detection of hardware faults, your argument is invalid.
Well, it's a good thing nobody speaks about dumping C++ for rust-0.1 then! Seems like they're putting it out for enthusiasts to play with, provide feedback and assess it.
But isn't it a nice Catch 22: "To get a language accepted by serious project, show us a serious project written in this language". Good thing not everyone is so busy and serious as you, or we'd still be writing in assembler.
Well, check all those accounts supernatural psychic ability to know without subsciption when the article gets published, which allows them supernatural first post with same timestamp as article.
That's sure a lot of a) freshly registered, b) subscribers, c) all clicking "No karma bonus" so their subscriber status doesn't show in postings, d) all hating Google and loving MS, e) sharing similar writing style. Or just a single puppeteer with a new sockpuppet every day. You decide!
Not for a singleton terminator object, there you get just a comparison to a constant, +- same as with NULL (which is just a singleton bottom type)
The problem is you still think in terms of pointers, pointer arithmetic and C++.
Here, have a snippet from Rust's list implementation:
Notice the "alt ls { }" statement (which is Rust's equivalent "case ls of Cons x xs ... ; Nil ... ; end") - that's where the tagged union magic breaks in. Compiler knows there's exactly two variants in type "list" - cons(x,xs) and nil. If you omit one of them from alt statement, it's an incomplete match error. If you try to write "let cons(x,xs) = ls" - it's a type error, as you forgot about null again.
But if you omit "if(ls == NULL)" - it's not even a warning, and that's how you get a run time exception where you could have had a compile time error.
1) Infinite loop over a circular linked list
How does NULL help here? If the bug is creation of circular linked list in the first place, proper answer is "don't let programmer tweak head/tail pointers", which is handled alright by making them private. If you want to be anal, you can even formally verify list building algorithms to forbid possibility of circular references.
2) Returning an invalid/sentinel value
If the invalid/sentinel value is not a member of return type - it's a compile error.
3) Exceptions
Exceptions are by definition run-time - though compiler can help here too by pointing out places you should catch them. If you're talking just NullPointerExceptions - compiler'll tell you where you are possibly dereferencing a null.
Why the hell do you write and deploy code without testing?
It must be real hard to write "class TestBlah { blahblah testNPE() { somefunction(null) shouldBe blah } }", yeah.
You overgeneralize.
Yeah, right. Show me all the Java programs which do that.
Why, they do. "Not all programs do that" != "nobody does that".
Furthermore, "caught an unexpected exception" is nonsense, as well as "no idea what the state of the system is". It is caught because it was expected - except for generic catch-all top level exception handler, which indeed has no idea and is just there for post-mortem actions, like possible dump/log.
Yes, sometimes "just crash" is a proper way to go. And many other times correct answer is "do a cold restart" or "try to recover what possible" or "ask user for intervention".
Proper tagged union has to be explicitly "de-unionized" before trying to do something with it - that's when you can catch stray nulls/Nones/Nothings.
Basically, proper type system _forces_ you to go from Option[Sometype]/Maybe Sometype to Sometype before you can do anything with it, null, on the other hand, pretends to be a part of Sometype - when type union "Sometype + null" should be a separate type, so compiler doesn't know if you properly checked for it or not.
There is type systems with explicit "nullable" type attribute, this is closer to Option type.
And with proper optimization "Option[Type]" should yield approximately same code as "nullable Type"
> and your thread probably throws a null pointer exception ... and you catch it and do a graceful shutdown. Just like you can do with C++, though.
Anyways, properly typed languages won't even compile if there's a possibility of uncaught null pointer dereferencing. null is just a remnant of dark ages.
Caving in to carriers, obviously. There were stories about Verizon getting in trouble with FCC over this last summer, for example.
And that's why you don't buy devices without apps sideloading.
Here, get a load of this.
In short: downloading ROMs are illegal, because you must do backup copies yourself, you dirty thief; copiers are illegal, because you can upload copied ROMs, you dirty thief (how the fuck you're supposed to make legal backups without copiers is beyond me); emulators are illegal, because you use them to play illegal downloaded ROMs, you dirty thief; by pirating NES games you damage $15 bln. industry with tens of thousands jobs, you dirty thief; not available anymore != copyright expired, so you won't be playing such gems as Action 52 legally for another half century, you dirty thief.
All around pleasant people.
I wonder, can you go to individual authors asking for permission to distribute, like ZX Spectrum guys do, or Nintendo has a say in it, so you might as well go and get fucked?
So you're saying Google's missing out on opportunity to invade on your privacy with the data FB wants to sell them?