[foundation-web] Preparing 2015 elections run



commit e6e7b80b7a11c1a43a2732815040892abe1ec79e
Author: Andrea Veri <av gnome org>
Date:   Mon May 4 01:22:58 2015 +0200

    Preparing 2015 elections run

 foundation.gnome.org/vote/2015/Makefile.am         |   14 +
 foundation.gnome.org/vote/2015/candidates.wml      |  296 ++++++++++++++++++++
 foundation.gnome.org/vote/2015/index.wml           |   65 +++++
 foundation.gnome.org/vote/2015/mkical.py           |  258 +++++++++++++++++
 foundation.gnome.org/vote/2015/rules.wml           |  137 +++++++++
 foundation.gnome.org/vote/2015/timeline.ics        |   79 ++++++
 .../vote/2015/voting-instructions.txt              |   32 ++
 7 files changed, 881 insertions(+), 0 deletions(-)
---
diff --git a/foundation.gnome.org/vote/2015/Makefile.am b/foundation.gnome.org/vote/2015/Makefile.am
new file mode 100644
index 0000000..dd5e082
--- /dev/null
+++ b/foundation.gnome.org/vote/2015/Makefile.am
@@ -0,0 +1,14 @@
+SUBDIRS =
+
+urlpath = /vote/2014
+ 
+page_SCRIPTS = \
+       index.html \
+       candidates.html\
+       rules.html 
+
+page_DATA = \
+       timeline.ics
+       mkical.py
+
+include $(top_srcdir)/rules.common
diff --git a/foundation.gnome.org/vote/2015/candidates.wml b/foundation.gnome.org/vote/2015/candidates.wml
new file mode 100644
index 0000000..a919494
--- /dev/null
+++ b/foundation.gnome.org/vote/2015/candidates.wml
@@ -0,0 +1,296 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" 
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd";>
+<html>
+
+  <head>
+    <title>GNOME Foundation 2014 Elections Candidates</title>
+    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
+  </head>
+
+  <body>
+    <div id="content">
+    <h1>Candidates for the GNOME Foundation 2014 Elections</h1>
+
+    <p>
+      Below you will find a list of candidates who are running for the
+      GNOME Foundation Board of Directors. A short summary statement from
+      each candidate and a link to their full candidacy announcement is
+      provided to help you learn more about them. We encourage all voters
+      to read the full candidacy statements and related discussions on
+      <a href="http://mail.gnome.org/archives/foundation-list/";>foundation-list&#64;gnome&#46;org</a>.
+    </p>
+
+    <p>
+      When deciding who you should vote for, please carefully consider
+      the various tasks the Board of Directors must perform. This
+      <a href="../overview.html">overview</a> may be helpful. Keep in mind that
+      the board will make a number of important decisions and will also have to
+      perform many tasks which require a significant amount of time and effort
+      and the ability to work and communicate with other people, companies, and
+      the media. The board of directors will represent GNOME to companies and
+      the world in a very real way. It is a good idea to strive for a
+      well-balanced board consisting of people with various backgrounds,
+      skills, and perspectives.
+    </p>
+
+    <p>
+      Additional elections details can be found on the
+      <a href="http://foundation.gnome.org";>GNOME Foundation Web Site</a>.
+    </p>
+
+    <p>
+      If you have any questions, please send them to either
+      <a href="http://mail.gnome.org/archives/foundation-list/";>foundation-list&#64;gnome&#46;org</a>
+      or to us at <a
+      href="mailto:elections&#64;gnome&#46;org";>elections&#64;gnome&#46;org</a>.
+    </p>
+
+    <h2>Candidates for the GNOME Foundation Board of Directors</h2>
+
+    <ol>
+        <p>
+            <li><strong>Tobias Mueller</strong><br />
+                Affiliation: <em>SAP</em><br />
+                Full statement at <a 
href="https://mail.gnome.org/archives/foundation-announce/2014-May/msg00001.html";>https://mail.gnome.org/archives/foundation-announce/2014-May/msg00001.html</a>
+                <blockquote>
+                    I have served on the Board of the GNOME Foundation for two years now and as I
+                    enjoy my duties I would like to continue doing so. I promote Free Software and
+                    GNOME wherever I can. I am regularly speaking at conferences and making contact
+                    with new users, contributors, or other organisations that help us to advance
+                    GNOME, spread the word about Free Software, and ultimately make the world a
+                    better place.
+
+                    I am running for the Board because I think I can be an asset in making GNOME
+                    better. I think we need to restructure our Friends of GNOME programme to make it
+                    cost us much less time or upgrade our Bugzilla instance. If elected, I would try
+                    to steer resources towards those goals.
+                </blockquote>
+                <!- - Verified Member: 708 - ->
+            </li>
+        </p>
+
+        <p>
+            <li><strong>Oliver Propst</strong><br />
+            Affiliation: <em>None</em><br />
+            Full statement at <a 
href="https://mail.gnome.org/archives/foundation-announce/2014-May/msg00003.html";>https://mail.gnome.org/archives/foundation-announce/2014-May/msg00003.html</a>
+                <blockquote>
+                    I want to announce my candidacy for the GNOME Board of Directors. I
+                    have contributing as part of the Engagement Team since 2010, recently
+                    I  have been involved with the GUADEC 2015 Gothenburg bid and the
+                    Annual Report.
+
+                    I think that free software never have more important then now and if
+                    we as a community can get together and do the necessary work the
+                    greatest future of GNOME lay ahead of us.
+
+                    I have two years of experience of being on the non-for profit FSCONS
+                    board (FSCONS, the free software conference in Gothenburg that Karen
+                    keynoted last year). More info about me (including occupation) can be
+                    found here [1].
+                </blockquote>
+                <!- - Verified Member: 1024 - ->
+            </li>
+        </p>
+
+
+        <p>
+            <li><strong>Jean-François Fortin Tam</strong><br />
+            Affiliation: <em>None</em><br />
+            Full statement at <a 
href="https://mail.gnome.org/archives/foundation-announce/2014-May/msg00004.html";>https://mail.gnome.org/archives/foundation-announce/2014-May/msg00004.html</a>
+                <blockquote>
+                     I have been involved in various areas of GNOME
+                     since 2004 or so, including testing, triaging,
+                     marketing, mentoring, coding, public speaking and
+                     advocacy, UI/UX design, etc. I also graduated from
+                     business & management school, so I would like to
+                     put that background to good use. I'm keeping this
+                     description short & simple (as I suspect many of
+                     you will know me); you can learn more about me at
+                     http://jeff.ecchi.ca
+                </blockquote>
+                <!- - Verified Member: 799 - ->
+            </li>
+        </p>
+
+        <p>
+            <li><strong>Karen Sandler</strong><br />
+            Affiliation: <em>Software Freedom Conservancy</em><br />
+            Full statement at <a 
href="https://mail.gnome.org/archives/foundation-announce/2014-May/msg00005.html";>https://mail.gnome.org/archives/foundation-announce/2014-May/msg00005.html</a>
+                <blockquote>
+                    As promised when I left the position of Executive Director, I'd like
+                    to throw my hat in the ring for the Board of Directors. I think I can
+                    help bring continuity to the board (Stormy was incredibly helpful on
+                    the board when I started as ED). Also, as a lawyer I sometimes have an
+                    additionally useful perspective. I'm still doing volunteer work for
+                    GNOME both as pro bono counsel and as a volunteer on nonlegal matters
+                    for GNOME. I've been helping with fundraising, collecting on
+                    outstanding invoices and generally wherever I can.
+                </blockquote>
+                <!- - Verified Member: 506 - ->
+            </li>
+        </p>
+
+        <p>
+            <li><strong>Andrea Veri</strong><br />
+            Affiliation: <em>None</em><br />
+            Full statement at <a 
href="https://mail.gnome.org/archives/foundation-announce/2014-May/msg00006.html";>https://mail.gnome.org/archives/foundation-announce/2014-May/msg00006.html</a>
+                <blockquote>
+                    I've been part of the Foundation since late 2009 participating and
+                    contributing in many GNOME teams and fields. While it's usually common
+                    among applicants during elections (them being either political
+                    or private for a certain foundation or association) to promise or
+                    propose what they plan to do (in case of them being elected) for the
+                    next term, I'd like to focus on my involvement on the GNOME Project
+                    and my past work on the Foundation instead. This to let everyone know
+                    how deeply I've been caring about GNOME and the awesome community
+                    behind it.
+                </blockquote>
+                <!- - Verified Member: 774 - ->
+            </li>
+        </p>
+
+        <p>
+            <li><strong>anish patil</strong><br />
+            Affiliation: <em>Red Hat</em><br />
+            Full statement at <a 
href="https://mail.gnome.org/archives/foundation-announce/2014-May/msg00007.html";>https://mail.gnome.org/archives/foundation-announce/2014-May/msg00007.html</a>
+                <blockquote>
+                    This is the first time i have been running for any 
+                    election (you can't win over your friends) Since 
+                    last few years, i have been talking at various 
+                    conferences making awareness about Free Software and 
+                    GNOME, input methods and how one can make money from 
+                    free software.
+
+                    The reason i would like to run for this election is 
+                    because I think would be the right person to promote 
+                    GNOME specially in Asian region. If I get elected,i 
+                    would try to have more hackfests in Asia region and 
+                    try to raise fund for GNOME.
+
+                </blockquote>
+                <!- - Verified Member: 953 - ->
+            </li>
+        </p>
+
+
+        <p>
+            <li><strong>Emily Gonyer</strong><br />
+            Affiliation: <em>None</em><br />
+            Full statement at <a 
href="https://mail.gnome.org/archives/foundation-announce/2014-May/msg00008.html";>https://mail.gnome.org/archives/foundation-announce/2014-May/msg00008.html</a>
+                <blockquote>
+                    I'm interested in serving on GNOME's board of directors for the first                    
                                                             
+                    time, in order to help steer GNOME in a more open and community led                      
                                                             
+                    direction. It is my opinion that GNOME has strode too far towards a                      
                                                             
+                    corporate-driven project and away from its community-led roots. As of                    
                                                             
+                    now, GNOME is, in my opinion too beholden to a small handful of large                    
                                                             
+                    corporations which forces the project to ignore large swaths of our                      
                                                             
+                    users in preference to them. The end result being that GNOME has lost                    
                                                             
+                    a tremendous portion of its respect and goodwill in the wider free                       
                                                             
+                    software community. As a member of the GNOME board of directors I will                   
                                                             
+                    actively work against this tide and towards the more open,                               
                                                             
+                    community-driven project that GNOME once was and I hope will be again.
+                </blockquote>
+                <!- - Verified Member: 952 - ->
+            </li>
+        </p>
+
+        <p>
+            <li><strong>Marina Zhurakhinskaya</strong><br />
+            Affiliation: <em>Red Hat</em><br />
+            Full statement at <a 
href="https://mail.gnome.org/archives/foundation-announce/2014-May/msg00009.html";>https://mail.gnome.org/archives/foundation-announce/2014-May/msg00009.html</a>
+                <blockquote>
+                    I'm running for a second term on the board to lend my organizing skills and my interest 
in reaching out to 
+                    people to the Foundation and ensure its growth. We have an amazing community and high 
quality technology. My 
+                    interests as a board member are to enable face-to-face work, development in the areas of 
interest to donors 
+                    and advisory board members, and better external visibility of GNOME. Most recently, I've 
been helping 
+                    organize sponsorship materials and process for GNOME.Asia and GUADEC, and contacting 
prospective sponsors.
+                </blockquote>
+                <!- - Verified Member: 739 - ->
+            </li>
+        </p>
+
+        <p>
+            <li><strong>Ekaterina Gerasimova</strong><br />
+            Affiliation: <em>None</em><br />
+            Full statement at <a 
href="https://mail.gnome.org/archives/foundation-announce/2014-May/msg00010.html";>https://mail.gnome.org/archives/foundation-announce/2014-May/msg00010.html</a>
+                <blockquote>
+                    I am currently working towards the Foundation being able to be more
+                    transparent again with its finances, as it used to be. This will help
+                    our sponsors and supporters see how we are using their donations to
+                    further the goals of GNOME and will help the membership, especially
+                    the volunteers, to keep contributing to the project. The board will
+                    also need to keep making challenging decisions for the benefit of the
+                    Foundation, to make sure that our spending is in areas that are of
+                    most importance. I feel that I have done this well over the last year
+                    and would like to be able to keep doing it. In the upcoming year, I
+                    want to be able to offer our sponsors better value for their financial
+                    support.
+                </blockquote>
+                <!- - Verified Member: 867 - ->
+            </li>
+        </p>
+
+        <p>
+
+        <p>
+            <li><strong>Sriram Ramkrishna</strong><br />
+            Affiliation: <em>Intel</em><br />
+            Full statement at <a 
href="https://mail.gnome.org/archives/foundation-announce/2014-May/msg00011.html";>https://mail.gnome.org/archives/foundation-announce/2014-May/msg00011.html</a>
+                <blockquote>
+                    I'm running for a second term as Director of the GNOME Foundation.  I
+                    plan on continuing my efforts in outreach both inside of GNOME
+                    Foundation and to external.  There is still many things to do in order
+                    to make our platform and desktop attractive to everyone and I wish to
+                    continue talking about our story.  I can continue to be effective in
+                    leveraging what I've learned as Director as well as the extensive set
+                    of contacts I have as part of my day job and the open source project I
+                    am involved there as well.
+                </blockquote>
+                <!- - Verified Member: 193 - ->
+            </li>
+        </p>
+
+
+            <li><strong>David King</strong><br />
+            Affiliation: <em>Red Hat</em><br />
+            Full statement at <a 
href="https://mail.gnome.org/archives/foundation-announce/2014-May/msg00012.html";>https://mail.gnome.org/archives/foundation-announce/2014-May/msg00012.html</a>
+                <blockquote>                    
+                    My goal on the board is to be an effective director. As a visible portion of 
+                    the Foundation's role is providing financial support to its members, I think 
+                    that lots more work will be needed by the board to ensure that GNOME is 
+                    financially secure, and will remain so in the future. I think that my 
+                    experience on the travel committee will be helpful in making challenging 
+                    decisions regarding finances.
+                </blockquote>
+                <!- - Verified Member: 863 - ->
+            </li>
+        </p>
+
+
+
+
+    </ol>
+
+
+
+    <h2>Additional Elections-related Information</h2>
+
+    <p>
+      Note, that according to the
+      <a href="http://www.gnome.org/wp-content/uploads/2011/11/bylaws.pdf";>Bylaws</a> Article VIII Section 2d
+      there is a 2-person maximum on the number of people affiliated with any
+      one company that can be on the board: if more than 2 persons from one
+      company get elected, only the top 2 vote getters will get on.
+      You will be able to vote for up to 7 candidates of your choice, with no
+      restrictions, except that you cannot vote more than once for the same
+      candidate.
+    </p>
+
+    <p>
+      If you have any futher question, please consult the
+      <a href="rules.html">Rules for this election</a> or write to
+      <a href="mailto:elections gnome org">elections gnome org</a>.
+    </p>
+
+  </body>
+</html>
diff --git a/foundation.gnome.org/vote/2015/index.wml b/foundation.gnome.org/vote/2015/index.wml
new file mode 100644
index 0000000..25eed53
--- /dev/null
+++ b/foundation.gnome.org/vote/2015/index.wml
@@ -0,0 +1,65 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" 
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd";>
+<html>
+
+  <head>
+    <title>GNOME Foundation 2015 Elections</title>
+    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+    <meta name="author" content="Andrea Veri" />
+  </head>
+
+  <body>
+
+    <div id="content">
+    <h1>GNOME Foundation 2015 Elections</h1>
+
+    <p>
+      The GNOME Foundation Membership currently elects the Board of 
+      Directors each year for July, 1st. Any member can nominate 
+      themself to run in the elections. The overall elections process 
+      is overseen by the Membership and Elections Committee, which can 
+      be reached at <a
+      href="mailto:elections&#64;gnome&#46;org";>elections&#64;gnome&#46;org</a>.
+    </p>
+
+    <p>
+      The elections results from the 2015 Board of Directors elections 
+      will be archived here for public access.
+    </p>
+
+    <h2>2015 Elections Materials:</h2>
+    <ul>
+<!--
+        <li>
+            <a href="https://mail.gnome.org/archives/foundation-announce/2015-June/msg00000.html";>Election 
results announcement</a>
+        </li>
+        <li>
+            <a href="../../results.php?election_id=22">Detailed election results</a>
+        </li>
+        <li>
+            <a href="../../votes.php?election_id=22">List of all votes</a>
+        </li>
+        <li>
+            <a href="../../vote.php?election_id=22">Interface to vote</a>
+        </li>
+
+        <li>
+            <a href="candidates.html">List of candidates for Board of Directors</a>
+        </li>
+        <li>
+            <a href="http://www.gnome.org/foundation/membership/?date=2015-05-30";>List of registered 
voters</a>
+        </li> 
+-->
+    
+        <li>
+            <a href="rules.html">Elections Rules and Timeline</a> (webcal <a
+            href="webcal://vote.gnome.org/2015/timeline.ics">timeline</a>)
+        </li>
+    
+        <li>
+            <a href="../overview.html">Overview of the Board of Directors role</a>
+        </li>
+    </ul>
+
+  </body>
+</html>
diff --git a/foundation.gnome.org/vote/2015/mkical.py b/foundation.gnome.org/vote/2015/mkical.py
new file mode 100755
index 0000000..5dcd477
--- /dev/null
+++ b/foundation.gnome.org/vote/2015/mkical.py
@@ -0,0 +1,258 @@
+#!/usr/bin/env python
+'''
+This Python script creates a simple iCal file based on hardcoded events
+in this file.
+'''
+
+import calendar
+import datetime
+import logging
+import math
+import os
+import vobject
+
+
+#### Configure these variables
+YEAR = 2015
+CANDIDATES_OPENED_DATE    = (YEAR, 5,  6)
+CANDIDATES_CLOSED_DATE    = (YEAR, 5, 18)
+CANDIDATES_ANNOUNCED_DATE = (YEAR, 5, 21)
+VOTING_OPENED_DATE        = (YEAR, 5, 25)
+VOTING_CLOSED_DATE        = (YEAR, 6,  8)
+PRELIMINARY_RESULTS_DATE  = (YEAR, 6, 10)
+CHALLENGE_CLOSED_DATE     = (YEAR, 6, 17)
+
+
+
+### I'm sorry that these functions clutter your calendar-creating experience
+### Please scroll down a bit to edit the description texts
+
+#### Application Data
+def c(multilinestring):
+    '''
+    A helper functions which cleans up a multiline string, so that
+    it doesn't contain any newlines or multiple whitespaces
+    '''
+    stripped = [l.strip() for l in multilinestring.splitlines()]
+    ret = " ".join (stripped)
+    return ret
+    
+def d(year, month, day):
+    '''
+    Just a tiny wrapper around datetime.datetime to create a datetime object
+    '''
+    return datetime.date(year, month, day)
+
+
+
+CANDIDATES_OPENED = (
+    d(*CANDIDATES_OPENED_DATE),
+    'Announcements and list of candidates opens',
+    c("""If you are a member of the GNOME Foundation and are interested 
+    in running for election, you may nominate yourself by sending an 
+    e-mail to foundation-announce gnome org with your name, e-mail 
+    address, corporate affiliation (if any), and a description of why 
+    you'd like to serve, before
+    %s (23:59 UTC).""" % d(*CANDIDATES_CLOSED_DATE)) + '''
+    ''' + c("""    
+    You should also send a summary of your candidacy announcement 
+    (75 words or less) to elections gnome org  If you are not yet a 
+    GNOME Foundation member and would like to stand for election, 
+    you must first apply for membership and be accepted to be eligible 
+    to run. (You may, however, announce your candidacy prior to formal 
+    acceptance of your application;
+    should your application not be accepted, you will not be included in 
+    the list of candidates.)""") + '''
+    '''
+)
+
+CANDIDATES_CLOSED = (
+    d(*CANDIDATES_CLOSED_DATE),
+    'List of candidates closed',
+    CANDIDATES_OPENED[2] # Get the same text again
+)
+
+CANDIDATES_ANNOUNCED = (
+    d(*CANDIDATES_ANNOUNCED_DATE),
+    'List of candidates announced',
+    'You may now start to send your questions to the candidates'
+)
+
+VOTING_OPENED = (
+    d(*VOTING_OPENED_DATE),
+    'Instructions to vote are sent',
+    'Please read your email and follow these instructions and submit your vote by %s' % 
d(*VOTING_CLOSED_DATE)
+)
+VOTING_CLOSED = (
+    d(*VOTING_CLOSED_DATE),
+    'Votes must be returned',
+    'Preliminary results are announced on %s' % d(*PRELIMINARY_RESULTS_DATE)
+)
+
+
+PRELIMINARY_RESULTS = (
+    d(*PRELIMINARY_RESULTS_DATE),
+    'Preliminary results are announced',
+    'The preliminary results can be challenged until %s' % d(*CHALLENGE_CLOSED_DATE)
+)
+
+CHALLENGE_CLOSED = (
+    d(*CHALLENGE_CLOSED_DATE),
+    'Challenges to the results closed',
+    "If there weren't any challenges, preliminary results are valid"
+)
+
+
+
+
+def create_ical(eventlist):
+    '''Generates an ical stream based on the list given as eventlist.
+    The list shall contain elements with a tuple with a
+    (date, string, string) object, serving as date when the event takes place,
+    summary and description respectively.
+    '''
+    log = logging.getLogger('create_ical')
+
+    cal = vobject.iCalendar()
+    cal.add('method').value = 'PUBLISH'
+    cal.add('calscale').value = 'GREGORIAN'
+    cal.add('x-wr-timezone').value = 'UTC'
+    
+    for (timestamp, summary, description) in eventlist:
+        log.debug('creating %s, %s', timestamp, description)
+        vevent = cal.add('vevent')
+        vevent.add('dtstart').value = timestamp
+        vevent.add('dtend').value = timestamp + datetime.timedelta(1)
+        vevent.add('summary').value = summary
+        vevent.add('description').value = description
+    
+    stream = cal.serialize()
+    return stream
+
+
+def wraptext(s, width):
+    '''Wraps a string @s at @width characters.
+    
+    >>> wraptext('fooo', 2)
+    ['fo','oo']
+    '''
+    l = len(s)
+    nr_frames = int(math.ceil(float(l)/width))
+    print nr_frames
+    frames = []
+    for i in xrange(nr_frames):
+        start, end = i*width, (i+1) * width
+        frames.append(s[start:end])
+        # One could (and prolly should) yield that
+    return frames
+
+def ordinal(n):
+    n = int(n)
+    if 10 <= n % 100 < 20:
+        return str(n) + 'th'
+    else:
+       return  str(n) + {1 : 'st', 2 : 'nd', 3 : 'rd'}.get(n % 10, "th")
+                       
+
+def cal_for_month(month, events, width=80, year=datetime.datetime.now().year):
+    '''Generates a textual calendar for the @month in @year.
+    It will return a string with the calendar on the left hand side and the
+    events on the right hand side.
+    @events shall be a list with tuples: timestamp, summary, description.
+    
+    Returns a string with the calendar
+    '''
+    log = logging.getLogger('cal_for_month')
+
+    cal = calendar.TextCalendar()
+    calstrings = cal.formatmonth(year, month, 3).splitlines()
+
+    for (timestamp, summary, description) in events:
+        log.debug('creating %s, %s', timestamp, summary)
+        year, month, day = timestamp.year, timestamp.month, timestamp.day
+        maxwidth = max([len(cs) for cs in calstrings])
+        rightwidth = 80 - maxwidth
+        for i, line in enumerate(calstrings):
+            needles =      (" %d " % day,
+                           " %d\n" % day)
+            replacement = "(%d)" % day
+            # Find the day so that we can highlight it and add a comment
+            day_in_week = False
+            for needle in needles:
+                if needle in line+"\n":
+                    # k, this looks a bit weird but we have that corner 
+                    # case with the day being at the end of the line 
+                    # which in turn will have been split off
+                    day_in_week = True
+                    break # Set the needle to the found one
+            if day_in_week == False: # Nothing found, try next week
+                log.debug('Day (%d) not found in %s', day, line)
+                continue
+            else:
+                log.debug('Day (%d) found in %s', day, line)
+                new_line = (line+"\n").replace(needle, replacement).rstrip()
+                new_line += "   %s (%s)" % (summary, ordinal(day))
+                # Replace in-place for two events in the same week
+                # FIXME: This has bugs :-( 
+                calstrings[i] = new_line
+                    
+    return os.linesep.join(calstrings)
+
+def create_textcal(eventlist):
+    '''Generates a multiline string containing a calendar with the 
+    events written on the side
+    The list shall contain elements with a tuple with a
+    (date, string, string) object, serving as date when the event takes place,
+    summary and description respectively.
+    '''
+    log = logging.getLogger('textcal')
+    log.debug('Generating from %s', eventlist)
+    months = set(map(lambda x: x[0].month, eventlist))
+    year = set(map(lambda x: x[0].year, eventlist)).pop()
+    
+    final_cal = []
+    for month in months:
+        events = filter(lambda x: x[0].month == month, eventlist)
+        log.debug('Events for %d: %s', month, events)
+        month_cal = cal_for_month(month, events, year=year)
+        final_cal.append(month_cal)
+        
+    return os.linesep.join(final_cal)
+
+if __name__ == "__main__":
+    from optparse import OptionParser
+    parser = OptionParser("usage: %prog [options]")
+    parser.add_option("-l", "--loglevel", dest="loglevel", help="Sets the loglevel to one of debug, info, 
warn, error, critical", 
+                      default=None)
+    parser.add_option("-i", "--ical",
+                      action="store_true", dest="ical", default=False,
+                      help="print iCal file to stdout")
+    parser.add_option("-t", "--textcal",
+                      action="store_true", dest="tcal", default=False,
+                      help="print textual calendar to stdout")
+    (options, args) = parser.parse_args()
+
+    loglevel = {'debug': logging.DEBUG, 'info': logging.INFO,
+                'warn': logging.WARN, 'error': logging.ERROR,
+                'critical': logging.CRITICAL}.get(options.loglevel, logging.WARN)
+    logging.basicConfig( level=loglevel )
+    log = logging.getLogger()
+    
+    eventlist = [
+        CANDIDATES_OPENED,
+        CANDIDATES_CLOSED,
+        CANDIDATES_ANNOUNCED,
+        VOTING_OPENED,
+        VOTING_CLOSED,
+        PRELIMINARY_RESULTS,
+        CHALLENGE_CLOSED,
+    ]
+    
+    if not any([options.ical, options.tcal]):
+        parser.error("You want to select either ical or textcal output. See --help for details")
+    if options.ical:
+        ical = create_ical( eventlist )
+        print ical
+    if options.tcal:
+        tcal = create_textcal( eventlist )
+        print tcal
diff --git a/foundation.gnome.org/vote/2015/rules.wml b/foundation.gnome.org/vote/2015/rules.wml
new file mode 100644
index 0000000..7858fba
--- /dev/null
+++ b/foundation.gnome.org/vote/2015/rules.wml
@@ -0,0 +1,137 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" 
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd";>
+<html>
+
+  <head>
+    <title>GNOME Foundation 2015 Elections Rules</title>
+    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+  </head>
+
+  <body>
+
+    <div id="content">
+    <h1>Rules &amp; Timeline for the GNOME Foundation 2015 Elections</h1>
+
+    <h2>Elections Rules</h2> 
+
+    <ol>
+      <li>
+        See the <a 
href="https://git.gnome.org/browse/foundation-web/tree/foundation.gnome.org/about/bylaws.rst";>GNOME 
Foundation Bylaws</a> (<a href="https://www.gnome.org/foundation/governance/attachment/bylaws-2/";>PDF</a>) for
+        general rules.
+      </li>
+      <li>
+       There are 7 board slots that are to be filled during these elections.
+      </li>
+      <li>
+        Members of the GNOME Foundation as of
+        <!-- CANDIDATES_ANNOUNCED_DATE -->2015-05-21
+        
+        are eligible to vote in the elections. Members without voting rights
+        such as <a 
href="https://mail.gnome.org/archives/foundation-announce/2012-May/msg00015.html";>Emeritus members</a>
+        are not eligible to vote.
+        Anyone who has made a 
+        contribution to GNOME can apply for membership by completing the
+        <a href="https://foundation.gnome.org/membership/apply/";>application</a>.
+      </li>
+      <li>
+        Any eligible voter is eligible to be elected to the Board of Directors.
+        To announce your candidacy, send a message to
+        <a 
href="https://mail.gnome.org/archives/foundation-announce/";>foundation-announce&#64;gnome&#46;org</a>
+        with your full name, e-mail, corporate affiliation (if any), and a
+        description of your reasons for wanting to serve as a director.
+        Candidacies must be announced prior to
+        <!-- CANDIDATES_CLOSED_DATE -->2015-05-18, 23:59 UTC.
+        
+      </li>
+      <li>
+        All discussion related to the elections should be held on
+        <a href="https://mail.gnome.org/archives/foundation-list/";>foundation-list&#64;gnome&#46;org</a>.
+        Members are invited to ask questions to one or all candidates on that
+        list.
+      </li>
+      <li>
+       Instructions explaining how to vote will be sent via e-mail to all
+       eligible voters on
+       <!-- VOTING_OPENED_DATE -->2015-05-25,
+       
+       and votes must be returned by
+       <!-- VOTING_CLOSED_DATE -->2015-06-08, 23:59 UTC.
+      </li>
+      <li>
+        Votes will be held confidential during the elections, but an 
+        anonymized archive of all submitted votes will be made publicly 
+        accessible at its conclusion.
+      </li>
+      <li>
+        The GNOME Foundation Membership and Elections Committee is
+        responsible for counting the votes.
+        The committee serves at the pleasure of the GNOME Board of Directors
+        as per Section 9.1 of the bylaws.
+      </li>
+      <li>
+       The 7 candidates voted for most as counted by a <a 
href="http://mail.gnome.org/archives/foundation-list/2009-March/msg00012.html";>single transferable
+       vote system</a> will be elected, except that no more than two
+       individuals affiliated with any one corporation may be elected. Should
+       more than two of the top seven vote-getters be affiliated with the
+       same company, only the two with the most votes will be considered
+       elected. For a full definition of corporate affiliation, see the
+       <a href="https://wiki.gnome.org/Foundation/Charter";>GNOME Foundation charter</a>.
+      </li>
+      <li>
+        In the event of a tie for the final slot on the board, the Elections
+        Committee will schedule run-off elections as soon as possible. 
+      </li>
+      <li>
+        The Elections Committee will announce preliminary results as soon as
+        possible after the elections close, along with instructions on how to
+        access the votes archive and how to independently verify the vote
+        count.
+      </li>
+      <li>
+        Any eligible voter may challenge the preliminary results by e-mailing
+        <a
+        href="mailto:elections&#64;gnome&#46;org";>elections&#64;gnome&#46;org</a>
+        prior to
+        <!-- PRELIMINARY_RESULTS_DATE -->2015-06-17.
+        
+        The decision of the Elections Committee as
+        to any challenge shall be final. Once any challenges have been
+        resolved, the Elections Committee shall announce the final results.
+      </li>
+      <li>
+        Any questions regarding these procedures should be directed to the
+        Elections Committee by e-mail to <a
+        href="mailto:elections&#64;gnome&#46;org";>elections&#64;gnome&#46;org</a>.
+        The committee shall have the power to make any necessary changes or
+        clarifications to these rules at any point during the elections.
+      </li>
+    </ol>
+
+    <h2>Timeline</h2>
+    <p><small>(all deadlines are 23:59 UTC)</small></p> 
+    <ul>
+      <li>
+        <!-- CANDIDATES_OPENED_DATE -->2015-05-05: Announcements and list of candidates opens.
+      </li>
+      <li>
+        <!-- CANDIDATES_CLOSED_DATE -->2015-05-18: Last day to announce candidacies, submit summary 
statements.
+      </li>
+      <li>
+        <!-- CANDIDATES_ANNOUNCED_DATE -->2015-05-21: Final list of candidates.
+      </li>
+      <li>
+        <!-- VOTING_OPENED_DATE -->2015-05-25: Instructions mailed to eligible voters, voting begins.
+      </li>
+      <li>
+        <!-- VOTING_CLOSED_DATE -->2015-06-08: Voting closes.
+      </li>
+      <li>
+        <!-- PRELIMINARY_RESULTS_DATE -->2015-06-10: Preliminary results are announced.
+      </li>
+      <li>
+        <!-- CHALLENGE_CLOSED_DATE -->2015-06-17: Last day to challenge preliminary results.
+      </li>
+    </ul>
+
+  </body>
+</html>
diff --git a/foundation.gnome.org/vote/2015/timeline.ics b/foundation.gnome.org/vote/2015/timeline.ics
new file mode 100644
index 0000000..316f3ac
--- /dev/null
+++ b/foundation.gnome.org/vote/2015/timeline.ics
@@ -0,0 +1,79 @@
+BEGIN:VCALENDAR
+VERSION:2.0
+CALSCALE:GREGORIAN
+METHOD:PUBLISH
+PRODID:-//PYVOBJECT//NONSGML Version 1//EN
+BEGIN:VEVENT
+UID:20150503T231816Z-97342 spaceshuttle
+DTSTART;VALUE=DATE:20150506
+DTEND;VALUE=DATE:20150507
+DESCRIPTION:If you are a member of the GNOME Foundation and are interested
+  in running for election\, you may nominate yourself by sending an e-mail 
+ to foundation-announce gnome org with your name\, e-mail address\, corpora
+ te affiliation (if any)\, and a description of why you'd like to serve\, b
+ efore 2015-05-18 (23:59 UTC).\n     You should also send a summary of your
+  candidacy announcement (75 words or less) to elections gnome org  If you 
+ are not yet a GNOME Foundation member and would like to stand for election
+ \, you must first apply for membership and be accepted to be eligible to r
+ un. (You may\, however\, announce your candidacy prior to formal acceptanc
+ e of your application\; should your application not be accepted\, you will
+  not be included in the list of candidates.)\n    
+SUMMARY:Announcements and list of candidates opens
+END:VEVENT
+BEGIN:VEVENT
+UID:20150503T231816Z-41384 spaceshuttle
+DTSTART;VALUE=DATE:20150518
+DTEND;VALUE=DATE:20150519
+DESCRIPTION:If you are a member of the GNOME Foundation and are interested
+  in running for election\, you may nominate yourself by sending an e-mail 
+ to foundation-announce gnome org with your name\, e-mail address\, corpora
+ te affiliation (if any)\, and a description of why you'd like to serve\, b
+ efore 2015-05-18 (23:59 UTC).\n     You should also send a summary of your
+  candidacy announcement (75 words or less) to elections gnome org  If you 
+ are not yet a GNOME Foundation member and would like to stand for election
+ \, you must first apply for membership and be accepted to be eligible to r
+ un. (You may\, however\, announce your candidacy prior to formal acceptanc
+ e of your application\; should your application not be accepted\, you will
+  not be included in the list of candidates.)\n    
+SUMMARY:List of candidates closed
+END:VEVENT
+BEGIN:VEVENT
+UID:20150503T231816Z-38077 spaceshuttle
+DTSTART;VALUE=DATE:20150521
+DTEND;VALUE=DATE:20150522
+DESCRIPTION:You may now start to send your questions to the candidates
+SUMMARY:List of candidates announced
+END:VEVENT
+BEGIN:VEVENT
+UID:20150503T231816Z-48890 spaceshuttle
+DTSTART;VALUE=DATE:20150525
+DTEND;VALUE=DATE:20150526
+DESCRIPTION:Please read your email and follow these instructions and submi
+ t your vote by 2015-06-08
+SUMMARY:Instructions to vote are sent
+END:VEVENT
+BEGIN:VEVENT
+UID:20150503T231816Z-43948 spaceshuttle
+DTSTART;VALUE=DATE:20150608
+DTEND;VALUE=DATE:20150609
+DESCRIPTION:Preliminary results are announced on 2015-06-10
+SUMMARY:Votes must be returned
+END:VEVENT
+BEGIN:VEVENT
+UID:20150503T231816Z-60213 spaceshuttle
+DTSTART;VALUE=DATE:20150610
+DTEND;VALUE=DATE:20150611
+DESCRIPTION:The preliminary results can be challenged until 2015-06-17
+SUMMARY:Preliminary results are announced
+END:VEVENT
+BEGIN:VEVENT
+UID:20150503T231816Z-57635 spaceshuttle
+DTSTART;VALUE=DATE:20150617
+DTEND;VALUE=DATE:20150618
+DESCRIPTION:If there weren't any challenges\, preliminary results are vali
+ d
+SUMMARY:Challenges to the results closed
+END:VEVENT
+X-WR-TIMEZONE:UTC
+END:VCALENDAR
+
diff --git a/foundation.gnome.org/vote/2015/voting-instructions.txt 
b/foundation.gnome.org/vote/2015/voting-instructions.txt
new file mode 100644
index 0000000..35b9218
--- /dev/null
+++ b/foundation.gnome.org/vote/2015/voting-instructions.txt
@@ -0,0 +1,32 @@
+Dear %(firstname)s %(lastname)s,
+
+The election of the GNOME Foundation Board will soon be open.
+
+Voting will run from 2015-05-25 (Monday) until 2015-06-08, 23:59 UTC.
+
+To vote, please go to http://vote.gnome.org/vote.php?id=18
+and follow the instructions there.
+
+A list of candidates and their reasons for running is available at
+https://vote.gnome.org/2015/candidates.html
+
+When instructed to do so, enter the following details:
+
+   E-mail: %(email)s
+   Vote token: %(token_or_last_renewed_on)s
+
+The election has 4 steps - first, you must identify yourself using the 
+voting token above. Then select your preferred candidates in order of 
+preference. A third step will show you your choice, and ask you to 
+confirm or return to the previous step. Finally, after confirming your 
+choice, a unique identifier will be given to you which will allow you to 
+verify after the election that your vote was counted correctly. To ensure 
+anonymity, no link will be kept between this token and your identifiers, 
+so please keep this token safe. Once you have voted, you will not be able 
+to vote again.
+
+Thank you for your vote!
+
+Regards,
+  Tobias Mueller
+  on behalf of the GNOME Membership and Elections Commitee



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]