That same trivial application - 15 years later - is still slow.
I'm sorry, but I must conclude that you are either trolling, or that that specific application is really poorly written. I'll admit that I'm no great fan of Java really, but for quite different reasons. I've written quite a few Java programs in recent years, and performance has been the least of the problems. I have never experienced the click or processing lags of which you speak, and the startup lag is far less than a second, so it is certainly competitive with other GUI programs in that regard (I wouldn't use it to write command-line programs though, of course).
Most recently, I've been writing a MMORPG (as a hobby), where the client is written in Java precisely because that means I can use Java Web Start for dead easy "installations" on users' machines. You just click on a link and it runs. While there are a few (minor) performance problems, I have profiled the program and narrowed it down to certain algorithms, which I know how I could improve if the need would truly arise.
If you doubt me, you can try it (though you'd need to register, but it's an easy registration process). You would get to experience the goodness of Java Web Start, and you'd also see that there are no click or processing lags apart, of course, from those inherent to the Internet latency which is part of running an online game.
The good news is that is also uses a shitload of ram[...]
Be very wary of making that statement if you are not very sure that you know what you're saying. It is certainly true that the process monitor on both Unix and Windows will display Java processes as consuming hundreds of MBs of RAM, but that is because the JRE preallocates virtual memory for its heap. Virtual memory, mind you -- not physical memory. The OS (or at least Windows and Linux) will allocate physical pages to the process on demand, and the PermGen and OldGen heap spaces are compacted by the GC and therefore readily available for swapping out. The JRE interacts quite well with the VM for at least the most common systems.
[...]an average java application programmer is nearly clueless about the OS and hardware they're using.
You are correct, and that is definitely a problem. However, the problem is certainly not limited to Java, and bad programmers are abundant for any programming system you could envisage. I do not think that it is fair to blame that problem on Java.
And finally, full web applications ( we use Zimbra for enterprise messaging) with drag and drop capabilities are better than java applications.
I'd really like to go on a long tirade against "web applications", but I'm not feeling pumped up enough right now. I'll be content with insisting that such applications are violating -- nay, raping! -- the model of the WWW (being hypertext) and making it close to impossible to write a new web browser, the latter of which is a great problem, seeing how all current web browsers suck.
Actually, that is not quite true. Every time the user runs the JWS program locally, the JNLP client connects to the server to see if there's a upgrade available. It's even so good that it simply does the check per JAR file, so the program is upgraded very quickly, as only the files that have actually changed are re-downloaded.
In that case, I would recommend that you look to Java Web Start instead. It's as easy to deploy as an applet, but the user gets a real, stand-alone application instead.
That's why you have Java Web Start. It's as easy to deploy as a web application (it is just a couple of files on a web server), and you get the full goodness of a locally running application. And, since it's Java, it doesn't even take much effort to make sure it even runs on other clients than Windows desktops.
Actually, a BIOS that can read EXT would be kickass.
FYI, Coreboot doesn't do that, but many of the payloads that you put with it in ROM do. For example, I use Coreboot with FILO on my server. FILO is a port of GRUB that uses no legacy BIOS code (but rather accesses disk hardware directly). It is quite nice indeed to have a good bootloader in ROM.
Indeed, what you said about building better compilers certainly does apply, but it is well known to be a very hard problem to solve.
For example, one kind of code which would benefit greatly from SSE (or some other vector engine) is a simple matrix addition, for which the manually written C code might look like this:
/* Slashdot's stupid ecode tag removes my indentation:-P */ void add(int *m1, int *m2, int len) { int i;
for(i = 0; i < len; i++) m1[i] += m2[i]; }
In assembler, you could easily write this code with SSE, packing four ints into an SSE register, adding them all with one instruction, and storing them back, making the code potentially four times faster (assuming all the data to be in cache, of course). However, how would you propose that a compiler be able to see this fact? It would have to do some kind of global analysis on the loop itself and figure out the aggregate effects of the operations happening inside.
Not that it's impossible, of course, and as I recall it, one of the largest changes in GCC 4 was that it switched to a new form of internal data flow representation, SSA, which was supposed to make it easier for the GCC devs to add certain kinds of auto-vectorization techniques later on. I seem to recall that it was supposed to be added in GCC 4.1, but I never kept track of it. Does anyone, by any chance, know if it was implemented?
Either way, the point I wanted to make is that some things are very hard to optimize. Even if it can be done, it may take quite some time between the point where a CPU vendor adds a new feature and the point where people figure out how to use it automatically in a compiler. (MMX, AltiVec and other vector engines have been around since -- I don't know? The 80s? -- and only recently have compilers been emerging to take advantage of them automatically (excluding such specialty languages as C*). For this reason, writing assembly language to optimize certain, specific code paths is still relevant. For the most part, however, it is very much correct that a good compiler with knowledge of a CPU's execution units, branch prediction techniques, register renaming schemes and whatever other have you, will outperform human-written assembler in most cases.
That just seems so very far fetched, though, mixing number systems in one post without any hint. Isn't it more likely, in that case, that we should interpret "11" as "11 Hz"? I wish the OP could give his opinion on this matter, because I really don't get it either.
On a machine I used as a desktop, though? I want the modern conveniences of a real desktop. And the other "alternative" desktop managers aren't very good.
I don't quite see the point of that, in all honesty. What, exactly, are the "conveniences" that you speak of? Automounting of hotpluggable media? As if "pmount sdb1" were any harder? Being allowed to use to mouse instead of the keyboard to browse files? Having a program menu, clicking interactively through 3 levels of menus instead of simply typing the name of the program you want to run? I don't know; I just get annoyed by these "desktop environments" and all the hoops they make you jump through.
I might (if I'm in a good mood) see some kind of point for the kind of people who are scared by seeing a monitor full of text, but between reasonable people? I do not see that the "desktop environments" actually have any practical advantages.
For the record, I'm using StumpWM. Oh, and get off my lawn!:)
(And Web 2.0 JavaScript isn't that slow. At least for the sites I visit.)
Well, if you consider one-two seconds for opening a compacted Slashdot comment on a machine with a 2 GHz superscalar CPU and 2 GB of RAM "not that slow", I guess it "isn't that slow". As for me, I can see that there might just be some layers of cruft in there.
Actually, it's because that's how it is. The "galaxy rotation problem" is the partially unresolved question of whether stars actually travel at the same linear velocity regardlessly of their distance from the galactic center. See Wikipedia.
Also, regardlessly of the galaxy rotation problem, I don't think you'd expect a galaxy to rotate like a solid disk, now would you?:-) (In case of doubt, think of the linear and angular velocities of our own solar system)
There is the problem, however, that in a VM, you need to be running Windows. There are those of us who don't particularly want to go buy a version of Windows just to run some Windows game/application. I applaud the Wine guys' efforts instead. They are doing an immensely impressive work.
To be honest, that in itself is probably worthy of notice. It is not a self-evident truth that all the laws of physics work exactly the same throughout the entire universe. There have, for example, been quite a few theories that have postulated that some of the fundamental constants may vary over space and/or time.
Therefore, just the confirmation that chemistry actually does seem work the same 11 billion years ago on the other side of the known universe is certainly not worthless knowledge. It may also have provided some knowledge about how long it takes for oxygen to accumulate in the evolution of a galaxy (though that may well have been known previously).
Furthermore, of course, it is a great verification of our observational capacity. Though the existence of water may not have been unexpected, our ability to observe it is quite something to marvel at, if I may say so.
Not that you don't have a point at all, but your argument is quite akin to saying that all games are equivalent -- "If you think The Sims is overpriced, just buy Unreal Tournament instead". Which is, needless to say, also quite ludicrous.
In that case, I'd say that Python is the new BASIC. I, too, grew up with BASIC, but I see no reason I would be any worse a programmer today if I had used Python instead (if it had existed back then, of course).
Python is just as simple as BASIC when it comes to syntax, I think. Possibly even more so, since you don't need to name variables after their data type, and the indentation stuff (for all of its flaws) is rather intuitive. It has the familiar print statement from BASIC (though one could argue that a similar input statement might not have hurt, rather than having to use sys.stdin).
Furthermore, Python does actually support much more complex data structures than BASIC does. Of course, beginner courses shouldn't be delving too deeply into those things, but nevertheless, Python scales a lot better than BASIC, so that it actually can be used for real programs (performance issues aside).
That being said, I wouldn't mind if beginner courses were held on microcomputers with no operating system, in assembler. One cannot become a good programmer without knowing what a computer really is, and starting from the beginning might not be a horribly bad idea. After all, assembler never was hard, just impractical.
When you're managing native code, it only takes one slip-up to hand over the keys to the kingdom. That slip-up may be as simple as a two byte exploit, but it's a slip-up none the less. One must be VERY careful with native code because there is no way to prove that it is safe to execute natively.
Hypervisor features in modern processors simplify the issue somewhat, but it is still not proven that hypervisors are without exploits.
That's not at all true, though, and you certainly don't need any supervisor CPU features. It is quite easy to run native code completely securely -- all you need to do is set up a private virtual memory space for the managed code, and only provide it with a call gate to your own program code through which it can do controlled requests. It's done at large scale -- it's called a "process" in normal OS parlance. You may have heard of the term
The normal problem is just that the operating system gives too much privilege to all processes, such that any running process can access the filesystem, the network stack, can allocate limitless amounts of memory (swappable memory, but nevertheless) and so on. However, that's a problem with the operating system, not with the CPU. In fact, later versions of Linux has a special process mode called SECCOMP, in which the process may only call exit(), read() and write() (the latter two only on already open file descriptors), which could certainly be used to implement Google's idea completely securely.
The problem in this case, that the OP complained about was that Google seems to only blacklist certain program data bytes, which is most likely unsafe, as there are probably other code paths left that could be used to execute unsafe code that noone would have thought to blacklist.
My point is just that there's no reason to think that a JVM is inherently more secure than an x86 CPU. It's just the Java class library that's more secure than your standard off-the-shelf operating system.
I think that the phrase you are trying to say is 'Nothing'. Other than the title of the album it is simply a picture of a naked individual. If anyone finds it sexually arousing then perhaps there it is something wrong with them and not with the cover?
I'd like to respectfully disagree, because there's a difference between "arousing" and "sexualizing". The picture is not arousing, but I would certainly agree with the GP that the image is sexualizing, in the sense that it focuses on the girl's purported sexuality (though not in a way meant to arouse, or at least not obviously intentionally so). As the GP says, the girl's pose makes it quite clear that she doesn't just happen to be naked.
I certainly would not call it pornography, however, as the picture does not seem to be intentionally taken to be arousing. That's not really the matter here, though, I think. You state that you think that this is an extension of society's problem with accepting that people are born naked, but I would disagree with that, too. I rather think that this is just a problem with society taking its zeal against child pornography much too far.
The zeal against child pornography is, to a very large extent, justified, but what has come to pass is that society has turned from the actual reasons why child pornography is bad, to a general stance against child pornography in whatever shape, form or nature it appears in. That's why this image is being censored. It's close to being child pornography, and therefore it must be immediately banned, and its creators burned at the stake. Preferably immediately!
What they miss is, of course, that child pornography isn't just bad because it exists, but because of the effects it has on the children involved. Outright child pornography more often than not has children either being abused, or being fooled in such a way that they will come to regret it later in life. Furthermore, the very usage of child pornography fuels the industry that causes such crimes to be committed. Of course, that's a bad thing and should be stopped by society. In this case, though, that hasn't happened. The Wikipedia article makes it clear that the model has expressed that she does not regret the picture, and there's no reason to think that these things will fuel the child pornography industry in any way. No crime has been committed, and there's no reason to censor or punish anything.
Furthermore, the zeal against child pornography has definitely been taken too far. I'm seeing it being used to power anything from censorship to surveillance, and I am not convinced. It's like the Spanish inquisition! Is it a hideous crime to abuse children to produce child pornography? Of course! Is it worse than murder? Very doubtfully so. Should the enforcement against it affect our civil liberties? Definitely not!
I disagree, and very much so. The Tab character has always been defined to forward to the next column which is divisible by eight, and programs breaking that standard are causing lots more trouble for me than many other things.
Furthermore, the stylistic differences in coding standards go far beyond merely the level of indentation. Arguably even more important are such things as trailing braces, spaces after keywords and between infix operators, and where to indent to begin with (the GNU coding style, for example, uses "half-level" indentation for the braces around code blocks in C). Those things won't change just because you change the tab stops.
Thus, I must conclude that changing the tab stops to achieve the effect you want is nought more than an ugly hack, and one which definitely causes interoperability problems. You wouldn't even be able to cat a file written like that to a terminal and have it format properly!
If you want to adopt your own style to a program you're writing on, you should simply use a program like indent.
I set tabs to take up four columns. Eight is (visually) too big. Visual Studio's default is to make a tab go up to the next divisible-by-four column, so you're way off-base saying "all reasonable programs interpret tab characters" as forwarding to the next divisible-by-eight column.
Well, I never did consider Visual Studio a reasonable program, though. Even Microsoft's terminal emulators are wise enough to interpret tabs by the standards, so they're just being inconsistent in their decision to use non-canonical tabs in VS. Reasonable text editors make the tab key forward 4 columns (or whatever the user wants, or triggers auto-indentation like in EMACS), but do not emit an ASCII 9 character just because of that.
That was my chief complaint - Python doesn't have a standard that I'm aware of.
I'm sorry that you have that experience. I, for my part, have never once seen a Python program that has not been indented in levels of 4 columns. That is also what you see in all example code in the Python docs.
My professor uses three spaces for each level of indentation. I use a single tab.
I see. I thought your problem was that you used a text editor that put a Tab character (in the sense of being an ASCII 9) into the file to mean four spaces, and that your professor simply used 4 space characters (in the ASCII 32 sense), and that that was causing the trouble. Obviously, you have a real problem (and you should probably yell at your professor for not using 4 columns indentations).
How, exactly, is my editor supposed to know that when I paste from code sample X it should replace three-space-indentation with tabs, but from code sample Y it should replace two-space-indentation with tabs? I would actually complain if my editor tried to do that for me, because half the time it would be wrong.
Indeed, I agree, and there is no way that your editor could know that. I'd just like to clarify that neither I am a great fan of Python's use of whitespace (though I haven't had any problems with it, so I haven't cared either). I just thought you were having the old problem of using a stupid editor.
Well, it's one thing that most editors will let you redefine tab. If nothing else, at least that lets you cope with code that is written with ill-defined tabs.
The difference is that Eclipse (and I think Visual Studio as well, now that you mention it) use non-canonical tabs by default, without you having to ask for it.
I know a whole lot of really good programmers. That I know of, none of them have tabs set to 8 characters. Most use 4, some use 3. I prefer 2.
You seem to be confusing the Tab character (ASCII 9) with the idea of "indentation in programming". Indeed, I too use 4 columns for each step of indentation (though it's worth noting that the Linux kernel source and many other projects do use 8 columns per level).
However, that is quite separate from the Tab character as such, which works like I described in all reasonable programs (forwards to the next column divisible by 8).
Therefore, arguing how the Tab character works is quite different from ignoring how people work. People should be allowed to change their levels of indentation indeed (and they can in Python as well -- Python only requires that they be consistent, not that they use indentations of 4 columns each), but that is not the same as letting editors interpret the Tab character any way they want.
The problem is that some editors written by clueless people (Eclipse, I'm looking at you) do take the liberty to redefine the Tab character, thus producing code that is illegible to everyone else, and I'm guessing that that is what HeronBlademaster is having trouble with.
I just don't get the huge benefit of it. Forcing code to be readable? If they didn't use whitespace as syntax, you could run it through tools that fix it up automatically! Plus any programmer that's so lazy that they don't get that right is going to write pretty shitty, undisciplined code, and it's not going to get better in Python. The drawbacks seem to seriously outweigh the benefits.
I generally agree with you here, though. I, too, dislike Python's forced indentation rules. I can't really say I care that much either, though. It's not like it breaks the entire language (except, of course, when people use broken text editors).
I can't copy his code into mine without manually replacing his spaces with tabs, and vice versa.
In that case, your editor is doing something hideously wrong. Python's parser follows the traditional rule that a tab forwards to the next column divisible by 8, which is how all reasonable programs interpret Tab characters.
Many programs that have functionality for writing Python code avoid the use of tabs completely, though. Emacs being one of them.
Yeah, but then you're running Java.
Yeah, which is bad indeed. But infinitely better than a web browser.
That same trivial application - 15 years later - is still slow.
I'm sorry, but I must conclude that you are either trolling, or that that specific application is really poorly written. I'll admit that I'm no great fan of Java really, but for quite different reasons. I've written quite a few Java programs in recent years, and performance has been the least of the problems. I have never experienced the click or processing lags of which you speak, and the startup lag is far less than a second, so it is certainly competitive with other GUI programs in that regard (I wouldn't use it to write command-line programs though, of course).
Most recently, I've been writing a MMORPG (as a hobby), where the client is written in Java precisely because that means I can use Java Web Start for dead easy "installations" on users' machines. You just click on a link and it runs. While there are a few (minor) performance problems, I have profiled the program and narrowed it down to certain algorithms, which I know how I could improve if the need would truly arise.
If you doubt me, you can try it (though you'd need to register, but it's an easy registration process). You would get to experience the goodness of Java Web Start, and you'd also see that there are no click or processing lags apart, of course, from those inherent to the Internet latency which is part of running an online game.
The good news is that is also uses a shitload of ram[...]
Be very wary of making that statement if you are not very sure that you know what you're saying. It is certainly true that the process monitor on both Unix and Windows will display Java processes as consuming hundreds of MBs of RAM, but that is because the JRE preallocates virtual memory for its heap. Virtual memory, mind you -- not physical memory. The OS (or at least Windows and Linux) will allocate physical pages to the process on demand, and the PermGen and OldGen heap spaces are compacted by the GC and therefore readily available for swapping out. The JRE interacts quite well with the VM for at least the most common systems.
[...]an average java application programmer is nearly clueless about the OS and hardware they're using.
You are correct, and that is definitely a problem. However, the problem is certainly not limited to Java, and bad programmers are abundant for any programming system you could envisage. I do not think that it is fair to blame that problem on Java.
And finally, full web applications ( we use Zimbra for enterprise messaging) with drag and drop capabilities are better than java applications.
I'd really like to go on a long tirade against "web applications", but I'm not feeling pumped up enough right now. I'll be content with insisting that such applications are violating -- nay, raping! -- the model of the WWW (being hypertext) and making it close to impossible to write a new web browser, the latter of which is a great problem, seeing how all current web browsers suck.
Actually, that is not quite true. Every time the user runs the JWS program locally, the JNLP client connects to the server to see if there's a upgrade available. It's even so good that it simply does the check per JAR file, so the program is upgraded very quickly, as only the files that have actually changed are re-downloaded.
In that case, I would recommend that you look to Java Web Start instead. It's as easy to deploy as an applet, but the user gets a real, stand-alone application instead.
That's why you have Java Web Start. It's as easy to deploy as a web application (it is just a couple of files on a web server), and you get the full goodness of a locally running application. And, since it's Java, it doesn't even take much effort to make sure it even runs on other clients than Windows desktops.
Damn you! You just made me waste hours on that site. Why didn't you warn me?!
Oh...
Actually, a BIOS that can read EXT would be kickass.
FYI, Coreboot doesn't do that, but many of the payloads that you put with it in ROM do. For example, I use Coreboot with FILO on my server. FILO is a port of GRUB that uses no legacy BIOS code (but rather accesses disk hardware directly). It is quite nice indeed to have a good bootloader in ROM.
Indeed, what you said about building better compilers certainly does apply, but it is well known to be a very hard problem to solve.
For example, one kind of code which would benefit greatly from SSE (or some other vector engine) is a simple matrix addition, for which the manually written C code might look like this:
In assembler, you could easily write this code with SSE, packing four ints into an SSE register, adding them all with one instruction, and storing them back, making the code potentially four times faster (assuming all the data to be in cache, of course). However, how would you propose that a compiler be able to see this fact? It would have to do some kind of global analysis on the loop itself and figure out the aggregate effects of the operations happening inside.
Not that it's impossible, of course, and as I recall it, one of the largest changes in GCC 4 was that it switched to a new form of internal data flow representation, SSA, which was supposed to make it easier for the GCC devs to add certain kinds of auto-vectorization techniques later on. I seem to recall that it was supposed to be added in GCC 4.1, but I never kept track of it. Does anyone, by any chance, know if it was implemented?
Either way, the point I wanted to make is that some things are very hard to optimize. Even if it can be done, it may take quite some time between the point where a CPU vendor adds a new feature and the point where people figure out how to use it automatically in a compiler. (MMX, AltiVec and other vector engines have been around since -- I don't know? The 80s? -- and only recently have compilers been emerging to take advantage of them automatically (excluding such specialty languages as C*). For this reason, writing assembly language to optimize certain, specific code paths is still relevant. For the most part, however, it is very much correct that a good compiler with knowledge of a CPU's execution units, branch prediction techniques, register renaming schemes and whatever other have you, will outperform human-written assembler in most cases.
That just seems so very far fetched, though, mixing number systems in one post without any hint. Isn't it more likely, in that case, that we should interpret "11" as "11 Hz"? I wish the OP could give his opinion on this matter, because I really don't get it either.
On a machine I used as a desktop, though? I want the modern conveniences of a real desktop. And the other "alternative" desktop managers aren't very good.
I don't quite see the point of that, in all honesty. What, exactly, are the "conveniences" that you speak of? Automounting of hotpluggable media? As if "pmount sdb1" were any harder? Being allowed to use to mouse instead of the keyboard to browse files? Having a program menu, clicking interactively through 3 levels of menus instead of simply typing the name of the program you want to run? I don't know; I just get annoyed by these "desktop environments" and all the hoops they make you jump through.
I might (if I'm in a good mood) see some kind of point for the kind of people who are scared by seeing a monitor full of text, but between reasonable people? I do not see that the "desktop environments" actually have any practical advantages.
For the record, I'm using StumpWM. Oh, and get off my lawn! :)
(And Web 2.0 JavaScript isn't that slow. At least for the sites I visit.)
Well, if you consider one-two seconds for opening a compacted Slashdot comment on a machine with a 2 GHz superscalar CPU and 2 GB of RAM "not that slow", I guess it "isn't that slow". As for me, I can see that there might just be some layers of cruft in there.
Anyway, it would be nice to see a proper "full" linux distribution.
You might want to look at Debian. It has been running on ARM for quite a while.
Actually, it's because that's how it is. The "galaxy rotation problem" is the partially unresolved question of whether stars actually travel at the same linear velocity regardlessly of their distance from the galactic center. See Wikipedia.
Also, regardlessly of the galaxy rotation problem, I don't think you'd expect a galaxy to rotate like a solid disk, now would you? :-) (In case of doubt, think of the linear and angular velocities of our own solar system)
There is the problem, however, that in a VM, you need to be running Windows. There are those of us who don't particularly want to go buy a version of Windows just to run some Windows game/application. I applaud the Wine guys' efforts instead. They are doing an immensely impressive work.
To be honest, that in itself is probably worthy of notice. It is not a self-evident truth that all the laws of physics work exactly the same throughout the entire universe. There have, for example, been quite a few theories that have postulated that some of the fundamental constants may vary over space and/or time.
Therefore, just the confirmation that chemistry actually does seem work the same 11 billion years ago on the other side of the known universe is certainly not worthless knowledge. It may also have provided some knowledge about how long it takes for oxygen to accumulate in the evolution of a galaxy (though that may well have been known previously).
Furthermore, of course, it is a great verification of our observational capacity. Though the existence of water may not have been unexpected, our ability to observe it is quite something to marvel at, if I may say so.
Not that you don't have a point at all, but your argument is quite akin to saying that all games are equivalent -- "If you think The Sims is overpriced, just buy Unreal Tournament instead". Which is, needless to say, also quite ludicrous.
[...] java [...] visual basic [...]
And you needed this article to tell you that something was wrong? ;)
Or you can edit your ~/.gtkrc-2.0 and add
gtk-can-change-accels = true
Minor correction: That seems to be gtk-can-change-accels = 1. At least my GTK did not accept true as a valid value.
In that case, I'd say that Python is the new BASIC. I, too, grew up with BASIC, but I see no reason I would be any worse a programmer today if I had used Python instead (if it had existed back then, of course).
Python is just as simple as BASIC when it comes to syntax, I think. Possibly even more so, since you don't need to name variables after their data type, and the indentation stuff (for all of its flaws) is rather intuitive. It has the familiar print statement from BASIC (though one could argue that a similar input statement might not have hurt, rather than having to use sys.stdin).
Furthermore, Python does actually support much more complex data structures than BASIC does. Of course, beginner courses shouldn't be delving too deeply into those things, but nevertheless, Python scales a lot better than BASIC, so that it actually can be used for real programs (performance issues aside).
That being said, I wouldn't mind if beginner courses were held on microcomputers with no operating system, in assembler. One cannot become a good programmer without knowing what a computer really is, and starting from the beginning might not be a horribly bad idea. After all, assembler never was hard, just impractical.
When you're managing native code, it only takes one slip-up to hand over the keys to the kingdom. That slip-up may be as simple as a two byte exploit, but it's a slip-up none the less. One must be VERY careful with native code because there is no way to prove that it is safe to execute natively.
Hypervisor features in modern processors simplify the issue somewhat, but it is still not proven that hypervisors are without exploits.
That's not at all true, though, and you certainly don't need any supervisor CPU features. It is quite easy to run native code completely securely -- all you need to do is set up a private virtual memory space for the managed code, and only provide it with a call gate to your own program code through which it can do controlled requests. It's done at large scale -- it's called a "process" in normal OS parlance. You may have heard of the term
The normal problem is just that the operating system gives too much privilege to all processes, such that any running process can access the filesystem, the network stack, can allocate limitless amounts of memory (swappable memory, but nevertheless) and so on. However, that's a problem with the operating system, not with the CPU. In fact, later versions of Linux has a special process mode called SECCOMP, in which the process may only call exit(), read() and write() (the latter two only on already open file descriptors), which could certainly be used to implement Google's idea completely securely.
The problem in this case, that the OP complained about was that Google seems to only blacklist certain program data bytes, which is most likely unsafe, as there are probably other code paths left that could be used to execute unsafe code that noone would have thought to blacklist.
My point is just that there's no reason to think that a JVM is inherently more secure than an x86 CPU. It's just the Java class library that's more secure than your standard off-the-shelf operating system.
I think that the phrase you are trying to say is 'Nothing'. Other than the title of the album it is simply a picture of a naked individual. If anyone finds it sexually arousing then perhaps there it is something wrong with them and not with the cover?
I'd like to respectfully disagree, because there's a difference between "arousing" and "sexualizing". The picture is not arousing, but I would certainly agree with the GP that the image is sexualizing, in the sense that it focuses on the girl's purported sexuality (though not in a way meant to arouse, or at least not obviously intentionally so). As the GP says, the girl's pose makes it quite clear that she doesn't just happen to be naked.
I certainly would not call it pornography, however, as the picture does not seem to be intentionally taken to be arousing. That's not really the matter here, though, I think. You state that you think that this is an extension of society's problem with accepting that people are born naked, but I would disagree with that, too. I rather think that this is just a problem with society taking its zeal against child pornography much too far.
The zeal against child pornography is, to a very large extent, justified, but what has come to pass is that society has turned from the actual reasons why child pornography is bad, to a general stance against child pornography in whatever shape, form or nature it appears in. That's why this image is being censored. It's close to being child pornography, and therefore it must be immediately banned, and its creators burned at the stake. Preferably immediately!
What they miss is, of course, that child pornography isn't just bad because it exists, but because of the effects it has on the children involved. Outright child pornography more often than not has children either being abused, or being fooled in such a way that they will come to regret it later in life. Furthermore, the very usage of child pornography fuels the industry that causes such crimes to be committed. Of course, that's a bad thing and should be stopped by society. In this case, though, that hasn't happened. The Wikipedia article makes it clear that the model has expressed that she does not regret the picture, and there's no reason to think that these things will fuel the child pornography industry in any way. No crime has been committed, and there's no reason to censor or punish anything.
Furthermore, the zeal against child pornography has definitely been taken too far. I'm seeing it being used to power anything from censorship to surveillance, and I am not convinced. It's like the Spanish inquisition! Is it a hideous crime to abuse children to produce child pornography? Of course! Is it worse than murder? Very doubtfully so. Should the enforcement against it affect our civil liberties? Definitely not!
I disagree, and very much so. The Tab character has always been defined to forward to the next column which is divisible by eight, and programs breaking that standard are causing lots more trouble for me than many other things.
Furthermore, the stylistic differences in coding standards go far beyond merely the level of indentation. Arguably even more important are such things as trailing braces, spaces after keywords and between infix operators, and where to indent to begin with (the GNU coding style, for example, uses "half-level" indentation for the braces around code blocks in C). Those things won't change just because you change the tab stops.
Thus, I must conclude that changing the tab stops to achieve the effect you want is nought more than an ugly hack, and one which definitely causes interoperability problems. You wouldn't even be able to cat a file written like that to a terminal and have it format properly!
If you want to adopt your own style to a program you're writing on, you should simply use a program like indent.
I set tabs to take up four columns. Eight is (visually) too big. Visual Studio's default is to make a tab go up to the next divisible-by-four column, so you're way off-base saying "all reasonable programs interpret tab characters" as forwarding to the next divisible-by-eight column.
Well, I never did consider Visual Studio a reasonable program, though. Even Microsoft's terminal emulators are wise enough to interpret tabs by the standards, so they're just being inconsistent in their decision to use non-canonical tabs in VS. Reasonable text editors make the tab key forward 4 columns (or whatever the user wants, or triggers auto-indentation like in EMACS), but do not emit an ASCII 9 character just because of that.
That was my chief complaint - Python doesn't have a standard that I'm aware of.
I'm sorry that you have that experience. I, for my part, have never once seen a Python program that has not been indented in levels of 4 columns. That is also what you see in all example code in the Python docs.
My professor uses three spaces for each level of indentation. I use a single tab.
I see. I thought your problem was that you used a text editor that put a Tab character (in the sense of being an ASCII 9) into the file to mean four spaces, and that your professor simply used 4 space characters (in the ASCII 32 sense), and that that was causing the trouble. Obviously, you have a real problem (and you should probably yell at your professor for not using 4 columns indentations).
How, exactly, is my editor supposed to know that when I paste from code sample X it should replace three-space-indentation with tabs, but from code sample Y it should replace two-space-indentation with tabs? I would actually complain if my editor tried to do that for me, because half the time it would be wrong.
Indeed, I agree, and there is no way that your editor could know that. I'd just like to clarify that neither I am a great fan of Python's use of whitespace (though I haven't had any problems with it, so I haven't cared either). I just thought you were having the old problem of using a stupid editor.
Well, it's one thing that most editors will let you redefine tab. If nothing else, at least that lets you cope with code that is written with ill-defined tabs.
The difference is that Eclipse (and I think Visual Studio as well, now that you mention it) use non-canonical tabs by default, without you having to ask for it.
I know a whole lot of really good programmers. That I know of, none of them have tabs set to 8 characters. Most use 4, some use 3. I prefer 2.
You seem to be confusing the Tab character (ASCII 9) with the idea of "indentation in programming". Indeed, I too use 4 columns for each step of indentation (though it's worth noting that the Linux kernel source and many other projects do use 8 columns per level).
However, that is quite separate from the Tab character as such, which works like I described in all reasonable programs (forwards to the next column divisible by 8).
Therefore, arguing how the Tab character works is quite different from ignoring how people work. People should be allowed to change their levels of indentation indeed (and they can in Python as well -- Python only requires that they be consistent, not that they use indentations of 4 columns each), but that is not the same as letting editors interpret the Tab character any way they want.
The problem is that some editors written by clueless people (Eclipse, I'm looking at you) do take the liberty to redefine the Tab character, thus producing code that is illegible to everyone else, and I'm guessing that that is what HeronBlademaster is having trouble with.
I just don't get the huge benefit of it. Forcing code to be readable? If they didn't use whitespace as syntax, you could run it through tools that fix it up automatically! Plus any programmer that's so lazy that they don't get that right is going to write pretty shitty, undisciplined code, and it's not going to get better in Python. The drawbacks seem to seriously outweigh the benefits.
I generally agree with you here, though. I, too, dislike Python's forced indentation rules. I can't really say I care that much either, though. It's not like it breaks the entire language (except, of course, when people use broken text editors).
I can't copy his code into mine without manually replacing his spaces with tabs, and vice versa.
In that case, your editor is doing something hideously wrong. Python's parser follows the traditional rule that a tab forwards to the next column divisible by 8, which is how all reasonable programs interpret Tab characters.
Many programs that have functionality for writing Python code avoid the use of tabs completely, though. Emacs being one of them.