We need your help.

Hello friends and family

I hope this message finds you well. I’m writing to you out of concern for the things that have been going on in the US that affect me personally and which I would ask for your help in remedying.

Two weeks ago, a transgender woman was attacked in downtown Portland. This was the latest in a series of anti-LGBTQ hate crimes in our city, which have been on the increase. The Director of Basic Rights Oregon, an advocacy organization for LGBTQ rights, had this to say about the incident:

“Personally I think there is an uptick in anti-LGBTQ+ violence and hate crimes, and there’s an atmosphere of hate being emboldened in this moment” – Nancy Haque

Last weekend, several hundred white supremacists and neo nazis from as far away as Arkansas descended on Portland for the 15th time in the last two years with the intent to violently assault Portland citizens. An attendee of these events, Jeremy Joseph Christian, killed two men on a commuter MAX train last year because they stood up to him screaming anti-Muslim epitaphs at two young girls. The train where these murders took place is one that my partner regularly took home from work.

It is not a mystery why our city is being targeted or why I have never seen this kind of violence in the 15 years I have lived here. As Nancy stated, hate is being emboldened in this country and Portland’s position as a progressive city makes us a target.

When the President bans transgender people from military service it sends a message that transgender people are second class citizens. When the President rescinds protections for transgender students it sends a message that discrimination against transgender people is permissible. In fact, since the President rescinded title IX protections at least 6 states have put forth bills legalizing harassment of transgender kids in public schools Furthermore, the DOE has announced it will no longer follow up on civil rights claims by transgender students.

Following signals from the White House, hundreds of state level bills targeting the LGBT community have been put forth attacking transgender healthcare, bathroom access, and foster adoption. Significant numbers of children in foster care are LGBTQ identifed and report facing discrimination and bias. Despite HRC’s findings that LGBTQ foster kids need to be placed in affirming homes,Oklahoma and Kansas recently enacted bills allowing adoption agencies, who receive state and federal funding, to discriminate against gay and lesbian parents wishing to adopt

The US government is based on a system of checks and balances. The three branches of government; executive, legislative, and judicial, are intended to be a check against one another. It has become clear that the Republican party, with majorities in the Senate and House, will not check the discriminatory actions coming from the White House.

I cried while watching Oregon Senator Merkley and several Democrat colleagues introduce the Equality Act last May, which would put an end to discrimination against people like me at the Federal and State level by officially amending the Civil Rights act to include sexual orientation and gender identity. I can’t express to you the incredible emotional stress and anxiety that has become part of my daily life as a result of living in a country where hatred toward my very existence comes from the highest levels of leadership. Only two Republicans have joined 196 Democrats in sponsoring this bill, which still has not been reviewed by committee. Even at the state level Republicans are blocking efforts to pass laws protecting LGBTQ rights, such as with several house and senate bills in Virginia

The GOP’s website articulates their platform against LGBTQ rights very clearly:

We endorse the First Amendment Defense Act, Republican legislation in the House and Senate which will bar government discrimination against individuals and businesses for acting on the belief that marriage is the union of one man and one woman.

It is the foundation of civil society, and the cornerstone of the family is natural marriage, the union of one man and one woman

As it relates to allowing adoption agencies to discriminate against LGBTQ parents:

We support measures such as the First Amendment Defense Act to ensure these entities do not face government discrimination because of their views on marriage and family.

And transgender rights:

Their edict to the states concerning restrooms, locker rooms, and other facilities is at once illegal, dangerous, and ignores privacy issues. We salute the several states which have filed suit against it.

I hope by now you understand, the Republican party in 2018 is intentionally and proudly anti-LGBTQ rights. I wish it were not this way, and frankly I am disappointed that the party of Lincoln has become so extreme as to assault American citizens like me, both physically as we are experiencing now in Portland and legislatively at both the Federal and State level. The impending appointment an extreme right Supreme Court Justice Brett Kavanaugh is widely understood by LGBTQ advocacy groups to cause even more deterioration in our fundamental human rights.

This has been a long letter, thought it represents only a fraction of court cases and legislation attacking LGBTQ rights in the last 2 years. If you are still with me thank you for reading. It took me a while to put this together because it is very emotionally taxing to re-read all of the new articles and legislation I’ve cited here.

For the last several months I have been donating to the campaigns for Bob Casey and Bill Nelson. If you are registered to vote in PA or FL my request to you is to vote for these candidates. That is how you can help me, my partner, and others like us. If you can also contribute financially or otherwise to those campaigns I would greatly appreciate it.

As I have put forth here, the Republican party has abdicated its responsibility to check the President, we need a Democrat majority in the Senate and House so that my fundamental human rights are protected. Please consider the stated policy positions of the Republican party and their history of anti LGBTQ legislation when you vote.

Nelson For Senate

Bob Casey

On Coming Out and Being Trans

I’ve spent a lot of time trying to put into words the feelings I have about myself and why Ive come to identify as transgender.  The short version is: I am just me. But as humans we like to classify things, and because visibility of non cishet experiences is important I affix a variety of words to myself to describe my experience of being a human.

Its particularly hard to talk about the nuances of my experiences because of popular trans narratives and the need to discuss experience of gender in cishet normative language. I didn’t hate my female body. I wasn’t sure about getting top surgery. I’m not sure about HRT. I didn’t spend a lifetime hiding who I am out of fear; I simply had no idea.

The first time I remember thinking about gender at all was in second grade. We had a speaker come to class to tell us about Boy Scouting. It sounded incredibly awesome, I remember scribbling down notes on my manilla folder and excitedly talking to my parents later that day at the dinner table.  They chuckled, and said ‘oh, you can be a Girl Scout.’  I was really confused. I wanted to be a Boy Scout, I hadn’t even considered the world as a gendered place. I didn’t know what Girl Scouts was and I didn’t care; I knew I wanted to be a Boy Scout.

I grew up in a very rural place and didn’t spend time with other kids until I went to grade school. As I began socializing with other kids I started to understand gender. My attempts to play with the boys ended in being mocked, shoved away, or occasionally hit because I didn’t look like a boy.  I was entirely disinterested in playing with girls. It was more than not liking pink or cartwheels. I just didn’t feel right around girls. They felt like a foreign universe to me, something I couldn’t relate to or understand. They didn’t feel like me.

My mom often talked about the difference in her pregnancies between me and my sister. They were so different, in fact, that she said they were sure my sister was going to be a boy.  I would lay awake at night as a young child and think ‘it was me who was supposed to be the boy’ and face the horror of feeling trapped. There was nothing I could do; I had been born a girl. It was a mistake that could never be fixed.

Throughout my life I tried various things to feel comfortable with myself. A lot of the time as a kid I was a loaner, I didnt fit in at school and I simply couldn’t ‘act like a girl.’ Around 7th grade I started channeling all my energy into trumpet playing. I pursued music obsessively through high school. Instead of going to parties I would practice for hours every night. Instead of going to prom I went to All State Band.

The music obsession gave over to obsessions with fundamentalist Christianity and studying engineering in college. I was thrilled to stumble across the book “I Kissed Dating Goodbye” which was popular in Evangelical circles in the early 2000s. Don’t date until you are sure you’ve met “the one.” Full of quips such as “You wouldn’t want someone making out with your future spouse, would you?” it seemed like the perfect antidote for my failed attempts at heterosexual relationships. It was a relief to have a justification for not dating. At the same time the cissexist troupes I saw at church felt abrasive and alienating to my naturally gender bending ways.

All this time I was in pain. I had lost touch with my childhood convictions that I was born wrong; what could I do about it anyway? The pain didn’t have a name or a cause. It just manifested in a constant state of frustration, distrust, and defensiveness I am still chipping away at.

At some point I realized I was running away from something. About 4 years ago I found myself switching careers on the job, doing 40hrs a week of analog circuit design work while working 1 day a week in a software team knocking the cobwebs off my coding skills and learning app development. If that wasn’t enough, I was also training 10-12 hours a week to go on a bike tour in the Dolomites, the Italian Alps, often with my long workday book-ended with workouts.

One evening, following a two hour spin class after a long work day, I found myself standing over the kitchen sink hurriedly scarfing down some pizza at 8:30 thinking “I need to eat quickly, so I can go to bed in an hour, so I can wake up at 5:15 for my next workout.” It was in that moment I thought “something is really wrong here.” Why was I packing my time so densely? For the first time in over 20 years I stopped to consider that I was self medicating with activity.

That summer, after the bike tour, I forced myself to have downtime. I stopped working out all the time. I stopped the activity. I started observing how I felt. Why was it that whenever I went on a date there was only 1 piece of clothing I felt good wearing? Why did I leave my dates with men feeling confused and occasionally sick?

I began to workout again, being careful to limit my workouts to a reasonable amount of time to cultivate a maintainable lifestyle. I rediscovered my interest in building upper body strength. I started spending time in the queer community, shocking myself as I discovered that I was good at flirting.. I just wasnt interested in cis men.

Just before my 33rd birthday I realized I was gay. How was it that I had lived 33 years and not understood such a core thing about myself?  As I mulled over this I remembered all of the masculine traits I had buried. Suddenly it all made sense; at a very young age I believed that I was made wrong, a mistake. I had learned to blame myself for not understanding dating, assuming I was unattractive physically, too masculine, and not good at being a girl enough to woo the boys. I had no idea what attraction even was. I had come to see myself as a failed heterosexual female.

At the time I had enough on my plate, dealing with coming out at an age when other queer females were already settled down with wives, children, dogs, and established friend groups. At the time I didnt consider being trans, but I also knew I wasnt a lesbian. I spent time cultivating my masculinity, which now was imbued with a certain swishiness from a lifetime of female socialization.

The grieving process has been intense. For the boyhood I never knew, for the adolescence which had only acne and angst without sexual and emotional exploration or feelings of attraction. And now the pain of undergoing a gender transition at the age of 36, within an established career, social, and familial relationships.

No where in this has been decision. I thought being gay was to find women more physically attractive than men, until I learned what attraction actually is. I thought being trans was preferring a different body to what you have on an aesthetic basis. I agonized over top surgery. Would my female body look mutilated without breasts? After a year of analyzing my body and mental state from every angle I ultimately had surgery because deep down inside, in a place I couldnt understand, I wanted to experience life without breasts. I didnt know why.  Upon the surgeon revealing my post op chest, my partner reflected back to me that I was beaming.

A few weeks later, looking at photos of my preop chest, I felt disgusted by my breasts. I practically gagged and quickly turned away.  The reaction caught me completely by surprise. I had never hated my breasts, consciously anyway. I began to understand that I couldnt control transness; it was not, as I had assumed, about how I wanted my body to look aestheticaly. It was something much deeper in my psyche, about how my mind expected my body to be in a way.

My decision to start HRT about 3 months later was spurred on both by the incredible discomfort I felt occupying ambiguously gendered space and by accepting that being transgender was something that, for me anyway, was simply a fact of who I am. My discomfort with being ambiguously gendered was rooted in my understanding of myself as a male, though it is still really odd for me to refer to myself as such.

My preop fretting about the aesthetics of my post op chest disappeared when I woke up from surgery with the awareness that “they’re gone,” and that upon realizing my breasts were gone, the physical sensation in my body had not changed. My mind had never known my breasts were there. The lifetime of discomfort with bras, slouched shoulders over my A cups, were symptomatic of a disconnect between my brain and my body.

I saw a quote recently on the internet about being trans, something along the lines of “I am a boy, but I am a boy who looked so much like a girl that I thought I was supposed to be one.”  I think that definition of transness is closest to what I feel. I dont want to be male. I am male. Im just not the kind of male the cishet normalized world expects.

When you gotta go

My manager stopped by my cubicle signifying the start of our weekly check-in meeting. As we were heading out to find a conference room he excused himself. “I keep forgetting that we cant have our one-on-ones in the men’s room,” he joked as he headed for the restroom.

The main engineering building where I did my studies was called Hitchcock Hall. It seemed a fitting name for a place so dark and dimly lit that a significant pause upon entry was required on sunny days. When the blinding darkness subsided you could continue into the foyer without risk of running into someone or tripping up the stairs. Freshman engineering students on their way to drafting and design classes passed through this windowless hall with low ceilings, flanked with portraits of mostly white male engineering professors. It was a five floor structure.

During my time in school, Hitchcock had three women’s restrooms. We heard that the building didn’t have any women’s restrooms originally, an artifact still present in floors 1-4 where freshmen engineering classes were taught. There was a women’s restroom on the far end of the first floor near career services in a newer portion of the building, and an unmarked, converted men’s room available somewhere on the second floor. A few years later I learned of a third women’s restroom in the basement. Finding women’s restrooms in old engineering buildings; a scavenger hunt!

I remember one of my freshman engineering classes quite well. It was where I learned that I was good at programming. It was a class of 60+ freshman where my friend E and I were the only female assigned people. Long beige tables set out in front of a white board where our TA occasionally scrawled things in colorful dry erase.

On the first day of class E and I sat in the second row, close enough to smell the markers. As the TA gave an overview of the course and discussed a free form design project, a voice behind us shouted out

“Can we redesign women?”

While my face was reddening a few boys laughed and I heard another fellow mutter

“Dude – theres two girls up there!”

Shaking, I turned around to face him and said

“Only if we can redesign men.”

Welcome to college, freshman female-assigned engineer.

As if these interactions were not enough of a thorn in my side I was quite ill during my freshman year, sometimes necessitating several trips to the restroom during class. Our programming lab was on the fourth floor. I was afraid to try and find the second floor unmarked women’s restroom, which was later adorned with a colorful paper sign thanks to Society of Women Engineers, so I tromped from the fourth floor to the first and back with my sore belly, sometimes several times over a ninety minute lab period. More time away from class. More steps to climb than those who used the men’s room.

Recently I was preparing to attend a networking event. Two months post top surgery, nervously figuring out what to wear to appear professional enough but not overly formal, and figuring out how to negotiate the bathroom yet again. Overweight from holiday eating and bloated from monthly happenings I carefully gauged which size cotton stick would plug me up sufficiently to make it through the meeting. One more trip to the restroom before I leave the house. I could make it without using a restroom, I told myself.

Despite carefully rationing my fluid intake during the two hour meeting I found myself needing to go. I slipped away while the talks were finishing up, hoping to avoid restroom confrontations. This is my life now, split second judgements on which restroom to use based on a tradeoff of likelihood of getting harassed or perceived a pervert, need to deal with monthly happenings, and confusion of new acquaintances seeing me in a restroom unexpectedly. The bathroom is not four floors away but it may as well be.

I’m sitting. I’m peeing red. I’m wondering if expelling gas really loud will help establish that I am In The Right Restroom. I’m pretty sure I won’t bleed through my pants for the remainder of the meeting, the networking session I absolutely need to take part in to make business connections.

I put my business face back on and return to the meeting, confidently approaching strangers with businesses similar to mine, trading advice, business cards, and making off the cuff pitches of my services. Finding the right moment to intercept introductions to clarify that my pronouns are he and him, watching faces begin confused and shift to “ohhh… got it.” Today I am lucky; most of those moments end in affirmation, if slightly bewildered. I’m pretty sure I’m not yet bleeding through my pants. I return home clutching business cards and scribbled notes, totally exhausted but too anxious to take a nap.

I wonder what my old manager would say if we run into each other in the men’s room.

A Letter to Elected Officials regarding the Malheur Occupation

Ive really had enough of the lack of response to a community and public lands being held hostage & deliberately destroyed by armed domestic terrorists. I am sharing the letter I sent to my state reps & President Obama. I encourage you to let your elected officials know what your thoughts are as well. If you would like to contact your reps you can find them here

Dear Governor Brown, Senator Merkley, Senator Wyden, Representative Blumenauer, and President Obama

As an Oregon resident, tax payer, and outdoor enthusiast hailing from a small, rural community I am asking you to take action regarding the illegal occupation of the Malheur Wildlife Refuge.

As someone from a town even smaller than Burns, the precedent set by the lack of response to the Bundy brothers & the band of militant, military-grade weapons wielding people that have come to support them deeply concerns me. Since nothing has been done to remove these occupiers or censure their prior activities what is to prevent such people from taking over my hometown and demanding what they wish of my family & friends? The lack of action to mitigate these situations sends a message to similarly minded domestic terrorists that they can do the same.

While my friends participating in peaceful, weaponless protests have been shot by rubber bullets and tear gassed by the police, there has been no response by local, state, or federal law enforcement against the occupiers in Harney County, who are armed with semi automatic weapons, the threat of which has closed schools & businesses, who have threatened local government employees and harassed private citizens and destroyed public property. It is totally unacceptable that peaceful protest is met with violent militaristic force while aggressive, armed occupation met is with nothing save a few words of disapproval.

A few years ago I was on a backpacking trip in the Badger Creek Wilderness, a public land not unlike the Malheur Wildlife Refuge. Some armed people showed up near where we had setup camp and started unloading rounds into the woods, unaware of our presence. If armed occupation of public lands is not met with swift action by state & federal law enforcement then any hiker, backpacker, birder or other enthusiast can be ambushed & taken hostage by such armed militants.

The availability of military grade weapons to civilians and the lack of response by law enforcement is giving a frightening platform to armed anti government terrorists. I am afraid for the welfare of myself, my family and my friends.

I ask that you do something about this situation, and the things that have enabled it to go on un-checked.  Please remove military grade semi automatic weapons from circulation. Please ensure that the response of law enforcement is consistent. White, armed men do not deserve special treatment. They should be subjected to the same tear gassing, bean bag and rubber bullets, physical intervention by the police for resisting arrest, and cutoff of utilities that other US citizens face.

The Bundys, armed white men, have occupied Malheur Wildlife Refuge for 8 days and have entertained the press, shaken hands with the local sheriff, and been visited by an Oregon legislator. Tamir Rice, a 12-yr old black child, is dead for playing with a toy gun, shot 2 seconds after the police arrived on the scene.  For the crime of wearing a hoodie, walking through a yard armed with skittles and iced tea Travyon Martin is dead, while George Zimmerman signs autographs at gun shows.

Please help make good on our pledge, because it is failing the majority of US citizens and the handling of the Malheur occupation is a prime example – “Liberty and Justice for all”

Thank you


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 😉

Can you awk what I sed?

Cleanup work continues on #letourpredictor data, in the mean time I’m doing some other hacking related to Le Tour.

Yesterday Le Tour lost yet another big contender, Chris Froome. Perhaps Team Sky made a premature call leaving Bradley Wiggins on the sidelines, as they now have no big GC hope for Le Tour. Froome crashed out twice in yesterday’s stage over the cobbles, the second time winding up in the team car and officially abandoning the race

Heal soon Mr. Froome

Heal soon Mr. Froome

I have an interest in Twitter data. For the 2012 US general elections I wrote a program to monitor how major US news media outlets were calling the races. I’m also working on a D3 visualization of Portland’s snowpocalypse back in Feb of this year.

For both of these projects I wrote custom scripts to gather twitter data. Since capturing real time Twitter activity is an ongoing interest Ive wanted to create a generic script that I could fire off at will, so I figured this was a good opportunity to get started on that and continue learning python.



Chris Froome abandoning is a Pretty Big Deal, so I decided to capture the Twitterverse around this event. Time was against me, as I would have had to be awake at 5:30am PDT to even witness his Tour ending crash let alone that I had 0 code to capture to Twitter stream anyway.

So at about 7:30am PDT I sat down with some coffee, watching the rainy stage of reckoning come to an end, and started a mini coding marathon.

Shut up fingers!

Shut up fingers!

Since Id missed the stream, I setup a script to start capturing the tweets from the current time back to the time of the crash that ended Froome’s bid. I used the Twython package and it worked like a charm. Again, Ive really been impressed with how pleasant coding can be outside of a behemoth framework like .NET. I’m not slamming .NET, more that as a relatively new coder thats all I’d been exposed to. While its great for many things I’ve felt it can get in the way when I’m trying to do something quick and dirty like.

Speaking of dirty

Speaking of dirty

I made a new database to suck the tweets into and started querying twitter. The code is here.

I sent a search query to twitter for “froome” and captured things I thought might be interesting to visualize – the tweet text, geo location data if any, language. There isnt a way (that I am aware of) to tell twitter you only want tweets from a certain time; you have to use the max_id field. max_id tells twitter that you only want tweets that occurred BEFORE the id specified; so I would take the id from the last tweet in the current data set to use for the max_id in my next query. Given rate limiting, and that I ultimately collected 40,000 tweets getting back to the crash, I had plenty of time to stretch my fingers, make lunch, knit an afghan, etc

Thats a lot of Tweets

Thats a lot of Tweets

OK great, so where do sed and awk come in?

I’m getting there!

Initially I wanted to make one of those super cool world heat maps that showed, in timeline form, how people around the world reacted to Froome’s departure.

Such as this sexy beast

Such as this sexy beast

As I looked through the data however, I noticed that the geo data was mostly missing. The chart below shows the number of tweets when Froome abandoned, next to the number of tweets that had either “geo” or “coordinates” specified. Less than 5% of the tweets had geo data!

Tweets around when Froome abandoned - 4000 tweets, but less than 5% had location data!

While for many of these tweets the “location” field was specified I didnt want to try and convert text to geo locale. For starters I figured I’d just make a simple line graph corresponding to the tweet volume around the events. Screen shot is below, click here to view an interactive version.

Time in UTC

Time in UTC

Having poked around with D3 a little I decided I wanted to investigate some prepackaged options to quickly generate this basic graph instead of coding it from scratch. I stumbled upon this site and ended up giving the Google Chart API a whirl.

(FYI, sounds like Google Charts support is ending, but the API will live on)

This is where sed an awk come in!

I have run into sed and awk occasionally in my *nix adventures. I like slick one liners so when I had to format my data for the Google Chart API I turned there.

Google has a very cool playground for testing out your chart. I basically just pasted my data into the Line Chart example and made some tweaks to the visuals and I was all set.

The arrayToDataTable function takes tuples in this format

[ “x label”, “y label”],
[ “x data1”, “y data1”],
[ “x data2”, “y data2”]….

My data looked like

6, 12.14,
2, 12.15,…

So I needed to swap the columns since ‘tweets’ was my Y data, convert the “.” to “:” for the time, surround the time in quotes, and add the brackets. Sed & Awk to the rescue!

No case to big, no case to small. When you need help just call..

No case too big, no case too small. When you need help just call..

I saved the initial data to a file “text2.txt.” To swap the “.” to “:” –

sed s/’\.’/:/ text2.txt > text4.txt

And then, in 1 line with awk I was able to do the rest of the transformations!

awk -F, ‘{print “\[\”” $2 “\”,” $1 “],”}’ text4.txt > text5.txt

resulting in


Ooops! I dont want all those quotes around “‘time'” so Ill tell awk to do something different with the first line

awk -F, ‘{if (NR!=1) {print “\[\”” $2 “\”,” $1 “],”} else {print “\[” $2 “,” $1 “],”}}’ text4.txt > text5.txt


Ahh, thats better!

Id like to do something more interesting than a line graph with my #froome data.  I’m guessing sentiment analysis will be predominantly bad, so perhaps not that. 😉 I may make an attempt at mapping the data, or perhaps following the RT trail from the BBC Sports initial tweet of Froome’s abandonment. Until next time!


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!

Much SQL! So excite!

So after much data scraping and cleaning I’m finally ready to start analyzing.. by which I mean discover how much more cleaning I need to do 😉

Lets have a good, clean race

Lets have a good, clean race

I wanted to add a word on some of my data gathering techniques. I’ve been primarily scraping the data from ProCyclingStats but sometimes I come across data that isnt as scraper friendly. Case in point, 2013 TdF results:

Mmmm span

Mmmm span

Thats a lot of span! I had been using next_element to parse the start list data (you can find the code for that here) but this particular piece seemed outside the 80/20 spectrum. I manually scraped and formatted the data which, while tedious, seemed reasonable to me since it is a limited, immutable set. That being said the html, while span laden, has a defined structure so if I feel inspired to write yet another scraping script I could probably do so.

Some other things I learned are loading sql scripts in psql, which is useful if you want to forgo the whole connect to db thing in your scraping code:


\i is your friend

I used this method to insert the team roster data.  I also used it to keep track of queries to the data set!!


Which looks like this for the 2013 Tour results!

Is KOM an indicator of GC ?

Is KOM an indicator of GC ?

Its been about 14 years since I did any SQL joins (not a lot of SQL in hardware design) and I found this oldie but goodie an excellent refresher. Also, who doesn’t love a good Venn diagram?

Hooray for Venn Diagrams!

Hooray for Venn Diagrams!