How did Jesus’ teachings turn into Catholicism?

Before I start, let me say I have a lot of respect for the modern Catholic church, and the work that pope Francis is doing.  If we look at the Roman Catholic church historically though, I think everyone would have to agree the the churches behavior diverged radically from Jesus’ teachings, and I’m fascinated about how that happened.

So, I was a little high the other day, and readying Robert Wright’s absolutely wonderful book “Why Buddhism Is True”, which is enlightening, witty and clever.  Everyone, really everyone should read it.  Go, buy it and read it now.  It will be a much better use of your time than reading this post.

Wecome back!  Wasn’t that a good read?  As someone who identifies strongly with Buddhism, but doesn’t have much knowledge or cultural investment in Buddhism, I was interested to learn about the existence of various schools of Buddhism.  This led me to think how this wasn’t much different than the existence of various sects of both Judaism and Christianity.  I’m sure the same applies to Islam, but being even more ignorant of Islam than I am about Buddhism, I can’t really pontificate on that.

From there my default mode network took me back to a conversation I once had with a young Swiss person who had made some disparaging remarks about Christianity and compared it negatively against Buddhism, saying something about how Buddhism didn’t lead to mass killings out of religious intolerance, or brainwashing people to follow governments, or some such thing.  Christianity’s violent and intolerant history is certainly troubling, and I sympathized with him on the topic, but I had to point out the (then) recent transgressions committed in the name of Budhism in Myanmar, and previously in Thailand.

Now as I learn the teachings of the Buddha, I’m quite shocked that such things could have occurred in the name of the Buddha, but then I thought about poor Jesus.  How the heck could anyone take the teachings of Jesus and decide yeah, Jesus wants me to go on a crusade, or heck, Jesus wants me to blow up an abortion clinic.   How did a commie hippie, who treated a prostitute as an equal wind up being the basis of a religion that treated women and sex in the way that Catholicism has.

No doubt many Muslims feel the same way about violent Islamic religious sects.

That would be a fascinating book:  the corruption of ideals — how various institutions corrupted the religious ideals on which their existence was founded.  Anyone know of good work on the subject?

Java gripes

I’m not a big fan of YAPL’s (Yet Another Proprietary Language), so I’m biased.  I will say that Java is much better than VB, and it’s probably a good choice for a lot of applications, but it suffers from the cultural and design flaws that always seem to crop up in proprietary languages.  I blame marketing.  The marketing departments of the companies promoting their YAPL’s foster tribalism among programmers.  I.E. they encourage programmers to identify themselves as   “I’m a YAPL-X programmer.  YAPL-Y programmers suck”.  It’s kinda like the console wars:  retarded.  The correct behaviour is to isolate the best language for a particular task, based on the constraints you are working under.     This leads  to frustrating books, articles, blog entries and forum posts, with people attacking and defending their particular YAPL, rather than discussing the technical issues as neutrally as possible.  This leads to a high noise to signal ratio when you’re trying to figure things out.

For example, I wanted to use Java SAX (Simple API for XML) for a very simple application.  Using google to search for tutorials or what not gets you really out of date information.  For example, the top hit for “Java SAX” gets you www.sasxproject.org, which would seem promising, but it was last updated in 2004.  Much of the methods have changed, as have the include paths, as have the status of the libraries, etc. etc.  The official JavaDoc documentation is up to date, which is better than nothing, but it’s not a very efficient starting point.

As another example, consider the problem of converting a byte array to a string representation and back.  As of the date of this posting, entering “java convert byte array to string” into google gets you the following link

Googling “java byte array to string and back” gives you this as the number one link.  When I hit that link I got an ad with sound, and of course there’s no information on how to solve the problem.  Someone has posted a clue, which may be accurate, that when calling new String(byteArray) it’s actually Object.toString that’s being called -> i.e. loss of information.  Ok, that’s cool, but how to get the desired effect?  Not only that, but if the responder is correct, that says very bad things about all the information arrived at by “java convert byte array to string”.

I wonder whas going to happen now that Oracle has aquired Sun’s holdings.  Franckly I’m not particularly hopeful, but in the absence of data I attempt to remain neutral.

Gecko’s Guide to GIT

I’ve convinced my work colleagues over at Gecko-Research to start using Git.  I’m a git neophyte myself, but now I’m in the position of setting up our Git repository, and teaching my colleagues how to use it. I’ve written up a little guide to using Git, aimed as a reference for myself and my colleagues.   As such, it’s just a list of the commands that we use on a regular basis, or the situations we are often confronted with (and how to deal with them).  The post is totally a work in progress, so it will likely change quite a bit over the next few months as I flesh it out as needs arise.

If you are interested in a general introduction to git, or a tutorial, I would suggest one of the following:

Git has a reputation for being difficult to use, or counter intuitive, but I think that’s just due to it being a distributed rather than central revisioning system (based on the concept of a central repository).  Some things do get tricky, but I think it’s primarily because git lets you work in new ways that can potentially trip you up.

Central repository systems are easy to conceptualize,  and they’re what people of our generation are used to, so they are easy to get started with.  Git  is based on a distributed model, in which each repository is equal (we can assign different roles to different repositories, but it’s not technologically imposed).    Considering that distributed systems are so becoming the norm (bittorrent, wikipedia, the free software movement, multi core computing, creative commons, blogging, twitter…) ,  I suspect tech heads growing up now will find thinking in a distributed way as simple as we old farts find the top-down, central-repository, client-server model.

Daily Use

Note that these comments are aimed at my colleagues. Your work situation may vary.

commiting

You should commit your work whenever you get anything done that can easily be summed up in one line (the commit message). There are other reasons to commit, so when in doubt, do a commit. It’s easy to go back if you need to. Committing doesn’t go on the net, it just tells your local git repository that you got some work done, and puts those changes onto the local index (git’s database of what’s what). Frequent commits will save you hassles. The command is:

 git commit -a

The -a tells git to commit all modified files (which are being tracked). You can also just commit specific files by using

 git commit <list of files>

more to come…

Configuration

gitignore file:

A gitignore file specifies intentionally untracked files that git should ignore.  It concerns files that are not tracked by git, and that you don’t want to track with git, so temporary files, results of compilation, compled documentation, etc.  The man page is here.  When git is determining what files to ignore it:

  1. Checks for a relevant command line option
  2. Check patterns from a .gitignore file in the same directory as the path, or in any parent directory.
  3. Check for patterns in $GIT_DIR/info/exclude
  4. Check for patterns in the configuration variable core.excludesfile

The man page describes the patterns, which are anyway pretty close to the usual *nix conventions that you’ll probably just get them right.  As an example, here’s my .gitignore file for a netbeans project:

*.class
*~
build/
javadoc/

This tells git to ignore any build or javadoc directories, as well as emacs temporary files.  Taking the time to setup a .gitignore file when you are starting a new project with git will make everything else more convenient down the line.

Collaboration: tracking multiple branches

Because of some wonky security policies on our institute’s network, we can’t directly push and pull from each other, so we go over a central repository. Many of us work on multiple machines, so we want to use the central repository as a convenience tool for synching up between our machines, but we don’t necessarily want out colleagues pulling our work-in-progress. The solution is for each of us to have our own branch. This post tells us how to start a new branch on a remote git repository. The steps are basically:

  1. Create a remote branch. This can be done with the command
     git push origin origin:refs/heads/new_feature_name

    (assuming your remote repository is called origin).

  2. Make sure everything is up to date with
     git fetch origin
  3. Start tracking the new branch with
     git checkout --track -b new_feature_name origin/new_feature_name
  4. Make sure everything is up to date by doing a pull.
    git pull

The third command,

 git checkout --track -b new_branch origin/new_feature_name

is one you’ll run several times, every time you clone a repository somewhere, you’ll want to use to track all the various branches you are interested in. That way you can checkout your colleagues (or bug fix) branches when you like, and merge them into your work whenever it is useful.

Situations

Deleting a branch. Okay, so you’ve been branching all over the place, and now you realize you have some dead hanging branches you really don’t want cluttering up your repository anymore.   To get rid of a branch on the remote repository, you’ll want to do the following:

git push origin :head/branch_to_delete

Bing

Youngsters to the web might not remember a time before Google, where search engines basically sucked. They were based on simple and stupid algorithms which were easily gamed, and only occasionally got you to a site you wanted to visit. Google was so successful because their search engine worked vastly better than the competitions. Back then, if you were looking on information on a particular subject, you would go through a list of search engines, until you got a useful hit. There were even meta search engines which agglomerated the results of several search engines. These all died out quickly after google went up.

Since Google, pretty much everyone I know just uses Google. If a particular search is unsuccessful, we try experimenting with different terms. I don’t think I ever go to another search engine.

But I try to be open minded. So when I heard that Bing didn’t suck, I gave it a shot. I picked 5 searches I might be interested in and search in Bing and Google. I consider it effectively a tie. Sometimes Bing’s results were better, sometimes Google’s, but in neither of them did I get a bullshit result that was clearly inferior to another’s.

So chapeau Microsoft. You appear to have gotten your head out of your ass and produced a respectable product. If you’re as successful with Natal as you were with Bing, you might even get me to buy one of your products!

What the Sotomeyer confirmation hearings have to tell us about the drug war.

So, people who are well informed about drugs, and have bothered to look over the medical evidence, are perfectly aware that X (MDMH) shouldn’t be a schedule 1 drug.  This is of course no surprise, since our drug scheduling system looks as if it was chosen by throwing darts.

Why is it illegal though?  The brief history is that MDMA was created by a guy called Anton Koellisch, working for the pharmaceutical Merck in 1912.  Apparently they were trying to develop a substance to stop abnormal  bleeding.  MDMA was just an intermediary compound on the route to methylhydrastinine, and Merck wasn’t interested in its properties.

Now, the next part is fascinating.  Apparently recreational drug users first determined the drug was worth taking, around 1970.  This led to a guy called Alexander Shulgin (who would have been around 50 at the time, working (I believe) as a p0st doc at UCSF to play around with it.  Apparently he called it his “low-cal martini”.   He in turn metioned it to a psychotherapist named Leo Zeff.   MDMA is very useful for  enhancing communications, reducing psychological defenses, and increasing the capacity for therapeutic introspection.

In the early 80’s MDMA started to catch on.  All the kids who grew up playing pac-man started hanging around in dark-rooms, listening to repetitive electronic music, and popping pills.  One of those pills was MDMA, and the Reagan-Bush “Say no to drugs”, “Say no to condom  education in schools”, “say no to Foreign aid unless you teach that abstinence is the only way to prevent aids, and forbid teaching about safe-sex” administration decided to say no to young adults having a good time and feeling more empathic to each other.

MDMA is an empathogen.  I don’t know if this is the accepted medical phrasing for what MDMA does, but take it from me, MDMA is an empathogen.  It makes you care more about other people.  This can be negative.  For example, if I have a single sixteen year daughter, I would discourage her from takine X at  a party full of strangers.  I would however encourage her as an adult to take with her partner.  It makes relationships richer and stronger, I promise you.

I have an informal ranking, which I call a drugs “Scary Monster” level.  It’s how much fear a drug evokes in a particular audience or demographic.  X is one of the more maligned drugs out there.  I think the average, over 40 American, and possibly european, sees X as worse than Cocaine, for example, which certainly doesn’t fit its ranking in rational harm rating.  My point here is, beyond being illegal (which it course should not be), it is villified disproportionately to the harm it causes.

For example, when Professor David Nutt, head of Britain’s drug advisory board recommended that ecstasy be downgraded to a class B drug, he tried to explain the relative risk inherent in taking the drug as being equivalent to the risk you take in riding a horse.  The point was to get people to understand that drug harm can be equal to harms in other parts of life.  This is an importnat thing to discuss, since the debate on drugs is typically so emotional and irrational, particularly on the side of the prohibitionists.   He wrote an article titled “Equasy: an overlooked addiction with implications for the current debate on drug harms”.  Equasy being “Equine Addiciton Syndrome”, which has caused ten deaths, and causes more than 100 road traffic accidents a year.  He goes to explain that many other activities in life (like motorcycling) are much more dangerous than man illicit drugs.

The prohibitionists were up in arms, calling for his resignation.  They can’t attack his science or his reasoning, both of which are flawless.  They instead must make emotional attacks, claiming he is insensitive to the families of victims of drug abuse.  Sigh.  So victims of drug abuse suffer more than victims of horse riding?  Why?  The fundies react very badly to rational discourse on the relative risks of drugs.  Why is that?

I’ve long had the opinion that the problem is simply fundamentalism.  They see drug use as a threat against their culture.   There’s no question that this is the case for the drug policies of the Nixon, Reagan, Clinton and Bush administrations.   I also think this is part of the particularly irrational attitude towards X.  It makes you feel more empathy, and fundamentalists are anti-empathy.

Now I feel affirmed.  Warren Richey writes about the Sotomeyer Hearings that

Republicans Question Need for “Empathy”

Republicans repeatedly criticized President Obama’s stated goal of seeking judges with “empathy” for “people’s hopes and struggles.” They questioned how the concept of empathetic judges could coexist with the well-known portrayal of a blindfolded Lady Justice.

Finally I have proof that  the sector of our culture which represents religious fundamentalism and intolerance is genuinely anti-empathy.  I knew they were of course, as did a great many people.  But now they are going so far as to say it openly, which means I can make this without a burdensome process of proof.  It’s easy, they don’t deny it. We don’t need empathy in the justice system? That’s some fucked up shit right there.

I think the fundies are anti-X in part because they are anti-empathy, and X encourages empathy. Used under the proper conditions it does so in a lasting and meaningful way. Criminalizing it only encourages its use in harmful locations, and decreases its positive use.

If we consider our culture’s evolution, I think there’s a real possiblity that empathogens and psychadelics can play a meaningful role in hunting down and de-clawing harmful social memes. Thinking about it like that, religious intolerance and flexibility, which is so symbolized by the modern Republican party, is like a mind virus.  Lack of empathy in our culture can be treated effectively with MDMA (as part of a directed therapeutic process), and prohibition of MDMA is a defence mechanism of the anti-empathy meme.

When one goes further to consider that addicts and people who do abuse drugs are people with medical conditions, deserving of our empathy and support, it’s clear that entire concept of drug criminalization is a defense mechanism against empathy.

Micheal Jackson is Dead!

You know, thinking about MJ dying does make me sad. But the real tragedy isn’t his death, it was his life. All these people saying “we should remember him as the great entertainer he was” would be better off trying to learn a lesson from his life. What is that lesson? I don’t know, but I guess it has something to do with the trappings of fame and wealth, and the dangers of not looking inward.

Fedora 11 Post Install Configuration

Fedora 11 is out, so it’s time to update my notes on configuring my fedora install. In the examples I will use a default Fedora install (with development tools selected), on my 64 bit Sony vgn-s2750N laptop, which I will henceforth refer to as Sunny.

Here’s what I have to do to get Fedora 11 running like I want it:

  1. Fix the DNS lookup bug. On all the machines I administer, this manifests itself as massive dns lookup failures, with the effect that although you can ping an address, you don’t have any internet access (no web browser, no yum…).  This answers the question:  I have an internet connection, but I can’t use the web, WTF?
  2. Access to fusion
  3. Add MP3 support/get Amarok working.
  4. Get Flash working (people need their youtube).
  5. Graphics acceleration
  6. Make FAT partitions writeable by users, and add ntfs support.
  7. Disable physical file folders.
  8. Enable Ctl-Alt-Backspace

1. Fix the DNS bug
Apparently there is a known bug, which mucks up the domain name lookup with certain ISP’s, of which bluewin (my ISP) is one. In the bug description the complaint is that you get unreliable name lookups, but in the case of bluewin (my isp), you get no successful lookups.  A workaround is:

  1. Find out the network interfaces the machine has using the command “route -n”.
  2. Create a file:  /etc/dhclient-< your network interface name here >.conf consisting of the line
    prepend domain-name-servers 127.0.0.1;
  3. Start dnsmasq (‘service dnsmasq start’).
  4. tell dnsmasq to start every time the computer does (‘chkconfig dnsmasq on’)
  5. restart the network connection (‘service NetworkManager restart’)

So on Sunny the Sony I want to get my wireless LAN working right on Bluewin. Running ‘route -n’ tells me my network interface is ‘wlan0’ (which I could have guessed). So I do the following (as root of course):

echo 'prepend domain-name-servers 127.0.0.1;' >  /etc/dhclient-wlan0.conf
service dnsmasq start
chkconfig dnsmasq on
service NetworkManager restart

And presto, my internets work again. I don’t put it on this list, but at this point I run a ‘yum -y update’ to get the base install up to date.

2. Access to fusion:
Fusion is a merge of the largest existing addon repos, and means to be the extra repo for fedora, including (separate) free and non-free packages that Fedora is not able to ship of license or export regulations (see comment by ingvar).  Apparently it is now possible to add fusion support through a GUI, but I find it much more efficient to just do:

rpm -Uvh http://download1.rpmfusion.org/free/fedora/rpmfusion-free-release-stable.noarch.rpm http://download1.rpmfusion.org/nonfree/fedora/rpmfusion-nonfree-release-stable.noarch.rpm

This is a good time to do another yum update. You’ll have to accept a couple of no-key warnings.

3. mp3 support.
I still use Amarok, which I am still unsure about recommending. I found Amarok 1 vastly superior to the alternatives however, so I’m hoping Amarok 2 eventually becomes awesome. In addition to Amarok, I want lame for when I rip my CD’s for my car mp3 player, mp3 support for Totem, etc. So I do the following:

yum -y install amarok lame* gstreamer-plugins-ugly xine-lib-extras-freeworld

And things seem to be running all right.

4. Get Flash (i.e. Youtube) working This solution comes from here

rpm -ivh http://linuxdownload.adobe.com/adobe-release/adobe-release-i386-1.0-1.noarch.rpm
rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY-adobe-linux
yum install nspluginwrapper.{i586,x86_64} alsa-plugins-pulseaudio.i586
yum -y install flash-plugin

Note that the third line is only required for 64 bit Fedora.

5. Enable your 3d hardware acceleration. In my case, I just run ‘yum install kmod-nvidia’ and restart X. If you have a radeon card, I suppose the solution is the obvious one.

6. Make the fat drive writeable, and add NTFS write support, so people can easily work with Windows.
For any fat partition, change the umask in fstab to 000. For NTFS support:

yum -y install ntfs-config.noarch

7. Disable “physical” file folders. This is the annoying behavior, default in gnome, that opens a new window for every folder that you open. Get rid of it by double clicking on a folder, and in the resulting window open edit->preferences->Behavior, and check the box for “Always open in browser windows”. There is a scriptable way to do this, so if someone wants to tell me, please do.

8. Enable ctl-alt-backspace.It always frustrates me when a distro moves away from supporting the power use to supporting the neophyte. I think there are plenty of neophyte oriented OS’s and distros around. I use Fedora instead of Ubuntu because Ubuntu aims too much at the dumb asses, and Fedora tends to support the people who want to learn and be efficient. Unfortunately the Fedora guys do make dumb-ass-friendly decisions, such as the decision to disable ctl-alt-backspace, which I find to be a very poor decision. Who hits this key sequence by accident? Anyway, to enable it in Fed 11 do System->Preferences->Keyboard, choose keyboard layout options and enable the checkbox for “key sequence to kill the x server”.

Jane Goodall talks good sense

So, another fantastic video over at TED. The talk title is “What separates us from the apes?”. It turns out it is our highly developed language. The talk goes over so much more though: environmental catastrophy, destruction of diversity, and of course our mad cruelty to animals. She’s a fantastically wise and observant person. A pretty attractive woman too.

The productive programmer

Just checked out a pretty fantastic book, The Productive Programmer by Neil Ford.

I’m only about half-way through it, but so far I find it fantastic.  I read it at night before going to bed.  This speaks of its readability, but it’s a bad strategy, since I get excited while reading it and want to try things out.  Every night for the last three nights I’ve said to Bettina “man, I wish I’d read this book years ago”.

It’s obviously aimed at the developer, but I think about 40% of the tips in it are relevant to Bettina, who is a school teacher.  The thesis of the book can be summarized as follows:  The GUI makes things easier for a computer neophyte, but less efficient for the power user.  As programmers, a major part of our work is data entry (we form the data in our heads, but it’s gotta get into the computer).  So it behooves to put a little effort into making the data entry part more efficient.

He discusses various repetitive, boring tasks that chew up our time and attention, and then gives tricks to improve your efficieny, on windows, mac, and Linux based systems.  He also discusses good algorithms for figuring out how much time to spend automating problems, and how not to shave yaks.

Me personally, I would expand his thesis to include end users.  How much time do you spend working with your computer?  Bettina is a school teacher and she spends at least 20 hours a week on the damn thing.  Me I spend like 60.  I think 20 is about minimum for anyone who works with a computer at all.  So I think we’d all benefit from learning better computer work habits.  Because the author writes to programmers however, he rightfully assumes a certain amount of computer savy.  This might make the book unnaproachable for less technically literate users.  I have a hard time judging that.  But if you think you can read it, I highly recommend it.

It’s also inspired me to start posting the most useful productivity tips that I run across, so look forward to that. Does anyone know of an existing blog that specializes in programmer-productivity tips (I’m not talking language stuff here, just computer-human interaction)?