I think they realize that, and it appears that Wave is an important part of fixing it. Gmail and Buzz I use in a single window- my Buzzes run inside Gmail pretty seamlessly in a single window. And it appears to me that Buzz is really a wave app.
You make an interesting point. But computers have a couple of important advantage over humans in this area. Computers can read a lot faster than people. In theory, they could watch movies a lot faster. They have direct connections to the internet. Also, computers are much more scalable than a human brain-- we can add more nodes and processing power to a computer system, but not to a human brain.
Also, an AI doesn't necessarily need to be developmentally similar to a human at all. They may not actually need time to mature like people do. Granted, if they don't grow up the same way we do yet are intelligent, then they will likely seem very alien to us. But while it may take some amount of wall clock time to nurture a new AI, they don't necessarily need the same amount of time to develop that a human would.
Agreed. In civilized countries we have really excellent infant mortality rates. We have instant global communications, and overnight worldwide delivery and travel. Tons of different diseases, essentially made obsolte. And technology has done a lot for us. Keep in mind that comptuers do many jobs for us today that used to be done by people, such as coordinating appointment schedules, taking messages, operating elevators, delivering documents, retyping edited documents... There's likely a list of these types of things longer than anyone would care to read. Also look at the means food production: farm automation, techniques, and technology have enabled huge swaths of the population to devote their attention to other things.
The sad part is most of those other things people devote their time to is just other flavors of slavery designed to protect the wealth of the rich. I don't have the numbers on this, but it wouldn't surprise me if available leisure time and family and friends time has dropped since the industrial and information revolutions rather than raised.
Technological change has also brought about much negative change that no one would have expected, either. Such as for all the low infant mortality in the first world, it's as bad as ever or worse in the third world (right? I'm not sure about this, just guessing). Who would have guessed in 1890 that we'd be on the verge of emptying the oceans of fish? Or that the widely held ability to destroy most life on the planet is the main thing keeping us from destroying life on the planet.
And surely not many people believed that ThoughtCrime and big brother would ever really happen. But it is. If you don't believe me, there's certain keywords you should try Googling every night and see what happens to you.
I can understand why you might feel that way. It sounds to me like you probably feel like the formal study of philosophy just generally isn't a worthwhile endeavor. There's no shame in feeling that way; certainly there have been countless others since the dawn of philosophy that would agree with you. But similarly, there's no shame in people that have taken the time to learn and contemplate it to discuss their ideas with each other. Your comments are similar to saying that a few people chalking out complicated mathematics on a board for the entertainment of discussing it is a waste of time. It's true, depending on how you draw the boundaries, but irrelevant.
Your argument is of the form:
A is not X
B is not X
Ergo, A is B.
Insightful and interesting remarks. I am simultaneously relieved and disappointed that you didn't also wheel out whatever Latin term undoubtedly exists for that type of rhetorical argument.
A project like this, if it took off, could be quite good for expanding the usage of the Java language.
You're right- it did or would encourage the use of Java. But I never quite did understand that strategy, though-- how Java use helps Sun. Is it simply that a cross-platform language like Java is strategic to Sun just because it makes it so that one vendor doesn't dominate the entire market, therefore also-rans and non-dominating manufacturers (like Sun) have a better change at making sales?
Essentially, the Java strategy is or was all about leveling the playing field?
OMG, that last font you linked to... looking at it made my stomach turn and made me laugh my ass off at the same time. It's the best "what the hell were they thinking" moment I've had all day. It's a laudable idea, but damn, this guy is from another planet if he's willing to make something like Russian characters just so he can run his font size so small that he's got a thousand characters on his screen. He's probably one of those scary-smart people, or just utterly clueless. You said it well when you suggested he needs to get out more.
In many ways, the face of wow has changed quite dramatically since launch. Battlegrounds, arenas, those didn't exist way back when and they're central now. Wow went from small dungeons, then later to huge raids, then more recently back to smaller raids. That's a pretty huge change in many ways, including what type of person the game is approachable to. Many classes have changed quite fundamentally when comparing today vs. launch, most notably druids and paladins. Both of those can now be very effective as either healers, damage dealers, or tanks. Back in the day, their viable roles were far more limited.
Wow, at least, truly has changed quite a bit over the years. Other games couldn't hope to grow and expand and evolve that much during their lifecycle, however.
Interesting. So you've got linux as a platform, plus windows, plus iPhone. But for Android, wouldn't you need to compile it differently for say, Droid vs Droid Eris vs HTC Hero vs... ?
I have no idea where you get this impression. Android's dalvik engine is widely known to be roughly 20x slower than most other non-JIT'd java VMs. Its slow by any measure.
Here's where I get that impression. I'm working on an RPG game for Android. I have about 3000 objects in the game world, of which maybe 30 are visible at a time. Of course I'm going to need to implement quadtrees to efficiently traverse the data and figure out which things need to be rendered on screen. But before implementing quadtrees, I put in an ultra-naive brute-force loop that goes through all 3000 objects every frame. To my utter amazement, that naive implementation runs just fine on the Droid and the emulator, with a framerate that performs just fine. Going through 3000+ rectangles every frame, checking to see if the viewport rectangle intersects with each world object-- I fully expected that the pretty much not work at all.
Turns out, when profiling the application, the act of bitmap drawing of the tiles is where nearly all of the time is being consumed, and the traversing of this big data structure is comparatively nothing. Thus, I was surprised at the speed of the code, for my application. If I was calculating fractals or something my story would be different I'm sure, but for me, I was surprised at the speed of code execution.
It's true that I can recompile the OS and raise the memory limit. But that's not helpful when I am developing apps to sell on the app store. I generally need to support the least common denominator when developing apps. The least common denominator is 16 megs:
the baseline Android memory class is 16 (which happens to be the Java heap limit of those devices); some device with more memory may return 24 or even higher numbers.
In practice, is the amount of available ram actually higher than 16M on most platforms? I haven't bothered to check what my droid returns for ActivityManager.getMemoryClass(), and I don't have a HTC or any other Android phones. As a practical matter, am I over-constraining myself by limiting myself to just 16 megs?
A true mobile developer demands a native C/C++ interface on mobile devices - if you want something done, more than a bouncing ball on the screen - its the preferred way. NDK under Android is a must - C/C++ isn't that bad - if you know what you are doing.
Really? Perhaps this is true if you're selling to a market where it's easy to control what kinds of devices the users will use-- say, warehouses or something, where the users are buying hardware for run your software. But for applications you intend to sell on the app marketplace, you use C++? Doesn't that mean you need to compile different versions for specific hardware platforms? I'm not saying you're wrong, I'm just interested in knowing how the real pros that know what they're doing do. Can you show me an app on the app store that's been developed in C++?
You're not missing something, you're right on. His point 5, tyranny of the commons, is generally not a problem. With the exception of services, apps don't keep on running. With regard to memory, each app is limited to 16M. That's generally a small enough value that in the minimum configuration for Android-- 64 megs-- the app can run. When the user switches applications, it is up to the OS to decide how long and whether to leave that memory allocated to your app.
If anything, the opposite of the tyranny of the commons is a problem: you can't really use all the resources available in the device in the app (for memory at least), potentially leaving the device underutilized.
It's true. It's also easier to develop in Visual Studio.NET for the Compact Framework than it is for either the Android or the iPhone. Windows Mobile was early to market, and a great development environment for handheld devices for things like warehouses and similar applications.
But Windows Mobile is also getting smoked, for whatever reasons, and the app stores are at least part of that story. A user experience that's not optimized for fingers is probably another. WordStar dominated the word processing market for a while, but was overtaken and is now a distant memory. That's where Windows Mobile is headed.
Sometimes it's a mess of too many layers. But the approach lends itself to enabling someone to radically simplify or eliminate some of those layers, while still reusing key components. That's the power of the simple layered approach. Examples of the power of this approach are in the myriad of Linux-based devices in the world, and the Android devices themselves.
This is true, but not all that bad generally. When I start a new app I do it in a 1.5 emulator, and move to another higher version if I really need to. For me, the different software versions aren't in practice very difficult to deal with. What is difficult to deal with: different hardware configurations. Making an app that works well with a touchscreen, or with a trackball, or with just a D-Pad, or that works great with a keyboard but only if it's there-- those kinds of issues make it more of a challenge than it would be with just one hardware configuration.
For me, the proliferation of hardware configurations is more painful than the proliferation of software configurations. But at the same time, this weakness of the platform is also the greatest strength: there's no other way I can think of for anyone to compete meaningfully with iPhone than to allow anybody and their brother to make the devices and participate in the app store.
3 isn't really applicable as not only is it optimised for it's own version of java, but you have the option of writing C anyway.
GP's point #3 was about C++ being more efficient by a lot. His point actually is valid. Consider all the things you need to be mindful of when writing efficient Android apps in Java There are so manu things that you need to be careful not to trip over, even in Android's optimized Java. Things that a C++ compiler would optimize out no problem. Generally Android's java is very optimized and is terrific and surprisingly fast, but it's still no C++ in terms of performance. But it's also easy to write for generally and very approachable, so I'm not complaining. Just saying that Gp's point #3 should not be dismissed entirely without due consideration.
How does Android protect against a rouge app stealing my Google contacts and mass-mailing out Google mail?
2 ways I can think of:
On the marketplace there is a rating system and comments. If an app is malicious in a way that anybody finds out about, you're going to see it in the comments and the rating.
Application permissions-- each application much request what things it needs access to. Ability to access the net, ability to access comments, and so on, are all things an app must state up front that it will do in order for it to have access. When you download or install an app, you are shown what privileges the app will have, and you can accept or deny. So you definitely won't be downloading a tower defense game that can steal your contacts and mass mail out Gmail, because you wouldn't grant the permissions. It'd have to be a contact manager or other type of app that it'd make sense for it to have such access. And a malicious contact manager app would probably get poor ratings, and would probably suck anyway and get even poorer ratings.
He hates Java. A lot of people seem to feel that way. I actually like Java more than say c++ because I find the Java object model has a less of a tacked on feel.
I generally agree with you sentiment. Generally we don't get to take advantage of a lot of that, though. When working on a performance critical app, such as a game, most of the code you're going to write is going to look and feel more like C++ than Java anyway.
Avoiding garbage collection is a key thing that's always top of mind. So you end up pre-allocating all your stuff, thinking about the cycle of memory management constantly. I'm constantly using plain old arrays instead of collections for performance reasons-- every time you iterate through a collection it generates an iterator that needs to be garbage collected. They recommend you shy away from Enums, because each access requires a lookup. They recommend you avoid encapsulation of getters and setters when you can and just access things directly for better performance. They recommend you use parallel arrays instead of composite objects when you can.
I guess the point is that the Java you're coding on Android, for performance critical apps at least, feels a lot more low level, takes more time to write and get right than normal desktop or server Java. Sometimes I feel like I'd rather have that extra bit of performance and be directly in C++ as long as I'm having to deal with so much low level stuff.
tragedy of the commons: the misuse and overuse of a collectively owned resource. In the case of Android, that common resource is the memory, processor, and battery life of the handset. The tragedy is that any application, while in the background, can use any amount of resources.
This isn't exactly true. Apps only get to use 16 megs of memory on Android. Sounds like a lot, but it's not, especially if you're working with 2d graphics. That's actually something that's causing a lot of difficulty for me in game development on Android. A 1000x800 image is 3.2 megs by itself (1000 x 800 x 4 bytes per pixel). Put a couple of sprite sheets into memory for animation and you're rubbing elbows with the limits.
The point from the article about apps being unconstrained and able to ruin each other isn't really true, at least not for memory. Perhaps the problem the author cites is more of a problem on Android platforms with only 64megs of memory to work with in total. On my Droid, I am saddened by the opposite problem: only being able to use a small portion of my device's memory.
The only way this will stop is if we can convince enough people to stop flying
You're right, of course. It'd be really great if we lived in some sort of democratic society where the people have a say in what the govenrment does, and the officials are responsible to the will of the people.
But what's wrong with that often-quoted statement? He doesn't say the Ipod will fail, he says it's lame. Since when does being popular mean it can't be lame?
Arguably, the iPod wasn't lame in any sense. It was totally game-changing. It worked its way into our social fabric, and ultimately changed the way people buy music. surely this would have happened anyway without Apple, but the iPod actually did it. It was not lame. It'd be like calling the original Macintosh lame. The Mac sent historic ripples through the history of technology.
From a purely technical perspective, maybe one could intelligently argue that the iPod device itself was lame. But with perfect hindsight, it's clear that iPod was an exceedingly successful and awesome product. I think the point being made at grandparent level is that we should not underestimate the potential impact of new products from Apple, and that naysayers have been somewhat humiliatingly proven wrong.
Therefore, take up the mantle with me, and become an Apple worshipping fanboy! It'll feel great, and you'll get lots of chicks at coffee shops like I do.
Exactly right. I bought an Android phone. When I want to install something on my phone, the phone asks me if it's ok to install it, rather than the other way around.
I think they realize that, and it appears that Wave is an important part of fixing it. Gmail and Buzz I use in a single window- my Buzzes run inside Gmail pretty seamlessly in a single window. And it appears to me that Buzz is really a wave app.
You make an interesting point. But computers have a couple of important advantage over humans in this area. Computers can read a lot faster than people. In theory, they could watch movies a lot faster. They have direct connections to the internet. Also, computers are much more scalable than a human brain-- we can add more nodes and processing power to a computer system, but not to a human brain.
Also, an AI doesn't necessarily need to be developmentally similar to a human at all. They may not actually need time to mature like people do. Granted, if they don't grow up the same way we do yet are intelligent, then they will likely seem very alien to us. But while it may take some amount of wall clock time to nurture a new AI, they don't necessarily need the same amount of time to develop that a human would.
Agreed. In civilized countries we have really excellent infant mortality rates. We have instant global communications, and overnight worldwide delivery and travel. Tons of different diseases, essentially made obsolte. And technology has done a lot for us. Keep in mind that comptuers do many jobs for us today that used to be done by people, such as coordinating appointment schedules, taking messages, operating elevators, delivering documents, retyping edited documents... There's likely a list of these types of things longer than anyone would care to read. Also look at the means food production: farm automation, techniques, and technology have enabled huge swaths of the population to devote their attention to other things.
The sad part is most of those other things people devote their time to is just other flavors of slavery designed to protect the wealth of the rich. I don't have the numbers on this, but it wouldn't surprise me if available leisure time and family and friends time has dropped since the industrial and information revolutions rather than raised.
Technological change has also brought about much negative change that no one would have expected, either. Such as for all the low infant mortality in the first world, it's as bad as ever or worse in the third world (right? I'm not sure about this, just guessing). Who would have guessed in 1890 that we'd be on the verge of emptying the oceans of fish? Or that the widely held ability to destroy most life on the planet is the main thing keeping us from destroying life on the planet.
And surely not many people believed that ThoughtCrime and big brother would ever really happen. But it is. If you don't believe me, there's certain keywords you should try Googling every night and see what happens to you.
I can understand why you might feel that way. It sounds to me like you probably feel like the formal study of philosophy just generally isn't a worthwhile endeavor. There's no shame in feeling that way; certainly there have been countless others since the dawn of philosophy that would agree with you. But similarly, there's no shame in people that have taken the time to learn and contemplate it to discuss their ideas with each other. Your comments are similar to saying that a few people chalking out complicated mathematics on a board for the entertainment of discussing it is a waste of time. It's true, depending on how you draw the boundaries, but irrelevant.
Insightful and interesting remarks. I am simultaneously relieved and disappointed that you didn't also wheel out whatever Latin term undoubtedly exists for that type of rhetorical argument.
You're right- it did or would encourage the use of Java. But I never quite did understand that strategy, though-- how Java use helps Sun. Is it simply that a cross-platform language like Java is strategic to Sun just because it makes it so that one vendor doesn't dominate the entire market, therefore also-rans and non-dominating manufacturers (like Sun) have a better change at making sales?
Essentially, the Java strategy is or was all about leveling the playing field?
Fortunately, the developers of GNU, Linux, Wine, Open Office, didn't feel that way.
Windows users should install VLC. Windows users who can't be bothered to use anything other than Windows Media Player can suck it, seriously.
OMG, that last font you linked to... looking at it made my stomach turn and made me laugh my ass off at the same time. It's the best "what the hell were they thinking" moment I've had all day. It's a laudable idea, but damn, this guy is from another planet if he's willing to make something like Russian characters just so he can run his font size so small that he's got a thousand characters on his screen. He's probably one of those scary-smart people, or just utterly clueless. You said it well when you suggested he needs to get out more.
In many ways, the face of wow has changed quite dramatically since launch. Battlegrounds, arenas, those didn't exist way back when and they're central now. Wow went from small dungeons, then later to huge raids, then more recently back to smaller raids. That's a pretty huge change in many ways, including what type of person the game is approachable to. Many classes have changed quite fundamentally when comparing today vs. launch, most notably druids and paladins. Both of those can now be very effective as either healers, damage dealers, or tanks. Back in the day, their viable roles were far more limited.
Wow, at least, truly has changed quite a bit over the years. Other games couldn't hope to grow and expand and evolve that much during their lifecycle, however.
Interesting. So you've got linux as a platform, plus windows, plus iPhone. But for Android, wouldn't you need to compile it differently for say, Droid vs Droid Eris vs HTC Hero vs... ?
Here's where I get that impression. I'm working on an RPG game for Android. I have about 3000 objects in the game world, of which maybe 30 are visible at a time. Of course I'm going to need to implement quadtrees to efficiently traverse the data and figure out which things need to be rendered on screen. But before implementing quadtrees, I put in an ultra-naive brute-force loop that goes through all 3000 objects every frame. To my utter amazement, that naive implementation runs just fine on the Droid and the emulator, with a framerate that performs just fine. Going through 3000+ rectangles every frame, checking to see if the viewport rectangle intersects with each world object-- I fully expected that the pretty much not work at all.
Turns out, when profiling the application, the act of bitmap drawing of the tiles is where nearly all of the time is being consumed, and the traversing of this big data structure is comparatively nothing. Thus, I was surprised at the speed of the code, for my application. If I was calculating fractals or something my story would be different I'm sure, but for me, I was surprised at the speed of code execution.
In practice, is the amount of available ram actually higher than 16M on most platforms? I haven't bothered to check what my droid returns for ActivityManager.getMemoryClass(), and I don't have a HTC or any other Android phones. As a practical matter, am I over-constraining myself by limiting myself to just 16 megs?
Really? Perhaps this is true if you're selling to a market where it's easy to control what kinds of devices the users will use-- say, warehouses or something, where the users are buying hardware for run your software. But for applications you intend to sell on the app marketplace, you use C++? Doesn't that mean you need to compile different versions for specific hardware platforms? I'm not saying you're wrong, I'm just interested in knowing how the real pros that know what they're doing do. Can you show me an app on the app store that's been developed in C++?
You're not missing something, you're right on. His point 5, tyranny of the commons, is generally not a problem. With the exception of services, apps don't keep on running. With regard to memory, each app is limited to 16M. That's generally a small enough value that in the minimum configuration for Android-- 64 megs-- the app can run. When the user switches applications, it is up to the OS to decide how long and whether to leave that memory allocated to your app.
If anything, the opposite of the tyranny of the commons is a problem: you can't really use all the resources available in the device in the app (for memory at least), potentially leaving the device underutilized.
It's true. It's also easier to develop in Visual Studio .NET for the Compact Framework than it is for either the Android or the iPhone. Windows Mobile was early to market, and a great development environment for handheld devices for things like warehouses and similar applications.
But Windows Mobile is also getting smoked, for whatever reasons, and the app stores are at least part of that story. A user experience that's not optimized for fingers is probably another. WordStar dominated the word processing market for a while, but was overtaken and is now a distant memory. That's where Windows Mobile is headed.
Sometimes it's a mess of too many layers. But the approach lends itself to enabling someone to radically simplify or eliminate some of those layers, while still reusing key components. That's the power of the simple layered approach. Examples of the power of this approach are in the myriad of Linux-based devices in the world, and the Android devices themselves.
This is true, but not all that bad generally. When I start a new app I do it in a 1.5 emulator, and move to another higher version if I really need to. For me, the different software versions aren't in practice very difficult to deal with. What is difficult to deal with: different hardware configurations. Making an app that works well with a touchscreen, or with a trackball, or with just a D-Pad, or that works great with a keyboard but only if it's there-- those kinds of issues make it more of a challenge than it would be with just one hardware configuration.
For me, the proliferation of hardware configurations is more painful than the proliferation of software configurations. But at the same time, this weakness of the platform is also the greatest strength: there's no other way I can think of for anyone to compete meaningfully with iPhone than to allow anybody and their brother to make the devices and participate in the app store.
GP's point #3 was about C++ being more efficient by a lot. His point actually is valid. Consider all the things you need to be mindful of when writing efficient Android apps in Java There are so manu things that you need to be careful not to trip over, even in Android's optimized Java. Things that a C++ compiler would optimize out no problem. Generally Android's java is very optimized and is terrific and surprisingly fast, but it's still no C++ in terms of performance. But it's also easy to write for generally and very approachable, so I'm not complaining. Just saying that Gp's point #3 should not be dismissed entirely without due consideration.
2 ways I can think of:
I generally agree with you sentiment. Generally we don't get to take advantage of a lot of that, though. When working on a performance critical app, such as a game, most of the code you're going to write is going to look and feel more like C++ than Java anyway.
Avoiding garbage collection is a key thing that's always top of mind. So you end up pre-allocating all your stuff, thinking about the cycle of memory management constantly. I'm constantly using plain old arrays instead of collections for performance reasons-- every time you iterate through a collection it generates an iterator that needs to be garbage collected. They recommend you shy away from Enums, because each access requires a lookup. They recommend you avoid encapsulation of getters and setters when you can and just access things directly for better performance. They recommend you use parallel arrays instead of composite objects when you can.
I guess the point is that the Java you're coding on Android, for performance critical apps at least, feels a lot more low level, takes more time to write and get right than normal desktop or server Java. Sometimes I feel like I'd rather have that extra bit of performance and be directly in C++ as long as I'm having to deal with so much low level stuff.
This isn't exactly true. Apps only get to use 16 megs of memory on Android. Sounds like a lot, but it's not, especially if you're working with 2d graphics. That's actually something that's causing a lot of difficulty for me in game development on Android. A 1000x800 image is 3.2 megs by itself (1000 x 800 x 4 bytes per pixel). Put a couple of sprite sheets into memory for animation and you're rubbing elbows with the limits.
The point from the article about apps being unconstrained and able to ruin each other isn't really true, at least not for memory. Perhaps the problem the author cites is more of a problem on Android platforms with only 64megs of memory to work with in total. On my Droid, I am saddened by the opposite problem: only being able to use a small portion of my device's memory.
You're right, of course. It'd be really great if we lived in some sort of democratic society where the people have a say in what the govenrment does, and the officials are responsible to the will of the people.
Arguably, the iPod wasn't lame in any sense. It was totally game-changing. It worked its way into our social fabric, and ultimately changed the way people buy music. surely this would have happened anyway without Apple, but the iPod actually did it. It was not lame. It'd be like calling the original Macintosh lame. The Mac sent historic ripples through the history of technology.
From a purely technical perspective, maybe one could intelligently argue that the iPod device itself was lame. But with perfect hindsight, it's clear that iPod was an exceedingly successful and awesome product. I think the point being made at grandparent level is that we should not underestimate the potential impact of new products from Apple, and that naysayers have been somewhat humiliatingly proven wrong.
Therefore, take up the mantle with me, and become an Apple worshipping fanboy! It'll feel great, and you'll get lots of chicks at coffee shops like I do.
Exactly right. I bought an Android phone. When I want to install something on my phone, the phone asks me if it's ok to install it, rather than the other way around.