While.NET is quite nice. it is severely hindered by being (mostly) Windows. Java has currently a much wider acceptance, running on most mobiles, running in BlueRay Players, still on some desktops and on most servers up to the really big iron servers..NET could take this place, when it can gather a productive and creative community behind it. Microsoft will profit from this by providing all the tools for developing.NET applications. While I personally don't like Visual Studio very much (the built in assistants usually don't produce what I want and without the assistants things get really hard), I still recognize it as one of the best IDEs out there. When reaching to big iron, all the modelling and planning tools in the more expensive versions of Visual Studio come to shine. So by the broader the usage of.NET is, the more money can Microsoft make by providing the tools.
When you automate away the boring jobs, only the creative ones will stay. And usually people will gladly do the creative jobs for free. They gladly imagine a better society, solve complicated mathematical equations or even invent new languages without being paid for it. Most of the creative tasks will not be very useful, but this usually doesn't stop people. With more time on the hand being creative, the rate of great ideas should go up.
Can anyone having the digital subscription tell me how it is delivered? Manual download on the website? Per email? Per cloud-drive (dropbox, onedrive, owncloud, etc)? FTP (pull / push)? Torrent? Amazon whispernet? Something else?
If the Debian team never shove that unneeded thing down the throats to the users none of the heated exchange would have happened in the first place
[...]
"Shoving down" implies some external force. But last I checked, everyone is completely free to choose between Linux distributions. I think, the license even allows it, to start your own distribution, without having to pay anyone anything. Possibly, you can even start your own distribution without asking anyone for allowance. So talking about "shoving down" seems to be a little bit exaggerated.
The people doing the hard work behind Debian are completely free to change the project any way they like. Under no circumstance they should get any harassment for how they decide to change their project (because I think it only belongs to the people putting effort into it). If they decided to remove the init system at all and let the user manage all services by hand, it would be their (should I say: "god given"?) right. They are free people and they can change their project as they choose. If they decided to switch to the NT kernel and toss Linux completely, it would be their choice and everyone else would have to accept it.
Oh, good to know that you are reading this thread. So I will take the opportunity to say thank you for maintaining systemd in the past. I really appreciate it, that you put time and effort in maintaining Debian packages. I used Debian in the past and are currently running Ubuntu, so I am directly and indirectly profiting from your hard work. Until now I did not contribute to any init system, so I am a complete freeloader here.
With regards to init systems, I have no real strong opinion. But I know for sure, that without an init system, I would have to manage all the services by hand. I have done this on embedded hardware (anyone remember the uCsimm embedded Linux system?) and it was no fun at all. So even when systemd was really bad (and I doubt it is so), it would still save me a lot of work. So thank you very much for providing me some software that saves me from managing services by hand.
What I don't really get are all the freeloaders, thinking they can harass the people doing the real work. When doing real work, you always have to make some sub-optimal decisions. There is no perfect way, and reality always wants its tribute. But in the end you get something that works (up to a certain degree...). Just to think about it: Facebook was written in PHP - and it works! So what really counts is getting things done. And the people who build and maintain systemd are getting things done. And getting things done is something that I am really respecting. A bunch of freeloaders, speculating about conspiracy theories (e.g. Redhat enslaving the other distributions through systemd...) and harassing working people are not getting anything done. Worse: They are sabotaging the working people. And this is something that we should never accept.
Fair competition and objective and calm discussion are good for everyone. They help to get a better end result. But harassment and sabotage (psychological or otherwise) are bad and should not be an accepted option. They don't lead to a good end result (because bullies are usually not deep thinkers and emotions are usually no good guides in complex systems) and worse: they are unfair to the people doing real work.
One day corps might get their dream and have no wage bill at all, but then no one will have any jobs to get any money to buy their stuff so where will they be then? [...]
When you come to such conclusions, it is a clear hint, that your mental model has come to its limit. Capitalism is just a model for human interaction and resource sharing. It works quite well when used properly, but you describe a situation, where capitalism will not work any more.
In your scenario, the following will happen: There are machines that transform matter automatically to a given form (e.g. crops to bread, all automatically). There are people controlling these machines. They can let the machines supply them with the things they need. No money needed, no corporation needed.
Then there are people not controlling these machines. In the worst case they starve, in better cases they can get some of the surplus from the people controlling the machines.
And then there are some empty corporations and some irrelevant money. The corporations are empty, because no manual work is needed. The money has some arbitrary value (e.g. zero or infinite), because there is nothing useful you can buy with it. The machines are controlled by other means and the people controlling the machines could just let them create money if they would have any use for it.
Capitalism as a model also doesn't describe the real situation properly, when people cannot make well informed choices (e.g. information is hold back or poisoned with noise) or when there is no fair arbitration (e.g. because someone's life is at stake).
Shifting things from kernel space to user space is usually a good idea, especially with respect to security. Of course the ttys should not stay in PID 0 but be moved to separate, user specific processes in the long term. But moving them from kernel space to PID 0 is an important first step in that direction.
I know somebody that tried this. At around 5000 threads he got no real progress whatsoever anymore.That was a while back, but at that time Java was already a few years old.
The thread limitation comes from the operating system, not from the Java virtual machine. Modern operating systems are not designed to handle a huge amount of parallel threads. The handling of the threads and the synchronization between the threads usually eats up most of the system's resources.
The Java VM indeed has some shortcomings regarding mutli processing: when using multiple cores on the same socket, the Java VM sometimes accesses the same cache lines from all cores. This leads to strange patterns with cache invalidation and slows down all the affected cores. Currently there is no way to mitigate this using Java APIs or VM parameters. But this is a very special problem. When this is indeed the bottleneck, the underlying application is very likely already very well optimized and running quite fast.
If you want to process a huge amount of data, currently the best approach is to run exactly as much threads as you have processor cores. Then you feed each thread with working tasks, using non blocking data structures. For the communication, the threads should use non-blocking IO. Java is prepared extremely well for this scenario, perhaps even better than node.js. Examples are Vert.x and Akka. In some older benchmarks, Vert.x had no problem to serve over 300'000 parallel requests per second on a six core machine.
Edited on on 18:05 Wednesday 17 September 2014: fixed some typos.
It is really hard to get usability problems in bug reports. You would get things like:
User says the software feels sluggish
User is not as productove as before
User says that in general buttons and menu items are not where expected
Bug trackers are not the right tool to deal with usability problems. Just imagine how many usability bugs it would need, to get from a Nokia 6070 to the first iPhone.
3) Bribe the officials to starve to project to dead. Wait until valid complaints from the users come in.
Clues for this (but of course this does not prove anything):
According to wikipedia, they use the following quite outdated software:
version 4 available from August 2011 is based on Ubuntu 10.04 LTS, although using KDE Desktop 3.5 and version 4.1 available from August 2012 is also based on Ubuntu 10.04 LTS
(Source: wikipedia page about LiMux). Especially the desktop environment is really old, first published around 2002 if I remember correctly.
Microsoft moves its German headquarter to munich (source)
Munich lord mayor Reiter is a self-confessed Microsoft fan (source)
Correction: An earlier version of this story reported that the study was funded in part by the James S. McDonnell Foundation and the Army Research Office. In fact, the study received no external funding.
Out of my head I can think of run-time libraries, compile time libraries, compile time tools (code generator, etc.), test libraries, test tools (e.g. dummy applications).
Simple. Build a "bug" into the SATA controller. When a block that should be written to disc fulfills certain criteria, simple write it to a different location according to the content of the block. Now you have a way to modify arbitrary content on disc. You can trigger this bug from remote by embedding content to a web page that riggers this "bug". When the browser on a vulnerable system tries to write this content as a file to the cache folder, it will overwrite some other parts on the disc instead (e.g. the boot sector or parts of the operating system). This can be improved on SSDs, which even analyze the fiel systems stored on them for optimization reasons. Similar bugs might be possible using the graphics chip (access to the PCI-X bus and the RAM), the chipset on the mainboard (access to all connected hardware), the USB controller (access to the PCI bus, the RAM and to connected hardware like an USB disc or a camera) and so on.
Ironically, launching Control Panel on Win8 is actually faster than on Win7 (by default). Right-click the Start button (yes it exists; it was just hidden by default) or hit Win+X, and select "Control Panel" from the menu that appears. Easy and straightforward.
Should't Win+X bring up the mobility center? Or where is the mobility center then on Win 8?
We have very sophisticated wire connectors here in the EU. You can see several examples here. Stew terminals are in fact in most cases not allowed any more in the EU (see here for more details)
The trick with the PDF is made using Link Back. This is a framework for OS X, where applications can embed documents from other applications in their own documents. The embedded documents are still editable by the original application. It's similar to OLE on Windows, but much more lightweight. It's mainly based on PDF with some additional metadata. It's easy to implement and very nice for the user. I find it a quite elegant solution.
I expect the system font will be a bit smaller due to the sharper text.
[...]
The number of pixels required to measure a point will change with dpi but the size of the font shouldn't.
I think what he meant was: They might reduce the size of the fonts. On a sharper display, a 10 point font might be as readable as a 12 point font on a not so sharp display.
You know that the GEMA is also reading Slashdot? So just to clarify: Google Music is NOT working in Germany and there is no way to get it to work. Google has secured it with a GEO-IP filter on the register page. Because you cannot circumvent such an IP filter, there is no way to register for Google music from Germany and hence no way to use it in Germany.
Of course it will work fine for US citicens during their vaccation in Germany, because once you have registered no further filtering will happen (for now).
They use JFS on debian.. You can easily add the filesever software of your choice (Samba, Netatalk, NFS, etc.)
On the hardware side they use a Intel mainboard with a Intel Core 2 CPU, a PCIe SATA 2 Controller and 45 SATA 2 discs (each 1.5 TB). They put it in a custom enclosure, the 3D model is available here (25 MB ZIP archive). This all costs less than 8000€ for 67 TB (discs included!).
There is also an update, where they get 135 TB for less than $8000. In this model they still use Debian, but as a filesystem they run ext4 on LVM with RAID 6.
Coming from a Scala developer, that is strange. The only annoyance I can think of that Scala has and C#/.NET doesn't is non-reified generics with all that entails (inability to implement two interfaces different only in generic type parameters, inability to do an instanceof-check for a particular specialization of a generic, no support for "new T" or "new T[]" etc). It may be a big one, but Scala has many other features to compensate, IMO.
Implicit classes are a nice feature. They are part of LINQ.
Aditionally C# is the standard language of.NET, Scala is only a niche language on the Java paltform. So most.NET library support all the neat C# fatures. On the othe side only very few Java libraries have special Scala support. Of course you can still use them with Scala, but you have to abandon most Scala faeutres (e.g. closures).
Why would you want a statically typed language as a scripting language?
Because it's a statically typed language that can be used like a dynmically typed. You don't write types anywhere and the compiler adds them for you. So you will get type errors on compile time eithout having to write the types explicitely down.
C# has some major advantages over other languages, namely:
A very advanced type systems. I supports typed collections better than Java, being on par with C++. You can even formulate queries on a database, the filesystem, etc and the type system will make sure that everything fits together. This is all done without ugly "hacks" for special cases.
Type inference. You can just write "var i=...". When the compiler compiles your code, it will find out the real type of "i" and replace "var" through that type. So it can typecheck your code, but you can just behave as if you were in a weakly typed script language.
Closures and lambda expressions. You already know them from Python. You don't have them in Java.
Delegates. These are funtion pointers done right. They are very handy for callbacks, e.g. for UI programming.
A very good tool support. The language allows very deep static analysis. So it supports refactoring and statical error checking. Java has the similar features. Python is more limited regarding this.
Support for generated code with partial classes You can define a class partial in source code and partial in compiled code. This allows a controlled mix of generated and hand written code without nasty hacks. Very handy for UI programming or in the enterprise where code generation is still the norm.
Implementations are available for all major platforms (partially thanks to mono) and even for very limited devices (thanks to the open source.net micro framework).
I am a Java/Scala developer. But from time to time I envy the.NET developers. Beside politics, C# could be the standard scription langauge for Unix, better than Perl or Bash. With Mono there is even a scripting frontend for C#.
The problem is that the firmware of the drive tries to interpret the filesystem it holds. With this interpretation it tries to guess which blocks can be delete. It does this without being told by the OS. There is a standard called TRIM command, so the OS can tell the drive which blocks don't hold valid data any more. The drive can then reset these blocks to improve future writes.
But the drive in question does not rely on this standard but tries to interpret the file system it holds. It then tries to detect deleted files and resets all data belonging to these files. If it guesses right, you only loose data belonging to deleted files. If it guesses wron it resets blocks holdign data you still need.
There are severaly situations where this can lead to problems: Some DRM schemes store data outside of the control of the filesystem. Microsoft might update NTFS so the interpretation of the filesystem changes and the drive deletes the wrong blocks. Some people use other filesystems than NTFS, hence confuse the drive and loose data. Some people encrypt their file system, leading the drive to try to inteprete the seemingly "random" data and randomly nuking blocks. And so on.
It does not help that this feature is completely undocumented, so you don't know if and how your drive tries to interpret the filesystem. Good luck with fixing errors related to this.
[...]Does this mean that the drives understand NTFS and are actually zeroing out data on the drive when the OS simply deletes the entry from the FAT table? [...]
Yes, it means exactly that. When the drive detects, that the OS running supports TRIM commands, it relies on that. If it detects that there are the OS does not support TRIM commands, it tries to interpret the filesystem to detect which blocks belong to deleted files. It then brings these blocks back to a prisine state to make them faster writable. During this process all data on the block is cleared. When you bring back the file using an undelete tool or access the according blocks directly (e.g. using a sector editor), you will only get blocks with zeroes.
Or to phare it in another way: When you set some bits in certain blocks to zero, the drive will find it safe to wipe some other blocks on the drive, without being told so by the OS. If your file system in NTFS with the right version, this assumption is true. If you use a different file system, this might not be the case. The details are unknown because the firmware is closed source.
While .NET is quite nice. it is severely hindered by being (mostly) Windows. Java has currently a much wider acceptance, running on most mobiles, running in BlueRay Players, still on some desktops and on most servers up to the really big iron servers. .NET could take this place, when it can gather a productive and creative community behind it. Microsoft will profit from this by providing all the tools for developing .NET applications. While I personally don't like Visual Studio very much (the built in assistants usually don't produce what I want and without the assistants things get really hard), I still recognize it as one of the best IDEs out there. When reaching to big iron, all the modelling and planning tools in the more expensive versions of Visual Studio come to shine. So by the broader the usage of .NET is, the more money can Microsoft make by providing the tools.
When you automate away the boring jobs, only the creative ones will stay. And usually people will gladly do the creative jobs for free. They gladly imagine a better society, solve complicated mathematical equations or even invent new languages without being paid for it. Most of the creative tasks will not be very useful, but this usually doesn't stop people. With more time on the hand being creative, the rate of great ideas should go up.
A new magazine says it will donate half the "profit."
What else should they donate? The costs?
Can anyone having the digital subscription tell me how it is delivered? Manual download on the website? Per email? Per cloud-drive (dropbox, onedrive, owncloud, etc)? FTP (pull / push)? Torrent? Amazon whispernet? Something else?
If the Debian team never shove that unneeded thing down the throats to the users none of the heated exchange would have happened in the first place
[...]
"Shoving down" implies some external force. But last I checked, everyone is completely free to choose between Linux distributions. I think, the license even allows it, to start your own distribution, without having to pay anyone anything. Possibly, you can even start your own distribution without asking anyone for allowance. So talking about "shoving down" seems to be a little bit exaggerated.
The people doing the hard work behind Debian are completely free to change the project any way they like. Under no circumstance they should get any harassment for how they decide to change their project (because I think it only belongs to the people putting effort into it). If they decided to remove the init system at all and let the user manage all services by hand, it would be their (should I say: "god given"?) right. They are free people and they can change their project as they choose. If they decided to switch to the NT kernel and toss Linux completely, it would be their choice and everyone else would have to accept it.
Oh, good to know that you are reading this thread. So I will take the opportunity to say thank you for maintaining systemd in the past. I really appreciate it, that you put time and effort in maintaining Debian packages. I used Debian in the past and are currently running Ubuntu, so I am directly and indirectly profiting from your hard work. Until now I did not contribute to any init system, so I am a complete freeloader here.
With regards to init systems, I have no real strong opinion. But I know for sure, that without an init system, I would have to manage all the services by hand. I have done this on embedded hardware (anyone remember the uCsimm embedded Linux system?) and it was no fun at all. So even when systemd was really bad (and I doubt it is so), it would still save me a lot of work. So thank you very much for providing me some software that saves me from managing services by hand.
What I don't really get are all the freeloaders, thinking they can harass the people doing the real work. When doing real work, you always have to make some sub-optimal decisions. There is no perfect way, and reality always wants its tribute. But in the end you get something that works (up to a certain degree...). Just to think about it: Facebook was written in PHP - and it works! So what really counts is getting things done. And the people who build and maintain systemd are getting things done. And getting things done is something that I am really respecting. A bunch of freeloaders, speculating about conspiracy theories (e.g. Redhat enslaving the other distributions through systemd...) and harassing working people are not getting anything done. Worse: They are sabotaging the working people. And this is something that we should never accept.
Fair competition and objective and calm discussion are good for everyone. They help to get a better end result. But harassment and sabotage (psychological or otherwise) are bad and should not be an accepted option. They don't lead to a good end result (because bullies are usually not deep thinkers and emotions are usually no good guides in complex systems) and worse: they are unfair to the people doing real work.
One day corps might get their dream and have no wage bill at all, but then no one will have any jobs to get any money to buy their stuff so where will they be then? [...]
When you come to such conclusions, it is a clear hint, that your mental model has come to its limit. Capitalism is just a model for human interaction and resource sharing. It works quite well when used properly, but you describe a situation, where capitalism will not work any more.
In your scenario, the following will happen: There are machines that transform matter automatically to a given form (e.g. crops to bread, all automatically). There are people controlling these machines. They can let the machines supply them with the things they need. No money needed, no corporation needed.
Then there are people not controlling these machines. In the worst case they starve, in better cases they can get some of the surplus from the people controlling the machines.
And then there are some empty corporations and some irrelevant money. The corporations are empty, because no manual work is needed. The money has some arbitrary value (e.g. zero or infinite), because there is nothing useful you can buy with it. The machines are controlled by other means and the people controlling the machines could just let them create money if they would have any use for it.
Capitalism as a model also doesn't describe the real situation properly, when people cannot make well informed choices (e.g. information is hold back or poisoned with noise) or when there is no fair arbitration (e.g. because someone's life is at stake).
Shifting things from kernel space to user space is usually a good idea, especially with respect to security. Of course the ttys should not stay in PID 0 but be moved to separate, user specific processes in the long term. But moving them from kernel space to PID 0 is an important first step in that direction.
I know somebody that tried this. At around 5000 threads he got no real progress whatsoever anymore.That was a while back, but at that time Java was already a few years old.
The thread limitation comes from the operating system, not from the Java virtual machine. Modern operating systems are not designed to handle a huge amount of parallel threads. The handling of the threads and the synchronization between the threads usually eats up most of the system's resources.
The Java VM indeed has some shortcomings regarding mutli processing: when using multiple cores on the same socket, the Java VM sometimes accesses the same cache lines from all cores. This leads to strange patterns with cache invalidation and slows down all the affected cores. Currently there is no way to mitigate this using Java APIs or VM parameters. But this is a very special problem. When this is indeed the bottleneck, the underlying application is very likely already very well optimized and running quite fast.
If you want to process a huge amount of data, currently the best approach is to run exactly as much threads as you have processor cores. Then you feed each thread with working tasks, using non blocking data structures. For the communication, the threads should use non-blocking IO. Java is prepared extremely well for this scenario, perhaps even better than node.js. Examples are Vert.x and Akka. In some older benchmarks, Vert.x had no problem to serve over 300'000 parallel requests per second on a six core machine.
Edited on on 18:05 Wednesday 17 September 2014: fixed some typos.
Bug trackers are not the right tool to deal with usability problems. Just imagine how many usability bugs it would need, to get from a Nokia 6070 to the first iPhone.
There is a third (unproven, but likely) option:
3) Bribe the officials to starve to project to dead. Wait until valid complaints from the users come in.
Clues for this (but of course this does not prove anything):
version 4 available from August 2011 is based on Ubuntu 10.04 LTS, although using KDE Desktop 3.5 and version 4.1 available from August 2012 is also based on Ubuntu 10.04 LTS
(Source: wikipedia page about LiMux). Especially the desktop environment is really old, first published around 2002 if I remember correctly.
Correction: An earlier version of this story reported that the study was funded in part by the James S. McDonnell Foundation and the Army Research Office. In fact, the study received no external funding.
Which kinds of dependencies do you track?
Out of my head I can think of run-time libraries, compile time libraries, compile time tools (code generator, etc.), test libraries, test tools (e.g. dummy applications).
Are you tracking any others?
Simple. Build a "bug" into the SATA controller. When a block that should be written to disc fulfills certain criteria, simple write it to a different location according to the content of the block. Now you have a way to modify arbitrary content on disc. You can trigger this bug from remote by embedding content to a web page that riggers this "bug". When the browser on a vulnerable system tries to write this content as a file to the cache folder, it will overwrite some other parts on the disc instead (e.g. the boot sector or parts of the operating system). This can be improved on SSDs, which even analyze the fiel systems stored on them for optimization reasons. Similar bugs might be possible using the graphics chip (access to the PCI-X bus and the RAM), the chipset on the mainboard (access to all connected hardware), the USB controller (access to the PCI bus, the RAM and to connected hardware like an USB disc or a camera) and so on.
Should't Win+X bring up the mobility center? Or where is the mobility center then on Win 8?
Here the missing link, slashdot has eaten: https://www.google.de/search?safe=off&client=safari&hl=de&biw=768&bih=928&tbm=isch&sa=1&ei=o0-aUeKYGYTP4QSS14GQBQ&q=wago+federklemme&oq=wago+federklemme&gs_l=img.3..0i24.4551.8163.0.8930.3.3.0.0.0.0.236.498.0j2j1.3.0...0.0...1c.1.14.img.O-56byaxP3s
We have very sophisticated wire connectors here in the EU. You can see several examples here. Stew terminals are in fact in most cases not allowed any more in the EU (see here for more details)
I think you mean LaTeXiT.
The trick with the PDF is made using Link Back. This is a framework for OS X, where applications can embed documents from other applications in their own documents. The embedded documents are still editable by the original application. It's similar to OLE on Windows, but much more lightweight. It's mainly based on PDF with some additional metadata. It's easy to implement and very nice for the user. I find it a quite elegant solution.
[...] The number of pixels required to measure a point will change with dpi but the size of the font shouldn't.
I think what he meant was: They might reduce the size of the fonts. On a sharper display, a 10 point font might be as readable as a 12 point font on a not so sharp display.
Of course it will work fine for US citicens during their vaccation in Germany, because once you have registered no further filtering will happen (for now).
They use JFS on debian.. You can easily add the filesever software of your choice (Samba, Netatalk, NFS, etc.)
On the hardware side they use a Intel mainboard with a Intel Core 2 CPU, a PCIe SATA 2 Controller and 45 SATA 2 discs (each 1.5 TB). They put it in a custom enclosure, the 3D model is available here (25 MB ZIP archive). This all costs less than 8000€ for 67 TB (discs included!).
There is also an update, where they get 135 TB for less than $8000. In this model they still use Debian, but as a filesystem they run ext4 on LVM with RAID 6.
Coming from a Scala developer, that is strange. The only annoyance I can think of that Scala has and C#/.NET doesn't is non-reified generics with all that entails (inability to implement two interfaces different only in generic type parameters, inability to do an instanceof-check for a particular specialization of a generic, no support for "new T" or "new T[]" etc). It may be a big one, but Scala has many other features to compensate, IMO.
Implicit classes are a nice feature. They are part of LINQ.
Aditionally C# is the standard language of .NET, Scala is only a niche language on the Java paltform. So most .NET library support all the neat C# fatures. On the othe side only very few Java libraries have special Scala support. Of course you can still use them with Scala, but you have to abandon most Scala faeutres (e.g. closures).
Why would you want a statically typed language as a scripting language?
Because it's a statically typed language that can be used like a dynmically typed. You don't write types anywhere and the compiler adds them for you. So you will get type errors on compile time eithout having to write the types explicitely down.
You can just write "var i=...". When the compiler compiles your code, it will find out the real type of "i" and replace "var" through that type. So it can typecheck your code, but you can just behave as if you were in a weakly typed script language.
You already know them from Python. You don't have them in Java.
These are funtion pointers done right. They are very handy for callbacks, e.g. for UI programming.
The language allows very deep static analysis. So it supports refactoring and statical error checking. Java has the similar features. Python is more limited regarding this.
You can define a class partial in source code and partial in compiled code. This allows a controlled mix of generated and hand written code without nasty hacks. Very handy for UI programming or in the enterprise where code generation is still the norm.
I am a Java/Scala developer. But from time to time I envy the .NET developers. Beside politics, C# could be the standard scription langauge for Unix, better than Perl or Bash. With Mono there is even a scripting frontend for C#.
But the drive in question does not rely on this standard but tries to interpret the file system it holds. It then tries to detect deleted files and resets all data belonging to these files. If it guesses right, you only loose data belonging to deleted files. If it guesses wron it resets blocks holdign data you still need.
There are severaly situations where this can lead to problems: Some DRM schemes store data outside of the control of the filesystem. Microsoft might update NTFS so the interpretation of the filesystem changes and the drive deletes the wrong blocks. Some people use other filesystems than NTFS, hence confuse the drive and loose data. Some people encrypt their file system, leading the drive to try to inteprete the seemingly "random" data and randomly nuking blocks. And so on.
It does not help that this feature is completely undocumented, so you don't know if and how your drive tries to interpret the filesystem. Good luck with fixing errors related to this.
[...]Does this mean that the drives understand NTFS and are actually zeroing out data on the drive when the OS simply deletes the entry from the FAT table? [...]
Yes, it means exactly that. When the drive detects, that the OS running supports TRIM commands, it relies on that. If it detects that there are the OS does not support TRIM commands, it tries to interpret the filesystem to detect which blocks belong to deleted files. It then brings these blocks back to a prisine state to make them faster writable. During this process all data on the block is cleared. When you bring back the file using an undelete tool or access the according blocks directly (e.g. using a sector editor), you will only get blocks with zeroes.
Or to phare it in another way: When you set some bits in certain blocks to zero, the drive will find it safe to wipe some other blocks on the drive, without being told so by the OS. If your file system in NTFS with the right version, this assumption is true. If you use a different file system, this might not be the case. The details are unknown because the firmware is closed source.
You can find the details in the paper (PDF) cited in the fine article.