pythonindia / inpycon2019-tasks

PyCon India 2019 Tasks and Coordination
12 stars 8 forks source link

Decide on approaches to increase students participation #34

Closed sharmi closed 4 years ago

zerothabhishek commented 5 years ago

If the CFP is any indicator, student participation (especially research students) is fairly good, better than many conferences.

We should have some sense of an appropriate proportion to benchmark against, but I think on all reasonable benchmarks, the numbers will look good already.

bravegnu commented 5 years ago

As @zerothabhishek rightly pointed there is good student participation, as attendees. As for speakers, I think the CFP reviewers have to operate without bias, and have to evaluate the talk based on its content and speakers capabilities irrespective of their age.

But one problem I saw w.r.t students, that was not addressed in PySangamam and PyCon India 2018, was that attendees wanted participation certificate that they can produce in their colleges for various reasons, including reimbursement of ticket fees. It will be better if we can start with this earlier on, and generate participation certificates for all attendees, that they can download from the website after the conference. We just need to create a template and write a script to generate the certificates, with data from the registration desk.

pradyunsg commented 5 years ago

Hey, I'm a student! I can confirm what @bravegnu is saying.

We need to produce proof at our college, regarding attendance at the events out of college, and they do not consider a paper ID cards as proof of attendance. Participation certificates are definitely very helpful on this front, since there's a standard process for handling students who attend certificated events (eg. almost always attendance is automatically granted for students, for the days of the event + travel days).

FWIW, I'd suggest not putting the generation template in a publicly accessible location (like a public github repo) since that might result in fake certificate generation. BTW, I have a few scripts already for certificate generation (for college events we conducted) so lemme know if you'd want to build upon an existing script.

sharmi commented 5 years ago

Sure Pradyun, That would be most helpful. Is it uploaded somewhere that we can access?

On Sun, Apr 28, 2019 at 2:32 PM Pradyun Gedam notifications@github.com wrote:

Hey, I'm a student! I can confirm what @bravegnu https://github.com/bravegnu is saying.

We need to produce proof at our college, regarding attendance at the events out of college, and they do not consider a paper ID cards as proof of attendance. Participation certificates are definitely very helpful on this front, since there's a standard process for handling students who attend certificated events (eg. almost always attendance is automatically granted for students, for the days of the event + travel days).

FWIW, I'd suggest not putting the generation template in a publicly accessible location (like a public github repo) since that might result in fake certificate generation. BTW, I have a few scripts already for certificate generation (for college events we conducted) so lemme know if you'd want to build upon an existing script.

— You are receiving this because you authored the thread. Reply to this email directly, view it on GitHub https://github.com/pythonindia/inpycon2019-tasks/issues/34#issuecomment-487359999, or mute the thread https://github.com/notifications/unsubscribe-auth/AAKPKYWBNS7LHGD5RSEAZCTPSVR4HANCNFSM4HFEWU7Q .

pradyunsg commented 4 years ago

@sharmi Whoops! I'd missed your comment. Here's at least one such script, provided inline:

import os
import json

import requests
from PIL import Image, ImageFont, ImageDraw

URL = "http://csi-codespace.herokuapp.com/data.json"

# Customize to place properly in certificate.
FONT_SIZE = 84
HEIGHT = 1375
LEFT = 1270
CENTER = 2000

def generate_for_record(blank, record, font):
    image = blank.copy()
    drawer = ImageDraw.Draw(image)

    msg = record["name"]

    w, h = drawer.textsize(msg, font=font)
    # coordinate = (CENTER - w / 2, HEIGHT)
    coordinate = (LEFT, HEIGHT)
    drawer.text(coordinate, msg, font=font, fill="white")

    return image

def load_data():
    r = requests.get(URL)
    content = r.text
    print("Loaded the entries.")

    for record in json.loads(content):
        if record["fields"]["payment_status"] != "success":
            continue
        elif record["fields"]["payment_fee"] != 100:
            continue
        yield record["fields"]

    # import json

    # with open("./data.json") as f:
    #     for item in json.load(f)[290:292]:
    #         yield item["fields"]

def main():
    import sys
    if len(sys.argv) > 1:
        name = sys.argv[1]
        basename = name.split(".", 1)[0]
    else:
        raise Exception("Expected an argument.")

    base_img = Image.open(name)
    font = ImageFont.truetype("font-big-john.otf", FONT_SIZE)
    print("Loaded the font.")

    path = "generated/{basename}/png/".format(basename=basename)
    if not os.path.exists(path):
        os.makedirs(path)

    for i, record in enumerate(load_data()):
        fname = path + record["email"] + ".png"

        if os.path.exists(fname) and False:
            print("{}: Skipped for {}".format(i, record["email"]))
        else:
            ticket = generate_for_record(base_img, record, font)
            ticket.save(fname)

            print("{}: Generated for {}".format(i, record["email"]))

    # mogrify -format pdf -path generated/pdf/ generated/png/*.png

if __name__ == '__main__':
    main()