Not all of it is high school calc. IIRC the integral of 4sin(x)/x has to be solved with Taylor series, and I only got those in the second semester of university calculus. One then has to take the limit to infinity of the resulting series, which may or may not be doable for a high school kid (not sure how hard the limit is; I'm too lazy to solve / look up the series)
Or you could just look up the answer on Wikipedia. Which is probably what the creators did when they were trying to come up with an alternative way of writing Pi.
BTW how did they find the factorials for such a big number?
Almost all application software is effectively single threaded: either there is an explicit single execution path or the app has attempted threading but the threads depend on a core path that is single threaded.
That's quite a bizarre claim. I've looked at hundreds of Java dumps from hundreds of different customers and the vast majority are doing multithreading on a massive scale with no issues. If there is contention it's usually pretty obvious from the dump.
I can only assume that your company's software is quite poorly designed from a threading perspective.
Yep. For those that haven't tried it without the patch, a multithreaded kernel compile will typically peg a modern multicore CPU at 100% and will even give you drunken mouse syndrome. Just being able to scroll around a browser window while doing a lengthy make -j64 is impressive. Being able to watch 1080p video smoothly is... astounding.
For an OS that has been around for nearly 20 years and has had thousands of very bright programmers poring over it, it's quite astounding that only now has someone finally figured out how to let gui-related activity have top priority.
Er, yes, that's because the copy is from a disassemble and so it's quite possible the order of the methods changed. It's presented in a way to make it clear that it is a copy/disassemble. Which is pretty undeniable, no matter how much you hate Oracle.
Have you looked at the files? They are here. The argument is not that the two files are decompiles. All they have done is strip comments out of the files so that the structure (and similarities) is clearer. What you might be thinking of is the fact that the Android version appears to be a decompile of the Sun version. You can tell this because the method arguments in the Android version are generic names (e.g. "i" instead of "depth"). Plus other little clues. Take a look, it's quite obvious.
And that's not the worst of it: David Willetts, the science and universities minister, said before Cameron's speech that he would investigate making it easier to obtain software patents. "In the US, it's easier to obtain software patents, and Google was able to patent some work - using a federal grant, I might add - that it might not have been able to patent in the UK. The US rule is that 'anything man has invented under the sun you should be able to patent'. That's something we do wish to investigate."
I think you'll find an awful lot of short-lived objects these days are allocated on the stack. Modern JITs use escape analysis to figure out whether the object ever "escapes" from the current stack frame. I.e. is the object still referenced when the current method returns. If it isn't (which is often the case with short-lived objects), the object is allocated right there in the stack frame (just like alloca) and there is zero GC cost.
Part of the beauty of Java is that you can do this kind of escape analysis because everything is so well-defined.
Except the private variables in the beginning, I would lean towards clean room implementation.
Absolutely no way. Even a quick scan of the code shows it is clearly a copy with a pretty poor attempt at cosmetic changes to disguise the fact. Take a look at the method getPolicyNodesExpectedHelper. This is a private method, by definition not part of the API. And yet there it is almost identical in structure in both copies. The Android version cleverly changes the name of the parameter depth to i and matchAny to flag but that's about it. Good luck with defending that in court!
The error comes at step 2 (or even step 1). We just mentally brush under the carpet all the other 111s stretching off to infinity. But what does it mean to multiply an infinite set by 9? Imagine we get a computer to do it for us. So we have a program to multiply our infinite series of ones by 9. It will never finish of course. And there's a big difference between finishing and never finishing.
Multiplying by 1 is an atomic operation. Multiplying by 0.999... is a process that will never complete. In fact the number 0.999... is itself a process, not a fixed quantity.
I wonder if maths could be recast in terms of processes? So instead of saying for instance the sum of 1 + 1/2 + 1/4 +... == 2, you'd leave it as a process which would be a bit more awkward but maybe those process numbers would combine/cancel out.
What's wrong with dying? We all do it sooner or later as individuals. Why should the race last forever?
I agree. Life has evolved billions of times on planets all over the universe. There's no more reason to preserve our species for ever than there is a particular individual. Look at it from the point of view of the universe (or god if you prefer). The lights of consciousness are turning on and off all the time. I'm sure it's all a device for creating stories and someone somewhere is sat in the dark, popcorn on their lap watching the greatest 3D movie of all time. Who wants to watch a repeat?
My first computer was an 80386 running MS-DOS, and I think I am not alone here (at least with the C64 crowd et al.) with how what I did mostly with it was spending hours and hours in the BASIC implementation, crappy as it as, it was definitely a thing I had a blast on, even if it wasn't a real programming language in all honesty. I remember just how astounding it was to look at the numbers when I migrated to a Tualatin Celeron with a jaw-dropping 1.2 GHz of raw processing power compared to something that didn't break the hundreds. And a GUI? And this strange mouse? What just invaded my desk? And... where did my system's guts go, over everything?!
If you are seventeen, then one year before you were born I was using a 68040 NeXT machine, programming in Objective-C and Display Postscript.
Just been hit starting 30 minutes ago by a wave of delivery failure notifications but the preceding message (to which it is a reply) looks like one from me - spam to a bunch of people including some addresses I recognize. Gmail account now disabled. Seems a hell of a coincidence that this is happening just after this report about Gmail JavaScript problems. Never had anything like this before.
Feed all the data into a blog, one magazine edition per blog entry. Some blog software lets you set the date of the entry - use that to set the date to the edition publication date. Enter the keywords as blog tags. You can expand the blog entry to contain such things as (e.g.) a picture of the cover, some short descriptive text. You then also get a free forum where people can discuss the edition in question.
Well the person doing the explaining agreed that it was tricky, and tricky != simple. IMO language features should be simple enough that you don't get rusty and need to go look things up to refresh your memory.
Generics seem pretty straightforward to me, even the "? extends Whatever" syntax. Maybe you could give some concrete examples as to the problems with generics. The only problem right now is that type erasure makes arrays of generics impossible. Hopefully they'll fix that with the next revision.
Here's an example of how complex it can get. Extract:
The problem is that the entrySet() method is returning a "Set<Map.Entry<capture-of ? extends K, capture-of ? extends V>>", which is incompatible with the type "Set<Map.Entry<? extends K, ? extends V>>". It's easier to describe why if I drop the "extends K" and "extends V" part. So we have "Set<Map.Entry<?, ?>" and "Set<Map.Entry<capture-of ?, capture-of ?>>".
The first one, "Set<Map.Entry<?, ?>>" is a set of Map.Entries of different types - ie it is a heterogeneous collection. It could contain a Map.Entry<Long, Date> and a Map.Entry<String, ResultSet>> and any other pair of types, all in the same set.
On the other hand, "Set<Map.Entry<capture-of ?, capture-of ?>>" is a homogenous collection of the same (albeit unknown) pair of types. Eg it might be a Set<Map.Entry<Long, Date>>, so all of the entries in the set MUST be Map.Entry<Long, Date>.
I've heard though that they classify customers like me as "dead beats" because we don't carry a balance for them to charge interest on. I suppose it's possible that's why I got sacked. It's just a shame to have to cancel your first credit card, that helped you establish credit, that you've had for almost 20 years.
If you don't carry a balance and are therefore not paying any interest then what difference does the rate make to you?
Description on Wikipedia sounds complicated. Why not just give each voter three (say) ballot papers. Much easier to count and still provides most of the benefit.
With SYSTEM/360 you get the largest low-cost core memory ever offered. [...] The main memory comes in sizes up to 512,000 characters. To this you can add up to 8 million characters of bulk core memory.
But then, that is the difference between law and mathematics, I suppose. 20 years and 364 days old, you're too young to drink, it's illegal, and there are sanctions. 20 years and 365 days -- 21 years old, and it's perfectly legal. But what is the significant difference in a person at 20 years 364 days vs. 20 years 365 days? Is there some sort of "maturity switch" that is magically flipped? Do the gods of time descend upon you and bestow you with something special?
So how would your fuzzy law work, would you create a maturity test that you have to pass so you can get a drinker's license? Then how do you define maturity? Would there be an appeals process if the powers that be decided you weren't yet ready?
The difference in speed is likely to be less than 10%. Quite a lucky coincidence don't you think that the amount of information you have to process is exactly equal to the processing power of your machine?
Or you could just look up the answer on Wikipedia. Which is probably what the creators did when they were trying to come up with an alternative way of writing Pi.
BTW how did they find the factorials for such a big number?
That's quite a bizarre claim. I've looked at hundreds of Java dumps from hundreds of different customers and the vast majority are doing multithreading on a massive scale with no issues. If there is contention it's usually pretty obvious from the dump.
I can only assume that your company's software is quite poorly designed from a threading perspective.
For an OS that has been around for nearly 20 years and has had thousands of very bright programmers poring over it, it's quite astounding that only now has someone finally figured out how to let gui-related activity have top priority.
Wait until he puts his robot hydraulic foot on an IED.
Er, yes, that's because the copy is from a disassemble and so it's quite possible the order of the methods changed. It's presented in a way to make it clear that it is a copy/disassemble. Which is pretty undeniable, no matter how much you hate Oracle.
And decompiling _is_ effectively copying.
I think you'll find an awful lot of short-lived objects these days are allocated on the stack. Modern JITs use escape analysis to figure out whether the object ever "escapes" from the current stack frame. I.e. is the object still referenced when the current method returns. If it isn't (which is often the case with short-lived objects), the object is allocated right there in the stack frame (just like alloca) and there is zero GC cost. Part of the beauty of Java is that you can do this kind of escape analysis because everything is so well-defined.
Absolutely no way. Even a quick scan of the code shows it is clearly a copy with a pretty poor attempt at cosmetic changes to disguise the fact. Take a look at the method getPolicyNodesExpectedHelper. This is a private method, by definition not part of the API. And yet there it is almost identical in structure in both copies. The Android version cleverly changes the name of the parameter depth to i and matchAny to flag but that's about it. Good luck with defending that in court!
Ah, that explains why I was getting dozens of firewall access requests from Google Updater earlier this week.
Yeah, but when you've seen one part of the Mandelbrot set, you've seen it all.
The error comes at step 2 (or even step 1). We just mentally brush under the carpet all the other 111s stretching off to infinity. But what does it mean to multiply an infinite set by 9? Imagine we get a computer to do it for us. So we have a program to multiply our infinite series of ones by 9. It will never finish of course. And there's a big difference between finishing and never finishing. Multiplying by 1 is an atomic operation. Multiplying by 0.999... is a process that will never complete. In fact the number 0.999... is itself a process, not a fixed quantity. I wonder if maths could be recast in terms of processes? So instead of saying for instance the sum of 1 + 1/2 + 1/4 + ... == 2, you'd leave it as a process which would be a bit more awkward but maybe those process numbers would combine/cancel out.
I agree. Life has evolved billions of times on planets all over the universe. There's no more reason to preserve our species for ever than there is a particular individual. Look at it from the point of view of the universe (or god if you prefer). The lights of consciousness are turning on and off all the time. I'm sure it's all a device for creating stories and someone somewhere is sat in the dark, popcorn on their lap watching the greatest 3D movie of all time. Who wants to watch a repeat?
If you are seventeen, then one year before you were born I was using a 68040 NeXT machine, programming in Objective-C and Display Postscript.
Just been hit starting 30 minutes ago by a wave of delivery failure notifications but the preceding message (to which it is a reply) looks like one from me - spam to a bunch of people including some addresses I recognize. Gmail account now disabled. Seems a hell of a coincidence that this is happening just after this report about Gmail JavaScript problems. Never had anything like this before.
Feed all the data into a blog, one magazine edition per blog entry. Some blog software lets you set the date of the entry - use that to set the date to the edition publication date. Enter the keywords as blog tags. You can expand the blog entry to contain such things as (e.g.) a picture of the cover, some short descriptive text. You then also get a free forum where people can discuss the edition in question.
Well the person doing the explaining agreed that it was tricky, and tricky != simple. IMO language features should be simple enough that you don't get rusty and need to go look things up to refresh your memory.
Here's an example of how complex it can get. Extract:
+1
Description on Wikipedia sounds complicated. Why not just give each voter three (say) ballot papers. Much easier to count and still provides most of the benefit.
I asked the Yes No Oracle the question "does the internet make you stupid?" and the answer was yes.
Car analogy time! You can be an expert car mechanic without knowing how to drive.
I'll get me coat...
Why would you ever need more than that?
So how would your fuzzy law work, would you create a maturity test that you have to pass so you can get a drinker's license? Then how do you define maturity? Would there be an appeals process if the powers that be decided you weren't yet ready?
The difference in speed is likely to be less than 10%. Quite a lucky coincidence don't you think that the amount of information you have to process is exactly equal to the processing power of your machine?