Git Product home page Git Product logo

figtree's Introduction

FigTree

Build Status

Continuous integration service for building a PPT from all of the lab members' weekly progress figures.

Designed by @danhagen and @bc for ValeroLab

Challenge

How do we get a large lab of >8 students in sync about their research weekly, and how do we establish a culture of discipline with producing visible progress in our Ph.D.'s?

Approach

Social pressure can drive accountability for projects, so we decided to host a weekly figure review with the lab, where we can show one figure or image of our last week's progress, creating a visual topic for discussion.

UX

  1. See this reminder on Slack on Monday, and upload your figure to the google drive folder.
    Pasted_Image_9_20_19__2_59_PM

  2. On the day of the lab meeting, lab members get an auto-generated PPT that combines the draft agenda and all figures from all lab members.
    Pasted_Image_9_20_19__2_59_PM

Result

image

Technical Overview

Travis-CI is set up with a 1x/wk CRON job that authenticates & downloads the contents of the Figures Drive folder, computes a PPT, uploads the results to the drive, clears the queue, and pings Slack via a webhook with the direct link to the PPT for download (link is mobile friendly too). Credentials and drive links are set as private environment variables within the Travis-CI GUI. A Zapier CRON job pings a Slack channel webhook to post the upload link as a reminder 1x/wk.

Languages

Python, Bash

Install

Put this one in Travis-CI

export DRIVE_FOLDER="https://drive.google.com/..."
export DRIVE_QUEUE="https://drive.google.com/..."
export SLACK_API="https://hooks.slack.com/services/..."
CREDENTIALS='{"access_token": ...'
echo $CREDENTIALS >> mycreds1.txt 

Where the credentials are the access token for the Google Drive Python API.

python3 download_from_gdrive.py
python3 build_weekly_ppt.py >> temp_output.txt
python3 upload_to_gdrive.py

Scripts ran successfully if they return with 0. image

figtree's People

Contributors

danhagen avatar bc avatar

Stargazers

 avatar

Watchers

James Cloos avatar Taegyum Kim avatar Francisco Valero-Cuevas avatar  avatar  avatar

figtree's Issues

DKIM and SPF auth failure

image

Failed auth is a feature that could incorrectly mark emails as spam. Without a fix to this, ensuring delivery & read requires all members to add the Valero email as a contact

Original EML payload (click to expand)
Delivered-To: [email protected]
Received: by 2002:a67:d499:0:0:0:0:0 with SMTP id g25csp1940643vsj;
        Sat, 2 May 2020 08:29:08 -0700 (PDT)
X-Google-Smtp-Source: APiQypIrPQBpssklQn8PdDXlylQfAO5KphmnNgWGva2B6xK4dbUcz15B5JsRObwTWrCwOY3dk1ad
X-Received: by 2002:a25:c705:: with SMTP id w5mr15593381ybe.406.1588433348216;
        Sat, 02 May 2020 08:29:08 -0700 (PDT)
ARC-Seal: i=1; a=rsa-sha256; t=1588433348; cv=none;
        d=google.com; s=arc-20160816;
        b=0cc/gdOauhaakhroV0Sfsrkuctgr7WfVGb21XpjRooGCtxT49kLe+Z0Zj8N5fO5vV1
         1LXQqeX8oGKpDiA8zrkfW9uOlGEs7898rMyF+3CUfSgb5ajexaM2X4nPFfeVE32IcAqB
         fwZ8taxeLijCwJ7dlYmE8Eo9QWqSAMQGQLFPxz9Qxczj/ylcQi8zh2u1hC3wDSqTXlu7
         HEAob7iJXvuFITYvG3j5iMlhj5eK+7//sBfeB0+lYYmSKU9s4rJuGw9GKJdP0ff0iDGN
         RH+rsEHymSWRZz8yqGXPWY44HziGgXEn3L+Zsyev8er8KV55qPY18lT2IEKcBa1tYdiZ
         YC+w==
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816;
        h=mime-version:cc:to:from:subject:date:message-id:dkim-signature;
        bh=YLENP31+hfrTLQWN2mQOM791zdqkfp4v5ucgrWkkoak=;
        b=qrpvLRrIyoqogX39mtxhSNuwLXWHoxMAjoDlluLYI8JwtdSMeApiglzZiW9lFSjFcb
         AbpeJdyaTYylKGGwWMTqoAYmm5cmitVTJU1wKo+TYXyp/ESF4VoHE//pafFWOB96SNFy
         exo9QpOoJuzzVWVg9AlnrdgsFXh7XS1bjB0H7LPF2GJJAbTbOW3Eut5IE5B87WBN8es7
         Cn4U4fIFsuII9qZWgkW+iuuo5wLTPAGSnz50cVEfGqRW00PpsbgFr4/+3HU4wHfAU+a2
         sfYyMB332JYQWVFeBIdbIt+sBuSTueVckh4eXF60ravEjCL/ersdCziCI++Y5Mnh4oAq
         iqEA==
ARC-Authentication-Results: i=1; mx.google.com;
       dkim=neutral (body hash did not verify) [email protected] header.s=20161025 header.b=Vg2x1Jya;
       spf=softfail (google.com: domain of transitioning [email protected] does not designate 67.231.157.15 as permitted sender) [email protected];
       dmarc=fail (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com
Return-Path: <[email protected]>
Received: from mx0b-00164701.pphosted.com (mx0b-00164701.pphosted.com. [67.231.157.15])
        by mx.google.com with ESMTPS id j84si5596621ybb.199.2020.05.02.08.29.07
        for <[email protected]>
        (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128);
        Sat, 02 May 2020 08:29:08 -0700 (PDT)
Received-SPF: softfail (google.com: domain of transitioning [email protected] does not designate 67.231.157.15 as permitted sender) client-ip=67.231.157.15;
Authentication-Results: mx.google.com;
       dkim=neutral (body hash did not verify) [email protected] header.s=20161025 header.b=Vg2x1Jya;
       spf=softfail (google.com: domain of transitioning [email protected] does not designate 67.231.157.15 as permitted sender) [email protected];
       dmarc=fail (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com
Received: from pps.filterd (m0087755.ppops.net [127.0.0.1])
	by mx0b-00164701.pphosted.com (8.16.0.42/8.16.0.42) with SMTP id 042FNhBc116973
	for <[email protected]>; Sat, 2 May 2020 08:29:07 -0700
Authentication-Results: usc.edu;
	spf=pass [email protected];
	dkim=pass header.s=20161025 header.d=gmail.com
Received: from mail-qv1-f72.google.com (mail-qv1-f72.google.com [209.85.219.72])
	by mx0b-00164701.pphosted.com with ESMTP id 30s5j69tft-1
	(version=TLSv1.2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128 verify=NOT)
	for <[email protected]>; Sat, 02 May 2020 08:29:07 -0700
Received: by mail-qv1-f72.google.com with SMTP id z14so13232135qvv.6
        for <[email protected]>; Sat, 02 May 2020 08:29:07 -0700 (PDT)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
        d=gmail.com; s=20161025;
        h=mime-version:message-id:date:subject:from:to:cc;
        bh=oBSzocFyhFO+8qVN6Jr3gVd7tMhcqzNayg0Arp7TcUs=;
        b=Vg2x1JyafUc7ABbwQWjCw+bxMIuTg47p2xIxfOpsCFI/NHpP1buf6J0xUc3XrJO7c0
         JKfjB5S76KsV2vS3hKCDXGtPvC4QMbpdypsTig2BmldqCJUVKIlH/NoB3nSTxIwJVm/j
         eyMCHEGy5YLbL3eedLG8njSbwTJaZstDbEk3hXafL7SnSgIQ07wwJQ3+jO0mZPiH8gNa
         v02nfhe2InjEIu3WLWG5gu7G4Xa/hMjSy9yt8cLYejCJRBSNnL1oAiUUy6oDcYHWiIj1
         RNyxSKc3RcBAmXgY0ldaAzY0GJq23u/NwKicH9l0JUHDlrNYx1FbRZR2pHk6OBupq63j
         SMOA==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
        d=1e100.net; s=20161025;
        h=x-gm-message-state:mime-version:message-id:date:subject:from:to:cc;
        bh=oBSzocFyhFO+8qVN6Jr3gVd7tMhcqzNayg0Arp7TcUs=;
        b=OQrzyPxGQHlxr9XjGkleNRe2+SRTCl1/paa1hCzfp+sot69KrpJLgVSRCDeHMrYqQF
         bO7fmfDy8c5Evr0yZ3ProV8wRW/HRCFHi7SdAr1f8yTOCowtGcfTz5R6/LLI4uuUTZWR
         B7Jm1iyoJMjBk7jDgf2//a0UNQKdkDCmRRWDYvFPasQNDntgPOD5f8BeqJo8+m9/njX8
         GnfbzGaRdyOczOVddSnPaIAd0hRduT1J3BwBTWFvLbI6t5w7tzdFEgiVImEHNRvk5VLQ
         UVAYm4Ek+YQ9pL7g7oi1nhFY9tGEaPFlARFJnd5/UuU7pX3IdJn4tnk4Kxt4vcRbXvJA
         vrWQ==
X-Gm-Message-State: AGi0Pub9RxwouNlq6YE07UHilPW385gcMDWEEMFsv9hVJnYgdwj6BiUr
	PgwritXzcYBlFpvTQLfW/XlAihZp8Q==
X-Received: by 2002:a0c:c2d4:: with SMTP id c20mr5798439qvi.246.1588433347038;
 Sat, 02 May 2020 08:29:07 -0700 (PDT)
Message-ID: <[email protected]>
Date: Sat, 02 May 2020 15:29:07 +0000
Subject: [--- PaperTracker ---] Brian Requests Your Help
From: [email protected]
To: [email protected]
Cc: [email protected]
Content-Type: multipart/alternative; boundary="0000000000006654c705a4abf5b7"
X-CLX-Response: 1TFkXGxIYEQpMehcZHxkRCllEF2BBEmhof2cacxsaEQpYWBdpARJrQUZJX1J 4eBEKeE4XY1Nja3sTWH4aX14RCnlMF2JLemJ5U3hhQRhAEQp5QxdtG15Ya1JIaR9wSREKQ0gXBx gZExEKQ1kXBxkaEQpDSRcaBBoaGhEKWU0XZ2ZyEQpZSRcacRoQGncGGxwYcR4bEBp3BhgaBhoRC
 lleF2xseREKSUYXX1lJSUtHWl9ZdUJFWV5PThgRCkNOF3UYe1sSf2dmTH9pH2BTbntyYR95XVt/ fnNee3JOYHxCEQpYXBcfBBoEGBoYBRsaBBsbGgQfGgQbHhsQGx4aHxoRCl5ZF3weUHBPEQpNXBc YGB8RCkxaF2hpTU1rEQpFWRdva2sRCkxGF29ra2traxEKQk8XbVJzEkFbaUQTHkwRCkNaFxgaEw
 QSHwQYGxMEHRgRCkJeFxsRCkRJFxsRCkJcFxsRCl5OFxsRCkJLF2NTY2t7E1h+Gl9eEQpCSRdjU 2NrexNYfhpfXhEKQkUXaQESa0FGSV9SeHgRCkJOF2NTY2t7E1h+Gl9eEQpCTBdpARJrQUZJX1J4 eBEKQmwXaQESa0FGSV9SeHgRCkJAF2xQUEZ+bGdSfh5JEQpCWBdhU2cSfQFueFsTExEKTV4XGxE
 KWlgXGREKWUsXExoYExEKcGgXY1scTVJkfB5paR8QGRoRCnBoF21jclxHG01NUENBEBkaEQpwaB dvGxlSUnBBHnlMSBAZGhEKcGgXaXpgQR9zcEtjR2UQGRoRCnBoF2YbSR5lZFNAHh5nEBkaEQpwf RdlSExGWH9cTVxOQxAZGhEKcH0XemNTGGtieltPX1IQGRoRCnB/F29EYVASE38bHBJ+EBIYEQpw
 XxdoaXhveHBnQUZMUhAZGhEKcH8XYHBkUGAYSFBQR04QGx8cEQpwXxd6EkBlfE5rYn9NaxAbHBM RCm1+FxsRClhNF0sRIA==
X-CLX-Shades: MLX
MIME-Version: 1.0
X-Proofpoint-SPF-Result: pass
X-Proofpoint-SPF-Record: v=spf1 redirect=_spf.google.com
X-Proofpoint-Virus-Version: vendor=fsecure engine=2.50.10434:6.0.138,18.0.676
 definitions=2020-05-02_08:2020-05-01,2020-05-02 signatures=0
X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 bulkscore=0 suspectscore=0
 adultscore=0 priorityscore=353 spamscore=0 mlxlogscore=542 mlxscore=0
 phishscore=0 impostorscore=0 malwarescore=0 lowpriorityscore=0
 clxscore=182 classifier=spam adjust=0 reason=mlx scancount=1
 engine=8.12.0-2003020000 definitions=main-2005020137

--0000000000006654c705a4abf5b7
Content-Type: text/plain; charset="UTF-8"; format=flowed; delsp=yes
Content-Transfer-Encoding: Quoted-printable

Hey Francisco!

Brian has requested your help with his project -- Dissertation Chapter 4.=
=20=20
He has listed that he needs help with:


Review Dissertation Submission

For your convenience, the following link to the relevant material has been=
=20=20
provided.

Thanks!

- ValeroLabBot

This reminder was generated by this spreadsheet:
https://urldefense.com/v3/__https://docs.google.com/spreadsheets/d/1x9EDjZl=
FPZwZKWWwCVcUKeku59khjqDi70Dh-_vBPio/edit__;!!LIr3w8kk_Xxm!5vp-y2qkEEhzM50_=
QppmfiznyWDBpjIa1vWIGnppCU_GLv6gUIOAqxYhktxtG3sS$=20

--0000000000006654c705a4abf5b7
Content-Type: text/html; charset="UTF-8"
Content-Transfer-Encoding: Quoted-printable

Hey Francisco! <br />
<br />Brian has requested your help with his  project -- Dissertation Chapt=
er 4. He has listed that he needs help with:<br />
<ul><li>Review Dissertation Submission </li></ul>
<br /> For your convenience, the following <a href=3D"https://urldefense.co=
m/v3/__https://www.overleaf.com/7249353826qyjqxvqqgfkr__;!!LIr3w8kk_Xxm!5vp=
-y2qkEEhzM50_QppmfiznyWDBpjIa1vWIGnppCU_GLv6gUIOAqxYhkvKp7VIa$">link</a> to=
 the relevant material has been provided.<br />
<br />Thanks!<br />
<br /> - ValeroLabBot <br />
<br />This reminder was generated by this spreadsheet: <br />
https://docs.google.com/spreadsheets/d/1x9EDjZlFPZwZKWWwCVcUKeku59khjqDi70D=
h-_vBPio/edit=

--0000000000006654c705a4abf5b7--

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.