AdaCamp SF: My first un/conference! (Day 1)

I’ll be the first to admit that blogging isn’t my strong suit, but when things are so overwhelmingly exciting/positive/supportive/awesome/etc, I feel the need to shout from my tiny step stool of a blog and spread the word! AdaCamp is one of those things.

I’m not the best at explaining what things are so here’s AdaCamp’s description of what AdaCamp is:

AdaCamp is a conference dedicated to increasing women’s participation in open technology and culture: open source software, Wikipedia-related projects, open data, open geo, fan fiction, remix culture, and more. AdaCamp brings women together to build community, discuss issues women have in common across open technology and culture fields, and find ways to address them. – http://sf.adacamp.org/

What is probably the most fascinating thing about their description is that it’s overwhelmingly true. The experience of coming to a conference focusing on tech and seeing that it’s almost 100% women is incredibly moving. There’s an ache and a cry for this sense of community in a world that’s primarily male.

Although everyone is different and many of the issues we discussed could be experienced by males as well, many of the topics resonated with so many women that it was almost unbelievable.

Friday started out with Google SRE hosting a reception for AdaCampers. It was such a nice little gesture for people to meet and greet. I met some fantastic people that I hope to maintaing some long term friendships with. The food was great and the company was bustling. Thank you Google for hosting us, and giving us swag. :)

Saturday morning was the official start of AdaCamp and it was really early for a night owl like me: 8:30AM! I have this tendency to wake up multiple times during the night for things that I am super excited for (sometimes, I don’t even sleep), and I definitely woke up a few times to check if I had suddenly missed out on AdaCamp all together. Cue reoccurring nightmares of missing finals despite the fact that I’ve graduated over a year ago. I did manage to wake up on time (it helps when you’re staying at a fellow AdaCamper) and dragged myself out of bed in a rushed attempt to look presentable. I did bring some makeup, but I figured I should sacrifice painting my face for brushing my teeth.

The morning started off well, we had a welcome speech and some breakfast. Let me say, the breakfast was pretty amazing. As a carnivore and as a person who doesn’t have food allergies, the spread of food was amazing. I’m used to meetups that just order in pizza, generally ignoring cries of vegans and people with gluten allergies. But there was so much variety in food that I was honestly so impressed with the organizers. I think the type of food and policies really reflect on the core values of AdaCamp. They really want to welcome everyone who wants to participate and create a space where you don’t feel like your dietary restrictions or disabilities make any difference at all.

I had applied to AdaCamp thinking that everyone was going to be in open source and a programmer. But I was so wrong. There are so many diverse people attending this unconference: professors, activists, students, journalists, feminists, fandom contributors, project managers, etc. There’s such a variety of people and they all bring something different to the table. And having this diverse set of opinions and values really prompt an interesting discussion. And  I’ve come to learn that I have a unique perspective as well. It’s such an empowering feeling to know that everyone has a say and that we can be adults and discuss important aspects of being a woman in tech.

I’ve gone on a tangent as I often wont to do. After the intro, we had a lovely discussion on Impostor Syndrome[1]. I’ve heard of Impostor Syndrome a few times and I’ve definitely dealt with it before, but having a room of 200 women discussing their internal struggle with not feeling like they’ve accomplished something amazing or wanting to downplay their achievements is just short of life changing. It was just so amazing to see women who I would consider role models or have such an air of confidence speak up about feeling or once feeling like they weren’t good enough. It really helped me put my own gripes in perspective and hopefully, I’ll be able to overcome this annoying voice in the back of my mind.

After the large group discussion on Impostor Syndrome, we broke into discussion groups. One of the cool things about an unconference is that you get to vote on what kind of sessions you want to talk about. There were so many good topics that I had an awful (in a good way) time of trying to choose where to go. I liked that there was a “no guilt” policy in place, that is, if you wanted to leave a discussion to go to another one, you are more than welcome to and no one will be offended.

I decided to join the “What is this HTML5 thing everyone is talking about?” and one dealing with the Likability Paradox. I thought the HTML5 introduction was really well done. I’ve heard of HTML5 for a long time, but it was always one of those topics that I felt a bit embarrassed to ask about since HTML isn’t the most complicated concept in programming. The woman who lead it gave such a good history on it and explained it in a way that anyone could understand it. I didn’t feel like I was patronized for asking simple questions and the discussion was very much encouraged.

The likability paradox was also interesting. I’ve never personally heard of the term before and haven’t experienced it enough to be able to identify it. Basically, there seems to be a problem for women to be both likable and respected. We’ve all heard of a woman being aggressive/assertive/ambitious and then being labeled as a “bitch” or other not so nice words. Whereas if you’re nice, people seem to get the impression that you’re a pushover and don’t really care about advancing your career or whatever. I thought it was interesting to see people talk about their experiences and kind of vent on their frustrations. But I was also impressed to see that the discussion wasn’t just focused on “oh woe is me, I’m being treated differently as a woman” it was more focused on what we can do about changing other people’s perspective. There were even a few times where people realized that they weren’t being unfairly disrespected, but that they were just misinterpreting someone’s actions. I thought this was really important because I feel that AdaCamp isn’t a place for women just to vent about how the world is being unfair to them, it’s a safe place for women to share their experiences and try to find solutions to the problems as well as a place for us to support each other.

Lunch was a build your own sandwich deal. Personally, I’m a carnivore. I don’t seem to find vegetarian meals filling most of the time, but it was nice to see that people who don’t eat meat or have allergies had a selection of food that would parallel my own selection of food in the real world. The food was good and the company was even better.

Post lunch, we broke for more discussion sessions. I decided to go to one about Hobby Level Open Source. I think I’ll write a longer blog entry about this later on, but I received some good feedback and why it’s hard for some people to get into open source.

After closing, AdaCamp had unofficial dinners set up where people can sign up for dinners at restaurants around the city. I decided to sign up for one on mentorship. There’s not much to say, but the dinner was delicious and there was such a variety of conversations that were to be had.

Day one was amazing and I feel like this is way more than I would normally want to read about a conference, but I just have so much to say and I am so excited to blog about it.

PS. With all the amazingly colored hair at this conference, I really want to dye mine. :D

[1] http://geekfeminism.wikia.com/wiki/Impostor_syndrome

Is OPW sexist?

Today was my last day as an OPW intern and I had hoped that it would end on a positive note. Upon our wrap-up meeting, the discussion of having a women-only program is sexist came up.

Now, this is a topic I feel really strongly about and it’s something that generates strong reactions from either party and I’m not even really sure that I want to get caught up in the mix, but I feel quite unsettled after being part of it.

I’ve been programming since high school. When I started, my classes were 50/50 in gender ratios, partly because my school was 75% female. I had noticed that there were more males in my class than usual, but since the ratio was equal, I never had the notion that women were underrepresented in the field. Then came college. There were significantly less women in my lower division classes, but since some classes were required by other engineering majors, the disparity was not as stark. I made many female friends during this time and was able to work on projects together.

Then came around to upper division classes. Suddenly, I was one of the few girls in my classes. There were times when I’m the only one. When people say that it shouldn’t matter that I’m a girl or not, they’re right. It shouldn’t. But it does. The fact that I was a girl stood out, intentionally or not. If I was absent, it was obvious. If I was in class, it was obvious. My presence stuck out.

For the most part, I tried not to let it bother me. I tried to be like one of the guys. But I’m not a guy. So when people are making guy jokes, it was very uncomfortable for me. Things like how hot a girl was and how they would like to get to know her. Or things like how I was the hottest girl (when in fact, I’m the only girl) in CS. Or how I should cover up my boobs because I was wearing a v-neck tee, which frankly didn’t even show cleavage. I tried to grin and bear it because, hell, I can hang with them; I’m a guy’s girl.

During this time, I treated a lot of women as not cut out for my field. I started woman hating. I thought, hell, I made it in CS, why can’t you? You’re not smart enough. I thought I was goddamn special for being a CS girl.

But on the other side, I was horrible insecure. I felt like I was never good enough. I felt like I had to work twice as hard to be “as good as one of the guys” when in fact, I was better than some of them. Every thing I did was not as good. I felt inferior to even the terrible programmers.

Now you can say that I just have terrible confidence and I brought it all upon myself. But I don’t think that’s true. Whether explicit or not, there’s a message out there for female programmers, “You’re never going to be a man and it’s a man’s world.” And I feel it everyday.

This brings be back to the point on OPW. I don’t think OPW is sexist at all. Yes, it excludes men as participants, but men are welcome to mentor and help interns. There are no restrictions on men voicing their opinions. There are plenty other avenues for men to participate in Hacker School, Google School of Code, to name a few. There are countless ways for men to get in touch with other like minded men. There are plenty of male role models for men to get inspiration from. But women are few and far between. I’m sorry, but being in a room of men vs being in a room of women is extremely different. I find that the all male atmosphere can be cold and uninviting. But in a female atmosphere, I feel more comfortable and willing to ask “stupid questions”.

Another point that people who think OPW is sexist is that it allows less qualified people in just because of their gender. I take huge offense to this. I found that the other participants of OPW to be bright, self-sufficient, and passionate people. They are just as qualified, if not more. The goal of OPW isn’t to bring in women who have no interest in the tech world. It’s to bring in women who otherwise weren’t comfortable applying to other internship or mentorship programs. Women who have been overlooked. And this is not the woman’s fault. You can’t just tell all the women that they should suck it up and just go for it. This is the same hostility that kept them away.

Honestly, I’m appalled at some comments that were surfaced today. It makes me angry that I have to keep fighting for programs like OPW to exist. I’m angry that I have to even address it. I hate being needlessly angry at things.

Things like OPW are necessary until women in the tech force is the norm. Until there’s less hostility for women to participate. Having more women in the tech industry isn’t a bad thing. They’re not taking away your jobs. Men who think women are replacing them don’t think about other men who are also replacing them. Gender somehow becomes the main focus and it’s not fair. What’s wrong with a little female competition?

All in all, my experience with OPW has been mostly positive and I learned a lot. I grew mentally and emotionally as a programmer in these past three months than in the years I was in school. I’ve learned that, while the majority of the FLOSS world is good, there’s still slivers of evil that I should be aware of. I’ll be sure to keep my chain-mail on and fight the good fight.

Thank you OPW for this wonderful opportunity. I am forever grateful.

An update!

I’m working at Wikimedia offices today and I’m already starting to wind down. I had to wake up early to make it up to San Francisco so I’m more groggy than usual. Sitting in an office is such a different experience than working from home. Mainly, I get to see and interact with other people. When you’re working from home, there’s barely any face to face human interaction. Though I do like programming in my PJs at home. I feel a bit more productive when I’m working in the office because there’s a lot less distractions. I’m not constantly thinking about doing the dishes or making myself lunch or spacing out on the internet.

I’m not really sure where I’m going with this post. I just finished writing up a few unit tests for my extension and I’m feeling really tired so I thought I might write a blog entry. Sorry if it’s ramble-y.

Oh! I met Aleta, an OPW intern, and Marta, a former OPW intern, yesterday. Pycon was in town and people were planning to come meet up but only three people ended up showing up. I’m not sure if people just didn’t realize it was yesterday or just decided to ditch last minute. It’s really hard to organize a meetup. They were both really nice and I’m glad we decided to meet up. We talked about our projects and what it’s like being a woman in the field. It was fun, I felt like we all got along really well.

Maybe I’ll go make some tea because I’m literally napping with my eyes open. D:

Unit Testing

Now that I’ve gotten my prototype working, the next time I wanted to do was unit testing. But I’ve had hard time to get unit testing rolling. Unlike my program, unit testing is much less exciting. Since I didn’t do it along side my program, it’s also really hard to modularize my functions and figure out what I should be testing. I keep looking at the big picture and can’t seem to buckle down and look at what each function needs. I just keep getting bogged down with what I should be doing and before I do it, I come up with something else I need to do.

I think I should take a step back and look at what I need to do. I should write down what ever comes to mind and try to organize it. I don’t know if other people go through this, but whenever I finish something, I go through a period of “I don’t know what to do next” and find myself feeling a bit lost. I’m trying really hard to get back on track, but I just wanted to let you all know that not everything is perfect. But that’s part of the learning process.

Sparse Checkout!

I’m happy to announce that my extension is now working with sparse checkout! Sparse checkout was a feature that we decided to try instead of git clone. It’s a feature of git that allows a user to keep just a certain file or directory from a git repository. It’s pretty neat because it’ll help conserve space.

I think my commit message will explain best what I’ve done:

Added sparse checkout functionality.

Created two new functions: SparseCheckoutNewRepo and AddToSparseCheckout. SparseCheckoutNewRepo will clone the repo and keep only the file given by the tag #snippet. Sparse checkout will only take the file from the given branch. The md5 hash has been updated to include the branch name so that each branch from the same repo will have its own folder.

AddToSparseCheckout will add files to the sparse checkout if the git repo/branch combination already exists. It will update the tree with `git read-tree -mu HEAD` whenever the file is edited.

This one took a while since there were many more things to check and find out. I didn’t realize that the sparse checkout will only check out one branch, which is staunchly set after it’s called so if you wanted something from branch2 but you had created your repo with master as the branch, you would need to make a new git repo for it. That’s why I added the branch name to the md5 hash.

Anyways, I’m really proud of this new change because it was a feature of git that I really didn’t know and didn’t understand. I had to test the commands on my computer several times to really grasp what was happening.

There has been some people who have taken an interest in my project lately and I can’t say how excited I am at the prospect that my code will help anyone. When I first started this, I was a bit disheartened when people said that they didn’t understand how my extension could be useful. But now that people might actually find it useful, it’s been a really nice bonus. I’ve found that project to be pretty fulfilling already because I learned so much in just two months.

Also, I noticed that people are translating the description of my extension in my i18n file. Sorry to be a parrot, but that’s so cool. I can’t believe people actually bothered to give my modest extension a translation. The mediawiki community is so amazing.

I will keep working hard and push myself. I feel that whenever I come across something I don’t know or understand, I tend to freeze. I have to learn to push myself into a project. I’ve been talking about doing unit testing for a few days now, but I’m still quite intimidated by it even though it should be a simple process. It’s a mental thing that I must overcome. I feel that once I start, I should be able to get the ball rolling and do it quickly, but getting the ball rolling is harder than I expected.

Updates on my project

Inevitably, blogging has gotten the best of me and I pushed it to the wayside. But I’ve made some pretty good progress, IMO, on my extension. It basically does all the things that my initial application does but in a much better format.

I’ve implemented a few error catching and messaging, which wasn’t present in my initial application. Also, I’ve created a shiny new class GitRepository which will hopefully be used later on by other applications. I’ve just added the functions that are relevant to my project, but perhaps in due time, it’ll be fleshed out more with more functionality.

I’ve been wanting to get into unit testing so that I don’t have to test manually. This is a totally new field for me since I’ve grown accustomed to testing things via printing things out or, more rarely, using a debugging tool. Having a testing environment is pretty important to the software world and I would really like to develop the skills for it. There’s been a surge of test driven development and behavior driven development so learning how to write unit tests is pretty important.

Things I learned: Week 4-5

Hi guys! I’ve almost forgotten about blogging. I’ll definitely try to blog more, but I tend to get writer’s block a lot.

So I actually don’t have a lot of things that I learned in the last two weeks. My mentor has gone missing. I haven’t been able to get in contact with him since last Monday. :( I don’t know where he’s gone, but it’s a bit distressful.

I think I’ve learned that I do best when I have a safe place to ask questions. Since Dereckson was the one who understood my project the most, it was easiest to ask him for opinions. I have been asking questions on #mediawiki, but it’s not quite the same.

I’ve hit a bit of a snag with my project in the last week. It was really hard trying to do my project on my own. I had a lot of environment problems so I had to reinstall a clean copy of mediawiki (which I’ve already done twice). I’m hoping my environment doesn’t die anymore because it really sets me back a few days. My problems seem to be unique to me, which is the worst possible feeling.

In terms of my project, I can still get my stuff done before I need to go into in-depth discussion with Dereckson (I hope he comes back soon). I’ve gotten my project to successfully clone and switch branches and now I’m working on getting the file open and read. It’s coming along well. I’m trying not to let the fact that I’m behind on my timeline get to me. MUST STAY MOTIVATED!

EDIT: My mentor is alive! Huzzah!

Things I learned: Week 2-3

I’m feeling particularly exhausted this week and I figured I would write a blog post to help me get out of this slump.

Week 2:

Week 2 went by pretty well. I got a good foundation working on my extension and I was gearing up to work on the main parts of my program. There wasn’t anything too eventful, but I definitely felt very proud of my progress.

 

Week 3:

This week I learned about how absolutely frustrating it is to try and fix a work environment. When I first started writing my extension, I used MAMP to run my web server. This was the first time I’ve ever run a web server locally and I was likely to run into problems.

Well, I ran MAMP with no problems for a while, but I wanted a way to debug my code. Dereckson suggested that I use the debug log toolbar. ($wgDebugToolbar = true;) Unfortunately, my logs through wfDebug(); weren’t quite working. I thought it might have been a problem with MAMP and pear. I kept getting a message about how a class in pear wasn’t loading.

So I spent the day (Wednesday) trying to get my debug logs to show up properly. It didn’t work. :( Dereckson was able to see the messages on his console so I was convinced that it was something wrong with my set up. After all, if the same code was displaying properly on someone else’s work environment, then it must be a problem with my work environment. I had my boyfriend, Ofer, try and fix my problems as he’s more experienced with web servers and work environments in general. When we weren’t able to fix the debug log, Ofer suggested a virtual machine (VM).

This was a suggestion made by Mark when I deciding on how to run my web server. I ultimately decided on MAMP, but a VM was always an option. Ofer said that running a VM would be simple and that I could get it running quickly.

Well, he was wrong. He had gotten me set up with Vagrant and Virtual Box the night before and left me to my own devices the next day. Honestly, if you asked me what I did, I couldn’t really tell you. There were so many hack-y things that I did to get things working. I ended up having to download an entire new copy of Mediawiki and a clean clone of my extension. I had to employ the help of my friend, David, to get me through this as well.

So after two days of messing around with my work environment, I came back to the same situation that I started with. Debug toolbar wasn’t working. I decided that enough was enough and went with a logging situation instead.

 I have to say, working with a broken work environment is REALLY draining. I think I’m still feeling the effects of it even though I’m working on actual development now. Googling doesn’t always work because your situation might be/probably is unique and there’s a ton of things you need to be wary of like OS versions or set up configurations.

I did learn some stuff though so it wasn’t a total loss. I’ve never worked with a VM before so this is a pretty cool learning how all that works. I think I’ve come to realize that being a programmer doesn’t mean you just sit around writing code all day every day. There’s a lot of research (basically, googling) and thinking involved. If I was writing code for 8 hours straight, it would probably come out horrendous.

Things I learned: Week 1

I kept trying to write this blog post, but was unsure of what I wanted to say so I kept creating and deleting it. I decided to do a list of things that I learned during the first week or so.

Gerrit/Git:

  • All code goes through gerrit and has to be reviewed before merging into mediawiki.
  • +2 code review and verified means that everything is great and it will be merged.
  • You commit code when you have functional changes.
  • When your code is in review and a reviewer has made comments and you want to go and fix them, you should amend your changes instead of committing new code. (I committed new code.) Keep amending till reviewer(s) are satisfied and it gets merged.
  • Wikimedia is very branch happy. Previously, I never used branches extensively so it was weird for me. I try to make a new branch for every commit I make and name the branch to something meaningful, but sometimes I want to just keep working while my code is being reviewed and everything is dependent on previously committed code. Not sure the workaround yet. (See process below)
  • Each branch should only be one commit past master. Ideally.
  • In Gerrit, there’s one commit message for a change set. So when you make amends, you should add in what you’ve done to the commit message. This can be done with git commit --amend. It will just overwrite the commit message. Also useful if you messed up your entire commit message and have to rewrite it. It can be run without changing any code. Make sure you’re in the change set first. (Use git review -d [change id] first.)
  • There are change sets which are new commits and patch sets which are amends to those commits. Some people use them interchangeably.
  • You can submit your code in draft mode with git review -D. It’ll only be visible to reviewers that you add.

Here are some notes that I made for committing code:

For new commits:

*create your branches and make your changes*
git diff
git status
git add <file>
git diff --cached
git commit
git pull origin master
git rebase master
git review -R

The git diff and git diff --cached are optional, but I like to check what has changed. git diff shows you what code has changed since the last commit and git diff --cached is the code that’s going to be going into the next commit.

For amends:

git review -d [change id]
*make your changes*
git add 
git commit --amend
git review -R

This is the process of working on code:

git checkout master
git checkout -b feature/nextfeature
*work on the code*
*commit the code*
*send it to gerrit*
git checkout master
git checkout -b feature/anotherfeature

Although for now, a lot of my changes are very dependent on each other so I’ve been waiting for my code to be merged before creating a new branch and working on it.

Personal/Life Lessons:

  • The first week or so doesn’t feel like you’re doing much, but you are. I learned all about git and gerrit and how extensions work (which I thought I knew, but really didn’t). I wrote little code, but I was able to correctly submit things.
  • Mistakes are for learning. Don’t be too hard on yourself when you make a mistake. I don’t have the ability to screw up Mediawiki. It was through my mistakes that my mentor was able to clarify things that I didn’t know.
  • Most of the other interns are on the same boat as me. We’re all learning and making mistakes together. I don’t feel so alone or stupid for not writing code.
  • There’s more to this job than just writing code. It’s also about being part of a community. I’ve been asking my mentor for help through #mediawiki instead of PM and other people can chime in. I think he secretly makes me ask in #mediawiki because he’s quite unresponsive in PM. Either way, the consequences are beneficial to me since I can get over my fear of feeling like people think I’m stupid. I hope that I can be active enough to be able to answer newbie questions. :)
  • People are more helpful than you think. I didn’t realize how many people would bother answering my silly little questions. I’m not even sure that I should be asking as many questions as I am since it feels like I’m just flooding the chatroom with my problems. But I’m gonna ask them anyways and until someone complains about it, I’m gonna keep doing it. Honestly, I probably am not even asking that many questions.
  • Have fun. I don’t know where I got the idea that work is full of dread, but it’s been quickly dispelled over the last week. I don’t feel like I’m doing work because I’m having fun. I think that contributes to the fact that I feel like I haven’t done enough.

I have a notebook beside me to take notes and I write down questions that I have. Periodically, I’ll go back to the questions and I’ll see if I’ve found an answer yet. A lot of the time, I do and I manage to find these questions on my own or find them in passing when someone is explaining something. It’s been quite useful.

I hope that when I look back at these post entries (and future ones) and see what I struggled with and how to solve those problems, I’ll smile and think, yeah, I remember when I didn’t know shit.

Oh! As a side note, there was a meeting for OPW today and unfortunately I missed it. 6 AM was way too early for me. I barely woke up at 8:30 to come to the Wikimedia office. But I read the chat logs and I’m sad that I missed it because it seemed like a great time. Hopefully, I’ll be able to meet everyone and there’s another meeting like this. It’s really nice to have an environment where all the interns can get together and just get all their questions (and frustrations) out.