Nathan Handler: Google Summer of Code Report #5
This is my fifth and final report about dextools for the 2011 Google Summer of Code program. During the summer, I worked with Matt Zimmerman and Stefano Zacchiroli to create a replacement web dashboard for the Debian Derivatives Exchange (DEX). The dashboard displays a list of projects and their respective tasks and then allows users to easily update the status of these tasks. The dashboard also contains two graphs for tracking the progress of projects and providing instant recognition of all contributions to a project.
At the start of the summer, I knew that I wanted to to work on improving the DEX infrastructure. I had worked with the team on the ancient-merges project, and while a lot of good work was accomplished, the process for tracking our progress was a bit clunky and difficult to interact with. Anyone who read my initial proposal for the Summer of Code would probably agree that it was quite vague. I really did not have a solid plan for what I wanted to accomplish.
This began to change after my initial phone call with my mentor, Matt Zimmerman. We decided that the first thing I would work on would be a basic dashboard. Our plan was to have all of the data stored on the Debian BTS. This would allow Debian Maintainers to benefit from DEX without needing to learn about DEX s tools and workflows. The dashboard would support multiple derivatives and multiple projects for each derivative. Each project would be made up of a list of tasks, where each task is linked to a BTS bug.
I prepared a mockup and some initial code based on that plan. The dashboard was able to successfully display a list of BTS bugs and their information. It generated the lists by assuming that bugs would be usertagged with a user of debian-derivatives@lists.debian.org and a tag in the format of dex . At this point, we started trying to make sure that the dashboard would work for things like the ancient-patches, python2.7, and the upcoming large-merges projects. It did not take long to determine that it would not work for all of these things. The ancient-patches project started with a simple list of patch names. While most of these patches eventually ended up as bugs on the BTS, they did not start this way. The dashboard would need to support specifying a list of task names. This meant that it would also need to store data itself and that not all data could be located on the BTS. This is when we first started to define what a task is. The dashboard tracks tasks. It does not directly track bugs or patches. A task is nothing more than a title and status with an optional assignee, note, and bug. This made it simple to convert a list of patch names or a list of bug numbers to a list of tasks. During the early early stages of the project, the dashboard moved around a lot. We hoped to have it end up on dex.alioth.debian.org, but we were not sure whether Alioth would meet all of our needs. This was right around the time of the Alioth migration. Thanks to some tips, I figured out that I could use a simple cronjob on wagner to pull the git repository for vasks. This would allow the running instance of the dashboard to always be up-to-date. The Alioth admins have also been quite supportive. They have installed several additional packages for me that were necessary to keep the dashboard running. From the start, Matt felt it was important to have some public documentation about the project. This would allow us to point people to something other than my blog posts. I decided to put this information on the wiki. At one point, I also had a copy of the wiki page stored in the git repository. This file was updated via a cronjob, and I then committed and pushed it when I had code changes. I ultimately decided that the best approach would be to maintain the page on the wiki. A basic README file is included in the git repository that simply links to the wiki page. On wagner, I have a cronjob running to pull a copy of the wiki page so that it can be accessed via the web. Since Matt was traveling/moving this Summer, he arranged for Stefano Zacchiroli to fill in for him as my mentor temporarily. It was at this point in the summer that I began working on the first graph script. The goal was to have a script to parse the list of tasks and generate a graph showing the number of open tasks versus time. This would allow us to easily track our progress, estimate when a project will be complete, and detect periods of slowing down. We decided that while we liked the Ubuntu burndown charts, they were a bit more complex than we needed, so we did not reuse their code. A dashboard that can t be modified is not that useful. An early goal of this project was to allow users to update the dashboard via the web. This proved to be a bit more difficult than I initially thought. First, all of the html files that make up the dashboard are generated by a script. This means that if you modify one of the html files directly, all changes will be lost the next time the script runs. When you make a change on a web form and hit submit, you usually expect to see the changes the next time you visit the page. In order to accomplish this, I made the form processing script directly modify the html files. However, at this point, we did not have a way to locally store extended information about tasks, causing the python script to delete all changes made via the web form. This issue was rectified fairly quickly. There is now a changes file that stores all information submitted via the web form. The python script reads this file and applies the changes when it is generating the html files. A second problem concerned the text inputs that were being used in most of the cells on the table. By default, some fields would have text cut-off if the string was too long. Text inputs have a size attribute that is meant to specify the number of visible characters. I attempted to set this attribute in a script to the length of the input s value. Strangely, the inputs ended up with a lot of extra whitespace following the text. This resulted in the table being stretched horizontally. After many hours of research and testing, I was unable to find a solution to this problem. We ultimately decided to simply remove the size attribute and accept that text will be cut-off. My code got some early testing from Allison Randal and other people working on the dex-ubuntu-python2.7 project. They were a huge help in providing feedback and finding bugs in the code. While the dashboard was unable to meet all of their needs (due to being in the early stages of development), I hope that it at least helped to make it easier to track the project s status. Whenever a script is accepting input from a user, it is important to validate it. Although the dashboard uses a select box to limit the choices for the status , it is still trivial to submit an arbitrary status for a task. That is why I added some validation to the form processing script. It will ignore any unknown values, ensuring that all tasks have a valid status. The other fields are a bit more tricky. They were designed to be arbitrary text fields. As a result, almost anything can be entered. There is no way to tell if something is a title or a person. We thought of a few ways we could change this, but most of them involved locking down the dashboard and restricting changes. The old dashboard treated the fields as arbitrary text, so we decided to not include any validation in the new one. One popular feature request was the ability to link directly to a project. Early versions of the dashboard had one main dex.html page that used javascript to pull in the various projects. To get around this, I first trying using the query string to allow users to specify a distribution and project. While this worked, it resulted in long and ugly URLs. It took a while for me to be able to implement a cleaner solution. However, I eventually split each project into its own static HTML file. This meant that people could simply copy the URL from the address bar to link to a particular project. The main reason for doing this was that we felt the typical person would be interested in working on a specific project; most people won t be interested in navigating between the different projects. This change also allowed links that utilized the #graph anchor to function properly. Before, due to the way the page went about loading the project, trying to specify a specific project and #graph in the URL did not work properly. There is a plugin for jquery that allows tables to be sorted by particular columns. For tables that just contain text, this works fine without any issues. However, once I started using select boxes and text inputs, things got a bit messed up. After some research, I finally figured out how to use addParser to instruct the tablesorter plugin in how to sort each column in the table. In some of the earlier versions, I used some zebra stripes to make the table easy to read. Thanks to a suggestion from Paul Wise (pabs), I got rid of this striping and modified the code to color the rows based on the task s status. Complete tasks are green, in progress tasks are yellow, and incomplete tasks are red. This makes it very easy to find tasks that still need work as well as measure the overall status of a project. Sometimes, a large task list can feel very intimidating. That is why I added the ability to hide completed tasks with the check of a box. Matt wanted to take this one step farther; he wanted the ability to also hide tasks with a closed bug. This is why you will find 2 checkboxes at the top of the dashboard that allow you to custimize which tasks are visible. Eventually, I might add support for specifying this in the URL to allow groups to link to a particular view of the dashboard. In order to make it as easy as possible for new contributors to get involved with DEX projects, I wanted to have a way to document what a project is about and how to handle tasks. I decided to use the wiki for this. All of the per-project documentation lives at http://wiki.debian.org/DEX//
. You can even take advantage of wiki markup to format the documentation. The script will parse the HTML files generated by the wiki, do some minor cleanup, and then display the documentation at the top of the page. My original plan was to use the ?action=raw output, but the lack of formatting proved too restrictive. My second plan was to try and use something like BeautifulSoup or a regex to filter non-whitelisted tags out of the wiki-generated html. This failed and proved to be unnecessary. The wiki does a pretty decent job of preventing malicious markup from ending up on the dashboard. There is a second graph that is displayed on the dashboard. This graph shows the number of tasks each person has completed. The graph is sorted so that the tallest bars on the left, and the goal is to provide some immediate recognition of work done by contributors. Since we essentially allow anyone to go ahead and modify the dashboard, we knew it was important to have a method in place for dealing with abuse. Any malicious edits made on the wiki can easily be reverted. This idea of reverting to an earlier revision is what inspired me to use a second local git repository to store the projects/ directory. This directory stores all of the changes made via the web interface. Whenever the form is submitted or the script runs to update the list of tasks, any changes made to the projects/ directory are committed. This means that if a malicious user decides to delete everything on the dashboard, we can quickly and easily revert the changes. The revision history might also be interesting to analyze at a future date. When multiple people are collaborating on a project, an issue tracker can be quite useful. For some reason, we did not set one up until quite late into the project. Despite that, we are still using it to track known bugs and feature requests. The issue tracker will become even more useful once the dashboard starts to be utilized by more people. I spent a fair bit of time working on having the dashboard immediately respond to changes. For example, if you change the status of a task, the row color will instantly update. The form will also be submitted in the background, eliminating the need to hit submit to save the change. I also use ajax in some new dialogs that allow the user to create new projects and/or tasks via the web. While these forms are submitted in the background via ajax, I am unable to have the changes show up on the dashboard immediately. The generation of the task list is a bit slow, so having the script run more often is not really a good idea. The next step for the dashboard is to really open it up for testing. We hope to start up a new DEX project shortly. This will allow us to see which features work and which need fixing. It will also help us find some of the bugs that are probably hiding in the code. Finally, if you are interested in helping out with DEX or dextools, my code is available in a git repository (http://anonscm.debian.org/gitweb/?p=dex/gsoc2011.git) on alioth. There is also the issue tracker (https://alioth.debian.org/tracker/index.php?group_id=100600&atid=413120) where you can report bugs and request new features. Finally, you can join the debian-derivatives mailing list, join #debian-derivatives on OFTC, or contact me directly via email or on IRC (nhandler). I have really enjoyed working on dextools this summer. I would like to thank Matt Zimmerman, Stefano Zacchiroli, and everyone else who helped with the project. I look forward to working with all of you more in the future.
Here is the short version: to get better performance on your
The most important plot is the top one. The blue line is the attempted
number of transactions per second (
It is able to get the same performance as stud (763
As you can see in the plot above, only stud is able to scale
properly. stunnel is not able to take advantage of the cores and its
performances are worse than with a single core. I think this may be
due to its threaded model and the fact that the userland for this
32bit system is a bit old. nginx is able to achieve the same
This plot also explains why stud performances fall after the
maximum: because of the failed transactions, the session cache is not
as efficient. This phenomenon does not exist when session reuse is not enabled.
(This was going to be a comment on
So, on July 31st 2011, it was exactly 10 years since I am a Debian
developer. What happened in the meantime? What lead me to this? What
turned this unskilled dude into a sometimes quite visible contributor
of one of the major free software projects?
If you're interested in that, please read on. Otherwise, well, this is
just yet another "bubulle talks about self" post and you can skip it.
Well, first of all, how did I end up being a DD?
And first of firsts, how did I end up not being a random user of
Windows, playing games on his desktop computer at work?
I am not a computer scientist, an "informaticien" as we sometimes say
in French (most often, what people who are not in computing stuff
say...thinking that all folks working more or less closely to
computers know everything about them).
I graduated with a PhD in
Materials science, in 1989 after conducting a research on "Influence
of Yttrium Oxide dispersion on the strength of titanium alloys", at
Onera, a French public research institution for aerospace and defence.
I was then hired, still at Onera (where I'm still working, 25 years
after starting my PhD work) to lead the Mechanical Testing Laboratory in the
Materials Science department.
So, my lab had many big machines
designed to conduct creep and fatigue tests often at interestingly
high temperatures such as 2000 C, on samples of various
materials that are used in aircrafts structures, engines, etc. or in
various space thingies (remember Herm s, the european shuttle?) or in
various "things that fly but just one way and you shouldn't be there
when they land".
So, we had computers handling data acquisition for these tests. So I
became involved with designing data acquisition setups, or even
programming data acquisition programs (one of mine, written in Forth,
ran all Onera creep tests until 2004 and successfully passed Y2K
because I knew that 2000 was a leap year. It could even pass 2100 as I
knew this is not a leap year..:-)
One day, I had to buy a modem in order to communicate with out italian
counterpart (CIRA) and exchange tests results. Then I had to learn how
modems work in MS-Dos(yeah...). Then, I discovered "online"
resources...indeed more that strange world that was then called "BBS"
(Bulletin Board Systems), those mysterious things ran by some happy
few who were using modems at their home place to communicate in
"forums" and everything related to technology.
PC-Board, Remote
Access, Fidonet, etc. became familiar to me these days, back in
1988-1990. So familiar that I ended up running my own BBS at home,
killing our phone bills and using very sophisticated techniques such as
US Robotics "High Speed Transfer" modems that could be used at
19200bps asymetrical for very high speed transfers of kilobytes and
kilobytes of useless MS-Dos "freeware" and "shareware".
Indeed, my
very first BBS didn't even have one of these: it was using a cheaper
V.22bis modem operating at 2400bps. I was waiting for my order of a
sophisticated HST modem to arrive from USA through obscure import
channels meant to circumvent the French telephone company regulations
that were forbidding the use of "unapproved" systems, in order to
protect the famous French Telephone System from interferences brought
by Bad American Material.
Bubulle System was born.
During those years, I discovered very interesting things: computers can
run together once you draw a wire between them. That's called Local
Area Network and you can even transfer data at 1Mbps between two
computers, assuming you don't forget to put terminating resistors at
the end of the line on these funny 10-baseT connectors at the back of
your home-assembled PC that was using 2MB of RAM (bought for very
cheap through the help of an American friend who was in touch with
some Chinese folks who were selling 256kb RAM sticks for half the
retail price....assuming you want to drive in a mysterious storing
place close to Charles de Gaulle airport or Eurodisney).
Hello Gordon. Yes, I know, we're still friends on Facebook and you're
probably still using that weird programming language which you were,
IIRC, the only person in the world to use.
2MB, that should be enough for barely anything, including running
*multitasking* software where, miracle, I could run two tasks at the
same time on my one and only PC at home. Miracle, I don't have to
shutdown my BBS if I want to read forums on my friends BBS. Yay for
Desqview/386! Multitasking for dummies
Still, I have to build one of these "networks" at home. Elizabeth
won't like that as it means one more box (home-made of course) in our
living room and some more wires. And why the hell is it running 24/7?
So that friends can visit the BBS, darling... And I can even
communicate with them: I write a message, I get an answer the day
after and so on. In one full week, we can have a great conversation
that would have taken *minutes* to have in the real life. Isn't this
the miracle of technlogy?
And, yes, this is a good reason for having
phone bills raising up to 500 Francs/month: people can "exchange"
programs through my BBS, that horrible white box running in the living
room. Often, these programs are written for free and some of them are
even given with "source code", which allows people to *modify* them.
And that even makes friends, you know? Imagine that some day we have
to move from one house to another: then I can just call out "who
wants to help bubulle moving?", and probably a dozen of (sometimes
scary but always nice and polite...and sometimes even showered) geeks
will pop up and happily carry boxes full of my vinyl LP collection all
day long. An entire world of friends.
"bubulle", you say, dear? What's that? That's my nickname. It was
invented by one of these friends, a really strange guy named Ren
Cougnenc who wrote this "free software" program anmed BBTH, which
allows you to use modems to connect to BBS, and even to those many
"Minitel" BBS we have in France, thanks to our wonderful world-leading
technology using V.23 communication.
Many people know me as "bubulle" because, you know, Perrier water has
bubbles and Ren likes Gaston Lagaffe fish companion who he named "bubulle".
Ren , I love you. You chose to leave this world back in 1998. We'll no
longer have our "p'tits midis" in Antony where you were showing me the
marvels of what's coming in next episode.
All this was around 1988 and about 1992, doing all these mysterious
things at home (between Jean-Baptiste and Sophie's diapers) while
still working with data acquisition MS-Dos machines at work.
How did this end up being a Debian Developer? You'll know in the next
episode..:-)
Rule of thumb: if you're happy with Squeeze s X, stick to it. If you need a
newer driver, for example for Intel Sandy Bridge, then give
This year without our friends from Grml, but The MirOS Project
(all two active developers and our Booth Babe gecko2@) will of
course attend
A very popular refrain on tech sites is that the high street cannot support multiple competing phone ecosystems. It s a reasonable position to take. Do phone stores want to train their employees on six or seven different OSes? Do consumers understand the differences, and should they need to? Do app developers want to rewrite their app six or seven times? The obvious answer to all of these is no . Stores only want to train their employees once, developers want to write their app once. Choice is bad, because choice is complicated. You can have it in any colour, so long as it s black.
The problem is, we need those competing efforts, for the entire market to increase in quality. Until the iPhone appeared on the market, Google s nascent mobile phone OS looked more like a poor man s Blackberry OS than what ended up shipping on the HTC Dream and later devices. Windows Phone 7 didn t ship with any multitasking at all and now the Mango update will be incorporating a multitasking model largely thieved from WebOS. iOS only just got support for updating the phone s firmware without being plugged into a host PC via USB, something which a few Android devices and all WebOS devices have always supported.
Consider, for comparison, the web browser market. It would be easiest if there was only one web browser but that browser would quickly stagnate and cause pain, the way Internet Explorer 6 did when it had almost the entire market. It wasn t until upstarts like Firefox and Opera and Chrome and more started showing off their unique ideas that the entire pack started improving including IE, with IE9 supporting most of the features that the competition introduced.
Every smartphone shipping today has something to offer that other devices don t and every smartphone OS shipping today has something to offer that other OSes don t. iOS has the widest app catalog. Android is Open Source (FSVO Open ). WebOS has the best multitasking, and Just Type . Windows Phone 7 offers a drastic new user interface paradigm. Blackberry OS is built for messaging tasks, and has the best sysadmin control. Symbian is well, okay, sometimes there s a time to let go but the same applies for web browsers too.
Smartphones are communication devices that people use every day of their lives, and every consumer has different needs we shouldn t try to push them into an ill-fitting category, just to satisfy ourselves that it s probably only possible for three mobile platforms to succeed in the mass-market . For some people, Blackberry OS really *is* the best choice, and no matter how much you pretend, an iPhone would enhance their lives. And as for the app question tough shit. Plenty of app developers only target iOS even though Android is overtaking in the market, and if they really want to reach as many people as possible, then use a cross-platform framework like PhoneGap or some of Xamarin s products. Single-ecosystem apps are a low-effort push to reach as many people possible with minimal investment, and the only way to satisfy that class of developer is to eliminate ALL competition in the marketplace iOS-only devs are this decade s IE6-only devs.
Everyone is entitled to their opinion, but I for one am sick of all the tales of doom and gloom that immediately surround any effort which isn t iOS or pure Android. We have a marketplace of ideas, which we should be celebrating, and not dumping on. I m eagerly awaiting delivery of my HP Pre 3, with all the unique possibilities it offers me which simply another Android device wouldn t have. And the big difference between WebOS and Nokia s Maemo/MeeGo efforts, for those who are still doubtful, is HP haven t spent years trying to deliberately sabotage the platform. Give it time. If I m wrong, the worst-case scenario is being lumbered with an awesome phone.
You might not know who Peter is because he s not very visible on Debian mailing lists. He s very active however and in particular on IRC. He was an admin of the OFTC IRC network at the time Debian switched from Freenode to OFTC. Nowadays he s a member of the Debian System Administration team who runs all the debian.org servers.
If you went to a Debconf you probably met him since he s always looking for new signatures of his GPG key. He owns the best connected key in the

Every year I worry that DebConf might not be as good as I hope, or
not as good as previous years. Well, I've yet to be let down!
The
Dear lazyweb,
In a couple of weeks I'm likely to be going cycle touring around
the North East of England. This will involve first taking a train
from Nottingham. While looking at train options just now, I was
reminded of a little survey that I wanted to conduct.
Taking bicycles on trains in the UK can be a hit-or-miss
experience.
The UK's train routes are operated by a variety of
Anyway, I'm interested in how this situation is in other non-UK
countries. Better or worse? A lot of countries certainly have a
more cycle-friendly culture I'd like to know how this kind of
thing works there so that I can write a Strongly Worded Letter
about how we Should Be Doing Better.
(
OK, this one is meant for Planet Debian...
The
As our GSoC students are approaching quite well, we've already numerous features included in current master, which are worth mentioning. You can try all bellow mentioned features on our