GNU Emacs Developement Inefficiency

Perm url with updates: http://xahlee.org/emacs/GNU_Emacs_dev_inefficiency.html

GNU Emacs Developement Inefficiency

Xah Lee, 2010-07-15

Posted a bug about a problem in minor modes. bug#6611 However, it got closed within a min it was published, and wrongly! (For detail about the tech issue, see: How to Turn a Minor Mode on/off/toggle?)

It got closed right away i suppose partly has to do with my unforgiving nature of criticizing and run-in with some GNU emacs developers in gnu.emacs.help and comp.emacs in the past 5 or so years.

It's quite frustrating trying to contribute to GNU Emacs. In the past 3 years, i've submitted some 50 bug reports i think by now... without looking at the records, i think at least 10 or so are hard bugs that got fixed. Some of my outspoken criticisms, had their effects, and i suppose some emacs 23's UI changes are influenced by my criticisms. (e.g. line-move-visual, text selection highligh by default, and i noticed yesterday that emacs 23.2.1's doc now removed the phrase “real-time display editor”, which was a item i criticized in Problems of Emacs's Manual.)

I've also written to Richard Stallman a few times in private in about 2008 or 2009, about documentation improvements. With extreme politeness and respect on my part. Without going into detail, i'm just disenchanted by his reaction. In short, it appears to me he did not pay much attention, and basically in the end asked me to submit changes to him. Yeah right. The whole shebang seems to be very well described by Ben Wing. (See: GNU Emacs and Xemacs Schism, by Ben Wing.) (Richard Stallman's emails are pretty short, just a couple terse sentences; but he does, however, whenever he got a chance, tell his correspondents to use the term GNU/Linux, and ask them to contribute.)

Re-writing the whole doc in a modern perspective might take me one month full time. (e.g. 160 hours) But if it were to be done in a public way, or submit to him, the time it takes to communicate, email, write justifications, create diffs, etc, can easily take half a year full time (960 hours). In the end, i'm not even sure half of the text in the new doc would be accepted.

The GNU Emacs's bug database sucks. (it's using Debbugs.) I have problem finding all bugs posted by me or by a bug number. Hard to find any bug by its search feature. They did not have a bug database, only in around 2008. Most commercial software have a bug database system in 1990s, and most large open source projects have one by early 2000s. (I wrote a bug tracker in 1998, 4k lines of Perl (with CGI, MySQL), in about 2 weeks, for a startup brainpower.com.)

Am pretty sure there are several good “FSF Free” bug databases. (see: Comparison of issue-tracking systems) Few years ago, some may have problem to be politically qualified to be “Free” for FSF to adopt. However, these days there are many that FSF officially sactions as “Free”. However, when you look at FSF, you see that even when a software became FSF Free, they usually are still picky with lots qualms, and typically always ends up using their OWN ones (i.e. from GNU project), even though it is clear that it is inferior. (the GNU emacs dev's revision control system was CVS up to ~2009. CVS has been phased out in early 2000s in majority of software orgs or projects. (GNU emacs now uses Bazaar (BZR). since 2010.)

These are consequence of old and large orgs, with its old policies and bureaucracies. See: “Free” Software Morality, Richard Stallman, and Paperwork Bureaucracy.

Who are the main developers of FSF software these days? Mostly, they are either paid as FSF employee, or students still trying to break out their craft in programing, or 40/50 years old semi-retired programers who otherwise isn't doing anything. Those willing and able, spend time and get decent salary in commercial corps, or went to start their own projects or business that'd be far more rewarding financially or recognization than being another name in FSF's list of contributors.

These days, FSF and Richard Stallman more serves as a figure-head and political leader in open source movement. FSF's software, largely are old and outdated (e.g. unix command line utils), with the exception of perhaps GCC and GPG. If we go by actual impact of open source software in society, i think Google's role, and non-profit orgs (such as Apache, Perl, Python, PHP, various langs on JVM), and other commercial orgs (e.g. Apple, and other commerically founded project hosters for hosting open source projects), exceeded FSF by early 2000s.

2010-07-16 Thanks to Alan Mackenzie for correction on revision control system used by GNU Emacs.

Lazy Muncie (music video)

Perm url with updates: http://xahlee.org/funny/lazy_muncie.html

Lazy Muncie? (Video)

The vid is written and directed by Chris Cox. The 2 guys are Kirby Heyborne and Chris Cox.

LOL. This song describes the middle USA scenes and sentiments very well.

This is a parody of the song Lazy Sunday.


Beat It (song)

Perm url with updates: http://xahlee.org/Periodic_dosage_dir/sanga_pemci/beat_it.html

Beat It

Xah Lee, 2010-07-14

Beat It (1982), a song by Michael Jackson. A song that simply describes the situation of power struggle, among male human animals.

Title: Beat It
Singer: Michael Jackson
Lyrics: Michael Jackson
Music: Michael Jackson
Date: 1982
They told him don't you ever come around here
Don't wanna see your face, you better disappear
The fire's in their eyes and their words are really clear
So beat it, just beat it

You better run, you better do what you can
Don't wanna see no blood, don't be a macho man
You wanna be tough, better do what you can
So beat it, but you wanna be bad

Just beat it, beat it, beat it, beat it
No one wants to be defeated
Showin' how funky and strong is your fight
It doesn't matter who's wrong or right
Just beat it, beat it

They're out to get you, better leave while you can
Don't wanna be a boy, you wanna be a man
You wanna stay alive, better do what you can
So beat it, just beat it
「• truth or dare = a party game. See: Truth or dare
You have to show them that you're really not scared
You're playin' with your life, this ain't no truth or dare
They'll kick you, then they beat you,
Then they'll tell you it's fair
So beat it, but you wanna be bad
Just beat it, beat it, beat it, beat it
No one wants to be defeated
Showin' how funky and strong is your fight
It doesn't matter who's wrong or right

This is a great song. The lyrics sung the eternal struggle among males. In a superficial level, it applies to highschool boys, gangsters. But deeply, it is the same situation in corporate ladder climb, politics, and power struggle in general.

As George Bush said, “bring it on!”.

See also: Palpatine: The Portrait of a Perfectect Sociopath and Master Politician.

The music video is also very well done. It is directed Bob Giraldi. (b1939)

It's funny that the Asian pop queen Teresa Deng, known for her beautiful voice and gentle, serene, yearning, songs, also have covered this song, on stage.

“Beat it” sung by Teresa Deng. Taipei Concert in 1984. Beat It, by Teresa Deng

For more of Teresa songs, see: Teresa Deng Songs.

Asides from the ethology aspect of this song, of interest to to alt.usage.english readers, is whether the phrase “beat it” is proper.

What alternative, more correct, phrase would be?

“Get out of here” does not fully cover it. Because it's not about telling someone to leave.

“quit it” isn't right neither. Because it's not about quitting something. “quit it” lacks the context as conveyed by the word “beat” — to hit, batter, as in, be done with it.

Of course, we should remember that there is a literal interpretation of “beat it”, i.e. hit it, as a collision carried out by a baton intended to inflict injury, which, would be a foolish interpretation.

“leave it”, again lacks something to be desired. It lacks the meanness.

Ok, then what does “beat it” really mean? How can it be rephrased so that the result can be interpreted literally while still covers its meaning? I suppose it would be something like “stop getting involved”. Of course, such a plain phrase wouldn't fly. It lacks the colors, the ambiguousness, the sizzle.

Ok, stop getting involved, seems to be the meaning. Now, back to the ethology aspect. If it is simple matter of will and decision, then why do brawls and aggression between men, happens throughout human history?

When you look at two dogs fighting for a bitch for mate, can you tell the dogs to simply not get involved? When they do pissing fights, can you tell them that territory isn't that important? With territories, associated with is the quality and quantity of food. With mating, associated is procreation and offspring. Sure, you can stop doing power struggle all together, but you risk is survival and extinction. That, is the bottom of things.


Emacs Lisp's Library System

Perm url with updates: http://xahlee.org/emacs/elisp_library_system.html

Emacs Lisp's Library System

Xah Lee, 2010-07-13

This page explains emacs library system. For example, what's the difference between library, package, features? And what's the difference between load-file, load, require, autoload?

What's Library, Package, Feature?

No Namespace

Emacs lisp the language does not have name spaces. Everything is global, with dynamic scope, with some shadowing mechanism. So, don't expect library or module to be language defined name space constructs that somewhat enforce name space and file name relation, as in Perl, Python, Java.

What's the difference between a Package and Library?

The terms “package” and “library”, are used losely in emacs/elisp manual to refer to any useful elisp file. They are not technical definitions in elisp.

A “library” usually refers to elisp file containing a collection of lisp functions, to be called by other lisp source code. For example, the command backward-word is defined in “simple.el”, which is a library of functions.

A “package” usually refers to something useful for emacs users, like a major mode or minor mode. The term “module” is not used by emacs.

Emacs's Concept of “Feature”

The term “feature” has some meaning in elisp, but is not mechanical. A “feature” is a elisp symbol, that is intended to represent the functionality provided by a emacs package.

For example, here's part of the value of “features” when i do “Alt+x describe-variable Enter features”:

ibuffer etags ring cc-mode cc-fonts cc-menus cc-cmds cc-styles
cc-align cc-engine cc-vars cc-defs xlsl-mode encoded-kb speck
sgml-mode dired info newcomment desktop recentf tree-widget wid-edit
advice help-fns ...

A elisp file can call “(provide ‹some symbol›)” near the end, which adds that symbol to the “features” list. The purpose of features and the “features” variable is to provide a way for emacs to know if something is already loaded. The “require” function checks the “features” to see if a symbol is already there before loading the file.

Package/Library/Feature are not Managed

There is no absolute relation between any concept of package/library/feature/autoload facilities and the file name.

By convention, if a elisp file name is “xyz-mode.el”, it OFTEN provides a lisp symbol “xyz-mode” as its feature name (it may not), and the function to invoke the mode is OFTEN named “xyz-mode”. Sometimes the “mode” part is dropped in the file name, feature symbol, or function name.

This is only a lose convention. There are a lot exceptions in many bundled emacs packages. For example, the file “lisp-mode.el” provides the symbol “lisp-mode” as feature, and is invoked by “emacs-lisp-mode”. The “cua-base.el” file provides symbols “cua-base” and “cua” as features, and is invoked by cua-mode. The “text-mode.el” file does not provide any symbol for feature, but is a quite useful mode invoked by text-mode. The file “desktop.el” provides “desktop” as feature, and is invoked by desktop-save-mode.

All the above means, you could have a file named “xyz.el”, which provides a feature named “abc”, while it really just provide a mode to user with the command name “opq-mode” or sometimes just “opq”, and it might be displayed in mode line as “OPQ helper”, or anything else. And, this file can be considered as a package as well as library.

File/Package Loading Mechanisms

Emacs's module system is a primitive system, centered on loading file, with some slightly high level things such as its “features”, “autoload”, “require”. However, nothing is strict or enforced by elisp.

Function NamePurposeTech DetailComment
load-fileLoad a file.Load one specific file.Use this if you have one very SPECIFIC file at one particular file path.
loadLoad a file.Load a file by searching thru var “load-path”. Also, tries to load a compiled version (.elc) if exists.Use this if there are several possible location for the file, and you are using a short file name such as “undo.el” or “undo”, and you want to load the compiled version if it exists (“undo.elc”).
requireLoad a package if it has not already been loaded.Checks the var “features”, if symbol is not there, then call “load” to load it.Best used in elisp source code, similar to other lang's “require” or “import”.
autoloadLoad a file only when a function is called.Associate a function name with a file path. When the function is called, load the file, and execute the function.It is good to use this when you install a package. It save startup time and makes emacs use less system resource.

See also: How To Name Your Emacs Major Mode.

Isn't this all very bad?

Yes it is.

Though, it's just the state of software. Many most popular langs, such as C, C++, PHP, do worse. They don't have a module system neither, but worse, they load a file by “include”. Note that even Scheme Lisp didn't have module system, until R6RS, released in 2007, and the new module system defined in it is widely criticized, and R6RS caused Scheme community to split.

Death of Newsgroups

Perm url with updates: http://xahlee.org/UnixResource_dir/writ2/death_of_newsgroups.html

Death of Newsgroups

Xah Lee, 2010-07-13

Microsoft is closing down their newsgroups. See: microsoft.public.windows.powershell.

I use comp.lang.lisp, comp.emacs since about 1999. Have been using them pretty much on a monthly basis in the past 10 years. Starting about 2007, the traffic has been increasingly filled with spam, and the posters are always just the 20 or 30 known faces. I think perhaps maybe no more than 100 different posters a year. Since this year or last year, comp.lang.lisp is some 95% spam.

comp.emacs is pretty much just me.

gnu.emacs.help is not much better. It's pretty much the same developers and the same few elisp coders, with perhaps 1 new face with once-per-lifetime post every few days. It is doing a bit better because it is connected to FSF'S mailing list.

comp.lang.perl.misc is dead few years ago. It's filled with just snippet of FAQs that's posted by machine. There's perl.beginners since 2002, and it's a moderated group.

The one newsgroup that i use that's still healthy is comp.lang.python. Part of the reason it's healthy because it's connected to a mailing list, and python has become a mainstream lang. Though, it is also infected by a lot spam in late years.

I did a study of language popularity in 2006 by graphing newsgroup traffic thru the years. See: Computer Language Popularity Trend. I thought about updating it now and then, but it's useless if the majority of posts are machine generated spam.

For vast majority of people who is not a regular user of newsgroups in the 1990s or earlier, i suppose newsgroup has been dead since perhaps 2002.

Much of public dicussion for programing happens in email forums and web forums. For example, Microsoft has technet, Apple has dozens of mailing list of its tech on its site, Google has too many of its own tech discussion groups, each with a mailing list, blog, web feed, and whatever new communication tech they are inventing. PHP, one of the top 5 most popular lang, does not have a newsgroup, but it's discussion forum and wiki. And lately there's Stack overflow, a mostly Q & A forum for any programing lang or computing tech, which become quite popular. And there's also Math Overflow for math.

It's somewhat sad. Because newsgroup once was the vibrant hotbed for uncensored information and freespeech, with incidences that spawned main stream public debate on policies, or change of nations. (scientology being one famous example, then there's Cindy's Torment censorship, then i remember also several cases of political dirty secrets being released in newsgroups ) These days, much of this happens in the blogs and there's Wikileaks.

PowerShell as cmd.exe or Bash

Perm url with updates: http://xahlee.org/powershell/commands.html

PowerShell as cmd.exe or Bash

Xah Lee, 2009-07

PowerShell provides many aliases that emulates cmd.exe or Bash. So, if you are familiar with cmd.exe or bash, you can start using PowerShell as replacement. Here's a table showing some of the equivalent commands:

Path Manipulation
PowerShell CmdletPowerShell aliascmd.exebashPurpose
Set-Locationsl, cd, chdircd, chdircdChange dir
Get-Locationgl, pwdcdpwdShow current dir
Get-ChildItemgci, dir, lsdirlsList current dir content
Push-LocationpushdpushdpushdSave current path to stack
Pop-LocationpopdpopdpopdChange to last pushed dir
File Manipulation
PowerShell CmdletPowerShell aliascmd.exebashPurpose
Copy-Itemcpi, copy, cpcopycpCopy file or dir
Remove-Itemri, del, erase, rmdir, rd, rmdel, erase, rmdir, rdrm, rmdirDelete file or dir
Rename-Itemrni, renren, renamemvRename file or dir
Move-Itemmi, move, mvmovemvMove file or dir
Text Processing
PowerShell CmdletPowerShell aliascmd.exebashPurpose
Get-Contentgc, type, cattypecatGet file content
Select-Stringfind, findstrgrepShow texts matching a pattern
env var Manipulation
PowerShell CmdletPowerShell aliascmd.exebashPurpose
Write-Outputecho, writeechoechoPrint strings, variables etc. to standard output
Set-Variablesv, setsetsetSet the value of a variable / create a variable
Process Management
PowerShell CmdletPowerShell aliascmd.exebashPurpose
Get-Processgps, pstlist, tasklistpsList all currently running processes
Stop-Processspps, killkill, taskkillkillStop a running process
Help Facilities
PowerShell CmdletPowerShell aliascmd.exebashPurpose
Clear-Hostcls, clearclsclearClear the screen
Get-Helphelp, manhelpmanHelp on commands

Not Case Sensitive

PowerShell commands are not case sensitive. “dir” is same as “DIR” or “DiR”; “Get-ChildItem” is the same as “get-childitem” or “get-childITEM”.


GUI Makes People Dumb?

Perm url with updates: http://xahlee.org/UnixResource_dir/writ/gui_and_dumbness.html

GUI Makes People Dumb?

Xah Lee, 2010-07-10

This post dispels the belief common among tech geeker circles that user-friendly software make users dumb.

On 2010-07-08, David Kastrup <d...@gnu.org> wrote:

I think the point was that the manual was not deficient concerning the information it provides, but in not making Xah Lee want to read it.

In a way, it is a losing battle.  People expect software to just work without reading manuals.  95% of all Word users, for example, create their documents by mostly visual manipulation of their text without having a clue about underlying structures like references, style sheets and so on.

that's called progress.

vast majority of people who makes a living by coding, don't know any assembly language. They use scripting langs such as php, Visual Basic, javascript, python, perl, and probably a significant of them don't even know a language proper, e.g. they are html, css, Dreamweaver, Flash etc coders.

often there's complaint heard in the form of a sigh that sneer upon the younger generation, thinking they are uneducated and idiotic, but quite the contrary. (slide rule vs electronic calculator, check vs credit card use, hand writing vs type writer, type writer vs word processor, ...)

The result is unmaintainable crap, but they would not know better.  Word tries keeping up in this battle of computer illiteracy by doing things like enumerations, styles and so on "automagically", second-guessing the user, and the user tries second-guessing Word in order to get around that.

yes, there's something to be said about learning the tools well for a profession.

however, this must be differentiated from requiring users to understand the implementation or the science behind a tool. Many tech geekers unconsciously confuse this.

Also, if you take a look from the other side of the coin, the stereotypical “Microsoft using idiots” create incredibly crappy documents, but overall, the technology made it possible for a thousand fold more people to contribute to this world in diverse fields. In fact, many of these “idiots”, are professors and scientists and engineers. (in a similar way, a typical hardcore tech geeker, who can drill down on tech detail of C, C++, Java, perl, lisp, tail recursion, monads, macros, pointers, arrays, garbage collection, RFCs, etc and etc, but are a complete idiot to fields of psychology, legal system, history, basics economics... etc.)

personally, i'm a friend with few older generation mathematician professors, who run conferences or are chairman or presidents of universities or large well known academic organizations. These people's IQ, are probably all above any emacs developers (counting Richard Stallman). These people, won't even be able to grok what emacs is actually used for. It'd be hard pressed for them to understand what a embeded scripting language in a application really means. In fact, most won't even try. Here we can actually see a phenomenon that might be interesting to tech geekers. In many professional mathematician's minds, programers are considered inferior brainers, that programing field is something trivial, a mere matter of some typing and dicing and fidgeting with their theories.

It is an escalation of mutual cluelessness.  The more userfriendly a piece of software becomes, the more this becomes a problem for _competent_ people willing to learn about their tool.

This train of thought, is prototypical of tech geek thinking. It comes in a chantable form too that we often see these idiots put in their sigs.

It bears nothing to reality. It amounts to something equivalent to, say, something as factual and meaningless as “the world has become more dumb.”.

It's incredible how this mentality tickles the tech geekers, as we can see already a bunch following heartily praising this summery. The thought that easy-to-use or GUI based software creates a vicious cycle of more idiots, is a pleasing thought to tech geekers.

Psychologists have studied this. In one example, different people perceive different aspects of identical things. (e.g. flashing a photo, and guys remember it as a photo of a beautiful chick, while others don't remember there's a woman in it.) And or people will have opposing conclusions given a identical article. (e.g. the leftist will perceive a concrete evidence for leftist ideology, while rightists see concrete evidence of rightist ideology (while the “‘Free’ Software” camp see confirmation of the need for software “freedom”! (See: “Free” Software Morality, Richard Stallman, and Paperwork Bureaucracy) )) People will defend to death their (irrational) beliefs. The severe case is a form of self-deception, from beliefs in God to politics to love relationships.

It has to do with protecting one's own mental image and with that generating the juices for to go on. This may seem all illogical... but you know how there's many personality disorders and psychological illness and the phenomenon of mental breakdown? A gist of it is that human animals are just not logical machines, the working of the mind, the constituents to go on living, is filled with seemingly illogical complications.

(personally, i have struggled with a quest to become a machine-like being, e.g. like those of Mr Data or Spock in the StarTrek scifi. Been fret with this for some 20 years. Part of it is inborn personality, a inclination towards what's called a schizoid personality, and part of it is a quest to have the most powerful, logical, mind without emotion. It'd be a booklet to write about my experiences in this. (most tech geekers will probably think if it can done then wow that'd be great... (it's not what you think!)) (and besides a personal tale, there's also many scientific aspect of this. On the computer science side: can machines think? why yes or no? when circuits becomes sufficiently complex, will it develop emotion? Emergent phenomenon, complexity theories, cellular automata... and on the psychology/neuro-science side: is it possible for a human animal be totally emotionless? (note that many Hollywood movies depict such (fascinating!) character to various degrees.)) )

At least Emacs is at its heart and in most of its modes a WYSIWYG system with regard to the actual file contents: regardless of the crap people do, what ends up on disk is that what they see on their screen.

I have no idea what to do to make people lean towards looking at the documentation.  Emacs has a help menu, and those also point to tutorials explaining the basics in most local languages.

But people look at documentation mostly when they run into problems they can't deal with on their own.  And the more userfriendly Emacs becomes, and the better its menus and interactive helps become, the less people become inclined to bother looking for help.

been writing already long... so i'll cut short here. All of the above is actually not exactly relevant here. We can go on philosophizing about whether people are getting more dumb or whatnot...

but the issue here is the quality of emacs's documentation. A documentation, has a quality. This quality can be measured. It can be measure in many ways, depending on your purpose. e.g. how good is the use of the english language in conveying information? how easy is it for readers to understand? how impeccable is the style with respect to logicians? How well is the grammar? How well are the over-all structure organized? will people LIKE the manual? ... so many and so many.

but in short, here's one thing to consider: i think emacs manual is well written (generally speaking), but it is largely written in the 1980s. The bulk of it, the organization, the style of what things are presented, the verbosity of the words to convey a idea, ... are all geared in the computer of a era 2 decades old.

i wrote something about this aspect, it can be seen here:

for a glimpse of the era of computing that emacs's manual was in, see:


2010-07-10 B T Raven wrote:

Maybe at the end of that "Road Ahead" there is the final Borgesian data base that contains all possible compositions. Then if you want to write a piece of expository prose arguing for the healthfulness of Twinkies, you can just pick the document from a menu. Voila! Magnum opus determined, dared, and done.

you mean like: World Multiconference on Systemics, Cybernetics and Informatics????

and Larry Wall's post-modern stuff? like the following chantable quote?

The difference between theory and practice in theory is much less than the difference between theory and practice in practice.

See: Perl: Theory vs Practice.

and “The three principal virtues of a programmer are Laziness, Impatience, and Hubris.”, right? See: Larry Wall and Cults.

and the unix philosophy KISS right? See: The Nature of the Unix Philosophy.

My point that you were replying to, was about how tech geekers ignorantly attribute laziness or stupidity to non-tech-geekers. And my method used to convey this, is by a analogy, that indicates that computing tech geekers are in general too idiotic about everything other than computers. That, when you sneer non-techies for their cluelessness about using emacs or applications, you should look at the mirror and think about how at this very moment those business people, lawers, politicians, are laughing at you about how eternally-clueless you are of basic social matters.

The moral of this is that, if a businessman concludes that your lack of social skills is due to you being too stupid or too lazy, then he's a idiot, just like when you conclude that user-friendly software makes users more stupid.

the reason i wrote in such a style and comparison, is due to, a reaction from the idiotic style widely purveyed by the tech geekers, as, if you will, a retaliatory refutation, which, mirrors and puts a dagger right in the heart of matter. Did you enjoy reading it?

This article is originally from a post in gnu.emacs.help, that turned into a flamewar. groups.google.com