Tuesday, August 25, 2015

Women in Technology Part 2

Two decades ago, a friend and I co-taught a graduate software engineering class  at CU (University of
Colorado).  In addition, my friend was also teaching a project management class.

She knew I was good at generating discussions in class, and often came to me for advice on how to do that.  One day, she came to me deeply disappointed.  She had proudly come up with a topic that she expected would engender a lively discussion.  She asked her students, most of whom had been working for several years, what their experiences of sexism had been.  Dead silence.  She wanted to know why.

Laws affect our behaviors in ways we don't expect.  When there were no anti-discrimination laws, people could say to women, "it never occurred to me a female would want this job," and there would be no repercussions.  This did happen to me.  But once the laws were changed, and a few people got sued, people's behavior changed, even if their attitudes didn't.

If a boss, or a co-worker, had trouble with someone because she was a woman, he wouldn't say it.  He'd look for her weaknesses, we all have them, and those would become the "real" source of the problem.  By the time my friend asked her class about their personal experiences, a woman's experience of sexism was invariably, inextricably tied up with those parts of herself, that she was most ashamed of.

I am a very open person, even for an American.   My friend is German and reserved.  For that reason, alone, I had far more experience of this phenomenon than she did.  And, of course, I do have my weaknesses. 

The only prejudice on which I've seen people's attitudes change rapidly is in the area of gay rights.  The speed of that change in the US has been breathtaking.  With women, I could parrot the analyses about our relationships with our mothers, which, for some people, can be fraught, but the truth is prejudices die hard.  Racism in the US is still as virulent, though less socially acceptable, as it ever was.  When a man shot up a black church in S. Carolina, recently, I felt like I'd stepped out of time, and was hearing a broadcast from fifty years ago.

So, I think it's safe to say, that for the time being, sexism, racism, all the isms will continue to be an issue in the world.  We need to support each other, nurture each other, and accept the weaknesses of our co-workers.

It's the last day of the internship, and I thought I'd take a moment to reflect on both the summer as a whole, and this week in particular.

Since I did not finish the prototype, I was working on, so I do feel a sense of failure.

On the other hand, this project has also been referred to as a "proof of concept."  A "proof of concept," to me, indicates that the project demonstrates that an idea or a direction are feasible, and do-able in a finite amount of time.  By that metric, my project succeeded.  I am certain that a knowledgeable person could have a true prototype, starting from what I've done, in a matter of two or three weeks, possibly less.

The more difficult part of this internship, has been this past week.  I hosed the boot record on my OS, after my mentors were in Seattle. This happened because I was tired, felt I should work another five minutes, and did something incredibly dumb.

I was able to retrieve the data, but did not know the easiest way to restore the system.  I settled on reinstalling,  Because I was rushing to get back to where I had been before the dumb move, I made a series of equally dumb mistakes, sent panicked emails to my mentors (they have my sympathy), and
accomplished nothing.  By the time I fixed the dumb mistakes, I had realized that my second disk, which I needed to create guests, was also hosed. 

There are many things I could have done to try to fix this, but I looked at the amount of time that was
left, and knew that once I was done, I wouldn't have any time to move the project forward.  So I
settled on documenting what I had done, and where I was heading.  In the process of writing the document, I learned the answers to all my panicked questions of last week.  (I had kept good notes, I just forgot that I'd even known certain things.)

An aside to all women reading this:  no matter how good your memory is, you will experience times in your life when it doesn't work the way you're used to.  Pregnancy, menopause, aging, as well as injuries all affect it.  Don't rely on it.  Learn other ways of keeping track of things.  At some point you'll need those skills. 

There is another way of measuring the success of this internship.  How much did I learn.  By that metric, last week was a phenomenal experience.  Everything I had done by rote, the first time, is now something I understand, with a level of depth. 

I don't see myself as a panicky person.  Last week I panicked.  One of the wonderful things about being human, and adding years to my life, is that I/we learn to compensate for weaknesses.  This experience gave me insight into a frailty I didn't know I had, and one that is relatively easy to deal with. I feel bad that my mentors. who deserve medals for their patience, were on the receiving end of some of it.  However, I'm confident that I'll be able to recognize it next time, and take evasive action, within myself.

Thanks to all for this program. 

Tuesday, August 18, 2015

Women in Technology

     When I was a grad student at the University of Colorado in Boulder, in the late 70s, I attended a talk as part of a gabfest known as The Conference on World Affairs.  The Conference rules state that all speakers must be from out of state, be recognized in their fields (STEM, Literature and Arts, Politics and Media, etc.), be interesting speakers ...  Then people from each of the disciplines are mixed and matched to form panels on a wide range of topics.
      However, this was different, it was a talk given by a single woman, a semi-known sci fi writer, who has lapsed into obscurity.  She talked for an hour, and I only remember one thing she said:  that whatever sexism students had experienced in their lives, it was the least they were likely to find in their lives.
       Things have changed a lot, since then, in many ways.  But in others, they have changed not at all.  I have not worked for many years, for reasons unrelated to being female.   Even, as the joy of this work is returning to me (and the frustrations, of course), I am remembering the experiences I have had in technology, both positive and negative.
       I have worked for men, who have taught and encouraged me to explore all my talents.  I have had men, former co-workers, take their own time to mentor me, when I started my own business.  Overall, being a female has not held me back.
       There have been other not so pleasant experiences.  As I write this sentence, I am reminded of when my cousin's daughter was young.  She'd made a quick run to the corner store, while her family was visiting my apartment.  She was ten, and supremely self-confident.  She came back, and had no words for the kind of treatment, the men hanging out at the store had given her.  As they were leaving, her mother said to me, "I never know if it's better to let her grow up believing sexism doesn't exist; or whether I would do better to warn her."
        I'm not sure that  individual experiences are ever useful.  Anyone reading this has had and will continue to have their own challenges.  Ultimately, the reason any ism is so difficult to confront is that it plays out in ways that are unique to the individual on the receiving end.

Just had to take a moment to whine about the worst day of my internship. 

I was continuously interrupted yesterday morning (tax assessors, repairman - for needed repairs, etc.), and didn't get started until late.  So, feeling obligated, I worked late, and did something stupid.  I didn't realize how stupid until this morning, when my system wouldn't boot because it was unable to find the root directory of my logical volume.  About that point, I panicked - a seriously not useful response.

I built a thumb drive with a bootable ubuntu from my Windows PC  (with debian I would have had to install it).  Fortunately, all my files are still there, but I could only figure out how to access them from the File Manager.  I backed up the code I've written to 2 pen drives.

I took a bunch of walks.  Then I figured out how to access my files from Terminal, running as root.  Now I'm rebuilding Linux from what I got from the Torvald Linux github.   And I have a recipe for installing it so that's what will boot.

Before the next step, I think at the very least, I'll put everything (my files, Linux, xen, even /usr) back up on git, and, if I have to, I can restore everything, by re-installing, and getting stuff from git.  Not optimal, to say the least, especially so close to the end.

Thursday, August 6, 2015

on Communication

There is an old (and accurate) joke that asks:  What do you call someone who speaks two languages?
The answer - bilingual.  Q.  What do you call someone who speaks three languages?  A.  trilingual
Q.  What do you call someone who speaks one language?  A.  An American. 

There are days when I feel like the last question should really be - What do you call someone who can't communicate in any language?  The answer would still be an American.  Some days, when I'm trying to communicate what I don't understand, I find myself tongue-tied (typing-tied). 

I am, as these things go, a very articulate person.  But this summer, I learned just how many colloquial Americanisms I use. 

My mentors are a native French speaker, and a native Chinese speaker, who live in Britain.  It took me several weeks to realize that when they said they didn't understand my question, it wasn't because it was an irrelevant question, but, usually, because, I was speaking a doubly foreign language.

Also, when I'm asking an irrelevant question, it usually means I'm confused, and either don't know it, or can't articulate what I'm confused about.

It has been a humbling experience.

Thursday, July 23, 2015

It's time for me to start blogging again. 

First, and most pleasantly, I no longer feel so overwhelmed.  Work is starting to be a pleasure again.
After struggling, for far too long, to transfer a single integer from a xen front end to a xen back end, I expanded this code to handle multiple data transfers, of varying sizes, as multiple requests and responses.  This second task took me 3.5 days.  Quite a difference, and a relief.

I still want to be sure that before this internship is over, I have done something useful:  at a minimum a decent subset of the original task.   If I am able to continue to work more effectively, I might be able to finish the task.

I have learned a lot, so, for me, this hasn't been a waste of time,  but I do like to give value for money being paid me.  I began this project wanting to get into the Linux world (after 30 years of not touching Unix), and I have learned numerous tools, from shell scripting to an easy facility with find and grep, to git; concepts such as the Xen project, and how it is organized and the 9p file system.

Since I lost a week to health issues, I've committed to my mentors that I will continue for a week after the internship is officially over.  I suspect I will use much of that time to update documentation that tripped me up, so the next person will find their task easier.

Tuesday, July 7, 2015

I have been asked by my mentors to do a self-assessment.  I thought I'd post this, as a simple way to share where I'm at.

I am having trouble evaluating how I'm doing, because it's a matter of "compared to what?"  
I have a masters degree in CS and 30 years of experience.  For that background, what I have accomplished is pathetic, and painful to observe.  For comparison, I could not have done this project, at all, when I first finished school - three years out, I would have found it a cake-walk.

On the other hand, I have not worked regularly since 2003, due to health problems.  In 2011, I began working, with the intention of coming up to speed in web technologies, and the latest tools, environments, etc.  That was when I suffered a head injury. 

So my goals for this outreach internship were as follows (in this priority):
     Do something useful
     Come up to speed in some area of CS, with the shortest learning curve - i.e. so I can be useful in the future

     Learn where I still have cognitive deficits, and learn to compensate for them.
     Learn what my limitations are, so I don't oversell myself (I don't work as well if someone expects something of me that I can't deliver.)

Since this internship began, I have discovered two goals/outcomes, that I didn't expect:
     Rediscover the joy in software development
     Stretching my brain, so that the work is gradually becoming easier.  (too slowly by half but...)

What I’ve done:
    Set up a Linux box and built kernel and xen from source
                Wrote a requirements document for project
                Wrote a combination low level requirements doc and partial design document for the 9P portion of the project.
                Determined that there is no 9P server code for my back-end to talk to, but that there is a server embedded in virtio’s 9p back end.
                Agreed with mentors that simplest approach is to port virtio, and use as much of their server code as possible.
                Coded, compiled a simple frontend that writes an integer to a ring, and a backend that reads the int.

What I’ve learned.
9p file system requirements for client and transport.
Much about how virtio implemented the 9p fs transport and server.
The xen communication model between front and back ends, including xenbus/xenstore (finally (!) got it that they were the same), ring buffer, grant tables, and how to access each of these.
            Relearned many Linux commands:  Find, grep, makefiles, cat, cd man, scp etc.
How to track down and solve errors with google
Different versions of Qemu, and which one to use
What it takes to build in Qemu, and add modules to it
            How to set up linux kernel configuration file.
            How to build and run a kernel module in debian
            Many tools (emacs, vi, pastebin, github, blog, etc.
The biggest hold-up is that I have taken a number of false paths, and, more importantly, taken too long to recognize them as such, in chronological order:
               Trying to get Network manager to work with bridges (this was 4 days)
               Misreading something and thinking v9fs was a 9p server, not a client. (3 days)

               Road maps that did not match mentor’s expectations (?)

               Trying to set up VMbox for testing. (2 days)
               Spending too much time trying to understand blkback.c (2 days)
               Tried to compile my backend stand-alone – bad idea (a few hours)    
                   Others I’ve forgotten
It's possible that it's taking less time for me to recognize these false paths, but it's too soon to tell.  But it's not like all that time was wasted, since I did learn things in the process.

As far as where I'm going - the small modules I've written will provide a secure scaffolding to develop the main project in.  I've provided a communication between front and back end, learned to build them, and (very soon) will know how to test them. 

The next steps are to modify my modules to handle multiple requests, from multiple sources.  And then add 9p transport code.  This last step would be impossible in the time allotted if I had to write the server side from scratch (as virtio did).  Using what they've done on the front and back end (making this project a port), it is still possible to finish this, by late August.

Friday, June 26, 2015

It's a good thing I read the blog I wrote 2 weeks ago.  I feel like I haven't done anything.  Actually I did the following:
   1.  Wrote up a requirements document for the whole project.
   2.  Wrote a partial design document for the 9p portion of the project, with more detailed requirements of the whole system.  In the process I discovered there is no independent 9p server running on Linux.  there is one embedded in the virtio implementation.  I will be modifying that. 
   3.  At my mentors' suggestion, I began coding part of the Xen portion of this project:  a simple front and back end that communicate via Xenbus, an event channel, and a shared memory ring to pass an integer between them.  
   4.  One mentor suggested that I use VMbox for this.  I misunderstood his reasons, so I spent FAR too long trying to get this to work.  Which brings me to my issues:

I signed up for Outreachy because 4 years ago, after being unable to work, for a number of years, due to health problems, I began working again.  I had worked 2 months, when I was rear-ended, and sustained a very mild brain injury.  After therapy and rehab, I am ready to work, again, but I need to learn how to cope with some differences in the way I learn, and approach problems.  For instance, where my judgement used to be instinctive, and accurate, I am finding I have to question it, and reassess, more often.  None of my problems is insurmountable.  But it will take me time to discover how they manifest, and how to compensate.

The reason I'm impressed with how much I have done in the last two weeks is that I still have health problems.  Last week, I had to stay away from my home for a few days.  This week, I had two procedures done on Wednesday, that took up part of Monday, almost all of Tuesday, all of Wednesday, and all of Thursday (while I recovered), during which time I did no work.  Fortunately, that's the last thing I have to do for a year.  I will be working this weekend to make up some time.

I have also come up against differences in style between my mentors and me.  Since I am learning/re-learning what constitutes optimal work habits for me, I suspect their judgement is better than mine.  So even when I disagree, I will try everything they suggest.  So far, they have been right. 

Still since I don't always understand them, I do need to question them more often, to make sure we're on the same page.

Wednesday, June 3, 2015

This is just a post to acknowledge that I created this blog for Outreachy.  I have been slogging through installation and systems administration issues.  And reading about everything related to my project.