Posts Tagged ‘board’

Converting Mailman archives (mboxes) to maildir

Tuesday, November 13th, 2012

I wanted to search discussions on mailing lists and view conversations. I didn’t want to use some webinterface because that wouldn’t allow me to search quickly and offline. So making my mail client aware of these emails seemed to be the way to go. Fortunately, the GNOME mailinglists are mbox archived. So you download the entire traffic in a standardised mbox.

But how to properly get this into your email clients then? I think Thunderbird can import mbox natively. But I wanted to access it from other clients, too, so I needed to make my server aware of these emails. Of course, I configured my mailserver to use maildir, so some conversion was needed.

I will present my experiences dealing with this problem. If you want to do similar things, or even only want to import the mbox directly, this post might be for you.

The archives

First, we need to get all the archives. As I had to deal with a couple of mailinglists and more than a couple of month, I couldn’t be arsed to click every single mbox file manually.

The following script scrapes the mailman page. It makes use of the interesting Splinter library, basically a wrapper around selenium and other browsers for Python.

#!/usr/bin/env python

import getpass
from subprocess import Popen, list2cmdline
import sys

import splinter

def fill_password(b, username=None, password=None):
    if not username:
        username = getpass.getpass('username: ')
    if not password:
        password = getpass.getpass('password: ')
        
    b.fill('username', username)
    b.fill('password', password)
    b.find_by_name('submit').click()


def main(url, username=None):
    b = splinter.Browser()
    
    try:
        #url = 'https://mail.gnome.org/mailman/private/board-list/'
        b.visit(url)
        
        if 'Password' in b.html:
            fill_password(b, username=username)


        links = [l['href'] for l in b.find_link_by_partial_text('Text')]

        cookie = b.driver.get_cookies()[0]
        cookie_name = cookie['name']
        cookie_value = cookie['value']
        cookie_str = "Cookie: {name}={value}".format(name=cookie_name, value=cookie_value)
        wget_cookie_arg = '--header={0}'.format(cookie_str)
        #print  wget_cookie_arg
        
        b.quit()

        
        for link in links:
            #print link
            cmd = ['wget', wget_cookie_arg, link]
            print list2cmdline(cmd)
            # pipe that to "parallel -j 8"

    except:
        b.quit()


if __name__ == '__main__':
    site = sys.argv[1]
    user = sys.argv[2]
    
    if site.startswith('http'):
        url=site
    else:
        url = 'https://mail.gnome.org/mailman/private/{0}'.format(site)
    
    main(username=user, url=url)

        

You can download the thing, too.

I use splinter because handling cookies is not fun as well as parsing the web page. So I just use whatever is most convenient for me, I wanted to get things done, after all. The script will print a line for each link it found, nicely prefixed with wget and its necessary arguments for the authorization cookie. You can pipe that to sh but if you want to download many month, you want to do it in parallel. And fortunately, there is an app for that!

Conversion to maildir

After having received the mboxes, it turned out to be a good idea nonetheless to convert to maildir; if only to extract properly formatted mails only and remove duplicates.

I came around mb2md-3.20.pl from 2004 quite soon, but it is broken. It cannot parse the mboxes I have properly. It will create broken mails with header lingering around as it seems to be unable to detect the beginning of new mails reliably. It took me a good while to find the problem though. So again, be advised, do not use mb2md 3.20.

As I use mutt myself I found this blog article promising. It uses mutt to create a mbox out of a maildir. I wanted it the other way round, so after a few trial and errors, I figured that the following would do what I wanted:

mutt -f mymbox -e 'set mbox_type=maildir; set confirmcreate=no; set delete=no; push "T.*;s/tmp/mymuttmaildir"'

where “mymbox” is your source file and “/tmp/mymuttmaildir” the target directory.

This is a bit lame right? We want to have parameters, because we want to do some batch processing on many archive mboxes.

The problem is, though, that the parameters are very deep inside the quotes. So just doing something like

mutt -f $source -e 'set mbox_type=maildir; set confirmcreate=no; set delete=no; push "T.*;s$target"'

wouldn’t work, because the $target would be interpreted as a raw string due to the single quotes. And I couldn’t find a way to make it work so I decided to make it work with the language that I like the most: Python. So an hour or so later I came up with the following which works (kinda):

import os
import subprocess
source = os.environ['source']
destination = os.environ['destination']

conf = 'set mbox_type=maildir; set confirmcreate=no; set delete=no; push "T.*;s{0}"'.format(destination)

cmd = ['mutt', '-f', source, '-e', conf]
subprocess.call(cmd)

But well, I shouldn’t become productive just yet by doing real work. Mutt apparently expects a terminal. It would just prompt me with “No recipients were specified.”.

So alright, this unfortunately wasn’t what I wanted. I you don’t need batch processing though, you might very well go with mutt doing your mbox to maildir conversion (or vice versa).

Damnit, another two hours or more wasted on that. I was at the point of just doing the conversion myself. Shouldn’t be too hard after all, right? While researching I found that Python’s stdlib has some email related functions *yay*. Some dude on the web wrote something close to what I needed. I beefed it up a very little bit and landed with the following:

#!/usr/bin/env python

# http://www.hackvalue.nl/en/article/109/migrating%20from%20mbox%20to%20maildir

import datetime
import email
import email.Errors
import mailbox
import os
import sys
import time


def msgfactory(fp):
    try:
        return email.message_from_file(fp)
    except email.Errors.MessageParseError:
        # Don't return None since that will
        # stop the mailbox iterator
        return ''
dirname = sys.argv[1]
inbox = sys.argv[2]
fp = open(inbox, 'rb')
mbox = mailbox.UnixMailbox(fp, msgfactory)


try:
        storedir = os.mkdir(dirname, 0750)
        os.mkdir(dirname + "/new", 0750)
        os.mkdir(dirname + "/cur", 0750)
except:
        pass

count = 0
for mail in mbox:
        count+=1
        #hammertime = time.time() # mail.get('Date', time.time())
        hammertime = datetime.datetime(*email.utils.parsedate(mail.get('Date',''))[:7]).strftime('%s')
        hostname = 'mb2mdpy'
        filename = dirname + "/cur/%s%d.%s:2,S" % (hammertime, count, hostname)
        mail_file = open(filename, 'w+')
        mail_file.write(mail.as_string())


print "Processed {0} mails".format(count)

And it seemed to work well! It recovered many more emails than the Perl script (hehe) but the generated maildir wouldn’t work with my IMAP server. I was confused. The mutt maildirs worked like charm and I couldn’t see any difference to mine.

I scped the file onto my .maildir/ on my server, which takes quite a while because scp isn’t all too quick when it comes to many small files. Anyway, it wouldn’t necessarily work for some reason which is way beyond me. Eventually I straced the IMAP server and figured that it was desperately looking for a tmp/ folder. Funnily enough, it didn’t need that for other maildirs to work. Anyway: Lesson learnt: If your dovecot doesn’t play well with your maildir and you have no clue how to make it log more verbosely, check whether you need a tmp/ folder.

But I didn’t know that so I investigated a bit more and I found another PERL script which converted the emails fine, too. For some reason it put my mails in “.new/” and not in “.cur/“, which the other tools did so far. Also, it would leave the messages as unread which I don’t like.

Fortunately, one (more or less) only needs to rename the files in a maildir to end in S for “seen”. While this sounds like a simple

for f in maildir/cur/*; do mv ${f} ${f}:2,S

it’s not so easy anymore when you have to move the directory as well. But that’s easily being worked around by shuffling the directories around.

Another, more annoying problem with that is “Argument list too long” when you are dealing with a lot of files. So a solution must involve “find” and might look something like this: find ${CUR} -type f -print0 | xargs -i -0 mv '{}' '{}':2,S

Duplicates

There was, however, a very annoying issue left: Duplicates. I haven’t investigated where the duplicates came from but it didn’t matter to me as I didn’t want duplicates even if the downloaded mbox archive contained them. And in my case, I’m quite confident that the mboxes are messed up. So I wanted to get rid of duplicates anyway and decided to use a hash function on the file content to determine whether two file are the same or not. I used sha1sum like this:

$ find maildir/.board-list/ -type f -print0 | xargs -0 sha1sum   | head
c6967e7572319f3d37fb035d5a4a16d56f680c59  maildir/.board-list/cur/1342797208.000031.mbox:2,
2ea005ec0e7676093e2f488c9f8e5388582ee7fb  maildir/.board-list/cur/1342797281.000242.mbox:2,
a4dc289a8e3ebdc6717d8b1aeb88959cb2959ece  maildir/.board-list/cur/1342797215.000265.mbox:2,
39bf0ebd3fd8f5658af2857f3c11b727e54e790a  maildir/.board-list/cur/1342797210.000296.mbox:2,
eea1965032cf95e47eba37561f66de97b9f99592  maildir/.board-list/cur/1342797281.000114.mbox:2,

and if there were two files with the same hash, I would delete one of them. Probably like so:

    #!/usr/bin/env python
    import os
    import sys


    hashes = []
    for line in sys.stdin.readlines():
        hash, fname = line.split()
        if hash in hashes:
            os.unlink(fname)
        else:
            hashes.append(hash)

But it turns out that the following snippet works, too:

find /tmp/maildir/ -type f -print0 | xargs -0 sha1sum | sort | uniq -d -w 40 | awk '{print $2}' | xargs rm

So it’ll check the files for the same contents via a sha1sum. In order to make uniq detect equal lines, we need to give it sorted input. Hence the sort. We cannot, however, check the whole lines for equality as the filename will show up in the line and it will of course be different. So we only compare the size of the hex representation of the hash, in this case 40 bytes. If we found such a duplicate hash, we cut off the hash, take the filename, which is the remainder of the line, and delete the file.

Phew. What a trip so far. Let’s put it all together:

The final thing


LIST=board-list

umask 077

DESTBASE=/tmp/perfectmdir

LISTBASE=${DESTBASE}/.${LIST}

CUR=${LISTBASE}/cur
NEW=${LISTBASE}/new
TMP=${LISTBASE}/tmp

mkdir -p ${CUR}
mkdir -p ${NEW}
mkdir -p ${TMP}

for f in  /tmp/${LIST}/*; do /tmp/perfect_maildir.pl ${LISTBASE} < ${f} ; done
mv ${CUR} ${CUR}.tmp
mv ${NEW} ${CUR}
mv ${CUR}.tmp ${NEW}
find ${CUR} -type f -print0 | xargs -i -0 mv '{}'  '{}':2,S
find ${CUR} -type f -print0 | xargs -0 sha1sum | sort | uniq -d -w 40 | awk '{print $2}' | xargs rm

And that’s handling email in 2012…

Updating Bylaws of the GNOME Foundation

Sunday, September 9th, 2012

The GNOME Foundation Bylaws are currently in an ugly PDF which you can see here or from our website here.

I’ve just sent a mail to foundation-list asking for feedback on our proposed changes.

I want to explain the changes we made to hopefully clear some points up that might arise. So let’s walk through the diff, hunk by hunk.

--- bylaws-2002.rst	2012-08-25 14:04:42.243447405 +0300
+++ bylaws-2012.rst	2012-08-31 03:28:50.518455409 +0300
@@ -1,10 +1,60 @@
+.. comment:
 
+        You can compile this document using Python's docutils like this:
+        
+                rst2latex --documentclass=scrartcl --documentoptions=a4paper,10pt,bigheading   --no-section-numbering bylaws-simple.rst > bylaws.tex
+          
+        Then you'll get a .tex file which you can compile using pdflatex. You probably need to have a couple of packages installed.
+        If it complains about a missing .sty file, you can install it using yum:
+        
+                yum install -y 'tex(pdfcomment.sty)'
+
+
+
+        The HTML version compiles similarly:
+        
+                rst2html --no-section-numbering --stylesheet=bylaws.css bylaws-simple.rst > bylaws.html
+
+
+.. role:: raw-html(raw)
+        :format: html
+
+.. role:: raw-latex(raw)
+        :format: latex
+
+.. role:: comment
+.. role:: huge
+.. role:: uppercase
+.. role:: hugeuppercase (huge)
+
+
+.. To turn off the comment function, uncomment (remove the first two leading dots and the white space) the following
+
+.. :raw-latex:`\renewcommand{\DUrolecomment}[1]{}`
+
+.. this sets the title
+
+        =============================
+        Bylaws of GNOME Foundation
+        =============================
+
+.. contents::
+
+        
+-----------------------
+
+.. for some weird reason, the order of the classes is important. Maybe fix it anyway, by patching \maketitle
 .. class:: centered
         
         :hugeuppercase:`Bylaws of GNOME Foundation`
         :raw-latex:`}\\% There's weird behaviour in docutils, i.e. every paragraph would get centered on its own`
         Initially Adopted on March 16, 2001.
         As Amended on April 5, 2002.
+        As Amended on November 11, 2005.
+        As Amended on October 22, 2007.
+        As Amended on [October 30, 2012.]
+        
+
 

So this is just some commentary to enable you to make a nice looking document from that .rst file.

Well, the filename in the comment will most likely be different. But that’s a very minor change. And the date indicated in square brackets is preliminary. So that will be replaced with a proper date once it’s set.

--- bylaws-2002.rst	2012-08-25 14:04:42.243447405 +0300
+++ bylaws-2012.rst	2012-08-31 03:28:50.518455409 +0300
@@ -12,7 +62,7 @@
 ==================================================================
 
 
-The name of the Corporation shall be Gnome Foundation (the "**Corporation**"), a California
+The name of the Corporation shall be GNOME Foundation (the "**Corporation**"), a California
 Nonprofit Public Benefit Corporation.
 
 

Since we use GNOME all over the place, we should not propagate “Gnome” any further.

--- bylaws-2002.rst	2012-08-25 14:04:42.243447405 +0300
+++ bylaws-2012.rst	2012-08-31 03:28:50.518455409 +0300
@@ -107,15 +164,17 @@
 Other Classes of Membership 
 -----------------------------------------
 
-. The Board may, from time to time, establish another class or classes of members, with or
+The Board may, from time to time, establish another class or classes of members, with or
 without voting rights. The privileges, rights and duties of such other class or classes of members
 shall be as provided by the Board, subject to the terms of the Bylaws, as amended from time to time.
 The Board may thereby confer some or all of the rights of the members upon any person or persons.
-If such person or persons do not have the right to vote for either: (i) the election of a Director or
-Directors, on a disposition of all or substantially all of the assets of this corporation, on a merger, on
-a dissolution or (ii) the selection of delegates who possess any such voting rights or (iii) changes to
-the corporation's Articles of Incorporation or Bylaws, such person shall not be a member within the
-meaning of Section 5056 of the Nonprofit Corporation Law of the State of California.
+If such person or persons do not have the right to vote for either:
+
+1. the election of a Director or Directors, on a disposition of all or substantially all of the assets of this corporation, on a merger, on a dissolution or
+
+2. the selection of delegates who possess any such voting rights or
+
+3. changes to the corporation's Articles of Incorporation or Bylaws, such person shall not be a member within the meaning of Section 5056 of the Nonprofit Corporation Law of the State of California.
 
 
 

The first change is just a whitespace.

The other changes should just be a conversion of the format. That is, the list is now a proper list as opposed to the inline notation.

--- bylaws-2002.rst	2012-08-25 14:04:42.243447405 +0300
+++ bylaws-2012.rst	2012-08-31 03:28:50.518455409 +0300
@@ -141,7 +198,7 @@
 Admission and Removal 
 -----------------------------------------
 
-Admission or removal from membership shall be by the vote of a majority of the number of
+Admission or removal from membership shall be by the vote of a majority of the 
 Directors then in office.
 

This is meant to be a minor language cleanup. I was confused of the double speak with the “number of”.

--- bylaws-2002.rst	2012-08-25 14:04:42.243447405 +0300
+++ bylaws-2012.rst	2012-08-31 03:28:50.518455409 +0300
@@ -171,20 +226,18 @@
         that the member no longer meets the qualification requirements for membership in the
         Corporation.
 
-
 #.      **Removal or Suspension**.  Membership shall terminate upon the determination of the Board
-        or Membership Committee after a hearing duly held in accordance with this Section 6(c), that
+        or Membership Committee after a hearing duly held in accordance with this Section 6.7.3, that
         the member has failed in a material respect to observe the rules of conduct promulgated from
         time to time by the Board and applicable to members, or otherwise has failed in some
         material respect to merit continued membership privileges in the Corporation. In the event of
         a removal or suspension of a member, the following procedures shall be implemented:
 
-        a)      A notice shall be sent by prepaid, first-class, certified or registered mail to the most recent
-                address of the member as shown on the Corporation's records, setting forth the removal or
-                suspension and the reason therefore. Such notice shall be sent at least fifteen (15) days
+        a)      A notice shall be sent by electronic mail and prepaid, first-class, certified or registered mail to the most recent
+                address of the member, if known to the Corporation, setting forth the removal or
+                suspension and the relevant reason. Such notice shall be sent at least fifteen (15) days
                 before the proposed effective date of the removal or suspension.
 
-
         #)      The member being expelled or suspended shall be given an opportunity to be heard, either
                 orally or in writing, at a hearing to be held no fewer than five (5) days before the removal.
                 The hearing shall be held by the Board or Membership Committee. Any such hearing may

The section 6(c) is wrongly referenced.

We first require an email to be sent. On top, we clarify the requrement of a snail mail to the point that we have to sent a regular mail if we do know the address. So far, we do not really collect address data (well, the travel committee does and the Friends of GNOME programme generates address data, too). And I don’t think we want to. Hence we specify that we need to know the address in first place.

--- bylaws-2002.rst	2012-08-25 14:04:42.243447405 +0300
+++ bylaws-2012.rst	2012-08-31 03:28:50.518455409 +0300
@@ -192,10 +245,9 @@
                 participants in the hearing can hear one another. The notice to the member of his or her
                 proposed removal or suspension shall state that such member is entitled, upon request, to
                 such hearing, shall state that a date, time and place of hearing will be established upon receipt
-                of request therefor, and shall state, that in the absence of such request, the effective date of
+                of such a request, and shall state, that in the absence of such request, the effective date of
                 the proposed suspension or removal.
 
-            
         #)      Following the hearing, the Board, or Membership committee, as the case may be, shall
                 decide whether the member should in fact be expelled, suspended, or sanctioned in some
                 other way. The decision of the Board or Membership Committee, as the case may be, shall

The “therefor” was quite confusing to me, so I got rid of it everywhere. There will be more changes with either a “therefore” or a “therefor”.

--- bylaws-2002.rst	2012-08-25 14:04:42.243447405 +0300
+++ bylaws-2012.rst	2012-08-31 03:28:50.518455409 +0300
@@ -199,11 +251,10 @@
         #)      Following the hearing, the Board, or Membership committee, as the case may be, shall
                 decide whether the member should in fact be expelled, suspended, or sanctioned in some
                 other way. The decision of the Board or Membership Committee, as the case may be, shall
-                be final.
-
+                be final, subject to any challenge brought pursuant to this section.
 
-        #)      Any action challenging a removal or suspension of membership, including any claim
-                alleging defective notice, must be commenced within one year after the date of the removal
+        #)      A member may bring an action challenging a removal or suspension of membership, including any claim
+                alleging defective notice, within one year after the date of the removal
                 or suspension.
 
 

I pushed for that change, because it was contradictory to me, that the decision shall be final but can then be challenged. By now, I understand the spirit and the reasoning very well, but nonetheless, I wanted to make it simpler for others (and potentially for me, in a few month) to read. The bylaws simply want to enable someone to claim a defective notice. And it makes perfect sense to me in such a serious cirumstance as a removal. So all the change wants to achieve is to clarify that the decision shall be final, only if there is no defective notice to be claimed.

--- bylaws-2002.rst	2012-08-25 14:04:42.243447405 +0300
+++ bylaws-2012.rst	2012-08-31 03:28:50.518455409 +0300
@@ -252,13 +301,11 @@
 of the Corporation.
 
 
-
-Annual Meetings and Election of Directors
+Annual Meetings
 -----------------------------------------
 
-The annual meetings of members of the Corporation shall be held on the second Saturday
-in November of each year at 10:00 a.m., or at any other time and place determined by the resolution
-of the Board. Directors shall be elected and other proper business may be transacted at the annual
+The annual meetings of members of the Corporation shall be held at any time and place determined by the resolution
+of the Board. Directors may be elected and other proper business may be transacted at the annual
 meeting of members.
 
 

This biggie simply reflects our currect way of working. I actually like the idea of a fixed annual meeting mentioned in the bylaws, but well, reality shows us that what we really do is to meet each year at GUADEC.

--- bylaws-2002.rst	2012-08-25 14:04:42.243447405 +0300
+++ bylaws-2012.rst	2012-08-31 03:28:50.518455409 +0300
@@ -269,7 +315,9 @@
 Special meetings of members, for any lawful purpose, may be called at any time by the
 President or by the Board. Furthermore, special meetings of the members for any lawful purpose
 may be called by, upon request in writing by at least ten percent of the membership, or at least five
-percent of the membership in accordancw with Article XVI, stating the business to be transacted at
+percent of the membership in accordance with
+Article XVI,
+stating the business to be transacted at
 the special meeting, mailed to the principal office of the Corporation, or delivered to the chairman of
 the Board, the President, the Vice President or Secretary. It shall be the duty of the President to
 cause notice to be given, within seven (7) days from receipt of such a request, to be held no more

Accordance was a typo in the original

--- bylaws-2002.rst	2012-08-25 14:04:42.243447405 +0300
+++ bylaws-2012.rst	2012-08-31 03:28:50.518455409 +0300
@@ -280,12 +328,9 @@
 Notice of Meetings 
 -----------------------------------------
 
-A notice of each annual meeting, written ballot for election of Directors or otherwise, if
-any, and special meeting shall be given by the President or, in case of his or her failure or refusal, by
+A notice of each annual meeting, and special meeting shall be given by the President or, in case of his or her failure or refusal, by
 any other officer or any Director; shall specify the place, time, day and hour of the meeting or the
-date on which the ballot shall be returned, if applicable; in the case of an annual meeting at which
-Directors shall be elected, shall specify the names of all those who are candidates for election of
-Directors at the time the notice is given, and in the case of special meetings, the nature of the
+date on which the ballot shall be returned, if applicable; and in the case of special meetings, the nature of the
 business to be transacted thereat. Such notice shall be given in writing to every member of the
 Corporation who, on the record date for notice of the meeting, is entitled to vote thereat. Such notice
 shall be given either personally or by sending a copy thereof by first-class mail or by telephone

The president was supposed to send the ballots for elections. But we don’t do that anymore. And I do think it makes sense to not require the president to do it. Currently, it is tighly coupled with the rest of the elections, effectively requiring the president to do the elections.

--- bylaws-2002.rst	2012-08-25 14:04:42.243447405 +0300
+++ bylaws-2012.rst	2012-08-31 03:28:50.518455409 +0300
@@ -297,6 +342,13 @@
 all other meetings.
 
 
+Election of Directors
+-----------------------------------------
+
+Directors may be elected at the annual meeting as described herein or otherwise by eletronic mail and electronic voting. Notice of such electronic mail or electronic voting shall be given by the President or
+by anyone duly appointed with the authority to do so by the Directors in accordance with Section 8.3.
+Such notice shall be sent promptly to the membership at least thirty (30) days prior to the last day on which votes may be submitted.
+
 
 Adjourned Meetings 
 -----------------------------------------

And to clarify, that we do our elections via electronic voting (as opposed to the AGM). It might actually be beneficial to the AGM if the directors were elected there, but then again, that would reduce the people being able to vote drastically. But maybe that’s something for the future, i.e. find a mix between e-voting and voting at the AGM.

--- bylaws-2002.rst	2012-08-25 14:04:42.243447405 +0300
+++ bylaws-2012.rst	2012-08-31 03:28:50.518455409 +0300
@@ -341,6 +393,14 @@
 
 
 
+
+
+Quorum for Referenda  
+-----------------------------------------
+
+Any member of the Corporation may propose a referendum. Such request for a referendum must be endorsed by 10\% of the Membership. The overall referendum process shall be conducted by the Membership and Elections Committee, as authorized by the Directors pursuant to Article IX.
+
+
 Record Date 
 -----------------------------------------
 

This is a change just reflects our way of working with referenda since at least 2004. I don’t know the origin and it’d be interesting to know where it came from. In fact, I was hesitating to make that change, but we lived with that rule for so long now, it should be written down then.

--- bylaws-2002.rst	2012-08-25 14:04:42.243447405 +0300
+++ bylaws-2012.rst	2012-08-31 03:28:50.518455409 +0300
@@ -438,7 +499,7 @@
 
 2.      A Director shall be a Member.
 
-3.      The initial number of Directors shall be eleven (11).
+3.      The number of Directors on [October 31, 2012] is seven (7).
 
 4.      No organization, corporation or similar entity, or any affiliate thereof, shall hold, directly or
         indirectly, more than 40\% of the Board seats, regardless of election results. In the event that

As per a referendum, we reduced the number of directors. I’m not really in favour of changing the spirit of the bylaws at this point. But it’s not very intrusive and hopefully removes potential confusion for people reading the bylaws and who wonder why we have 7 and not 11 directors.

--- bylaws-2002.rst	2012-08-25 14:04:42.243447405 +0300
+++ bylaws-2012.rst	2012-08-31 03:28:50.518455409 +0300
@@ -458,7 +519,7 @@
 Election and Term of Office of Directors 
 -----------------------------------------
 
-1.      Each of the directors shall hold office for one (1) year.
+1.      Each of the directors shall hold office for one (1) year, or a period of up to two (2) years as determined by the Board and announced prior to an election being called.
 
 2.      Directors shall be elected by the membership in accordance with the rules set forth on

http://foundation.gnome.org/electionrules.html.

This is another change to the bylaws from a referendum in 2007.

--- bylaws-2002.rst	2012-08-25 14:04:42.243447405 +0300
+++ bylaws-2012.rst	2012-08-31 03:28:50.518455409 +0300
@@ -495,19 +556,18 @@
 3.      **Removals**. A Director may be removed for cause. In the event such removal, the following
         procedures shall be implemented:
 
-        a)      A notice shall be sent by mail by prepaid, first-class, certified or registered mail to the
-                most recent address of the member as shown on the Corporation's records, setting forth the
-                removal and the reason therefore. Such notice shall be sent at least seven (7) days before the
+        a)      A notice shall be sent by electronic mail and by prepaid, first-class, certified or registered mail to the
+                most recent address of the member, if known by the Corporation, setting forth the
+                removal and the relevant reason. Such notice shall be sent at least seven (7) days before the
                 proposed effective date of the removal.
 
         #)      The Director being removed shall be given an opportunity to be heard, either orally or in
                 writing, at a hearing to be held no fewer than five (5) days before the removal. The hearing
                 shall be held by the Board. The notice to the Director of his or her proposed removal shall
                 state that such member is entitled, upon request, to such hearing, shall state that a date, time
-                and place of hearing will be established upon receipt of request therefor, and shall state, that
+                and place of hearing will be established upon receipt of such a request, and shall state, that
                 in the absence of such request, the effective date of the proposed removal.
 
-
         #)      Following the hearing, the Board shall decide whether the Director should in fact be
                 expelled, suspended, or sanctioned in some other way. The decision of the Board shall be
                 final.

Again, email and snail mail, if possible.

--- bylaws-2002.rst	2012-08-25 14:04:42.243447405 +0300
+++ bylaws-2012.rst	2012-08-31 03:28:50.518455409 +0300
@@ -547,11 +606,11 @@
 executive office of the Corporation. Special meetings of the Board shall be held at any place within
 or outside the State of California that has been designated in the notice of the meeting or, if not
 stated in the notice, or if there is no notice, at the principal executive office of the Corporation.
-Notwithstanding the above provisions of this Section 5, a regular or special meeting of the Board
+Notwithstanding the above provisions of this Section  8.5, a regular or special meeting of the Board
 may be held at any place consented to in writing by all the Board members, either before or after the
 meeting. If consents are given, they shall be filed with the minutes of the meeting. Any meeting,
 regular or special, may be held by conference telephone or similar communication equipment, so
-long as all Directors participating in the meeting can hear one another, and all such Directors shall be
+long as all Directors participating in the meeting can communicate with one another, and all such Directors shall be
 deemed to be present in person at such meeting.
 
 

The first change is purely cosmetic.

The second change is about hearing one another. While I do think it is import to actually hear, some people simply cannot. Apparently for US legal reasons, those kind of provisions need to be adapted for the impaired. It has also a benefit of allowing things like IRC meetings.

--- bylaws-2002.rst	2012-08-25 14:04:42.243447405 +0300
+++ bylaws-2012.rst	2012-08-31 03:28:50.518455409 +0300
@@ -578,7 +638,7 @@
         a)      **Manner of giving**. Notice of the time and place of special meetings shall be given to each
                 Director by one of the following methods:
                 
-                i. by personal delivery or written notice;
+                i. by personal delivery;
                 #. by first-class mail, postage prepaid;
                 #. by telephone communication, including a voice
                    messaging system or other system or technology designed to record and communicate

The written notice is redundant information, as there is snail mail mentioned (and email FWIW).

--- bylaws-2002.rst	2012-08-25 14:04:42.243447405 +0300
+++ bylaws-2012.rst	2012-08-31 03:28:50.518455409 +0300
@@ -623,6 +683,10 @@
 any action taken is approved by at least a majority of the required quorum for that meeting.
 
 
+.. _Section Adjournment: `Adjournment`_
+.. _Article Directors: `Directors`_
+
+
 Waiver of Notice 
 -----------------------------------------
 

This is a technicality for the current reStructuredText parser :-\ The problem is, that there are more than one headings with the same name.

--- bylaws-2002.rst	2012-08-25 14:04:42.243447405 +0300
+++ bylaws-2012.rst	2012-08-31 03:28:50.518455409 +0300
@@ -682,7 +744,7 @@
 Directors as such shall not receive any compensation for their services, but by resolution of
 the Board, expenses of attendance, if any, may be allowed for attendance at regular or special
 meetings of the Board; but nothing herein contained shall be construed to preclude any Director
-from serving the Corporation in any other capacity and receiving compensation therefor.
+from serving the Corporation in any other capacity and receiving compensation for this. 

Another therefor removed.

--- bylaws-2002.rst	2012-08-25 14:04:42.243447405 +0300
+++ bylaws-2012.rst	2012-08-31 03:28:50.518455409 +0300
@@ -697,7 +759,7 @@
 -----------------------------------------
 
 The Board, by resolution adopted by a majority of the Directors then in office, provided a
-quorum is present, may create one or more committees, to serve at the pleasure of the Board.
+quorum is present, may create or remove one or more committees, to serve at the pleasure of the Board.
 Appointments to committees of the Board shall be by majority vote of the Directors then in office.
 The Board may appoint one or more alternate members of any such committee, who may replace
 any absent member at any meeting of the committee.

This is just a clarification as serving “at the pleasure of the board” apparently means to not serve anymore if the board does not want to. But to make it more explicit, we incorporate “remove”.

--- bylaws-2002.rst	2012-08-25 14:04:42.243447405 +0300
+++ bylaws-2012.rst	2012-08-31 03:28:50.518455409 +0300
@@ -777,6 +839,10 @@
 
 
 
+.. The following incoming anchor needs to be defined because reST doesn't like the section and the subsection being named Officers
+
+.. _sec\:officers:
+
 Officers 
 ==================================================================
 

Again, a technical change for reST.

--- bylaws-2002.rst	2012-08-25 14:04:42.243447405 +0300
+++ bylaws-2012.rst	2012-08-31 03:28:50.518455409 +0300
@@ -796,14 +863,20 @@
 Election and Term of Office 
 -----------------------------------------
 
-The officers of the Corporation, except such officers as may be appointed in accordance with
-the provisions of Section 3 or Section 5 of this Article X, shall be chosen annually by the Board, and
-each shall hold his or her office until he or she shall resign or shall be removed or otherwise
+
+The officers of the Corporation, except such officers as may be appointed in accordance
+with the provisions of Section 10.3 or Section 10.5 of this Article X, shall be chosen
+annually by the Board, and each shall hold his or her office until he or she shall resign
+or shall be removed or otherwise
 disqualified to serve, or his or her successor shall be elected and qualified, subject to the rights, if
 any, of an officer under any contract of employment. New offices may be created and filled at any
 meeting of the Board. Each officer shall hold office until that officer's successor shall have been
 duly elected and shall have qualified.
 
+.. _Section Subordinate Officers: `Subordinate Officers`_
+.. _Section Vacancies: `sec\:vacancies`_
+.. _Article Officers: `sec\:officers`_
+
 
 Subordinate Officers 
 -----------------------------------------

Just cosmetic and technical changes to include the section number.

--- bylaws-2002.rst	2012-08-25 14:04:42.243447405 +0300
+++ bylaws-2012.rst	2012-08-31 03:28:50.518455409 +0300
@@ -821,16 +893,16 @@
 1.      **Removal**. Any officer, other than the President, may be removed with or without cause. In
         the event such removal, the following procedures shall be implemented:
         
-        a)      A notice shall be sent by mail by prepaid, first-class, certified or registered mail to the
-                most recent address of the officer as shown on the Corporation's records, setting forth the
-                removal and the reason therefore. Such notice shall be sent at least seven (7) days before the
+        a)      A notice shall be sent by electronic mail and by prepaid, first-class, certified or registered mail to the
+                most recent address of the officer if known by the Corporation, setting forth the
+                removal and the relevant reason. Such notice shall be sent at least seven (7) days before the
                 proposed effective date of the removal.
 
         #)      The officer being removed shall be given an opportunity to be heard, either orally or in
                 writing, at a hearing to be held no fewer than five (5) days before the removal. The hearing
                 shall be held by the Board. The notice to the Officer of his or her proposed removal shall
                 state that such member is entitled, upon request, to such hearing, shall state that a date, time
-                and place of hearing will be established upon receipt of request therefor, and shall state, that
+                and place of hearing will be established upon receipt of such a request, and shall state, that
                 in the absence of such request, the effective date of the proposed removal.
 
         #)      Following the hearing, the Board shall decide whether the Officer should in fact be

Again a therefor, email and snail mail issue.

--- bylaws-2002.rst	2012-08-25 14:04:42.243447405 +0300
+++ bylaws-2012.rst	2012-08-31 03:28:50.518455409 +0300
@@ -845,7 +916,9 @@
         it effective. Any resignation shall be without prejudice to the rights, if any, of the
         Corporation under any contract to which the officer is a party.
 
+.. Again, this reference needs to be explicitely given because there is another "Vacancies" section.
 
+.. _sec\:vacancies:
 
 Vacancies 
 -----------------------------------------

Technical.

--- bylaws-2002.rst	2012-08-25 14:04:42.243447405 +0300
+++ bylaws-2012.rst	2012-08-31 14:16:50.849271582 +0300
@@ -864,8 +937,12 @@
 President 
 -----------------------------------------
 
-The President shall be the chief executive officer of the Corporation and shall in general
-supervise and control all of the business and affairs of the Corporation. The President may sign,
+The President shall act as the chief executive officer of the Corporation
+if no chief executive officer or executive director has been appointed by
+the Board and shall in general supervise and control all of the business
+and affairs of the Corporation. The President shall also act as the
+Chairman if none has been appointed.
+The President may sign,
 with the secretary or any other proper officer of the Corporation authorized by the Board, any deeds,
 mortgages, bonds, contracts or other instruments that the Board of Directors has authorized to be
 executed, except in cases where the signing and execution thereof shall be specially designated by

We do have our own, paid, CEO. I do like the fact though, that we intend the President to be the CEO. It makes a great deal of sense to me to have these kind of priviledges attached to the President. It is also nice, though, to be able to appoint that position. To then fill the role of the President with something, we make it the chairman.

--- bylaws-2002.rst	2012-08-25 14:04:42.243447405 +0300
+++ bylaws-2012.rst	2012-08-31 03:28:50.518455409 +0300
@@ -943,7 +1016,8 @@
 Definitions 
 -----------------------------------------
 
-For the purpose of this Article I:
+
+For the purpose of this Article XI:
 
 1.      "agent" means any person who is or was a Director, officer, employee, committee member
         or other agent of the Corporation; or is or was serving at the request of the Corporation as a

The original probably meant to reference Article XI, not I. Article I is the name of the Corporation. That wouldn’t make much sense.

--- bylaws-2002.rst	2012-08-25 14:04:42.243447405 +0300
+++ bylaws-2012.rst	2012-08-31 03:28:50.518455409 +0300
@@ -977,7 +1053,7 @@
 Actions Brought by Persons Other than the Corporation 
 ---------------------------------------------------------
 
-Subject to the required findings to be made pursuant to Section 5 below, the Corporation
+Subject to the required findings to be made pursuant to Section 11.5 below, the Corporation
 shall indemnify any person who was or is a party, or is threatened to be made a party, to any
 proceeding, other than an action brought by, or on behalf of, the Corporation, or by an officer,
 Director or person granted related status by the Attorney General, or by the Attorney General on the

Cosmetic.

--- bylaws-2002.rst	2012-08-25 14:04:42.243447405 +0300
+++ bylaws-2012.rst	2012-08-31 03:28:50.518455409 +0300
@@ -1051,8 +1130,9 @@
 Limitations 
 -----------------------------------------
 
-No indemnification or advance shall be made under this Article XI, except as provided in
-Section 2 or 5(b) above, in. any circumstance when it appears:
+
+No indemnification or advance shall be made under this Article XI,
+except as provided in Section 11.2 or 11.5.2 above, in any circumstance when it appears:
 
 1.      That the indemnification or advance would be inconsistent with a provision of the Articles
         of Incorporation, a resolution of the Board or an agreement in effect at the time of the accrual

Cosmetic.

--- bylaws-2002.rst	2012-08-25 14:04:42.243447405 +0300
+++ bylaws-2012.rst	2012-08-31 03:28:50.518455409 +0300
@@ -1099,9 +1179,10 @@
 Fiduciaries of Corporate Employee Benefit Plan 
 -------------------------------------------------
 
-This Article XI does not apply to any proceeding against any trustee, investment manager or
+This Article XI
+does not apply to any proceeding against any trustee, investment manager or
 other fiduciary of an employee benefit plan in that person's capacity as such, even though that person
-may also be an agent of the Corporation as defined in Section la of this Article XI. Nothing
+may also be an agent of the Corporation as defined in Section 11.1.1 of this Article XI. Nothing
 contained in this Article XI shall limit any right to indemnification to which such a trustee,
 investment manager or other fiduciary may be entitled by contract or otherwise, which shall be
 enforceable to the extent permitted by applicable law.

Section “la” (lower case L, a) doesn’t make much sense. That must have been a typo.

--- bylaws-2002.rst	2012-08-25 14:04:42.243447405 +0300
+++ bylaws-2012.rst	2012-08-31 03:28:50.518455409 +0300
@@ -1224,20 +1308,20 @@
 Amendments 
 ==================================================================
 
-Bylaws may be adopted, amended or repealed by the membership. In the event of such
-adoption, amendment or repeal, the following procedures shall be implemented:
 
-1.      Any proposal relating to the adoption, amendment or repeal of the Bylaws shall be posted
-        on http://foundation.gnome.org by the Board for a period of twenty one (21) days;
+Any member can propose the adoption, amendment or repealing of the Bylaws.
+In the event of such a proposal, the following procedures shall be implemented:
+
+1.      The members shall be provided with the reasonable means to comment upon and/or object
+        to any such proposal for twenty one (21) days
 
-2.      The members shall be provided with the reasonable means to comment upon and/or object
-        to any such proposal;
+#.	The proposal shall be sent to the membership and shall be posted on http://foundation.gnome.org by the Board
 
-3.      In the event that five percent or more of the members objects to the proposal, a special
+#.      In the event that five percent or more of the members object to the proposal, a special
         meeting of the members shall be convened in accordance with the provisions of Article VII,
-        and the proposal shall be voted upon;
+        and the proposal shall be voted upon
 
-4.      In the event that five percent or more of the members do not object to the proposal, then
+#.      In the event that five percent or more of the members do not object to the proposal, then
         the proposal shall be adopted by the Board to the extent permitted by CNPBCL Section
         5150(a).

The main change here is to make explicit that any member can propose a change. Any member means any member. Including those who cannot vote or do not have any other rights. They may not necessarily vote on the proposed amendments, but they may propose some.

I was thinking long about this, actually. As a security person, my thinking was that we should rather be protective against people proposing changes to the bylaws, because more or less external people could propose amendments and that’s rather expensive in terms of organisational costs. And we don’t necessarily want some malicious member to create a lot of costs. But then I thought that with a rather easy way of changing the bylaws, we can easily fix this issue if if indeed arises. And then I thought that it is way better to not prematurely optimise, but rather enjoy that kind of freedom we have. Let’s hope it lasts long :)

You can have a look at the full new bylaws here as HTML or rendered as PDF

GNOME Foundation Board of Directors Elections 2010

Wednesday, June 23rd, 2010

I am happy to announce the results of this years Board of Directors Elections.

At first, we had too few candidates to actually fill the 7 seats in the board. But then the deadline for announcing a candidacy was pushed back and more people considered becoming a member of the Board. So we went into the voting phase with 11 candidates.

The voting itself worked well. I knew the system from last years elections but haven’t written the necessary steps down because I was mostly exploring and not knowing whether my attempts would result in anything next to useful. But this year I have taken notes along the way and I hope to be able to provide a good documentation.

The question period was a bit weird. Nobody really came up with questions for the candidates, as if nobody cared. I encouraged the peolpe to either send the questions directly, or better, send them to the Membershi p and Elections Commitee so thaat we can sort and sift through them. But nothing happened. I decided to not give any questions right away, because I sure wanted the Foundation members to participate. But if nobody asked a question, I’d have sooner or later released those questions:

  1. Why are you running for Board of Directors? What will you do more or
    better than previous years Boards have done?
  2. What do you think is the most important item on the Board’s agenda
    right now?
  3. How do you manage your time and that of others? Are you good at
    working with others including those who might have a differing opinion
    than yours and try to reach consensus and agree on actions?
  4. How are you going to manage your current contributions to GNOME once
    you become a Board Member?
  5. What are your plans to encourage and mentor contributions to GNOME
    from Latin America, Africa and Asia? How would you increase community
    participation?
  6. Which parts of the GNOME project do you think work well and would like to encourage further?
  7. What would you do to increase community participation in the GNOME community and GNOME elections?
  8. Do you have any thoughts on how to expand the developer base?
  9. How much familiar are you with the day-to-day happenings of GNOME? How much do you follow and participate in the main GNOME mailing lists?
  10. Please rank your interests:
    1. GNOME evangelizing to government, enterprise, small business, and individuals
    2. GNOME marketing and merchandising of branded items nationally and internationally
    3. GNOME legal issues like copyright and patents
    4. GNOME finances and fund raising
    5. Alliance with other organizations.

To count the votes, we used OpenSTV (r771). But to use it comfortably, I had to patch it. As we use Scottish STV this year, counting votes is as easy as opening OpenSTV, opening the Ballot file and pressing OK.

The people that are elected into the Board of Directors are:

Congrats and thanks for running.

Sadly, we had a few people showing up, who did not renew their membership in time and could thus not take part in the voting process. I wonder why that is. Is the renewal process not effective enough? If you have any suggestions, please leave them either in the comments or via mail.

Running the elections was challenging, because I was really busy with exams and other obligations. Fortunately, the Membership and Elections Committee was helpful and we managed to have a smooth election process, i.e. not like last year ;-) Anyway, I hope to see most of the Board members at GUADEC :-)