The Woke Dream

I recently watched The Dolls House episode of The Sandman. After having been disappointed with the adaptation of American Gods, I had declined to consume the television adaptation of the Sandman, a work that hold a profound place in my emotional and spiritual development. Even when most skillfully adapted, the transitory and paced nature of a story as deep and far-removed from common existence cannot be as profound an experience as one would have in print. In print one can flip back and forth to puzzle out hints and foreshadows, one can dwell on a particular piece of dialog and read it over and over if it seems to have some profound insight to offer. Rewinding and seeking audiovisual media does not offer the same experience.

Alas, my wife was not able to get into the Sandman comics, and a colleague of hers recommended the show, so we resolved to find some time to watch it together. As is the norm today, adjustments to the characters were made to make the cast more diverse. In principle I find this a reasonable choice, but I am of the opinion this something that needs be done with care, and that buried within the toxicity of the anti-woke propaganda there is a core truth that should be recognized. This goal of this article to explore this within the choices made in The Sandman.

By the time I was finished with episode “24/7” I was impressed. There were a number of completely unnecessary adaptations to the source material, but the desired goal was accomplished with no harm. For example, Lucienne was white in the comic and Vivienne Acheampog is not, but she’s a good actress and plays the role well. While “24/7” had extensive adaptions to the source material, the spirit, impact and meaning of the original source had been excellently accomplished.

I had a shock when I realized they had made the decision to make Rose and her brother black as we are later to find out that Rose is the descendant of a wealthy English heiress, Unity Kinkaid, and Dreams’ sibling Desire. I considered that there were a number of ways that this could be managed in a thoughtful manner — Desire could be cast with a black actor or actress which would have been a bit complicated but relatively harmless. The Kincaid family could have been a member of a vanishingly small number of wealthy and/or privileged people that may have been in existence in England circa WWI.

This was not the case. In “The Dolls House” we learn that Rose’s ancestral wealth comes from owning a large sugar concern. I contend the following: For a person who cares about healing the harms of racism this should be a far more offensive decision than an all-white cast might have been. The sugar industry has been one of the historic drivers of racism and slavery. It was the introduction of slavery that turned sugar into common comodity and to ignore this is to white wash historical and institutional racism, and in turn the wealth generated by the sugar industry was one of driving forces behind slavery and racism in the British empire. It is like having a black American character find out they are the descendant of a wealthy black cotton plantation owner.

This phenomenon is not difficult to find. In one episode of Doctor Who, The Doctor travels back in time to Texas in the 50’s and has an encounter with a black police officer in Texas which simply ignores the history of racism in the U.S. In the film version of Captain America’s origin story we works together with the howling commandos, amongst whose members can be found both a black man and a Japanese American. This whitewashes aspects of American history which are vital to understanding both the dangers of racism and the troubles we suffer today. During WWII, the American Army, Navy and Marine corps segregated black units as they were believed to be less capable than their white colleagues. I am of the opinion that the dichotomy between the propaganda of the Allied forces and the racist policies of America was on the seeds that grew into the civil rights movent of the 50’s and 60’s. The inclusion of the Japanese American soldier is even more offensive as we should all be aware that Japanese Americans were kept prisoner in internment camps, under the assumption that all Japanese Americans would be best consider as Japanese agents.

I believe that these decisions show that many times the decisions being made in the name of increased diversity of often badly motivated and harmful. At best they are simply performative. At worst I suspect ignorance and malicious compliance. I think a simple driving force here is a checkbox mentality — did we get all the right demographics in this cast, over more meaningful but difficult to measure criteria, for example do we have content here that reinforces or encourages racism or bigotry? In the examples I have given the former are satisfied to the detriment of the latter, but it is the latter that we should be concerned with. In other words, lets be more critical and analytical in our cultural criticisms.

I think this has lessons towards the ongoing culture wars. In the oppositional debate between the work and the anti-woke, the most unreasonable and unreasoned voices are amplified, and important concerns are silenced, leading to a dumbing down of the conversation. This debilitates our ability to actually tackle important social concerns we are facing. We ignore important criticisms for fear that they give ammunition to the other.

Stark’s Law

I have a principle that I would love to see become part of the lexicon of Software Development, although I think it applies to all human endeavors (like Murphy’s law).

Stark’s law states:

Any idea, principle, or philosophy can, and probably will be applied in a dogmatic, harmful way.

Glen Stark

I’m still working on the wording. Suggestions welcome.

The fundamental principle at work here is simple: In the end most things boil down to trade-offs. Following specific principles is always a good idea, right up to the point where the trade-offs no longer work. People have a tendency to take useful, positive things and be dogmatic about — try to turn a nuanced discussion into a binary, oversimplified one.

If I get sufficiently motivated, I should make multiple posts of Stark’s law in action.

Consequences

An important consequence of Stark’s law is one of responsibility. If you want to spread a principle, philosophy or approach to something, you should provide the necessary disclaimers. I.e. you should be able to give an example of how Stark’s law might kick in.

If you are unable to identify how a principle could be applied to harmful extreme, I would suggest you probably don’t understand the nuances and consequences or the principle sufficiently well.

Applying Stark’s Law Recursively

Obviously Stark’s law applies to itself. An obvious way one could take the principle to a ridiculous extreme is to conclude that all philosophies, ideas or principles are garbage.

This outcome is fairly easily mitigate. Consider the nuances of any philosophy & try to identify under what circumstances said philosophy might be useful. Don’t be dismissive.

If anyone can think of other ways to abuse or dogmatize Stark’s law, please let me know!

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)?