William Gibson said “the future is already here — it’s just not evenly distributed.” Likewise that the past is still alive today. I deeply appreciate people who tell their own stories, so that I may understand, like Hamden Rice’s story of his father who grew up in the south. I don’t have relatives who experienced what it was like to be black in America before Martin Luther King. I have a different family history that I see in reflected in events from the past year.

A Story from the Past

“You must go visit your great aunt Miri” said my grandmother, telling me of her cousin for the very first time. I had planned a trip to Spain and Miri lived in Portugal. I was 17 when I learned that my Unitarian grandmother’s Christian Scientist parents, had converted from Judaism. The second World War that I learned about in history class was about to feel eerily close. I had learned German on a whim, wanting to acquire a third language, never realizing that it might connect me to my heritage.

So I found myself, walking the streets of Lisbon, chatting in German, learning about my not-so-distant relatives. There had been three brothers — my great-great-grandfather travelled to America long before the troubles started. Miri’s father had married a Catholic and was able to be anglicized. Uncle Kurt had been handsome, never married, and had not left soon enough. He was taken to Auschwitz and never seen again. Miri had fled Germany during the war. She travelled through eastern Europe meeting André, who had been raised to be a Hungarian count, both fleeing for the lives, eventually finding their way to Portugal.

I asked my grandmother later if there was something they could have done. She told me that the brothers in Germany wrote letters asking to send money so that they could travel to America. Her father refused, with fresh memories of the Great Depression and his own wife and daughters to care for. He didn’t believe that they could really be in such danger, until it was too late to get anyone out.

Sitting on Miri’s back porch, sipping gin and tonics, Miri said “We would never have named our daughter Sarah.” She had been telling me about settling in Lisbon and raising her own family. She went on to tell me something I’ve never heard before or since, perhaps too every-day an occurrence to record in our history books. She said that all of the women had to sign their name with Sarah before their actual name, and for the men it was David. So at the bank, and anyone you did business with, could easily identify you as Jewish. Slowly, bit by bit, the state took away their identities, their heritage as Germans, and made them strangers to their neighbors and friends.

Creating the Future

I don’t know what it’s like to be black in America today, any more than I know what it was like to be Jewish in the 1940s. I do know that if I do nothing, the world could easily slip into a reality where I don’t want to live. Now and then, I can do things that make a difference. I believe the small things that each of us do every day change our reality. By deciding what small actions we take or ignore, we create the future.

Yesterday, instead of posting this story, I first spent time to write a few small things that I think we can do to be allies to our friends and colleagues who experience the terror of being black in America today.

“Through our scientific genius we have made this world a neighborhood; now through our moral and spiritual development, we must make of it a brotherhood. In a real sense, we must all learn to live together as brothers, or we will all perish together as fools. ”
— Martin Luther King, Jr., Lincoln University 1961

I am a child of privilege. Pale skin, rosy cheeks and a wide smile can smooth the way to a comfortable place. I was never hungry, always had books to read when I was little, and later computers and then laptops. Nevertheless, fear and suffering has touched my life in a way that motivates me to do what I can to act as an ally and bring to light injustice when I see it.

It’s much easier to make big, bold gestures than it is to do the right thing at the right moment. I don’t always know what to do, but I thought I would write down some ideas of how we might go about being better allies. I’d love to hear ideas from other people too.

  • Name your heroes — seriously make a list of your top ten. If they are mostly one race, class or gender, find some more heroes.
  • If you can’t quickly think of three black people in your profession who you admire, think about making some new friends, and in the meantime, find them in the press. (Hint: you might actually have to look hard, but it’s not that they aren’t there, they’re just less written about) Try the same thought experiment for Latinos or Latinas, Native Americans, or other folks who are under-represented in your peer group or leadership.
  • If someone tells you that something you said sounded racist, apologize and thank them for telling you. (Don’t get defensive. Don’t tell them they took it the wrong way. If you didn’t mean to be racist, think about how you could say it differently next time so there would be no shadow of a doubt.)
  • If you hear something that sounds racist, call them out on it. Don’t wait for the person of color in the room to say something, or ask them if it offended them. You can be offended all by yourself.
  • When you are asked who should be invited to a meeting, think about inviting someone who is black, latino, and whatever other races or cultures are under-represented.
  • If you work in a homogeneous environment, recruit for diversity. If your company can’t or won’t recruit diverse talent, think about working somewhere else.
  • If someone invites you to speak at an event and there are no people of color on the speaker list, suggest someone else. (If you can’t think of someone who would be a great speaker in your stead, do some research and find a few.)
  • Don’t assume you understand someone else’s experience. No matter what color you think they are. Don’t assume race or culture, based on skin color.

Sails.js is a Node.js MVC framework. Rails developers will find the components quite similar, but I think Sails has done a really good job of leveraging libraries and frameworks that it integrates. In addition to Node, it sits on top of Express, which handles HTTP requests. In fact every request object, is simply an Express request. Sails also nicely integrates socket.io.

Install on OSX

brew install node
npm install sails -g
sails -v

Make a Project

sails new testProject
cd testProject
sails lift

In your browser, go to: http://localhost:1337/ and there are some pointers to the docs and hints about what to do next.

Make a REST API

sails generate api user
sails lift

Now in the browser http://localhost:1337/user returns a JSON representation of our list of users, which is an empty array at this point.

By default, your project is configured with a dynamic schema using the default disk databas, which lets us experiment by creating models using the browser:

The default routes are configured in config/blueprints.js, so you can turnoff these “shortcut” routes if you want to only have the more standard REST-ful syntax generated for your APIs. If you are fond of it from Rails, you can also tell Sails to pluralize names in the same config file.

Now if you go to: http://localhost:1337/user

You can see your users:

[
  {
    "name": "Tim",
    "createdAt": "2014-12-21T18:20:19.382Z",
    "updatedAt": "2014-12-21T18:20:19.382Z",
    "id": 1
  },
  {
    "name": "Judy",
    "createdAt": "2014-12-21T18:20:26.269Z",
    "updatedAt": "2014-12-21T18:20:26.269Z",
    "id": 2
  },
  {
    "name": "Lee",
    "createdAt": "2014-12-21T18:20:29.338Z",
    "updatedAt": "2014-12-21T18:20:29.338Z",
    "id": 3
  },
  {
    "name": "Maggie",
    "createdAt": "2014-12-21T18:20:32.879Z",
    "updatedAt": "2014-12-21T18:20:32.879Z",
    "id": 4
  }
]

Check Out Sockets

Open Javascript console in your browser, and you should see:

    |>
  \___/
sails.io.js:200  `io.socket` connected successfully.

Try this at the console to see the list of users:

io.socket.get('/user', {}, function (users) {console.log(users)})

To listen for changes to any user model:

  io.socket.on('user', function messageReceived(event) {
    console.log('New comet message received :: ', event);
  });

Open another browser window, and create a user:

http://localhost:1337/user/create?name=Eva

then you’ll see the notification in your first browser window

New comet message received ::
Object {model: "user", verb: "create", data: Object, id: 5}

The documentation is pretty good, but a lot of has changed for the recent 0.10 update, and their intro video is a couple of revisions behind. To get up to speed on the changes in the new release, I updated what that intro would be in the new syntax on github ultrasaurus/sails-new, which includes the above tutorial and a few other details.