Playing with Negative Space

Liz rides the subway on May 23, 2016

Liz rides the subway is a series containing thoughts I have on the subway, mostly as an experiment to get me to write more. Today was the first time I was street harassed on my commute since moving in November... memories relived on the following train ride:


I was walking through the last aisles of the grocery store to find the last item on my list, almond butter. Since I rarely buy anything but produce and dairy at Brooklyn Fare, I forgot exactly which aisle the almond butter was in and ended up going down the wrong one.

I turned the corner to the next one when a man called out to me, "Damn, looking good today, honey." I ignored the "compliment" and kept walking.

But he didn't leave me alone. He turned around to follow me and asked, "Why are you being so rude to me? I just wanted to talk to you, need to get your number."

"I'm not interested." I upped my pace, stared at the floor in front of me as I moved, and decided to forget about the almond butter - I was no more than thirty feet from the tail of the checkout line where other people would be around.

He followed, raised his voice, "You're such a prude bitch." as I was just near the end of the line. People stared. At first it looked like it was at both him and me, but in a few seconds, everyone was looking at me. No one said a word - were they waiting for me to? I stood mortified at the end of the line, hoping it would move faster than putting all my groceries back would, forgetting that dropping my basket and just leaving could be an option, hoping everyone would forget what just happened, hoping to disappear. My head hung down, and the man went the other way, presumably back to whatever grocery shopping he was doing.


I exited the 2 train through the doors closest to the eastern exit at Hoyt St, walked out the turnstile before anyone else, and started up the stairs to Elm and the south side of Fulton. There are two stories of stairs - the lower story is twice as wide as the top, so during rush hour, it's a massive bottleneck.

I wasn't looking too far in front of me, just far enough to know I wouldn't run into someone. When I was two steps from the middle, right where bottlenecks would happen, a man blocked my path - one hand on the rail to my left in the middle of these stairs, the other on the rail to my right on the wall.

I clicked my headphones to pause the music I was listening to, "Yes Anastasia" by Tori Amos. "Excuse me," I spoke sternly.

He didn't move. "Hey baby," he said. He might have said more. I wouldn't know because I clicked my headphones to restart my music while hurrying down the stairs. I swiped back into the station and walked quickly down the platform to get to the other exit.


I'm just outside my building on my way to the F train. The light is in my favor, there aren't any cars still in the intersection, so I begin to cross Livingston St. About half a block down, a white SUV rolls down the road.

I'm about 150 feet directly in front of the car, and it starts honking. Somehow my instinct is to turn left at it instead of scurrying the rest of the way across the light.

"The fuck are you doing? I have the light!"

The car's pretty close now. I can see the driver. It's definitely slowing down.

"Mmm, lookin' good, lady! Can I take you out sometime?" He knew I had the right of way all along, just he thought scaring the crap out of a pedestrian headed across the street was a risk worth taking for a date.

"No, asshole." Realizing I didn't have brain enough to bite my tongue, I finally get that jolt to run the rest of the way across the intersection.


invalid arch-dependent ELF magic

An elf stands on an arch, attempts to cast a spell, and freaks out when he is unable to cast it, or...

An elf stands on an arch, attempts to cast a spell, and freaks out when he is unable to cast it.


Inbox by Gmail’s accidentally abusive algorithm

The modern world really loves to use little algorithms here and there to help us speed things up. Inbox by Gmail is no exception.

Inbox has a concept of "speed dial" - an algorithmically determined set of "frequent" contacts that appears when hovering over the compose button:
Speel dial shows up on the right when hovering over the button for composing a message

In theory, this is great. It was really handy when it picked my fiancé, my mom, and a close friend. At some point, my own email replaced my close friend's because there were a lot of times when it was easier to email myself a bunch of notes than create line item reminders out of them. Still immensely convenient.

Later, Inbox decided to switch my mom out for someone else. This someone else had been emailing me a lot, though I think my mom had still been emailing me more. Occasionally, I'd reply when I was obliged to, but I was definitely sending more emails to my mother. Whatever the specifics, the algorithm replaced my mom with him.

What Inbox didn't know was that this person had been harassing me.

No amount of additional emails to my mom would put her back in speed dial and kick him out. I poked around in settings, hoping to find a way to pick my own speed dial contacts or a reset button, but I found none. An obscure post from 2014 on the Gmail Help Forum told me I could delete my contact to remove him from speed dial, but this only worked for the web version. It didn't remove him from Inbox on my iPhone, and I could only get him out there by uninstalling and reinstalling the Inbox app.

These aren't good solutions. Fortunately, his email address easily identifies him so I didn't mind deleting the contact info that tied his name to it, but had he had something more reminiscent of early 2000s AOL addresses, I might have needed to rely on that contact information. The energy it took to find these roundabout solutions and time I continued to have him in speed dial before finding those solutions kept reminding me of how he didn't respect my boundaries. The speed dial algorithm was hurting me instead of helping me out.

I don't think we should eliminate handy tools like this; most of the time, I'm a big fan. But I do wish that there were always easy to find manual overrides - or at least an easy to find kill switch - for algorithmically generated content so that we can minimize their inadvertent accidental cruelty (content warning: loss of a loved one).


Liz rides the subway on May 12, 2016

Liz rides the subway is a series containing thoughts I have on the subway, mostly as an experiment to get me to write more. Today's ride home from choir practice:

Former Citigroup CFO Sallie Krawcheck launched Ellevest yesterday. Ellevest differs from other investment platforms because it focuses on women's investment needs:

Women, for example, need a platform that takes into account not only her earnings, but also her salary arc - which is different from men's. It needs to account for the fact that women live longer than men, on average, when planning for retirement. It needs to understand the salary differentials between a womans pay and her male counterpart's pay and how that impacts her strategies.

Matt Levine counters:

People overrate the importance of an adviser who understands an investor's unique needs, because what all investors need is as much money as possible without losing any. (The financial solution to the loss of income from taking time off to raise children is to have more money, but that is the financial solution to every problem.)

Levine's response tricks you by letting you take “without losing any [money]” completely for granted, but investments aren't risk free. Ultimately, the risk you're willing to take on is influenced by how much money you have to invest - which is largely influenced by your earnings and career arc - and how much you cannot afford to lose - which is closely tied to how many more years you need to be able to support yourself. Seems to me that Krawcheck has a point, whether or not Ellevest is the solution.

Now, charging 50 basis points per year when your competitors charge half that is criticism I readily agree with.


Understanding GNU Screen’s captions

I love screen. I know all the cool kids are using tmux now, but screen keeps it simple and does everything I really need.

One of the things I (possibly mistakenly) want is lots of windows. The problem with having lots of windows is they quickly become hard to keep track of, especially since the default screen configuration doesn't have any guiding information quickly available to the user. Fortunately, you can fix this with a caption that appears at the bottom of your terminal.¹
screen caption
I do this in my ~/screenrc, which boils down to:

### pass commands to screen for describing windows
shelltitle '$ |sh'

### set caption
caption always '%{= kw}[ %{y}%H%{-} ][ %= %-Lw%{+b M}%n%f* %t%{-}%+LW %= ][ %{r}%l%{-} ][ %{c}%c%{-} ]'

There's a lot going on here, and it took an unfortunately long time to work out...

shelltitle '$ |sh' is all about making it easy to know what's in each window, but it's only possible with this extra scripting in my ~/.bashrc:

# dynamic titles for screen
case $TERM in
  screen*) export PROMPT_COMMAND='echo -n -e "33k33\\"'

This passes the last command to screen to use within my caption to identify what's currently happening in each window. This is a lifesaver for someone who makes the questionable life decision of having at least eight windows open in every screen she launches.

That's the simple part; now, let's break down my complicated caption format. Captions aren't documented well. Lots of people post theirs, but usually without explanation - likely because it's a pain to describe. I started off by mashing up other people's captions, but that didn't get me very far. I completely redid mine last week, and I realized pretty quickly that I'd only make it perfect by understanding how to build it up part by part. Inspired by Jay Sitter's article on hardstatus strings, I present a breakdown of my caption:

### set caption
caption always '%{= kw}[ %{y}%H%{-} ][ %= %-Lw%{+b M}%n%f* %t%{-}%+LW %= ][ %{r}%l%{-} ][ %{c}%c%{-} ]'
%{= kw} clear all text attributes and set to text color to white and background to black
[ plain text to mark sections
%{y} set text color to yellow
%H hostname of the system
%{-} go back to previous text settings (text color to white)
][ plain text to mark sections
%= with the later %= in the caption, pad this section on the left so that the caption spans the entire line
%-Lw list windows before current window, the optional 'L' indicates that these windows show their flags
%{+b M} the current window section starts, make text bold, set text color to magenta
%n current window number
%f flags of the current window
* plain text I use to mark the current window
%t current window title
%{-} go back to previous text settings (text color to white, normal weight)
%+LW list windows after current window, the optional 'L' indicates that these windows show their flags
%= with the earlier %= in the caption, pad this section on the left so that the caption spans the entire line
][ plain text to mark sections
%{r} set text color to red
%l current load of the system
%{-} go back to previous text settings (text color to white)
][ plain text to mark sections
%{c} set text color to cyan
%c 24-hour clock
%{-} go back to previous text settings (text color to white)
] plain text to mark sections

Hopefully this explanation inspires you to customize your screen caption to your heart's content!

Oh, by the way, my dotfiles are now available on GitHub.

¹You could also fix this with a hardstatus. I don't like this solution as much because hardstatus is for status messages from screen, e.g. to alert you about activity, while caption is more thematically in line with giving the details of the windows within the screen.