Why? He's got the name recognition, but he wasn't the first to develop an open source kernel. The UCB team had been doing that before and so had the FSF (although with less success). He was the first to release an open source UNIX kernel for i386, but only by a few months. I may be wrong, but I believe OpenBSD was first to use a public CVS repository, rather than exchanging diffs on a mailing list.
This award feels like pandering. He gets the award for being the figure who is well known for doing things that lots of other people were doing.
download files without notification: dictionary updates
Could be bundled as part of the application, updated via the normal mechanism, without requiring it to have a permission that allows it to send data remotely ('download' can mean an HTTP GET with a really long query).
read contacts: suggestions
Most of the time, I'm not typing a contact's name so this sounds like it would lead to a lot of false positives. I've never seen it suggest a name that isn't a common English name though, so it doesn't seem to actually need this.
modify or delete contents of USB storage: I don't know why it needs this one, store dictionary outside private app directory?
If that is the case, it's bad design.
view accounts on the device: suggest your email address
Seriously people, think about it, giving your services away for free makes no sense.
Since when does open source mean giving away my services? I get paid quite well to write open source software. My service is writing code, not copying code. I'm happy for people to copy the code for free, because copying it doesn't require any effort on my part. Having a body of open source code available expands my potential set of customers quite a lot, because a lot more companies can afford to pay for a single feature to be added to an open source codebase than can afford to pay for something to be written from scratch that has that feature.
Or are you seriously arguing that the model that makes the most economic sense is to write software for free but charge people for copying it?
I think the meme here is 'obvious troll is obvious'. Open source doesn't mean that the software is free, it means that copying the software is free. Writing it in the first place, fixing bugs, and adding features are all things that someone has to be paid to do (although sometimes people will do it simply in exchange for being able to use the resulting combined work, effectively doing it for free because it's something they need or want).
The problem in the case of OpenSSL is that everyone needs bug fixes and security auditing, but no one was making a coherent effort to sell such a service.
The Google Keyboard for Android sends what you're typing to Google servers 'to improve suggestions,' so I don't think that asking for your location a lot is the worst invasion of privacy of a mainstream on-screen keyboard app. The AOSP keyboard also requires a phenomenal list of permissions, including the ability to download files without notification, read contacts, modify or delete contents of USB storage and view accounts on the device. No idea why it needs all of these things - I wouldn't mind so much if it had access to all of my data for improving predictions if it didn't also have the ability to make network connections.
A workstation ought to switch from suspend to RAM to suspend to disk when it receives a signal from your UPS that mains power has been lost.
If you're putting your business in a building where power is sufficiently unreliable that it's worth the cost to have a UPS for every workstation, then you're probably doing something badly wrong. On a server, where downtime can cost serious money, it can be worth it. On a workstation, the extra cost for something that happens once every few years in a country that has vaguely modern infrastructure simply isn't worth it most of the time. The extra writes to the SSD from having to suspend to disk once every few years as a result of power failure are in the noise.
And often it isn't. Satellite and cellular Internet service providers in the United States tend to charge on the order of 1/2 cent to 1 cent per megabyte of transfer
Satellite internet connections don't qualify as 'often' - they're a statistically insignificant amount of the userbase. Mobile connections are, but:
If you've downloaded a 100 MB document from the network, it would cost the end user $0.50 to $1.00 to retrieve it again
We're talking about browser in-memory caches here. A 100MB document will be saved to disk or opened by another application when it's downloaded. It won't sit in the browser's cache.
And this is because when a workstation (a laptop or desktop) hibernates, it writes all allocated RAM to the swap file
Not really, this policy predates hibernation by about three decades. It's so that swapping never needs to allocate new data structures when the machine is already in a memory-constrained state.
This can be as large as RAM, though for speed, it may be smaller in operating systems that store some of their swap file in a compressed RAM disk (such as RAM Doubler on classic Mac OS or zram on Linux). But an operating system still has to provide for the worst case of memory that can't be compressed.
When Linux is using zram, it doesn't follow this policy (actually, Linux doesn't in general). It's impossible to do so sensibly if you're using compression, because you don't know exactly how much space is going to be needed until you start swapping. RAM compression generally works by the same mechanisms as the swap pager, but putting pages that compress well into wired RAM rather than on disk. You can also often compress swap, but that's an unrelated mechanism.
Until you actually use hibernation. How often does that happen on a particular work day?
Generally, never. OS X does 'safe sleep', where it only bothers writing out the contents of RAM to disk when battery gets low, so my laptop never hibernates unless I leave it unplugged for a long time. My servers don't sleep, because if you've got a server that's so idle it would make sense for it to hibernate then it's better to just turn it off completely. My workstation doesn't hibernate, because the difference in power consumption between suspend to RAM and suspend to disk is so minimal that it's not worth the extra inconvenience.
Some of RAM is used as a cache for the file system, but operating systems should be smart enough to purge this disk cache when hibernating.
Most post-mid-'90s operating systems use a unified buffer cache, so there's no difference between pages that are backed by swap and pages that are backed by other filesystem objects. Indeed, allocating swap when you allocate a page made this even easier, which is why this policy stayed around for so long: you could get away with just having a single pager that would send things back to disk without ever having to allocate on-disk storage for them or care about whether the underlying disk object was a swap file or a regular file.
Applications, on the other hand, might not be so smart. Ideally an operating system could send "memory pressure" events to processes, causing them to purge their own caches and rewrite deallocated memory with zeroes so that it can be compressed. The OS would broadcast such an event before hibernation or any other sort of heavy swapping. Do both POSIX and Windows support this sort of event?
POSIX doesn't. Windows has something like this, as does XNU. Mach had it originally, as it delegated swapping entirely to userspace pagers and allowed applications to control their own swapping policies. It's not really related to hibernation, but to memory pressure in general. It's often cheaper to recalculate data or refetch it from the network than swap it out and back in again, so it makes sense, for example, to have the web browser purge its caches when you get low on RAM, because it's likely almost as fast to re-fetch things from the network than get them from disk. On a mobile device, with no swap, it's better to let the applications reduce RAM footprint than to pick one to kill. This works best with languages that support GC, as they can use this event to trigger collection.
The problem with the $50K commercial solution is that they want you to pay $50K next year too. If their software does what you want already, then that's a hard sell, so typically they persuade you by adding new features. For something like OpenSSL, new features mean new ways of introducing vulnerabilities, so are often the last thing you want.
I've got a 1TB SSD in my laptop. It cost about as much as the 256GB SSD in the laptop it replaced, bought two years earlier (shorter than my normal upgrade cycle, but work bought this one). You can pick them up for around £300, which is more expensive than a hard disk, but not by much - about a factor of five, which is half the difference a couple of years ago. I still have the laptop before that, and even with a processor a few generations older it's still disk-speed limited in a lot of cases, whereas this one rarely is, so it's definitely worth it. That said, my NAS has 2 2TB spinning rust disks and I'm looking at replacing them with 4TB ones. I'd love to replace them with SSDs, but it's not yet worth the cost. I am tempted by a smaller eSATA SSD to use for L2 ARC and ZIL though...
Just because it uses a swap file doesn't mean it ever writes to it. A lot of operating systems have historically had the policy that every page that is allocated to a process must have some backing store for swapping it to allocated at the same time. If you have enough RAM, however, this most likely won't ever be touched. If you're actually writing out 100GB/day to swap then you should probably consider buying some more RAM...
You're assuming that you'd want to create a full tape's worth of backups. If you're generating 1.4TB/hour of data, then you might have this problem. If you're only generating a few GB/day then it's quite easy for your weekly backup to run in under an hour and just append to the tape. Periodically you swap over to a new tape.
I've just looked. I can get Quantum MR-L5MQN-01 LTO-5 tapes with a native (uncompressed) capacity for about £20. The sweet spot for disks right now seems to be 3TB at about £80, so that's twice as expensive per TB, but only if you don't include the tape drive. An LTO-5 drive costs about £1,300. To save that much I'd need to be using about 100TB of storage, which is a fairly small filer for a business, but an insane amount for a home user. Shopping around a bit, I can find some LTO-5 drives for about £800, which brings it down to closer to 50TB, but still far more than I need to back up.
Of course, if I were backing up that much, then I wouldn't want a single drive, I'd want a tape library. And once they're out of the library, tapes are a lot more durable.
On x86, you can (now) use the x32 ABI to get the same effect. The problem comes when you need to run one or two 64-bit binaries. Now they are pulling in a different libc and so on and the extra i-cache churn from multiple copies of the same library can quickly offset the reduced d-cache churn from smaller pointers (main memory usage is largely irrelevant: it's rarely a bottleneck and the average 5-10% saving from reduced pointer size is in the noise).
Especially anything that used threads. Going from a strongly ordered x86, where basically anything is sequentially consistent for free, to the extremely weakly ordered Alpha, where things are only visible between threads with explicit barriers breaks a lot of stuff where people only tested on x86. ARM has a similar problem.
Pretty much all 64-bit systems have used 64-bit time_t forever, so the Y2038 problem is only an issue if people are still using 32-bit platforms in 24 years. Given that even ARM is now 64-bit, that seems quite unlikely (none of those old mainframes that were a problem for Y2K have this problem and most databases use 64-bit time values because people care about dates further in the past than can be expressed with a 32-bit UNIX time_t). Of course, Google has just released a new Java implementation for Android that does a load of void* to int32_t casts all over the place and is going to be almost a total rewrite to port to a 64-bit architecture, so you can't always trust big software companies not to be complete idiots...
Not true. It would have done if OpenSSL hadn't used a custom allocator, but the use of the custom allocator bypassed the policy in OpenBSD's malloc() that aggressively returns unused pages to the OS and causes this kind of fault. And why does OpenSSL have this custom allocator? Because without it people complain that malloc() implementations like the one in OpenBSD are too slow...
FFS2 is basically the original Berkeley FFS (also known as UFS, but there are at least half a dozen incompatible filesystems called UFS, so that just gets confusing) with some extensions. It basically just increases the size of various fields in the inode data structure so that various limits are much larger. I'm not familiar with the OpenBSD implementation, but on FreeBSD it also supports soft updates (where metadata and data writes are sequenced so that the filesystem is aways consistent, although fsck may be required to clean up) and journalling. Aside from that, it's a fairly conventional inode-based FS. If you want snapshots, FreeBSD provides them at the block layer via GEOM (I don't know what the OpenBSD equivalent is).
In contrast, ZFS rearranges all of the layering. At the lowest level, you have a set of physical devices that are combined into a single virtual device. On top of this is a layer that's responsible for storing objects and providing a transactional copy-on-right interface to the underlying storage. On top of this, you layer something that looks like a POSIX filesystem, or something that looks like a block device (or, in theory, something that looks like an SQL database or whatever).
For the user, this means that a load of things are easy with ZFS that are hard with UFS:
Creating snapshots with ZFS is a O(1) operation.
Creating new filesystems with ZFS is about has hard as creating directories.
Filesystems all have block-level checksums, can have multiple copies of files (if they're used for important stuff) on a single volume.
Compression and deduplication can be enabled on a per-filesystem basis. With UFS, there's no deduplication (although it would be possible to write a block-level dedup implementation for GEOM), and compression is handled at the block device layer.
You can delegate the rights to create and modify filesystem properties into jails safely with ZFS (not relevant to OpenBSD, as it lacks jails).
Emigration to space never makes sense once you do the maths. The escape velocity of Earth is 11.2 kilometers per second. Assume that a human is around 100kg, the energy required to accelerate the human to escape velocity (assuming 100% efficient propulsion and no support equipment required) is around 6.2GJ, or 1.7MWh to put it into a more consumer-friendly terms. The average American (to pick the country with the highest per-capita energy consumption) uses around 87kWh per year, so the cost of getting a human away from Earth, assuming perfect conditions, is around 20 times their energy consumption living on Earth for a year. Even assuming a space elevator and the most optimistic efficiency numbers, getting into space for less than your lifetime total energy consumption on the ground is difficult.
And that's just the economic argument. The population growth rate is currently sitting at about 1% per annum. That means about 70 million more people are born every year than die. For exporting people into space to be feasible for reducing the population, you need to ship 70 million people into space per year, or around 200,000 per day. That's in the same ballpark as the total number of air passengers today, including short-haul flights.
Combining these two, the total energy cost is 340GWh (1.24PJ) per day, or 126TWh (450PJ) per year. To put that in perspective, the total energy consumption of the world in 2008 was around 140,000TWh, so you're only talking about 1% of the total energy consumption of the world for your colonisation project - assuming theoretically impossible technology and that everyone goes naked. It typically takes a minimum of ten times as much mass for life support equipment as for passengers, so now you're up to 10%. Even optimistic efficiency numbers bump this closer to 50%. If you actually want them to go somewhere with enough equipment to do something vaguely like colonisation, then you're up to over 100% the total energy production of the world today and a throughput of 2-3 people boarding every second constantly, all day, all year round.
A more compelling argument is that having some self-sustaining colonies in space means that a global catastrophe won't kill all humans. We're still a long way away from being able to build one though, and it's not clear that investing in things like the ISS are actually taking us in that direction. Just as NASA likes to tout how spin-offs from space research have helped other industries, significant improvements in technology used in space have come from elsewhere.
There are two things that this can mean: Do they understand the concepts of indirection and aliasing, or do they understand the concept that memory is addressed by numbers? The former is important to pretty much any programming problem, but can be taught in any language that has references (including Ruby, Java, and so on). The latter is only really important to people doing kernel or embedded programming.
You probably haven't seen truly bad C code then. Really bad C code tries to do C++ templates using the preprocessor, where you define a few macros variables and then include a file that recursively includes other files to a depth of four or more, eventually resulting in the code that you wanted. The one thing this has over C++ templates is that you can read the output of the preprocessor and look for the bugs. Good luck fixing them thouhg.
I disagree. It's very easy and intellectually lazy to say 'we should give the state the right to torture people to death, because look how bad this person is! Surely they'd only use it on someone that bad'. It's the same line of reasoning that says that the state should be granted warrantless wiretapping rights, because surely they'd only use them to go after terrorists. And maybe pedophiles.
If you're not okay with the state having a license to torture, then it doesn't matter how bad the person they're torturing is. If you are... then I hope I don't live somewhere where you're allowed to vote.
In that case, amend your constitution to say that it's fine to torture criminals once they've been convicted. If you're going to pretend to have the rule of law, then at least make a token effort to follow your own rules.
Why? He's got the name recognition, but he wasn't the first to develop an open source kernel. The UCB team had been doing that before and so had the FSF (although with less success). He was the first to release an open source UNIX kernel for i386, but only by a few months. I may be wrong, but I believe OpenBSD was first to use a public CVS repository, rather than exchanging diffs on a mailing list.
This award feels like pandering. He gets the award for being the figure who is well known for doing things that lots of other people were doing.
download files without notification: dictionary updates
Could be bundled as part of the application, updated via the normal mechanism, without requiring it to have a permission that allows it to send data remotely ('download' can mean an HTTP GET with a really long query).
read contacts: suggestions
Most of the time, I'm not typing a contact's name so this sounds like it would lead to a lot of false positives. I've never seen it suggest a name that isn't a common English name though, so it doesn't seem to actually need this.
modify or delete contents of USB storage: I don't know why it needs this one, store dictionary outside private app directory?
If that is the case, it's bad design.
view accounts on the device: suggest your email address
It doesn't seem to ever do that for me...
Seriously people, think about it, giving your services away for free makes no sense.
Since when does open source mean giving away my services? I get paid quite well to write open source software. My service is writing code, not copying code. I'm happy for people to copy the code for free, because copying it doesn't require any effort on my part. Having a body of open source code available expands my potential set of customers quite a lot, because a lot more companies can afford to pay for a single feature to be added to an open source codebase than can afford to pay for something to be written from scratch that has that feature.
Or are you seriously arguing that the model that makes the most economic sense is to write software for free but charge people for copying it?
I think the meme here is 'obvious troll is obvious'. Open source doesn't mean that the software is free, it means that copying the software is free. Writing it in the first place, fixing bugs, and adding features are all things that someone has to be paid to do (although sometimes people will do it simply in exchange for being able to use the resulting combined work, effectively doing it for free because it's something they need or want).
The problem in the case of OpenSSL is that everyone needs bug fixes and security auditing, but no one was making a coherent effort to sell such a service.
The Google Keyboard for Android sends what you're typing to Google servers 'to improve suggestions,' so I don't think that asking for your location a lot is the worst invasion of privacy of a mainstream on-screen keyboard app. The AOSP keyboard also requires a phenomenal list of permissions, including the ability to download files without notification, read contacts, modify or delete contents of USB storage and view accounts on the device. No idea why it needs all of these things - I wouldn't mind so much if it had access to all of my data for improving predictions if it didn't also have the ability to make network connections.
A workstation ought to switch from suspend to RAM to suspend to disk when it receives a signal from your UPS that mains power has been lost.
If you're putting your business in a building where power is sufficiently unreliable that it's worth the cost to have a UPS for every workstation, then you're probably doing something badly wrong. On a server, where downtime can cost serious money, it can be worth it. On a workstation, the extra cost for something that happens once every few years in a country that has vaguely modern infrastructure simply isn't worth it most of the time. The extra writes to the SSD from having to suspend to disk once every few years as a result of power failure are in the noise.
And often it isn't. Satellite and cellular Internet service providers in the United States tend to charge on the order of 1/2 cent to 1 cent per megabyte of transfer
Satellite internet connections don't qualify as 'often' - they're a statistically insignificant amount of the userbase. Mobile connections are, but:
If you've downloaded a 100 MB document from the network, it would cost the end user $0.50 to $1.00 to retrieve it again
We're talking about browser in-memory caches here. A 100MB document will be saved to disk or opened by another application when it's downloaded. It won't sit in the browser's cache.
And this is because when a workstation (a laptop or desktop) hibernates, it writes all allocated RAM to the swap file
Not really, this policy predates hibernation by about three decades. It's so that swapping never needs to allocate new data structures when the machine is already in a memory-constrained state.
This can be as large as RAM, though for speed, it may be smaller in operating systems that store some of their swap file in a compressed RAM disk (such as RAM Doubler on classic Mac OS or zram on Linux). But an operating system still has to provide for the worst case of memory that can't be compressed.
When Linux is using zram, it doesn't follow this policy (actually, Linux doesn't in general). It's impossible to do so sensibly if you're using compression, because you don't know exactly how much space is going to be needed until you start swapping. RAM compression generally works by the same mechanisms as the swap pager, but putting pages that compress well into wired RAM rather than on disk. You can also often compress swap, but that's an unrelated mechanism.
Until you actually use hibernation. How often does that happen on a particular work day?
Generally, never. OS X does 'safe sleep', where it only bothers writing out the contents of RAM to disk when battery gets low, so my laptop never hibernates unless I leave it unplugged for a long time. My servers don't sleep, because if you've got a server that's so idle it would make sense for it to hibernate then it's better to just turn it off completely. My workstation doesn't hibernate, because the difference in power consumption between suspend to RAM and suspend to disk is so minimal that it's not worth the extra inconvenience.
Some of RAM is used as a cache for the file system, but operating systems should be smart enough to purge this disk cache when hibernating.
Most post-mid-'90s operating systems use a unified buffer cache, so there's no difference between pages that are backed by swap and pages that are backed by other filesystem objects. Indeed, allocating swap when you allocate a page made this even easier, which is why this policy stayed around for so long: you could get away with just having a single pager that would send things back to disk without ever having to allocate on-disk storage for them or care about whether the underlying disk object was a swap file or a regular file.
Applications, on the other hand, might not be so smart. Ideally an operating system could send "memory pressure" events to processes, causing them to purge their own caches and rewrite deallocated memory with zeroes so that it can be compressed. The OS would broadcast such an event before hibernation or any other sort of heavy swapping. Do both POSIX and Windows support this sort of event?
POSIX doesn't. Windows has something like this, as does XNU. Mach had it originally, as it delegated swapping entirely to userspace pagers and allowed applications to control their own swapping policies. It's not really related to hibernation, but to memory pressure in general. It's often cheaper to recalculate data or refetch it from the network than swap it out and back in again, so it makes sense, for example, to have the web browser purge its caches when you get low on RAM, because it's likely almost as fast to re-fetch things from the network than get them from disk. On a mobile device, with no swap, it's better to let the applications reduce RAM footprint than to pick one to kill. This works best with languages that support GC, as they can use this event to trigger collection.
The problem with the $50K commercial solution is that they want you to pay $50K next year too. If their software does what you want already, then that's a hard sell, so typically they persuade you by adding new features. For something like OpenSSL, new features mean new ways of introducing vulnerabilities, so are often the last thing you want.
I've got a 1TB SSD in my laptop. It cost about as much as the 256GB SSD in the laptop it replaced, bought two years earlier (shorter than my normal upgrade cycle, but work bought this one). You can pick them up for around £300, which is more expensive than a hard disk, but not by much - about a factor of five, which is half the difference a couple of years ago. I still have the laptop before that, and even with a processor a few generations older it's still disk-speed limited in a lot of cases, whereas this one rarely is, so it's definitely worth it. That said, my NAS has 2 2TB spinning rust disks and I'm looking at replacing them with 4TB ones. I'd love to replace them with SSDs, but it's not yet worth the cost. I am tempted by a smaller eSATA SSD to use for L2 ARC and ZIL though...
Just because it uses a swap file doesn't mean it ever writes to it. A lot of operating systems have historically had the policy that every page that is allocated to a process must have some backing store for swapping it to allocated at the same time. If you have enough RAM, however, this most likely won't ever be touched. If you're actually writing out 100GB/day to swap then you should probably consider buying some more RAM...
You're assuming that you'd want to create a full tape's worth of backups. If you're generating 1.4TB/hour of data, then you might have this problem. If you're only generating a few GB/day then it's quite easy for your weekly backup to run in under an hour and just append to the tape. Periodically you swap over to a new tape.
I've just looked. I can get Quantum MR-L5MQN-01 LTO-5 tapes with a native (uncompressed) capacity for about £20. The sweet spot for disks right now seems to be 3TB at about £80, so that's twice as expensive per TB, but only if you don't include the tape drive. An LTO-5 drive costs about £1,300. To save that much I'd need to be using about 100TB of storage, which is a fairly small filer for a business, but an insane amount for a home user. Shopping around a bit, I can find some LTO-5 drives for about £800, which brings it down to closer to 50TB, but still far more than I need to back up.
Of course, if I were backing up that much, then I wouldn't want a single drive, I'd want a tape library. And once they're out of the library, tapes are a lot more durable.
On x86, you can (now) use the x32 ABI to get the same effect. The problem comes when you need to run one or two 64-bit binaries. Now they are pulling in a different libc and so on and the extra i-cache churn from multiple copies of the same library can quickly offset the reduced d-cache churn from smaller pointers (main memory usage is largely irrelevant: it's rarely a bottleneck and the average 5-10% saving from reduced pointer size is in the noise).
Especially anything that used threads. Going from a strongly ordered x86, where basically anything is sequentially consistent for free, to the extremely weakly ordered Alpha, where things are only visible between threads with explicit barriers breaks a lot of stuff where people only tested on x86. ARM has a similar problem.
Pretty much all 64-bit systems have used 64-bit time_t forever, so the Y2038 problem is only an issue if people are still using 32-bit platforms in 24 years. Given that even ARM is now 64-bit, that seems quite unlikely (none of those old mainframes that were a problem for Y2K have this problem and most databases use 64-bit time values because people care about dates further in the past than can be expressed with a 32-bit UNIX time_t). Of course, Google has just released a new Java implementation for Android that does a load of void* to int32_t casts all over the place and is going to be almost a total rewrite to port to a 64-bit architecture, so you can't always trust big software companies not to be complete idiots...
Not true. It would have done if OpenSSL hadn't used a custom allocator, but the use of the custom allocator bypassed the policy in OpenBSD's malloc() that aggressively returns unused pages to the OS and causes this kind of fault. And why does OpenSSL have this custom allocator? Because without it people complain that malloc() implementations like the one in OpenBSD are too slow...
FFS2 is basically the original Berkeley FFS (also known as UFS, but there are at least half a dozen incompatible filesystems called UFS, so that just gets confusing) with some extensions. It basically just increases the size of various fields in the inode data structure so that various limits are much larger. I'm not familiar with the OpenBSD implementation, but on FreeBSD it also supports soft updates (where metadata and data writes are sequenced so that the filesystem is aways consistent, although fsck may be required to clean up) and journalling. Aside from that, it's a fairly conventional inode-based FS. If you want snapshots, FreeBSD provides them at the block layer via GEOM (I don't know what the OpenBSD equivalent is).
In contrast, ZFS rearranges all of the layering. At the lowest level, you have a set of physical devices that are combined into a single virtual device. On top of this is a layer that's responsible for storing objects and providing a transactional copy-on-right interface to the underlying storage. On top of this, you layer something that looks like a POSIX filesystem, or something that looks like a block device (or, in theory, something that looks like an SQL database or whatever).
For the user, this means that a load of things are easy with ZFS that are hard with UFS:
Emigration to space never makes sense once you do the maths. The escape velocity of Earth is 11.2 kilometers per second. Assume that a human is around 100kg, the energy required to accelerate the human to escape velocity (assuming 100% efficient propulsion and no support equipment required) is around 6.2GJ, or 1.7MWh to put it into a more consumer-friendly terms. The average American (to pick the country with the highest per-capita energy consumption) uses around 87kWh per year, so the cost of getting a human away from Earth, assuming perfect conditions, is around 20 times their energy consumption living on Earth for a year. Even assuming a space elevator and the most optimistic efficiency numbers, getting into space for less than your lifetime total energy consumption on the ground is difficult.
And that's just the economic argument. The population growth rate is currently sitting at about 1% per annum. That means about 70 million more people are born every year than die. For exporting people into space to be feasible for reducing the population, you need to ship 70 million people into space per year, or around 200,000 per day. That's in the same ballpark as the total number of air passengers today, including short-haul flights.
Combining these two, the total energy cost is 340GWh (1.24PJ) per day, or 126TWh (450PJ) per year. To put that in perspective, the total energy consumption of the world in 2008 was around 140,000TWh, so you're only talking about 1% of the total energy consumption of the world for your colonisation project - assuming theoretically impossible technology and that everyone goes naked. It typically takes a minimum of ten times as much mass for life support equipment as for passengers, so now you're up to 10%. Even optimistic efficiency numbers bump this closer to 50%. If you actually want them to go somewhere with enough equipment to do something vaguely like colonisation, then you're up to over 100% the total energy production of the world today and a throughput of 2-3 people boarding every second constantly, all day, all year round.
A more compelling argument is that having some self-sustaining colonies in space means that a global catastrophe won't kill all humans. We're still a long way away from being able to build one though, and it's not clear that investing in things like the ISS are actually taking us in that direction. Just as NASA likes to tout how spin-offs from space research have helped other industries, significant improvements in technology used in space have come from elsewhere.
It took over two weeks to prove to him that SQL could store the data without errors.
How can a query language store data? A database that you talk to via SQL might be able to, but the language itself? Not so much.
kids who don't understand pointers
There are two things that this can mean: Do they understand the concepts of indirection and aliasing, or do they understand the concept that memory is addressed by numbers? The former is important to pretty much any programming problem, but can be taught in any language that has references (including Ruby, Java, and so on). The latter is only really important to people doing kernel or embedded programming.
You probably haven't seen truly bad C code then. Really bad C code tries to do C++ templates using the preprocessor, where you define a few macros variables and then include a file that recursively includes other files to a depth of four or more, eventually resulting in the code that you wanted. The one thing this has over C++ templates is that you can read the output of the preprocessor and look for the bugs. Good luck fixing them thouhg.
I disagree. It's very easy and intellectually lazy to say 'we should give the state the right to torture people to death, because look how bad this person is! Surely they'd only use it on someone that bad'. It's the same line of reasoning that says that the state should be granted warrantless wiretapping rights, because surely they'd only use them to go after terrorists. And maybe pedophiles.
If you're not okay with the state having a license to torture, then it doesn't matter how bad the person they're torturing is. If you are... then I hope I don't live somewhere where you're allowed to vote.
In that case, amend your constitution to say that it's fine to torture criminals once they've been convicted. If you're going to pretend to have the rule of law, then at least make a token effort to follow your own rules.
Well, that's okay then. As long as you only violate due process when the mob thinks the guy really, really deserves it then there's no problem.
How closely have you been looking? I've seen a few, and I assumed most of them were Android tablets at first glance.