Missing Pieces

Maybe people consider social networks childish and nonsensical. Maybe they’re ranked in people’s heads in order of social importance. Maybe people don’t give them a passing thought.

The networks I belong to are a part of me. They make up my extended identity on the web. There is a hierarchical order in my head, but I’ve found it difficult to excise any one from my life, even with weeks—possibly months—of neglect. Many of the friends I maintain on any one of these networks instantly see parts of my life they couldn’t see any other way. While I may rank the site’s daily updating importance lower, the intimacy of the data may rank higher.

When a friend on any one of these sites leaves, with no warning, it affects me. The move may seem simple and insignificant, possibly as mundane as the tapping of a button, it can feel very deliberate and carry the subtext of “I no longer want you to see this part of my life;” a level of trust lost.

It’s a dull, melancholy pain. I’m aware that this could be an overreaction from feeling rather alienated these days (a longer story I’m not getting into), but it certainly feels real.

Time heals all… does it not?

Educational Irony

I noticed this quote today from an anonymous teacher in AZ in Teaching Matters, one of the newsletters from the US Department of Education that purports to celebrate teaching and teachers:

Remove the structures of funding models that set up competition instead of collaboration. We’re not being rewarded for collaboration but instead are rewarded for doing better than someone else.

This falls under the heading “Wisdom from educators heard by ED.” Sadly, they fail to see the irony. The Department of Education effectively created the competitive funding model to end all competitive funding models: Race to the Top. Devised at a time when all states were strapped for cash and struggling with massive deficits, this program pitted states against each other in order to get a portion of a finite amount of federal funding. Oh…and give up a certain amount of state-based educational autonomy (i.e. all of it).

I really wish government entities were a bit more self-aware.

The Heart of the Crystal

There was a simple assignment from our Communications Director to find an inspiring quote, speech, poem, et al. My offering, appended below, was from one of my favorite books, 1984:

Winston did not get up for a few minutes more. The room was darkening. He turned over toward the light and lay gazing into the glass paperweight. The inexhaustibly interesting thing was not the fragment of coral but the interior of the glass itself. There was such a depth of it, and yet it was almost as transparent as air. It was as though the surface of the glass had been the arch of the sky, enclosing a tiny world with its atmosphere complete. He had the feeling that he could get inside it, and that in fact he was inside it, along with the mahogany bed and the gateleg table and the clock and the steel engraving and the paperweight itself. The paperweight was the room he was in, and the coral was Julia’s life and his own, fixed in a sort of eternity at the heart of the crystal.

— George Orwell, 1984

The imagery from the scene hits me every time.

The JetBlue Experience

I recently wrote (twice) to JetBlue about my experience with their services and systems. Both of which seem chock-full of fail. Here are the two stories:

I recently returned from a weekend in Vermont and possibly the worst customer service experience I’ve ever had.

Last Wednesday, I was originally set to fly out of Dulles at 6:30 PM from gate B66. However, when I arrived at the airport around 5, I noticed that the departure time printed on my ticket was 7:45 PM. Given that, I assumed I had plenty of time to work and eat prior to my flight. When I arrived at the gate at 7:15, I was informed that my flight had departed at 6:30. I was irritated, but calm. I asked if it was possible to get a seat on the flight to Boston and, upon arriving, I planned to drive to Vermont. At this point, the gate supervisor(?), Norman, became belligerent and blamed me for missing the flight and informed me that the plane could leave at any time and I should be waiting patiently at the gate. He said he could put me on the flight to Boston for $100 extra. At this point, I walked away and called JetBlue to file a formal complaint, not because of _what_ he was saying, but _how_ he was saying it. Someone in his position who is supposed to diffuse customer aggravations shouldn’t be agitating customers more. His position/promotion was nothing short of a mistake.

Eventually, I spoke to manager, Anya, who filed the complaint and tried to help me out my current predicament (i.e. stranded in DC). Since I booked my ticket with points (NB: I had no idea what kind of debilitating situation to which that would lead), I was transferred to the TrueBlue CSR, who proceeded to book me on the Boston flight and “fix” the problem (NB: “fix” is surrounded by quotes because the “fix” cost another 7000+ points and led to even more problems, which I will talk about in my next SpeakUp correspondence).

In closing, I have two questions:

  1. Since the person in charge at the gate deals with irate customers day-in and day-out, shouldn’t they be someone with a personality that diffuses rather than exacerbates the situation?
  2. Why print the delayed time on the ticket? Travelers are already expending large amounts of time dealing with the various agencies within the airport, the illusion of additional time is a boon for some and a bane to others, but giving accurate information that avoids negatively affecting the customer is the only real solution.

I will follow this correspondence with the details of my return trip. Thank you.

My second story:

I recently wrote into SpeakUp about my original trip on August 24th up to Vermont and how I was severely disappointed with how JetBlue handled my situation and inquired as to why incorrect/inaccurate information was printed on the issued airport ticket. The initial leg of my roundtrip flight from IAD to BTV was rerouted to BOS…or so I thought.

While I was in Vermont, just before Hurricane Irene hit, I received an email on August 26 that said my return flight to IAD had been preemptively cancelled and rebooked for Tuesday AM. Though a bit miffed about the lost work time, I decided not to cause any issues.

When my wife and I sat down to check-in to our flight, I noticed that only her name came up on the confirmation number. Thinking there was some mistake, I called JetBlue, which, incidentally, turned into a three hour phone call that ruined lunch with some friends. I was then informed, after more than 30 minutes on hold (after the initial hold time) that I needed to speak to another TrueBlue CSR. The TrueBlue CSR then informed me that I had cancelled my return flight which is why I didn’t have a ticket.

To borrow a line from Fight Club: “We have just lost cabin pressure.”

At this point, I could barely contain my anger. What I was hearing at the time was: “You missed your flight from Dulles to Burlington, though no fault of JetBlue, and you decided to go to Boston, one-way and pay an extra 7000+ points to do so, just so you could rent a car for $130 (plus fuel) in order to spend 3 hours to drive to Vermont, finish the weekend and send your wife home by herself and strand yourself there.” I mentioned that to the CSR and was even more irritated when it seemed like she was blaming me for my predicament (NB: I will concede that I was furious at the time and was possibly taking what she was saying a bit too literally). She reinstated my old flight and said that she could get me on a flight to JFK on Tuesday, but I would have to wait until Wednesday to get back to IAD. I asked if I could get a train ticket from Penn Station to Union Station. I was informed that JetBlue does not purchase train tickets. I asked if I could be rebooked on another airline in NYC. I was informed that JetBlue only partners with American Airlines and they were no longer taking anyone else. Defeated, I said “fine” and went back to eating lunch with the one friend who remained through the debacle.

We eventually realized that we would spend more money with me being stranded in NYC, so we decided to spend the $230 (plus fuel) rent a car (again) and drive from BTV to IAD, where our personal car was located. We arrived home at 5:30 AM and proceeded to work the next day. This is why I vehemently correct people when they ask: “Were you stranded in Vermont because of the hurricane?”

No. I was stranded because of JetBlue.

I’m currently part of the TrueBlue program. I have the JetBlue American Express card. I was a loyal customer of JetBlue, almost to the point of zealotry (i.e. “If JetBlue doesn’t fly there, I probably don’t need to go there.”). The TrueBlue system changed and became less alluring, which, in turn, made paying the annual fee on the JetBlue card rather unsavory. I need to reevaluate my relationship with JetBlue.

Not my finest prose/storytelling, but the exercise was cathartic. Now…we play the waiting game…

Aarron Walter at An Event Apart

Listening to Aarron Walter talk at An Event Apart about entrepreneurship and doing things “on your own time,” I was reminded by this quote by Charles Bukowski:

“If you’re going to try, go all the way. Otherwise, don’t even start. This could mean losing girlfriends, wives, relatives and maybe even your mind. It could mean not eating for three or four days. It could mean freezing on a park bench. It could mean jail. It could mean derision. It could mean mockery — isolation. Isolation is the gift. All the others are a test of your endurance, of how much you really want to do it. And, you’ll do it, despite rejection and the worst odds. And it will be better than anything else you can imagine. If you’re going to try, go all the way. There is no other feeling like that. You will be alone with the gods, and the nights will flame with fire. You will ride life straight to perfect laughter. It’s the only good fight there is.”

This resonates with me, though, due to social pressures, it’s very difficult to do.

This is just a quick thought. Hopefully, I’ll be able to flesh this out later.

Stephen and Education

I just sent this to Comedy Central regarding The Colbert Report:

I was curious why Stephen hosts people like Michelle Rhee and Geoffrey Canada, but hasn’t brought on Diane Ravitch to show the other side of the argument. It’s strange to me, since Stephen has, on numerous occasions, made a name for himself by publicly showing the other side of various controversial arguments…sometimes in the presence of Presidents he’s calling out.

If I get anything back, I’ll be sure to post.

Working with Git on Dreamhost

Preamble

Though I gained most of these insights by reading this very informative site, I need to retype things in my own words to catalog my own trials and tribulations while satisfying my own thought process (or lack-thereof). Mind you, I’m not adding much (if anything) to the original post…just my own perspective and tailored to a Dreamhost environment.

Prerequisites

No one likes passwords and all of the baggage attached to them (e.g. typing them, changing them, etc…). To avoid typing passwords when connecting to the server (which becomes a requirement/necessity for git a bit later on) we generate public/private keys using ssh-keygen:

$ ssh-keygen -t rsa -C "user@email.com"

NB: I’m not going to go into the particulars of RSA. Wikipedia has a pretty good primer.

Executing the command generates a sequence of password requests followed by the generated key fingerprint and randomart image (example output shown below with sensitive bits removed and set off by asterisks):

Generating public/private rsa key pair.
Enter file in which to save the key (/Users/username/.ssh/id_rsa): 
Enter passphrase (empty for no passphrase): 
Enter same passphrase again: 
Your identification has been saved in /Users/username/.ssh/id_rsa.
Your public key has been saved in /Users/username/.ssh/id_rsa.pub.
The key fingerprint is:
*fingerprint*
The key's randomart image is:
*randomart*

You’ll need to move ~/.ssh/id_rsa.pub to the server as it will be needed later in the process.

Setting Up Gitosis

Before starting, it’s important to note 2 things:

  1. Wherever you put Gitosis, it will take over the account preventing you from ssh-ing into it directly.
  2. When you connect to the repository, the full path to the location where the files are kept is not necessary (and it will fail).

All of the following instructions take place on the server hosting the repository. First, create a src folder to store all the bits of code:

$ mkdir ~/src
$ cd ~/src

Download the latest version of git:

$ wget http://kernel.org/pub/software/scm/git/git-1.7.0.2.tar.gz

Decompress the file:

$ tar -xvvzf git-1.7.0.2.tar.gz

Change to the new directory and install:

$ cd git-1.7.0.2
$ ./configure -prefix=$HOME/local NO_MMAP=1
$ make
$ make install

NB: Your prefix path may be different depending on your preferences. You’ll want to specify the root of the directory that contains (if they currently exist) the bin, lib, and similar directories.

Create a directory to contain localized Python additions.

$ mkdir -p ~/local/lib/python2.4/site-packages

Add these additions to .bashrc and .bash_profile:

# lines for gitosis
export PYTHONPATH=$HOME/local/lib/python2.4/site-packages/
export PATH=$HOME/local/bin:$PATH

Before installing Python setuptools, you can add a .pydistutils.cfg file that adds a bit more fine-grained control to this (and future) installation. You can create this file with your editor-of-choice or by executing the following lines:

$ echo "[install]" >> ~/.pydistutils.cfg
$ echo "install_lib = ~/local/lib/python\$py_version_short/site-packages" >> ~/.pydistutils.cfg
$ echo "install_scripts = ~/local/bin" >> ~/.pydistutils.cfg

The previous lines create a .pydistutils.cfg which looks like this:

[install]
install_lib = ~/local/lib/python$py_version_short/site-packages
install_scripts = ~/local/bin

As an example, in an environment using Python version 2.4.4, libraries would be installed to ~/local/lib/python2.4/site-packages.

After setting up the optional config, install Python setuptools (setuptools-0.6c11-py2.4.egg was the latest version at the time of writing):

$ cd ~/src
$ wget http://pypi.python.org/packages/2.4/s/setuptools/setuptools-0.6c11-py2.4.egg
$ sh setuptools-0.6c11-py2.4.egg

Install the latest version of Gitosis:

$ cd ~/src
$ git clone git://eagain.net/gitosis.git
$ cd gitosis/
$ python setup.py install --prefix=$HOME/local

Using your publickey, initialize Gitosis:

$ gitosis-init < id_rsa.pub

There still remains one minor problem: the permission on the post-update hook:

$ chmod 755 ~/repositories/gitosis-admin.git/hooks/post-update

NB: This issue was supposedly fixed with a newer version of setuptools, but I still ran into the issue.

Now, everything should be configured correctly.

Using Gitosis

Gitosis, by default, puts everything into a repositories directory. Git is used to administer Gitosis, so it’s necessary to checkout the Gitosis Admin project. On your local computer:

$ cd ~/your_projects_directory
$ git clone user@domain.tld:gitosis-admin.git
$ cd gitosis-admin

To add a repository or add a user to a group, the file to edit is gitosis.conf. Below is an example configuration:

[gitosis]

# just for initial testing, set the loglevel to DEBUG
loglevel = DEBUG
# if none of the repositories are going to use gitweb
gitweb = no
# if git-daemon isn't running
daemon = no

# the default group
[group gitosis-admin]
writable = gitosis-admin
members = user1

# another user group
[group anothergroup]
# the repository to write to
writable = newrepository
# refers to the previous group and adds another user for just this project
members = @gitosis-admin user2

# a new repository
[repos newrepository]
owner = Some Owner
description = Description of the project

The users refer to the keys in the keydir. If any new users are to be added to the project, their public keys must be added to the keydir and the names added to the appropriate groups in gitosis.conf. Gitosis handles all access control.

Push the new config changes:

$ git commit -am 'Added new group and new repository. Also added new user key.'
$ git push

Everything should work fine. Now to add the new repository.

$ cd ~/your_projects_directory
$ mkdir newrepository
$ git init
$ git remote add origin user@domain.tld:newrepository.git
# add new files, commit, etc...
$ git push origin master:refs/heads/master

The line git push origin master:refs/heads/master is only necessary the first time. Once the link is established, every subsequent push should just entail a git push.

Pitfalls During Installation

After configuring everything, I attempted to create a new repository. This is where I started running into problems:

ERROR:gitosis.serve.main:Repository read access denied
fatal: The remote end hung up unexpectedly

The issue was a conflicting line in the authorized_keys file (i.e. an original key that I added to the server to ease the login process).

Then I ran into this problem:

fatal: 'repositories/newrepos.git' does not appear to be a git repository
fatal: The remote end hung up unexpectedly

I was adding the path repositories without realizing that referring to it was unnecessary.

The biggest issue I ran into, and it was extremely irritating since it returned false positives, was assuming the post-update hook issue was fixed with the latest setuptools. It wasn’t. During a push, it looks like everything is updating fine in git, but no changes are being made on the remote server.

Hope this all was helpful.

Regarding window.location

I ran across something new (at least, new to me) today. Using window.location.hash, if the same value is being assigned to the hash, the browser looks at it as a non-operation. The value needs to be reset first before reassigning the same value (e.g. for the purpose of resetting the view to the top of a dynamic list). I’ve noticed this behavior in Firefox 3 and Safari 3+.

I rarely write about coding issues, but it might be a good way to catalog my findings for my own reference. My apologies to everyone else.

Update: I thought this could use an example.


var hashVar = 'content-top';

// ASSERT: hashVar contains the same value as window.location.hash
window.location.hash = hashVar;

// Expected behavior: Window scrolls back to the 'content-top' id
// Demonstrated behavior: Window does nothing

The way that I solved this was to reset the window.location.hash value to an empty string before the reassignment.


var hashVar = 'content-top';

window.location.hash = 'adkcj';
window.location.hash = hashVar;

// Expected behavior: Window scrolls back to the 'content-top' id
// Demonstrated behavior: Window scrolls back to the 'content-top' id

Update 2: Apparently, Firefox, in the latest update, changed the behavior of the hash property. If the value is “zero-ed out”—if you will—the entire page refreshes. I’ve amended the script above so that hash is given a (hopefully) non-id value. Feel free to use a real word, but I didn’t want to take the off-chance of hitting an id I’m using.

Suppression on Facebook

These two Facebook pages (here and here), the former of which has–ironically, perhaps–declared war on the latter, ignited quite a debate. Here’s a list of my initial thoughts before I start analyzing this:

  1. I don’t consider soldiers hired thugs.
  2. I am aware that some soldiers commit atrocities, which is a reality few people admit. Given the conditioning soldiers endure, coupled with varying levels of power over peers, subordinates, and/or civilians, situations (read: Abu Ghraib) similar to the Stanford Prison Experiment appear inevitable.
  3. I consider war an atrocity (though sometimes a necessary evil), but smaller governing bodies shoulder the blame for initiating it, not the soldiers.
  4. I am a firm believer in freedom of speech, almost without exception.

The Iraq war is a cauldron of controversy. It started with a retaliation in Afghanistan for the events of 9/11 and, under false pretense, spilled over into Iraq. Though history has yet to ascertain the damage, it may prove to be one of the most costly and unpopular wars, ever. The Iraq war sparked a ideological issue between those that whole-heartedly support the troops versus those who disapprove of supporting the greater cause and preceding events. The “Soldiers are not heroes” profile picture is a silhouette of Satar Jabar, perched on his box, alluding to one of the most politically disastrous events for the military.

The charge against “Soldiers are not heroes” (SANH) by “Petition to REMOVE “Soldiers are not heroes” from Facebook” (PTRS) is they are using “Hate Speech and Defamatory Comments towards Allied Service Members.” Hate speech, even if meant to result in physical harm, is still–with a few exceptions–protected by the First Amendment. Interestingly enough, PTRS mentions that they “[are] not against “Freedom of Speech.” In order to argue their case, PTRS needs to prove SANH’s comments are, either, defamatory or against Facebook conduct guidelines (which I haven’t read as of this post).

SAHN’s page states (discounting wall posts and links since the source may or may not be the views of the creators):

Does the thought of hero worshiping our armed forces make you want to vomit your spleen out?
Are you fed up of being told that soldiers deserve constant gushing praise?
Stand up and show members of the armed forces what you really think of them and their participation in needless bloodshed.

Though meant to be offensive, the above contains nothing that could be interpreted as hate speech. The group requests that its members wear t-shirts with extremely controversial slogans (e.g. ”Proud not to murder civilians for a living,” ”I was raped by soldiers and all I got was this lousy t-shirt,” etc.). Unfortunately, because of the satirical nature and debatable validity of these statements, it, again, would be difficult to prove any of these as defamatory. To clarify the group’s purpose, SANH’s page posted this in its “Recent News” section:

This group is a parody of the group ‘support your soldiers in uniform!!!’ 
http://www.facebook.com/group.php?gid=11911667121&ref=share

This group is intended to point out the absurdity of the many groups on facebook that portray all soldiers to be heroes and shower the armed forces with unconditional praise.

Putting on a soldiers uniform and becoming part of a murderous organisation does not make you a hero.

Supporters of the group generally agree that the wars that our armed forces are participating in at the present time and in recent years are unecessary and unjust. Therefore we don’t feel that we should be pressured into offering ‘support’ to people fighting and killing innocent people for causes that we don’t believe in.

We recognise that the government are mainly to blame but also think that members of the forces need to take responsiblity for their own actions in choosing to support these causes. Soldiers have free will and the opportunity to not sign/re-sign up if they feel they are being asked to participate in an unjust war, so they also deserve a proportion of the blame if they choose to stay.

We also find it amusing how so many of those who claim to ‘protect our freedoms of speech’ tell us to shut up, or be duffed up.

“Soldiers are not heroes. They can be heroes, they can act heroically, they can do heroic things – but the act of putting on a uniform and agreeing to put your conscience in a lockbox for the next so many years does not make your life more important than others, it does not make your opinions and insights more worthy of respect than others, it does not exempt you from moral judgment. It does not make you a hero.

And we should not fall prey to hero-worship.”
http://whoviating.blogspot.com/2008/06/heroics.html

Let’s protest against these group protesting against the protests against the forces ffs!!!

THIS GROUP ISN’T A SOLDIER HATRED GROUP, JUST A GROUP AGAINST THE HERO WORSHIP OF SOLDIERS.

After checking out the “Support your soldiers in uniform!!” (SYSIU) group, I have to agree that it’s a close parody, even down to a quip about the font and color on the t-shirts to keep them “uniform.” The debates on this news piece, especially regarding the soldiers’ free-will, post-enlisting, are fully open.

After a great deal of time and review, I believe PTRS is mistaken in their goal, especially if they believe their own claim to be pro-freedom-of-speech. SANH’s latest claim to be a parody and not a “soldier hatred group” seems believable. Hopefully, this Facebook skirmish stays confined within the Facebook realm and avoids the judicial system, which is always my fear when it comes to matters of freedom–or suppression–of speech.