This is actually something I'm thinking about from a language design perspective. Computer languages are great and explaining what you want to do, but are not expressive enough to explain why you want to do that. Tests often help a great deal. You can write a comment that says, "This is -1 here because my array starts from zero". But you can also write a test that shows that the array begins at zero and the indexing is correct. For me the second is preferred for a number of reasons. The first is that it is a runnable comment. If the assumption changes, the test will fail.
The second reason is a little more abstract. I find that a human language comment kicks me out of thinking in the programming language. It's hard enough to actually think that way to begin with since code is not easily pronounceable (another thing I would like to see improved). When you are code switching between the two, it reduces your fluency (IMHO).
Ideally, I'd like to see programming language constructs that can describe things like architecture. For instance, it can say that it is an interpreter pattern and these are the other classes that work with it. This is not runnable code, but it's useful information and can be checked in tests to ensure that it is correct. I think this would go a long way to improving readability of code.
A bit off topic, but you triggered something I've been thinking about for a couple of years. That "spark" is fluency.
I swtiched jobs from being a computer programmer to being an ESL teacher in Japan. Japan is somewhat famous for churning out students who know a lot *about* English, but can't order a drink at Mac Donald's. We used to have a name for those kinds of people with regard to programming languages: language laywers. They can answer any question you put to them *about* a programming language, but couldn't program to save their life. These people often make it past job interviews easily, but then turn out to be huge disappointments when they actually get down to work. I've read a lot about this problem, but the more I look at it, the more I realise that these disabled programmers are just like my students. They have a vocabulary of 5000 words, know every grammar rule in the book but just can't speak.
My current theory is that programming is quite literally writing. The vast majority of programming is not conceptually difficult (contrary to what a lot of people would have you believe). We only make it difficult because we suck at writing. The vast majority of programmers aren't fluent, and don't even have a desire to be fluent. They don't read other people's code. They don't recognise or use idioms. They don't think *in the programming language*. Most code sucks because we have the fluency equivalent of 3 year olds trying to write a novel. And so our programs are needlessly complex.
Those programmers with a "spark" are programmers who have an innate talent for the language. Or they are people who have read and read and read code. Or both. We teach programming wrong. We teach it the way Japanese teachers have been teaching English. We teach about programming and expect that students will spontaneously learn to write from this collection of facts.
In language acquisition there is a hypothesis called the "Input Hypothesis". It states that *all* language acquisition comes from "comprehensible input". That is, if you hear or read language that you can understand based on what you already know and from context, you will acquire it. Explanation does not help you acquire language. I believe the same is true of programming. We should be immersing students in good code. We should be burying them in idiom after idiom after idiom, allowing them to acquire the ability to program without explanation.
But for her, 10 grand a year in tuition was worth it, because she didn't want to be a moron for the rest of her life. What kind of role model are you to your kids if you can't communicate well, don't understand history, can't appreciate literature and art? What kind of voter are you if you can't think critically, or if you don't understand politics and science? Can you manage your financial decisions without and understanding of math and business? Think about what a better neighbor, parent, and traveler you would be, if you could speak a foreign language.
Why do I need a university to learn these things? Fair enough if your friend just preferred taking classes to independent study, but you make seem as though anyone who doesn't go to university is a moron. You imply that the university is the font of knowledge without which you are doomed to a life of ignorance. How can we learn without the intellectual elite vetting our every educational experience? How can we determine right from wrong without an authority to define it for us? How can we think critically without someone to tell us if we've done it correctly?
No matter how you learn, education comes from within. A teacher tries to be helpful, but it is your own effort that frees you from ignorance. Understanding this is the difference between being a slave to your tuition and being a free person able to choose your own path.
I don't subscribe to either philosophy. I have 16 waking hours a day. I want to do something interesting with that time. If I didn't have a job, I wouldn't sit around watching Oprah all day. I would be "working" on something. The thing about a job is that I don't have to decide what to do. Other people *tell* me what they want. That's really cool. I *like* working with other people. I like it when I do something that other people appreciate. So I find it very helpful that they will tell me what they want (and give me money for doing it to boot).
I suppose you might cram this into "live to work", but I categorically reject the term "work". I'm just having fun. It's not about the job. It turns out I don't really care what I'm doing as long as it is challenging. What I care about most is the relationships I have with other people. Going to work isn't much different for me than going to a cafe to hang out with my friends. Except that the cafe is boring because there isn't anything to do except eat and gossip.
My contract is up next year and I've been thinking of starting my own business. But I keep thinking about how I would be working mostly alone and how I would have to decide everything that should be done. It sounds kind of lonely. In the end I may just keep working these so-called jobs. It's fun.
Everybody that I know that knows him personally (which I don't) calls him Richard. I've had a few brief email conversations with him and he didn't sign the emails at all. RMS is his login name. Back in the olden days (which, through the fog of memory, I think I may have been party to) programmers used to refer to each other by their login name. Many people (even me) used to sign their emails with their login name (which would have been the same as their email address). Back when "finger" was the way to check up on what people were doing, it was important to know people's login name.
I still use my normal login name (which isn't wrook, BTW) on a lot of forums and there are people who I've talked with for decades that don't know me by any other name. I've almost certainly referred to myself that way online. That doesn't mean that I use it in daily conversation.
What exactly are they protesting? I've seen people protesting here to close the Hamaoka power plant, but that's hardly a secret. The government even paid off Chuubu Denryouku to close it. It's been in all the news. But apart from that, no protests that I can see...
The IAEA has a report listing the deaths associated with the nuclear plant. There are 3 deaths. 2 workers were swept away by the Tsunami. A third worker died, but the cause isn't known (which is very strange). The IAEA states that his exposure to radiation was extremely low, so radiation is not considered to be the cause.
There have been no other deaths. The UN has released an opinion that there will be no deaths related to radiation released from this event. Or... I think that's what they said. They had a press conference and various news reports have quoted the chairman of the group differently. The group did not issue a press release as far as I can tell. But depending on the quote you look at he said that based on examining children and workers in the affected area, there will be no future health effects. OR he said that based on the data the have examined there will be no future health effects due the the radiation released to date. In any case, they will be coming to the region in the summer to do a study.
I'm replying to too many posts in this thread, but again I feel compelled to do it. I watched the TEPCO news reports on TV. I live in Japan and I speak Japanese. It's possible that I misunderstood some things because it is a technical subject and while I am fluent in Japanese, these things are difficult. But your account of the events do not mesh with my recollection at all. This is from memory, but I recall them originally claiming that a large portion of the core had been left exposed for 5 hours. At that point they said that the fuel was damaged and may have melted. However, they felt that the radiation measurements that they were collecting indicated that the core had not melted down completely, only the cladding had melted. Critically, they said that they couldn't tell for sure what the circumstance were without entering the building.
When the British scientist wrote indicating that he felt the core had melted, TEPCO responded very quickly (the same day IIRC). They admitted that it was a possibility that the core had melted. But they felt that the data also supported the case where only the cladding had melted. Without entering the building they couldn't determine which it was.
Like I said, I watched this on TV and I was not surprised in the least that the core had melted down. They said several times that it was a possibility. On the news, when they were planning on entering #1 they headlined it with saying something to the effect, "They will enter the building and hopefully finally be able to tell whether the core has melted or not".
What's frustrating for me is that the foreign press do *not* report what TEPCO are saying. They report only half of it. Hey, I have never had any love for this company. I consider myself a rather extreme environmentalist. I don't have a car. I don't heat my house. I try to live a spartan life. These energy companies are the antithesis of what I believe in. But I really do find myself feeling bad for those guys lately.
For those of you relying only on the foreign press's reporting of what TEPCO are saying, I urge you to consider that you may be the victim of bad reporting/translation more than the victim of deceit.
They entered the building and took readings more directly. They still don't know everything. For instance, they think the fuel has melted and puddled at the bottom of the reactor, but they don't know. If it is all at the bottom of the reactor, then it is covered with water (a good thing). But if it didn't all melt, then some could still be exposed to the air. Again, it will take more time and more work to determine exactly what the situation is.
One of the frustrating things for me, watching from Japan is how badly TEPCOs announcements are being conveyed in the foreign press. Their Japanese statements are appropriately vague and indicate how they don't have all the information, and that they think things are one way, but that it could be another way. But then the bloody foreign press gets a hold of it and makes a dogs breakfast of it. Suddenly things are all "it is definitely X" and "it could not possibly be Y". The truth is, they don't know exactly what is going on because they can't see inside the reactor. As things cool down and as the radiation contamination is stemmed they will have more information. But this will take a very long time.
There are two things that are news here (albeit a little bit late). The first is the extent of the melting. There was always a question as to whether the fuel had melted or if only the cladding had melted. Early on a British scientist wrote an opinion that the data indicated that the fuel had melted completely. TEPCO responded saying that it was a possibility, but that the data could also support the situation where only the cladding had melted. When they finally were able to get inside the building of #1, they decided that the fuel had melted completely. Again, there was still a question if this was also true of #2 and #3. Just recently, they have decided that it was true of those two.
The second piece of news is that when they originally went inside #1, they thought that it might be the case that the containment was cracked in the original earthquake. The coolant would have escaped and the meltdown would have occurred within the first 5 hours. But recently, they have discounted that as a possibility, returning to their assumption that it was a loss of cooling ability which resulted in the meltdown.
How inter-operable is it with standard SIP? They have a long history of the 3Es.
Fairly. It's been a while since I played with their stuff, but it is pretty easy to make things work. They have some freaky things in there (or did), but so do a lot of people. SIP is a kind of nightmare where people are *encouraged* to extend it in new and unusual ways. Writing a SIP client/server is a bit challenging because everybody does everything differently. Occasionally a new spec is barfed out and then half the people move over to that. But this just makes your job harder because you now have all the old ways of doing things and then a whole bunch of broken interpretations of new ways of doing things. I honestly don't think it is possible for MS to make it worse. If they Embrace, Extend, and Extinguish it will actually help since it will cut down on the competing versions of everything. I think people would be astonished at the sheer number of SIP specs out there...
I'm not really sure what you are getting at. You copy and pasted a lot of stuff, but I don't know where you're going with it.
The current version of Compiz is (and has been for a very long time) Compiz Fusion. There is no stand-alone Compiz anymore, nor is there a stand-alone Berryl anymore. It's all incorporated into Compiz Fusion, which everyone refers to as Compiz. I suspect that's where our miscommunication is coming from. I'll try to refer to it as Compiz Fusion.
Compiz Fusion performs both compositing functions and window management functions. The compositing functions that Unity performs do *not* have to be done directly in Compiz Fusion. There is no problem using them outside of the compositing manager (but you still have to talk to it).
However, the window managing functions of Unity generally need to be done in the window manager or else you need to jump through a lot of hoops. That's why it makes sense to write Unity as a plugin for Compiz Fusion. This is a direct result of the design of X which only notifies the window manager when windows are appearing and disappearing. If you try to reference a window that doesn't exist in X, it actually crashes X. This creates a race condition where your window manager is notified that a window has been created and notifies your app. But before your app gets the message, the window is destroyed. The app tries to query the window (for title or whatever) and you crash X.
The thing is, I'm still confused what you think is going on. If you use the "classic" desktop, you are using Compiz Fusion, without the Unity plugin. But then you are also using gnome-panel, which is an enormous resource hog (definitely more than the Unity plugin). You are also using Gnome 2.X, which doesn't use Mutter. You *could* upgrade to Gnome 3 which has Gnome-Shell and Mutter as the compositing manager *and* the window manager (just like Compiz Fusion), but it's a completely different animal. Ubuntu is still on Gnome 2, not Gnome 3. They aren't comparable.
Perhaps you meant to say that you want to ditch Ubuntu altogether and use something that uses Gnome 3??? I'm not sure...
They don't have to change anything. If they are distributing the binary, they are responsible for also distributing the source code (possibly on request, but they have to supply a written offer to supply the source code in that case). Even if the upstream is supplying the source code freely, this does not absolve the distributor of the responsibility. I think this aspect of the GPL is confusing for some people and may be one of the reasons that the companies are not in compliance. It's possible that they merely need to be reminded what they should be doing. BTW, since I am at it, they only need to supply the source code to *their customers*. They don't have to make the code generally available.
In any case, I suspect that you are a bit confused anyway, because the UI skinning isn't happening at the kernel level. The UI code isn't covered by the GPL. This discussion is only focussing on kernel issues that are covered by the GPL. So a vendor may have to make some changes in order for the kernel to work properly with their hardware. It's important that customers get access to this code, because without it they can't create a working version of the kernel for their hardware (supposing they could load it in the first place... sigh...)
I thought the same thing at first too, although I haven't really worked with the code much other than to play with the SIP code. If, like me, your only view of the code is a 30K line file containing an ad-hoc parser you aren't left with too much confidence. But in fairness, the concepts that they talk about (channels, etc) are decent abstractions. I've worked in telephony long enough to know that there a *lot* of very poorly designed PBXs out there. While the implementation sometimes lacks in Asterisk, the deign and architecture elements that they describe are pretty sound.
This means that, since Google is redistributing my.apk, they are responsible for responding to requests for the GPL'd source code, NOT ME. Google can ask me for the source code, and I'll give them a copy, but since they are going to distribute the GPL'd code, the hosting of said GPL'd code for those they distribute to is Google's burden!
That's a good point, but i would suggest that google redistributing the unchanged binary is akin to any hosting provider redistributing the binaries you place on their servers.
I don't think this is the case. The app store doesn't give access to everyone. In some cases it charges for software. If you don't pay, you can't download the software. I think there's a strong case to be made that the app store is the one making the copy. It's not even like buying a router from a store with GPL software on it. We don't hold the store liable to redistribute the source code, but they aren't actually making a copy, so they aren't a party to the GPL. If the app store can be said to be making a copy, then they must be held responsible for making the source available.
There is already a precident for saying that even if the upstream party is making source available, it doesn't absolve you from the responsibility for making the source available if you distribute it (make a copy and give it to someone). At the very least, it seems to me that Google must make the written offer to provide the source code for GPL software.
However, the only one with standing to force Google to do this is the author of the software. And by virtue of the fact that they put the software in the app store to begin with, it seems that they are OK with the status quo. I find it very unlikely that anyone would put something into the app store and then complain that Google wasn't offering the source code. If Google were stripping the source code out of packages or something, that would be one thing. But they aren't.
Having said all that, it's a very interesting problem. It might be solved by Google simply requiring that all GPL software be distributed with source code in the apk. I suspect it's not something that anyone has really thought about.
The "hole punching" they describe is STUN. That's precisely how STUN works. But as is also mentioned in the article, it doesn't always work (the scenario I described above where the NAT router binds the port when it receives the first packet). The article goes on to explain that the "Skype Server" carries the traffic in that case. What it doesn't explain is that the "Skype Server" is often just any old machine that happens not to be behind NAT. These are called Skype Super Nodes. If you are interested there many, many explanations on how they work that you can find through Google.
The GPL specifies very clearly when the source code has to be released. The vendor has a few choices:
1) They can release the source code with the binary 2) They can accompany the binary with a written offer to supply the souce code on request for a period of not less than 2 years.
Generally, vendors tend to do the second, but I have a couple of devices where I was given a CD containing the source code along with the device. Free software projects usually provide the source code and binary download at the same time.
My understanding is that these vendors are neither supplying the source code with the binary nor accompanying the binary with a written offer for the source code. If that is true, then they are in violation of the GPL. The reason for requiring the source code at the same time as the binary is that offering the source code at some indefinite point in the future is useless. If I have a problem that requires the source code, waiting an indefinite amount of time doesn't help me.
The reason you want to run at least some parts of Unity as a plugin for the window manager is because there are race conditions in X such that only the window manager will be guaranteed to know when a window has appeared or disappeared the instant it happens. So, either you write the code in the window manager, or you have another mechanism to communicate to your program from the window manager. Or you jump through a whole bunch of hoops to stop your app from crashing when you think there is a window there when it isn't.
I'm not even sure why you think there is a difference between "native to Gnome" and "native to Compiz". I think you must be imagining a whole bunch of stuff that has no relation to reality...
But if it's full of cached images and icons so that the interface can be quicker and more responsive, well, isn't that why you have all that RAM?
A perfect program/OS would very quickly gobble up all available memory by storing and caching useful stuff...and then free it up the instant it was needed elsewhere.
The problem with filling up all your memory is that you don't know what the priority for memory use is. Is all that RAM on my system there to cache icons, or is it there to cache my database? As an application developer, you don't know how important your program is to the system compared to another program. As an OS developer, you similarly don't know. Chewing up all the available RAM so that one application is optimally fast, may be exactly the wrong thing to do if, as a user, I don't care about the speed of that application all that much.
RAM is a finite resource. Allocating and deallocating memory takes time. So even if we free up memory the instant we realize someone else wants it (pretty much impossible, but let's say we can do it), it will still take take. Swapping out to disk also takes time. Filling up all your memory pretty much guarantees that you will increase latency whenever you need to allocate memory (starting a new program, or changing between programs, etc, etc).
As an application developer, you should be aware of the impact of memory that you using. Do you *really* need to cache that icon which is really never going to be shown again in all likely hood? Especially when talking about a desktop shell, I certainly don't want it eating up all my RAM. If my shell eats up all my RAM, then *any* application I run will result in swapping. Suddenly, the start up time for *all* my apps has been increased. Programs that like this should use as little memory as possible while still performing adequately quickly. This allows the applications *that do useful things* to use as much memory as possible and run as quickly as possible.
There are many SIP clients that are better than Ekiga. I have never gotten Ekiga to work and I definitely know what I'm doing (implementing SIP software used to be my job). I use Twinkle. It's ugly as sin, but it works.
When both sides are behind NAT, you may get one way audio, depending on the router that's doing the NAT. This is a problem with the router and even STUN won't solve the problem (ICMP packets bind the port, so if you receive a packet before you send one, your network facing port number will change on you). Skype fixes this problem by making clients that aren't behind NAT forward voice packets for clients that are behind NAT. So if you are using Skype and you aren't behind NAT, you may be acting as a proxy for other people's calls.
If you want to get this to work using free software end to end, you will have to either have routers that don't have the ICMP problem (in which case using STUN will traverse the NAT properly) or you will have to put a proxy in the middle that isn't behind NAT (an Asterisk server works well). That's what I do, but a lot of people don't have the opportunity to run a server outside of NAT. In this case, I recommend using Google Voice and one of the various free software Jingle clients (I think Pidgin will work...). Of course, this is using Google as a proxy. I *think* you should also be able to run a Jabber server and open the proper ports on your router and talk using Jingle, but I haven't tried it behind NAT yet (not sure if it uses multiple ports like SIP).
Anyway, there *are* options, but they require some investigation and/or technical expertise. We still don't have an easy non-tech solution like Skype.
Slashdot could really use FAQs. I swear I type this response every year;-)
The problem with NAT traversal is that SIP and RTP require you to use a large number of ports. If both sides are behind NAT, STUN is used to determine the network facing port number and SIP is used to communicate that port number. But the problem is that if you receive a packet before you send a packet, the firewall will send an ICMP packet back. This is not a problem in itself, but many, many firewalls (including Linux based ones at one time) *bind the port* for a while after sending the the ICMP packet. When you get around to sending the packet, the firewall reassigns the network facing port number. Voila; one way audio! No amount of STUN (or ICE) will help you. And, as I said, a *very* large number of routers exist with this problem.
This problem has actually been know for decades (although I've been told it is against the spec). The way you are *supposed* to solve the problem is to write your protocol so that incoming packets come in on only one port. You then port forward that port to the correct place. This is what is meant when we say that the SIP protocol is broken (well, it's also really, really poorly designed in a number of other areas, but those are mostly fixable). Why don't we design a protocol that isn't broken? Because there is no point. Nobody's grandmother knows how to port forward on their router anyway, so its a moot point.
In the meantime, we are faced with one way audio problems in a large number of cases where both sides are behind NAT, even when we use STUN. The way we *actually* fix the problem is by putting a media proxy (session border controller) in the middle. This is a device that is not behind NAT. It acts as a proxy for the call. Both sides connect to the proxy and the proxy forwards the packets. It waits until both sides have sent packets before it forwards them. This fixes the problem. But the downside is that the proxy has to carry the traffic for the whole call.
Skype also has this problem. My understanding is that Skype is using a modified version of SIP underneath anyway. The way Skype solves this problem is by identifying clients that aren't behind NAT. Those clients are used to proxy the media for other clients that are behind NAT. In other words, if you use Skype and you aren't behind NAT, there's a good chance you will be carrying traffic for those that are behind NAT. Free software authors *could* implement this functionality, but those that actually understand the problem (a small number of people) generally think this approach is evil. The general approach has been to rely on using things like Asterisk to forward traffic and simply wait until all the broken routers disappear. With the advent of more and more P2P applications and the popularity of using UPNP to open ports on routers, it's only matter of time before this fixes itself. But in the meantime, we choose not to make a client that will work in all circumstances the way that Skype does.
Finally, on the quality of Skype's codecs. My understanding is that Skype at one time used the GIPS codecs and RTP libraries. I've used them myself and they are definitely extremely good. Just googling them now, I was interested to see that Google has acquired GIPS. I wonder if they would consider open sourcing those libraries... But you are correct. It's just code and free software writers can do just as good a job as GIPS. The current codecs and RTP implementations are actually quite good from my perspective, but possibly don't have quite the same performance on lesser hardware.
Anyway, you are correct that it isn't hard to put all the pieces together to create a Skype like product. There are actually several out there. The problem is that we have to wait for the NAT problem to sort itself out. Before that happens we won't have a competitor to Skype.
Well, it's stupidly easy to switch out of Unity and forget about it. When you log in (once) change from Unity to classic in one of the log-in options. Tada, better Ubuntu.
For those that like to feel like they are in control, run the Compiz Settting Manager (ccsm) and unclick the Unity plugin. Unity is then gone. You can run gnome-panel, or whatever the heck you want. What would be nicer is to have "Unity" as an option in the Appearances settings application, but they seem to have made it difficult to find that application...
The more I think about it, though, the more I find that Ubuntu really isn't for me. Originally I switched because I wanted a non-rolling distribution with fairly frequent releases. I felt that it didn't matter how it was set up because I would just set it up for myself anyway. But Ubuntu is increasingly making it difficult to choose a different setup than they like. I think this is fair. They are focused on creating a brand and want a single identifiable look and feel for people who want an "Ubuntu computer". But I'm not the customer they want and I think it might be time to move somewhere else (maybe back to Debian -- starting to miss the rolling updates).
I just switched to Natty yesterday and gave Unity a whirl. Like you say, I really don't think it's ready yet. But I was very pleased to discover that it's a Compiz plugin, so it was really easy to disable. On thinking about it, I think two fairly simple things could make Unity a friendly player in the desktop environment world:
1) Split it up into two plugins: one for the menu thingy at the top and one for the launcher at the side.
2) Don't make dependencies with other plugins that I might not want to use (like the viewport switcher: I like my cube desktop!!!:-) )
I actually like the menu thingy and would use it in preference to gnome-panel if I could, but I don't like the launcher (Docky is better). Also the app search/menu is horrible and I would *really* like to get access to the normal Debian menu list somehow. But there are some good ideas hiding in there. IMHO, making Unity a compiz plugin is exactly the right thing to do, but execution is lacking. I'm more than half tempted to start writing some patches. I wonder how accepting they are about outside help... Or possibly just write my own menu/panel.
Sure it is. Our liberties are what make us. If we continue on this path of eroding them, it will literally destroy America, which is what the terrorists want.
Pretty big generalizations there. I'm willing to bet that every terrorist group has significantly more specific goals than "destroy America". But if I join you in over simplification, I really think that what the terrorists want is for America to stop meddling in what they are doing. Unfortunately, they also believe that America will never stop meddling unless it loses a significant amount of power. The destruction of America is a means to an end, not an end itself.
Now, we can argue until the cows come home over whether America's meddling is justified, wanted, needed, whatever. Many Americans are perfectly happy with the view of America as "the policeman of the world". But it kind of paints a big target on them and every thug who thinks they are going to be impeded by this global policeman is going to be gunning for them. That's the cost of doing business, so to speak.
The more America fights against terrorists by doing things like bombing foreign nations in order to kill terrorist leaders, the more it draws attention to itself. It actually creates the problem it's tackling. As Machievalli explained in his much misunderstood book, the Prince, it's not sufficient to simply kill the head of an organization. You have to systematically track down and kill all of his family, his subbordinates, his subbordinates' families, all their friends and families, etc, etc. Because if you leave just one of them alive, they will raise an army and destroy you. History is littered with examples of this.
You are right when say that creating a police state in America will destroy it, allowing the terrorists to win. But unless America is up for a huge blood bath (and I don't think it is), fighting them in the first place is a big mistake. Let them win, I say.
Yeah. My personal preference is for a fairly small single monitor (say 19"). I like to have everything in my field of view at all times and the smaller workspace is good for that. I use non-maximized windows, with sloppy focus, lots of windows, lots of virtual desktops and lots of key macros to bring the right combination of windows into view at the right time. I suspect other people could get used to my work flow, but it would cost a hell of a lot more than the cost of a monitor. To be fair, it costs a hell of a lot more than the cost of a monitor for me just to set up my machine to work the way I want it to. Although in my defence, I can actually be productive on a netbook, which makes coding portable:-)
But you don't question a professional on the equipment they want. You just buy it and let them get on with the job...
This is actually something I'm thinking about from a language design perspective. Computer languages are great and explaining what you want to do, but are not expressive enough to explain why you want to do that. Tests often help a great deal. You can write a comment that says, "This is -1 here because my array starts from zero". But you can also write a test that shows that the array begins at zero and the indexing is correct. For me the second is preferred for a number of reasons. The first is that it is a runnable comment. If the assumption changes, the test will fail.
The second reason is a little more abstract. I find that a human language comment kicks me out of thinking in the programming language. It's hard enough to actually think that way to begin with since code is not easily pronounceable (another thing I would like to see improved). When you are code switching between the two, it reduces your fluency (IMHO).
Ideally, I'd like to see programming language constructs that can describe things like architecture. For instance, it can say that it is an interpreter pattern and these are the other classes that work with it. This is not runnable code, but it's useful information and can be checked in tests to ensure that it is correct. I think this would go a long way to improving readability of code.
A bit off topic, but you triggered something I've been thinking about for a couple of years. That "spark" is fluency.
I swtiched jobs from being a computer programmer to being an ESL teacher in Japan. Japan is somewhat famous for churning out students who know a lot *about* English, but can't order a drink at Mac Donald's. We used to have a name for those kinds of people with regard to programming languages: language laywers. They can answer any question you put to them *about* a programming language, but couldn't program to save their life. These people often make it past job interviews easily, but then turn out to be huge disappointments when they actually get down to work. I've read a lot about this problem, but the more I look at it, the more I realise that these disabled programmers are just like my students. They have a vocabulary of 5000 words, know every grammar rule in the book but just can't speak.
My current theory is that programming is quite literally writing. The vast majority of programming is not conceptually difficult (contrary to what a lot of people would have you believe). We only make it difficult because we suck at writing. The vast majority of programmers aren't fluent, and don't even have a desire to be fluent. They don't read other people's code. They don't recognise or use idioms. They don't think *in the programming language*. Most code sucks because we have the fluency equivalent of 3 year olds trying to write a novel. And so our programs are needlessly complex.
Those programmers with a "spark" are programmers who have an innate talent for the language. Or they are people who have read and read and read code. Or both. We teach programming wrong. We teach it the way Japanese teachers have been teaching English. We teach about programming and expect that students will spontaneously learn to write from this collection of facts.
In language acquisition there is a hypothesis called the "Input Hypothesis". It states that *all* language acquisition comes from "comprehensible input". That is, if you hear or read language that you can understand based on what you already know and from context, you will acquire it. Explanation does not help you acquire language. I believe the same is true of programming. We should be immersing students in good code. We should be burying them in idiom after idiom after idiom, allowing them to acquire the ability to program without explanation.
But for her, 10 grand a year in tuition was worth it, because she didn't want to be a moron for the rest of her life. What kind of role model are you to your kids if you can't communicate well, don't understand history, can't appreciate literature and art? What kind of voter are you if you can't think critically, or if you don't understand politics and science? Can you manage your financial decisions without and understanding of math and business? Think about what a better neighbor, parent, and traveler you would be, if you could speak a foreign language.
Why do I need a university to learn these things? Fair enough if your friend just preferred taking classes to independent study, but you make seem as though anyone who doesn't go to university is a moron. You imply that the university is the font of knowledge without which you are doomed to a life of ignorance. How can we learn without the intellectual elite vetting our every educational experience? How can we determine right from wrong without an authority to define it for us? How can we think critically without someone to tell us if we've done it correctly?
No matter how you learn, education comes from within. A teacher tries to be helpful, but it is your own effort that frees you from ignorance. Understanding this is the difference between being a slave to your tuition and being a free person able to choose your own path.
I don't subscribe to either philosophy. I have 16 waking hours a day. I want to do something interesting with that time. If I didn't have a job, I wouldn't sit around watching Oprah all day. I would be "working" on something. The thing about a job is that I don't have to decide what to do. Other people *tell* me what they want. That's really cool. I *like* working with other people. I like it when I do something that other people appreciate. So I find it very helpful that they will tell me what they want (and give me money for doing it to boot).
I suppose you might cram this into "live to work", but I categorically reject the term "work". I'm just having fun. It's not about the job. It turns out I don't really care what I'm doing as long as it is challenging. What I care about most is the relationships I have with other people. Going to work isn't much different for me than going to a cafe to hang out with my friends. Except that the cafe is boring because there isn't anything to do except eat and gossip.
My contract is up next year and I've been thinking of starting my own business. But I keep thinking about how I would be working mostly alone and how I would have to decide everything that should be done. It sounds kind of lonely. In the end I may just keep working these so-called jobs. It's fun.
Everybody that I know that knows him personally (which I don't) calls him Richard. I've had a few brief email conversations with him and he didn't sign the emails at all. RMS is his login name. Back in the olden days (which, through the fog of memory, I think I may have been party to) programmers used to refer to each other by their login name. Many people (even me) used to sign their emails with their login name (which would have been the same as their email address). Back when "finger" was the way to check up on what people were doing, it was important to know people's login name.
I still use my normal login name (which isn't wrook, BTW) on a lot of forums and there are people who I've talked with for decades that don't know me by any other name. I've almost certainly referred to myself that way online. That doesn't mean that I use it in daily conversation.
What exactly are they protesting? I've seen people protesting here to close the Hamaoka power plant, but that's hardly a secret. The government even paid off Chuubu Denryouku to close it. It's been in all the news. But apart from that, no protests that I can see...
The IAEA has a report listing the deaths associated with the nuclear plant. There are 3 deaths. 2 workers were swept away by the Tsunami. A third worker died, but the cause isn't known (which is very strange). The IAEA states that his exposure to radiation was extremely low, so radiation is not considered to be the cause.
There have been no other deaths. The UN has released an opinion that there will be no deaths related to radiation released from this event. Or... I think that's what they said. They had a press conference and various news reports have quoted the chairman of the group differently. The group did not issue a press release as far as I can tell. But depending on the quote you look at he said that based on examining children and workers in the affected area, there will be no future health effects. OR he said that based on the data the have examined there will be no future health effects due the the radiation released to date. In any case, they will be coming to the region in the summer to do a study.
I'm replying to too many posts in this thread, but again I feel compelled to do it. I watched the TEPCO news reports on TV. I live in Japan and I speak Japanese. It's possible that I misunderstood some things because it is a technical subject and while I am fluent in Japanese, these things are difficult. But your account of the events do not mesh with my recollection at all. This is from memory, but I recall them originally claiming that a large portion of the core had been left exposed for 5 hours. At that point they said that the fuel was damaged and may have melted. However, they felt that the radiation measurements that they were collecting indicated that the core had not melted down completely, only the cladding had melted. Critically, they said that they couldn't tell for sure what the circumstance were without entering the building.
When the British scientist wrote indicating that he felt the core had melted, TEPCO responded very quickly (the same day IIRC). They admitted that it was a possibility that the core had melted. But they felt that the data also supported the case where only the cladding had melted. Without entering the building they couldn't determine which it was.
Like I said, I watched this on TV and I was not surprised in the least that the core had melted down. They said several times that it was a possibility. On the news, when they were planning on entering #1 they headlined it with saying something to the effect, "They will enter the building and hopefully finally be able to tell whether the core has melted or not".
What's frustrating for me is that the foreign press do *not* report what TEPCO are saying. They report only half of it. Hey, I have never had any love for this company. I consider myself a rather extreme environmentalist. I don't have a car. I don't heat my house. I try to live a spartan life. These energy companies are the antithesis of what I believe in. But I really do find myself feeling bad for those guys lately.
For those of you relying only on the foreign press's reporting of what TEPCO are saying, I urge you to consider that you may be the victim of bad reporting/translation more than the victim of deceit.
They entered the building and took readings more directly. They still don't know everything. For instance, they think the fuel has melted and puddled at the bottom of the reactor, but they don't know. If it is all at the bottom of the reactor, then it is covered with water (a good thing). But if it didn't all melt, then some could still be exposed to the air. Again, it will take more time and more work to determine exactly what the situation is.
One of the frustrating things for me, watching from Japan is how badly TEPCOs announcements are being conveyed in the foreign press. Their Japanese statements are appropriately vague and indicate how they don't have all the information, and that they think things are one way, but that it could be another way. But then the bloody foreign press gets a hold of it and makes a dogs breakfast of it. Suddenly things are all "it is definitely X" and "it could not possibly be Y". The truth is, they don't know exactly what is going on because they can't see inside the reactor. As things cool down and as the radiation contamination is stemmed they will have more information. But this will take a very long time.
There are two things that are news here (albeit a little bit late). The first is the extent of the melting. There was always a question as to whether the fuel had melted or if only the cladding had melted. Early on a British scientist wrote an opinion that the data indicated that the fuel had melted completely. TEPCO responded saying that it was a possibility, but that the data could also support the situation where only the cladding had melted. When they finally were able to get inside the building of #1, they decided that the fuel had melted completely. Again, there was still a question if this was also true of #2 and #3. Just recently, they have decided that it was true of those two.
The second piece of news is that when they originally went inside #1, they thought that it might be the case that the containment was cracked in the original earthquake. The coolant would have escaped and the meltdown would have occurred within the first 5 hours. But recently, they have discounted that as a possibility, returning to their assumption that it was a loss of cooling ability which resulted in the meltdown.
How inter-operable is it with standard SIP?
They have a long history of the 3Es.
Fairly. It's been a while since I played with their stuff, but it is pretty easy to make things work. They have some freaky things in there (or did), but so do a lot of people. SIP is a kind of nightmare where people are *encouraged* to extend it in new and unusual ways. Writing a SIP client/server is a bit challenging because everybody does everything differently. Occasionally a new spec is barfed out and then half the people move over to that. But this just makes your job harder because you now have all the old ways of doing things and then a whole bunch of broken interpretations of new ways of doing things. I honestly don't think it is possible for MS to make it worse. If they Embrace, Extend, and Extinguish it will actually help since it will cut down on the competing versions of everything. I think people would be astonished at the sheer number of SIP specs out there...
I'm not really sure what you are getting at. You copy and pasted a lot of stuff, but I don't know where you're going with it.
The current version of Compiz is (and has been for a very long time) Compiz Fusion. There is no stand-alone Compiz anymore, nor is there a stand-alone Berryl anymore. It's all incorporated into Compiz Fusion, which everyone refers to as Compiz. I suspect that's where our miscommunication is coming from. I'll try to refer to it as Compiz Fusion.
Compiz Fusion performs both compositing functions and window management functions. The compositing functions that Unity performs do *not* have to be done directly in Compiz Fusion. There is no problem using them outside of the compositing manager (but you still have to talk to it).
However, the window managing functions of Unity generally need to be done in the window manager or else you need to jump through a lot of hoops. That's why it makes sense to write Unity as a plugin for Compiz Fusion. This is a direct result of the design of X which only notifies the window manager when windows are appearing and disappearing. If you try to reference a window that doesn't exist in X, it actually crashes X. This creates a race condition where your window manager is notified that a window has been created and notifies your app. But before your app gets the message, the window is destroyed. The app tries to query the window (for title or whatever) and you crash X.
The thing is, I'm still confused what you think is going on. If you use the "classic" desktop, you are using Compiz Fusion, without the Unity plugin. But then you are also using gnome-panel, which is an enormous resource hog (definitely more than the Unity plugin). You are also using Gnome 2.X, which doesn't use Mutter. You *could* upgrade to Gnome 3 which has Gnome-Shell and Mutter as the compositing manager *and* the window manager (just like Compiz Fusion), but it's a completely different animal. Ubuntu is still on Gnome 2, not Gnome 3. They aren't comparable.
Perhaps you meant to say that you want to ditch Ubuntu altogether and use something that uses Gnome 3??? I'm not sure...
They don't have to change anything. If they are distributing the binary, they are responsible for also distributing the source code (possibly on request, but they have to supply a written offer to supply the source code in that case). Even if the upstream is supplying the source code freely, this does not absolve the distributor of the responsibility. I think this aspect of the GPL is confusing for some people and may be one of the reasons that the companies are not in compliance. It's possible that they merely need to be reminded what they should be doing. BTW, since I am at it, they only need to supply the source code to *their customers*. They don't have to make the code generally available.
In any case, I suspect that you are a bit confused anyway, because the UI skinning isn't happening at the kernel level. The UI code isn't covered by the GPL. This discussion is only focussing on kernel issues that are covered by the GPL. So a vendor may have to make some changes in order for the kernel to work properly with their hardware. It's important that customers get access to this code, because without it they can't create a working version of the kernel for their hardware (supposing they could load it in the first place... sigh...)
I thought the same thing at first too, although I haven't really worked with the code much other than to play with the SIP code. If, like me, your only view of the code is a 30K line file containing an ad-hoc parser you aren't left with too much confidence. But in fairness, the concepts that they talk about (channels, etc) are decent abstractions. I've worked in telephony long enough to know that there a *lot* of very poorly designed PBXs out there. While the implementation sometimes lacks in Asterisk, the deign and architecture elements that they describe are pretty sound.
This means that, since Google is redistributing my .apk, they are responsible for responding to requests for the GPL'd source code, NOT ME. Google can ask me for the source code, and I'll give them a copy, but since they are going to distribute the GPL'd code, the hosting of said GPL'd code for those they distribute to is Google's burden!
That's a good point, but i would suggest that google redistributing the unchanged binary is akin to any hosting provider redistributing the binaries you place on their servers.
I don't think this is the case. The app store doesn't give access to everyone. In some cases it charges for software. If you don't pay, you can't download the software. I think there's a strong case to be made that the app store is the one making the copy. It's not even like buying a router from a store with GPL software on it. We don't hold the store liable to redistribute the source code, but they aren't actually making a copy, so they aren't a party to the GPL. If the app store can be said to be making a copy, then they must be held responsible for making the source available.
There is already a precident for saying that even if the upstream party is making source available, it doesn't absolve you from the responsibility for making the source available if you distribute it (make a copy and give it to someone). At the very least, it seems to me that Google must make the written offer to provide the source code for GPL software.
However, the only one with standing to force Google to do this is the author of the software. And by virtue of the fact that they put the software in the app store to begin with, it seems that they are OK with the status quo. I find it very unlikely that anyone would put something into the app store and then complain that Google wasn't offering the source code. If Google were stripping the source code out of packages or something, that would be one thing. But they aren't.
Having said all that, it's a very interesting problem. It might be solved by Google simply requiring that all GPL software be distributed with source code in the apk. I suspect it's not something that anyone has really thought about.
The "hole punching" they describe is STUN. That's precisely how STUN works. But as is also mentioned in the article, it doesn't always work (the scenario I described above where the NAT router binds the port when it receives the first packet). The article goes on to explain that the "Skype Server" carries the traffic in that case. What it doesn't explain is that the "Skype Server" is often just any old machine that happens not to be behind NAT. These are called Skype Super Nodes. If you are interested there many, many explanations on how they work that you can find through Google.
The GPL specifies very clearly when the source code has to be released. The vendor has a few choices:
1) They can release the source code with the binary
2) They can accompany the binary with a written offer to supply the souce code on request for a period of not less than 2 years.
Generally, vendors tend to do the second, but I have a couple of devices where I was given a CD containing the source code along with the device. Free software projects usually provide the source code and binary download at the same time.
My understanding is that these vendors are neither supplying the source code with the binary nor accompanying the binary with a written offer for the source code. If that is true, then they are in violation of the GPL. The reason for requiring the source code at the same time as the binary is that offering the source code at some indefinite point in the future is useless. If I have a problem that requires the source code, waiting an indefinite amount of time doesn't help me.
Running... Compiz... solving... what exactly?
The reason you want to run at least some parts of Unity as a plugin for the window manager is because there are race conditions in X such that only the window manager will be guaranteed to know when a window has appeared or disappeared the instant it happens. So, either you write the code in the window manager, or you have another mechanism to communicate to your program from the window manager. Or you jump through a whole bunch of hoops to stop your app from crashing when you think there is a window there when it isn't.
I'm not even sure why you think there is a difference between "native to Gnome" and "native to Compiz". I think you must be imagining a whole bunch of stuff that has no relation to reality...
But if it's full of cached images and icons so that the interface can be quicker and more responsive, well, isn't that why you have all that RAM?
A perfect program/OS would very quickly gobble up all available memory by storing and caching useful stuff...and then free it up the instant it was needed elsewhere.
The problem with filling up all your memory is that you don't know what the priority for memory use is. Is all that RAM on my system there to cache icons, or is it there to cache my database? As an application developer, you don't know how important your program is to the system compared to another program. As an OS developer, you similarly don't know. Chewing up all the available RAM so that one application is optimally fast, may be exactly the wrong thing to do if, as a user, I don't care about the speed of that application all that much.
RAM is a finite resource. Allocating and deallocating memory takes time. So even if we free up memory the instant we realize someone else wants it (pretty much impossible, but let's say we can do it), it will still take take. Swapping out to disk also takes time. Filling up all your memory pretty much guarantees that you will increase latency whenever you need to allocate memory (starting a new program, or changing between programs, etc, etc).
As an application developer, you should be aware of the impact of memory that you using. Do you *really* need to cache that icon which is really never going to be shown again in all likely hood? Especially when talking about a desktop shell, I certainly don't want it eating up all my RAM. If my shell eats up all my RAM, then *any* application I run will result in swapping. Suddenly, the start up time for *all* my apps has been increased. Programs that like this should use as little memory as possible while still performing adequately quickly. This allows the applications *that do useful things* to use as much memory as possible and run as quickly as possible.
There are many SIP clients that are better than Ekiga. I have never gotten Ekiga to work and I definitely know what I'm doing (implementing SIP software used to be my job). I use Twinkle. It's ugly as sin, but it works.
When both sides are behind NAT, you may get one way audio, depending on the router that's doing the NAT. This is a problem with the router and even STUN won't solve the problem (ICMP packets bind the port, so if you receive a packet before you send one, your network facing port number will change on you). Skype fixes this problem by making clients that aren't behind NAT forward voice packets for clients that are behind NAT. So if you are using Skype and you aren't behind NAT, you may be acting as a proxy for other people's calls.
If you want to get this to work using free software end to end, you will have to either have routers that don't have the ICMP problem (in which case using STUN will traverse the NAT properly) or you will have to put a proxy in the middle that isn't behind NAT (an Asterisk server works well). That's what I do, but a lot of people don't have the opportunity to run a server outside of NAT. In this case, I recommend using Google Voice and one of the various free software Jingle clients (I think Pidgin will work...). Of course, this is using Google as a proxy. I *think* you should also be able to run a Jabber server and open the proper ports on your router and talk using Jingle, but I haven't tried it behind NAT yet (not sure if it uses multiple ports like SIP).
Anyway, there *are* options, but they require some investigation and/or technical expertise. We still don't have an easy non-tech solution like Skype.
Slashdot could really use FAQs. I swear I type this response every year ;-)
The problem with NAT traversal is that SIP and RTP require you to use a large number of ports. If both sides are behind NAT, STUN is used to determine the network facing port number and SIP is used to communicate that port number. But the problem is that if you receive a packet before you send a packet, the firewall will send an ICMP packet back. This is not a problem in itself, but many, many firewalls (including Linux based ones at one time) *bind the port* for a while after sending the the ICMP packet. When you get around to sending the packet, the firewall reassigns the network facing port number. Voila; one way audio! No amount of STUN (or ICE) will help you. And, as I said, a *very* large number of routers exist with this problem.
This problem has actually been know for decades (although I've been told it is against the spec). The way you are *supposed* to solve the problem is to write your protocol so that incoming packets come in on only one port. You then port forward that port to the correct place. This is what is meant when we say that the SIP protocol is broken (well, it's also really, really poorly designed in a number of other areas, but those are mostly fixable). Why don't we design a protocol that isn't broken? Because there is no point. Nobody's grandmother knows how to port forward on their router anyway, so its a moot point.
In the meantime, we are faced with one way audio problems in a large number of cases where both sides are behind NAT, even when we use STUN. The way we *actually* fix the problem is by putting a media proxy (session border controller) in the middle. This is a device that is not behind NAT. It acts as a proxy for the call. Both sides connect to the proxy and the proxy forwards the packets. It waits until both sides have sent packets before it forwards them. This fixes the problem. But the downside is that the proxy has to carry the traffic for the whole call.
Skype also has this problem. My understanding is that Skype is using a modified version of SIP underneath anyway. The way Skype solves this problem is by identifying clients that aren't behind NAT. Those clients are used to proxy the media for other clients that are behind NAT. In other words, if you use Skype and you aren't behind NAT, there's a good chance you will be carrying traffic for those that are behind NAT. Free software authors *could* implement this functionality, but those that actually understand the problem (a small number of people) generally think this approach is evil. The general approach has been to rely on using things like Asterisk to forward traffic and simply wait until all the broken routers disappear. With the advent of more and more P2P applications and the popularity of using UPNP to open ports on routers, it's only matter of time before this fixes itself. But in the meantime, we choose not to make a client that will work in all circumstances the way that Skype does.
Finally, on the quality of Skype's codecs. My understanding is that Skype at one time used the GIPS codecs and RTP libraries. I've used them myself and they are definitely extremely good. Just googling them now, I was interested to see that Google has acquired GIPS. I wonder if they would consider open sourcing those libraries... But you are correct. It's just code and free software writers can do just as good a job as GIPS. The current codecs and RTP implementations are actually quite good from my perspective, but possibly don't have quite the same performance on lesser hardware.
Anyway, you are correct that it isn't hard to put all the pieces together to create a Skype like product. There are actually several out there. The problem is that we have to wait for the NAT problem to sort itself out. Before that happens we won't have a competitor to Skype.
Well, it's stupidly easy to switch out of Unity and forget about it. When you log in (once) change from Unity to classic in one of the log-in options. Tada, better Ubuntu.
For those that like to feel like they are in control, run the Compiz Settting Manager (ccsm) and unclick the Unity plugin. Unity is then gone. You can run gnome-panel, or whatever the heck you want. What would be nicer is to have "Unity" as an option in the Appearances settings application, but they seem to have made it difficult to find that application...
The more I think about it, though, the more I find that Ubuntu really isn't for me. Originally I switched because I wanted a non-rolling distribution with fairly frequent releases. I felt that it didn't matter how it was set up because I would just set it up for myself anyway. But Ubuntu is increasingly making it difficult to choose a different setup than they like. I think this is fair. They are focused on creating a brand and want a single identifiable look and feel for people who want an "Ubuntu computer". But I'm not the customer they want and I think it might be time to move somewhere else (maybe back to Debian -- starting to miss the rolling updates).
I just switched to Natty yesterday and gave Unity a whirl. Like you say, I really don't think it's ready yet. But I was very pleased to discover that it's a Compiz plugin, so it was really easy to disable. On thinking about it, I think two fairly simple things could make Unity a friendly player in the desktop environment world:
1) Split it up into two plugins: one for the menu thingy at the top and one for the launcher at the side.
2) Don't make dependencies with other plugins that I might not want to use (like the viewport switcher: I like my cube desktop!!! :-) )
I actually like the menu thingy and would use it in preference to gnome-panel if I could, but I don't like the launcher (Docky is better). Also the app search/menu is horrible and I would *really* like to get access to the normal Debian menu list somehow. But there are some good ideas hiding in there. IMHO, making Unity a compiz plugin is exactly the right thing to do, but execution is lacking. I'm more than half tempted to start writing some patches. I wonder how accepting they are about outside help... Or possibly just write my own menu/panel.
Sure it is. Our liberties are what make us. If we continue on this path of eroding them, it will literally destroy America, which is what the terrorists want.
Pretty big generalizations there. I'm willing to bet that every terrorist group has significantly more specific goals than "destroy America". But if I join you in over simplification, I really think that what the terrorists want is for America to stop meddling in what they are doing. Unfortunately, they also believe that America will never stop meddling unless it loses a significant amount of power. The destruction of America is a means to an end, not an end itself.
Now, we can argue until the cows come home over whether America's meddling is justified, wanted, needed, whatever. Many Americans are perfectly happy with the view of America as "the policeman of the world". But it kind of paints a big target on them and every thug who thinks they are going to be impeded by this global policeman is going to be gunning for them. That's the cost of doing business, so to speak.
The more America fights against terrorists by doing things like bombing foreign nations in order to kill terrorist leaders, the more it draws attention to itself. It actually creates the problem it's tackling. As Machievalli explained in his much misunderstood book, the Prince, it's not sufficient to simply kill the head of an organization. You have to systematically track down and kill all of his family, his subbordinates, his subbordinates' families, all their friends and families, etc, etc. Because if you leave just one of them alive, they will raise an army and destroy you. History is littered with examples of this.
You are right when say that creating a police state in America will destroy it, allowing the terrorists to win. But unless America is up for a huge blood bath (and I don't think it is), fighting them in the first place is a big mistake. Let them win, I say.
Yeah. My personal preference is for a fairly small single monitor (say 19"). I like to have everything in my field of view at all times and the smaller workspace is good for that. I use non-maximized windows, with sloppy focus, lots of windows, lots of virtual desktops and lots of key macros to bring the right combination of windows into view at the right time. I suspect other people could get used to my work flow, but it would cost a hell of a lot more than the cost of a monitor. To be fair, it costs a hell of a lot more than the cost of a monitor for me just to set up my machine to work the way I want it to. Although in my defence, I can actually be productive on a netbook, which makes coding portable :-)
But you don't question a professional on the equipment they want. You just buy it and let them get on with the job...