Right. And the point is that Microsoft did not pay to include DVD software, the end-user did that when they bought their Windows machine from the OEM. Ubuntu goes a step beyond Microsoft and allows the end-user to determine for themselves if what they are doing is legal in their jurisdiction and allows them to play DVDs if it is. For users that really want a DMCA-compliant player, Cyberlink offers one here: http://www.cyberlink.com/english/products/powercinema/pcm-linux/pcmlinuxgpl.jsp .
It sounds like you hate the DMCA as much as anyone should and are aware of the issues around DVD playback. But Microsoft gets no points for the majority of Windows users being able to play encrypted DVDs without too much hassle, rather that honor goes to the OEMs.
(DVD support) where Microsoft has paid for the privilage to supply the codecs
What is this DVD support in Windows you're talking about? Last time I installed Windows (XP Home), I had to install more stuff from a CD (PowerDVD?) to get DVDs to play in WMP.
Linux OTOH plays DVDs with just one additional download of something-or-other. And the Linux players let me skip through the FBI warnings straight to the menu.
When choosing between "pay for the hard ware and our software and we'll give you the texts free" and "pay for the hardware and all of the software is free and so are the textbooks," they're going to choose the one that doesn't require nonexistent money.
I think his point is that the real choice is between "pay for the hardware and all of the software is free and so are the textbooks" and "pay only half as much for the hardware, the software, and the textbooks because we'll subsidize the rest for you (which we can write off as a charitable contribution anyway)."
As for GNUStep, who uses it? Can you point out any major applications that make use of it?
I think the point of GNUStep is that applications that use it will run on Linux or Windows, not on Mac since Mac already has its own libraries. One major application that is cross-platform is Emacs.app (http://emacs-app.sourceforge.net/); that's the Emacs I use on OS X. My Debian box lists 96 packages that depend on gnustep, nearly all of them are parts of the GNUStep environment.
I would be OK with developing new applications under GNUStep and then deploying on OS X and Linux if I really liked ObjC. (Generally I'd probably just use Qt since I use C++ more than ObjC.) But the main point is that ObjC is not a platform trap in the same way Java used to be before the JDK was GPL'd.
I understand your point, but my point (that I didn't make clear enough) is that medicine is fundamentally different from anything else we know of. Even preventative care is destined to rise in price far beyond inflation because there is that ultimate incentive to try to extend life by any means available. Just as the risk associated with driving is accepted much more readily than that associated with air travel (despite the hard evidence that driving is an order of magnitude riskier), so is the cost associated with any medical procedure that might work to extend life considered acceptable. Only some people who have already lived long lives, or those who are faced with an extended life that might not be all that pleasant to live anyway, only those seem to be willing to say "enough."
Greed is the reason capitalism results in better products than extreme socialism.
You're lucky you slipped that word "extreme" in there. I assume by "extreme socialism" you mean a centrally-planned economy, and those are generally known to be less effective than distributed economies. OTOH, "non-extreme" socialism has done some pretty remarkable things in certain domains. Anywhere the mandate is to maximize service rather than maximize profit, socialistic enterprises (e.g. non-profits and government agencies) tend to do better than their capitalistic counterparts.
Either private insurers fuck us, or the government fucks us. Either I pay lots of money out of my paycheck (including a lower salary just for participating in the plan), or the government taxes me. At the end of the day we would still have a bloated, expensive system, but if the government runs it, we have better accountability.
You just crossed the line from being libertarian to being liberal. Congratulations.
This sort of blurring of terms is dangerous because we are on the brink of doing something really stupid, nationalizing the entire medical industry.
(I'll let others talk about the VAST policy continuum between single-payer insurance ("Medicare for all") and a fully nationalized health care system where doctors are legally employable only by the government.)
The "blurring of terms" occurs because medicine is unlike any other service. If your car is lost, you can (in theory) have friends drive you around or you can use public transit to get by long enough to get another one. If your house is destroyed, you can (in theory) move in with family or friend until you can afford another one.
But if a doctor doesn't treat you, you DIE. You don't get a chance to try to recover. You DIE. The closest analogy I have ever heard to medical insurance in the USA is "protection money". Instead of paying to avoid having a thug blow off your kneecaps, you're paying to avoid dying sooner.
Now you tell me: what kind of economics works well for managing a protection money racket?
I've actually learned LISP this semester in AI class. LISP is... interesting. I mean, I get it, but it's so weakly typed (the same problem I had with learning perl)that I have troubles visualizing code for it. The C/C++ programmer in me is screaming "use a callback!", the Java programmer in me knows that Java doesn't allow pointers, so extend an abstract class, and the newly found LISP/perl programmer in me is in a corner sucking his thumb, quickly rocking back and fourth.
Lisp is definitely an experience unto itself.:) I would strongly suggest "Successful Lisp", it's online at http://psg.com/~dlamkins/sl/contents.html . It gets you through some of the rough spots early on. Also look at cliki and Lisp commons for some actual live code to wade through. I've got CLTLv2, the HyperSpec, and the SBCL/CMUCL docs bookmarked for easy access. The easy part is figuring out what you want to do, the hard part is learning where to find the answer. comp.lang.lisp (a.k.a. c.l.l) is invaluable too.
Lisp does have both pointers and callbacks, but the pointers are more like Java's references than C's raw memory access. However, you *can* get to raw memory by using FFI. An example of FFI is here:
(defun get-group-name (gid)
"Returns the name of a group given its GID from the operating system. See getgrgid(3)."
(declare (type integer gid))
#+:SBCL
(declare (sb-ext:muffle-conditions sb-ext:compiler-note))
(let ((x (c-getgrgid gid)))
(if (uffi:null-pointer-p x)
(error "Invalid group ID")
(uffi:convert-from-foreign-string (uffi:get-slot-value x 'group 'gr-name))))) ----snip----
This bit defines get-group-name that takes a gid and calls getgrgid() to return the actual name. In my REPL I can call it like so:
CL-USER> (get-group-name 12) "man" CL-USER>
As for types, Lisp actually has strong typing (everything *is* typed) but weak checking. If you want to absolutely ensure that a parameter to a function is a given type, you can use "the" as in (the integer x) . If x is not an integer, a TYPE-ERROR will be thrown. When you define slots on objects, you can also specify the type then. Finally, you can use (declare (type integer foo bar)) to hint to the compiler that foo and bar will be integers. The declare goes right after the docstring on a defun or after the variables list in a let form.
I mean, LISP performance screams for raw text processing, but it's like BASIC, in that I can't form a great mental image of encapsulated code. Although you mention subclassing in LISP, this isn't in common LISP, is it?
Subclassing is actually in common Lisp, but some Lisp's can't do it (namely Emacs and GNU Common Lisp (gcl)). Classes are done through CLOS, and behave a lot like Perl classes in that nothing is really private/protected (slot-value can *always* get the value), but also a bit like C++ in that multiple inheritance is easy. The only wrinkle is that Lisp classes do not have member functions,
Regarding the Unix vs. windows workstations: Apparently the developers here use windows workstations because when I tried to install a Linux utility all the shell scripts wouldn't run.
I used to work in the "WebSphere Applications" group in the WAS 3.5.x days. We were in the same complex as the WAS group, knew quite a few people who transferred in and out of WAS, and they were almost a pure Windows shop, to the point that WAS 3.5.x couldn't run as a non-root user and even the command-line development tools required root because they wrote temp files to the WAS install directory. WAS 5.x was the first version we saw that seemed to handle non-root correctly out of the box.
The sad thing is, it was no better on our side of the building. Only the testers and Unix installer folks spent any serious time on *nix. I remember only 2 people with Linux as their desktop in a pool of over 50 developers, and they had to quietly "go rogue" to do it (run Notes 4.x/5.x under Wine, use older versions of Linux CMVC clients).
I thought it was insane that IBM was developing almost exclusively on Windows in order to sell to customers running their shops on AIX and Solaris.
It sounds like you're almost ready for Lisp. Conceptually, Lisp makes many things much easier, and its performance is decent enough for most work but not quantum chemistry.
Here is something you can do in Lisp that is harder to do in most other languages: suppose you have a logger that can emit function enter and exit strings like so:
This kind of thing is pretty typical in production systems, you have log4j, log4cl, log5, etc. to provide similar APIs for it. In most languages, if you want to avoid logging a "function enter" you need to explicitly check the log level for it like:
if (logger.isEnabled(logger::ENTER)) { logger.enter(myFunctionName); }
And then simply do (log-enter my-function-name) and the macro expansion will add the check for you. But it gets even cooler: you can wrap you function enter/exit like so:
(defmacro ldefun (logger function-name lambda-list &rest body) "Defines a function with logging enabled" `(defun,function-name,lambda-list (unwind-protect (progn (log-enter,logger (string-downcase (symbol-name (quote,function-name)))) ,@body) (log-exit,logger (string-downcase (symbol-name (quote,function-name)))))))
This macro actually re-writes a function definition to include the log-enter/exit calls. But it gets even cooler: you can make sure that no matter what that errors get logged with this:
(defmacro with-logged-error (logger &rest body) "Logs errors but allows them to continue up" `(catch 'with-logged-errors (handler-bind ((error (lambda (e) (log-caught-error,logger e)))) (progn,@body))))
You can combine all of these into this:
(ldefun mylogger myfoo (x) (log-info "The value of x is ~a" x) (with-logged-error mylogger (log-info "I'm about to do something that might signal an error") (assert (eq x 5))))
These six lines become this in Java:
public void myfoo(int x) { if (mylogger.isEnabled(Logger::ENTER)) mylogger.enter(this.getClass().getName());
mylogger.info("The value of x is " + x); try { mylogger.info("I'm about to do something that might signal an error"); assert(x == 5); } catch (Exception e) { mylogger.exception(e); if (mylogger.isEnabled(Logger::EXIT)) mylogger.exit(this.getClass().getName()); } if (mylogger.isEnabled(Logger::EXIT)) mylogger.exit(this.getClass().getName()); }
Later on in Lisp you may find yourself doing things like having a subclass dynamically adding a section of code to a lambda "owned" by its superclass (I needed that today for a threading issue). Anyway, if you're bored, give it a shot.
Now, I'd like you to cite an example where government services anywhere have outperformed any competitive, private-sector service. Amtrak would be a "great" place to start.
Publicly owned electrical co-op in my town of College Station, TX: provides electricity at about 30% less per kWh than the privately owned electrical utilities in surrounding towns.
My OSAP loan application had no mention of a criminal record check.
The US system uses a multitude of loan and grant programs including Stafford Loans, Pell Grants, Plus Loans, and state and university loans. All of them require a student fill out the FAFSA which explicitly does ask about drug use, and all students who have drug convictions are automatically ineligible for federal aid including grants.
Thus someone who smoked a joint at 16 and got caught will have a much harder time getting funding to get through school even if they have exceptionally good academic credentials. They could still apply for some private grants or simply work harder and take much longer to get through. OTOH, their upper-middle-class peers whose families had the money to hire lawyers and beat the drug convictions can still sail right through.
If your job is to ensure the smooth running of a chemical process plant unit, i.e. you are the shift engineer, then you cannot work when you are not physically at the facility. Industrial safety also precludes you working overtime except in startups, shutdowns and changeovers. Similarly for every other kind of manufacturing shift engineers.
Because money and power differences corrupt the judgment of the people at the top of *any* heap, yet those same people denigrate the science disciplines that can diagnose the problem and direct efforts to fixing it (sociology and psychology). In fact, in the USA economics and business schools are so divorced from the social sciences that they are generally unable to even see that they are operating under the assumptions of a reactionary right-wing frame, instead they accuse the other disciplines that attempt to be objective of having a left-wing bias.
I only get on the IM networks when I have lots of time to blow off -- e.g. practically never. But I would do IRC at work in a heartbeat if only I could get most of my co-workers to use it.
I don't know exactly why it works, but somehow IRC (especially with a good GUI client) takes the edge of IM just enough that it becomes a useful communication tool rather than constant interruptions. But you can still DCC someone to get IM-like functionality, even with file transfers.
Right. And the point is that Microsoft did not pay to include DVD software, the end-user did that when they bought their Windows machine from the OEM. Ubuntu goes a step beyond Microsoft and allows the end-user to determine for themselves if what they are doing is legal in their jurisdiction and allows them to play DVDs if it is. For users that really want a DMCA-compliant player, Cyberlink offers one here: http://www.cyberlink.com/english/products/powercinema/pcm-linux/pcmlinuxgpl.jsp .
It sounds like you hate the DMCA as much as anyone should and are aware of the issues around DVD playback. But Microsoft gets no points for the majority of Windows users being able to play encrypted DVDs without too much hassle, rather that honor goes to the OEMs.
(DVD support) where Microsoft has paid for the privilage to supply the codecs
What is this DVD support in Windows you're talking about? Last time I installed Windows (XP Home), I had to install more stuff from a CD (PowerDVD?) to get DVDs to play in WMP.
Linux OTOH plays DVDs with just one additional download of something-or-other. And the Linux players let me skip through the FBI warnings straight to the menu.
don't currently have access to a mac gui (I can ssh to one, but I'm not going to waste my time setting up tunneling just for this post).
Would tunneling even work for native (non-X11) Mac apps?
When choosing between "pay for the hard ware and our software and we'll give you the texts free" and "pay for the hardware and all of the software is free and so are the textbooks," they're going to choose the one that doesn't require nonexistent money.
I think his point is that the real choice is between "pay for the hardware and all of the software is free and so are the textbooks" and "pay only half as much for the hardware, the software, and the textbooks because we'll subsidize the rest for you (which we can write off as a charitable contribution anyway)."
As for GNUStep, who uses it? Can you point out any major applications that make use of it?
I think the point of GNUStep is that applications that use it will run on Linux or Windows, not on Mac since Mac already has its own libraries. One major application that is cross-platform is Emacs.app (http://emacs-app.sourceforge.net/); that's the Emacs I use on OS X. My Debian box lists 96 packages that depend on gnustep, nearly all of them are parts of the GNUStep environment.
I would be OK with developing new applications under GNUStep and then deploying on OS X and Linux if I really liked ObjC. (Generally I'd probably just use Qt since I use C++ more than ObjC.) But the main point is that ObjC is not a platform trap in the same way Java used to be before the JDK was GPL'd.
Try to national food though and watch productivity fall.
Try to take away food stamps and watch the riots tear apart the cities.
I understand your point, but my point (that I didn't make clear enough) is that medicine is fundamentally different from anything else we know of. Even preventative care is destined to rise in price far beyond inflation because there is that ultimate incentive to try to extend life by any means available. Just as the risk associated with driving is accepted much more readily than that associated with air travel (despite the hard evidence that driving is an order of magnitude riskier), so is the cost associated with any medical procedure that might work to extend life considered acceptable. Only some people who have already lived long lives, or those who are faced with an extended life that might not be all that pleasant to live anyway, only those seem to be willing to say "enough."
Greed is the reason capitalism results in better products than extreme socialism.
You're lucky you slipped that word "extreme" in there. I assume by "extreme socialism" you mean a centrally-planned economy, and those are generally known to be less effective than distributed economies. OTOH, "non-extreme" socialism has done some pretty remarkable things in certain domains. Anywhere the mandate is to maximize service rather than maximize profit, socialistic enterprises (e.g. non-profits and government agencies) tend to do better than their capitalistic counterparts.
What about Amarok?
Either private insurers fuck us, or the government fucks us. Either I pay lots of money out of my paycheck (including a lower salary just for participating in the plan), or the government taxes me. At the end of the day we would still have a bloated, expensive system, but if the government runs it, we have better accountability.
You just crossed the line from being libertarian to being liberal. Congratulations.
This sort of blurring of terms is dangerous because we are on the brink of doing something really stupid, nationalizing the entire medical industry.
(I'll let others talk about the VAST policy continuum between single-payer insurance ("Medicare for all") and a fully nationalized health care system where doctors are legally employable only by the government.)
The "blurring of terms" occurs because medicine is unlike any other service. If your car is lost, you can (in theory) have friends drive you around or you can use public transit to get by long enough to get another one. If your house is destroyed, you can (in theory) move in with family or friend until you can afford another one.
But if a doctor doesn't treat you, you DIE. You don't get a chance to try to recover. You DIE. The closest analogy I have ever heard to medical insurance in the USA is "protection money". Instead of paying to avoid having a thug blow off your kneecaps, you're paying to avoid dying sooner.
Now you tell me: what kind of economics works well for managing a protection money racket?
Hi, responding back...
:) I would strongly suggest "Successful Lisp", it's online at http://psg.com/~dlamkins/sl/contents.html . It gets you through some of the rough spots early on. Also look at cliki and Lisp commons for some actual live code to wade through. I've got CLTLv2, the HyperSpec, and the SBCL/CMUCL docs bookmarked for easy access. The easy part is figuring out what you want to do, the hard part is learning where to find the answer. comp.lang.lisp (a.k.a. c.l.l) is invaluable too.
;; Debian: /usr/include/asm/posix_types.h :unsigned-short)
:unsigned-char)) :unsigned-char)) :unsigned-char))))
:returning (* group))
I've actually learned LISP this semester in AI class. LISP is... interesting. I mean, I get it, but it's so weakly typed (the same problem I had with learning perl)that I have troubles visualizing code for it. The C/C++ programmer in me is screaming "use a callback!", the Java programmer in me knows that Java doesn't allow pointers, so extend an abstract class, and the newly found LISP/perl programmer in me is in a corner sucking his thumb, quickly rocking back and fourth.
Lisp is definitely an experience unto itself.
Lisp does have both pointers and callbacks, but the pointers are more like Java's references than C's raw memory access. However, you *can* get to raw memory by using FFI. An example of FFI is here:
----snip----
(uffi:def-foreign-type gid-t
(uffi:def-struct
group
(gr-name (*
(gr-passwd (*
(gid gid-t)
(gr-mem (* (*
(uffi:def-function
("getgrgid" c-getgrgid)
((gid gid-t))
(defun get-group-name (gid)
"Returns the name of a group given its GID from the operating system. See getgrgid(3)."
(declare (type integer gid))
#+:SBCL
(declare (sb-ext:muffle-conditions sb-ext:compiler-note))
(let ((x (c-getgrgid gid)))
(if (uffi:null-pointer-p x)
(error "Invalid group ID")
(uffi:convert-from-foreign-string (uffi:get-slot-value x 'group 'gr-name)))))
----snip----
This bit defines get-group-name that takes a gid and calls getgrgid() to return the actual name. In my REPL I can call it like so:
CL-USER> (get-group-name 12)
"man"
CL-USER>
As for types, Lisp actually has strong typing (everything *is* typed) but weak checking. If you want to absolutely ensure that a parameter to a function is a given type, you can use "the" as in (the integer x) . If x is not an integer, a TYPE-ERROR will be thrown. When you define slots on objects, you can also specify the type then. Finally, you can use (declare (type integer foo bar)) to hint to the compiler that foo and bar will be integers. The declare goes right after the docstring on a defun or after the variables list in a let form.
I mean, LISP performance screams for raw text processing, but it's like BASIC, in that I can't form a great mental image of encapsulated code. Although you mention subclassing in LISP, this isn't in common LISP, is it?
Subclassing is actually in common Lisp, but some Lisp's can't do it (namely Emacs and GNU Common Lisp (gcl)). Classes are done through CLOS, and behave a lot like Perl classes in that nothing is really private/protected (slot-value can *always* get the value), but also a bit like C++ in that multiple inheritance is easy. The only wrinkle is that Lisp classes do not have member functions,
The government has always been able to search your bags when you cross the border, to look for drugs and guns coming into the country.
So why would they need to search electronics that are too small to fit drugs or guns in?
they assert the right to make a copy of your computer's contents as you pass through customs.
Does copyright law apply in this case? Maybe we should get the RIAA/MPAA/BSA involved here.
Regarding the Unix vs. windows workstations: Apparently the developers here use windows workstations because when I tried to install a Linux utility all the shell scripts wouldn't run.
I used to work in the "WebSphere Applications" group in the WAS 3.5.x days. We were in the same complex as the WAS group, knew quite a few people who transferred in and out of WAS, and they were almost a pure Windows shop, to the point that WAS 3.5.x couldn't run as a non-root user and even the command-line development tools required root because they wrote temp files to the WAS install directory. WAS 5.x was the first version we saw that seemed to handle non-root correctly out of the box.
The sad thing is, it was no better on our side of the building. Only the testers and Unix installer folks spent any serious time on *nix. I remember only 2 people with Linux as their desktop in a pool of over 50 developers, and they had to quietly "go rogue" to do it (run Notes 4.x/5.x under Wine, use older versions of Linux CMVC clients).
I thought it was insane that IBM was developing almost exclusively on Windows in order to sell to customers running their shops on AIX and Solaris.
It sounds like you're almost ready for Lisp. Conceptually, Lisp makes many things much easier, and its performance is decent enough for most work but not quantum chemistry.
,level (slot-value *local-logger* 'level)) ,level (list ,string ,@msg)))))
,string ,@msg))
,function-name ,lambda-list ,logger (string-downcase (symbol-name (quote ,function-name)))) ,logger (string-downcase (symbol-name (quote ,function-name)))))))
,logger e)))) ,@body))))
Here is something you can do in Lisp that is harder to do in most other languages: suppose you have a logger that can emit function enter and exit strings like so:
[2008-04-16 18:43:53] 030449 BPS > run-project
[2008-04-16 18:43:53] 030449 BPS I Launching project foo
[2008-04-16 18:43:53] 030449 BPS > new-top-process
[2008-04-16 18:43:53] 030449 BPS > initialize-instance
[2008-04-16 18:43:53] 030449 BPS < initialize-instance
[2008-04-16 18:43:53] 030449 libcl2 > initialize-instance
[2008-04-16 18:43:53] 030449 libcl2 I Creating directory: fubfub
[2008-04-16 18:43:53] 030449 libcl2 < initialize-instance
...
This kind of thing is pretty typical in production systems, you have log4j, log4cl, log5, etc. to provide similar APIs for it. In most languages, if you want to avoid logging a "function enter" you need to explicitly check the log level for it like:
if (logger.isEnabled(logger::ENTER)) {
logger.enter(myFunctionName);
}
But in Lisp, you can do this:
(defmacro log-X (level string &rest msg)
`(if (<=
(apply #'log-msg (list *local-logger*
(defmacro log-emergency (string &rest msg)
`(log-X +log-level-emergency+
And then simply do (log-enter my-function-name) and the macro expansion will add the check for you. But it gets even cooler: you can wrap you function enter/exit like so:
(defmacro ldefun (logger function-name lambda-list &rest body)
"Defines a function with logging enabled"
`(defun
(unwind-protect
(progn
(log-enter
,@body)
(log-exit
This macro actually re-writes a function definition to include the log-enter/exit calls. But it gets even cooler: you can make sure that no matter what that errors get logged with this:
(defmacro with-logged-error (logger &rest body)
"Logs errors but allows them to continue up"
`(catch 'with-logged-errors
(handler-bind ((error (lambda (e) (log-caught-error
(progn
You can combine all of these into this:
(ldefun mylogger myfoo (x)
(log-info "The value of x is ~a" x)
(with-logged-error mylogger
(log-info "I'm about to do something that might signal an error")
(assert (eq x 5))))
These six lines become this in Java:
public void myfoo(int x) {
if (mylogger.isEnabled(Logger::ENTER))
mylogger.enter(this.getClass().getName());
mylogger.info("The value of x is " + x);
try {
mylogger.info("I'm about to do something that might signal an error");
assert(x == 5);
} catch (Exception e) {
mylogger.exception(e);
if (mylogger.isEnabled(Logger::EXIT))
mylogger.exit(this.getClass().getName());
}
if (mylogger.isEnabled(Logger::EXIT))
mylogger.exit(this.getClass().getName());
}
Later on in Lisp you may find yourself doing things like having a subclass dynamically adding a section of code to a lambda "owned" by its superclass (I needed that today for a threading issue). Anyway, if you're bored, give it a shot.
Now, I'd like you to cite an example where government services anywhere have outperformed any competitive, private-sector service. Amtrak would be a "great" place to start.
Publicly owned electrical co-op in my town of College Station, TX: provides electricity at about 30% less per kWh than the privately owned electrical utilities in surrounding towns.
You're not going to get the plum job at Google unless you know what a fixed-point function is and what it's good for.
What is a "fixed-point function" ?
My OSAP loan application had no mention of a criminal record check.
The US system uses a multitude of loan and grant programs including Stafford Loans, Pell Grants, Plus Loans, and state and university loans. All of them require a student fill out the FAFSA which explicitly does ask about drug use, and all students who have drug convictions are automatically ineligible for federal aid including grants.
Thus someone who smoked a joint at 16 and got caught will have a much harder time getting funding to get through school even if they have exceptionally good academic credentials. They could still apply for some private grants or simply work harder and take much longer to get through. OTOH, their upper-middle-class peers whose families had the money to hire lawyers and beat the drug convictions can still sail right through.
And so I payed attention,
Apparently you didn't pay enough attention: http://www.wsu.edu/~brians/errors/payed.html .
If your job is to ensure the smooth running of a chemical process plant unit, i.e. you are the shift engineer, then you cannot work when you are not physically at the facility. Industrial safety also precludes you working overtime except in startups, shutdowns and changeovers. Similarly for every other kind of manufacturing shift engineers.
There is one app that I couldn't get working properly in Fedora 8 without running it with a sudo - Nero Linux - and it annoyed me quite a bit.
k3b doesn't require sudo on my Debian system.
Do you need nero for DVD authoring?
How come this hasn't caught on?
Because money and power differences corrupt the judgment of the people at the top of *any* heap, yet those same people denigrate the science disciplines that can diagnose the problem and direct efforts to fixing it (sociology and psychology). In fact, in the USA economics and business schools are so divorced from the social sciences that they are generally unable to even see that they are operating under the assumptions of a reactionary right-wing frame, instead they accuse the other disciplines that attempt to be objective of having a left-wing bias.
inexpensive human capital
Everyone who doesn't live in Libertopia calls "inexpensive human capital" citizens, consumers, or workers, a.k.a. "the rest of us".
I only get on the IM networks when I have lots of time to blow off -- e.g. practically never. But I would do IRC at work in a heartbeat if only I could get most of my co-workers to use it.
I don't know exactly why it works, but somehow IRC (especially with a good GUI client) takes the edge of IM just enough that it becomes a useful communication tool rather than constant interruptions. But you can still DCC someone to get IM-like functionality, even with file transfers.