The Bathroom Chronicles, by IP Freely (or not, as the case may be)

I drew some comics, extremely badly, a few months ago. They seem appropriate to share given the current political climate in both the straight and the queer world as it relates to bathroom use.

As a person with female anatomy learning to use the mens room has been and remains a terrifying experience. I do not read as male, what would be called “passing.” I do not possess the proper anatomy to make use of a urinal, the pee vessel of choice in the men’s room.  As a female bodied person I am unable to defend myself against a male bodied attacker in the restroom. At present, I read as female nearly all the time. As such, my likelihood of being raped is 1 in 5

As a trans masculine person in the women’s restroom I face constant harassment and occasional intervention by mall cop types to prevent me from peeing. Trans masc people have been drug out of the bathroom with their pants down while trying to pee. When I travel, due to my fear of the mens room, I am often waiting in line for the ladies room at airports. I am on high alert waiting for a burly midwestern husband-father to drag me out of line and make a scene, as if I am some kind of pervert trying to pee with his wife and female children.

The fact is, bathrooms are problems for everyone who is not cis normative. Period.

In the queer community, however, the experiences of trans men are erased, downplayed, or assumed to be that of cis-passing trans men. I am told that I am of the men of the world and the queer community “doesnt have time” to highlight or support me in my struggles. The constant refrain of “life is harder for…” and “not all men” is used to silence my experiences.

Don’t believe me? Read this public Facebook post and the comments. Its too triggering for me to read it again, I already spent 2 days with a headache, anxiety attacks, and an hour long conversation with my therapist as a result of the anti transmasc hatred spewed by the queer community in this thread and subsequent reposts of it in various (supposed) trans masculine inclusive groups.

But, its a beautiful day. I have a business to run. And tomorrow I’m running away to a tulip farm and a waterfall hike with my beloved. This headache is really persistent, though.

So, after much pretense, here is my terrible comic about my (sanitized (hah!)) experiences in the restroom and what I go through just to take a wiz.

adventures in peeing

My experiences trying to pee as a transmasc person


Exhiety – being simultaneously exhausted and too anxious to rest

Eight months ago I ran away from the cube farm. The grey walls, corporate mantras, and unscalable bureaucracy had finally worn through the optimism I tried to maintain during my tenure. Any energy I had left at the end of the day was sucked away in the long commute home, watching the sun fade beyond a sea of red lights. A slow march of white lights to my left. The work and the commute had the same maddening dirge. Stop. Go. Stop. Go.


With the mental and physical tolls mounting I took a small bag of things and left. I walked away from security, unvested stock, a regular fat paycheck. I was chased down with promises of job titles and promotions long sought, but I was so exhausted that I just had to walk away.

Since then my life has been a mixture of recovering from the corporate world and figuring out how to start a business. Somewhat unexpectedly this time has also held the beginning of a transition of a different sort – gender.

For 20 years I worked and studied in tech. The only female-assigned person in many of my electrical engineering classes (and later, the professional teams I worked with), I learned to protect myself against unwanted advances and the pain of exclusion. Exclusion from the boys club that would later stymie my ability to advance. Quick wit was my weapon for shutting down locker room conversations, sexist quips, and covering up the insecurity I felt every day. I uncomfortably learned the language and mannerisms needed to be perceived as competent. Despite evidence that I excelled at my studies I constantly felt that I wasn’t enough, in part due to the external forces exerted to get more women into engineering. I always wondered ‘am I here because I’m female, or because I’m competent?’

The perception of myself as not being enough started much earlier. Since I was extremely young, perhaps 5 or 6, I struggled with this notion of being a girl. I perceived my inability to relate to other little girls as a failure on my part. As I took in the reaction of others to my presence, I realized others could see that failure too. I tried to smooth over the discomfort of others and myself by being funny and self deprecating, but over time this perception of failure at such a fundamental aspect of life turned into anxiety, depression, and self doubt.

I suppose its unsurprising that, as I started to let go of fitting myself into one ill fitting garment, I noticed I was wearing other items that were poorly suited for me. I didn’t intend to transition from technical desk jockey to entrepreneur at the same time that I began dealing with the emotional journey of gender transition, but here I sit.

As I have come into acceptance of myself as a FTM and begun getting acquainted with others like me, I find myself frustrated by the lack of FTM visibility. I hope that sharing my stories can bring increased awareness to our experiences. I have a similar frustration with the technology industrial complex and the lack of visibility of how it undercuts the well being of tech workers. I hope by sharing my story of transitioning from a cog in the tech system to an entrepreneur that I can help others do the same.

Its not me, its you.

Inspired by Reasons You Were Not Promoted That Are Totally Unrelated to Gender I thought I would share some additional Reasons You Were Not Promoted That Are Total BS. After that, I will share some tips for job interviews 🙂

“You need more visibility to distinguish yourself from others. The fact that you are doing more technically sophisticated work than your peers is not “visible” enough. We are somewhat at a loss to define this “visibility” thing further, but you need more of it.

“The company has changed direction and we are concerned you wouldn’t be able to perform at a higher level under the new conditions. No, your job hasn’t changed, why do you ask?”

“We decided not to promote you this year because you haven’t done P and Q. We realize you were specifically told not to do P & Q, but you should have found a way to do them.”

“Despite the recommendation to promote you we decided not to because we do not need someone of your skill level on this team. But here’s a 1% raise”


If you have gotten these sorts of message from your employer I recommend you do what I did the following:  Get a new job!

There are a lot of blog articles about how to prepare for technical interviews – from smelling nice, keeping your shoes on during the interview, and getting your resume up to date (i.e. if the last time you programmed C was in 1996 for a class project it shouldn’t be on your resume). You can Google them, or check back here for one I will be writing shortly.

This post is about how to interview the team interviewing you. This is the part of interview advice that generally gets glossed over. “Ask questions to show you are interested in what the company does,” for example. In fact, this is the most important part of the interview. You dont want to get hired onto a ship going down in flames, this is how you figure out if there are smooth or choppy waters ahead.

Dont be Judge Smails

Dont be Judge Smails

1. Are they taking you and the interview seriously?

Regardless of if you are interviewing as a prospective intern or CEO you deserve respect! They should be on time, professional and interested in you. If they are disinterested, checking Facebook, or self-importantly diddling on their Blackberry thats not a good sign. Sure, people get busy, but an overarching attitude of “meh” does not bode well. They should be interested in getting to know  you and answering whatever questions you have about the company and the position.

2. Do they have procedures in place to avoid a total shit show?

I’m assuming you are interviewing for a technical job of some sort. All good technical teams from scrappy startups to large corporations should have practices in place to keep tabs on technical design. These can be formally referred to as business practices or best practices. For software, the Joel Test is an excellent guide. Generally

  1. How are the specs for the product decided?
  2. Who is responsible for various aspects of the deliverable?
  3. Is there a sane way to track requests for changes, issues, and design progress?
  4. How is quality ensured?
  5. How do you communicate among team members? Do you all physically report to the same place? Are you in different time zones?
  6. How has the team tracked to deadlines or release cycles historically (if applicable)?

Depending on the environment this may be implemented as a horrible sea of red tape with formalized ticketing systems or just a quick conversation on the appropriate Slack channel or something in between. If these questions are met with *shrug* or “we just hire really smart people” be prepared for Lord of the Flies.


3. Ask to the team about themselves!

If possible you should talk to the team members that you will work with, work for, or be supervising.  How do they come across? Do you feel like they are open and transparent, or hard to read? Ive interviewed team members that have been clearly stressed out and overworked; one disgruntled person in the team may not spell trouble but more than one most likely does.

I like to ask interviewers these questions

  1. What is your favorite thing about your job/team/boss?
  2. What is your least favorite thing about your job/team/boss?
  3. What is your typical day like?
  4. What kind of hours does the team typically work?
  5. Any advice you would have for someone new to your team?

While I think the whole brogrammer “hook up / hang out 6 times before we give you a technical interview” thing is dumb, it is important to assess the team dynamic and how you fit in it. Go to lunch or have a beer with the team. Do you feel comfortable around these folks? What is the power structure in the team and how do you fit in it? Some teams Ive worked on have been pretty even keel, others have a clear king/queen pin with the rest of the team rather minion-esque. You dont have to want to hang out with your coworkers, but you have to be able to work with them.

You dont want to work with Walter Peck.

You dont want to work with Walter Peck.

4. Ask everyone about their expectations for the role you will be filling.

The job description says one thing but that is rarely the entire picture, and sometimes inaccurate! Ask everyone you interview with if they can tell you what they expect the position to entail and what skills you would need to be successful in that position. If no one seems to know or you get disparate information follow up with whomever the position will report to for clarity.

5. Do they really know what they are looking for?

Every Data Scientist Job Post

Most Data Scientist Job Posts

Do they need what they think they need? For example, everyone is trying to hire “data scientists” right now because they think beating everything with the sledge hammer of machine learning will make them wildly rich, attractive, and retired in 2 years. Not so.

Does what the job they are asking you to do correlate well with the ends they are trying to achieve? Do they think you will come and be the Personal Jesus to their product? Does that seem realistic? Especially if you are doing technical work for someone who is either not technical or not familiar with your job it is REALLY important to discern whether they know what is realistic. I recently turned down a job in part because they expected me to come in riding on a rainbow and solving all their problems. (Yes, it was a Data Scientist job)  This is not always a deal breaker; in some instances the organization may be open to you providing the best approximation of what they want. Just be clear with them when you interview.


6. Does the interview seem appropriate for the job?

A good interview should prod the parts of your expertise that will be needed for the job. Are they interviewing for a developer position and haven’t asked you to write a line of code? Consider if your peers had been given the same interview you were; would you feel confident about their abilities?

Of course, this gets into Impostor Syndrome. Am I good enough for this job? If you are in doubt, ask the interviewers how they think your skills will translate to the work you will be doing. If you are offered the job and still feeling doubtful, ask a trusted, knowledgable friend for a frank assessment of your skills and what you know of the job responsibilities.

No one can cut down a tree with a herring.

No one can cut down a tree with a herring.

7. Ask about the on-boarding process

Depending on the size of the company, how a new employee is brought on board will vary a lot. An early stage startup just trying to get all hands on deck may need a Javascript wizard they can just throw at problems immediately. A more established company may have a process of documentation reading, apprenticing (bug fixing perhaps) before you are given the keys to the Cadillac. Ask yourself if their plans seem reasonable given what you know of the company and product.

8. What is the future of the product or team you are interviewing with?

I once worked on a team that continued hiring full time employees after the company decided to dissolve the team. Some of these employees moved overseas, left solid jobs, and moved their families only to be told they were out of a job 6 months later. Its not always possible to avoid this kind of situation, but by asking about the financial and organizational details you might be able to find out.  Ive point blank asked interviewers what their take on the current climate is for the team. Do they feel secure? Do they think the product or team is destined for failure or success? Does the team have funding for the equipment and headcount they need? Another tip is when things are going south, training budgets are the first to go. Beware of a company that is pinching pennies that has good revenue numbers. It could be a sign that they do not value the team or product.

An interview is a microcosm of working with someone, both from the point of view of the interviewers and the interviewee. Like all relationships, your work relationship will not be perfect – you will have frustrating processes (or frustrating lack of processes), nasty coworkers, terrible bosses, and that person in the cube next to you that ALWAYS microwaves fish for lunch. You will learn from these situations – perhaps inspired to be a GOOD manager, or how to help your next team avoid a train wreck in product development, or that you really prefer working from home.

My hope in posting these tips is that it will help you ask yourself if YOU want the job. I acknowledge that this is a pretty privileged position to be in – able to turn down a job – and believe me, when I have done so I have second, third and fourth guessed myself. I think as tech folk we accept shittiness when we shouldn’t – “Its ok that my cubical is 4’x6′, I don’t know where I am when Im engrossed in analyzing timing diagrams anyway.” I hope this post inspires you to ask for more out of your next position, or at least to leave your interview more informed.

What else do you think is important to ask when interviewing a company? Other Reasons You Were Not Promoted thay spurred you on to look for a better situation?

From 0-60 with Docker


It has been a long time since I blogged. In the past 24hrs I started using Docker for development on my Mac. I wanted to share some tips Ive learned in the past few hours, including tips for port forwarding and getting things running on my mac.

Firstly, why Docker? Docker is a cloud hosting service for VMs, essentially. I’ve been interested in trying Docker for a while and an opportunity presented itself this week. I was working on a project using Solr so I installed it via brew on my mac. I then tried running through Solr’s quickstart and my machine barfed

sigh. *nix problems

As this is a pretty typical experience, initially I was undeterred and went about searching for some answers. The more I dug into the problem the worse it became! “Oh you just need to modify the Solr script to startup with a path to these jars.” said a post referring to an earlier version of Solr than what I had installed. “You need to use this ExtractionRequestHandler in the solrconfig.xml.” Sounds great! Except that the directory structure in Solr had changed over the latest versions and it seems that isnt actually the problem since that didnt work either. On top of this, my coding partner, on the other hand, had installed solr from the tgz, not via brew, and was having none of these problems.

Stop the insanity!

Docker to the rescue! By using containers to develop this app, I can avoid several unsavory things

  1. I can fiddle with installations on a virtual machine instead of cluttering up my personal computer
  2. By creating a container for the project anyone who develops on it can use the EXACT SAME environment
  3. I can create an Ubuntu VM, and not have to deal with OS X specific issues (well, kind of)

Installing Docker on Mac
To run Docker on mac you want to get Boot2Docker. Its this easy:

$ brew install boot2docker
$ boot2docker init
$ boot2docker up

boot2docker will then give you a path to the vm to set the DOCKER_CERT_PATH.

You can install docker just as easily

$ brew install docker

Docker has an excellent online tutorial for learning the ropes.

Customizing a VM
I started with the ubuntu:latest image, which gives you a bare bones ubuntu installation. No git, nano, etc. You have to install what you need, and ONLY what you need! Keep in mind VM sizes can get large quickly. Docker provides ways to link containers so you can (and should!) containerize liberally. I didnt do that in this case, since I was just poking around for the first time and trying to get things setup.

I found this tutorial really helpful for getting some basics installed.

Installing Solr
To get Solr up and running I had to install Java. This tutorial was helpful for getting that done, I just installed the default-jre and default-jdk and Solr ran fine for me.

Docker supports Dockerfiles, which are basically makefiles for creating an image. I found this Dockerfile for creating a Solr image really helpful. After running through the steps to install Solr I was able to get it up and running



Port Forwarding
So I have my mac, running boot2docker, running docker, running Solr… how do I get to see the Solr web console on my mac?



Port forwarding is kind of like magic, its true.

The first item of information you need is… what IP address is boot2docker using?

$ boot2docker ip
The VM’s Host only interface IP address is:

Excellent! This is the IP address to point your browser at to see whats running in Docker

When starting up docker, I can use the -p option to specify port forwarding, with the syntax -p HOSTPORT:CONTAINERPORT i.e.

$ docker run -i -t -p 8001:8983 gizm00/solr /bin/bash

I chose to forward the Docker port 8983 because this is where the Solr quickstart tutorial starts the Solr server.

Once inside my docker I can start Solr on this port (see above) and voila!


Very exciting! In addition to forwarding the port Solr is running on, I also have a webapp I want to forward as well. You can forward multiple named ports using -p again, i.e.

$ docker run -i -t -p 8001:8983 -p 8002:8000 gizm00/solr /bin/bash

So lets recap. I went from struggling with platform-specific issues trying to get a package to run on my personal hardware to having a Docker vm up and running, with my packages of interest AND app installed, with the ports forwarded to my mac in about half a day’s worth of work. AND, now I have my VM uploaded to the Docker registry so I can share it with my project partner. I cant tell you how great it is to know we wont have to debug environment specific issues while we are working on this project together! Whew!

If you would like to check out the VM it is here Ill warn you that its fairly hefty (1Gb). “Refactoring” my container strategy is on the todo list for sure 😉


A post about data denormalization and uncovering dirty data.

Thats Not Normal.

Thats Not Normal.

Lets chat denormalization! Here’s a list of the tables in my database. Ive collected stats from the 2013 TdF for the Yellow (GC), Green (Points) and Polka Dot (Mountains) jersey competitions – the dependent variables. The other tables have stats on rider performance in specific areas throughout the season which I’m hoping will give some indication of TdF performance

Totally tabular!

Totally tabular!

Now that Ive got a big ole database full of stats its time to denormalize the data for analysis. You can find the SQL script I used here. At the time of this writing the script was recently updated to include adding 0s for null points, thanks to this StackOverflow article for help on how to provide default values for nulls.

I chose to use left outer joins from the tdf_gc table based on rider name. This means I will have a table with rows for every rider from the tdf_gc table with columns from the other stats tables I join. If a rider doesnt have stats in a given table (i.e., I wouldnt expect sprinter Mark Cavendish to have an entry in the individual_mountains table) then a null is placed in that column.

Kind of an eye chart, but if you click on that image you will notice that Joaquim Rodriguez is missing quite a lot of information. Doesnt make sense that someone ranked so high in the TdF GC doesnt have any entry in the season GC or PCS Rank.

Thats Not Normal.

Poking around I discovered the culprit!


RODRíGUEZ, RODRÍGUEZ! Or, international case study

Just use UPPER() or LOWER()! Not so fast podnah, that “Í” is a character especial. Fortunately I’m using Postgres 9.3 so I can specify locale on a per query basis.

Using Collate to specify locale

Using “collate” to specify locale

That works for this case, but what about the rest of the riders from other countries? Apart from inspecting each rider manually I am presently unaware of another method for doing case conversion using a dynamic locale. Perhaps I would have benefited from screening the data for such characters especial before inserting them into my database.

Lance Armstrong

I notice that another rider, Daniel Garcia Navarro, is also missing similar data to Rodriguez. Wondering if the same internationalization issue is to blame I check it out.

Le Sigh.

Le Sigh.

An internationalization issue indeed! Some of my data includes both “last names” for Navarro while other data does not. Sadly there is no SQL entity for screening out irregularities in latin last name conventions vs middle names vs multiple first names.

Remember in my last post when I said I probably have more data cleaning to do?

sad Lance

Ive heard it said that data science is primarily about getting the data clean, so I’ll step away from the mic to work some more on the data set. I’m disappointed that I wont have a model to help me pick my Fantasy Tour de France team, but at least I have potato salad and apple pie to console me today. And unicorns, fireworks, etc

Happy Independence Day US!

Happy Birfday #merica!


Well I finally started getting things together around here, so welcome to the distant future, the year 2014. Ill be updating content / adding blog posts about what Im currently working on real soon now.