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(''),

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:

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

[Content warning: sexual objectification.]

Obie Fernandez is the author of The Rails Way, the editor of Addison-Wesley’s Professional Ruby Series, and a co-founder and CTO of Javelin, a startup that builds “tools and services to help you change your world”.

Fernandez also, apparently, can’t talk about technology without reminding everybody that he has, on some occasion or another, had sex. Despite being a CTO, he also apparently doesn’t know that the Internet doesn’t have an erase button — which goes to show you that extremely poor judgment doesn’t stop you from getting copious VC funding for your company, if you’re male.

Fernandez’s Twitter bio declares, “Author, Programmer, Dad”. Usually (certainly not always, I’m aware!) being a dad implies that you have had sex at least once. But it’s so important for Fernandez to remind us that he has had sex — with people of multiple ages — that he also has to inject tortured sexual analogies into what could have been a perfectly benign programming language flame war.

At 8:36 PM tonight (in my time zone, anyway, Fernandez tweeted, “still not sure exactly what I’m supposed to apologize for other than being a bit crass about 20-year old people.”

By 9:11 PM, Fernandez had evidently thought about it deeply and carefully enough to issue a retraction. I guess the “lean startup” approach is so powerful that its adherents can go from sneering at their critics (including a risible attempt to backjustify his sexism with an appeal to pansexuality — folks, we’ve been over that already) to heartfelt apology in less than 40 minutes. (I fear that his apology may not be entirely heartfelt, though, as he quickly moved on to declaring that he’s “not a sexist” and attempting to pay for his blunder by citing all the women he hires.)

Readers of this blog are aware that one asshat in tech would have little effect on his own, if he were indeed an isolated case. They are equally aware that Fernandez is no anomaly of asshaberdashery. I think the hapless Fernandez is providing us with a valuable lesson: the message to “not feed the trolls” is a dangerous one. While any given individual absolutely can and should disengage with trolls when necessary to protect their physical and mental health, engaging with them can have value. Judging from his Twitter avatar, Mr. Fernandez is at least 30 years old. That means that in his life so far, not a single person has told him that the world generally does not need to know that he has done a sex at some point in his life. Perhaps his demeanor makes them afraid to challenge him. Perhaps they don’t think it’s worth the time. Who knows? But at one point in his life, one presumes that he was impressionable — one knows that he’s impressionable, since nobody acts like he does unless they get rewarded for it. Rewarded with laughs, with buddy-buddy slaps on the back from fellow bros, with congratulations on how delightfully politically incorrect he is, with 1.5 million dollars of venture capital money from the likes of Mark Suster, Eric Ries, and 500 Startups.

Back when I was first dabbling in Usenet in the mid-1990s, it was conventional wisdom that trolls were usually children sitting at a computer in their mothers’ basements. That, in other words, they had no real power other than the ability to rustle a few jimmies for a moment. It’s 2014 now, and some of those children have grown up and become technology executives — people with hiring and firing power, with a lot of control over a big part of the economy. If the adults in the room had spent a bit more time trying to socialize those children (because clearly, they weren’t getting it from their parents) and less time stating their troll-starving prowess, perhaps we would be able to attend a conference without hearing about some guy’s crotch.

Geek Feminism | Geek Feminism Blog | 2014-07-22 05:12:17

I recently worked on a Mesos issue to improve build time. The idea was to use a tool that will help us remove unnecessary header inclusions. One of the only tools available for this is Include-What-You-Use, it’s not a proclaimed 100% accurate tool but we had to give it a try since doing the same task manually can be a little repetitive.

Making a llvm clang plug-in work with Mesos was not obvious at first that’s why I had to try in an out of tree builds for Include-What-You-Use and multiple clang versions before finding the right combination. To make this easier I begun creating a Mesos Docker image for developers that I recently pushed to their registry , there are Mesos Dockerfiles that can already be found in the registry but it was something new to learn, since I always built my Docker containers from command line with only base images and also there were any IWYU image available.

docker_mesos (2).png

After several tests and managing to make work both in and out of tree builds, I chose to keep the out of tree clang-3.4 configuration because the image is much smaller, so here is the final Dockerfile for the base include what you use Docker image:

#llvm clang 3.4 + IWYU image

FROM ubuntu:14.04
MAINTAINER Isabel Jimenez <>

RUN apt-get update -q

#Install Dependencies
RUN apt-get -qy install         \
    build-essential             \
    clang                       \
    cmake                       \
    libclang-dev                \
    libncurses-dev              \
    linux-libc-dev              \
    llvm-dev                    \
    make                        \
    subversion                  \

#Checkout IWYU and switch the banch clang_3.4
RUN mkdir include-what-you-use && svn co source && cd source && svn switch ^/branches/clang_3.4

ENV CC clang
ENV CXX clang++

#Configure IWYU
RUN mkdir build && cd build && cmake -G "Unix Makefiles" -DLLVM_PATH=/usr/lib/llvm-3.4 ../source

#Compile and install IWYU
RUN cd build && make && make install

And here is the Mesos Dockerfile to build an image based on the IWYU one (just above):

#Mesos image from clang 3.4

FROM jimenez/iwyu:clang_3.4
MAINTAINER Isabel Jimenez <>

RUN apt-get update -q

#Install Dependencies
RUN apt-get -qy install         \
    autoconf                    \
    automake                    \
    ca-certificates             \
    git-core                    \
    libcurl4-nss-dev            \
    libsasl2-dev                \
    libtool                     \

#Clone mesos repository
RUN git clone

RUN cd mesos && ./bootstrap

RUN mkdir /mesos/build && cd mesos/build && ../configure --disable-java --disable-python --disable-optimize --without-included-zookeeper

RUN cd /mesos/build && make -j 16

#Master and slave ports 
EXPOSE 5050 5051

WORKDIR /mesos

Note: If you are interested on the in tree Dockerfile see my github.

Now I use this Mesos image for my builds and developments. This allows me to develop in parallel for different branches in my machine, while not interrupting the compilation of one another. Just keep in mind that Cgroups are used in different ways in Docker than in Mesos so when launching tests for Mesos you will have to disable some securities in Docker.

So I launch with interactive (-i) mode, having a proper terminal in the container (-t) and with all privileges so as cgroups tests can be done if needed:

docker run -it --privileged --name <branch> ijimenez/mesos-dev bash

This starts a bash process inside the container so I can interactively work inside of it.

If I need to work on another branch, I dettach from this container using <ctrl>-p <ctrl>-q

And attach to another container running the Mesos branch I want by doing:

docker attach <branch> 

I do all my changes inside the containers, this not only allows me to stop worrying about messing between git branches but also if needed to just ship my container to another machine as is.

Side notes: To run tests think about disabling some Mesos tests not compatible with libcontainer (cf setns test), maybe one day the Docker team will be adding this support. If you are using clang trunk you may need to disable debug in boost that produces errors (cf CXXFLAGS=-DBOOST_CB_DISABLE_DEBUG)

Isabel Jimenez | Isabel Jimenez | 2014-07-22 00:11:13

Top Ruby gems I use

Dana-Maria Nita | Life @ OPW Medium | 2014-07-21 17:50:13

This is a guest post by April Wright. April is a graduate student in evolutionary biology at the University of Texas at Austin. When she’s not crunching data at her computer, she teaches courses for novice biologists so they can learn some computation. In her spare time, she enjoys reading, gaming, running with her dogs and spending time in the kitchen. You can get ahold of her at her website or Twitter.

So I wrote a blog post that went a little bit viral the other day. And a lot of people have asked in the past couple days what can be done to improve the atmosphere at programming meetings. I’ve been chewing on that pretty substantially.

I’ve had a lot of good discussions over the past couple days (help yourself to warm fuzzies here).

Reader bioatmosphere made a very good point in the comments, pulled out below:

The burden to fix things shouldn’t be on you just because you’re experiencing them

She’s right, of course. And that reminded me of this post by Cate Huston, which closes with a section called “Changing the Conversation”. I’ll copy the crucial bit (do read the whole thing, though) below:

Are you doing meaningful work?

Do you feel appreciated?

Do you feel respected?

And I’m going to tack on one more:

Do you feel like you’re part of something?

Because I think that’s what really got me: I felt like I was part of something, then I didn’t. It’s not just being snubbed that hurts, it’s a sense of loss of a community I kinda thought I fit with.

Since I have some ears bent towards me for a bit: People who feel integrated in communities and happy at meetings, what about it? What about these communities and meetings that makes you feel appreciated? Or respected? Or part of something? And what could you do to help someone else feel that?

Get at me via whatever channel preferred. [Mod note: while we normally do not encourage anonymous comments, they are acceptable on this post. Please note that your IP address will be logged, but is only visible to blog administrators.]

Geek Feminism | Geek Feminism Blog | 2014-07-21 15:00:55

Utilizing Categories on WikiMo

Categories are an underutilized feature on the Mozilla Wiki. Though the User Survey just closed (with well over 700 responses!), a cursory view through the results reveals that users and contributors would like the WikiMo’s search capabilities improved. A first step towards this goal and for the service of better information architecture, one of my task items is to create a guide and screencast about creating and using categories.

My single blocker is typical: you begin to write on a topic that seems simple, but reveals itself to have much complexity. For the guide and screencast, I will focus on SPAM. We have a new SPAM template that flags suspicious pages for bureaucrats and admins. Within the SPAM template, Category:Spam is defined. That way pages that are flagged are automatically logged into the SPAM category listing.

I’ve been considering other wiki-wide projects with which to address and demonstrate the power of Categories. Tracking documentation of projects is one. Though a project may now be documented on the Mozilla Developer Network, outdated or just older pages could be flagged with an MDN category. The MDN category would alert WikiMo users that the most up-to-date information is no longer on the wiki but now at MDN.

I plan to record the screencast this week using the current implementation of the Vector theme.

Joelle Fleurantin | Maintaining the Gateway - Improving Mozilla Wiki | 2014-07-21 13:13:29

4 years ago, I went to HOPE for the first time on a last-minute press pass from my college newspaper. Some relevant facts about the trip:

  • I was 19 and had never been to a hacker con before.
  • I didn’t identify as a hacker (or an activist).
  • I was too shy to talk to anyone the entire time. Combined with the fact that I knew only a few people there, I was mostly off by myself.
  • HOPE that year was the pinnacle of paranoia in probably the most paranoid period of my life. This was 2010, a few months after Chelsea Manning was arrested for leaking a trove of documents to WikiLeaks. Coincidentally, Chelsea Manning had visited my house in the autumn of 2009; this was cause enough for suspicion from certain groups and frequent questions from reporters once the WikiLeaks story broke. Julian Assange was scheduled to give the keynote at HOPE, so you can imagine the atmosphere that year.
  • Overall it was a fun experience regardless.

This year I finally made it back to HOPE. Things were a little different than last time:

  • I flew in from Europe instead of driving from Boston.
  • I was representing EFF and Freedom of the Press Foundation, two organizations that were almost-universally loved by the attendees.
  • I co-presented two talks in front of overflowing rooms of people and got lots of audience feedback.
  • I didn’t have time to talk to all the people that I wanted to, much less all the people who were trying to ask me questions.
  • Whereas last time I made it to several talks per day, this year I was working from 4 AM in the morning until whenever-I-had-to-give-a-presentation for the first 2/3rds of the conference, then running off to meetings or working shifts at the EFF/FPF booths. As a result, I made it to a total of 3 or 4 talks that weren’t mine. :(
  • It was eerie to have contributed to a project that kept getting name-dropped during the conference by the likes of Daniel Ellsberg and Barton Gellman. Literally dozens of people approached me to say that they wanted to help out with SecureDrop or set up an instance. Wow!

Predictably, it was strange to be a very-minor celebrity at a conference where I’d previously felt like an outsider and deliberately tried to make myself invisible. 4 years ago, my experience in the last 4 days would have seemed impossible for a plethora of reasons: I wasn’t a good public speaker*, I had a lot of self-doubt that I could contribute anything to the event,  I felt weird for not having the same interests and background as the vast majority of people at HOPE, I didn’t know much about computers, I didn’t think that I was working on anything interesting, etc.

*Public speaking workshops are immensely helpful here; so does taking an introductory voice acting class.

Despite the slowly-fading jetlag and piling exhaustion after a month of international travel, it felt nice to contribute back to a conference that had been an eye-opening experience to me the first time.

Many thanks to the following people for working on presentations with me, giving last-minute feedback, and/or letting me sleep in their room: Parker Higgins, Bill Budington, Garrett Robinson, Trevor Timm, Runa Sandvik, James Dolan, Kevin Gallagher, Noah Swartz. Also thanks for Oliver Day for appointing me CSO of his company even though I haven’t fixed the SSL cert for his website yet.

Photo by Scott J. O’Brien (@scottjobrien)

Yan Zhu | discrete blogarithm | 2014-07-21 13:11:38

Wordsworth tells us that his greatest inspirations had a way of coming to him in the night, and that he had to teach himself to write in the dark that he might not lose them. We, too, had better learn this art of writing in the dark. For it were indeed tragic to bear the pain, yet lose what it was sent to teach us.
-Arthur Gossip in "How Others Gained Their Courage", p. 7 of The Hero In Thy Soul (Scribners, 1936), quoted on p. 172 of The Art of Illustrating Sermons by Dawson C. Bryan (Cokesbury Press, 1938), which was in my father's library. He died in late July 2010.

He had a crowded office full of books, which I described in "Method of Loci", and he was enthusiastic about sharing his knowledge, as I mentioned in my eulogy for him. If you didn't know me four years ago and weren't reading my blog, go take a look; they're worth a read. (Most of Cogito, Ergo Sumana for the second half of 2010 is pretty raw and emotional, a lot of the writing-in-the-dark that Wordsworth described.) I'm a lot like my dad. The first copyediting I ever did was for the prayer ritual guides my father wrote, which, of course, had footnotes. I am so glad he was writing for Usenet and the web at the end of his life, getting to enjoy hypertext and linking. One of the last books he wrote was a set of essays about sparrows in literature and the word "sparrow." I think I grok the joy of that more now than I did in 2010.

And I'll repeat the anecdote I heard from a guy who came to offer his condolences after my dad's death, and who told me something about my dad's scholarship. Dad had been tapped to update a Sanskrit reference text, and the publisher told Dad he only had to check sources for the entries he was adding or updating, the diff from the previous edition. Dad didn't think this was good enough, and meticulously checked or found original sources for every entry in the book. This fairly thankless task will help numberless future scholars. Most won't know. We joke about "citation needed" but my dad stepped up and did something about it. You can tell how proud I am, right?

On my insecure days I am terrified that I am not making a difference. It calms, heartens, and sustains me to see other people move on different vectors because of my influence - billiard balls on new trajectories because I was on the baize too - or even completely new endeavors springing up from seeds I scattered. And the chain of attribution is what grounds me. I honor those whose work I reuse, and I am honored when others credit me. Accurate citations make a constellation connecting the filaments of light we lit to dispel the darkness. Accurate citations are an act of love.

I am a sentimental person and I wear my heart on my sleeve. I think it would clutter up the edit summaries on Wikipedia if I included a "<3" in each one, every time I added a citation. But you should imagine they're there anyway.

Sumana Harihareswara | Cogito, Ergo Sumana | 2014-07-21 12:56:53

I've been spending the last few days in the weeds of Leaflet. For the full play-by-play, you can see the GitHub issue.

My Very Frustrating Day

Jaime Lyn Schatz | Developer jaime = new Developer() | 2014-07-21 12:33:35

Following reviews – translations in Greek language have been completed the last two weeks within the OPW:
UI Translations:
network-manager-applet, tracker, zenity, anjuta, glade, Gtk+, gtksourceview, Gtk+ • Property Nicks, devhelp, gnome-sudoku, gnome-tetravex
gnome-mines, four-in-a-row, bijiben, lightsoff, quadrapassel, gnome-robots, gedit, anjuta, Evince Document Viewer

The files of past two weekswere larger in size and very demandingregarding the revision with many errors for correction.Fortunately the version3.14 is almostready! Only a few files have to be reviewed and some strings to be translated that have been added afterwards.

Maria Mavridou | Maria Mavridou | 2014-07-20 15:59:01

The GNOME Newcomers Workshop might be coming to a conference near you this summer! Owen Taylor and I will be hosting one at GUADEC in Strasbourg, France on Saturday, July 26 and one at Flock in Prague, Czech Republic on Saturday, August 9. If you have never contributed a patch to GNOME before or even have never used GNOME, this workshop is for you! You’ll get a quick overview of the GNOME project, have a chance to install GNOME in a virtual machine, and learn the tools and the process of contributing a patch. If you plan to come to either workshop, please add yourself to the list of attendees.gnome-balloonIf you can’t attend one of the workshops, you can install the available image in a virtual machine and go through the newcomers tutorial used at the workshop on your own. You can ask any questions you have on IRC.

We would like to have one helper per three newcomers at the workshops. If you are an established contributor and will be available, please sign up now to help with the workshop at GUADEC or Flock, and then you can check the room in the beginning of the session to see if we need your help based on the attendance. I’d love to see more people running the Newcomers Workshop locally or at other events they attend. Helping out with one of these sessions would give you a chance to learn how it works.

In addition to hosting the Newcomers Workshop, I will be speaking about how to be an ally to women in tech at GUADEC and about the Outreach Program for Women at Flock.


And then I’m going to


Marina Zhurakhinskaya | Marina'z Blog | 2014-07-20 14:03:48

WARNING: Do your research and make sure you know what you're doing. The commands found in this article could seriously affect your machine and I print them here with no warranty. I am not responsible for your bricked hardware. The information contained here is for entertainment and historical purposes only. You have been warned.

I, like many other people, enjoy changing the scenery from time to time and working on a laptop. Now, since I work on kernel drivers, I face some unique issues sometimes when working remotely that you just wouldn't think about when doing application development or web development. One such issue, and the subject of this article is the problem of hanging on reboot.

tl;dr - If you're unsure whether your machine is going to reboot properly while you're working remotely, echo as root the characters r, s, u, b separated by a few seconds each to /proc/sysrq-trigger to safely sync your disks, unmount and reboot by any means necessary. If you were at the keyboard physically, this is your normal magic sysrq sequence as in the mnemonic "(r)aising (e)lephants (i)s (s)o (u)tterly (b)oring" with the "i" and "s" taken out so as to not kill your ssh session while you're entering commands which turns the mnemonic into "(r)emote (s)sh (u)nquestionably (b)oot." There is another method detailed below that amounts to the same thing with less platform portability but nonetheless interesting history.

What if I try to reboot while the hardware is in an undefined state because my driver oops'd, bug'd or hit a general protection fault? I'm not sure if my box is going to hang while waiting on some kernel subsystem to dealloc or drop a reference which has been scribbled on while my driver was in its death throes. I'm sitting in a cafe or on a friend's couch right now and I'd really like it if I didn't have to walk 45 minutes back to my apartment to hit a physical button.

There should be a better way to deal with an unknown kernel state than turning it on-and-off-again manually! This is 2014! Well, look no further than 1984 and the brand new IBM System Unit 5170 also known as the IBM Personal Computer AT.

PC history time! The IBM Personal Computer AT was the third major model in the Personal Computer line. It introduced new features and new hardware, crucially the Intel 80286 processor as its CPU. The architecture of this model was so popular that it inspired many clones and created the lineage of x86 systems that we still use today, largely feature compatible down to the keyboard controller - the 8042.

The 8042 keyboard controller: a small programmable microcontroller whose main use was the new bi-directional keyboard protocol used with the 84 key keyboard (which also introduced the sysrq key coincidentally) allowing the system to do some basic hardware tests and pass status information to the keyboard. This "AT" protocol went on to become the "PS/2" protocol which in turn, through the magic of backwards compatibility, is still the base command set we use to communicate with USB keyboards and turn on status indicators like your keyboard's CapsLock LED.

The history of the 8042 would be extremely boring if not for its secondary usage in the original IBM 5170's architecture. The 8042 is a fully fledged 8-bit microcontroller with plenty of I/O pins (electrical on/off switches) which were used to electrically interface with the keyboard. The keyboard interface didn't use up all the pins available on the 8042 and seeing as it was a perfectly good chip going onto the motherboard anyways, the designers of the 5170 decided to reuse the chip for two additional functions as a cost saving measure. First was controlling the "A20 gate" backwards compatibility function, a feature with much history which has been written about at length elsewhere. Second was the "system reset" line.

As the 8042 was on the system bus of the IBM 5170 its features have been carried forward on all compatible x86 systems. Today you can find it in I/O port memory through /dev/port and the same memory addresses found in technical manuals from 1984 can be used to pulse the system reset line today. Simply

echo -en "\xfe" | dd of=/dev/port seek=100 bs=1 count=1

and your machine will quickly reboot without doing any checks which might hang. Further reading in the sysrq section of the kernel source reveals that this method is actually still used, albeit through a different interface, as the second option, along with a few others, for emergency reboot if the more modern ACPI interface fails or is unavailable for some reason.

This is a stupid way to reboot your system yourself, always use /proc/sysrq-trigger instead and allow the kernel to at least sync and unmount the disks (details in the tl;dr section above) but if you're not working on a mission critical machine and you want to do something a little foolhardy to cheer yourself up after a long, frustrating day/week of hunting bugs, think of simpler times and the 8042 keyboard controller while you reboot your system the caveman way.

Original Source for this Method: How to reboot a Linux server stuck into the Big Kernel Lock
Further Reading: A short history of the PS/2 controller
IBM 51xx - Manuals specifically: IBM 5170 - Technical Reference - 1502243 - MAR84

comment count unavailable comments

Jade Bilkey | jade_opw | 2014-07-19 22:28:10

GUADEC is the biggest event which stands for GNOME Users and Developers European Conference and takes place annually in any of the European countries. This time GUADEC 2014 is going to take place in Strasbourg, France from 26 July – 1 August.

Being a Dec 2013-Mar 2014 OPW’s intern and a GNOME’s foundation member I have been given the opportunity to attend this great conference.

It was not easy to make this dream come true. The journey starts here:

I got a mail from GNOME’s travel sponsorship committee to apply for sponsorship. After applying and re-applying after corrections, luckily I got selected for the sponsorship.

After few days of the confirmation I got two letters. First, Letter of Invitation from Linux Logistique and Letter of Travel Sponsorship from GNOME Foundation signed by Andreas Nilsson, President GNOME Foundation and Secretary Linux Logistique.

Now comes visa process. I had already failed once in getting UK visa successfully in Jan 2014. So, from the very beginning I was very cautious for each and every document required by the French Embassy. This time I collected all the documents very carefully avoiding mistakes that I did previously.
It took me the longest time of about two weeks to get one of the mandatory document required by French visa. It is the NOC form MRIU, Faridabad, the organisation for which I work.They say that they don’t give NOC for just going to attend the conference even after showing them all the invitation and sponsorship letters. In the mean time I got mail from Marina with the subject “interns’ lightning talks at GUADEC”. I forwarded this mail to them and finally they got convinced and I could get the last important document as well for my visa process.

Finally, I got all the papers arranged in proper order and scheduled my appointment at the VFS France Visa Application Centre on 8 July 2014, Tuesday at 9.00 am. I submitted my all the documents at about 11.30 am.

Now, I was waiting for the message from the visa office. To my surprise, I got message on 11 July 2014 (Just within 4 days) that decision has been on my visa request and I can come for the collection any time between 9.00 am – 4.00 pm. I went for the collection of my passport on 14 July 2014, Monday at 9.00 am sharp.
When I opened the envelop, wow, there was a visa inside. The confirmation of the permission of my first foreign visit. Opportunity to get to about know about the new world of opportunities. I really very happy.

Waiting for you July 26, 2014…. ;)

Shobha Tyagi | My experience with GNOME | 2014-07-19 18:00:28

I am almost done with pipes. If all goes as expected, I should be posting screenshots tomorrow.

Aarti Dwivedi | Condensation | 2014-07-19 14:56:21

Three weeks of conferences and no weekends. Next stop, GUADEC 2014 :)

For the past weeks I have been (still am!) busy with VSL, the big logic event going on in Vienna this summer, and with my PhD. For this reason my google summer of code project was a bit delayed :(
I am looking forward to going back working on it, specially because there was some progress before chaos took over and I really want to finish what I have started. I basically used patches from gpoo and Anuj (the other gsoc student working on evince) and implemented text markup annotations (highlight, underline, squiggly and strike out) to evince. Although they implemented free text and line annotations, these depend on some changes to poppler. For text markup, poppler seems to be ready to go, and I guess these are nice annotation that people use more anyway.

The days before GUADEC will be evince 24/7 to finish these annotations!
Looking forward :)

Giselle Reis | Giselle's | 2014-07-19 12:34:12

Since I’ve reached the part of my internship where I need to evaluate a Ruby web API client library and had never written Ruby, I went looking for places to learn! Some of these are books, some are websites, some are web tutorials. All are online and free. If you’re new to Ruby, give these a shot!


Ruby Best Practices:
Previously available for free at The author is now working on Practicing Ruby:
Interesting links from Practicing Ruby: and .

Programming Ruby: The Pragmatic Programmer’s Guide:
When people talk about “pickaxe book” this is the one they’re talking about! This version is fairly dated:
“This book documents Version 1.6 of Ruby, which was released in September 2000.”

Why’s (Poignant) Guide To Ruby:
If you want an off-the-wall introduction to Ruby, this one has cartoon foxes.

Mr. Neighborly’s Humble Little Ruby Book:

Learn Ruby The Hard Way:

Web-based tutorials:

Ruby Koans:
Make things work! Also downloadable.

Try Ruby:
More in-browser Ruby tutorials.

Codeacademy’s Ruby module:
Interactive web-based Ruby lessons.

Adorable game where you write Ruby code to move your warrior and defeat enemies.

A MIT OpenCourseWare handout that has a no-frills guide to some basics and talks about differences between Ruby and Python:

Ruby Style Guide: . I’ve been told that this is as close as the Ruby community gets to consensus on what “good Ruby” looks like.

command line ruby cheat sheets:

Ruby Cookbook is not freely available, but the all the code from the book is:

Ruby is definitely not what I am used to, but it seems like an interesting language and I’m looking forward to learning more of it when I have more time.

Frances Hocutt | Frances Hocutt | 2014-07-19 08:33:17

  • Why Silicon Valley needs the coder grrrls of Double Union, the feminist hacker space | Fast Company: “Unlike Sheryl Sandberg’s brand of feminism, which puts the responsibility on women to lean in, the Double Unioneers take a structural approach. It’s the system that needs fixing, not women.”
  • Why can’t Thor be a woman? Geek culture isn’t just for guys | The Guardian (July 16): “‘The burgeoning Thor controversy is part of a network of problems to do with representation in comics, but one aspect in particular weighs heaviest in this context. We, as a western culture, still struggle with androcentrism – the belief that male experience is the norm and that everything else is, at best, a derivation of the norm and, at worst, abnormal.”
  • Men interrupt more than women | Language Log (July 14): “Let’s pause and dwell on this for a sec: In fifteen hours of conversation that included 314 total interruptions, I observed a total of 13 examples of women interrupting male speakers. That is less than once per hour, in a climate where interruptions occur an average of once every two minutes and fifty-one seconds. Does anyone else think this is a big deal?”
  • For women on the Internet, it doesn’t get better | The Daily Dot (July 16): “Between 4Chan, Men’s Rights Activist groups, the Reddit Red Pill community, pick-up artist (PUA) groups, and anti-PUA groups like the one that Elliot Rodger clung to so dearly, the Internet has allowed men to band together more efficiently than ever before to threaten and antagonize women. Every woman with an online presence has a story to share about unwanted contact, sexual harassment, and predatory behavior.”
  • Dropping the F bomb | Geek Feminism (July 8): “Women in tech groups are not necessarily feminist. Some actively work against feminist ideals.”
  • Changing the World with a Breath and a Test | Marlena’s Blog (July 11): “Our mentoring relationship has been the difference between me putting this app in your hands vs. me building another fake twitter cobbled together from web tutorials and stack overflow.  That’s power.  Having someone tell me that, yes, I can do this even if I feel like an idiot, is a machete cutting deep into imposter syndrome.”
  • The problem of Richard Feynman | Galileo’s Pendulum (July 13): “But ‘Sherlock’ is fiction; Feynman was a real person, and those he hurt were no less real people than he was. Sure, it’s easy to abstract them: we don’t know the names of the women he met at bars, the wives of graduate students he emotionally blackmailed into ‘relationships’, the ‘airhead’ female undergraduates in his classes, or the waitresses he pranked just so he could get a self-satisfied story out of it later. We can justify uncomfortably to ourselves that they’re ‘just some women’, but Feynman is Feynman: he’s important symbolically for physics.”
  • Heroes, human “foibles”, and science outreach | Doing Good Science (July 13): “Science outreach doesn’t just deliver messages about what science knows or about the processes by which that knowledge is built. Science outreach also delivers messages about what kind of people scientists are (and about what kinds of people can be scientists). There is a special danger lurking here if you are doing science outreach by using a hero like Feynman and you are not a member of a group likely to have been hurt by his behavior. You may believe that the net effect of his story casts science and scientists in a way that will draw people in, but it’s possible you are fooling yourself.”
  • What’s the scariest thing in the world? Ask your teenage daughter | Polygon (July 15): More questions to Raven are met with disconcertingly direct answers. I’m shown a side of her life I hadn’t seen before. A world of loneliness and struggle where insults and exclusion are used to devastating effect. Teenage girls have problems that are far more real, and far scarier, than zombies.”
  • Gaymerx2: Internetting while Female Panel | Geeks Out (July 13): “Given the dark reality of the subject matter, this could have easily been a depressing recollection of the ugliest manifestations of human behavior on the internet. Instead, the panel struck an abidingly hopeful note and left quite a few people inspired to collectively work toward an ever-better future in gaming. “
  • Computer scientist and devoted educator Susan B. Horwitz dies | University of Wisconsin-Madison News (July 15): “An expert in programming languages and software engineering, Horwitz had been a member of the UW-Madison faculty for nearly 30 years. Among many professional accomplishments, she championed the encouragement of students who might otherwise overlook opportunities in computing…Particularly during the last decade, Horwitz strove to attract underrepresented students, particularly women and targeted minorities, to computer science and ensure their success. She was a founding member of the Academic Alliance of the National Center for Women and IT, based in Boulder, Colorado.”
  • Death by a Thousand Cuts: The Reality of Being a Woman in Tech | Social Ergonomics (July 11): “This is what is so insidious about the current state of affairs for women in the tech world. Even compliments come with strings attached. You know that even if you’re awesome and can keep up with the best of the best, you are still an outsider. Each compliment that ends with “for a woman”, reinforces the fact that according to all expectations, you’re not supposed to be comfortable with computers and technology.”

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-18 21:02:40

In accessibility problem is sometimes (not always, of course) is something the affected user cannot contribute to the solution for themselves. When that happens in a meritoracy this can essentially mean, those users are not in a position to allow them to be able to get their needs heard, unless their views are actively sought, of course.

In the long run, I would love to see an Outreach Program for People with Disabilities established in Free and Open Software (FOSS)  since the program for women is clearly making such a measurable impact for gender inequality in FOSS as I personally suspect disabled people are the most underrepresented minority group that exists in FOSS, though I have no data to support this assertion, I admit, I think there is a clear need to identify the scale of the issue at the very least, for sure.

Even so, with the best will in the world, the fact is that as developers/contributers/maintainers (or whatever else  a person could contribute to FOSS) the greater our technical experence progamming competence becomes, the less we are able to appreciate the experience of an untechnical user on the whole whether we ourselves are disabled or not this seems to hold true, which could make accessibility a particularly unique problem to be solved in the context of FOSS communities at large, in that sense because it puts 'need' ahead of merit, and in some cases, this seems like something that simply has to be so for it truly be fair, just and accessible for all.

So with all that said, I have designed a feedback questionairre for users of the magnifier to fill out. Please share on relevant mailing lists or let me know if there are any access issues with this post or the survey on the comment area on my page or by emailing m.berns at

The results will be compiled and published in the first two weeks of September. Thank you.

Magdalen Berns | Magdalen Berns | 2014-07-18 13:23:19

Not long ago I posted the above question to the Wikidata project chat. As part of a sitewide documentation overhaul, I wanted to update the FAQ page and thought the prompt would be a good jumping off point for more seasoned contributorswhile they may now know their way around the project, we all had questions when first starting out and had to figure things out by trial n error.

I got some good feedback and have since modified the page but it got me thinking about my own learning curve and gradual realizations in the relatively short time since starting my OPW internship. So, I now present my own ‘what I wish I had known when I first started contributing and using Wikidata’:

  • I’ve picked up some bad wiki habits from when I worked at UBC Library and edited the UBC wiki. Ok, so admittedly they weren’t bad habits in that particular context but because I became so comfortable with MediaWiki, the actual act of using the software is no longer all that difficult for me, and as a result I’m sometimes on automatic when editing Wikidata. This in turn means I forget to do small things like edit summaries that are pretty important to the operations of a very large, internationally distributed, volunteer-contributed project. I am getting better at remembering to do these but it has taken time. Also, I owe some apologies to all the translator admins because editing around those tags has not been my forte up until this point
  • It’s really difficult to evaluate efforts to improve documentation! This is especially true when the documentation does not focus on accomplishing a specific task or a series of tasks but instead is for communicating terms, concepts, and relationships. While I’ve been happy when contributors have jumped in to correct me or explain why my new wording or examples are either not ideal or somewhat misleading, feedback for when something is good is more or less nonexistent (except for from my supervisor, of course). When contributors don’t comment on significant revisions or updates, it’s hard to know if this means all is ok and I should proceed with what I’ve been doing up until that point or…just that not many people are interested enough to say anything. This adds another layer of complexity: do I then accommodate all of the comments from a handful of users, not knowing if and how representative they might be of the community?
  • Related to above: sometimes disagreement or less favourable feedback from other contributors will seem unnecessarily harsh. And while I’m aware that the communication style of users is not unrelated to the low levels of diversity in open source communities, I’ve found it helpful to keep in mind 1) it’s awkward for most people to voice criticism; and 2) this is a global project with English as the lingua franca but not the first language for most. I’m also assuming other contributors are also assuming good faith
  • Documentation pages can be weirdly engrossing and I need more scheduled breaks. But! I’m really digging how much I’ve learned so far and how much my understanding of linked/structured data has increased since starting my internship


Helen Halbert | Helen Halbert Blog | 2014-07-18 04:55:20

So I talk to inanimate objects sometimes. You know, say, shopping malls. Or hotel rooms, when I check out. Or rocks or trees that have been exceptionally helpful while I've climbed or descended a hill. And Leonard, if he is nearby, usually performs the voice of the object. Sometimes other people do not do this. Feel free!

Sumana Harihareswara | Cogito, Ergo Sumana | 2014-07-18 01:14:02

Engineering a Ruby gem for beginners. 

Dana-Maria Nita | Life @ OPW Medium | 2014-07-17 20:06:05

CivicActions is seeking qualified Senior Engineers, Tech Leads or Drupal Architects. Technical leads work within our agile/scrum process as a lead and technical resource, as well as planning and developing the technical architecture for the site. The technical lead is also highly engaged with the client, helping them understand, refine and prioritize options.

We are a fully-distributed company and all our team members have the flexibility to work from anywhere in the world.


  • Co-creation of project plans and pre-sales activities (estimates, sprint plans, scope, approach, schedule, risks).
  • Modeling and cultivating high quality communication within the team.
  • Identifying and removing obstacles blocking team-members progress on a project.
  • Assist team members in solving outstanding technical issues as they arise.
  • Responsiveness to Project Manager and client needs and requests.
  • Participation in weekly engineering department and project specific meetings.
  • Ability to provide clear descriptions and accurate estimates of the technical deliverables.


  • Passion for using technology to make a positive change in our world.
  • Commitment to personal and professional development.
  • Demonstrated technical and analytic proficiency, communication and organization skills.
  • Demonstrated ability to lead web development projects in a consulting or professional services environment, working with cross-functional teams.
  • Experience working on projects using an agile framework (e.g. Scrum, XP, Kanban).
  • Superior client facing skills - ability to understand business goals and communicate technical options in non-technical terms, as well as anticipate and surface challenges and opportunities.
  • Project team leadership - lead detailed engineering discussions, monitor and review tickets, team deliverables and the overall project process for quality, efficiency and standards and provide appropriate feedback and support.
  • Track record of contributions to the Drupal community, FOSS or other open community projects.
  • Experience working both independently and in collaboration with remote, geographically diverse teams - must be very comfortable working via e-mail chat, IRC, audio/video conference etc.
  • Available full time
  • US Government security clearance is a plus.

The technical skill sets we are looking for are:

  • Superior knowledge of Drupal site building, module and theme development. While we will consider demonstrable transferrable skills on other web based frameworks, Drupal expertise is strongly preferred. 
  • Skilled at working throughout the LAMP stack: PHP/MySQL development, command line and version control skills.
  • Experience with CRM systems, especially CiviCRM or CRMs in a non-profit context is a plus.
  • Complementary/specialized skills such as UX, design, QA, accessibility, performance, system administration, security are also a plus.

Why Choose CivicActions?

We believe the way we do business is as important as the product we create. We communicate openly, we operate consciously and acknowledge and correct our failures when they happen. We have adapted the Agile software development methodology into our business operations and have created a robust and agile infrastructure to grow the company.

We're a positive, open-minded team that values diversity, flexibility, cultivating a healthy work/life balance, and supporting one another. At CivicActions, you get more than just a job - you join a team of people who are committed to (y)our success. We're looking for people who think this sounds like a dream job.

To Apply

If you are interested please send us your resume and portfolio. Let us know what you do now and what you would like to do in the near future. We're excited to hear from you.

Women, people of color, and physically-challenged people are strongly encouraged to apply.

Women in Drupal | Women in Drupal (Formerly DrupalChix) | 2014-07-17 16:16:11

An important part of working as a developer (and in many other careers) is being able to talk about your work in front of an audience. It provides visibility for you and your organisation, and can open up opportunities for future work and collaboration. If you belong to underrepresented groups in tech, stepping up to the mic can help people like you to see a career for themselves, and also change the attitudes of others. I have now given two talks on RDFIO, and plan on more, learning as I go.

My first experience of public speaking on this project came within the first week of the internship. I had traveled to Montréal to attend SMWCon, and my mentor Joel and I had proposed a short talk on RDFIO as part of the schedule. We worked together on it in Ottowa on the Tuesday, and tried out a very rough cut on Joel’s colleagues at Agriculture and Agri-Food Canada. When the time came on Friday morning, I was pretty nervous, and Joel took over the introduction. However, I soon recovered and managed to deliver an overview of the project and what I was hoping to accomplish. However, I knew I could do better, so started thinking about how to improve for next time.

In preparation for my next talk, I had an online meeting with Jen Myers, an experienced conference speaker and instructor at Dev Bootcamp and Girl Develop It. Jen runs a weekly office hours for women who are beginner tech speakers. We had a very useful chat on Skype covering talk structure and performance tips, leaving me feeling a lot more confident about preparing for my next speaker slot.

When giving a talk, I prefer to improvise rather than stick to a strict script. However, that doesn’t mean that preparation isn’t required – freewheeling takes practice. One of the best tips Jen gave me was to develop a mental map of the path of the talk, so that if you meander off at any point (which is fine), you can find your way back to where you were going. I spent a while running over the content, finding where I was liable to stray that bit too far and where there were dead ends.

My presentation was at the Open Knowledge meetup, which this month was held at the Scottish Parliament in Edinburgh. We went through airport-style scanners, and then I chatted to some of the other people attending whilst I waited. After a couple of talks and a break, it was my turn, and I cued up my slides on the touch-sensitive projector screen (which was fun to use!). This time I felt far more confident and assured, and ran through the content with a clear idea of where I was going and little hesitation. It just goes to show that the right preparation can go a long way, and most things get easier with practice.

There’s no video this time, but I did get to pose with a parliamentary mace:


Ali King | Data is King FOSS Outreach Program for Women | 2014-07-17 14:54:53

I am finally back to my college and done(really?) with shifting. Anyways, I made some progress on pipes and hope to finish it by this weekend and start on faults too.

Aarti Dwivedi | Condensation | 2014-07-17 14:03:02

We have created dev instance for shumgrepper . Till now, I have implemented the following functionalities, i am writing a small summary of it below:



  • /    –  home page, front page, shows the user about what the application is and what can be done with it
  • /md5/<md5>     –  Returns all the files in all the packages matching this md5sum

e.g.   /md5/f4aafb270c2f983f35b365aad5fe8870

  • /sha1/<sha1>    -  Returns all the files in all the packages matching this sha1sum

e.g.   /sha1/f83618056ae5601b74a75db03739dd3ec24292f5

  • /sha256/<sha256> – Returns all the files in all the packages matching this sha256sum

e.g.  /sha256/e77b543aefd1595f159e541041a403c48a240913bc65ca5c4267df096f775eb6

  • /tar_sum/<tar_sum> – Returns all the files in all the packages matching this tar_sum

e.g. /tar_sum/4a31a53097eaf029df45dd36ab622a57

  • /packages – List all the packages
  • /package/<package> – Gives overview of the package, different versions of the package

e.g.  /package/fotoxx

  • /package/<package>/filenames – List all the filenames present in a package

e.g. /package/fotoxx/filenames

  • /tar_file/<tar_file>/filenames – List all the filenames present in a specific package version

e.g. /tar_file/fotoxx-14.05.1.tar.gz/filenames

  • /filename/<filename> – Returns all the file details matching that filename

e.g.  /filename/knot-1.5.0%2Fconfig.guess

  • /compare/common – Compare two or more tar_files, matches their sha256sum values  and returns common filenames.

e.g. /compare/common?tar_file=fedora-release-21.tar.bz2&tar_file=fedora-release-22.tar.bz2

  • /common/difference – Compare two or more tar_files, matches their sha256sum values and returns different filenames i.e. filenames that are not common to all the tar_files

e.g. /compare/difference?tar_file=fedora-release-21.tar.bz2&tar_file=fedora-release-22.tar.bz2

  • /history/<package> – Return history of the package with evolution across all its releases. It shows the files that have changed or the files that have remained same   as compared to its previous version. It has not been implemented yet.





It returns output in json format and request can be made by http get, curl or wget.

  • /api – Contains documentation for API
  • /api/sha1/<sha1sum> – Returns all the files in all the packages matching this sha1sum.

e.g. /api/sha1/e0ec2c54e7a4fabb2f7e8c78d711efc0ed5f4f43

  • /api/sha256/<sha256sum> – Returns all the files in all the packages matching this sha256sum


  • /api/md5/<md5sum> – Returns all the files in all the packages matching this md5sum

e.g.  /api/md5/bf6f8d7c7022b27534011c4ad8334e2a

  • /api/tar_sum/<tar_sum> – Returns all the files in all the packages matching this tar_sum

e.g. /api/tar_sum/4a31a53097eaf029df45dd36ab622a57

  • /api/package/<package> – Returns all the package details with all the versions available for this package.

e.g.  /api/package/fotoxx

  • /api/package/<package>/filenames – Returns all the filenames present in this package.

e.g.  /api/package/felix-gogo-command/filenames

  • /api/tar_file/<tar_file>/filenames – Returns all the filenames present in a specific version of the package i.e. the tar_file given by user.

e.g.    /api/tar_file/fedora-release-22.tar.bz2/filenames

  • /api/compare/package/common – Compare two or more packages, match their sha256sum  and returns the filenames common to all the packages.

e.g.   /api/compare/package/common \
package==ark \

  • /api/compare/package/difference – Compare two or more packages, match their sha256sum values and returns filenames which are not common to all the packages.

e.g.   /api/compare/package/difference \
package==kamera \

  • /api/compare/tar_file/common – If you want to compare two versions of same package, then comparing them by package name won’t work.  It will compare two or more tar_files, match their sha256sum and returns filenames common to all the tar_files.

e.g.    /api/compare/tar_file/common \
tar_file==fedora-release-21.tar.bz2 \

  • /api/compare/tar_file/difference – Compare two or more tar_files and return filenames uncommon to all the tar_files.

e.g.    /api/compare/tar_file/difference \
tar_file==fedora-release-21.tar.bz2 \

Charul | OPW'2013 | 2014-07-16 19:13:50

Time seems to be moving faster and faster. I can hardly believe it's time for another two-week report! I spent a lot of time chasing bugs but I'm making baby steps forward and learning a lot about how Rails and JavaScript work in live code.

Week 7: June 29 - July 5

Week 8: July 6 - July 13

  • And the code I've written was deemed not yet ready for prime time - it only works halfway at this point. I will resubmit after I get the code up to production standard.
  • After some useful feedback on the importance of submitting a pull request with only one commit (and some pointers to how-to's on rebasing to make that happen) and the helpfulness of of including *lots* of screenshots showing the software in action, I closed the pull request.
  • One (!!) of the aspects of this project that I have found especially challenging is finding my way through the blending of JavaScript and Rails code. I spent an inordinate amount of time this week chasing down what turned out to be a Javascript syntax error that was manifesting as a Rails error.
    • I've installed the "better_errors" gem to try to assist with errors like this - it will presumably be triggered if it is a true Rails error
    • I've also learned that if I make changes to the JavaScript portions of the code, I have to restart the server in order to see any changes. Most changes to the Ruby code automagically propagates without restarting the server.
  • Screenshots of my progress so far are on GitHub. Searching by year (2008 and 2009) will bring up the Burning Man map layers for those years and recenter the map to that area. Searching by any other year brings up with message that this is a work in progress. (It no longer crashes the map and brings up the dreaded Rails error screen, so there's some progress there!)

Jaime Lyn Schatz | Developer jaime = new Developer() | 2014-07-16 11:38:33

Some time ago I achieved the first and most important goal of my internship: all tests are now passing for Python 3 and the py33-gate is now voting. Since then, there were no problems with Python 3 for Marconi and hopefully it will remain so. The only missing dependency is python-memcached, that is used for caching and thus not totally blocking usage.

There were 7 commits merged in total:

with the last commit to make gate voting.

The overall impression from the work done: Python 3 is even more explicit, then Python 2.

The remaining time till August 18, I plan to spend doing several different activities:

  • propose changes to other OpenStack projects to help them with Python 3 support (mostly I plan to target Oslo and Keystone).
  • do something unrelated to Python 3 for OpenStack/Marconi.
  • help other interns that are working on new storage and transport drivers for Marconi to make their changes Python 3 compatible.

Nataliia Uvarova | AAzza's log | 2014-07-16 09:20:00

So this happened.

I like to think that in another, better, universe, it went like this:

When we launched Google+ over three years ago, we had a lot of restrictions on what name you could use on your profile. This helped create a community made up of people who matched our expectations about what a “real” person was, but excluded many other real people, with real identities and real names that we didn’t understand.

We apologise unreservedly to those people, who through our actions were marginalised, denied access to services, and whose identities we treated as lesser. We especially apologise to those who were already marginalised, discriminated against, or unsafe, such as queer youth or victims of domestic violence, whose already difficult situations were worsened through our actions. We also apologise specifically to those whose accounts were banned, not only for refusing them access to our services, but for the poor treatment they received from our staff when they sought support.

Everyone is entitled to their own identity, to use the name that they are given or choose to use, without being told that their name is unacceptable. Everyone is entitled to safety online. Everyone is entitled to be themselves, without fear, and without having to contort themselves to meet arbitrary standards.

As of today, all name restrictions on Google+ have been lifted, and you may use your own name, whatever it is, or a chosen nickname or pseudonym to identify yourself on our service. We believe that this is the only just and right thing to do, and that it can only strengthen our community.

As a company, and as individuals within Google, we have done a lot of hard thinking and had a lot of difficult discussions. We realise that we are still learning, and while we appreciate feedback and suggestions in this regard, we have also undertaken to educate ourselves. We are partnering with LGBTQ groups, sexual abuse survivor groups, immigrant groups, and others to provide workshops to our staff to help them better understand the needs of all our users.

We also wish to let you know that we have ensured that no copies of identification documents (such as drivers’ licenses and passports), which were required of users whose names we did not approve, have been kept on our servers. The deletion of these materials has been done in accordance with the highest standards.

If you have any questions about these changes, you may contact our support/PR team at the following address (you do not require a Google account to do so). If you are unhappy, further support can be found through our Google User Ombuds, who advocates on behalf of our users and can assist in resolving any problems.

I’m glad they made the policy change. But I sure would have liked to see some recognition of the harm done, and a clearer demonstration that they don’t think that “real people” and “people who were excluded” are non-intersecting sets.

Skud | Infotropism | 2014-07-16 00:40:45

Finally it came to that point where there is something ready enough to start integrating into GTG. And so, that’s what I’ve been doing in the past week.

I’ve forked gtg and added the calendar as a plugin. In order to use it, it is necessary to activate it using the plugins menu (Edit/Plugins, then check Calendar View). After that, a button will appear on the toolbar, and all that is needed is clicking on it!

Screen Shot 2014-07-11 at 11.49.33 PM

A window will pop-up, displaying all the tasks with start AND due dates. Only these will be displayed in the calendar view, for obvious reasons. However, both open and closed tasks appear in this view.

Screen Shot 2014-07-11 at 11.52.54 PM

From the calendar view window you can drag and drop tasks to change its start/due dates or to create a new task, you can double-click in a task to edit it, you can also delete tasks, etc. All the changes will be reflected in the main window immediately. And all this interaction is done using the GTG interface you are used to (if you’re already a GTG user).


I’m still working on some small issues, but soon you’ll be able to check it out and start using the plugin inside GTG, in case you’re interested! =]

Sara Guimaraes Ribeiro | Sara Ribeiro OPW | 2014-07-15 20:32:38

We are very excited to announce that Susan Buck will be presenting the Friday keynote for NERDSummit!

Susan Buck is a programmer, designer, and educator with over 15 years of web development experience, starting with her education in digital media at NYU's Interactive Telecommunication Program and UNC Asheville's New Media program.

Most recently, Susan co-founded the Women's Coding Collective, an educational initiative aimed at helping more women excel in programming and web development. While working on the WCC, Susan also teaches Dynamic Web Applications with the Harvard Extension School and Harvard Summer School.

Announcement here:

The NERDSummit, this September 12-14 at UMASS/Amherst, is right around the corner!

Please start spreading the word! Forward this to anyone who might be interested!

We still have plenty of great news to come and will be sending more important updates frequently over the next several weeks.

Women in Drupal | Women in Drupal (Formerly DrupalChix) | 2014-07-15 16:34:13

Not yet done with pipes. Still debugging. I would be travelling back to college on 16th so work would be a little off-limit.

Aarti Dwivedi | Condensation | 2014-07-15 14:30:11

FreeBSD 9.3-RELEASE Announcement

The FreeBSD Release Engineering Team is pleased to announce the availability of FreeBSD 9.3-RELEASE. This is the fourth release of the stable/9 branch, which improves on the stability of FreeBSD 9.2-RELEASE and introduces some new features.

Some of the highlights:
  • The zfs(8) filesystem has been updated to support the bookmarks feature.
  • The uname(1) utility has been updated to include the -U and -K flags, which print the __FreeBSD_version for the running userland and kernel, respectively.
  • The fetch(3) library has been updated to support SNI (Server Name Identification), allowing to use virtual hosts on HTTPS.
  • Several updates to gcc(1) have been imported from Google.
  • The hastctl(8) utility has been updated to output the current queue sizes.
  • The protect(1) command has been added, which allows exempting processes from being killed when swap is exhausted.
  • The etcupdate(8) utility, a tool for managing updates to files in /etc, has been merged from head/.
  • A new shared library directory, /usr/lib/private, has been added for internal-use shared libraries.
  • OpenPAM has been updated to Nummularia (20130907).
  • A new flag, "onifconsole" has been added to /etc/ttys. This allows the system to provide a login prompt via serial console if the device is an active kernel console, otherwise it is equivalent to off.
  • Sendmail has been updated to version 8.14.9.
  • BIND has been updated to version 9.9.5.
  • The xz(1) utility has been updated to a post-5.0.5 snapshot.
  • OpenSSH has been updated to version 6.6p1.
  • OpenSSL has been updated to version 0.9.8za.
For a complete list of new features and known problems, please see the online release notes and errata list, available at:
For more information about FreeBSD release engineering activities, please see:


FreeBSD 9.3-RELEASE is now available for the amd64, i386, ia64, powerpc, powerpc64, and sparc64 architectures.

FreeBSD 9.3-RELEASE can be installed from bootable ISO images or over the network. Some architectures also support installing from a USB memory stick. The required files can be downloaded via FTP as described in the section below. While some of the smaller FTP mirrors may not carry all architectures, they will all generally contain the more common ones such as amd64 and i386.

SHA256 and MD5 hashes for the release ISO and memory stick images are included at the bottom of this message.  A PGP-signed version of this announcement is available at:
Please refer to the official announcement email for the full details regarding FreeBSD 9.3-RELEASE.


Many companies donated equipment, network access, or man-hours to support the release engineering activities for FreeBSD 9.3 including The FreeBSD Foundation, Yahoo!, NetApp, Internet Systems Consortium, ByteMark Hosting, Sentex Communications, New York Internet, Juniper Networks, NLNet Labs, iXsystems, and Yandex.

The release engineering team for 9.3-RELEASE includes:
Glen Barber <> Release Engineering Lead, 9.3-RELEASE Release Engineer
Konstantin Belousov <> Release Engineering
Joel Dahl <> Release Engineering
Baptiste Daroussin <> Package Building
Bryan Drewery <> Package Building
Marc Fonvieille <> Release Engineering, Documentation
Steven Kreuzer <> Release Engineering
Xin Li <> Release Engineering, Security Officer
Josh Paetzel <> Release Engineering
Colin Percival <> Security Officer Emeritus
Craig Rodrigues <> Release Engineering
Hiroki Sato <> Release Engineering, Documentation
Gleb Smirnoff <> Release Engineering
Ken Smith <> Release Engineering
Dag-Erling Smøgrav <> Security Officer
Marius Strobl <> Release Engineering
Robert Watson <> Release Engineering, Security


FreeBSD is a registered trademark of The FreeBSD Foundation.

Love FreeBSD? Support this and future releases with a donation to The FreeBSD Foundation!

Dru Lavigne | FreeBSD Foundation | 2014-07-15 09:37:12

The spam-comedy group blog I lead, Spam As Folk Art, does still post every few months. Today, I posted there a tribute to the ten-year anniversary of the Spamusement! webcomic, with links to some favorite strips.

Sumana Harihareswara | Cogito, Ergo Sumana | 2014-07-15 04:08:31

So, I am about the zillionth person to think about how we use history in popular culture. For instance, my sister-in-law Rachel Richardson (who just finished her Ph.D. and got married - congrats on an epic 2014, Rachel!) is a historian who works for a publisher and thus a much bigger expert than I on this stuff.

The thing that just struck me is the trend of silly, earthy, exuberant, sentimental, loving, infernokrusher and literally fantastic retellings of our history, especially retellings that give us wish-fulfillment. I never saw or read Abraham Lincoln, Vampire Hunter, but it seems to be all of a piece with Drunk History and "Hark! A Vagrant".

Like so many people in my demographic cohort, I cherish sincere earnestness, emotional vulnerability, and intense enthusiasm. Drunk History uses alcohol to bring out these characteristics in its narrators, and I love it.

In a recent Drunk History episode, the cops dragging hard-done-by civil rights pioneer Claudette Colvin off the bus say to her: "It's 1955, and we don't have to do [bleep]." (She frustratedly responds, [bleep] [bleep] 1955.") Later, narrator Amber Ruffin drunkenly mispronounces "Birmingham" as "Burning Man", causing Colvin to say "You know what, [bleep] this, I'm moving to Burning Man." The dramatization obediently surrounds Colvin, standing on a sidewalk in Montgomery, Alabama, with dirt-smeared dancers bopping to techno beats. This is sublime. Claudette Colvin had a really hard time! I want her to have fun! I want 1950s-era Colvin to be able to say "screw it, I'm going to Burning Man" and leave behind racist oppression! This wish does not make sense and we know it's nonsense; it is so hyperbolically impossible that the image works as wish fulfillment without implying that anyone could have cured racism in this way. If you watch all the way to the credits, you see that Colvin laughs as one of the dancers drapes a garland around her neck. It's like the future coming back in time to bless her.

Kate Beaton, like the Drunk History narrators, has historical characters speak their subtext (examples: Ida B. Wells, various explorers, Perry and Henson, Juarez and Maximilian, Kosciuszko, World War I generals). Many of these narratives -- Beaton's comics and Drunk History both -- share this bathetic anachronistic conversational style, and the figures we view today as heroes tend to see the dramatic irony that the villains can't. For a longer, more explicitly wishful treatment of this, see Ada Palmer's wish that Machiavelli could participate in an all-stars philosophical salon. (It occurs to me that this wish, or the wish that Colvin could escape to Burning Man, is like the wish that God had Raptured someone into heaven.)

Leonard pointed out to me that, while we have always applied our values to the people and situations of the past, this trope gives us a conscious way to do it. It also occurs to me: history is, in the popular imagination, set in stone. Comedy depends on surprises. Comedy founded in historical fact can do meta-surprises; a new frontier!

Sumana Harihareswara | Cogito, Ergo Sumana | 2014-07-15 03:47:59

I can't tell if this is a real message or some sort of spam trolling...

Hello Ms.Terri

My name is $NAME,

i just start to learn linux and i visit ur website

could please help me to learn and improve myself about sysadmin

Thank you


What's up at that url is a modern, fairly recent version of my resume, one that includes no mention whatsoever of my sordid sysadmin past. I guess I mention Linux in there, but that's about it.

Also, if you read my resume and still address me as Ms. instead of Dr., you get an automatic -10 points. Just saying.

I'm probably just jetlagged and tired and cranky, but I don't think I'll bother answering that one. What would I have to say, anyhow? "Run now, sysadminning is rapidly becoming the unpleasant janitorial work of the tech world?"

comment count unavailable comments

Terri Oda | terriko | 2014-07-14 23:08:07

Uploading file

This week, I mainly completed the implementation of Media part, including uploading file, downloading file and making directory. And I was starting to code for Chat. So for the rest of the work are Chart part we will get our first version. (even there is login part as well, but quite small part)

According to Dan’s uploading tutorial, I finally learned how to upload a file. I used to do file uploading by coding for both client and server by using Base64, but I’ve never coded for a just client, so it’s a little tricky for me. But in fact, I just need to put the file content in payload of HTTP, and boundry it with something.

In order to pick a file to upload, I used a OpenFileDialog to explore the files of Android client. When a file is clicked in OpenFileDialog, the CouchDB.upload is executed to upload it to current directory. And the same dialog is used for choosing a direcotry for the file to download. When a file in the Media fragment, the dialog is shown for choosing a directory, and when “select this directory” is clicked, the downloading process is started.

As for making directory, it’s pretty easy. But it’s a little tricky when I create a file in root direcotry, because instead of using null or empty string for parameter dir, no parameter dir should be passed to server.

The images shows the dialog:

1> Choose a directory to download file:


2> Choose a file to upload:


3> Make a new direcotry:



Peihan Li | peihanlee | 2014-07-14 21:40:21

I am almost done correcting my implementation of pipes. I would be posting some screenshots soon. :)

Aarti Dwivedi | Condensation | 2014-07-14 15:54:06

Warning for mention of sexual assault, and extensive discussion of harassment.

In May, my GF co-blogger and Ada Initiative co-founder Valerie Aurora posted Handy tips for my Internet harassers on her blog. They included:

Threatening my job: Unfortunately, I am my own boss. Try emailing one of the Ada Initiative sponsors? Although they might take that as a sign that the Ada Initiative is doing important work and make another donation. Hmmmm. Maybe create a Yelp page for my file systems consulting business and leave bad reviews? Endorse me for CSS on LinkedIn?

Rape and death threats: Run spell check! There’s nothing more jarring than reading an otherwise creative and well-written death threat and then seeing “decapetate.” Also, chain-saws are so last year. Remember, Gmail won’t display images by default. P.S. I happen to know one of the members of Nirvana and your bright idea has already been done.

Why did she do such a thing, and what resulted? Geek Feminism obtained an exclusive tell-all interview.

Q. Have you received any harassment as a result of this post? Was its quality indeed improved?

Sadly, no. Part of the problem is that my friends loved it — I’ve never had so much positive feedback on a post — but they didn’t want to share it with other people online. I like to joke that it’s the ultimate in dark social since people only talk about it offline using vibrations in the air called “sound.” I think that my friends are more afraid of me being harassed than I am.

Q. The post is pretty out there! Why did you put this post up? What point are you trying to make?

“Self-doxxing” myself (thanks, Kate Losse for the term) was inspired in part by how incompetent and bad the online harassment that I’ve received has been. Most people doing online harassment are just trying to impress other online harassers, at the same time that what they are doing is, frankly, totally unimpressive. The reality is, anyone can spend $25 and get another person’s home address and a bunch of other personal information, but we act like it is some kind of amazing act of computer hacking. By showing how bad people are at online harassing, I’m hoping to remove some of the motivation for people to do the harassment, or at least make them spend more time on it before they get the reward of “so cool, bro!”

I was also inspired by Krystal Ball , who ran for U.S. congress in 2010. When her political opponents tried to slut-shame her into quitting her political campaign over “sexy photos” of herself that they published, she turned around and shamed THEM — both her opponent and the media outlets that published the photos. It was glorious, and it hit home for me: if we let the existence of sexy photo of a woman prevent her from serving in political office, then I and every woman born after 1990 were out of luck. Women’s representation in political office would go down.

Q. Should other people do this?

For most people, no, I wouldn’t recommend it. It was okay for me for a lot of reasons: I already went public about sexual abuse in my family, I’m white, I’m my own boss, I don’t have children or a partner, I have skills that are in high demand, I have lots of friends and a huge support network — my emotional, physical, and economic safety is pretty good. Most women have a lot more to lose.

However, I think it is a very good exercise to think about worst cases like this: what if the thing I am most afraid of other people finding out got published all over the Internet? Because a lot of times, that thing actually doesn’t reflect on you – the shame is on the person who did the original act or publicized a private matter. It can be healing to plan what you might do, even if you don’t actually go public with it yourself.

Q. Why won’t you accept my endorsement for CSS on LinkedIn? I taught you everything you know, dammit.

I’d hate to embarrass you by letting anyone else know that you are the source of my mangled <div>’s! [Ed: good point, well made.]

Q. When are you monetising this? How can investors contact you? How big is your Series A and at what valuation?

Actually, that is a great idea. Instead of vetting a political candidate and saying yes or no, you investigate them and then publish everything that might be a problem in a funny blog post.

Or better yet, here is my favorite idea: If I ever run for political office, I’m going to scan in all my embarrassing naked photos, then watermark them with the email addresses of various journalists. Then email them anonymously to said journalists. Then when the photos get published (it’s “news,” someone else would have, etc.), I can expose the specific person who decided that slut-shaming a candidate was “news” and put the shame where it belongs. Sexism-shaming as a service, SSaaS. I’m accepting funding now.

Geek Feminism | Geek Feminism Blog | 2014-07-14 15:49:59

A friend asked for help in thinking about job titles and job descriptions, and said she was specifically interested in how to think about them and whether they matter at all. I gave her some thoughts, from my experience, and thought I might share them here.

I think job titles *do* matter, in a few different dimensions. Here are the three major ones.

  1. giving correct expectations about you (your skills, your expertise, your influence within your org, your seniority, your independence as a decision-maker) to people outside your company/org, who use that metadata as a hint to treat you appropriately (invite you to give talks, recruit you, ask you suitable questions when they meet you, introduce you to other resources, ask for introductions, offer to sell things to your org or buy things from your org or otherwise partner with your org, praise or criticize your org)
    (A subset of these goals: demonstrating for future recruiters/employers a particular career progression on your résumé.)

  2. giving correct expectations about you to people inside your org who don't already know you, e.g., new hires and Human Resources, so they treat you appropriately (assume you know/don't know certain skills and domains, take your advice seriously, invite you to the right brownbags and hackdays, put you on certain career ladders, ask whether you'd be interested in taking on a new project)

  3. hint to yourself about what you should focus on or what you/your org values (e.g., "senior" implies mentorship/stewardship, "reliability" or "performance" or "happiness" tells you what goal to focus on, "researcher" or "manager" or "analyst" or "nurturer" tells you what methods/skillsets you should be employing) -- this should be Part Of A Complete Breakfast, I mean, Job Description

Some people find that job titles do not matter to them. I posit that those people believe, or act as though they believe, that it is unimportant to provide additional easily-graspable metadata about their own work-selves to strangers or colleagues (I could imagine lots of reasons that this would feel unimportant) -- or that they already know what they need to be working on and do not need additional guidance-reminders.

In the current US software industry, sometimes you run across deliberately informal titles - God/Guru/Ninja/Wizard/Grunt/Thing-doer/Goddess/Mistress/etc. I don't quite feel up to the task of laying out the particular signals one THINKS one is sending, and the signals one actually IS sending, with those job titles. This feels like Kate Losse territory. Here, as with so many other human relationships, you might run into the very natural desire to make a joke out of it to elide all the tension and status play. And I understand that. When I got married, Leonard and I had a HARD TIME getting used to the words "husband" and "wife"! To ease into them, we mispronounced them or banged them together with other words, so, e.g., he was a "funband" and I was a "funwife". I feel like new formal job titles can be like that too, uncomfortable, like "one size fits all" clothes.

Sometimes silly job titles signal to others, "we value whimsy/insider cliquishness more than we value clear communication about tasks and roles with people outside our internal culture."

So if someone dismissively says that job titles don't matter, I suggest you tack on a silent "to them right now" when you interpret their statement.

Sumana Harihareswara | Cogito, Ergo Sumana | 2014-07-14 15:24:48

I was re-pinkifying my hair a few weeks ago and realized that there isn’t a very good guide out there for how to use the type of hair colour I prefer, so I’m writing myself some instructions and sharing them with the world for posterity. This thread on the Long Hair Community helped me figure a bunch of this stuff out, as Goldwell does not publicly document their products for amateur hair scientists like myself :)

What you need

  • Bowls you don’t care about staining, or which are stain resistant (I used Corelleware ones and they didn’t stain; your mileage may vary)
  • Cling wrap (get good quality stuff, the kind that sticks well to itself)
  • 2-3 towels you don’t care about staining/bleaching
  • The following Goldwell Elumen products, which you can get on Amazon or eBay:
    • Prepare
    • Colour(s) of your choice – there’s a list here as they have weird codenames
    • Lock
    • Clean (this removes the colour from any skin you get it on)
  • You may also want the Return product if you’re switching colours – it will lift some of the Elumen out of your hair without bleaching. I’ve not used it myself, and have heard mixed reviews of its effectiveness
  • Optional: whatever bleach stuff you need; see below for links to better stuff others have written about bleaching

The bleaching process

I’m not going to write up much about bleaching, because it’s not my area of expertise. Seriously, last time I bleached I just followed the instructions in a Splat colour kit. The bleach worked fine, but the colour didn’t hold very well… so read on for better colour tips.

Also, importantly – you can use Elumen on un-bleached hair, and it’ll give you either a cool tint / sheen of colour if your hair’s dark, or various different intensities of colour if your hair is lighter. And it’ll make your hair feel supah soft.

My friend Courtney has a cool guide to brightly coloured hair over on her blog which includes extensive bleaching instructions, but the main thing for me in the past has been to not over-do it. The Elumen pinks and oranges, in particular, are so intense that it’s ok if you have some brassiness left in your hair. I haven’t done blues or greens in a while but I suspect you might need to bleach more for those… but regardless, it’ll look fine. Don’t stress, and don’t burn your scalp.

The key to my lazy process is to set yourself up so that your hair can grow out a bit, fade a bit, and you can re-colour again without bleaching and make it look good even if you have roots showing – it looks like you did frosted tips on purpose rather than that you’re lazy and hate bleaching :D

The colour process

Elumen is a 3-step process. There’s a prep step (“Prepare), the colour itself, and then a fixative (“Lock”). Sounds like high school chemistry, right? The colouring goes like this:

  • Wash hair if you’re not coming from the bleaching process. Don’t use conditioner.
  • Wearing gloves, apply Prepare to dry-ish hair. Smush it around until your hair feels slick; it doesn’t need to be soaked.
  • While you’re letting it sit, put out the colour(s) you’re using in some bowls. For short hair, I used up about 4-5 tablespoons worth (60-75mL).
  • Towel dry. The Prepare stuff doesn’t seem to stain, but still use a towel you don’t care about.
  • Using a cheap hairbrush, fancy dyeing brush, or just your gloved hands, apply colour to your head. Be careful not to get too much on your skin or fling it around the room, this stuff does stain. Also don’t get it in your eyes.
    • If you want multiple colours, you can separate them out with bits of tinfoil; if you don’t do this they will kinda blend together, which is a cool effect too! I like blending, because I’m lazy.
  • Comedy time now: once you’ve got a fair amount of colour on your hair, you want to apply heat to speed up and intensify the effect of the colour. Here’s my lazy technique:
    • Wrap your head in clingwrap, coiling/pinning it up first if you’ve got long hair
    • Blast your head with a hairdryer a bit
    • Wrap your toasty clingwrapped head in a towel
  • Chill out and do something low key for about half an hour to an hour. Write a blog post, perhaps. Take care not to drip colour out from under your tenuous clingwrap/towel arrangement.
  • Rinse time! If you’ve got a sink you can do this in, go for that, otherwise just hop in the shower. The colour will stain grout, so be careful if your shower features that.
  • Apply the Lock to towel-dried hair and let it sit for a while, then rinse again. You’ll get some colour bleed for the next few times you wash your hair, but it’ll stop and your hair will be super bright for many weeks.
  • Use the “Clean” product to get the colour off your skin. It’ll be on the top of your ears, I promise.

And that’s it! Enjoy how amazing you look, and how you brighten up the day of everyone around you!

Leigh Honeywell | hypatia dot ca | 2014-07-13 19:32:45

Stacey asked me for a refresher on Test Driven Learning for Hacker School, so here we go.

Test Driven Learning is a software engineer’s articulation of Wiggin & McTighe’s Understanding by Design framework after being strongly influenced by Ruth Streveler’s ”Curriculum, Assessment, and Pedagogy” course at Purdue.

Many software engineers are familiar with the process of Test Driven Development (TDD).

  1. Decide on the goal.
  2. Write the test (“how will you know if it’s working, exactly?”)
  3. Make the code pass the test.
  4. Celebrate.


Test Driven Learning (TDL) simply says “it’s the same thing… for your brainnnnn!”

  1. Decide on the goal (“learning objective”).
  2. Design the assessment (“how will you know if you’ve learned it, exactly?”)
  3. Go through the experiences/etc. you need to pass your assessment.
  4. Celebrate.


That’s it. Really.

Step 2 is the part most people flub. With software tests, you have a compiler/interpreter forcing you to be precise. With learning assessments, you don’t — but you need exactly the same level of precision and external execution. If you asked a group of external people (with appropriate expertise) whether you’d passed the assessment you set for yourself, there should be no disagreement. If there’s disagreement, your assessment needs a redesign.

A good assessment is a goal that helps you stretch and reach it; sometimes it encourages you to do more. But sometimes it also gives you permission to stop doing stuff – you’ve written the code, you’ve delivered the talk, they met the criteria you set —  and now you’re done. You can absolutely set a new goal up and keep on learning. However, you’re no longer allowed to say you Haven’t Learned X, because you’ve just proven that you have.

Here are some rough-draft quality TDL assessments you might start with, and a bit of how you might improve them.

I will learn Python. (What does that even mean? How will you know you’ve learned it?) I will complete and pass any 50 CodingBat exercises in Python. (But I could do that by solving 50 really easy problems.) Only 10 of those 50 problems can be warm-ups, and at least 20 of them must be Medium difficulty or greater. (Does it matter if you get help with the problems?) Nope, I can get as much help as I want from anyone, as long as I could explain the final solution to another programmer.

I will get better at testing. (What do you mean by “testing”?) I write a lot of code, but I’ve never written tests for any of it. I hear the nose framework is nice. (What do you mean by “better”?) Well, I’ve never written a test at all, so even going from 0 to 1 would be an improvement. I could use nose to write tests for 3 different pieces of working code I’ve already written. (Do these need to be big or exhaustive tests?) Nope, I’m just trying to learn what writing tests is like, not get full test coverage on my code… at least not yet. Even if I write a 3-line test that checks out one minor function, it counts as one of the 3 tests. (What does it mean for a test to be “done”?) When someone else can check out and successfully run my code and my test suite on their computer without needing to modify either bit of code, it’s done.

I will understand how databases work. (By “understand,” do you mean the mathematical theory behind their design? Or how to actually implement and use one?) Oh geez, the latter. I don’t care about the math so long as I know how to interface with a database. Any sort of database. (So you need to make a demo.) Yeah, but that’s not enough; I can blindly type in code from a tutorial, but that doesn’t mean I’d be able to field questions on it. (What could you do about that?) I will give a presentation to fellow Hacker Schoolers demonstrating a small database interaction in code I have written. That’s an easy binary to check; either I’ve given the presentation or I haven’t.

Thoughts, questions, ideas? Got your own example TDL assessment (at any stage of revision), or ways to improve the ones above? Holler in the comments.

Mel Chua | Mel Chua women in free software | 2014-07-13 06:16:54

Once again I have the (incredible) opportunity to be at Hacker School playing around with my “edupsych for hackers” material… I’ve never revised and re-delivered a talk so often, and it’s good to be forced to see how this material improves with age and experience.

Differences between this and the PyCon Toronto version include the cutting-out of Bloom’s Taxonomy (it’s cool, just not high-priority), the separation of nearly all the Felder-Silverman Engineering Learning Styles material to a separate workshop for tomorrow, and dropping the emphasis on (making fun of) academia’s complicated verbiage, because… that’s not the point.

The slidedeck is at and embedded below. Someday, I want to get this talk taped and transcribed.

Mel Chua | Mel Chua women in free software | 2014-07-13 06:16:38

These are rough, incomplete notes from my getting started in open source session at Hacker School, cribbed from chat notes taken by attendees (thanks, folks!)

We started with a replay of the 5 minute exercise wherein participants dump me in the middle of an open source project I’m clueless about, and watch me think-aloud as I desperately try to figure out what’s going on — basically, “how does an experienced hacker evaluate an open source community?” This time I had 10 minutes, so I got pretty far checking with out Ogre3D (which looks great).

Our first big goal for the session was lurking. You can find projects on a topic by searching the internet for “[topic] open source” (or “[topic] Free Software,” or so forth). When you have a few potentials, ask yourself:

  1. Is this project alive? Are code commits recent? Are mailing list messages recent and responded-to in a timely, helpful manner? Are people using this software? (Do you want to use this software? Can you figure out how?)
  2. Is this a community I want to be part of? (Do they treat each other well?) The people are more important than the code; they’re the ones who make the code, and with release cycles that average 6 months, the code moves so fast that your relationships are what will really orient you.
  3. Where do they hang out and do their work? (What chatroom — usually in IRC — do they use? Do they have a bugtracker or some other giant shared to-do list for the project?) Once you find out where you can overhear things, you can figure out who you’re overhearing, and then start contacting them directly: “I’ve seen you answering questions on X; can you help me navigate X?”

Most projects have communication methods for code and not-code, and for asynchronous and synchronous work. Try to lurk all four. The table below may help.

Synchronous Code: git commits (announced by a bot in chat, sent to a feed, etc)  Synchronous not-code: chat (typically IRC)
 Asynchronous Code: issue/ticket/bug tracker  Asynchronous not-code: mailing lists or forum, AND wiki

Our second big goal for the session was introducing yourselfThis usually happens by sending an email introduction to the developers mailing list, then referencing that email (find the URL of your message in the mailing list archives) during initial chat conversations with people. Maggie brought up “submitting a pull request as your intro letter,” which is a great idea. What this means is that your introduction email should explain how you are:

  1. already in the middle of doing a specific helpful task
  2. and what you’re asking for is help doing that specific helpful task.

This sounds intimidating until you realize “something useful to help” can be very, very small. For example, Rebecca emailed tent saying that she’d been working through their documentation and had ideas for how to improve the clarity of the particular docs at a certain URL (specific helpful task!) and was wondering where to submit her changes (help me do it!). Jade emailed GIMP offering to test patches (specific helpful task!) and asked which branch and patches would be most helpful to verify (help me do it!). None of these tasks involve deep knowledge of the code; that comes later. They involved “writing in English” (not a problem for most Hacker Schoolers) and “compiling C” (not an impossible thing to learn, especially when you’re surrounded by programmers eager to teach).

It’s helpful to pair with someone and peer-pressure (positively!) each other to ship your intro emails.

Mel Chua | Mel Chua women in free software | 2014-07-13 06:16:29

Skeleton of the new ASF demuxer was written, but only audio was demuxed properly now. Problem is complicated video frames handling in ASF format. I hope I finally found out how to process packets properly. ASF packet can contain single payload, single payload with subpayloads, multiple payloads or multiple payloads with subpayloads inside some of them. Every subpayload is always one frame, but single payload can be whole frame or just part of it. When ASF packet contains multiple payloads inside it, each of them can be one frame but it can be just fragment of it as well. When one of mulptiple payloads contains subpayloads, each of subpayload is one frame and it can be processed as AVPacket.
For the case of fragmented frame in ASF packet I have to store several unfinished frames in ASFPacket structures that I've created for this purpose.  There should not be more than one unfinished frames per stream, so I have one ASFPacket in each ASFStream (ASFStream is structure for storing ASF stream properties). ASFPacket contains pointer to AVBufferRef where unfinished frame is stored. When frame is finished I can forward pointer to buffer  with data to AVPacket, set its properties like size, timestamps and others and finally return AVPacket.
I introduced many bugs to my code that was working (at least ASF packets was parsed right and audio worked) and now I'm working on fixing all of them.

Alexandra Hajkova | sasshkas | 2014-07-13 03:49:23

I was accepted for OPW, May - August 2014 round with project "Rewrite the ASF demuxer". First task from my mentors was to create  wiki page  about ASF (Advanced Streaming Format), it was created at
Interesting notes about other containers:

Alexandra Hajkova | sasshkas | 2014-07-13 03:47:48

Next task from my mentors was to write simple program which reads asf file and prints its structure, i.e. list of asf objects, metadata and codec information. ASF file consists of so called ASF Objects. There're 3 top-level objects - Header Object, Data Object and Index Object. Especially Header Object can contain many other objects to provide different asf features, for example Codec List Object for codec information or Metadata object for metadata.  One can recognise object with GUID,  which is 16 byte array (each byte is number) that identifies object type. I was confused about the fact the GUID number you read from the file is not matching the GUID from specs. For some historical reasons one have to modify GUIDs from specs (reorder the numbers) for match GUID read from the file.
My program is working now and can list objects, codecs and metadata info, but it ignores Index Objects by then. I hope I'll add support for them soon. Also I want to print offsets for each object and read Data Object deeper.

Alexandra Hajkova | sasshkas | 2014-07-13 03:47:08