This is a simple story about a logo design process for an open source project in case it might be informative or entertaining to you. :)

A little over a month ago, Tomas Redej contacted me to request a logo for DevAssistant. DevAssistant is a UI aimed at making developers’ lives easier by automating a lot of the menial tasks required to start up a software project – setting up the environment, starting services, installing dependencise, etc. His team was gearing up for a new release and really wanted a logo to help publicize the release. They came to me for help as colleagues familiar with some of the logo work I’ve done.


When I first received Tomas’ request, I reviewed DevAsisstant’s website and had some questions:

  • Are there any parent or sibling projects to this one that have logos we’d need this to match up with?
  • Is an icon needed that coordinates with the logo as well?
  • There is existing artwork on the website (shown above) – should the logo coordinate with that? Is that design something you’re committed to?
  • Are there any competing projects / products (even on other platforms) that do something similar? (Just as a ‘competitive’ evaluation of their branding.)

He had some answers :) :

  • There aren’t currently any parent or sibling projects with logos, so from that persepctive we had a blank slate.
  • They definitely needed an icon, preferably in all the required sizes for the desktop GUI.
  • Tomas impressively had made the pre-existing artwork himself, but considered it a placeholder.
  • The related projects/products he suggested are: Software Collections, JBoss Forge, and Enide.

From the competition I saw a lot of clean lines, sharp angles, blues and greens, some bold splashes here and there. Software Collections has a logotype without a mark; JBoss Forge has a mark with an anvil (a construction tool of sorts); Enide doesn’t have a logo per se but is part of Node.js which has a very stylized logotype where letters are made out of hexagons.

I liked how Tomas’ placeholder artwork used shades of blue, and thought about how the triangles could be shaped such to make up the ‘D’ of ‘Dev’ and the ‘A’ of Assistant (similarly to how ‘node’ is spelled out with hexagons for each letter in the node.js logotype.) I played around a little be with the notion of ‘d’ and ‘a’ triangles and sketched some ideas out:


I grabbed an icon sheet template from the GNOME design icon repo and drew this out in Inkscape. This, actually, was pretty foolish of me since I hadn’t sent Tomas my sketches at this point and I didn’t even have a solid concept in terms of the mark’s meaning beyond being stylized ‘d’ and ‘a’ – it could have been a waste of time – but thankfully his team liked the design so it didn’t end up being a waste at all. :)


Then I thought a little about about meaning here. (Maybe this is backwards. Sometimes I start with meaning / concept, sometimes I start with a visual and try to build meaning into it. I did the latter this time; sue me!) I was thinking about how JBoss Forge used a construction tool in its logo (Logo copyright JBoss & Red Hat):


And I thought about how Glade uses a carpenter’s square (another construction tool!) in its icon… hmmm… carpenter’s squares are essentially triangles… ! :) (Glade logo from the GNOME icon theme, LGPLv3+):


I could think of a few other developer-centric tools that used other artifacts of construction – rulers, hard hats, hammers, wrenches, etc. – for their logo/icon design. It seemed to be the right family of metaphor anyway, so I started thinking the ‘D’ and ‘A’ triangles could be carpenter’s squares.

What I started out with didn’t yet have the ruler markings, or the transparency, and was a little hacky in the SVG… but it could have those markings. With Tomas’ go-ahead, I made the triangles into carpenter’s squares and created all of the various sizes needed for the icon:


So we had a set of icons that could work! I exported them out to PNGs and tarred them up for Tomas and went to work on the logo.

Now why didn’t I start with the logo? Well, I decided to start with the icon just because the icon had the most amount of constraints on it – there’s certain requirements in terms of the sizes a desktop icon has to read at, and I wanted it to fit in with the style of other GNOME icons… so I figured, start where the most constraints are, and it’s easier to adapt what you come up with there in the arena where you have less constraints. This may have been a different story if the logo had more constraints – e.g., if there was a family of app brands it had to fit into.

So logos are a bit different than icons in that people like to print them on things in many different sizes, and when you pay for printed objects (especially screen-printed T-shirts) you pay for color, and it can be difficult to do effects like drop shadows and gradients. (Not impossible, but certainly more of a pain. :) ) The approach I took with the logo, then, was to simplify the design and flatten the colors down compared to the icon.

Anyhow, here’s the first set of ideas I sent to Tomas for the logomark & logotype:


From my email to him explaining the mockups:

Okay! Attached is a comp of two logo variations. I have it plain and flat in A & B (A is vertical, and B is a horizontal version of the same thing.) C & D are the same except I added a little faint mirror image frame to the blue D and A triangles – I was just playing around and it made me think of scaffolding which might be a nice analogy. The square scaffolding shape the logomark makes could also be used to create a texture/pattern for the website and associated graphics.

The font is an OFL font called Spinnaker – I’ve attached it and the OFL that it came with. The reason I really liked this font in particular compared to some of the others I evaluated is that the ‘A’ is very pointed and sharp like the triangles in the logo mark, and the ratio of space between the overall size of some of the lowercase letters (e.g., ‘a’ and ‘e’) to their enclosed spaces seemed similar to the ratio of the size of the triangles in the logomark and the enclosed space in the center of the logomark. I think it’s also a friendly-looking font – I would think an assistant to somebody would have a friendly personality to them.

Anyway, feel free to be brutal and let me know what you think, and we can go with this or take another direction if you’d prefer.

Tomas’ team unanimously favored the scaffolding versions (C&D), but were hoping the mirror image could be a bit darker for more contrast. So I did some versions with the mirror image at different darknesses:


I believe they picked B or C, and…. we have a logo.

Overall, this was a very smooth, painless logo design process for a very easy-going and cordial “customer.” :)

Mairin Duffy | Mirn Duffy | 2014-07-30 17:35:06

When I tell people about grants they could get to help them work on open source/open culture stuff, sometimes they are surprised because they didn't know such grants existed. Here are some of them!

Grants with deadlines:

  • Urgent: August 1st is the deadline for the Knight Prototype grant which "helps media makers, technologists and tinkerers take ideas from concept to demo. With grants of $35,000, innovators are given six months to research, test core assumptions and iterate before building out an entire project."
  • Also coming up fast: August 4th is your deadline to apply for the Open Society Fellowship, which gives you about USD$80,000-100,000 to work on a project for a year.
  • September 30th is the deadline for Individual Engagement Grants applications. IEG projects "support Wikimedians to complete projects that benefit the Wikimedia movement. Our focus is on experimentation for online impact. We fund individuals or small teams to organize, build, create, research or facilitate something that enhances the work of Wikimedia's volunteers." The maximum grant request is USD$30,000.
  • If you're a woman working on a tech project that will benefit girls and women in tech, check out The Anita Borg Systers Pass-It-On (PIO) Awards, which range from USD$500-$1000. The next round opens for applications on August 6th.
  • Sometime this fall, OpenITP will put out its call for "free and open source software projects that make tools for circumventing digital surveillance and censorship" so it can fund them. They have tended to give USD$5,000-30,000 and especially like to fund projects that improve usability and interoperability.
  • It looks like November 2014 is the deadline to apply for the Drupal Community Cultivation Grants: "to support current and future organizers and leaders of DrupalCamps, Drupal Meetups, Drupal Sprints, Drupal coalitions, and other creative projects that are spreading information within the Drupal community and educating individuals outside the community about Drupal... Grant awards will range from several hundred to several thousand dollars per project".
Grants that you can apply for anytime:

This partially overlaps with the list that OpenHatch maintains on its wiki (and which I or someone else ought to update), and I have not even scratched the surface really. So anyway, yes, if you need some financial help to do better or more work in open stuff, take a look!

Sumana Harihareswara | Cogito, Ergo Sumana | 2014-07-30 15:47:00


This week we are running a usability test for the site. If you'd like to help, here's the test:

Thank you for volunteering to help out with this project!

As a bit of background, the site's purpose is to serve as a platform for robotics educators to share and collaborate on courses.  Over the next 30 minutes or so, you will be testing the usability of the site by acting as a user: an educator contributing to the site.  You will be given some content to add to the site and a list of questions to answer as you go along or after you are done with your task.

Focus Questions and things to Look For:
1. how accessible is this site and the content in it?
2. how easy is it to upload content?
3. how easy is it to navigate and find content on the site?
4. does this seem easy to collaborate on?
5. is the content is understandable and accurate?
6. does the “how to contribute” require too much prior knowledge? if so, where did you feel lost or where do you think others would feel lost?
7. additional comments?

1. Go to the website and find out How to Contribute
2. Find the course called “Typos.” Find one typo, fix it, and submit your contribution.
3. Answer the questions! (email to mliebmanpelaez@gmail.com)


Mariana Liebman-Pelaez | OPW Summer 2014 - Teaching Robotics with Turtlebot | 2014-07-30 12:17:39

Calling all FreeBSD developers needing assistance with travel expenses to EuroBSDCon 2014.

The FreeBSD Foundation will be providing a limited number of travel grants to individuals requesting assistance. Please fill out and submit  the Travel Grant Request Application at http://www.freebsdfoundation.org/documents/TravelRequestForm.pdf by August 15th, 2014 to apply for this grant.

This program is open to FreeBSD developers of all sorts (kernel hackers,  documentation authors, bugbusters, system administrators, etc).  In some cases we are also able to fund non-developers, such as active community members and FreeBSD advocates.

If you are a speaker at the conference, we expect the conference to cover your travel costs, and will most likely not approve your direct request to us.

There's some flexibility in the mechanism, so talk to us if something about the model doesn't quite work for you or if you have any questions. The travel grant program is one of the most effective ways we can spend money to help support the FreeBSD Project, as it helps developers get together in the same place at the same time, and helps advertise and advocate FreeBSD in the larger community.

Dru Lavigne | FreeBSD Foundation | 2014-07-30 07:01:23

  • Dr who? Campaign to boost digital profile of Australia’s female scientists | The Age (July 29): “According to web information company Alexa, Wikipedia is the sixth-most popular website globally. Yet even Wikipedia admits to a systematic bias when it comes to women in science, describing the subject as ‘’woefully under-represented’’. Next month, the Australian Academy of Science plans to change that, hosting a Women of Science ‘’Wikibomb’’ event inspired by a similar call to arms by the Royal Society, London.”
  • This Is What Tech’s Ugly Gender Problem Really Looks Like | WIRED (July 28): “Shortly after Kathryn Tucker started RedRover, an app that showcases local events for kids, she pitched the idea to an angel investor at a New York tech event. But it didn’t go over well. When she finished her pitch, the investor said he didn’t invest in women.”
  • Checking Your Privilege: A How-To for Hard Things | Leslie Hawthorn at OSCON 2014 | Youtube (July 23): “The reason that systemic problems are so difficult and so insidious, is because when you are a participant in a system, when you are a user of a system and all of the defaults are configured to work for you out of the box, it never occurs to you that those defaults even exist.”
  • When Does a Woman Owe You Sex? Check This Chart | Identities.Mic (July 22): “Microsoft Excel took a turn for the explicit this week when the Internet learned the once-innocuous office tool was being used in a dispiriting new bro-trend: tracking the number of times their partners refuse sex. Yes, #sexspreadsheets are a thing, presumably because some men still believe that owning a penis entitles them to unlimited sexy times. [...] The many falsehoods propagated at every turn have driven us to put together a helpful chart that may help clear up any uncertainties regarding when women owe it to anyone to have sex”
  • “Females” in Open Source, by Amber Wu | Model View Culture (July 21): “Sexism is so deeply ingrained in tech’s unbalanced demographics that making a point of not being a misogynist is practically countercultural. Unseating those biases to the point where codes of conduct are normal and our spaces are widely safer will take huge forces of change. “
  • How can tech companies diversify their workforces? | Marketplace.org (July 24): “Twitter is the latest tech company to disclose statistics on the race and gender of its workforce, following Facebook, Yahoo, Google and LinkedIn. Like those companies, Twitter is falling short on diversity.”
  • Getting hired without getting burned: Sniffing for culture smells | Liz Abinante (July 24): “It is incredibly difficult to find a good place to work. With companies that fire women after they announce that they’re pregnant, intimidate women into leaving, hire people who think it’s ok to compare women to programming tools, and have abysmally low diversity numbers (although at 10% women in tech, I am no longer surprised by Twitter’s terrible block policy), it’s surprisingly easy to end up working in a toxic environment.”
  • The Mary Sue Exclusive Interview: Mike Mearls and Jeremy Crawford on Acknowledging Sexuality and Gender Diversity in D&D | The Mary Sue (July 24): “Mike Mearls and Jeremy Crawford, lead designers of the latest edition of Dungeons & Dragons, out in a staggered release all this summer and fall, talk about the mechanics of inclusive gaming, Gen Con diversity panels, realistic artwork, and the decision to “look at the wonderfully diverse group of people who play the game and say, ‘There’s a place for each of you at the game table’” with the system’s new suggestions for roleplaying gender and sexuality.”
  • Virginia E. Johnson, Scientist: Beyond “Masters of Sex” | The Toast (July 23): “The 2013 Showtime television show Masters of Sex introduced viewers to William H. Masters (1915–2001) and Virginia E. Johnson (1925–2013), two of the best-known American sex researchers of the twentieth century. [...] But the television show fails to address why and how she has become the person that she became, and why she chose to devote her life and career to sex research with a difficult and demanding man.”
  • Women and Minority Leaders Are Penalized For Fostering Diversity, Study Finds | Mashable (July 18): “Women and minorities don’t shy away from hiring their peers out of fear of the competitive threat they may pose, but rather out of fear of the retribution they may incur, new research suggests. The reason they are so reluctant to hire other women and ethnic minorities is because they are often penalized by their bosses for doing so, according to a study to be presented at next month’s annual meeting of the Academy of Management.”
  • Women in the Sciences Report Harassment and Assault | Julienne Rutherford at Huffington Post (July 24): “We, like many other scientists, had heard the stories, shared via email, on blogs, whispered in the corners of hotel conference rooms. Harrowing stories of sexual harassment and assault during one of the most important stages of professionalization in the sciences: fieldwork. [...] We set out to explore more deeply the pervasiveness of these experiences and the results we published in PLOS ONE on July 16, 2014 are a sobering wake-up call.”
  • Comic-Con’s dark side: Harassment amid the fantasy | The Washington Post (July 27): “Geeks for CONsent, founded by three women from Philadelphia, gathered nearly 2,600 signatures on an online petition supporting a formal anti-harassment policy at Comic-Con.”

We link to a variety of sources, some of which are personal blogs. If you visit other sites linked herein, we ask that you respect the commenting policy and individual culture of those sites.

You can suggest links for future linkspams in comments here, or by using the “geekfeminism” tag on Pinboard, Delicious or Diigo; or the “#geekfeminism” tag on Twitter. Please note that we tend to stick to publishing recent links (from the last month or so).

Thanks to everyone who suggested links.

Geek Feminism | Geek Feminism Blog | 2014-07-29 20:22:57

We made some progress over the last two weeks. We've got the time query running through the software, all the way up to the point requesting the tiles. Now we're diving in to the code of the renderer and tile server to get those tiles that we need!

Week 9: July 14 - July 20 [ edit  |  edit source ]

  1. After some discussion and direction from my mentor, I'm tackling the tile rendering server bit. I've added a test layer for "Year" in the leaflet.osm.js file.
  2. I've got a first little skeleton in the code but it doesn't lead anywhere yet. I updated the issue tracker in GitHub with my latest and (not so) greatest.
    1. The screenshot is also posted here
    2. As can be seen by the mostly empty layer on the right, I've got most of the plumbing in there but there's no data coming through the pipes.
  3. Digging further into Leaflet and how to use it and I also put up a white flag for assistance in the issue thread above

Week 10: July 21 - July 26 [ edit  |  edit source ]

  1. At the beginning of the week, I felt a little discouraged after seeing this postin the mailing list about how nomoregrapes built a working slider over an isolated OHM map during the Hackathon at SoTM-EU. I went through thecode he posted on GitHub and linked to it in the GitHub OHM issues tracker.
  2. After a lot of hacking and many false starts (and some help from my mentor), by the end of the week, I found the proper places in the code to add references to the {t} value for searching. My commits and code.

In less positive (and more personal) news, I got word that I was not accepted for the next cohort of the Ada Developers Academy. Keep looking here because after my OPW internship is over, I'll post my progress on my work for the GitHub data challenge!

Jaime Lyn Schatz | Developer jaime = new Developer() | 2014-07-29 13:01:14

My illness is back again. -_- Kudos to Kasturba Mess for ensuring that they procure the shittiest raw materials from the market. It can get a little difficult to work when you are running off to the washbasin to vomit what you ate an hour back.

Anyways, I am starting on where I left my work with faults on Saturday. I got very little work done on Sunday, but I cleared the major problems of representing rocks I had faced.

Aarti Dwivedi | Condensation | 2014-07-29 06:47:50


A friend of mine recently started a petition on Change.org that asks Valve to allow user name changes for transgender individuals on their Steam  video game platform. This is something I definitely support. For someone who is transgender (see: the American Psychological Association’s informative pamphlet) having to see their birth name creates distress in their lives due to the dysphoria they feel. It causes conflict between their gender identity and the gender identity that is being imposed on them by an external force.

This is the case for someone who happened to use their birth name as a user name when they signed up for Steam. Valve already goes one step by allowing you to change your display name,which is one of the most prominent names that shows up when Steam launches and is the public name people see, but they currently don’t allow people to change their user names.

Personally I would like all users to be able to change their user name at least once. There are those who make ill-advised name choices when they are younger and they grow to regret it. Not everyone wants to be SickKegger69 for the rest of their life.

I would urge you to consider signing this petition. Hopefully Valve can find a way to implement this without causing too much trouble in the system, which I know was their stated reasoning that user name changes aren’t allowed yet.

The post Steam Trans* Name Change Petition appeared first on Lotus Echoing.

Emily O Leary | Lotus Echoing | 2014-07-29 04:43:51

We are planning a GNOME beers event at LinuxCon North America. We're planning to meet at Howells and Hood at 8 pm on Thursday, August 2.  If you are going to be in town you can RSVP on the Chicago LUG's meetup page or you can put your name down on the Wiki page. Once we have an idea of how many people will be around we'll make a reservation :)

The ChicagoLUG will also be hosting a meeting at FreeGeek on Saturday, August 23rd at 2pm. If you'll be around after LinuxCon ends and you want to give a talk let us know :) or just come by and hang out.

See you then, and happy hacking.

Meg Ford | Meg Ford | 2014-07-28 21:52:52

Most of my work in past 2 weeks is fix the existing issue and improve code quality.

I have 2 major tasks that needed to be done first which are Bootstrap upgrading and Open ID login.

The Bootstrap almost completely done waiting for code review but for the Open ID the I've got test failure that I can't solve it until now. It is a bit weird that first time when I implemented it I made the test function and proved it and it worked properly but it failed after I pushed to Github. That sounds crazy but it's real. I still keep fixing it with my mentor help.

I don't have any thing much too talk about my work since it's quite similar with last topic update and I still fix my code again and again.

I have a lovely story that I want to share. There was a girl came to ask me about how to contribute Open Source ( I think maybe she is reading this post). I was figuring out a while – this is an open question that has so many answers for me. For me I think the best way to get start is finding what we like to do. I think if we have a passion or inspiration on it that would be easy to get through it. I told her to find the Open Source project and trying to find the contributor or maintainer of the project. I'm sure that those people in the Open Source always be nice with a newbie as I have experienced and they could help her to get start. Of course I can help her to get start with Perl or MetaCPAN but since she is absolutely new I think she could choose which technology she likes to learn.

She wants to contribute to Open Source because she wants to make some small contribution before she can apply for the OPW program next round. Although, I think it's a bit too early to contract a mentor before the time of the application submission and we don't know yet which organizations are going to participate in next round and who volunteer to be mentors. However, be ready and well prepare is always more impressive. So just told her to prepare for the technology that organization is using and self study.

Overall, I want to share this story because I'm so impressed with her motivation and education in her environment. She is younger than me and she is still a student. I believe she will get 'multi-view' of study from the OPW which I didn't experience in my school life I would say. I think every program in the Open Source community – Google Summer of Code or The Outreach Program for Women are really cool program that I wish I have known that since I was in the university. It didn't happen anyway but I wish I could share this such a great program to Thai students to learn more and get involved in the Open Source community as I have been. I'm so happy that I have a chance to give that girl some advice and I hope in could do more. So if someone reading my blog please feel free to contract me to help even I'm also a newbie too! :)

Pattawan Kaewduangdee | Pattawan (oiami)'s Blog | 2014-07-28 21:27:35

I've scraped up another sack of sweets, tanked up my keyboard with a fresh Oxygen font and ready to tell stories about writing a code compatible with Python 2.4-2.7 versions using only standard libraries.

Module imports

Sometimes modules have to be imported dynamically. Yes, yes, let in your little cozy kawaii code something that you don't even know by name.

Python 2.4+ has the imp library that takes in your guests, cleans their boots and shows their places. But Python 3.1+ trained another guard the importlib and made the imp retire from the Python version 3.4.

No one wants to use deprecated libraries. So no guards! Let's be good hosts by ourselves.

The sys library has the sys.path attribute, that contains all module search paths, default and specified via the PYTHONPATH environment variable.

import sys

And it's possible to add your own path to sys.path in your code:

import sys
import os

module_path = '../module_dir/module'

The os.path.realpath method is used to convert symlinks and relative paths to absolute ones.

Note, that os.path.realpath cuts the trailing slash. It doesn't matter for the example above, but can be painful while processing paths that can end with a directory. In these situations os.path.dirname should be called before os.path.realpath, otherwise one level of the directory tree will be missed.

And now it's time to say “Hello, dear guest!”

# Obtain the module name and remove its extension if any
module_name = os.path.splitext(os.path.basename(module_path))[0]

# End this!
    module_var = __import__(module_name)
except ImportError:
    print "Error: The module cannot be imported."

Short circuit conditions

Sometimes I have a great notion… to feel self fashionable, contemporary, hipster and write something long and artistic using list comprehensions:

[light  + ' is black' if light in pierre_soulages
 else light + ' is a wave' for light in art_and_science]

But Python 2.4 is an utilitarian language for writing of good programs, not good poems and it doesn't support shortcut conditional expressions. So if you want to write a poem just wrap the condition up in a small auxiliary function:

def write_poem(word):
    if rhyme(word):
        return word
        return 'shm' + word[1:]

new_poem = [write_poem(w) for w in text]

Of course, if you're an adept of Conceptual art, logical operators are always at your service.


Sometimes it's necessary to send some nontrivial configuration information to the script. The conventional way to do it is to use JSON or YAML. Python has no standard tools for YAML support. So JSON is the only choice or would be it, if the standard json library appeared in the Python version earlier than 2.6. There is the third-party simplejson library that is spread sufficiently to rely on the assumption that it's installed on most of machines with old Python versions. But simplejson stopped supporting Python 2.4 some versions ago. It's still possible to install simplejson under Python 2.4 but with some pain as a bonus.

I found no panacea for this. I just cowardly dropped users of the Python 2.4 with no simplejson installed from a part of absolutely-not-so-important functionality.

    import json
except ImportError:
        import simplejson as json
    except ImportError:
        print "Sorry. No milk for you."

But if the configuration object is not too sophisticated, alternative methods can be tried, e.g. good old ini files.

Well, my sack looks empty. Oh, I'm lying! There are useful links on its bottom:

Maria Kustova | Electrical Graffiti - opw | 2014-07-28 20:43:48

Two women smiling wearing green badge lanyards

CC BY-SA Jenna Saint Martin Photo

Want to do your part in making the Linux community more welcoming to women and people of all sorts? Planning to attend this year's LinuxCon NA in Chicago? Then you should sign up for the free Ada Initiative's Ally Skills Workshop at LinuxCon, from 2:30pm to 4:30pm on Thursday, August 21st. Attendance is free to LinuxCon attendees (you must be registered for LinuxCon to attend).

The Ally Skills Workshop (formerly called the Allies Workshop) teaches men simple, everyday ways to support women in their workplace and communities, in an engaging, discussion-oriented format. After a brief introduction on basic principles of responding to sexism (choose your battles, practice simple responses, you don't have to be funny, etc.), we discuss real-world scenarios and figure out ways to respond to them. Here's one review:

Woman explaining while a man listens

Workshop discussion

"This was an amazing class. Great scenarios, great conversations. I really enjoyed not only the guided discussion, but break out conversations with co-workers were hugely enlightening. I'd love to have more honest and frank conversation along that line with [my colleagues]." – Joseph Bironas

People love the practical focus and walk away with skills they can use right away:

"I've already witnessed a couple of incidents where coworkers who attended the workshop corrected themselves after saying something that could be misconstrued." – Anonymous participant

"I liked how it focused on concrete actions and behaviors we could use immediately, not theory." – Ashley Penney

And other attendees learned new ways to think about and respond to sexism in general:

Smiling woman

Workshop leader Valerie Aurora

"The most useful thing I got out of the class was the underlying notion of asserting and defending community values when responding to sexism, rather than addressing the responsible individual directly." – Anonymous participant

While the workshop is aimed at teaching ally skills to men, it works best with at least 20% women in attendance, so we welcome people of all genders at the workshop!

Sounds like something you'd like to learn? Sign up for the Ally Skills Workshop at LinuxCon now. If you can't attend LinuxCon, contact us at contact@adainitiative.org to find out how you can run the workshop at your workplace.

LinuxCon features several other events to support women and newcomers in Linux, including the First Time Attendees' Reception and the Women in OSS luncheon. The Ada Initiaive's Executive Director will be attending as many of these events as possible as well as teaching the Ally Skills Workshop.

Looking forward to seeing you at LinuxCon and the Ally Skills Workshop!

Several people in discussion around a table

Allies workshop discussion

The Ada Initiative | Ada Initiative | 2014-07-28 19:17:38

I am pleased to announce that Chris Beard has been appointed CEO of Mozilla Corp. The Mozilla board has reviewed many internal and external candidates – and no one we met was a better fit.

As you will recall, Chris re-joined Mozilla in April, accepting the role of interim CEO and joining our Board of Directors.

Chris first joined Mozilla in 2004, just before we shipped Firefox 1.0 – and he’s been deeply involved in every aspect of Mozilla ever since. During his many years here, he at various times has had responsibility for almost every part of the business, including product, marketing, innovation, communications, community and user engagement.

Before taking on the interim CEO role, Chris spent close to a year as Executive-in-Residence at the venture capital firm Greylock Partners, gaining a deeper perspective on innovation and entrepreneurship. During his term at Greylock, he remained an Advisor to me in my role as Mozilla’s chair.

Over the years, Chris has led many of Mozilla’s most innovative projects. We have relied on his judgment and advice for nearly a decade. Chris has a clear vision of how to take Mozilla’s mission and turn it into industry-changing products and ideas.

The months since Chris returned in April have been a busy time at Mozilla:
•   We released major updates to Firefox, including a complete redesign, easy customization mode and new services with Firefox Accounts.
•   Firefox OS launched with new operators, including América Móvil, and new devices, like the ZTE Open C and Open II, the Alcatel ONETOUCH Fire C and the Flame (our own reference device).
•   We announced that the Firefox OS ecosystem is expanding to new markets with new partners before the end of the year.
•   We ignited policy discussion on a new path forward with net neutrality through Mozilla’s filing on the subject with the FCC
•   In June, we kicked off Maker Party, our annual campaign to teach the culture, mechanics and citizenship of the Web through thousands of community-run events around the world. President Obama announced the news at the first-ever White House Maker Faire.

Today, online life is a combination of desktop, mobile, connected devices, cloud services, big data and social interactions. Mozilla connects all of these in an open system we call the Web – a system that puts individuals in control, offers freedom and flexibility and that is trustworthy and fun.

Mozilla builds products and communities that work to break down closed systems that limit online choice and opportunity. There is a huge need for this work today, as our digital lives become more centralized and controlled by just a few large companies. Toward that end, Mozilla builds products that put the user first, with a focus on openness, innovation and opportunity.

Chris has a keen sense of where Mozilla has been – and where we’re headed. He has unique experience connecting with every constituency that touches our products, including consumers, partners and community members. There’s simply no better person to lead Mozilla as we extend our impact from Firefox on the desktop to the worlds of mobile devices and services.

Chris, welcome back.

Mitchell Baker | Mitchell's Blog | 2014-07-28 16:07:34

You can get GNOME 3.14 using jhbuild as well. You just need to modify this line in the ~/.config/jhbuildrc.

moduleset = 'gnome-world-3.14'  

and my jhbuildrc looks like this:


Now, I'm finished with the user help of tali, the conversion from old docbook to Mallard help:

I had already completed Klotski user help, my mentor Sindhu Sundar reviewed it, and I updated the help according to her reviews, this went on and on for a lot of times, and then she guided me about some checks before the help goes to master, like:

Are the sentences simple and convey only one idea?
Do the UI strings reproduced in help match those in program?
Did you check to remove trailing white spaces?
Did you check to remove double spaces?
Did you check for spaces between content and tags?
Have you marked up nouns properly?
Have you checked for capitalization of common nouns as the first word in the sentence?
If there are items in UI drop down lists mentioned in help, are they in the same order as seen in the application?
Have you used full stops consistently?
Are your help instructions are in first person?
Have you used any words that are not user-friendly? Check for: "Input", "Purposes", "See link", "Go to"
Have you checked consistency of singular and plural nouns? Check if they have been mixed?
Have you given help instructions consistent with regards to both enable and disabling an option? Do they both instruct using the same medium (such as menu, keyboard.)?
Are your instructions gnome-shell specific and distro agnostic? Are your instruction mouse agnostic? Do your help instructions apply even when application is used in a touch screen environment?
Are your help instructions consistent with movement around the screen? Have you described the movement in order of right, left, up or down and not as forwards and backwards?

These checks are necessary before the help goes to master, now Klotski has passed all checks and it is ready to be shipped :D I started another game, Swell-foop for documentation. :D

Rashi Aswani | Journey to Open Source | 2014-07-28 07:13:22

This post has been pending since quite some time.

Nidhi Makhijani | Libre Parole Medium | 2014-07-28 04:29:12

These two weeks have been great fun, working with some Coccinelle scripts and sending in patches.

So lets look at a few scripts. These may look a bit too structured for a blog but wanted to keep it understandable thats why its so :P.

Aim : This script removes null test on values that cannot be null as they are assigned the value that has the form &a->b (add the offset of b to the address of a where a is a valid pointer) or are assigned using get_drvdata functions.
Purpose : This helped in removal of good amount of code within the NULL test block in some instances and also reduces unnecessary checks.
Coccinelle script :
expression e,f;
identifier g,y;
statement S1,S2;
position p1,p2;
identifier accessor =~ “get_drvdata”;

e =@p1 &f->g
<+… \(f->y\|accessor(f)\)
if (e@p2 != NULL || …)
S1 else S2

expression e,e2;
position r.p1,r.p2;

… when != e =@p1 e2

@depends on !bad@
expression e,e1,e2;
position r.p1,r.p2;

* e =@p1 e2
… when != e = e1
when != &e
* e@p2

Aim: This patch removes magicnumbers and replaces them by existing constants:
Purpose: This will encourage use of the defined constants and help in better readability of the code for developers.
Coccinelle script:
type T;
T E;
identifier fld;
identifier c;

E->fld & c

constant C;
identifier r.c;

#define c C

r.T E;
identifier r.fld;
identifier r.c;
constant s.C;

E->fld &
- C
+ c

Aim: This patch eliminates NULL test after alloc_bootmem functions as they never return a NULL.
Purpose: Unnecessary code within NULL test is done away with as NULL values or ERR is never returned by alloc_bootmem functions. Also, useless checks are no longer performed.
Coccinelle Script:
expression E;
statement S;

E = \(alloc_bootmem\|alloc_bootmem_low\|alloc_bootmem_pages\|alloc_bootmem_low_pages\)(…)
… when != E
- BUG_ON (E == NULL);
- if (E == NULL) S

expression E,E1;

E = \(alloc_bootmem\|alloc_bootmem_low\|alloc_bootmem_pages\|alloc_bootmem_low_pages\)(…)
… when != E
- memset(E,0,E1);

Aim: Free memory allocated using kmem_cache_zalloc using kmem_cache_free rather than kfree.
Purpose: This will ensure proper deallocation of the cached content by calling cache_from_obj to get the kmem_cache and then free it.
Coccinelle Script:
expression x,E,c;

x = \(kmem_cache_alloc\|kmem_cache_zalloc\|kmem_cache_alloc_node\)(c,…)
… when != x = E
when != &x

An important point, as no mistake is a small mistake!

I encountered an interesting case in Coccinelle due to a change in language semantics. Earlier, if a specified string was used with “declarer” it used to match only that declaration but now it declares a metavariable that can match any declarer. So, we should use “declarer name” instead.

This is matching any declarer (thing like DEFINE_MUTEX, etc) and hence I ended up with 435 cases and was perplexed that how can so many instances endup using spin_lock instead of a mutex_lock.
declarer DEFINE_MUTEX;
identifier m;


identifier def.m;

- spin_lock(&m)
+ mutex_lock(&m)
- spin_unlock(&m)
+ mutex_unlock(&m)

But, then I realized the problem and found the right cases where a lock is defined as a mutex lock but is used with spin_lock :) .
declarer name DEFINE_MUTEX;
identifier m;


identifier def.m;

- spin_lock(&m)
+ mutex_lock(&m)
- spin_unlock(&m)
+ mutex_unlock(&m)

I have added the managed interfaces for kasprintf and kvasprintf that help in allocating resource managed space and copying an existing formatted string into it. Here is the patch and yeah its accepted. My first two official managed interfaces :D

Woof!! It was interesting to work with these patches and tackle the issues :) But, there are many more to go. :P
Will keep you posted about more…Bye

Himangi Saraogi | A tale of learning | 2014-07-27 21:37:58

Over on Twitter, the great and talented @Gildedspine, creator of #YesAllWomen, is hosting a discussion about online activism, the power of community, and speaking up even in the face of harassment and abuse.

She’s got a powerful conversation going. I encourage you to check it out: #LikeDustIRise.

Geek Feminism | Geek Feminism Blog | 2014-07-27 19:13:07

PyLadies wants to hear your inspiring stories about Python programming and Python community leadership.

As our contributing instructions say: "We're looking for posts about Python and the ladies doing cool things with it."

Whether you run a PyLadies or DjangoGirls chapter, maintain a Python library, or are simply learning and want to show off your Python project, we want to hear about it and help share your successes with the world.

First read the contributing instructions for pyladies.com, then get started.

If you run into any problems while trying to post, file an issue so we can help.

Pyladies | PyLadies | 2014-07-27 19:03:00

Today, July 27th, is the ten-year anniversary of Barack Obama's super cool 2004 Democratic National Convention speech. That one. Remember that? Remember how good it was?

That we can say what we think, write what we think, without hearing a sudden knock on the door.

John Kerry believes in the constitutional freedoms that have made our country the envy of the world, and he will never sacrifice our basic liberties nor use faith as a wedge to divide us.

If there's an Arab American family being rounded up without benefit of an attorney or due process, that threatens my civil liberties.

We worship an awesome God in the Blue States, and we don't like federal agents poking around our libraries in the Red States.

I am deeply sad that I can only quote these lines in a spirit of bitter irony and disappointment.

Sumana Harihareswara | Cogito, Ergo Sumana | 2014-07-27 10:52:20

Finally, all basic parts of ASF demuxer seems to work somehow.

 At last two weeks I fixed various bugs in my code and I hope packets handling is correct now. Only problem is that few packets at the end of the Data Object are still lost. Because I wanted a small break from this problem, my mentors allowed me to implement basic seeking first. ASF demuxer can now read index entries from Simple Index Object and adds them with av_add_index_entry to AVStream. So when Simple Index Object is present in an ASF file, my demuxer can seek to the requested time.

Alexandra Hajkova | sasshkas | 2014-07-27 05:39:40

Over the last few years I’ve started to adopt some practices to help reduce the impact of stress in my life. One such practice is daily meditation. I had meditated occasionally in the past but it wasn’t until I attended a meditation group with my partner a few years ago that I started to make it a more routine practice.

Two of the tools that helped me expand my practice were the books Mindfulness in Plain English by Henepola Gunaratana and Zen Mind, Beginner’s Mind by Shunryu Suzuki. They helped me explore both mindfulness and Zen meditation styles. But even with all those resources I sometimes sought out guided meditation videos on Youtube to help me relax. It was through this searching, combined with a short-lived interest in binaural beats, that I came across the following video by Youtuber Ephemeral Rift.

That was my first experience with the phenomena known as ASMR (autonomous sensory meridian response). I had experienced it many times before then but I didn’t have a name for it. It was the relaxing, pleasant tingling sensation I’d feel in my scalp whenever someone was paying close personal attention to me, such as going to the hair stylist or seeing a dentist, as long as no drills were involved.

The idea that a simple Youtube video could have such a profound relaxing effect was amazing. How it worked was simple even: certain sounds, when listened to with both ears, or binaurally which is why I found it in the first place, can trigger ASMR. My list turned out to contain triggers such as whispering, crinkling, water being sprayed, and hair being brushed to name a few.

There have been a few psychological studies to study this phenomena, some of which I have participated in. If you want more info on one such study you can click on the ASMR link above to an ASMR research site or you can check out this ASMR research Facebook group. I’m looking forward to reading some of the theories regarding this phenomena and its potential social origins.

The post Relaxation with Meditation and ASMR appeared first on Lotus Echoing.

Emily O Leary | Lotus Echoing | 2014-07-26 17:00:28

I was very ill this week, which is why you haven't seen blog posts for the last few days.
I am fixing the mistakes with faults today. I hope to complete it by tomorrow.

Aarti Dwivedi | Condensation | 2014-07-26 13:08:10

These past couple weeks I implemented a new view for the calendar plugin: the Month View.

Until now, the plugin only displayed a single week. Now the user can switch between views, using the drop-down menu, and select between ‘Week’ or ‘Month’.

This new view has very similar functionalities to the previous one, allowing a task to be dragged/dropped to change its dates, double clicking on it to change its content, and also allowing the creation and deletion of tasks.

Here is a preview of how things are going with the month view, even though it’s not working a 100% yet:month-view

I hope to finish the implementation and fix the issues with this new view soon, in order to be able to integrate it to GTG as well.

Sara Guimaraes Ribeiro | Sara Ribeiro OPW | 2014-07-26 00:36:17

The Ada Initiative is glad to welcome a new member and a returning member to our advisory board, which gives us feedback on planned projects and our overall mission and strategy:

Photograph of Sarah SharpSarah Sharp is a Linux software developer in Intel's Open Source Technology Center, where she works on improving graphics for Intel Chromebooks.  Sarah is best known for creating the Linux kernel xHCI driver, which was the first released software stack for USB 3.0.  Sarah serves on the Linux Foundation Technical Advisory Board and is involved with the FOSS Outreach Program for Women (OPW) as the coordinator for the Linux kernel OPW internships. You can find her on twitter as @sarahsharp, or read her blog.

Sarah joins several other OPW organizers and volunteers — Marina Zhurakhinskaya, Karen Sandler, Liz Henry and Sumana Harihareswara — as an advisor to the Ada Initiative. We're looking forward to continuing to work with members of this key project increasing women's participation in open source software.

Photograph of Selena Deckelmann

Selena Deckelmann is returning as an advisor after a year's break; we encourage all our volunteers to regularly review their commitment to us and take time away as needed, and we're glad to have Selena as our first returning advisor. Selena is a major contributor to PostgreSQL and a data architect at Mozilla. She’s been involved with free and open source software since 1995 and began running conferences for PostgreSQL in 2007. She's the founder of several groups and events, including PyLadiesPDXOpen Source Bridge and Postgres Open, and a regular international speaker. You can find her on twitter (@selenamarie) and on her blog.

The Ada Initiative | Ada Initiative | 2014-07-25 16:06:36

Four Libav developers met for a four-day sprint, including two OPW interns. It was productive: we discussed various aspects of the project and coded. There was not much pair programming, but everyone made progress. I wrapped up the RealAudio code, dropping SIPR support (it turned out that the old implementation I was using as a reference did not actually support SIPR-in-RealAudio; I wish I had realized that before spending a couple of weeks on it). I also added some tests, as there were none for RealAudio files (the RealAudio tests in Libav were all for RealAudio streams in RealMedia files). There was also a lot of delicious Libav chocolate.

At this point, I am implementing RealMedia demuxing.

Katerina Barone-Adesi | alpaastero | 2014-07-25 16:02:27

This is mostly taken from the very helpful documentation on Stevedore; when I started working on Gnocchi I found myself wondering a lot about the functions of two modules in particular, stevedore and pecan. The other day I needed to use stevedore to load a plugin and so finally had the chance to use it in practice. These are some notes from the process – hopefully they can be useful for someone needing to use stevedore for the first time.

So my basic understanding of stevedore is that it is used for managing plugins, or pieces of code that you want to load into an application. The manager classes work with plugins defined through entry points to load and enable the code.

In practice, this is what the process looks like:

  • Create a plugin

The documentation, which is authored by Doug Hellman I believe, recommends making a base class with the abc module, as good API practice. In my case, I wanted to make a class that would calculate the moving average of some data. So my base class, defined in the init file of my directory (/gnocchi/statistics) looked like this:

import abc
import six

class CustomStatistics(object):

    def compute(data):
    '''Returns the custom statistic of the data.'''

The code is implemented in the class MovingAverage (/gnocchi/statistics/moving_statistics.py):

from gnocchi import statistics

class MovingAverage(statistics.CustomStatistics):

  def compute(self, data):
      ... do stuff ...
      return averaged_data
  • Create the entry point

The next step is to define an entry point for the code in your setup.cfg file. The entry point format for the syntax is

 name = module.path:thing_you_want_to_import_from_the_module

so I had

gnocchi.statistics =
    moving-average = gnocchi.statistics.moving_statistics:MovingAverage

The stevedore documentation on registering plugins has more information on how to package a library in general usng setuptools.

  • Load the Plugins

You can either use drivers, hooks, or the extensions pattern to load your plugins. I ended up starting with drivers and then moving to extensions. The difference between them is whether you want to load a single plugin (use drivers) or multiple plugins at a time (extensions). I believe hooks also allows you to load many plugins at once but is meant to be used for multiple entry points with the same name. This allows you to invoke several functions with a single call…that’s about the limit of my knowledge on hooks.

The syntax for a driver is the following:

from stevedore import driver

mgr = driver.DriverManager(

output  = mgr.driver.compute(data)

The invoke_on_load argument lets you call the object when loaded. Here the object is an instance of the MovingAverage class. You access it with the driver property and then call the methods (in this case, compute). You can also pass in arguments in DriverManager; see the documentation for more detail.

I ended up going with extensions instead of drivers, as there were multiple statistical functions I had as plugins and I wanted to load all the entry points at once. The syntax is then

  from stevedore import extension

  mgr = extension.ExtensionManager(
      namespace = 'gnocchi.statistics',

This loads all of the plugins in the namespace. In my case I wanted to make a dictionary of all the function names and the extension objects so I did:

configured_statistics = dict((x.name, x.obj) for x in mgr)

When a GET request to Gnocchi had a query for computing statistics on the data, the dict was consulted to see if there was a match with a configured statistics function name. If so, the extension object was called with the compute() method.

 output = configured_statistics[user_query].compute(data)

The documentation shows an example using map() to call all the plugins. For the code below results would be a sequence of function names and the resulting data once the statistic is applied :

def compute_data(ext, data):
    return (ext.name, ext.obj.compute(data))

results = mgr.map(compute_data, data)

If you need the order to matter when loading the extension objects, you can use NamedExtensionManager.

That’s about it for my notes on stevedore – it’s a clean, well-designed module and I’m glad I got to learn about it.

Ana Malagon | A Malagon | 2014-07-25 15:41:28

  • Why Captain America Should Stay Black Forever | E.Knight at Boxing With God (July 19): “Comic book fans born today should grow up knowing this is Captain America. There should be no doubt.  The idea that a black man could represent the ultimate patriot is only ironic if our society continues to insist that White is America’s default race.”
  • New Thor Will be a Woman! Five Other Heroines Who Have Taken Up a Man’s Title | Mey at Autostraddle (July 22): “Although there’s absolutely nothing wrong with feminizing a name, there is a lot of clout that comes with the name Thor. By not adding “She-,” “Lady” or “Ms.” to the name, they are saying that this character isn’t a sidekick or partner to Thor, they’re saying that she isn’t “inspired by” Thor, they’re saying she simply is Thor. [...] While Thor is the most high-profile example of this, it’s not the first. Here are some of my favorite examples of this happening before.”
  • How Big of a Problem is Harassment at Comic Conventions? Very Big. | Janelle Asselin at bitchmedia (July 22)[warning for discussion of harassment] “It’s not difficult to see why conventions can be rife with harassment. People in my survey report being harassed by fans, journalists, publishing employees, and comics creators, so there are issues at every level of the industry. Conventions involve cramming a lot of people into one space where ideally everyone gets to move around. This means there are a lot of brush-by maneuvers, awkward running into people, and a lot of general closeness. [...] This is the first time ever that SDCC has made a specific anti-harassment policy so prominent and offered a clear course of action for fans who are harassed.”
  • Killing the Messenger at Mozilla | Tim Chevalier at Model View Culture (July 21) (disclosure: Tim Chevalier contributes to geekfeminism.org): “In 2012, it was nearly taboo at Mozilla to question the individualist narrative: the story that says that Eich, like any other employee, could spend his paycheck in whatever manner he chose. In 2014, Mozillans had no choice but to engage with a more structural narrative: that it’s impossible to lead a diverse organization when you have openly and obdurately expressed animus towards members of a protected class. [...] If we take [the Mozilla leaders] at face value, they did not understand why anyone would think that queer people’s rights were relevant to an open-source software project — surely they must have been aware that LGBTQ people worked for them.”
  • WisCon…This is How You Fail | The Angry Black Woman (July 20): “Race, gender, and class have all been issues at various points for me at WisCon. Most incidents fall into microaggression territory, and as a personal philosophy I tend not to let those dissuade me from things I want to do. That is an eminently personal choice, and should not be construed as telling anyone else what to do or how to feel. If my friends stop going, then so will I.”
  • The Pay-for-Performance Myth | Eric Chemi and Ariana Giorgi at Bllomberg Business Week (July 22): “An analysis of compensation data publicly released by Equilar shows little correlation between CEO pay and company performance. Equilar ranked the salaries of 200 highly paid CEOs. When compared to metrics such as revenue, profitability, and stock return, the scattering of data looks pretty random, as though performance doesn’t matter. The comparison makes it look as if there is zero relationship between pay and performance.”
  • Coder livetweets sexist remarks allegedly made by IBM executives | Aja Romano at The Daily Dot (July 22): “Note to IBM executives: If you’re going to openly discuss why you think young women make bad hires in the tech industry, you might want to make sure you’re not having lunch next to a young mom who’s also a coder. [...] According to [Lyndsay] Kirkham, the executives listed off a number of women who are currently employed at IBM, all of whom apparently have kids, and listed the amount of time the women were expected to take off in the next few years for anticipated pregnancies.”
  • #iamdoingprogramming made me feel more alienated from the tech community | Christina Truong at Medium (July 21): “In the eight years that I’ve been in the tech industry, I’ve worked with one Black person that was in a tech role and a handful in non-tech roles (project managers) and that’s a damn shame. [...] Diversity doesn’t mean pushing those that are already there out of the group. It simply means making space for different kinds of people, different opinions and opening up the culture instead of spotlighting and finding the same kind of person over and over again. It’s about showing people that there are different ways to be successful in this industry. It’s about telling everyone’s story.”
  • Numbers are not enough: Why I will only attend conferences with explicitly enforceable Codes of Conduct and a commitment to accessibility | Jennie Rose Halperin (July 22): “I recently had a bad experience at a programming workshop where I was the only woman in attendance and eventually had to leave early out of concern for my safety. [...] What happened could have been prevented: each participant signed a “Code of Conduct” that was buried in the payment for the workshop, but there was no method of enforcement and nowhere to turn when issues arose.”

We link to a variety of sources, some of which are personal blogs.  If you visit other sites linked herein, we ask that you respect the commenting policy and individual culture of those sites.

You can suggest links for future linkspams in comments here, or by using the “geekfeminism” tag on Pinboard, Delicious or Diigo; or the “#geekfeminism” tag on Twitter. Please note that we tend to stick to publishing recent links (from the last month or so).

Thanks to everyone who suggested links.

Geek Feminism | Geek Feminism Blog | 2014-07-25 15:30:36

Netfilter workshop group picture 2014

Netfilter workshop group picture

Here’s the group picture of the 10th Netfilter workshop which is held from July 7th to July 11th in Montpellier, France.

Thanks a lot to #rmll2014 for hosting us!

For left to right:
* First row: Daniel Borkmann, Pabloe Neira Ayuso, Simon Horman, Thomas Graf, Patrick Mchardy, Jozsef Kadlecsik, Martin Topholm
* Second row: +Ana Rey, Florian Westphal, +Eric Dumazet, Hannes Frederic Sowa, +Jesper Dangaard Brouer, Jesper Sander Lindgren, Jesse Gross, Balazs Scheidler, Holger Eitzenberger
* Third row: Alvaro Neira, Guiseppe Longo, Arturo Borrero, Victor Julien, Gert Hansen, Ulrich Weber, Chema Gonzalez, John Fastabend, Alexei Stavoroitov, Maciej Żenczykowski
* Photographer: +Eric Leblond” By Eric Leblond

Ana Rey | anarey.info opw | 2014-07-25 10:11:02

This is the story of how I rediscovered what version control doesn't do for you. Sure, I understand that git doesn't track what's in my project's local database, but to understand is one thing and to feel in your heart forever is another. In short, learning from mistakes and accidents is the greatest!

So, I've been working on a Django project and as the project acquires new features, the database schema changes here and there. Changing the database from one schema to another and possibly moving data between tables is called a migration. To manage database migrations, we use South, which is sort of integrated into the project's manage.py script. (This is because we're really using playdoh, Mozilla's augmented, specially-configured flavour of Django.)

South is lovely. Whenever you change the model definitions in your Django project, you ask South to generate Python code that defines the corresponding schema migration, which you can customize as needed. We'll call this Python code a migration file. To actually update your database with the schema migration, you feed the migration file to manage.py migrate.

These migration files are safely stored in your git repository, so your project has a history of database changes that you can replay backward and forward. For example, let's say you're working in a different repository branch on a new feature for which you've changed the database schema a bit. Whenever you switch to the feature branch you must remember to apply your new database migration (migrate forward). Whenever you switch back to master you must remember to migrate backward to the database schema expected by the code in master. Git doesn't know which migration your database should be at. Sometimes I'm distracted and I forget. :(

As always, it gets more interesting when you have project collaborators because they might push changes to migration files and you must pay attention and remember to actually apply these migrations in the right order. We will examine one such scenario in detail.

Adventures with Overlooked Database Migrations

Let's call the actors Sparkles and Rainbows. Sparkles and Rainbows are both contributing to the same project and so they each regularly push or pull from the same "upstream" git repository. However, they each use their own local database for development. As far as the database goes, git is only tracking South migration files. Here is our scenario.

  1. Sparkles pushes Migration Files 1, 2, 3 to upstream and applies these migrations to their local db in that order.
  2. Rainbows pulls Migration Files 1, 2, 3 from upstream and applies them to their local db in that order.

    All is well so far. The trouble is about to start.

  3. Sparkles reverses Migration 3 in their local database (backward migration to Migration 2) and pushes a delete of the Migration 3 file to upstream.
  4. Rainbows pulls from upstream: the Migration 3 file no longer exists at HEAD but it must also be reversed in the local db! Alas, Rainbows does not perform the backward migration. :(
  5. Life goes on and Sparkles now adds Migration Files 4 and 5, applies the migrations locally and pushes the files to upstream.
  6. Rainbows happily pulls Migrations Files 4 and 5 and applies them to their local db.

    Notice that Sparkles' migration history is now 1-2-4-5 but Rainbows' migration history is 1-2-3-4-5, but 3 is nolonger part of the up-to-date project!

At some point Rainbows will encounter Django or South errors, depending on the nature of the migrations, because the database doesn't match the expected schema. No worries, though, it's git, it's South: you can go back in time and fix things.

I was recently in Rainbows' position. I finally noticed that something was wrong with my database when South started refusing to apply the latest migration from upstream, telling me "Sorry! I can't drop table TaskArea, it doesn't exist!"

FATAL ERROR - The following SQL query failed: DROP TABLE tasks_taskarea CASCADE;
The error was: (1051, "Unknown table 'tasks_taskarea'")
KeyError: "The model 'taskarea' from the app 'tasks' is not available in this migration."

In my instance of the Sparkles-Rainbows story, Migration 3 and Migration 5 both drop the TaskArea table; I'm trying to apply Migration 5, and South grumbles in response because I had never reversed Migration 3. As far as South knows, there's no such thing as a TaskArea table.

Let's take a look at my migration history, which is conveniently stored in the database itself:

select migration from south_migrationhistory where app_name="tasks";

The output is shown below. The lines of interest are 0010_auth__del and 0010_auto__chg; I'm trying to apply migration 0011 but I can't, because it's the same migration as 0010_auto__del, which should have been reversed a few commits ago.

|  migration                                                                   |
|  0001_initial                                                                |
|  0002_auto__add_feedback                                                     |
|  0003_auto__del_field_task_allow_multiple_finishes                           |
|  0004_auto__add_field_task_is_draft                                          |
|  0005_auto__del_field_feedback_task__del_field_feedback_user__add_field_feed |
|  0006_auto__add_field_task_creator__add_field_taskarea_creator               |
|  0007_auto__add_taskkeyword__add_tasktype__add_taskteam__add_taskproject__ad |
|  0008_task_data                                                              |
|  0009_auto__chg_field_task_team                                              |
|  0010_auto__del_taskarea__del_field_task_area__add_field_taskkeyword_name    |
|  0010_auto__chg_field_taskattempt_user__chg_field_task_creator__chg_field_ta |

I want to migrate backwards until 0009, but I can't do that directly because the migration file for 0010_auto__del is not part of HEAD anymore, just like Migration 3 in the story of Sparkles and Rainbows, so South doesn't know what to do. However, that migration does exist in a previous commit, so let's go back in time.

I figure out which commit added the migration I need to reverse:

# Display commit log along with names of files affected by each commit. 
# Once in less, I searched for '0010_auto__del' to get to the right commit.
$ git log --name-status | less

What that key information, the following sequence of commands tidies everything up:

# Switch to the commit that added migration 0010_auto__del
$ git checkout e67fe32c
# Migrate backward to a happy migration; I chose 0008 to be safe. 
# ./manage.py migrate [appname] [migration]
$ ./manage.py migrate oneanddone.tasks 0008
$ git checkout master
# Sync the database and migrate all the way forward using the most up-to-date migrations.
$ ./manage.py syncdb && ./manage.py migrate

Maja Frydrychowicz | Maja Z. Frydrychowicz | 2014-07-25 00:00:00

Nine months ago I posted an article about Free Culture and self-publishing and as I get closer to the final draft of one of my novels I find myself reexamining the proposal I made back then. Should I self-publish and should that creative work be published under a free culture license, such as the CC-BY-SA license that I use for this blog?

My situation has changed since then: I got married and move back to Wisconsin with my partner to support her during her last year of graduate school for her counseling degree. To best help her I need to have a steady income which creates most of the conflict when deciding what route to publish my novel. While I could certainly get a job in IT, given my background and education, there is a certain joy in the prospect of being able to earn a living based on my creative works.

I have many other works including several more novels, a visual novel, a complex programming project, and a video game on my to-do list which could readily provide the much needed financial support. However, in the interests of getting them done in a timely manner I’ve limited myself to only doing major work on one project at a time which leaves me with my novel. The question is: can I self-publish my novel under a free license and still earn a livable wage?

That was my question at first but I quickly realized that it wasn’t what I was really getting at because the simple answer to the question is: yes, you can, people have done so in the past. It then becomes a question of comfort: am I comfortable releasing my work in hopes that I will get paid for it while putting the entire task of promoting it on myself? Would I feel more comfortable trying to get my novel published traditionally, at least initially?

I should be posting information about my new novel, “Stonewall Rising” within a few months. It all depends on if I can finish this draft and prepare cover art before my wedding.

The thing that makes a CC-BY-SA license so powerful for my work is also the thing that terrifies me the most: it makes my work inherently free (as in gratis). In doing so it makes it legal to share it with anyone and everyone which has the potential of creating a wider readership. It also could mean that I could earn nothing at all from my work.

The post Publishing and Free Culture Licensing Revisited appeared first on Lotus Echoing.

Emily O Leary | Lotus Echoing | 2014-07-24 21:22:24


As we are approaching towards the end of the FOSS OPW internship period I thought of having a little flash back additional to my 10th weekly update.

One of the main goals of my project is to complete the project documentation of over 700 projects which are hosted in Wikimedia Labs/Tool Labs. The existing documentation of these projects are not enough for the new comers to decide whether they should join the project or start a new project on their own. It is not even enough for project admins to track the projects and manage them. Therefore completing the documentation will be a very important improvement on Wikimedia Labs.

To complete the documentation of each project we have to get the details from the project admins or ask them to complete their documentation. But to have this documentation edited in a structured manner we have to give the project admins guidelines as well. To do that easily I have used Forms and Templates in Semantic Wiki extensions. First I have formulated a template with discussing with my mentor to decide what are the attributes the project documentation should have. Then add those attributes to the template and make a form fro that template for the project admins to fill such that it will automatically add to the project documentation.

Even though it is easy to say doing that with Semantic Wiki to exactly get the output I want was not easy. I had to go through Semantic Wiki documentation couple of times and other templates and forms many times to determine how these are created. At one point I was really thinking that is is not feasible task. But I didn’t give up. I searched some more and finally I was able to find a way through this.

All magic has a price. If we pay the price of hard work no goal of ours is unacheivable.

PS : If you don’t know Rumpelstiltskin or not familiar with the phrase “All magic has a price” it’s high time you watched “Once upon a time” TV series.

Filed under: Open Source Tagged: foss opw, internship, Semantic Wiki, Wikimedia Labs

Dinu Sandaru Kumarasiri | Since Everybody Has A Blog.. Open Source | 2014-07-24 15:47:01

Building and Leveraging an Open Source Developer Community.

this talk by Jade Wang is really great. Thanks to Adam Lofting for turning me onto it!


Jennie Rose Halperin | jennie rose halperin | 2014-07-24 12:30:18

I recently put together this reading list on queer intersectionality for a local LGBTIQ group, as part of thinking about how we can serve a wider community of same-sex attracted and gender diverse folks. I thought it might be useful to share it more widely.

For context, this is a 101 level reading list for people with a bare understanding of the concept of intersectionality. If you’re not familiar with that you might want to read Wikipedia’s article on intersectionality.

Interview with Kimberlé Crenshaw, who named and popularised the concept of intersectionality — I think it’s important that we remember and give credit to Professor Crenshaw and the black movements whose ideas we’re using, which is why I’m including this link first.

Intersectionality draws attention to invisibilities that exist in feminism, in anti-racism, in class politics, so obviously it takes a lot of work to consistently challenge ourselves to be attentive to aspects of power that we don’t ourselves experience.” But, she stresses, this has been the project of black feminism since its very inception: drawing attention to the erasures, to the ways that “women of colour are invisible in plain sight”.

“Within any power system,” she continues, “there is always a moment – and sometimes it lasts a century – of resistance to the implications of that. So we shouldn’t really be surprised about it.”

An excellent article about the New York group Queers for Economic Justice:

“You would never know that poverty or class is a queer issue,” said Amber Hollibaugh, QEJ Executive Director and founding member. She continued: “Founding QEJ was, for many of us that were part of it, a statement of …wanting to try to build something that assumed a different set of priorities [than the mainstream gay equality movement]: that talked about homelessness, that talked about poverty, that talked about race and sexuality and didn’t divide those things as if they were separate identities. And most of us that were founding members couldn’t find that anywhere else.”

An interesting personal reflection on intersectionality by a queer Asian woman in NZ:

On the other side, if I’m having issues in my queer relationship with my white partner the discourse my mum uses is that same-gender relationships just don’t work and aren’t supposed to work. Find a (Chinese) man, get married and have babies like she did. You don’t have to love him to begin with but you will grow to love him. Like my mum did, apparently. It’s like if you’re queer and there’s problems in your relationship it’s because you’re queer and the solution is to be heterosexual. If you’re Chinese and there’s problems with your family it’s because Chinese culture is just more conservative or backward and the solution is to distance yourself away from it or try to assimilate into Pakeha culture. It shouldn’t have to be like this.

An article about intersectionality and climate justice (not very queer-oriented but some interesting stuff to think about):

On a personal level, we have to slow down and educate ourselves so that we can name the toxic systems within which we exist. We have to relearn the real histories of the land, of resistance movements and what it has taken for communities survive. We must also take the time to talk through all of the connections so that we can build a deeper analysis of the crises we face. During this process, it’s important that we commit to the slow time of genuine relationship-building, especially as we learn to walk into communities that we’re not a part of in respectful ways. From there, we create space to truly hear each other’s stories and bring people together in ways that, as Dayaneni says, “we can see ourselves in each other.”

A speech about queerness and disability:

This gathering has been very white and for the most part has neglected issues of race and racism. All of us here in this room today need to listen to queer disabled people of color and their experiences. We need to fit race and racism into the matrix of queerness and disability. I need to ask myself, not only “What does it mean to be a pansexual tranny with a long butch dyke history, a walkie with a disability that I acquired at birth,” but also, “What does it mean to be a white queer crip?”

We haven’t asked enough questions about class, about the experiences of being poor and disabled, of struggling with hunger, homelessness, and a lack of the most basic healthcare. I want to hear from working class folks who learned about disability from bone-breaking work in the factory or mine or sweatshop.

We need more exploration of gender identity and disability. How do the two inform each other? I can feel the sparks fly as disabled trans people are just beginning to find each other. We need to listen more to Deaf culture, to people with psych disabilities, cognitive disability, to young people and old people. We need not to re-create here in this space, in this budding community, the hierarchies that exist in other disability communities, other queer communities.

And finally, Beyond the Queer Alphabet (ebook) — an entire book on the subject of queer intersectionality.

If you’ve got any other recommended reading, I’d appreciate hearing about it.

Skud | Infotropism | 2014-07-24 04:38:22

I was at a Wikimania Fringe Open Science event yesterday, and one of the major conclusions we came to was the need for an open, human-editable citation database.

CC by 3 Jknight1603

As part of these we explored the idea of storing citation information on WikiData which has been proposed by several people; the WikiCite project was postponed pending WikiData. Well, now WikiData is here! (Although not query-able yet) Still, there’s no reason we can’t put data in with the expectation that at some point we can get it back out.

This means we have to make decisions about how information is structured. On WikiData, properties can take different types; for instance, a string, a time, or another item i.e. WikiData entry. (For an example, see the list of properties a periodical can have!)

CC by 3 thepwnco

One of these properties is a property called “subclass of” which allows you to create a hierarchical structure among wikidata items.

In Zotero, the json representation of the citation contains a field called “creator” which includes a list of all the people involved in the creation of the work, such as author, inventor, composer, editor, artist, etc. So, mimicking this, I set author and editor as “a subclass of” creator. Author was already set as a subclass of person, which seemed correct. So I added that property to editor too. But then I remembered just the other day using Zotero to cite this medical encyclopaedia article on menopause.

Zotero sets the author as Board, A.D.A.M. Editorial (A.D.A.M. Editorial Board). Could I set the editor of an article to be a group of people, rather than a person, such as an editorial board? And if so, does editor as a subclass of person still make sense? If it does, does that make an editorial board a person? Can “editor” be a mixin class?

There are no practical implications of this. As of yet, “subclass of” is simple a property, and not enforced in any meaningful sense. In the future, it’s possible you could use the property to inherit properties in some code somewhere- and then perhaps it might become meaningful. But for now, I’ll try not to agonize too much over whether an editorial board is a person.

Marielle Volz | MVolz --- Blog FOSS Outreach Program for Women | 2014-07-23 22:55:37

UPDATE: This program is full now!

We are so excited that we’ve got the number of volunteers we needed to assign all of the developer-related packages we identified for this round! THANK YOU! Any further applications will be added to a wait list (in case any of the assignees need to drop any of their assigned packages.) Depending on how things go, we may open up another round in a couple of weeks or so, so we’ll keep you posted!

Thanks again!!

– Mo, Ryan, and Hughsie


Do you love free and open source software? Would you like to help make it better, but don’t have the technical skills to know where you can jump in and help out? Here is a fantastic opportunity!

The Problem

There is an cross-desktop, cross-distro, Freedesktop.org project called AppStream. In a nutshell, AppStream is an effort to standardize metadata about free and open source applications. Rather than every distro have its own separate written description for Inkscape, for example, we’d have a shared and high-quality description of Inkscape that would be available to users of all distros. Why is this kind of data important? It helps free desktop users discover applications that might meet their needs – for example, via searching software center applications (such as GNOME Software and Apper.)

Screenshot of GNOME Software showing app metadata in action!

Screenshot of GNOME Software showing app metadata in action!

Running this project in a collaborative way is also a great way for us to combine efforts and come up with great quality content for everyone in the FLOSS community.

Contributors from Fedora and other distros have been working together to build the infrastructure to make this project work. But, we don’t yet have even close to full metadata coverage of the thousands of FLOSS applications we ship. Without metadata for all of the applications, users could be missing out on great applications or may opt out of installing an app that would work great for them because they don’t understand what the app does or how it could meet their needs.

The Plan

Ryan Lerch among other contributors have been working very hard for many weeks now generating a lot of the needed metadata, but as of today only have roughly 25% coverage for the desktop packages in Fedora. We’d love to see that number increase significantly for Fedora 21 and beyond, but we need your help to accomplish that!

Ryan, Richard Hughes, and I recently talked about the ongoing effort. Progress is slower than we’d like, we have less contributors than we’d like – but it is a great opportunity for new contributors, because of the low barrier to entry and big impact the work has!

So along that line, we thought of an idea for an ongoing program that we’d like to pilot: Basically, we’ll chunk the long list of applications that need the metadata into thematic lists – for example, graphics applications, development applications, social media applications, etc. etc. Each of those lists we’ll break into chunks of say 10 apps each, and volunteers can pick up those chunks and submit metadata for just those 10.

The specific metadata we are looking for in this pilot is a brief summary about what the application is and a description of what the application does. You do not need to be a coder to help out; you’ll need to be able and willing to research the applications in your chunk and draft an openly-licensed paragraph (we’ll provide specific guidelines) and submit it via a web form on github. That’s all you need to do.

This blog post will kick off our pilot (“round 1″) of this effort, and we’ll be focusing on applications geared towards developers.

Your mission

If you choose to participate in this program, your mission will be to research and write up both brief summaries about and long-form descriptions for each of ~10 free and open source applications.

You might want to check out the upstream sites for each application, see if any distros downstream have descriptions for the app, maybe install and try the app out for yourself, or ask current users of the app about it and its strengths and weaknesses. The final text you submit, however, will need to be original writing created by you.


Summary field for application

The summary field is a short, one-line description of what the application enables users to do:

  • It should be around 5 – 12 words long, and a single sentence with no ending punctuation.
  • It should start with action verbs that describe what it allows the user to do, for example, “Create and edit Scalable Vector Graphics images” from the Inkscape summary field.
  • It shouldn’t contain extraneous information such as “Linux,” “open source,” “GNOME,” “gtk,” “kde,” “qt,” etc. It should focus on what the application enables the user to do, and not the technical or implementation details of the app itself.

Here are some examples of good AppStream summary metadata:

  • “Add or remove software installed on the system” (gpk-application / 8 words)
  • “Create and edit Scalable Vector Graphics images” (Inkscape / 7 words)
  • “Avoid the robots and make them crash into each other” (GNOME Robots / 10 words)
  • “View and manage system resources” (GNOME System Monitor / 5 words)
  • “Organize recipes, create shopping lists, calculate nutritional information, and more.” (Gourmet / 10 words)

Description field for application

The description field is a longer-form description of what the application does and how it works. It can be between 1 – 3 short paragraphs / around 75-100 words long.


Here are some examples of good AppStream description metadata:

  • GNOME System Monitor / 76 words:
    “System Monitor is a process viewer and system monitor with an attractive, easy-to-use interface.

    “System Monitor can help you find out what applications are using the processor or the memory of your computer, can manage the running applications, force stop processes not responding, and change the state or priority of existing processes.

    “The resource graphs feature shows you a quick overview of what is going on with your computer displaying recent network, memory and processor usage.”

  • Gourmet / 94 words:
    “Gourmet Recipe Manager is a recipe-organizer that allows you to collect, search, organize, and browse your recipes. Gourmet can also generate shopping lists and calculate nutritional information.

    “A simple index view allows you to look at all your recipes as a list and quickly search through them by ingredient, title, category, cuisine, rating, or instructions.

    “Individual recipes open in their own windows, just like recipe cards drawn out of a recipe box. From the recipe card view, you can instantly multiply or divide a recipe, and Gourmet will adjust all ingredient amounts for you.”

  • GNOME Robots / 102 words:
    “It is the distant future – the year 2000. Evil robots are trying to kill you. Avoid the robots or face certain death.

    “Fortunately, the robots are extremely stupid and will always move directly towards you. Trick them into colliding into each other, resulting in their destruction, or into the junk piles that result. You can defend yourself by moving the junk piles, or escape to safety with your handy teleportation device.

    “Your supply of safe teleports is limited, and once you run out, teleportation could land you right next to a robot, who will kill you. Survive for as long as possible!”

Content license

These summaries and descriptions are valuable content, and in order to be able to use them, you’ll need to be willing to license them under a license such that the AppStream project and greater free and open source software community can use them.

We are requesting that all submissions be licensed under the Creative Commons’ CC0 license.

What’s in it for you?

Folks who contribute metadata to this effort through this program will be recognized in the upstream appdata credits as official contributors to the project and will also be awarded a special Fedora Badges badge for contributing appdata!


When this pilot round is complete, we’ll also publish a Fedora Magazine article featuring all of the contributors – including you!

Oh, and of course – you’ll be making it easier for all free and open source software users (not just Fedora!) to find great FLOSS software and make their lives better! :)

Sign me up! How do I get started?


  1. First, if you don’t have one already, create an account at GitHub.
  2. In order to claim your badge and to interact with our wiki, you’ll need a Fedora account. Create a Fedora account now if you don’t alrady have one.
  3. Drop an email to appstream at lists dot fedoraproject [.] org with your GitHub username and your Fedora account username so we can register you as a contributor and assign you your applications to write metadata for!
  4. For each application you’ll need to write metadata for, we’ve generated an XML document in the Fedora AppStream GitHub repo. We will link you up to each of these when we give you your assignment.
  5. For each application, research the app via upstream websites, reviews, talking to users, and trying out the app for yourself, then write up the summary and description fields to the specifications given above.
  6. To submit your metadata, log into GitHub and visit the XML file for the given application we gave you in our assignment email. Take a look at this example appstream metadata file for an application called Insight. You’ll notice in the upper right corner there is an ‘Edit’ button – click on this, edit the ‘Summary’ and ‘Description’ fields, edit the copyright statement towards the very top of the file with your information, and then submit them using the form at the bottom.

Once we’ve received all of your submissions, we’ll update the credits file and award you your badge. :)

If you end up commiting to a batch of applications and end up not having the time to finish, we ask that you let us know so we can assign the apps to someone else. We’re asking that you take two weeks to complete the work – if you need more time, no problem, let us know. We just want to make sure we reopen up assigned apps for others to join in and help out with.

Let’s do this!

Ready to go? Drop us a line!

Mairin Duffy | Mirn Duffy | 2014-07-23 20:01:09

"What I love about AdaCamp is how consistently wonderful the event is – how you can go from one thought-provoking session to another, how you can meet a fascinating person doing great work and then turn around and meet someone who also blows you away." — Anonymous AdaCamper

Excited about AdaCamp and want to attend the next one? Check out our main AdaCamp page to find when applications open for the next AdaCamp.

AdaCamp is an unconference for women in open technology and culture and the people who support them. 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. AdaCamp is organized by the Ada Initiative, a non-profit devoted to increasing the participation and status of women in open technology and culture, which includes open source software, Wikipedia and related projects, fan fiction, and more.

75 people who identified as women or female attended the main track of AdaCamp Portland, held on June 21-22, 2013, with an additional 24 attending an Ally Skills track on June 23rd open to participants of any gender.

A huge thank you to all of our sponsors who made AdaCamp Portland possible:
Google, Puppet Labs, Ada Initiative donors, Automattic, Mozilla, Red Hat, Simple, New Relic, Linux Foundation, Spotify, Stripe, Gitlab, OCLC, O'Reilly, Pinboard, and Python.

Impact of AdaCamp Portland

AdaCamp logo

"It was really transformative for me to be around so many women in such a safe space. I don't know that I've ever felt that supported or cared for before!" — Anonymous AdaCamper

Our post-event survey (35% response rate) indicated that all (100%) respondents felt that AdaCamp had improved their professional networks and nearly as many (88%) felt more part of a community of women in open technology and culture. 73% percent of respondents agreed that AdaCamp increased their awareness of issues facing women in open technology and culture and 77% agreed that they are more committed to participating in open technology and culture now, two of the primary goals of AdaCamp.

AdaCampers enjoyed the diversity of subject matter throughout the conference, the respect that was given each topic and the speakers, the opportunity available for anyone that wanted to participate and how involved on the whole AdaCampers were.

"The discussion of feminist quantified self was probably the best session…but, honestly, I enjoyed everything. I've never been to a better conference/event." — Coral Sheldon-Hess

About the attendees

75 people attended the main track for people who identified as women, with a further 24 attending the Ally Skills track for people of any gender. The attendees came from four countries. The majority of our attendees were from the United States, with the rest from Australia, Canada and India.

We worked hard to make AdaCamp Portland diverse in many different ways. Some statistics from our post-conference survey (35% response rate):

  • 23% listed their race or ethnicity as other than white or Caucasian (30% in the AdaCamp San Francisco survey and 25% in the AdaCamp DC survey)
  • 11% were born outside the United States (18% AdaCamp San Francisco, 28% AdaCamp DC)
  • 42% were not employed as programmers or IT specialists (41% AdaCamp San Francisco, 49% AdaCamp DC)
  • 15% were librarians

Travel scholarships

To make AdaCamp more accessible to students, non-profit employees and others living outside of the Bay Area, and to increase the diversity of our attendees, we offered 5 travel scholarships to AdaCamp Portland. One international grant was awarded to an AdaCamper from Australia, and our four North American travel grants were awarded to three AdaCampers from the United States and one from Canada.

What we did

Main track

AdaCamp Portland's main track was primarily structured as an unconference, with attendee-organized and facilitated sessions around issues facing women in open technology and culture. Based on feedback from the previous three AdaCamps, we added some more structure to the beginning and end of the schedule.

For most attendees, the first session of AdaCamp's main track was an Imposter Syndrome workshop. Women's socialization is often less confident and competitive than men's, and women are therefore especially vulnerable to Impostor Syndrome — the belief that one's work is inferior and one's achievements and recognition are fraudulent — in open technology and culture endeavors where public scrutiny of their work is routine. As at AdaCamp San Francisco, the opening session was a large-group Imposter Syndrome workshop facilitated by Ada Initiative founder Mary Gardiner. The Imposter Syndrome workshop was followed by introductory sessions on areas of open technology and culture that might be new to participants; including everything from linux kernel development and python to fundraising for feminist projects and trans misogyny in feminist spaces.

Two sessions in the afternoon were the first free-form sessions the first focusing on what problems and barriers face women in open source technology and culture and the discussing present existing solutions. On Sunday the morning sessions were also free-form with a focus on generating new and creative ways to address the problems and barriers facing women in open source technology and culture.

"I heard from women who were just entering the industry, as well as veterans handling tricky social and political problems. Just because you go into an individual contributor career track doesn't mean you avoid political problems! It was nice to hear from women who had experienced similar situations to me, and to be able to offer advice on tactics and processes to try to resolve conflict and get what they wanted out of their work." — Selena Deckelmann

On Sunday afternoon, attendee-organized sessions moved towards skill-sharing and creation, with a multitude of workshops, make-a-thons, edit-a-thons, hack-a-thons, and tutorials that ranged from assertiveness and basic self-defense to open source database options and how to make and launch phone apps.

AdaCampers reported learning a variety of new skills including but not limited to wikipedia editing, best practices in conducting edit-a-thons, zine making, responding to micro-aggressions, dealing with code of conduct violations, licensing, public speaking, and what one AdaCamper described as "increased confidence through sense of belonging and tactics for navigating tech communities."

Lightning talks were held on both days of the main track. Any AdaCamper that wanted to share their knowledge, experience or passion – on a topic either in open technology and culture or not – was given the stage for 90 seconds. AdaCampers talked about subjects from bird watching to how to get paid what you're worth to starting a PyLadies group in your area.

Ally Skills track

An evening Ally Skills workshop for people of any gender wishing to support women in open technology and culture was held on June 23. The Ally Skills track opened with Ada Initiative Executive Director Valerie Aurora facilitating the Ada Initiative Ally Skills workshop, which focuses on practical, everyday ways allies can support women in their community.

"It gave me some starts towards being comfortable acting in situations of casual sexism—and that would extend to other -isms. I'd like to do it again at some point, to gain even more confidence." — Kamal Marhubi

In our retrospective survey (25% response rate), 17% of participants indicated that they were not confident in welcoming women to their community, could not respond to actions unwelcoming toward women in their community and did not know how to create a community that is inclusive of women. After the Ally Skills workshop, 100% of respondents indicated that they now felt that they could do these things. All survey respondents said that the workshop taught them responses to avoid when responding to unwelcoming actions in my community. 67% percent of survey respondents said that the workshop made them realize that they have a position of power to influence change and gave them actionable examples of things they could do to make my community more welcoming to women. 100% respondents would recommend the workshop to otheres.

Social events

Grey shirt with purple text reading "I pull the strings around here. Puppet Labs"

Puppet Labs shirts from AdaCamp reception

On the evening of Friday June 20, Puppet Labs hosted a reception for main track attendees at their Portland office. Thank you to Puppet Labs for hosting a welcoming and well-thought out event!

Following the tradition established at AdaCamp DC and San Francisco, instead of a large social event on Saturday night, attendees had dinner in small groups at restaurants around Portland. Attendees were invited to host dinners on behalf of their employers. Thank you to Mozilla, New Relic, Etsy, Intel, Heroku and Code for America and their representatives, for hosting dinners.

Reports from AdaCampers

Several AdaCampers wrote publicly about their experiences at the event:

"This was my fourth AdaCamp and as usual, I came away full of ideas, with new friends and invigorated from all the wonderful conversations." —Selena Deckelmann

"I feel like I walked away with a deeper understanding and appreciation for what is going on with feminism beyond my special little bubble. I met a ton of amazing, talented, and passionate women looking to change the world. I even got some Wikipedia editing done and learned more about ways to accomplish my goals. It made me want to take the time to re-evaluate my goals and what I want to work towards in the future." —Sara Marks

"It was a good session! Several of us had lunch together and talked more about Rosie’s passion for translating articles from one language into another! She spoke very movingly about the politics of translation, especially as it is relevant to women’s history. If we don’t put this information online, it can more or less disappear from public awareness." —Liz Henry

"Most importantly, AdaCamp was a great place to meet like-minded people. This is really important for women in a male-dominated field, where getting professional and emotional support can be a challenge. There were lots of opportunities to talk to the other participants, and the organizers are providing several means for us to continue communicating with each other after AdaCamp. I think this is the most valuable thing I will get out of this event: a network of people who can help me as I continue to learn and grow as a developer and a feminist." —Morgan Kay

It was an incredible experience: I met fascinating and inspiring people, learned new [technical] skills, got some ideas for projects to work on, and received a ton of career affirmation. There were a lot of web developers and other solidly-tech people there, but we also had a handful of journalism-minded folks, quite a few librarians, Wikipedia editors and more." —Rachel Alexander

"I don’t know how to explain what an empowering, fun experience AdaCamp and Open Source Bridge have been. I wish the words would come." —Coral Sheldon-Hess

"AdaCamp is invite-only, but instead of being elitist and Bilderberg-esque, it made for the most actively and intentionally inclusive event I’ve ever attended. [...] AdaCamp was such a great experience and I’m encouraging all my friends to try and attend future events." —Helen Halbert

"I think the most rewarding thing about these conferences, for me, is some mix of the I've-been-there-too commiserating and solution-sketching, making people laugh, laughing at new inside jokes, literally seeing things in a new light, deepening my relationships with people important to me, and passing on the stuff I've learned." —Sumana Harihareswara

"I discovered that User: Rosiestep and I share the same passion in writing biographies of women on Wikipedia, and we decided to do collaborative editing and run multi-city edit-a-thons in future." —Netha Hussain

Conference resources

Each AdaCamp we strive to improve the event. After each AdaCamp, we publish any resources we developed and license them CC BY-SA for use by the community.

Since the conclusion of AdaCamp Portland, we have been developing an AdaCamp toolkit — a set of guidelines and documents that we use to plan AdaCamp in its generic form, and, we hope, a useful tool for anyone planning an unconference. We expect to release the toolkit CC BY-SA this year.

Future AdaCamps

We're thrilled with the increasing success of AdaCamp at bringing women together and developing the current and next generation of women leaders in open technology and culture. AdaCamp is one of the key events of the Ada Initiative, with huge impact on its attendees and the communities they are involved in. Our 2014 AdaCamps in Portland, Oregon, USA; Berlin, Germany and Bangalore, India; are part of our strategy to reach a wider range of women by holding more frequent but smaller AdaCamps around the world. We are developing plans for AdaCamps in 2015 and 2016 now; if you'd like to be notified of the next AdaCamp, sign up to our announcement mailing list or follow us on Twitter.

Thank you to all of the AdaCamp Portland attendees and AdaCamp Portland sponsors for giving us the support we needed to run this event and make it what it is. You are what makes AdaCamp a success!

Your organization has the opportunity to sponsor AdaCamps in 2014 and reach women leaders in open technology and culture. Contact us at sponsors@adainitiative.org for more information about becoming a sponsor.

Thank you to the AdaCamp 2014 platinum sponsors Google and Puppet Labs, gold sponsors Automattic, Red Hat, and Mozilla, and silver sponsors New Relic and Simple.

The Ada Initiative | Ada Initiative | 2014-07-23 19:30:45

Got a new device last week!

The device and peripherals.
Closeup of the device.

The device has an i.MX283 processor and a touchscreen attached to the other side. It booted from the image that came installed on the SD card:

It even has Doom installed on it! Which, I found, is actually easy to install with Buildroot. Who knew video games on embedded devices were so popular?

Since I’m going to be working on a kernel module (mxs-lradc) for i.MX28, I have to put a new kernel on the device. The device came with a manual that described a way to do that, which is really nice, since I have no experience with embedded devices.

The SD card the device boots from is formatted with three partitions. The first has some initial i.MX23/28 boot code on it (“bootlets”), the second has the bootloader (they use Barebox), and the third has the root filesystem, which also contains the kernel image (and device tree binaries) in the /boot directory. From what I understand, the bootlets run first (after the firmware) and start the bootloader, which in turn starts the kernel.

Updating all of this should be pretty easy using Buildroot. They provide a Github repository with a Buildroot configuration file for the device. By downloading it and just running make crystalfontz_cfa10036_defconfig and make, Buildroot will download and build all the necessary parts for the system. This includes things like the cross-compilation toolchain, the bootlets, Barebox and its configuration, and their version of the kernel. The locations of all of these are specified in the configuration file.

The result is two images and a compressed root filesystem, which can be placed on the three partitions. The manufacturer even provided a handy Python script that formats the SD card and puts the images on it.

Trouble is, after I did all this, the device wouldn’t boot. It just hung on a blank screen. Good thing I backed up the original image (with dd).

My initial reaction was to try to get some output from the system, using the debug UART on the processor (on the image above, the four golden headers (holes) to the right of the red plate). I spent over two days on it, so far unsuccessfully (more on this below).

At some point, however, I noticed that the working system was running kernel version 3.12.17, while the kernel being built was v3.15-rc5, and the configuration file used was generated for v3.9 (presumably the new options were set to the defaults). So I thought I’d build v3.12.17 instead. I got the configuration for it from /proc/config.gz on the working system, and modified Buildroot to build it.

I once again placed the images and rootfs on the SD card, inserted it in the device, and… it didn’t boot. Nothing on the screen again.

Eventually I came up with the idea of just taking the working image, mounting the rootfs on it on my computer, and simply replacing the zImage file in the /boot directory with the one I built. And that worked! The device booted again with no problems.

Next I tried the same with v3.13. It booted, but the touchscreen didn’t work. Well, okay. Then I tried 3.14. Blank screen again, didn’t boot. sigh

Haven’t tried to find the reason yet, but it’s a start. At least now I have a way to boot my own kernel.

But I’d also like to figure out what’s wrong with the bootlets and/or Barebox images I put on the card, and why they don’t boot. I can see from the bootlet code that it prints debug information out to the debug UART on the board. So it would be great if I could read from the UART.

Furthermore, the kernel also boots with the command line parameter console=/dev/ttyAMA0, which is the debug UART. That means system messages are printed to it, and reading it could also help me find out what’s wrong with v3.14. (Though I could probably also override the console parameter by finding where the command line is parsed in the kernel.)

I tried to read from the UART using the serial to USB converter that came with the device. It connects the UART to my computer’s USB port. I should be able to read from it using the ftdi-sio driver, by issuing “normal” serial commands to /dev/USB0. I tried it with both Minicom and a small program using termios (example code), but so far no luck. I’m just getting garbage:

Minicom output.

I got the serial communication parameters from sysfs and the tcgetattr() system call on the device (with a working kernel). Not sure if that’s the right way to do it. And I can see the AMBA PL011 driver running on the device (or at least it says so in the system log during bootup). And yet nothing I write to /dev/console on the device is arriving on my computer, or I’m not handling it right. I must be doing something wrong. There are also weird SysRq “help” messages in the system log on the device, which implies that the UART is getting something from my end or the converter.

I’ve spent several days messing with this thing, and while I’d really like to get it to work, I’ll probably leave it alone for the time being. It’s not really what I’m supposed to be working on (the mxs-lradc driver is), and I’d like to get something done by the end of the internship, so I’ll probably do some other things next, like delete some drivers, and do some IIO subsystem driver cleanup that doesn’t require any hardware.

Which reminds me, this isn’t all I’ve worked on during the past couple of weeks. I also removed one more driver, and talked to some driver “owners” about their drivers, either on the mailing lists or some of them emailed me personally. I never got a response about 7 drivers, and was going to ask the maintainers (or original authors) about them again, but Greg thought I should just delete them, so I’ll do that instead.

In addition, I spent a lot of time learning about the IIO subsystem, by reading the documentation and the code of the IIO “core”, a “dummy” driver, and userspace examples.

I also subscribed to a bunch more kernel mailing lists related to the device and the mxs-lradc driver (input, pm (power management), ARM, and devicetree). It’s interesting since I get to see what kind of work goes on in the kernel. Even though 99% of the time I don’t understand what they’re talking about… And the volume is pretty high, so I can’t read everything anyway, but I at least try to scan the subject lines, and read the email only if it seems interesting.

It’s also nice to see people making mistakes :) Makes me worry less about messing up myself, since I see it’s usually not a big deal. Oh, and I also found that the LKML archives go back to 1996, which is pretty cool (and humbling).

I’ve also found myself in various “detours” reading code from parts of the kernel not strictly related to what I’m working on, like the module infrastructure, device trees, how devices and drivers are initialized, or how the kernel starts running. I should probably avoid going off track like this.

To finish up, I’d say it’s been a fun couple of weeks. Despite a few frustrating days with the UART port, I’m still very happy to have an actual device to work with and test my changes on, and I feel like I’ve learned a lot about Linux and embedded devices, which is nice.

Kristina Martsenko | Kristina Martenko | 2014-07-23 18:05:21

As anti-harassment policies become more widespread at open technology and culture events, different ways of handling harassment incidents are emerging. We advocate a swift process in which final decisions are made by a small group of empowered decision makers, whose focus is on the safety of the people attending the event.

Open technology and culture communities, which often make decisions in a very public way, can be tempted to also have a very public and very legalistic harassment handling process, a judicial model, but we advocate against this. It prioritises other values, such as transparency and due process, over that of safety. Alternatively, because many members of such communities find ostracism very hurtful and frightening, sometimes they develop a caretaker model, where they give harassers lots of second chances and lots of social coaching, and focus on the potential for a harasser to redeem themselves and re-join the community.

But neither of these models prioritise safety from harassment.

Consider an alternative model: harassment in the workplace. In a well-organised workplace that ensured your freedom from harassment — a situation which we know is also all too rare, but which we can aspire to, especially since our events are workplaces for many of us — an empowered decision maker such as your manager or an HR representative would make a decision based on your report that harassment had occurred and other relevant information as judged by them, and act as required order to keep your workplace safe for you.

A well-organised workplace would not appoint itself your harasser’s anti-harassment coach, have harassment reports heard by a jury of your peers, publish the details of your report widely, have an appeals process several levels deep, or offer fired staff members the opportunity to have their firing reviewed by management after some time has passed.

Like in a well-organised workplace, we advocate a management model of handling harassment complaints to make events safer: reasonably quick and final decisions made by a small group of empowered decision makers, together with communication not aimed at transparency for its own sake, but at giving people the information they need to keep themselves safe.

The management model of harassment handling is that:

  1. you have a public harassment policy that clearly states that harassment is unacceptable, and gives examples of unacceptable behaviour
  2. you have a clear reporting avenue publicised with the policy
  3. you have an empowered decision maker, or a small group of decision makers, who will act on reports
  4. reports of harassment are conveyed to those decision makers when reported
  5. they consider those reports, gather any additional information they need to make a decision — which could include conduct in other venues and other information that a very legalistic model might not allow — and they decide what action would make the event safer
  6. they communicate with people who need to know the outcome (eg, with the harasser if they need to change their behaviour, avoid any people or places, or leave the event; volunteers or security if they need to enforce any boundaries)
  7. they provide enough information to the victim of the harassment, and when needed to other attendees, to let them make well-informed decisions about their own safety

Further reading

The Ada Initiative | Ada Initiative | 2014-07-23 15:08:31

When I worked at Salon.com I got to work with Scott Rosenberg. I never reported to him and barely got to collaborate with him directly, more's the pity, but I did get to witness him in meetings. He would listen for most of the meeting, then speak up, insightfully and concisely summarize others' viewpoints, and then say what he thought and why. (He was also the first person at Salon to predict that Schwarzenegger would win the governorship.) And he wrote Dreaming in Code, a book I frequently recommend to help non-programmers understand the infelicities and headiness of software engineering.

These days Scott is targeting his insight into our industry, long-term perspective, experience as theater critic and tech manager, and delightful prose at the issue of "being ourselves in a post-social world" -- or, life after Facebook. I love how he's working on it and I look forward to watching his work. And hey, I am still not on Facebook, so maybe I already live in Scott Rosenberg's future! I AM A TIME TRAVELER. WHOOOO. SPOOKY NOISES.

Anyway. Thinking about Scott's influence on me makes me think about management. I'm taking a break from formal management at my job right now, but I'm still on the board of directors of the Ada Initiative, and besides that there's my interest in influencing my communities informally. As Frances Hocutt put it,

when I talk about leadership and influence I am not talking about coercion or manipulation. I define influence as the ability to connect with others, and discover that their goals are also your goals.

(Hocutt and Rosenberg are also both saying interesting things about authenticity and leadership, by the way, in case you want to go read about that on their sites.)

A few years ago, I read the Project Gutenberg text of Florence Nightingale's On Nursing, and I thoroughly recommend it. Nightingale focuses on executive energy, attention, and putting the proper processes into place such that patients (employees) have the resources and quiet they need to get better (do their work). Once you get to a certain administrative level, instead of solving problems ad hoc you have to think strategically. As she puts it, a manager's question is, "How can I provide for this right thing to be always done?" You know, scaling.

One of the best thinkers on that particular question as it applies to the software industry is Camille Fournier, whom I hope to work with someday. She writes interestingly about autonomy, mastery, and introspection, making it easy for people to do the right thing, choosing to ignore easy problems, becoming the boss, and growing new engineering leaders. You can also watch or read her !!Con talk "How To Stay In Love With Programming" on the !!Con site.

And in case you want to play a game, try the manual text adventure "Choose Your Own Troika Program For Greece" (author's note) by Daniel Davies.

One of the motivations for the post was a discussion I had with @PabloK on twitter about the Greek negotiations, in which he said, rather succinctly, that the purpose of protest was to change the space of what was politically possible. I think this is a crucial point; although it is important to make a good faith attempt to understand the constraints that people work under (which is why I wrote the post), it is equally important not to regard those constraints as necessarily being imposed by Ultimate Reality.

(As long as I'm mentioning wacky takes on European financial crises I have to link to John Finnemore's analogy monologue.)

I am being super digressive today, thinking about the fact that I'm grateful for the chorus of thinkers and activists who sing so I can go take a breath, thinking about my choice to manage and lead adults and to probably not bear or raise children, thinking about how it gets tiringly abstract sometimes to always be setting up leveragable scalable systems, and thinking about the joy of mentoring future leaders. If I had to try to tie all of this together, I would say that the power of leadership is the power to change the constraints that people work under. And that I see a lot of my friends not-very-willingly constrained by Facebook, and I'm looking forward to seeing that go away.

Sumana Harihareswara | Cogito, Ergo Sumana | 2014-07-23 14:01:06

Yet another update from my internship at Mozilla, as part of the OPW.

A brief one, this time, sorry.

Bugs, Bugs, Bugs, Bacon and Bugs

I've continued with my triaging/verifying work and I feel now pretty confident when working on a bug.
On the other hand, I think I've learned more or less what was to be learned here, so I must think (and ask my mentor) where to go from now on.
Maybe focus on a specific Component?
Or steadily work on a specific channel for both triaging/poking and verifying?
Or try my hand at patches?
Not sure, yet.

Also, I'd like to point out that, while working on bug triaging, the developer's answers on the bug report are really important.
Comments like this help me as a triager to learn something new, and be a better triager for that component.
I do realize that developers cannot always take the time to put in comments basic information on how to better debug their component/product, but trust me: this will make you happy on the long run.
A wiki page with basic information on how debug problems for your component is also a good idea, as long as that page is easy to find ;).

So, big shout-out for MattN for a very useful comment!


After much delaying, we finally managed to pick a date for the Bug Triage Workshop: it will be on July 25th. The workshop will be an online session focused on what is triaging, why is important, how to reproduce bugs and what information ask to the reporter to make a bug report the most complete and useful possible.
We will do it in two different time slots, to accomodate various timezones, and it will be held on #testday on irc.mozilla.org.
Take a look at the official announcement and subscribe on the event's etherpad!

See you on Friday! :)

Francesca Ciceri | tags/pdo | 2014-07-23 11:04:12

So, a couple of weeks ago I performed some first tests on the prototype driver using a simulated device created with the null_blk device driver. Such tests, and the following profiling, highlighted some locking issues due to contention on an internal lock kept by the frontend driver; more in detail, such a lock is instrumental to handling a ringbuffer which is used to exchange requests and responses between the frontend and the backend parts of the block I/O driver: the lock protects the ring against the insertion of new requests and the extraction of responses. My very patient OPW mentor has therefore suggested splitting the ring into two separate halves, one used for requests and another used for responses. During the last week and a half I have been working on that; while struggling with making the interface consistent with the needs of older versions of the driver, I have been writing this last blog article about the multi-queue block layer API, which concludes the series; next week I'll bore you to death with something more related to performance. Also, please note that this post is the reword of some documentation I produced during the first weeks of internship, and it has had the benefit of my mentor's reading, so it's probably much more accurate than usual.

The block I/O layer, part 4 - The multi-queue interface

The request interface was designed for devices that could handle hundreds of I/O operations per second; in a recent paper, block layer maintainer Jens Axboe noted that it suffers from design issues when used for devices that can handle hundreds of thousands of IOPS (see my first blog post or, much better, Jens Axboe's paper). One of the capital issues, lock contention, has very relevant effects event if only having multiple cores concurrently inserting block I/O requests and continuously spinning on the single queue_lock; such a situation is exacerbated when the lock is conteded also by a high-end storage device issuing interrupts and whose driver is still spinning on that same lock. The multi-queue API (also referred to as blk-mq) addresses such an issue by exploiting the ability of block I/O controllers to handle multiple requests in parallel, and thus dramatically reducing lock contention; in fact, in its most common configuration, it allows for block I/O requests to be inserted without the need to lock the whole request_queue. Let's see how it manages to do it.

The blk-mq API implements a two-levels block layer design which makes use of two separate sets of request queues: software staging queues, allocated per-CPU, and hardware dispatch queues, whose number typically match the number of actual hardware queues supported by the block device. The number of software staging queues can be higher than the number of hardware dispatch queues: in this case, two or more software queues will be part of the same hardware context, and a dispatch performed with that hardware context will pull in requests from all the associated software queues. The number of software staging queues can be, instead, less than the number of hardware queues: in this case, sequential mapping is performed. In the third and most simple case where the number of software queues equals the number of hardware queues, a direct 1:1 mapping is performed.

Figure 1: Outline of the multi-queue block layer.

Main data structures
The first relevant data structure used by the multi-queue block layer API is the blk_mq_reg structure, containing all informations of importance during the registration of a new block device to the block layer. This data structure contains the pointer to a blk_mq_ops data structure, used to keep track of the specific routines to be used by the multi-queue block layer to interact with the device's driver. A blk_mq_reg structure also keeps the number of hardware queues to be initialized, the dept of such queues and other information useful during the initialization of data structures related to the particular driver in the block layer. Another data structure of importance is the blk_mq_hw_ctx structure, which represents the hardware context to which a request_queue is associated. Its corresponding structure for the software staging queue is the blk_mq_ctx structure, which is allocated per-CPU. The function performing the mapping between these contexts is specified in the map_queue field of the driver's blk_mq_ops data structure, while the mapping built by this function is kept as the mq_map of the request_queue data structure associated to the block device.
Don't worry: a drawing, such as Figure 2, makes it clearer. Kind of.

Figure 2: Data structures used in the multi-queue block layer.

Queue initialization
When a new device driver using the multi-queue API is loaded, it creates and initializes a new blk_mq_ops structure and sets to its address the related pointer of a new blk_mq_reg. More in detail, the required operations are queue_fn, which must be set to a function in charge of handling the command (e.g. by passing it to the low-level driver), and map_queue, which performs the mapping between hardware and software contexts. Other operations are not strictly required, but can be specified in order to perform specific operations on allocation of contexts or on completion of an I/O request. As of necessary data, the driver must initialize the number of submission queues it supports, along with their size; other data are required, e.g., to determine the size of the command supported by the driver and specific flags that must be exposed to the block layer.

When a new device is initialized, its driver prepares a new data structure whose type may vary according to the device driver handling the device; such a driver-specific data structure, however, is very likely to contain a pointer to the device's gendisk struct and to the request_queue related to the device. As soon as the driver has these data structures ready, it invokes the blk_mq_init_queue() function, which initializes the hardware and software contexts and performs the mapping between them. The initialization routine also sets an alternate make_request function, subsituting to the conventional request submission path (which would include blk_make_request()) the multi-queue submission path (which includes, instead, the function blk_mq_make_request()); as usual, the alternate make_request function is set with the blk_queue_make_request() helper.

Request submission
Device initialization substituted the conventional block I/O submission function with the multi-queue-ready request-submission function, blk_mq_make_request(), letting the multi-queue structures be used transparently from the perspective of the upper layers. The make_request function used by the multi-queue block layer includes the possibility to benefit from per-process plugging, but only for drivers supporting a single hardware queue or for async requests. In case the request is sync and the driver actively uses the multi-queue interface, no plugging is performed. The make_request function also performs request merging, searching for a candidate first inside the task's plug list, if plugging is allowed, and finally in the software queue mapped to the current CPU; the submission path does not involve any I/O scheduling-related callback. Finally, make_request sends immediately to the corresponding hardware queue any sync request, while it delays this transition in case of async or flush requests, to allow for subsequent merging and more efficient dispatching.

Request dispatch
In case that an I/O request is synchronous (and therefore no plugging is allowed for it from the multi-queue block layer) its dispatch to the device driver is performed in the context of the same request; if the request is instead async or flush, and task plugging is present, its dispatch can be performed: a) in the context of the submission of another I/O request to a software queue associated to the same hardware queue; b) when the delayed work scheduled during request submission is executed.
The main run-of-queue function of the multi-queue block layer is the blk_mq_run_hw_queue(), which basically relies on another driver-specific routine, pointed by the queue_rq field of its blk_mq_ops structure. This function delays any run of queue for an async request, while it dispatches a sync request immediately to the driver. The inner function __blk_mq_run_hw_queue(), called by blk_mq_run_queue() in case the request is sync, first joins any software queue associated to the currently-in-service hardware queue; then it joins the resulting list with any entry already on the dispatch list. After collecting all to-be-served entries, the function processes them, starting each request and passing it on to the driver, with its queue_rq function. The function finally handles possible errors, by requeue or deletion of the associated requests.

Figure 3: Functions performing request transition between different data structures.

Bjørling, Matias, et al. "Linux block IO: Introducing multi-queue SSD access on multi-core systems." Proceedings of the 6th International Systems and Storage Conference. ACM, 2013. - http://kernel.dk/systor13-final18.pdf
Johnathan Corbet, "The multi-queue block layer" - http://lwn.net/Articles/552904/
The Linux kernel, blk-mq: new multi-queue block IO queueing mechanism

Arianna Avanzini | cat /var/log/ava | 2014-07-23 07:37:29

Evince_logo_newThis is probably going to be the shortest post I will be writing, but then it’s GUADEC time!

My latest component is Evince, the document viewer. I am building up on the same infrastructre as we did for Weather testing, and have put together some basic tests for the application. These can be found HERE

On the lighter side of things, I could do with a baggage zipper (much like a file zipper) at a click to take care of my packing, and mail me and my zipped luggage to save us from the gruesome travel :P

Apart from these, I am helping the team organize Volunteers, and I realize I love organizational tasks for GUADEC. (Should take up more of these in the future too :D)

Anyways, returning to the old way of packing now. (I promise the next blog will be better!)

Shivani Poddar | Shivani Poddar | 2014-07-23 06:38:15

Hello my readers,

I’ve been gone for awhile, but now, I’m back. I’m here at OSCON, and I’m so happy (and tipsy) that I just have to share it with you. In fact, I’ve got something wonderful to share with you–a ticket to Linuxcon North America! I ended up with an extra one, so the first person at OSCON who comes to my office hours at 2:30 tomorrow–or, failing that, my talk on Thursday at 11:50–and says “Linux Rocks!” gets the ticket! So if you’re having a good time and don’t want it to end, get yourself another round!

Here’s my talk.

And of course, we’re long overdue for a spider (or two). Here’s a little romance. Enjoy.


Kelley Nielsen | Salticid of the Earth | 2014-07-23 03:43:45

  •  how to recruit a diverse team | the evolving ultrasaurus: “There is no quick fix to diversity hiring. The easiest way to hire for diversity is to start with diversity — to start when you add the second person on your team — but if you reading this post, you likely have an imbalanced or homogeneous team. I’ve primarily written this for all-white or all-male teams in tech.”
  • The Problem With Science| Shakesville: “This doesn’t speak well of one of the industry’s leading publications. It also doesn’t inspire a lot of confidence (which, as I’ve already explained, I’m short on) that the folks making or breaking careers by deciding which papers are “sexy” enough to publish are going to have the professionalism to ground their decisions in something other than a creepy desire to excite their presumed readership of straight white cis guys.”
  • A handy template for online trolls: “It has come to my attention that you are [a person of color/woman/ LGBTQ/differently abled/immigrant] and you have posted an online essay suggesting that your situation in life is somehow challenging because of a circumstance relating to people who are not in your condition. As an Internet commenter, it is my mouse-driven duty to anonymously respond to your post. I’m not sure what would happen if I failed to do so, but I saw what happened when they stopped pushing the button in LOST so I will not take any chances.”
  • No More “Put A Skirt On It” | molly.is/saying: “Good news: the next time you draw a person or create a user avatar, you have an opportunity to fight the sexist patriarchal bullshit! Like many instances of patriarchy-smashing, it’s not actually that hard once you get the principles down. Here are 2 simple rules to keep you on track.”
  • Ninja Pizza Girl and The Thorny Tangle of Girlhood | Apple Cider Mage: “The crux of it is Jason Stark, the head of Disparity Games, relating precisely how and why Ninja Pizza Girl came to be. He talks about how the concept came straight from his childrens’ mouths but more importantly he  also describes the stumbles in his own assumptions about not only game design but also about his daughters’ growing vulnerability as they move into teen-hood and beyond. It was a bit of insight that I found intriguing, not so much as a gamer, but rather as a woman.”
  • Opinion: Selena Deckelmann on Portland tech’s gender divide | Portland Business Journal: “I was surprised and horrified to discover every woman in tech I knew had similar, and, disturbingly, far worse stories than mine. Many of these women, successful in tech and making good money, supported families and could not just quit and find another job in the small job market in Portland. Sure, they could move to another city — but with kids, spouses with jobs or in school, these decisions are rarely simple.”
  • Feminism and (Un)Hacking | Journal of Peer Production: CFP for articles on feminism and hacker/makerspaces: “With this special issue of the Journal of Peer Production, we hope to delve more deeply into these critiques to imagine new forms of feminist technical praxis that redefine these practices and/or open up new ones. How can we problematize hacking, tinkering, geeking and making through feminist theories and epistemologies? How do these practices, in fact, change when we begin to consider them through a feminist prism? Can we envision new horizons of practice and possibility through a feminist critique?”
  • San Fran tech types: what you need to know to move to Oakland | Live Work Oakland: “I’d like these young dudes coming to my town to actually see ALL the people coming up in tech in Oakland around me–the many Black, Latino, queer, female, and trans folks who, like all of us, show up in so many different ages, styles, and sizes, but who have a place, just like the white bros do. And  if these new folks coming into Oakland can’t see the folks who are already here, can’t change, I’d like them to just get the F* out of the way and take one of those corporate buses right back to where they came from .”
  • Meanwhile, in an alternate universe… | Infotropism: Read Skud’s take on what google+’s announcement re: pseudonyms SHOULD have been.
  • Canceling TRUCEConf | TRUCEConf: Trust, Respect, Unity, Compassion, and Equality: “I would say that it’s with a heavy heart that I am canceling this conference, if it weren’t for the sense of relief that comes with this announcement. I have struggled with this for long enough. The time has come to let it go.” (We covered TRUCEConf back in November 2013.)
  • “Pay a heavy price for it” | rosefox: “That’s the Frenkel story. He’s supposed to pay a price for getting what he wanted–the opportunity to harass a couple of women–but all he loses is four years of Wiscon. However, anyone who doesn’t want to be around harassers loses Wiscon forever.” (See also: the Chair of the Harassment Policy Committee responds to feedback about this decision, and more general thoughts on harassment at conferences from Publishers Weekly’s Genreville: What Conventions Are and Aren’t.)
  • Free Online Game Simulates Coming Out Experience | GLBT News: “The game is based on Case’s own coming out process, and it allows the player to choose a variety of conversational choices throughout the storyline. Characters remember what you have said, and they constantly refer back to choices that were made previously in the game. The games tagline is “a half-true game about half-truths.” The game has three endings, but like it promises at the very beginning, there are no easy or clean results. Everything is messy…just like the coming out process itself.”
  • Black Girls Hunger for Heroes, Too: A Black Feminist Conversation on Fantasy Fiction for Teens | Bitch Media: “What happens when two great black women fiction writers get together to talk about race in young adult literature? That’s exactly what happens in the conversation below, where  Zetta Elliott, a black feminist writer of poetry, plays, essays, novels, and stories for children, and award-winning Haitian-American speculative fiction writer Ibi Aanu Zoboi decided to discuss current young adult sci-fi. “

We link to a variety of sources, some of which are personal blogs.  If you visit other sites linked herein, we ask that you respect the commenting policy and individual culture of those sites.

You can suggest links for future linkspams in comments here, or by using the “geekfeminism” tag on Pinboard, Delicious or Diigo; or the “#geekfeminism” tag on Twitter. Please note that we tend to stick to publishing recent links (from the last month or so).

Thanks to everyone who suggested links.

Geek Feminism | Geek Feminism Blog | 2014-07-22 22:26:57

Two women smiling wearing green badge lanyards

CC BY-SA Jenna Saint Martin Photo

AdaCamp is a conference dedicated to increasing women’s participation in open technology and culture: open source software, Wikipedia and other wiki-related projects, open knowledge and education, open government and open data, open hardware and appropriate technology, library technology, creative fan culture, remix culture, translation/localization/internationalization, and more. AdaCamp brings women together to build community, share skills, discuss problems with open tech/culture communities that affect women, and find ways to address them. Learn more about previous AdaCamps here.

AdaCamp Berlin will be in Berlin, Germany at the offices of Wikimedia Deutschland on Saturday October 11 and Sunday October 12, 2014.

Apply to AdaCamp Berlin here

AdaCamp Bangalore will be in Bangalore, India at the offices of Red Hat on Saturday November 22 and Sunday November 23, 2014.

Apply to AdaCamp Bangalore here

Limited travel scholarships will be awarded to attendees of both conferences.

About AdaCamp


AdaCamp is the world's only event focusing on women in open technology and culture, and is a project of the Ada Initiative, a non-profit supporting women in open technology and culture. Both are named after Countess Ada Lovelace, the first computer programmer. Attendance at AdaCamp is by invitation, with applications open to the public. Attendees will be selected based on experience in open tech/culture, experience or knowledge of feminism and advocacy, ability to collaborate with others, and any rare or notable experience or background that would add to AdaCamp.


A limited number of conference sponsorships are available. Benefits include making a public statement of your company's values, recruiting opportunities, and reserved attendance slots for qualified employees, depending on level. Contact sponsors@adainitiative.org for more information.


If you have any questions, please email us at adacamp@adainitiative.org.

Thank you to the AdaCamp 2014 platinum sponsors Google and Puppet Labs, gold sponsors Automattic, Red Hat, and Mozilla, and silver sponsors New Relic and Simple.

The Ada Initiative | Ada Initiative | 2014-07-22 21:41:52

Chat&IM message

This week, I mainly completed functions of Chat&Instant message sending and receiving. And now, Android client can send and receive both chat and instant message among other devices.

As for the chatting part, one can send a message to everyone in his chat room. When the send buton is clicked, a queueMessage is called to queue a message, and then postQueue is called to post message queue to server one by one. And at current, there’s no encryption in communication.

As for the IM part, one can send a message to someone in his chat room privately. As for choosing the recepiant, I changed the orginal design a little. Instead of putting the “all” button at the left of input box, I put a small icon at the top of ChatListFragment, and when user clicks it, a user list is shown. The first row is “Everyone” indicating public message, otherwise indicating private instant message.

When a chat message reaches CouchDB, the longpollingChat returns the first and last id of new messages. Then a getMessage is called to retrieve message contents from server, then message is shown to Android client. When an instant message reaches CouchDB, the longpollingIM returns the message document, including message receiver, sender, and message content. Then it is directly shown to Android client.

Here shows the result of chat message.


Here shows the recipient list after click “to: Everyone”:


Here shows the instant message:




Peihan Li | peihanlee | 2014-07-22 15:24:00

I recently had a bad experience at a programming workshop where I was the only woman in attendance and eventually had to leave early out of concern for my safety.

Having to repeatedly explain the situation to a group of men who promised me that “they were working on fixing this community” was not only degrading, but also unnecessary. I was shuttled to three separate people, eventually receiving some of my money back approximately a month later (which was all I asked for) along with promises and placating statements about “improvement.”

What happened could have been prevented: each participant signed a “Code of Conduct” that was buried in the payment for the workshop, but there was no method of enforcement and nowhere to turn when issues arose.

At one point while I was attempting to resolve the issue, this community’s Project Manager told me, “Three other women signed up, but they dropped out at the last minute because they had to work. It was very strange and unexpected that you were the only woman.” I felt immediately silenced. The issue is not numbers, but instead inviting people to safe spaces and building supportive structures where people feel welcomed and not marginalized. Increasing the variety of people involved in an event is certainly a step, but it is only part of the picture. I realize now that the board members of this organization were largely embarrassed, but they could have handled my feelings in a way where I didn’t feel like their “future improvements” were silencing my very real current concerns.

Similarly, I’ve been thinking a lot about a conversation I had with some members of the German Python community a few months ago. Someone told me that Codes of Conduct are an American hegemonic device and that introducing the idea of abuse opens the community up for it, particularly in places that do not define “diversity” in the same way as Americans. This was my first exposure to this argument, and it definitely gave me a lot of food for thought, though I adamantly disagree.

In my opinion, the open-source tech community is a multicultural community and organizers and contributors have the responsibility to set their rules for participation. Mainstream Western society, which unfortunately dictates many of the social rules on the Internet, does a bad job teaching people how to interact with one another in a positive and genuine way, and going beyond “be excellent to one another, we’re all friends here!” argument helps us participate in a way in which people feel safe both on and off the Web.

At a session at the Open Knowledge Festival this week, we were discussing accessibility and realized that the Code of Conduct (called a “User Guide”) was not easily located and many participants were probably not aware of its existence. The User Guide is quite good: it points to other codes of conduct, provides clear enforcement, and emphasizes collaboration and diversity.

At the festival, accessibility was not addressed in any kind of cohesive manner: the one gender-neutral bathroom in the huge space was difficult to find, sessions were loud and noisy and often up stairs, making it impossible for anyone with any kind of hearing or mobility issue to participate, and finally, the conference organizers did not inform participants that food would not be free, causing the conference’s ticket price to increase dramatically in an expensive neighborhood in Berlin.

In many ways, I’m conflating two separate issues here (accessibility and behavior of participants at an event.) I would counter that creating a safe space is not only about behavior on the part of the participants, but also on the part of the conference organizers. Thinking about how participants interact at your event not only has to do with how people interact with one another, but also how people interact with the space. A commitment to accessibility and “diversity” hinges upon more than words and takes concerted and long term action. It may mean choosing a smaller venue or limiting the size of the conference, but it’s not impossible, and incredibly important. It also doesn’t have to be expensive!  A small hack that I appreciated at Ada Camp and Open Source Bridge was a quiet chill out room. Being able to escape from the hectic buzz was super appreciated.

Ashe Dryden writes compellingly about the need for better Codes of Conduct and the impetus to not only have events be a reflection of what a community looks like, but also where they want to see them go. As she writes,

I worry about the conferences that are adopting codes of conduct without understanding that their responsibility doesn’t end after copy/pasting it onto their site. Organizers and volunteers need to be trained about how to respond, need to educate themselves about the issues facing marginalized people attending their events, and need to more thoughtfully consider their actions when responding to reports.

Dryden’s  Code of Conduct 101 and FAQ should be required reading for all event organizers and Community Managers. Codes of Conduct remove the grey areas surrounding appropriate and inappropriate behavior and allow groups to set the boundaries for what they want to see happening in their communities. In my opinion, there should not only be a Code of Conduct, but also an accessibility statement that collaboratively outlines what the organizers are doing to make the space accessible and inclusive and addresses and invites concerns and edits.  In her talk at the OKFestival, Penny pointed out that accessibility and inclusion actually makes things better for everyone involved in an event. As she said, “No one wants to sit in a noisy room! For you, it may be annoying, but for me it’s impossible.”

Diversity is not only about getting more women in the room, it is about thinking intersectionally and educating oneself so that all people feel welcome regardless of class, race, physicality, or level of education. I’ve had the remarkable opportunity to go to conferences all over the world this year, and the spaces that have made an obvious effort to think beyond “We have 50% women speakers!” are almost immediately obvious. I felt safe and welcomed at Open Source Bridge and Ada Camp. From food I could actually eat to lanyards that indicated comfort with photography to accessibility lanes, the conference organizers were thoughtful, available, and also kind enough that I could approach them if I needed anything or wanted to talk.

From now on, unless I’m presented a Code of Conduct that is explicit in its enforcement, defines harassment in a comprehensive manner, makes accessibility a priority, and provides trained facilitators to respond to issues, you can count me out of your event.

We can do better in protecting our friends and communities, but change can only begin internally. I am a Community Manager because we get together to educate ourselves and each other as a collaborative community of people from around the world. We should feel safe in the communities of practice that we choose, whether that community is the international Python community, or a local soccer league, or a university. We have the power to change our surroundings and our by extension our future, but it will take a solid commitment from each of us.

Events will never be perfect, but I believe that at least in this respect, we can come damn close.

Jennie Rose Halperin | jennie rose halperin | 2014-07-22 13:17:22

Pipes fixed. Started with fixing faults.

I forgot to publish this blog last night.

Aarti Dwivedi | Condensation | 2014-07-22 07:58:56

This week I completed the add functionality for the ReadLater App thanks to the generous help from the community especially LEDfan, brantje, and Raydiation.

This blog post provides details on how I built this feature.

I started with understanding how existing apps work on the ownCloud platform. For this feature, I looked at bookmarksPassman, and the News app. To develop the front end of the readlater app, I looked at the existing News app implementation and created this front-end for ReadLater app:


ReadLater App Front-end

For this purpose, I looked at the docs for manipulating CSS and HTML: ownCloud App Development – Front End.

For the front end development, you need to start with the /templates/main.php file in your app.

While developing the front end, you might come across the “Template file not found” exception:

Template file error owncloud app development


This exception happens when you specify incorrect route in your appinfo/app.php file. To resolve this error, you must specify correct route like so, for the readlater app, the index page is specified as:

'href' => \OCP\Util::linkToRoute('readlater.page.index'),

I also came across the “no app name ” error. This error is caused because the repo on github is ReadLater and when I cloned it, the directory was called ReadLater, but ownCloud only allows readlater.

I then added the functionality to save the content in readlater app, however, I was not able to insert values into the database. For creating the backend, I looked at Passman’s implementation at: https://github.com/brantje/passman/blob/master/controller/itemapicontroller.php

I also saw this error in the log file (to access the log file, go to http://$your-owncloud-server/data/owncloud.log)

{"app":"PHP","message":"Cannot modify header information - headers already sent at \/var\/www\/core\/lib\/private\/appframework\

Per discussion with Raydiation on the IRC channel, it was probably because I had removed the annotations from the Controller.

The App Framework also provides a simple baseclass for adding controllers:OCA\AppFramework\Controller\Controller. Controllers connect your view (templates) with your database and contain the logic of your app. Controllers themselves are connected to one or more routes. Controllers go into the controller/ directory.

For security reasons, all security checks for controller methods are turned on by default. To explicitly turn off checks, you must use exemption annotations above the desired method.

Possible Annotations contain:

  • @CSRFExemption: Turns off the check for the CSRF token. Only use this for the index page!
  • @IsAdminExemption: Turns off the check if the user is an admin
  • @IsLoggedInExemption: Turns off the check if the user is logged in
  • @IsSubAdminExemption: Turns off the check if the user is a subadmin
  • @Ajax: Use this for Ajax Requests. It prevents the unneeded rendering of the apps navigation and returns error messages in JSON format

It is important to add your controller to the dependency injection container in dependency injection/dicontainer.php. (source: ownCloud Controllers)

To check if the Add button is working, I used the Network tab of the developer tools in my browser.  For the above error in addition to the annotations, I was also using incorrect route.

Routes are declared in appinfo/routes.php. Routing connects your URLs with your controller methods and allows you to create constant and nice URLs. Its also easy to extract values from the URLs. For more information on how to implement routes in your app, see: ownCloud Routes.

After fixing  the routes, I was still seeing a blank page even after the POST request went through fine.



Turns out, I missed the generateURL function in my JS file.

To send requests to ownCloud the base URL where ownCloud is currently running is needed.  Full URLs can be generated by using:

var authorUrl = OC.generateUrl('/apps/myapp/authors/1');

For the readlater app’s Add url, my code in the js file is now:

function saveData(){
	type: "POST",
  	url: OC.generateUrl('/apps/readlater/add/url'),
  	data: {url: $('#url').val()}
    }).done(function( msg ) {
 alert( "Your content was saved: " + msg );


I also encountered this exception:

{"app":"index","message":"Doctrine\\DBAL\\DBALException: An exception occurred while executing 'INSERT INTO `oc_readlater_items` (`url`)
VALUES (?)':\n\nSQLSTATE[42S02]: Base table or view not found: 1146 Table 
'owncloud.oc_readlater_items' doesn't exist","level":4,"time":"2014-07-19T13:02:52+00:00"}

To fix this, LEDfan suggested adding a file “version” in the appinfo dir:

Also, it is important to note that whenever you change anything in your appinfo/database.xml file, you must increment the version numbers in both the version file and the appinfo/info.php file.

Thanks to the help from the ownCloud IRC channels, I was able to complete the add URL feature for ReadLater app.

Ruchita Rathi | Gnome Outreach Program for Women | 2014-07-22 06:27:33

It's still a bit messy, but it's here: the brand new homemade Planning a Dinner.

Come say hello!

Marta Maria Casetti | Planning a dinner. | 2014-07-22 06:02:03