diff --git a/.github/dependabot.yml b/.github/dependabot.yml
new file mode 100644
index 000000000..74b70987b
--- /dev/null
+++ b/.github/dependabot.yml
@@ -0,0 +1,19 @@
+# To get started with Dependabot version updates, you'll need to specify which
+# package ecosystems to update and where the package manifests are located.
+# Please see the documentation for all configuration options:
+# https://docs.github.com/code-security/dependabot/dependabot-version-updates/configuration-options-for-the-dependabot.yml-file
+
+---
+version: 2
+updates:
+ # When the Dependabot ignore-manifests issue is fixed, we can just ignore the
+ # /lessons directory only:
+ # https://github.com/dependabot/dependabot-core/issues/4364
+ - package-ecosystem: "pip"
+ directory: "/scripts"
+ schedule:
+ interval: "weekly"
+ - package-ecosystem: "github-actions"
+ directory: "/.github"
+ schedule:
+ interval: "weekly"
diff --git a/.github/workflows/jekyll-gh-pages.yml b/.github/workflows/jekyll-gh-pages.yml
new file mode 100644
index 000000000..9b5ff989c
--- /dev/null
+++ b/.github/workflows/jekyll-gh-pages.yml
@@ -0,0 +1,64 @@
+---
+name: Deploy Jekyll with GitHub Pages dependencies preinstalled
+
+on:
+ push:
+ branches: ["gh-pages"]
+ workflow_dispatch:
+
+permissions:
+ contents: read
+
+# Allow only one concurrent deployment, skipping runs queued between the run in-progress and latest queued.
+# However, do NOT cancel in-progress runs as we want to allow these production deployments to complete.
+concurrency:
+ group: "pages"
+ cancel-in-progress: false
+
+jobs:
+ build:
+ runs-on: ubuntu-latest
+ steps:
+ - name: Checkout
+ uses: actions/checkout@v4
+
+ # Generate event posts by reading them from the UofTCoders/Events issues.
+ - name: Set up Python
+ uses: actions/setup-python@v5
+ with:
+ python-version: 3.12
+ - name: Install pipenv
+ run: pip install pipenv
+ - name: Publish events
+ working-directory: scripts
+ env:
+ GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
+ run: |
+ pipenv install
+ pipenv run publish_events
+
+ - name: Setup Pages
+ uses: actions/configure-pages@v4
+ - name: Build with Jekyll
+ uses: actions/jekyll-build-pages@v1
+ with:
+ source: ./
+ destination: ./_site
+ - name: Upload artifact
+ uses: actions/upload-pages-artifact@v3
+
+ deploy:
+ permissions:
+ contents: read
+ pages: write
+ id-token: write
+
+ environment:
+ name: github-pages
+ url: ${{ steps.deployment.outputs.page_url }}
+ runs-on: ubuntu-latest
+ needs: build
+ steps:
+ - name: Deploy to GitHub Pages
+ id: deployment
+ uses: actions/deploy-pages@v4
diff --git a/.gitignore b/.gitignore
index c2487f29a..803b49eb0 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1 +1,9 @@
+_site/
+
+# Google calendar secret key
client_secret.json
+
+.Rproj.user
+_emails/
+.Rbuildignore
+
diff --git a/.here b/.here
new file mode 100644
index 000000000..e69de29bb
diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md
new file mode 100644
index 000000000..a17266918
--- /dev/null
+++ b/CONTRIBUTING.md
@@ -0,0 +1,138 @@
+---
+layout: page
+title: Contributing to UofT Coders
+---
+Welcome to the Contributing guideline for UofT Coders. Thanks for taking the time to contribute!
+
+The following is a set of guidelines for contributing to the UofT Coders community, whether it be by teaching a lesson, fixing the website, helping to plan and organize our various events, or taking on a leadership role.
+
+### Table of Contents
+
+1. [About UofT Coders](#about-uoft-coders)
+ - [Code of Conduct](#code-of-conduct)
+
+2. [How You Can Contribute](#how-you-can-contribute)
+ - [Leading a Lesson](#leading-a-lesson)
+ - [Creating the Content](#creating-the-content)
+ - [Teaching in Class](#teaching-in-class)
+ - [Fixing and Updating the Website](#fixing-and-updating-the-website)
+ - [Other Ways to Get Involved](#other-ways-to-get-involved)
+
+-----
+# About UofT Coders
+
+UofT Coders was formed to share and learn about coding techniques and
+best practices for computing and analysis in research. We hold weekly sessions
+in the format of code-alongs, coworking sessions or journal clubs/discussions.
+To see our previous and upcoming events, you can visit our [Events repo](https://github.com/UofTCoders/Events/issues) or [website](https://uoftcoders.github.io/studyGroup/#events).
+To learn more about our group, you can read our [constitution](https://github.com/UofTCoders/council/blob/master/Constitution.md).
+
+## Code of Conduct
+
+We adhere to a [Code of Conduct](https://github.com/UofTCoders/studyGroup/blob/gh-pages/codeOfConduct.md)
+and by participating, you agree to also uphold this code. Please report any
+unacceptable behaviour to uoftcoders@gmail.com. If you feel that a member of
+the executive team has been violating the Code of Conduct, please email
+groups.officer@utoronto.ca to report.
+
+-----
+# How You Can Contribute
+
+## Leading a Lesson
+
+The Mozilla Study Group
+handbook [**here**](https://mozillascience.github.io/studyGroupHandbook/lessons.html#reuse)
+and [**here**](https://mozillascience.github.io/studyGroupHandbook/event-types.html#workalong)
+has several very good points about making a lesson. This section summarizes bits
+of the handbook, but also adds pieces that are missing from it. Check out the
+[lesson bank too](https://github.com/mozillascience/studyGroupLessons/issues).
+
+### Creating the Content
+
++ **Minimal use of slides**: The most effective sessions are ones that are very
+hands-on. We strongly encourage [*live-coding*](#more-on-live-coding) as a
+teaching method; it's best to keep slides to a minimum or avoid them completely.
++ **Keep in mind beginners**: Make few assumptions about the knowledge of the audience,
+unless specified that this is an intermediate level lesson, requiring prior knowledge.
+Keep it simple. Don't attempt to cover too much material in a single session.
++ **Use Built-in Datasets**: Use built-in sample datasets instead of requiring
+attendees to download files.
++ **Code Review**: The lesson code is posted to GitHub along with a pull request to
+[UofTCoders/studyGroup](https://github.com/UofTCoders/studyGroup) repository at
+least 1 full day prior to the lesson date to allow for review.
+See [Submitting a Pull Request](https://uoftcoders.github.io/studyGroup/pull-request/)
+
+#### More on Live-Coding
+
+Live-coding is a hands-on method of teaching coding to a group in which the instructor
+shares their screen with the group and types all commands on their computer while the
+group follows along. Live-coding is a very effective teaching technique: it forces the
+instructor to go slowly and ensures that participants get to try out every command
+being used. It allows learners to experience common errors themselves and debug them
+in a supportive environment, to explore variations on material as they go, and to
+immediately check their understanding by trying things hands-on.
+
+Live-coding is a technique used by [Software Carpentry](https://software-carpentry.org/about/).
+Software Carpentry has lots of great resources explaining the why and how of live-coding:
++ [10 tips and tricks for instructing and teaching by means of live coding](https://software-carpentry.org/blog/2016/04/tips-tricks-live-coding.html)
++ The Software Carpentry [instructor training manual](http://carpentries.github.io/instructor-training/)
+includes many resources about programming education.
+
+To see live-coding in action in the UofT Coders group, watch a portion of the
+[Intro to R livestream](https://www.youtube.com/watch?v=b74V54VFL98) taught by
+[Ahmed](https://github.com/aays), or look over the code that was covered in an
+[R lesson](https://github.com/UofTCoders/studyGroup/blob/gh-pages/lessons/r/intro/Intro_R_Sept21.R)
+created by [Luke](https://github.com/lwjohnst86).
+
+### Teaching in Class
+
++ **Arrive early**: Come 10 minutes before the lesson starts to set up.
++ **Introduce yourself**: Start by introducing yourself and perhaps why you're teaching this lesson.
++ **Stay on time**: Keep mindful of the time, lessons are 50-60 minutes long.
++ **Start from the very beginning**: Briefly explain all aspects of the what you are doing when live-coding including:
+ - show how to open the program or IDE (e.g. RStudio/Jupyter Notebook/Shell or Terminal/etc)
+ - how to run code (e.g. press `Shift+Enter` in the Jupyter Notebook)
+ - if this is an intro lesson, explain the concept of an IDE or shell
+ - importing modules and packages such as `import numpy as np` or `library(dplyr)`
+
++ **Live-coding**: Use of slides is minimal, majority of lesson involves writing the code WITH the audience during the lesson
++ **Stay on topic**: There is only one hour, if a question arises that is off-topic, you can always suggest discussing afterwards.
++ **Check in with participants**: We distribute coloured sticky notes to each
+participant so that they can flag problems with one colour and success with
+another colour. Use these indicators to stay aware of your pacing and where the group is at,
+and/or verbally ask how everyone is doing and leave time for questions.
+
+-----
+
+## Fixing and updating the website
+
+There are two ways of fixing or adding to the website, either by:
+
+- Creating an [Issue](https://github.com/UofTCoders/studyGroup/issues/new)
+describing the problem or enhancement. This is technically not doing anything
+yourself, just recommending something to be done.
+- Submitting a Pull Request from a clone of this repo. This way takes a bit more work and requires knowledge of Git and likely HTML. But we
+ would appreciate any help! No harm in giving it a try! That's a beauty of using Git, it's hard to mess up and break something.
+
+If you want to view the website before submitting a Pull Request to make sure
+your changes are as you expect, you'll need to:
+
+- Install Jekyll by following these [instructions](https://help.github.com/articles/setting-up-your-github-pages-site-locally-with-jekyll/).
+- To build the site locally, run `jekyll serve`.
+- The built site can also be viewed at your forked version
+(`https:://yourusername.github.io/studyGroup`).
+
+----
+
+## Other Ways to Get Involved
+
+### Helping Out at Our Events
+
+We hold various sessions that incorporate code-alongs, and having the help of more advanced users to help out the beginners is very much appreciated.
+- If you see a session topic that is more beginner than your current level, we highly encourage you to attend anyway and help answer questions or provide more one-on-one support during lessons.
+- You can also lend a hand at our co-working sessions to people who have come to work on their own projects.
+- We do a call for helpers for all our Software Carpentry workshops, and we definitely wouldn't be able to run these without the help of volunteers like you!
+
+### Taking On A Leadership Role
+
+The planning and organization of our the group and our various events are done by our executive council. We hold elections every April to elect the executive council members, however, we are always open to suggestions on new roles and positions for interested members of the UofT Coders community who wish to take on more a leadership role. To read more about these positions, please see our [Council Roles](https://github.com/UofTCoders/council/blob/master/Council_Roles.md) document.
diff --git a/DESCRIPTION b/DESCRIPTION
new file mode 100644
index 000000000..0f9b8fe0b
--- /dev/null
+++ b/DESCRIPTION
@@ -0,0 +1,22 @@
+Package: studyGroup
+Version: 0.0.0.9000
+Title: Website for UofTCoders
+Description: Content for studyGroup website.
+Encoding: UTF-8
+LazyData: true
+ByteCompile: true
+Imports:
+ yaml,
+ here,
+ purrr,
+ dplyr,
+ stringr,
+ lubridate,
+ glue,
+ fs,
+ gh,
+ usethis,
+ assertr,
+ readr
+URL: https://github.com/SaraMati/studyGroup
+BugReports: https://github.com/SaraMati/studyGroup/issues
diff --git a/ISSUE_TEMPLATE.md b/ISSUE_TEMPLATE.md
new file mode 100644
index 000000000..255fc754d
--- /dev/null
+++ b/ISSUE_TEMPLATE.md
@@ -0,0 +1,13 @@
+
diff --git a/README.md b/README.md
index 1797c14b5..3920139bc 100644
--- a/README.md
+++ b/README.md
@@ -1,6 +1,8 @@
Mozilla Study Groups
============
+[](https://gitter.im/UofTCoders/Lobby?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge)
+
Welcome to [Mozilla Science Lab](https://www.mozillascience.org/)'s Study Group project! From here, we'll set you up with everything you need to start your own study group.
### Wait What's a 'Mozilla Study Group'?
@@ -11,12 +13,14 @@ Mozilla Study Groups are fun, informal meetups of your friends and colleagues fr
Welcome to our Mozilla Study Group! A few things to do & know now that you're here:
- - **Watch this repo:** up in the top right, there's a button that says 'Watch'; click it, and set yourself to 'Watching'. This will send you email notifications of new discussions; if you don't want email, but would like an alert just on GitHub, change the setting in Settings -> Notification Center (Settings is the little cog in the top right).
+ - **Watch the [Events](https://github.com/UofTCoders/Events) repo and/or this repo:** up in the top right, there's a button that says 'Watch'; click it, and set yourself to 'Watching'. This will send you email notifications of new discussions. If you only want to be notified about events (and not any other discussion topics), watch just the [Events](https://github.com/UofTCoders/Events) repo. If you want to stay updated on all group doings, watch this repo AND the Events repo. If you don't want email, but would like an alert just on GitHub, change the setting in Settings -> Notification Center (Settings is the little cog in the top right).
- **Check out the issue tracker:** click on 'issues' in the sidebar on the right; this is where all the conversations this study groups is having live. Use this space to ask questions, request events, make suggestions, or just say hi.
- **Read the code of conduct:** this Study Group is for everyone - we abide by a [set of rules](https://www.mozillascience.org/code-of-conduct/) that require everyone be treated with respect. Help us make a space where everyone feels welcome, and we'll all have a better time!
- **Add yourself to the website:** If you'd like to appear on the website under the 'Who we Are' section, have a look at the `_data/members.yml`; send us a pull request with an entry for yourself, or open an issue and we'll do it for you.
-## For Organizers
+## For Organizers/Instructors
+
+Check out the [`CONTRIBUTING` file](https://github.com/UofTCoders/studyGroup/blob/gh-pages/CONTRIBUTING.md) or [the page on the site](https://uoftcoders.github.io/studyGroup/CONTRIBUTING) for more details.
### It's Broken, I Need Help
@@ -70,7 +74,7 @@ When you're ready to list a new event for your Study Group, follow these steps,
where `YYYY-MM-DD` is the date of your event, and `word` is anything you want.
4. **Cut and paste the following into your new file:**
-
+
```
---
title: Study Group Meetup
@@ -106,7 +110,7 @@ Your website includes a gallery of participants in your Study Group; adding peop
```
- name: their human name
- affiliation: school, lab, department, business....
+ degree: school, lab, department, business....
github: their GitHub handle
interests:
- list one to three
diff --git a/_config.yml b/_config.yml
index e401d5126..b3650094f 100644
--- a/_config.yml
+++ b/_config.yml
@@ -1,9 +1,10 @@
#Setup ~~~
#Follow these 2 steps to set up your site.
+exclude: [".Rproj.user"]
#Step 1: give your study group a name and a short description:
-title: Our Study Group
-description: "A study group."
+title: University of Toronto Coders
+description: "We are a group of students and researchers dedicated to learning about and sharing scientific coding techniques and knowledge in an effort to improve scientific research."
#Step 2: press the green 'Commit Changes' button at the bottom of this page.
@@ -16,9 +17,9 @@ description: "A study group."
# Optional Configuration
# None of these things need to be changed - but feel free!
-titleBackground: "https://s3-us-west-2.amazonaws.com/webmaker-kits/learning%402x.jpg"
-headlineSmall: "Welcome To Our Study Group!"
+headlineSmall: "Welcome To The U of T Coders Group!"
headlineMain: "Let's Work Together"
+avatar: "img/logos/logo_icon_dark.png"
# Setup Google Calendar
# Usage:
@@ -26,10 +27,24 @@ headlineMain: "Let's Work Together"
# 2. change 'USER' in the example urls below to the username of the google account you made for your calendar
# 3. set calendar_on: True.
-calendar_on: False
-calendar_embed_url: "https://www.google.com/calendar/embed?src=USER@gmail.com"
-calendar_ical_url: "https://www.google.com/calendar/ical/USER@gmail.com/public/basic.ics"
+calendar_on: True
+calendar_embed_url: "https://www.google.com/calendar/embed?src=uoftcoders@gmail.com"
+calendar_ical_url: "https://www.google.com/calendar/ical/uoftcoders@gmail.com/public/basic.ics"
+# ===============================
+# Categories for sorting lessons.
+# ===============================
+
+languages:
+ - python
+ - r
+ - git
+ - misc
+
+levels:
+ - beginner
+ - intermediate
+ - advanced
#========================================
# No touching anything below this line :)
@@ -43,3 +58,4 @@ color:
# Build settings
markdown: kramdown
permalink: pretty
+future: true
diff --git a/_data/admin.yml b/_data/admin.yml
new file mode 100644
index 000000000..12272fc1a
--- /dev/null
+++ b/_data/admin.yml
@@ -0,0 +1,65 @@
+---
+- name: Yeshoda Harry-Paul
+ position: President
+ degree: PhD, Cell and Systems Biology
+ github: YeshodaHP
+ interests:
+ - R
+ - Python
+ - Bash
+
+- name: Margot Lautens
+ position: Co-working Coordinator
+ degree: PhD, Molecular Genetics
+ github: margot-l
+ interests:
+ - R
+ - Python
+
+- name: Sophie Breitbart
+ position: RGASC Liaison
+ degree: PhD, Ecology and Evolutionary Biology
+ github: sbreitbart
+ interests:
+ - R
+ - Git
+ - Markdown
+ - Visualization
+
+- name: Elliott Sales de Andrade
+ position: Technical Admin
+ degree: PhD, Physics
+ github: QuLogic
+ interests:
+ - Fortran
+ - Python
+ - Visualization
+
+- name: Vicki Zhang
+ position: Admin
+ degree: PhD, Ecology and Evolutionary Biology
+ github: vickimzhang
+ interests:
+ - R
+ - Python
+
+- name: Madeleine Oman
+ position: Treasurer
+ degree: PhD, Ecology and Evolutionary Biology
+ github: MadeleineOman
+ interests:
+ - Python
+ - R
+ - Git
+ - Bash
+ - Bioinformatic workflows
+ - Machine learning
+
+- name: Denise (Denny) Maranga
+ position: Marketing Coordinator
+ degree: PhD, Ecology and Evolutionary Biology
+ github: souceira
+ interests:
+ - R
+ - Python
+ - Git
diff --git a/_data/coffee-code.yml b/_data/coffee-code.yml
new file mode 100644
index 000000000..6e06b9e9d
--- /dev/null
+++ b/_data/coffee-code.yml
@@ -0,0 +1,92 @@
+
+# Date of the event in YYYY-MM-DD format
+- date: 2019-01-15
+ # Start and end time for event in 24 hour HH:MM format
+ start_time: "9:00"
+ end_time: "11:00"
+ # Where the event will take place
+ location: Second Cup at Grad Room
+ # The URL for the location
+ location_url: "http://map.utoronto.ca/marker/grad_room_second_cup-313"
+ # Only one label that will be put into the GitHub Issue
+ gh_labels: "co-working"
+
+
+# Date of the event in YYYY-MM-DD format
+- date: 2019-01-29
+ # Start and end time for event in 24 hour HH:MM format
+ start_time: "9:00"
+ end_time: "11:00"
+ # Where the event will take place
+ location: Second Cup at Grad Room
+ # The URL for the location
+ location_url: "http://map.utoronto.ca/marker/grad_room_second_cup-313"
+ # Only one label that will be put into the GitHub Issue
+ gh_labels: "co-working"
+
+# Date of the event in YYYY-MM-DD format
+- date: 2019-02-12
+ # Start and end time for event in 24 hour HH:MM format
+ start_time: "9:00"
+ end_time: "11:00"
+ # Where the event will take place
+ location: Second Cup at Grad Room
+ # The URL for the location
+ location_url: "http://map.utoronto.ca/marker/grad_room_second_cup-313"
+ # Only one label that will be put into the GitHub Issue
+ gh_labels: "co-working"
+
+
+# Date of the event in YYYY-MM-DD format
+- date: 2019-02-26
+ # Start and end time for event in 24 hour HH:MM format
+ start_time: "9:00"
+ end_time: "11:00"
+ # Where the event will take place
+ location: Second Cup at Grad Room
+ # The URL for the location
+ location_url: "http://map.utoronto.ca/marker/grad_room_second_cup-313"
+ # Only one label that will be put into the GitHub Issue
+ gh_labels: "co-working"
+
+
+
+# Date of the event in YYYY-MM-DD format
+- date: 2019-03-12
+ # Start and end time for event in 24 hour HH:MM format
+ start_time: "9:00"
+ end_time: "11:00"
+ # Where the event will take place
+ location: Second Cup at Grad Room
+ # The URL for the location
+ location_url: "http://map.utoronto.ca/marker/grad_room_second_cup-313"
+ # Only one label that will be put into the GitHub Issue
+ gh_labels: "co-working"
+
+
+
+# Date of the event in YYYY-MM-DD format
+- date: 2019-03-26
+ # Start and end time for event in 24 hour HH:MM format
+ start_time: "9:00"
+ end_time: "11:00"
+ # Where the event will take place
+ location: Second Cup at Grad Room
+ # The URL for the location
+ location_url: "http://map.utoronto.ca/marker/grad_room_second_cup-313"
+ # Only one label that will be put into the GitHub Issue
+ gh_labels: "co-working"
+
+
+
+# Date of the event in YYYY-MM-DD format
+- date: 2019-04-09
+ # Start and end time for event in 24 hour HH:MM format
+ start_time: "9:00"
+ end_time: "11:00"
+ # Where the event will take place
+ location: Second Cup at Grad Room
+ # The URL for the location
+ location_url: "http://map.utoronto.ca/marker/grad_room_second_cup-313"
+ # Only one label that will be put into the GitHub Issue
+ gh_labels: "co-working"
diff --git a/_data/contributors.yml b/_data/contributors.yml
new file mode 100644
index 000000000..3af42b8a2
--- /dev/null
+++ b/_data/contributors.yml
@@ -0,0 +1,136 @@
+---
+- name: Madeleine Bonsma
+ degree: Physics
+ github: mbonsma
+
+- name: Lina Tran
+ degree: PhD, Physiology
+ github: linamnt
+ interests:
+ - Python
+ - R
+
+- name: Ahmed Hasan
+ degree: PhD, Biology
+ github: aays
+ interests:
+ - R
+ - Python
+ - LaTeX
+
+- name: Sara Mahallati
+ degree: PhD, Biomedical Engineering
+ github: SaraMati
+ interests:
+ - MATLAB
+ - LaTeX
+ - Python
+
+- name: James Santangelo
+ degree: PhD, Biology
+ github: James-S-Santangelo
+ interests:
+ - R
+
+- name: Lindsay Coome
+ degree: Psychology
+ github: lcoome
+
+- name: Nil Sahin
+ degree: Molecular Genetics
+ github: nsahin
+
+- name: Frances Wong
+ degree: Faculty, Biology
+ github: FrancesWong
+ interests:
+ - R
+ - Git
+ - Markdown
+
+- name: Haidy Giratallah
+ degree: PhD, Pharmacology
+ github: HaidyGiratallah
+ interests:
+ - Python
+
+- name: Amin Banihashemi
+ degree: PhD, IMS
+ github: ab2347
+ interests:
+ - Python
+ - R
+
+- name: Tara Henechowicz
+ degree: PhD, Neuroscience
+ github: tarahenechowicz
+ interests:
+ - R
+ - Python
+
+- name: Kathy Chung
+ degree: Digital Humanities
+ github: chungkky
+
+- name: Zoe Francis
+ github: zoelynnfrancis
+
+- name: Derek Howard
+ github: derekhoward
+ interests:
+ - Python
+
+- name: Serena Jeblee
+ degree: Computer Science
+ github: sjeblee
+
+- name: Luke W Johnston
+ degree: PhD, Nutritional Sciences
+ github: lwjohnst86
+ interests:
+ - R
+
+- name: John Ladan
+ degree: MMath, PhD Physics
+ github: jladan
+ interests:
+ - Python
+ - Julia
+ - Javascript
+
+- name: Abigail Cabunoc Mayes
+ degree: Mozilla Science Lab
+ github: acabunoc
+
+- name: Sarah Meister
+ github: thesarahmeister
+
+- name: Ian Dennis Miller
+ degree: PhD, Psychology
+ github: iandennismiller
+ interests:
+ - Python
+ - R
+ - Social Network Analysis
+ - LaTeX
+ - Flask
+
+- name: Dano Morrison
+ github: jdpigeon
+
+- name: Joel Östblom
+ degree: PhD, Biomedical Engineering
+ github: joelostblom
+ interests:
+ - Python
+ - Linux
+
+- name: Raul Samayoa
+ github: ralle123
+
+- name: Brian Sutherland
+ github: bksutherland
+
+- name: Dawn Walker
+ degree: MI, iSchool
+ github: dcwalk
diff --git a/_data/events.yml b/_data/events.yml
new file mode 100644
index 000000000..ef63b2348
--- /dev/null
+++ b/_data/events.yml
@@ -0,0 +1,104 @@
+ # Key is the part of the filename in _posts/
+- key: py-data-vis
+ # Title of event that will show up as the GH Issue title
+ title: "Data visualization in Python"
+ # Explanation of event as a paragraph form
+ description: "An introduction to exploring and visualizing your data in Python."
+ # Date of the event in YYYY-MM-DD format
+ date: 2023-02-01
+ # Start and end time for event in 24 hour HH:MM format
+ start_time: "18:00"
+ end_time: "19:00"
+ # Where the event will take place
+ location: Discord
+ # The URL for the location
+ location_url: "https://github.com/UofTCoders/Events/issues/328"
+ # Packages to install, a space separating each package
+ # (e.g. "dplyr tidyr" or "Pandas>=0.21 Seaborn")
+ packages: ""
+ youtube_link: ""
+ skill_level: Beginner
+ # Beginner Intermediate Advanced
+ # R or Python
+ program_language: Python
+ # Only one label that will be put into the GitHub Issue
+ gh_labels: code-along
+
+ # Key is the part of the filename in _posts/
+- key: intro-bash
+ # Title of event that will show up as the GH Issue title
+ title: "Introduction to Bash"
+ # Explanation of event as a paragraph form
+ description: "A brief overview of working at the command line in Unix environments."
+ # Date of the event in YYYY-MM-DD format
+ date: 2023-02-15
+ # Start and end time for event in 24 hour HH:MM format
+ start_time: "18:00"
+ end_time: "19:00"
+ # Where the event will take place
+ location: Discord
+ # The URL for the location
+ location_url: "https://github.com/UofTCoders/Events/issues/329"
+ # Packages to install, a space separating each package
+ # (e.g. "dplyr tidyr" or "Pandas>=0.21 Seaborn")
+ packages: ""
+ youtube_link: ""
+ skill_level: Beginner
+ # Beginner Intermediate Advanced
+ # R or Python
+ program_language: Bash
+ # Only one label that will be put into the GitHub Issue
+ gh_labels: code-along
+
+ # Key is the part of the filename in _posts/
+- key: python-numpy-pandas
+ # Title of event that will show up as the GH Issue title
+ title: "Python: Data processing with numpy and pandas"
+ # Explanation of event as a paragraph form
+ description: "A code-along demonstrating two popular libraries for data processing in Python."
+ # Date of the event in YYYY-MM-DD format
+ date: 2023-03-01
+ # Start and end time for event in 24 hour HH:MM format
+ start_time: "18:00"
+ end_time: "19:00"
+ # Where the event will take place
+ location: TBA in-person + Discord
+ # The URL for the location
+ location_url: "https://github.com/UofTCoders/Events/issues/330"
+ # Packages to install, a space separating each package
+ # (e.g. "dplyr tidyr" or "Pandas>=0.21 Seaborn")
+ packages: ""
+ youtube_link: ""
+ skill_level: Intermediate
+ # Beginner Intermediate Advanced
+ # R or Python
+ program_language: Python
+ # Only one label that will be put into the GitHub Issue
+ gh_labels: code-along
+
+ # Key is the part of the filename in _posts/
+- key: python-intro-ml
+ # Title of event that will show up as the GH Issue title
+ title: "Python: Intro to machine learning"
+ # Explanation of event as a paragraph form
+ description: "A tutorial covering basic ML topics in Python."
+ # Date of the event in YYYY-MM-DD format
+ date: 2023-03-15
+ # Start and end time for event in 24 hour HH:MM format
+ start_time: "18:00"
+ end_time: "19:00"
+ # Where the event will take place
+ location: TBA in-person + Discord
+ # The URL for the location
+ location_url: "https://github.com/UofTCoders/Events/issues/331"
+ # Packages to install, a space separating each package
+ # (e.g. "dplyr tidyr" or "Pandas>=0.21 Seaborn")
+ packages: ""
+ youtube_link: ""
+ skill_level: Intermediate
+ # Beginner Intermediate Advanced
+ # R or Python
+ program_language: Python
+ # Only one label that will be put into the GitHub Issue
+ gh_labels: code-along
+
diff --git a/_data/members.yml b/_data/members.yml
deleted file mode 100644
index db3855296..000000000
--- a/_data/members.yml
+++ /dev/null
@@ -1,6 +0,0 @@
-- name: Bill Mills
- affiliation: Mozilla Science Lab
- github: BillMills
- interests:
- - Programming
- - Open Science
diff --git a/_includes/about.html b/_includes/about.html
deleted file mode 100644
index f6ca89e7c..000000000
--- a/_includes/about.html
+++ /dev/null
@@ -1,80 +0,0 @@
-
-
-
-
-
-
About
-
Lorem ipsum dolor sit amet consectetur.
-
-
-
-
-
-
-
-
-
-
-
-
2009-2011
-
Our Humble Beginnings
-
-
-
Lorem ipsum dolor sit amet, consectetur adipisicing elit. Sunt ut voluptatum eius sapiente, totam reiciendis temporibus qui quibusdam, recusandae sit vero unde, sed, incidunt et ea quo dolore laudantium consectetur!
-
-
-
-
-
-
-
-
-
-
March 2011
-
An Agency is Born
-
-
-
Lorem ipsum dolor sit amet, consectetur adipisicing elit. Sunt ut voluptatum eius sapiente, totam reiciendis temporibus qui quibusdam, recusandae sit vero unde, sed, incidunt et ea quo dolore laudantium consectetur!
-
-
-
-
-
-
-
-
-
-
December 2012
-
Transition to Full Service
-
-
-
Lorem ipsum dolor sit amet, consectetur adipisicing elit. Sunt ut voluptatum eius sapiente, totam reiciendis temporibus qui quibusdam, recusandae sit vero unde, sed, incidunt et ea quo dolore laudantium consectetur!
-
-
-
-
-
-
-
-
-
-
July 2014
-
Phase Two Expansion
-
-
-
Lorem ipsum dolor sit amet, consectetur adipisicing elit. Sunt ut voluptatum eius sapiente, totam reiciendis temporibus qui quibusdam, recusandae sit vero unde, sed, incidunt et ea quo dolore laudantium consectetur!
-
-
-
-
-
-
Be Part
- Of Our
- Story!
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/_includes/clients.html b/_includes/clients.html
deleted file mode 100644
index e77797f06..000000000
--- a/_includes/clients.html
+++ /dev/null
@@ -1,13 +0,0 @@
-
-
diff --git a/_includes/come-say-hi.html b/_includes/come-say-hi.html
new file mode 100644
index 000000000..b9dd5774a
--- /dev/null
+++ b/_includes/come-say-hi.html
@@ -0,0 +1,35 @@
+
+
+
+
+
Come Say Hi
+
We use GitHub to get coding help, talk about events and share files. Join us there!
+ Unless otherwise stated, all our events run from 5:30-7 PM, and are open to everyone
+ (i.e. no registration necessary, just show up!) and are held in
+ CDRS (Collaborative Digital Research Space, MN 3230) at the
+ Maanjiwe
+ Nendamowinan building.
+ The CDRS is at the north end of the third level. Once you go
+ through the main entrance of MN, take the elevator to the third
+ floor, turn left, and go all the way down the hall. The door
+ should be open 10-15 minutes before the lesson.
+
+ A list of all previous events and sessions can be found on the "Past Events" page.
+
@@ -20,8 +32,8 @@
Our upcoming and recent events:
{% if postyear > nowyear or postday >= nowday and postyear >= nowyear %}
{% assign isEvent = 1 %}
An interdisciplinary network of researchers at UofT studying how the rise of the Internet is changing society, politics and the economy — and vice versa.
The University of Toronto Association for Computer Machinery Student Chapter, affiliated with the Faculty of Information iSchool. They also host professional and research skills workshops open to people from outside iSchool.
The Map & Data Library hosts workshops during the academic year, providing introductions to mapmaking in ArcGIS and QGIS, cartography, use of statistical software packages, data visualization, and creating and finding data.
Join the Machine Learning Club to work through machine learning tutorials. No pre-requisite knowledge of machine learning is required. The club will aim to encourage students to pursue and also share their interests in the field of data science and machine learning.
+
diff --git a/_layouts/default.html b/_layouts/default.html
index d16cc334e..38f1f922c 100644
--- a/_layouts/default.html
+++ b/_layouts/default.html
@@ -7,10 +7,11 @@
{% include header.html %}
- {% include services.html %}
- {% include portfolio_grid.html %}
- {% include contact.html %}
- {% include team.html %}
+ {% include what-we-do.html %}
+ {% include events.html %}
+ {% include come-say-hi.html %}
+ {% include who-we-are.html %}
+ {% include friends-and-resources.html %}
{% include footer.html %}
{% include js.html %}
diff --git a/_layouts/page.html b/_layouts/page.html
new file mode 100644
index 000000000..3f11135d1
--- /dev/null
+++ b/_layouts/page.html
@@ -0,0 +1,21 @@
+
+
+
+ {% include head.html %}
+
+
+ {% include navbar.html %}
+
+
+
+
{{ page.title }}
+
+
+
+ {{ content }}
+
+
+ {% include footer.html %}
+ {% include js.html %}
+
+
diff --git a/_posts/2015-06-11-HackyHour.markdown b/_posts/2015-06-11-HackyHour.markdown
new file mode 100644
index 000000000..d00351e08
--- /dev/null
+++ b/_posts/2015-06-11-HackyHour.markdown
@@ -0,0 +1,8 @@
+---
+title: Study Group Meetup
+text: A discussion on what the commmunity would like to see happen at future Study Group meetings
+location: Sammy's Multicultural Eatery & Bar, Hart House
+link: https://github.com/mbonsma/studyGroup/issues/1
+date: 2015-06-11
+
+---
diff --git a/_posts/2015-06-18-CodeAlong.markdown b/_posts/2015-06-18-CodeAlong.markdown
new file mode 100644
index 000000000..5ceb4c2f0
--- /dev/null
+++ b/_posts/2015-06-18-CodeAlong.markdown
@@ -0,0 +1,7 @@
+---
+title: Introduction to Git
+text: Introduction to Git code-along session
+location: MP 408
+link: https://github.com/mbonsma/studyGroup/issues/5
+date: 2015-06-18
+---
diff --git a/_posts/2015-06-25-Coworking.markdown b/_posts/2015-06-25-Coworking.markdown
new file mode 100644
index 000000000..c358d76a9
--- /dev/null
+++ b/_posts/2015-06-25-Coworking.markdown
@@ -0,0 +1,7 @@
+---
+title: Co-working session
+text: Casual coding with research peers
+location: MP 408
+link: https://github.com/UofTCoders/Events/issues/1
+date: 2015-06-25
+---
diff --git a/_posts/2015-07-09-IntroToPython.markdown b/_posts/2015-07-09-IntroToPython.markdown
new file mode 100644
index 000000000..5108743f9
--- /dev/null
+++ b/_posts/2015-07-09-IntroToPython.markdown
@@ -0,0 +1,7 @@
+---
+title: Introduction to Python
+text: A beginner-friendly code along on the Python programming language
+location: MP 408
+link: https://github.com/UofTCoders/Events/issues/3
+date: 2015-07-09
+---
diff --git a/_posts/2015-07-16-Brainstorm.markdown b/_posts/2015-07-16-Brainstorm.markdown
new file mode 100644
index 000000000..f5c3cb467
--- /dev/null
+++ b/_posts/2015-07-16-Brainstorm.markdown
@@ -0,0 +1,7 @@
+---
+title: Brainstorming session
+text: Discuss the great programming challenges of your field
+location: MP 408
+link: https://github.com/UofTCoders/Events/issues/2
+date: 2015-07-16
+---
diff --git a/_posts/2015-07-23-IntroR.markdown b/_posts/2015-07-23-IntroR.markdown
new file mode 100644
index 000000000..cae1c8de6
--- /dev/null
+++ b/_posts/2015-07-23-IntroR.markdown
@@ -0,0 +1,7 @@
+---
+title: Introduction to R via data wrangling and reproducible documents
+text: Learn the basics of R with an emphasis on using knitr and dplyr
+location: MP 408
+link: https://github.com/UofTCoders/Events/issues/4
+date: 2015-07-23
+---
diff --git a/_posts/2015-07-30-IntroShiny.markdown b/_posts/2015-07-30-IntroShiny.markdown
new file mode 100644
index 000000000..01887327a
--- /dev/null
+++ b/_posts/2015-07-30-IntroShiny.markdown
@@ -0,0 +1,7 @@
+---
+title: Introduction to Shiny R
+text: Learn the basics of Shiny through an interactive tutorial
+location: MP 408
+link: https://github.com/UofTCoders/Events/issues/5
+date: 2015-07-30
+---
diff --git a/_posts/2015-08-06-PythonPlotting.markdown b/_posts/2015-08-06-PythonPlotting.markdown
new file mode 100644
index 000000000..6cff517a1
--- /dev/null
+++ b/_posts/2015-08-06-PythonPlotting.markdown
@@ -0,0 +1,7 @@
+---
+title: Plotting with Python and Matplotlib
+text: A beginner's guide to plotting in Python with a focus on animations and reproducible figures
+location: McLennan Physical Laboratories, room 408
+link: https://github.com/UofTCoders/Events/issues/6
+date: 2015-08-06
+---
diff --git a/_posts/2015-08-13-PlottingCoworking.markdown b/_posts/2015-08-13-PlottingCoworking.markdown
new file mode 100644
index 000000000..a8489fd98
--- /dev/null
+++ b/_posts/2015-08-13-PlottingCoworking.markdown
@@ -0,0 +1,7 @@
+---
+title: 'Coworking session: plotting in Python and R'
+text: Discuss the making of plots in Python and R with peers
+location: McLennan Physical Laboratories, room 408
+link: https://github.com/UofTCoders/Events/issues/7
+date: 2015-08-13
+---
diff --git a/_posts/2015-08-20-CodingLightning1.markdown b/_posts/2015-08-20-CodingLightning1.markdown
new file mode 100644
index 000000000..ae27dd2cf
--- /dev/null
+++ b/_posts/2015-08-20-CodingLightning1.markdown
@@ -0,0 +1,7 @@
+---
+title: 'Coding lightning demos'
+text: Short demos, including IPython notebook and Biopython
+location: McLennan Physical Laboratories, room 408
+link: https://github.com/UofTCoders/Events/issues/8
+date: 2015-08-20
+---
diff --git a/_posts/2015-08-27-PythonUnitTesting.markdown b/_posts/2015-08-27-PythonUnitTesting.markdown
new file mode 100644
index 000000000..b18689024
--- /dev/null
+++ b/_posts/2015-08-27-PythonUnitTesting.markdown
@@ -0,0 +1,7 @@
+---
+title: 'Intro to unit testing in Python'
+text: Learn about unit testing in Python and what it's good for.
+location: MP408
+link: https://github.com/UofTCoders/Events/issues/10
+date: 2015-08-27
+---
diff --git a/_posts/2015-09-03-PlanTheNewYear.markdown b/_posts/2015-09-03-PlanTheNewYear.markdown
new file mode 100644
index 000000000..0f57724a3
--- /dev/null
+++ b/_posts/2015-09-03-PlanTheNewYear.markdown
@@ -0,0 +1,7 @@
+---
+title: 'Hacky Hour - planning the new school year'
+text: Join the discussion on what the study group should be up to in the new term
+location: GSU pub
+link: https://github.com/UofTCoders/Events/issues/9
+date: 2015-09-03
+---
diff --git a/_posts/2015-09-10-CoworkingReal.markdown b/_posts/2015-09-10-CoworkingReal.markdown
new file mode 100644
index 000000000..021600b2b
--- /dev/null
+++ b/_posts/2015-09-10-CoworkingReal.markdown
@@ -0,0 +1,7 @@
+---
+title: Coworking session (with real work!)
+text: Bring your projects and problems and work with peers, get help with questions, and show off your progress.
+location: MP 408
+link: https://github.com/UofTCoders/Events/issues/11
+date: 2015-09-10
+---
diff --git a/_posts/2015-09-17-WelcomeHackyHour.markdown b/_posts/2015-09-17-WelcomeHackyHour.markdown
new file mode 100644
index 000000000..813d70a72
--- /dev/null
+++ b/_posts/2015-09-17-WelcomeHackyHour.markdown
@@ -0,0 +1,7 @@
+---
+title: Welcome Hacky Hour
+text: Celebrate the start of term and meet peers who code.
+location: GSU Pub, 16 Bancroft Ave
+link: https://github.com/UofTCoders/Events/issues/12
+date: 2015-09-17
+---
diff --git a/_posts/2015-09-24-IntroToGit2.markdown b/_posts/2015-09-24-IntroToGit2.markdown
new file mode 100644
index 000000000..f3a775a94
--- /dev/null
+++ b/_posts/2015-09-24-IntroToGit2.markdown
@@ -0,0 +1,7 @@
+---
+title: Introduction to Git
+text: Introduction to Git code-along session - no experience necessary!
+location: MP 408
+link: https://github.com/UofTCoders/Events/issues/13
+date: 2015-09-23
+---
diff --git a/_posts/2015-10-01-MoreOnGit.markdown b/_posts/2015-10-01-MoreOnGit.markdown
new file mode 100644
index 000000000..e2dd8c47b
--- /dev/null
+++ b/_posts/2015-10-01-MoreOnGit.markdown
@@ -0,0 +1,9 @@
+---
+title: More on Git
+text: More about version control and collaboration using Git, building on knowledge of basic Git commands.
+location: MP 408
+link: https://github.com/UofTCoders/Events/issues/14
+date: 2015-10-01
+startTime: '18:00'
+endTime: '19:00'
+---
diff --git a/_posts/2015-10-08-Coworking4.markdown b/_posts/2015-10-08-Coworking4.markdown
new file mode 100644
index 000000000..91b17eb56
--- /dev/null
+++ b/_posts/2015-10-08-Coworking4.markdown
@@ -0,0 +1,9 @@
+---
+title: Coworking session
+text: Bring your projects and problems and work with peers, get help with questions, and show off your progress.
+location: MP 408 (Mclennan Physical Labs)
+link: https://github.com/UofTCoders/Events/issues/15
+date: 2015-10-08
+startTime: '18:00'
+endTime: '19:30'
+---
diff --git a/_posts/2015-10-15-BasicStats.markdown b/_posts/2015-10-15-BasicStats.markdown
new file mode 100644
index 000000000..1e76ee95b
--- /dev/null
+++ b/_posts/2015-10-15-BasicStats.markdown
@@ -0,0 +1,9 @@
+---
+title: Basic Statistics
+text: A primer on basic statistical concepts - no prior knowledge necessary.
+location: MP 408 (Mclennan Physical Labs)
+link: https://github.com/UofTCoders/Events/issues/16
+date: 2015-10-15
+startTime: '18:00'
+endTime: '19:00'
+---
diff --git a/_posts/2015-10-22-IntroToPython2.markdown b/_posts/2015-10-22-IntroToPython2.markdown
new file mode 100644
index 000000000..d69c7df1f
--- /dev/null
+++ b/_posts/2015-10-22-IntroToPython2.markdown
@@ -0,0 +1,9 @@
+---
+title: Introduction to Python
+text: A beginner-friendly code-along introducing the basics of coding in Python.
+location: MP 408 (Mclennan Physical Labs)
+link: https://github.com/UofTCoders/Events/issues/19
+date: 2015-10-22
+startTime: '18:00'
+endTime: '19:00'
+---
diff --git a/_posts/2015-10-29-Coworking5.markdown b/_posts/2015-10-29-Coworking5.markdown
new file mode 100644
index 000000000..dcf4a484f
--- /dev/null
+++ b/_posts/2015-10-29-Coworking5.markdown
@@ -0,0 +1,9 @@
+---
+title: Coworking session
+text: Bring your projects and problems and work with peers, get help with questions, and show off your progress.
+location: MP 408 (Mclennan Physical Labs)
+link: https://github.com/UofTCoders/Events/issues/17
+date: 2015-10-29
+startTime: '18:00'
+endTime: '19:30'
+---
diff --git a/_posts/2015-11-05-CodingLightning2.markdown b/_posts/2015-11-05-CodingLightning2.markdown
new file mode 100644
index 000000000..8bc16f5de
--- /dev/null
+++ b/_posts/2015-11-05-CodingLightning2.markdown
@@ -0,0 +1,9 @@
+---
+title: Python Coding Lightning Demos
+text: Short demos from a variety of people of cool things you can do in Python
+location: MP 408 (Mclennan Physical Labs)
+link: https://github.com/UofTCoders/Events/issues/20
+date: 2015-11-05
+startTime: '18:00'
+endTime: '19:30'
+---
diff --git a/_posts/2015-11-12-Coworking6.markdown b/_posts/2015-11-12-Coworking6.markdown
new file mode 100644
index 000000000..871155b1e
--- /dev/null
+++ b/_posts/2015-11-12-Coworking6.markdown
@@ -0,0 +1,9 @@
+---
+title: Coworking session
+text: Bring your projects and problems and work with peers, get help with questions, and show off your progress.
+location: MP 408 (Mclennan Physical Labs)
+link: https://github.com/UofTCoders/Events/issues/21
+date: 2015-11-12
+startTime: '18:00'
+endTime: '19:30'
+---
diff --git a/_posts/2015-11-19-IntroR_2.markdown b/_posts/2015-11-19-IntroR_2.markdown
new file mode 100644
index 000000000..17e24d146
--- /dev/null
+++ b/_posts/2015-11-19-IntroR_2.markdown
@@ -0,0 +1,9 @@
+---
+title: Introduction to R via data wrangling and reproducible documents
+text: Learn the basics of R with an emphasis on using knitr and dplyr
+location: MP 408
+link: https://github.com/UofTCoders/Events/issues/18
+date: 2015-11-19
+startTime: '18:00'
+endTime: '19:00'
+---
diff --git a/_posts/2015-11-26-ggplot.markdown b/_posts/2015-11-26-ggplot.markdown
new file mode 100644
index 000000000..da5e8bd0c
--- /dev/null
+++ b/_posts/2015-11-26-ggplot.markdown
@@ -0,0 +1,9 @@
+---
+title: Introduction to ggplot2
+text: A brief introduction to the ggplot2 package and making simple graphs
+location: MP 408
+link: https://github.com/UofTCoders/Events/issues/22
+date: 2015-11-26
+startTime: '18:00'
+endTime: '19:00'
+---
diff --git a/_posts/2015-12-03-Coworking7.markdown b/_posts/2015-12-03-Coworking7.markdown
new file mode 100644
index 000000000..026edf760
--- /dev/null
+++ b/_posts/2015-12-03-Coworking7.markdown
@@ -0,0 +1,9 @@
+---
+title: Coworking session
+text: Bring your projects and problems and work with peers, get help with questions, and show off your progress.
+location: MP 408 (Mclennan Physical Labs)
+link: https://github.com/UofTCoders/Events/issues/23
+date: 2015-12-03
+startTime: '18:00'
+endTime: '19:30'
+---
diff --git a/_posts/2015-12-10-UnixPipelines.markdown b/_posts/2015-12-10-UnixPipelines.markdown
new file mode 100644
index 000000000..9091357ab
--- /dev/null
+++ b/_posts/2015-12-10-UnixPipelines.markdown
@@ -0,0 +1,9 @@
+---
+title: Intro to Unix Pipelines
+text: An introduction to Unix pipelines and Make for data science
+location: MP 408
+link: https://github.com/UofTCoders/Events/issues/24
+date: 2015-12-10
+startTime: '18:00'
+endTime: '19:00'
+---
diff --git a/_posts/2015-12-17-EndOfTermParty.markdown b/_posts/2015-12-17-EndOfTermParty.markdown
new file mode 100644
index 000000000..2288334ff
--- /dev/null
+++ b/_posts/2015-12-17-EndOfTermParty.markdown
@@ -0,0 +1,9 @@
+---
+title: End-of-term party
+text: An informal gathering to relax at the end of Fall 2015.
+location: GSU Pub, 16 Bancroft Ave
+link: https://github.com/UofTCoders/Events/issues/25
+date: 2015-12-17
+startTime: '18:00'
+endTime: '21:00'
+---
diff --git a/_posts/2016-01-14-IntroToRuby.markdown b/_posts/2016-01-14-IntroToRuby.markdown
new file mode 100644
index 000000000..ab23ab7ed
--- /dev/null
+++ b/_posts/2016-01-14-IntroToRuby.markdown
@@ -0,0 +1,9 @@
+---
+title: Introduction to Ruby
+text: Beginner-friendly basics of the programming language Ruby
+location: MP408
+link: https://github.com/UofTCoders/Events/issues/26
+date: 2016-01-14
+startTime: '18:00'
+endTime: '19:00'
+---
diff --git a/_posts/2016-01-21-PythonClasses.markdown b/_posts/2016-01-21-PythonClasses.markdown
new file mode 100644
index 000000000..962189e8d
--- /dev/null
+++ b/_posts/2016-01-21-PythonClasses.markdown
@@ -0,0 +1,9 @@
+---
+title: The "Class" Structure in Python
+text: Creating and using the "class" structure in Python
+location: MP408
+link: https://github.com/UofTCoders/Events/issues/28
+date: 2016-01-21
+startTime: '18:00'
+endTime: '19:00'
+---
diff --git a/_posts/2016-01-28-Coworking8.markdown b/_posts/2016-01-28-Coworking8.markdown
new file mode 100644
index 000000000..8340a9ef8
--- /dev/null
+++ b/_posts/2016-01-28-Coworking8.markdown
@@ -0,0 +1,9 @@
+---
+title: Coworking session
+text: Bring your projects and problems and work with peers, get help with questions, and show off your progress.
+location: MP408
+link: https://github.com/UofTCoders/Events/issues/27
+date: 2016-01-28
+startTime: '18:00'
+endTime: '19:30'
+---
diff --git a/_posts/2016-02-04-DebuggingRStudio.markdown b/_posts/2016-02-04-DebuggingRStudio.markdown
new file mode 100644
index 000000000..11f90da59
--- /dev/null
+++ b/_posts/2016-02-04-DebuggingRStudio.markdown
@@ -0,0 +1,9 @@
+---
+title: Debugging in R Studio
+text: Introduction to the debugging tools built into RStudio
+location: MP408
+link: https://github.com/UofTCoders/Events/issues/30
+date: 2016-02-04
+startTime: '18:00'
+endTime: '19:00'
+---
diff --git a/_posts/2016-02-11-ForLoopsR.markdown b/_posts/2016-02-11-ForLoopsR.markdown
new file mode 100644
index 000000000..bebae34b6
--- /dev/null
+++ b/_posts/2016-02-11-ForLoopsR.markdown
@@ -0,0 +1,9 @@
+---
+title: High Performance Loops in R
+text: Learn the how and when to apply for loops in R
+location: MP408
+link: https://github.com/UofTCoders/Events/issues/31
+date: 2016-02-11
+startTime: '18:00'
+endTime: '19:00'
+---
diff --git a/_posts/2016-02-18-Coworking9.markdown b/_posts/2016-02-18-Coworking9.markdown
new file mode 100644
index 000000000..36dc676dd
--- /dev/null
+++ b/_posts/2016-02-18-Coworking9.markdown
@@ -0,0 +1,9 @@
+---
+title: Coworking session
+text: Bring your projects and problems and work with peers, get help with questions, and show off your progress.
+location: MP408
+link: https://github.com/UofTCoders/Events/issues/32
+date: 2016-02-18
+startTime: '18:00'
+endTime: '19:30'
+---
diff --git a/_posts/2016-02-25-PackagesPython.markdown b/_posts/2016-02-25-PackagesPython.markdown
new file mode 100644
index 000000000..3715d4af6
--- /dev/null
+++ b/_posts/2016-02-25-PackagesPython.markdown
@@ -0,0 +1,9 @@
+---
+title: Building Packages in Python
+text: Learn how to build packages in Python for reusable code.
+location: MP408
+link: https://github.com/UofTCoders/Events/issues/34
+date: 2016-02-25
+startTime: '18:00'
+endTime: '19:00'
+---
diff --git a/_posts/2016-03-03-Coworking10.markdown b/_posts/2016-03-03-Coworking10.markdown
new file mode 100644
index 000000000..f98b8060a
--- /dev/null
+++ b/_posts/2016-03-03-Coworking10.markdown
@@ -0,0 +1,9 @@
+---
+title: Co-Working Session
+text: Bring your projects and problems and work with peers, get help with questions, and show off your progress.
+location: MP408
+link: https://github.com/UofTCoders/Events/issues/35
+date: 2016-03-03
+startTime: '18:00'
+endTime: '19:30'
+---
diff --git a/_posts/2016-03-10-IntroLaTeX.markdown b/_posts/2016-03-10-IntroLaTeX.markdown
new file mode 100644
index 000000000..47f35dd74
--- /dev/null
+++ b/_posts/2016-03-10-IntroLaTeX.markdown
@@ -0,0 +1,9 @@
+---
+title: Introduction to LaTeX
+text: Learn about what LaTeX is and what it is used for and how to make your first LaTeX document.
+location: MP408
+link: https://github.com/UofTCoders/Events/issues/33
+date: 2016-03-10
+startTime: '18:10'
+endTime: '19:00'
+---
diff --git a/_posts/2016-03-17-CodeReview.markdown b/_posts/2016-03-17-CodeReview.markdown
new file mode 100644
index 000000000..e80e067b2
--- /dev/null
+++ b/_posts/2016-03-17-CodeReview.markdown
@@ -0,0 +1,9 @@
+---
+title: Code Review and Reproducible Computational Research
+text: A discussion on reproducible computational research, and reviewing each other's analysis scripts together using principles of good code review.
+location: MP408
+link: https://github.com/UofTCoders/Events/issues/36
+date: 2016-03-17
+startTime: '18:10'
+endTime: '19:00'
+---
diff --git a/_posts/2016-03-24-Coworking11.markdown b/_posts/2016-03-24-Coworking11.markdown
new file mode 100644
index 000000000..e9479043c
--- /dev/null
+++ b/_posts/2016-03-24-Coworking11.markdown
@@ -0,0 +1,9 @@
+---
+title: Coworking Session
+text: Bring a project to work on alongside peers. It can be research, homework, open science, or just something fun you're working on, and it's okay if it's you're just starting out. Everyone is welcome, and bring your friends!
+location: MP408
+link: https://github.com/UofTCoders/Events/issues/37
+date: 2016-03-24
+startTime: '18:00'
+endTime: '19:30'
+---
diff --git a/_posts/2016-03-31-GitBranch.markdown b/_posts/2016-03-31-GitBranch.markdown
new file mode 100644
index 000000000..421671ea5
--- /dev/null
+++ b/_posts/2016-03-31-GitBranch.markdown
@@ -0,0 +1,9 @@
+---
+title: Using Branches in Git
+text: Come to this code-along session to learn about how, why, and when to use branches in Git!
+location: MP408
+link: https://github.com/UofTCoders/Events/issues/39
+date: 2016-03-31
+startTime: '18:10'
+endTime: '19:00'
+---
diff --git a/_posts/2016-04-07-Coworking12.markdown b/_posts/2016-04-07-Coworking12.markdown
new file mode 100644
index 000000000..17eac36e4
--- /dev/null
+++ b/_posts/2016-04-07-Coworking12.markdown
@@ -0,0 +1,9 @@
+---
+title: Coworking Session
+text: "Come with a problem and get feedback on what tools, packages and strategies you can use to solve it! Beginners welcome and bring your friends!"
+location: MP408
+link: https://github.com/UofTCoders/Events/issues/41
+date: 2016-04-07
+startTime: '18:10'
+endTime: '19:30'
+---
diff --git a/_posts/2016-04-14-GitHubPages.markdown b/_posts/2016-04-14-GitHubPages.markdown
new file mode 100644
index 000000000..08e04c5c5
--- /dev/null
+++ b/_posts/2016-04-14-GitHubPages.markdown
@@ -0,0 +1,9 @@
+---
+title: Web design with Jekyll/Github Pages
+text: Come to this code-along session for a basic introduction to using GitHub Pages and Jekyll to host a web page!
+location: MP408
+link: https://github.com/UofTCoders/Events/issues/42
+date: 2016-04-14
+startTime: '18:10'
+endTime: '19:00'
+---
diff --git a/_posts/2016-04-21-ElectionCoworking.markdown b/_posts/2016-04-21-ElectionCoworking.markdown
new file mode 100644
index 000000000..c95095383
--- /dev/null
+++ b/_posts/2016-04-21-ElectionCoworking.markdown
@@ -0,0 +1,9 @@
+---
+title: Elections and Coworking Session
+text: Participate in the elections by voting or nominating yourself for a position on the exec council; followed by pair-programming co-working session.
+location: MP408
+link: https://github.com/UofTCoders/Events/issues/44
+date: 2016-04-21
+startTime: '18:10'
+endTime: '19:30'
+---
diff --git a/_posts/2016-04-25-SwcRUnixGit.markdown b/_posts/2016-04-25-SwcRUnixGit.markdown
new file mode 100644
index 000000000..50ec847a3
--- /dev/null
+++ b/_posts/2016-04-25-SwcRUnixGit.markdown
@@ -0,0 +1,9 @@
+---
+title: Software Carpentry Workshop (2 days) - R, Unix Shell and Git
+text: "Join us for a hands-on two-day Software Carpentry workshop covering core small research team skills: programming with R, automating tasks with Unix Shell, and version control with Git. Workshop costs $20, click to see the event page for more details and registration!"
+location: BL224, Claude T. Bissell Building, 140 St. George Street
+link: https://uoftcoders.github.io/2016-04-25-utoronto/
+date: 2016-04-25
+startTime: '09:00'
+endTime: '16:00'
+---
diff --git a/_posts/2016-04-28-PandasPython.markdown b/_posts/2016-04-28-PandasPython.markdown
new file mode 100644
index 000000000..47bf3e847
--- /dev/null
+++ b/_posts/2016-04-28-PandasPython.markdown
@@ -0,0 +1,9 @@
+---
+title: Intro to Pandas in Python
+text: Learn about the data structures and analysis tools provided by Pandas in Python
+location: MP408
+link: https://github.com/UofTCoders/Events/issues/45
+date: 2016-04-28
+startTime: '18:10'
+endTime: '19:00'
+---
diff --git a/_posts/2016-05-05-Coworking14.markdown b/_posts/2016-05-05-Coworking14.markdown
new file mode 100644
index 000000000..4197f900e
--- /dev/null
+++ b/_posts/2016-05-05-Coworking14.markdown
@@ -0,0 +1,9 @@
+---
+title: Coworking Session
+text: Bring a project to work on or something you want to discuss with the group!
+location: MP408
+link: https://github.com/UofTCoders/Events/issues/48
+date: 2016-05-05
+startTime: '18:10'
+endTime: '19:30'
+---
diff --git a/_posts/2016-05-09-SwcPythonUnixGit.markdown b/_posts/2016-05-09-SwcPythonUnixGit.markdown
new file mode 100644
index 000000000..b95584e25
--- /dev/null
+++ b/_posts/2016-05-09-SwcPythonUnixGit.markdown
@@ -0,0 +1,9 @@
+---
+title: Software Carpentry Workshop (2 days) - Python, Unix Shell and Git
+text: "Join us for a hands-on two-day Software Carpentry workshop covering core small research team skills: building programs with Python, automating tasks with Unix Shell, and version control with Git. Workshop costs $20, click to see the event page for more details and registration!"
+location: BL224, Claude T. Bissell Building, 140 St. George Street
+link: https://uoftcoders.github.io/2016-05-09-utoronto/
+date: 2016-05-09
+startTime: '09:00'
+endTime: '16:00'
+---
diff --git a/_posts/2016-05-12-SpringSocial.markdown b/_posts/2016-05-12-SpringSocial.markdown
new file mode 100644
index 000000000..bbe1b9dd6
--- /dev/null
+++ b/_posts/2016-05-12-SpringSocial.markdown
@@ -0,0 +1,9 @@
+---
+title: Hacky Hour Social
+text: Mingle and get to know your fellow coders!
+location: GSU Pub, second floor
+link: https://github.com/UofTCoders/Events/issues/46
+date: 2016-05-12
+startTime: '18:10'
+endTime: '21:00'
+---
diff --git a/_posts/2016-05-19-VersionControl.markdown b/_posts/2016-05-19-VersionControl.markdown
new file mode 100644
index 000000000..2f797c76b
--- /dev/null
+++ b/_posts/2016-05-19-VersionControl.markdown
@@ -0,0 +1,9 @@
+---
+title: The Use and Philosophy of Version Control
+text: Learn how and why to use version control with your projects!
+location: MP408
+link: https://github.com/UofTCoders/Events/issues/47
+date: 2016-05-19
+startTime: '18:10'
+endTime: '19:00'
+---
diff --git a/_posts/2016-05-26-IntroR.markdown b/_posts/2016-05-26-IntroR.markdown
new file mode 100644
index 000000000..6a0c889ae
--- /dev/null
+++ b/_posts/2016-05-26-IntroR.markdown
@@ -0,0 +1,9 @@
+---
+title: Intro to R
+text: Learn the basics of programming and data wrangling in R
+location: MP408
+link: https://github.com/UofTCoders/Events/issues/49
+date: 2016-05-26
+startTime: '18:10'
+endTime: '19:00'
+---
diff --git a/_posts/2016-05-26-SwcRUnixGit.markdown b/_posts/2016-05-26-SwcRUnixGit.markdown
new file mode 100644
index 000000000..93d3bc714
--- /dev/null
+++ b/_posts/2016-05-26-SwcRUnixGit.markdown
@@ -0,0 +1,11 @@
+---
+title: Software Carpentry Workshop (2 days) - R, Unix Shell and Git - for people who identify as female
+text: "Join us for a hands-on two-day Software Carpentry workshop covering core small research team skills:
+programming with R, automating tasks with Unix Shell, and version control with Git.
+Workshop costs $20 and is open to people who identify as female. Click to see the event page for more details and registration!"
+location: BL224, Claude T. Bissell Building, 140 St. George Street
+link: https://uoftcoders.github.io/2016-05-26-utoronto/
+date: 2016-05-26
+startTime: '09:00'
+endTime: '16:00'
+---
diff --git a/_posts/2016-06-02-GlobalSprint.markdown b/_posts/2016-06-02-GlobalSprint.markdown
new file mode 100644
index 000000000..0eb85d0ed
--- /dev/null
+++ b/_posts/2016-06-02-GlobalSprint.markdown
@@ -0,0 +1,9 @@
+---
+title: Mozilla Science Lab Global Sprint
+text: Collaborate on open science projects!
+location: Mozilla Toronto office, 366 Adelaide St. W.
+link: https://github.com/UofTCoders/Events/issues/50
+date: 2016-06-02
+startTime: '09:00'
+endTime: '17:00'
+---
diff --git a/_posts/2016-06-09-IntroPython.markdown b/_posts/2016-06-09-IntroPython.markdown
new file mode 100644
index 000000000..f6e5cecb4
--- /dev/null
+++ b/_posts/2016-06-09-IntroPython.markdown
@@ -0,0 +1,9 @@
+---
+title: Intro to Python
+text: Learn the basics of programming in Python
+location: MP408
+link: https://github.com/UofTCoders/Events/issues/51
+date: 2016-06-09
+startTime: '18:10'
+endTime: '19:00'
+---
diff --git a/_posts/2016-06-16-IntroSQL.markdown b/_posts/2016-06-16-IntroSQL.markdown
new file mode 100644
index 000000000..c2a5c19df
--- /dev/null
+++ b/_posts/2016-06-16-IntroSQL.markdown
@@ -0,0 +1,9 @@
+---
+title: Intro to SQL
+text: Learn about how to use SQL to work with data and databases
+location: MP408
+link: https://github.com/UofTCoders/Events/issues/53
+date: 2016-06-16
+startTime: '18:10'
+endTime: '19:00'
+---
diff --git a/_posts/2016-06-23-AcademicWorkflows.markdown b/_posts/2016-06-23-AcademicWorkflows.markdown
new file mode 100644
index 000000000..34fb46fb4
--- /dev/null
+++ b/_posts/2016-06-23-AcademicWorkflows.markdown
@@ -0,0 +1,9 @@
+---
+title: Lightning Demos - Academic Workflows
+text: See how your colleagues use different tools and techniques in their academic workflows.
+location: MP408
+link: https://github.com/UofTCoders/Events/issues/54
+date: 2016-06-23
+startTime: '18:10'
+endTime: '19:00'
+---
diff --git a/_posts/2016-07-07-Coworking15.markdown b/_posts/2016-07-07-Coworking15.markdown
new file mode 100644
index 000000000..d9c56baa0
--- /dev/null
+++ b/_posts/2016-07-07-Coworking15.markdown
@@ -0,0 +1,9 @@
+---
+title: Coworking Session
+text: Come work on a project and get advice on tools and strategies.
+location: MP408
+link: https://github.com/UofTCoders/Events/issues/55
+date: 2016-07-07
+startTime: '18:10'
+endTime: '19:30'
+---
diff --git a/_posts/2016-07-14-DebuggingPython.markdown b/_posts/2016-07-14-DebuggingPython.markdown
new file mode 100644
index 000000000..dc915391c
--- /dev/null
+++ b/_posts/2016-07-14-DebuggingPython.markdown
@@ -0,0 +1,9 @@
+---
+title: Debugging in Python
+text: Learn to use the debugging tool for your Python code
+location: MP408
+link: https://github.com/UofTCoders/Events/issues/56
+date: 2016-07-14
+startTime: '18:10'
+endTime: '19:00'
+---
diff --git a/_posts/2016-07-21-ggplot2R.markdown b/_posts/2016-07-21-ggplot2R.markdown
new file mode 100644
index 000000000..92f2acbe9
--- /dev/null
+++ b/_posts/2016-07-21-ggplot2R.markdown
@@ -0,0 +1,9 @@
+---
+title: Intro to ggplot2 in R
+text: Basics of ggplot2 R package and simple graph making
+location: MP408
+link: https://github.com/UofTCoders/Events/issues/57
+date: 2016-07-21
+startTime: '18:10'
+endTime: '19:00'
+---
diff --git a/_posts/2016-07-28-Coworking16.markdown b/_posts/2016-07-28-Coworking16.markdown
new file mode 100644
index 000000000..45671cbdf
--- /dev/null
+++ b/_posts/2016-07-28-Coworking16.markdown
@@ -0,0 +1,9 @@
+---
+title: Coworking Session
+text: Work on a project and get suggestions and help from your peers
+location: MP408
+link: https://github.com/UofTCoders/Events/issues/59
+date: 2016-07-28
+startTime: '18:10'
+endTime: '19:30'
+---
diff --git a/_posts/2016-08-04-VizDemos.markdown b/_posts/2016-08-04-VizDemos.markdown
new file mode 100644
index 000000000..c2193d997
--- /dev/null
+++ b/_posts/2016-08-04-VizDemos.markdown
@@ -0,0 +1,9 @@
+---
+title: Lightning Demos Data Visualization + Pub Night
+text: Quick demos showing how we visualize our data, followed by a social at GSU Pub.
+location: MP408 + GSU Pub
+link: https://github.com/UofTCoders/Events/issues/58
+date: 2016-08-04
+startTime: '18:10'
+endTime: '21:00'
+---
diff --git a/_posts/2016-08-11-Coworking17.markdown b/_posts/2016-08-11-Coworking17.markdown
new file mode 100644
index 000000000..b7a00ab17
--- /dev/null
+++ b/_posts/2016-08-11-Coworking17.markdown
@@ -0,0 +1,9 @@
+---
+title: Coworking Session
+text: Work on a project with the advice and suggestions of your peers
+location: MP408
+link: https://github.com/UofTCoders/Events/issues/59
+date: 2016-08-11
+startTime: '18:10'
+endTime: '19:30'
+---
diff --git a/_posts/2016-08-18-PythonClasses.markdown b/_posts/2016-08-18-PythonClasses.markdown
new file mode 100644
index 000000000..1025ac700
--- /dev/null
+++ b/_posts/2016-08-18-PythonClasses.markdown
@@ -0,0 +1,9 @@
+---
+title: Classes in Python
+text: Intro to object oriented programming and the class structure in Python
+location: MP408
+link: https://github.com/UofTCoders/Events/issues/61
+date: 2016-08-18
+startTime: '18:10'
+endTime: '19:00'
+---
diff --git a/_posts/2016-08-25-PythonLargeDatasets.markdown b/_posts/2016-08-25-PythonLargeDatasets.markdown
new file mode 100644
index 000000000..2d739a4b4
--- /dev/null
+++ b/_posts/2016-08-25-PythonLargeDatasets.markdown
@@ -0,0 +1,9 @@
+---
+title: Large Datasets in Python
+text: How to work with large datasets in Python
+location: MP408
+link: https://github.com/UofTCoders/Events/issues/60
+date: 2016-08-25
+startTime: '18:10'
+endTime: '19:00'
+---
diff --git a/_posts/2016-09-07-HackyHour.markdown b/_posts/2016-09-07-HackyHour.markdown
new file mode 100644
index 000000000..0e0b9d0c3
--- /dev/null
+++ b/_posts/2016-09-07-HackyHour.markdown
@@ -0,0 +1,9 @@
+---
+title: Welcome Hacky Hour
+text: Social pub night to get to know other UofT Coders' members
+location: GSU Pub Main Floor
+link: https://github.com/UofTCoders/Events/issues/63
+date: 2016-09-07
+startTime: '18:00'
+endTime: '21:00'
+---
diff --git a/_posts/2016-09-14-IntroToPython.markdown b/_posts/2016-09-14-IntroToPython.markdown
new file mode 100644
index 000000000..c5d275840
--- /dev/null
+++ b/_posts/2016-09-14-IntroToPython.markdown
@@ -0,0 +1,9 @@
+---
+title: Intro to Python
+text: A brief introduction to Python programming
+location: MP408
+link: https://github.com/UofTCoders/Events/issues/64
+date: 2016-09-14
+startTime: '18:10'
+endTime: '19:00'
+---
diff --git a/_posts/2016-09-21-IntroToR.markdown b/_posts/2016-09-21-IntroToR.markdown
new file mode 100644
index 000000000..e98567ca9
--- /dev/null
+++ b/_posts/2016-09-21-IntroToR.markdown
@@ -0,0 +1,9 @@
+---
+title: Intro to R
+text: A brief introduction to R programming.
+location: MP408
+link: https://github.com/UofTCoders/Events/issues/65
+date: 2016-09-21
+startTime: '18:10'
+endTime: '19:00'
+---
diff --git a/_posts/2016-09-28-GitCoworking18.markdown b/_posts/2016-09-28-GitCoworking18.markdown
new file mode 100644
index 000000000..236cf50d1
--- /dev/null
+++ b/_posts/2016-09-28-GitCoworking18.markdown
@@ -0,0 +1,9 @@
+---
+title: Git-Themed Coworking Session
+text: Get help and advice about using Git with your code
+location: MP408
+link: https://github.com/UofTCoders/Events/issues/66
+date: 2016-09-28
+startTime: '18:10'
+endTime: '19:30'
+---
diff --git a/_posts/2016-10-05-MappingPython.markdown b/_posts/2016-10-05-MappingPython.markdown
new file mode 100644
index 000000000..46f2c5f1a
--- /dev/null
+++ b/_posts/2016-10-05-MappingPython.markdown
@@ -0,0 +1,9 @@
+---
+title: Mapping in Python
+text: An overview of cartography and mapping methods in Python
+location: MP408
+link: https://github.com/UofTCoders/Events/issues/76
+date: 2016-10-05
+startTime: '18:10'
+endTime: '19:00'
+---
diff --git a/_posts/2016-10-12-PackagesR.markdown b/_posts/2016-10-12-PackagesR.markdown
new file mode 100644
index 000000000..a2f86ee52
--- /dev/null
+++ b/_posts/2016-10-12-PackagesR.markdown
@@ -0,0 +1,9 @@
+---
+title: Making Packages in R
+text: Package your R code for reuse
+location: MP408
+link: https://github.com/UofTCoders/Events/issues/68
+date: 2016-10-12
+startTime: '18:10'
+endTime: '19:00'
+---
diff --git a/_posts/2016-10-19-Coworking19.markdown b/_posts/2016-10-19-Coworking19.markdown
new file mode 100644
index 000000000..fd900b170
--- /dev/null
+++ b/_posts/2016-10-19-Coworking19.markdown
@@ -0,0 +1,9 @@
+---
+title: Coworking Session
+text: Work on your code with your colleagues
+location: MP408
+link: https://github.com/UofTCoders/Events/issues/67
+date: 2016-10-19
+startTime: '18:10'
+endTime: '19:30'
+---
diff --git a/_posts/2016-10-26-IntroBash.markdown b/_posts/2016-10-26-IntroBash.markdown
new file mode 100644
index 000000000..af6815927
--- /dev/null
+++ b/_posts/2016-10-26-IntroBash.markdown
@@ -0,0 +1,9 @@
+---
+title: Intro to Bash
+text: Basic shell scripting in Bash
+location: MP408
+link: https://github.com/UofTCoders/Events/issues/69
+date: 2016-10-26
+startTime: '18:10'
+endTime: '19:00'
+---
diff --git a/_posts/2016-11-02-IntroSQL.markdown b/_posts/2016-11-02-IntroSQL.markdown
new file mode 100644
index 000000000..07218c036
--- /dev/null
+++ b/_posts/2016-11-02-IntroSQL.markdown
@@ -0,0 +1,9 @@
+---
+title: Intro to SQL and Databases
+text: Learn about databases and working with them in SQL
+location: MP408
+link: https://github.com/UofTCoders/Events/issues/70
+date: 2016-11-02
+startTime: '18:10'
+endTime: '19:00'
+---
diff --git a/_posts/2016-11-09-IntroLaTeX.markdown b/_posts/2016-11-09-IntroLaTeX.markdown
new file mode 100644
index 000000000..9e623d163
--- /dev/null
+++ b/_posts/2016-11-09-IntroLaTeX.markdown
@@ -0,0 +1,9 @@
+---
+title: Intro to LaTeX
+text: How to make documents in LaTeX
+location: MP408
+link: https://github.com/UofTCoders/Events/issues/71
+date: 2016-11-09
+startTime: '18:10'
+endTime: '19:00'
+---
diff --git a/_posts/2016-11-16-CareersDiscussion.markdown b/_posts/2016-11-16-CareersDiscussion.markdown
new file mode 100644
index 000000000..a390fb341
--- /dev/null
+++ b/_posts/2016-11-16-CareersDiscussion.markdown
@@ -0,0 +1,9 @@
+---
+title: Careers Outside Academia Discussion
+text: Discussion about opportunities outside academia
+location: MP408
+link: https://github.com/UofTCoders/Events/issues/72
+date: 2016-11-16
+startTime: '18:10'
+endTime: '19:30'
+---
diff --git a/_posts/2016-11-23-JekyllGithubPages.markdown b/_posts/2016-11-23-JekyllGithubPages.markdown
new file mode 100644
index 000000000..28182c217
--- /dev/null
+++ b/_posts/2016-11-23-JekyllGithubPages.markdown
@@ -0,0 +1,9 @@
+---
+title: Web Design with Jekyll and Github Pages
+text: Learn how to set up a website with Jekyll and Github Pages
+location: MP408
+link: https://github.com/UofTCoders/Events/issues/74
+date: 2016-11-23
+startTime: '18:10'
+endTime: '19:00'
+---
diff --git a/_posts/2016-11-30-PandocMarkdown.markdown b/_posts/2016-11-30-PandocMarkdown.markdown
new file mode 100644
index 000000000..91c9e029c
--- /dev/null
+++ b/_posts/2016-11-30-PandocMarkdown.markdown
@@ -0,0 +1,9 @@
+---
+title: Pandoc and Markdown
+text: Make your documents in markdown and convert between document types with Pandoc
+location: MP408
+link: https://github.com/UofTCoders/Events/issues/73
+date: 2016-11-30
+startTime: '18:10'
+endTime: '19:00'
+---
diff --git a/_posts/2016-12-07-Coworking20.markdown b/_posts/2016-12-07-Coworking20.markdown
new file mode 100644
index 000000000..4441c1c46
--- /dev/null
+++ b/_posts/2016-12-07-Coworking20.markdown
@@ -0,0 +1,9 @@
+---
+title: Coworking Session
+text: Work on your projects with the help of your colleagues
+location: MP408
+link: https://github.com/UofTCoders/Events/issues/75
+date: 2016-12-07
+startTime: '18:10'
+endTime: '19:30'
+---
diff --git a/_posts/2016-12-08-HackUofTCoders.markdown b/_posts/2016-12-08-HackUofTCoders.markdown
new file mode 100644
index 000000000..9da081900
--- /dev/null
+++ b/_posts/2016-12-08-HackUofTCoders.markdown
@@ -0,0 +1,9 @@
+---
+title: Hack UofT Coders
+text: Join us for an afternoon at the pub working on the website together!
+location: GSU Pub (Main Floor)
+link: https://github.com/UofTCoders/Events/issues/77
+date: 2016-12-08
+startTime: '15:00'
+endTime: '21:00'
+---
diff --git a/_posts/2017-01-11-IntroGit.markdown b/_posts/2017-01-11-IntroGit.markdown
new file mode 100644
index 000000000..1e8ebf1be
--- /dev/null
+++ b/_posts/2017-01-11-IntroGit.markdown
@@ -0,0 +1,9 @@
+---
+title: Intro to Git
+text: Learn about the use and philosophy of version control with Git
+location: MP408
+link: https://github.com/UofTCoders/Events/issues/79
+date: 2017-01-11
+startTime: '18:10'
+endTime: '19:00'
+---
diff --git a/_posts/2017-01-18-IntroPython.markdown b/_posts/2017-01-18-IntroPython.markdown
new file mode 100644
index 000000000..45009bf63
--- /dev/null
+++ b/_posts/2017-01-18-IntroPython.markdown
@@ -0,0 +1,9 @@
+---
+title: Intro to Python
+text: A brief introduction to programming in Python
+location: MP408
+link: https://github.com/UofTCoders/Events/issues/80
+date: 2017-01-18
+startTime: '18:10'
+endTime: '19:00'
+---
diff --git a/_posts/2017-01-25-Coworking21.markdown b/_posts/2017-01-25-Coworking21.markdown
new file mode 100644
index 000000000..568c27010
--- /dev/null
+++ b/_posts/2017-01-25-Coworking21.markdown
@@ -0,0 +1,9 @@
+---
+title: Coworking Session
+text: Come work on a project and get advice on tools and strategies.
+location: MP408
+link: https://github.com/UofTCoders/Events/issues/81
+date: 2017-01-25
+startTime: '18:10'
+endTime: '19:30'
+---
diff --git a/_posts/2017-02-01-CodeReview.md b/_posts/2017-02-01-CodeReview.md
new file mode 100644
index 000000000..d2625d59e
--- /dev/null
+++ b/_posts/2017-02-01-CodeReview.md
@@ -0,0 +1,9 @@
+---
+title: Code Review
+text: Learn about code review and then group code review will begin.
+location: MP408
+link: https://github.com/UofTCoders/Events/issues/82
+date: 2017-02-01
+startTime: '18:10'
+endTime: '19:30'
+---
diff --git a/_posts/2017-02-08-Coworking22.markdown b/_posts/2017-02-08-Coworking22.markdown
new file mode 100644
index 000000000..1f5db6e44
--- /dev/null
+++ b/_posts/2017-02-08-Coworking22.markdown
@@ -0,0 +1,9 @@
+---
+title: Coworking Session
+text: Come work on a project and get advice on tools and strategies.
+location: MP408
+link: https://github.com/UofTCoders/Events/issues/85
+date: 2017-02-08
+startTime: '18:10'
+endTime: '19:30'
+---
diff --git a/_posts/2017-02-15-ggplot2.markdown b/_posts/2017-02-15-ggplot2.markdown
new file mode 100644
index 000000000..59f8229ad
--- /dev/null
+++ b/_posts/2017-02-15-ggplot2.markdown
@@ -0,0 +1,9 @@
+---
+title: Intro to ggplot2 in R
+text: ggplot2 is a great plotting package in R, learn the basics in this lesson!
+location: MP408
+link: https://github.com/UofTCoders/Events/issues/84
+date: 2017-02-15
+startTime: '18:10'
+endTime: '19:00'
+---
diff --git a/_posts/2017-02-22-collaborative-github.markdown b/_posts/2017-02-22-collaborative-github.markdown
new file mode 100644
index 000000000..75832ae22
--- /dev/null
+++ b/_posts/2017-02-22-collaborative-github.markdown
@@ -0,0 +1,9 @@
+---
+title: Collaborating with Github
+text: Learn how to use github to code collaboratively
+location: MP408
+link: https://github.com/UofTCoders/Events/issues/83
+date: 2017-02-22
+startTime: '18:10'
+endTime: '19:00'
+---
diff --git a/_posts/2017-03-01-open-data.markdown b/_posts/2017-03-01-open-data.markdown
new file mode 100644
index 000000000..8f000ffd0
--- /dev/null
+++ b/_posts/2017-03-01-open-data.markdown
@@ -0,0 +1,9 @@
+---
+title: Opening Up Your Data
+text: Learn the principles of open data and how you can contribute!
+location: MP408
+link: https://github.com/UofTCoders/Events/issues/86
+date: 2017-03-01
+startTime: '18:10'
+endTime: '19:00'
+---
diff --git a/_posts/2017-03-08-ld-data-visualization.markdown b/_posts/2017-03-08-ld-data-visualization.markdown
new file mode 100644
index 000000000..543693c09
--- /dev/null
+++ b/_posts/2017-03-08-ld-data-visualization.markdown
@@ -0,0 +1,9 @@
+---
+title: Lightning Demos Data Visualization
+text: Quick demos on data visualizations people have made or tools and packages to use.
+location: MP408
+link: https://github.com/UofTCoders/Events/issues/87
+date: 2017-03-08
+startTime: '18:10'
+endTime: '19:00'
+---
diff --git a/_posts/2017-03-15-intro-sql.markdown b/_posts/2017-03-15-intro-sql.markdown
new file mode 100644
index 000000000..2f40b6eb3
--- /dev/null
+++ b/_posts/2017-03-15-intro-sql.markdown
@@ -0,0 +1,9 @@
+---
+title: Intro to SQL
+text: Learn about databases and SQL
+location: MP408
+link: https://github.com/UofTCoders/Events/issues/88
+date: 2017-03-15
+startTime: '18:10'
+endTime: '19:00'
+---
diff --git a/_posts/2017-03-22-coworking23.markdown b/_posts/2017-03-22-coworking23.markdown
new file mode 100644
index 000000000..82e63287d
--- /dev/null
+++ b/_posts/2017-03-22-coworking23.markdown
@@ -0,0 +1,9 @@
+---
+title: Coworking Session
+text: Work together on your coding projects.
+location: MP408
+link: https://github.com/UofTCoders/Events/issues/89
+date: 2017-03-22
+startTime: '18:10'
+endTime: '19:30'
+---
diff --git a/_posts/2017-03-29-intermediate-R.markdown b/_posts/2017-03-29-intermediate-R.markdown
new file mode 100644
index 000000000..ac3bce611
--- /dev/null
+++ b/_posts/2017-03-29-intermediate-R.markdown
@@ -0,0 +1,9 @@
+---
+title: Intermediate Topics in R
+text: Come learn a bit more about the R language beyond an intro programming lesson.
+location: MP408
+link: https://github.com/UofTCoders/Events/issues/90
+date: 2017-03-29
+startTime: '18:10'
+endTime: '19:00'
+---
diff --git a/_posts/2017-04-05-intermediate-Python.markdown b/_posts/2017-04-05-intermediate-Python.markdown
new file mode 100644
index 000000000..9868eb7dd
--- /dev/null
+++ b/_posts/2017-04-05-intermediate-Python.markdown
@@ -0,0 +1,9 @@
+---
+title: Intermediate Topics in Python
+text: Come learn a bit more about the Python language beyond an intro programming lesson.
+location: MP408
+link: https://github.com/UofTCoders/Events/issues/91
+date: 2017-04-05
+startTime: '18:10'
+endTime: '19:00'
+---
diff --git a/_posts/2017-04-12-ld-academic-workflows.markdown b/_posts/2017-04-12-ld-academic-workflows.markdown
new file mode 100644
index 000000000..70524345d
--- /dev/null
+++ b/_posts/2017-04-12-ld-academic-workflows.markdown
@@ -0,0 +1,9 @@
+---
+title: Lightning Demos - Academic Workflows
+text: See how others analyze, visualize and communicate their research in their workflows.
+location: MP408
+link: https://github.com/UofTCoders/Events/issues/92
+date: 2017-04-12
+startTime: '18:10'
+endTime: '19:00'
+---
diff --git a/_posts/2017-04-19-coworking24.markdown b/_posts/2017-04-19-coworking24.markdown
new file mode 100644
index 000000000..cd9e624f2
--- /dev/null
+++ b/_posts/2017-04-19-coworking24.markdown
@@ -0,0 +1,9 @@
+---
+title: Coworking Session
+text: Work together on your coding projects. Beginners welcome.
+location: MP408
+link: https://github.com/UofTCoders/Events/issues/95
+date: 2017-04-19
+startTime: '18:10'
+endTime: '19:30'
+---
diff --git a/_posts/2017-04-26-elections-hacky-hour.markdown b/_posts/2017-04-26-elections-hacky-hour.markdown
new file mode 100644
index 000000000..e12e06686
--- /dev/null
+++ b/_posts/2017-04-26-elections-hacky-hour.markdown
@@ -0,0 +1,9 @@
+---
+title: Elections + Hacky Hour
+text: Annual exec elections followed by pub night at GSU pub.
+location: MP408 + GSU Pub
+link: https://github.com/UofTCoders/Events/issues/96
+date: 2017-04-26
+startTime: '18:10'
+endTime: '22:00'
+---
diff --git a/_posts/2017-05-03-careers-outside-academia.markdown b/_posts/2017-05-03-careers-outside-academia.markdown
new file mode 100644
index 000000000..fe76f82b3
--- /dev/null
+++ b/_posts/2017-05-03-careers-outside-academia.markdown
@@ -0,0 +1,9 @@
+---
+title: Careers Outside Academia Panel
+text: Are you or do you know someone who started in research but took opportunities outside academia? Or are you interested in the different paths after a graduate research program? Come to this session where we will have a discussion on these topics.
+location: MP408
+link: https://github.com/UofTCoders/Events/issues/97
+date: 2017-05-03
+startTime: '18:10'
+endTime: '19:00'
+---
diff --git a/_posts/2017-05-10-ld-large-datasets.markdown b/_posts/2017-05-10-ld-large-datasets.markdown
new file mode 100644
index 000000000..eb69bf420
--- /dev/null
+++ b/_posts/2017-05-10-ld-large-datasets.markdown
@@ -0,0 +1,9 @@
+---
+title: Lightning Demos - Working with Very Large Datasets
+text: Do you know a tool or package for working with very large datasets (on the order or GB/TB)? Or want to learn more? Come see our quick (10 min or less) demos on this topic.
+location: MP408
+link: https://github.com/UofTCoders/Events/issues/98
+date: 2017-05-10
+startTime: '18:10'
+endTime: '19:00'
+---
diff --git a/_posts/2017-05-17-coworking25.markdown b/_posts/2017-05-17-coworking25.markdown
new file mode 100644
index 000000000..f142e06eb
--- /dev/null
+++ b/_posts/2017-05-17-coworking25.markdown
@@ -0,0 +1,9 @@
+---
+title: Coworking Session
+text: Get together to work on your coding projects. Beginners welcome!
+location: MP408
+link: https://github.com/UofTCoders/Events/issues/99
+date: 2017-05-17
+startTime: '18:10'
+endTime: '19:30'
+---
diff --git a/_posts/2017-05-24-htmlcssjs.markdown b/_posts/2017-05-24-htmlcssjs.markdown
new file mode 100644
index 000000000..599c3d9bb
--- /dev/null
+++ b/_posts/2017-05-24-htmlcssjs.markdown
@@ -0,0 +1,9 @@
+---
+title: HTML/JS/CSS
+text: Learn about web development using HTML, CSS and Javascript
+location: MP408
+link: https://github.com/UofTCoders/Events/issues/100
+date: 2017-05-24
+startTime: '18:10'
+endTime: '19:00'
+---
diff --git a/_posts/2017-05-31-intro-bash.markdown b/_posts/2017-05-31-intro-bash.markdown
new file mode 100644
index 000000000..3774dccbe
--- /dev/null
+++ b/_posts/2017-05-31-intro-bash.markdown
@@ -0,0 +1,9 @@
+---
+title: Intro to Bash
+text: Basic shell scripting in Bash
+location: MP408
+link: https://github.com/UofTCoders/Events/issues/101
+date: 2017-05-31
+startTime: '18:10'
+endTime: '19:00'
+---
diff --git a/_posts/2017-06-07-scikit-learn.markdown b/_posts/2017-06-07-scikit-learn.markdown
new file mode 100644
index 000000000..3db8ac775
--- /dev/null
+++ b/_posts/2017-06-07-scikit-learn.markdown
@@ -0,0 +1,9 @@
+---
+title: Python scikit-learn for Machine Learning
+text: Overview of using Python's scikit-learn for machine learning
+location: MP408
+link: https://github.com/UofTCoders/Events/issues/102
+date: 2017-06-07
+startTime: '18:10'
+endTime: '19:00'
+---
diff --git a/_posts/2017-06-14-coworking26.markdown b/_posts/2017-06-14-coworking26.markdown
new file mode 100644
index 000000000..2be830f93
--- /dev/null
+++ b/_posts/2017-06-14-coworking26.markdown
@@ -0,0 +1,9 @@
+---
+title: Coworking Session - Unit Testing/Pair Programming
+text: Work on your projects together, with a focus on learning to unit test your code. Beginners welcome!
+location: MP408
+link: https://github.com/UofTCoders/Events/issues/103
+date: 2017-06-14
+startTime: '18:10'
+endTime: '19:30'
+---
diff --git a/_posts/2017-06-21-git-continuous-testing.markdown b/_posts/2017-06-21-git-continuous-testing.markdown
new file mode 100644
index 000000000..9f7979ef8
--- /dev/null
+++ b/_posts/2017-06-21-git-continuous-testing.markdown
@@ -0,0 +1,9 @@
+---
+title: Continuous Integration and Testing via Github
+text: Using Github, travis CI for continuous integration of projects
+location: MP408
+link: https://github.com/UofTCoders/Events/issues/104
+date: 2017-06-21
+startTime: '18:10'
+endTime: '19:00'
+---
diff --git a/_posts/2017-06-28-ld-data-visualization.markdown b/_posts/2017-06-28-ld-data-visualization.markdown
new file mode 100644
index 000000000..ae512c738
--- /dev/null
+++ b/_posts/2017-06-28-ld-data-visualization.markdown
@@ -0,0 +1,9 @@
+---
+title: Lightning Demos - Data Visualization
+text: Demonstrations of some cool tools and techniques for visualizing data
+location: MP408
+link: https://github.com/UofTCoders/Events/issues/105
+date: 2017-06-28
+startTime: '18:10'
+endTime: '19:00'
+---
diff --git a/_posts/2017-07-05-intermediate-sql.markdown b/_posts/2017-07-05-intermediate-sql.markdown
new file mode 100644
index 000000000..140f629b0
--- /dev/null
+++ b/_posts/2017-07-05-intermediate-sql.markdown
@@ -0,0 +1,9 @@
+---
+title: Intermediate SQL
+text: Intermediate topics in SQL and databases using mySQL
+location: MP408
+link: https://github.com/UofTCoders/Events/issues/106
+date: 2017-07-05
+startTime: '18:10'
+endTime: '19:00'
+---
diff --git a/_posts/2017-07-12-coworking27-packages.markdown b/_posts/2017-07-12-coworking27-packages.markdown
new file mode 100644
index 000000000..32b756587
--- /dev/null
+++ b/_posts/2017-07-12-coworking27-packages.markdown
@@ -0,0 +1,9 @@
+---
+title: Coworking Session on Making Packages
+text: Work together to package up your code for reuse in R or Python.
+location: MP408
+link: https://github.com/UofTCoders/Events/issues/107
+date: 2017-07-12
+startTime: '18:10'
+endTime: '19:30'
+---
diff --git a/_posts/2017-07-19-r-dplyr-magrittr.markdown b/_posts/2017-07-19-r-dplyr-magrittr.markdown
new file mode 100644
index 000000000..b77abc49b
--- /dev/null
+++ b/_posts/2017-07-19-r-dplyr-magrittr.markdown
@@ -0,0 +1,9 @@
+---
+title: R - dplyr and magrittr
+text: Learn these tools for data manipulation in R.
+location: MP408
+link: https://github.com/UofTCoders/Events/issues/108
+date: 2017-07-19
+startTime: '18:10'
+endTime: '19:00'
+---
diff --git a/_posts/2017-07-26-python-parallel.markdown b/_posts/2017-07-26-python-parallel.markdown
new file mode 100644
index 000000000..11c1aa705
--- /dev/null
+++ b/_posts/2017-07-26-python-parallel.markdown
@@ -0,0 +1,9 @@
+---
+title: Parallel Processing in Python
+text: Learn about Python packages for multiprocessing
+location: MP408
+link: https://github.com/UofTCoders/Events/issues/109
+date: 2017-07-26
+startTime: '18:10'
+endTime: '19:00'
+---
diff --git a/_posts/2017-08-02-collaborative-github.markdown b/_posts/2017-08-02-collaborative-github.markdown
new file mode 100644
index 000000000..52d2d9b8a
--- /dev/null
+++ b/_posts/2017-08-02-collaborative-github.markdown
@@ -0,0 +1,9 @@
+---
+title: Collaborating with others using GitHub
+text: Learn how to use GitHub on collaborative projects
+location: MP408
+link: https://github.com/UofTCoders/Events/issues/110
+date: 2017-08-02
+startTime: '18:10'
+endTime: '19:00'
+---
diff --git a/_posts/2017-08-09-coworking28.markdown b/_posts/2017-08-09-coworking28.markdown
new file mode 100644
index 000000000..24a507911
--- /dev/null
+++ b/_posts/2017-08-09-coworking28.markdown
@@ -0,0 +1,9 @@
+---
+title: Coworking Session
+text: Work together to package up your code for reuse in R or Python.
+location: MP408
+link: https://github.com/UofTCoders/Events/issues/111
+date: 2017-08-09
+startTime: '18:10'
+endTime: '19:30'
+---
diff --git a/_posts/2017-08-16-R-resampling.markdown b/_posts/2017-08-16-R-resampling.markdown
new file mode 100644
index 000000000..1b9652b17
--- /dev/null
+++ b/_posts/2017-08-16-R-resampling.markdown
@@ -0,0 +1,9 @@
+---
+title: R - Resampling Techniques (Bootstrapping & Permutations)
+text: Learn about common resampling methods in R.
+location: MP408
+link: https://github.com/UofTCoders/Events/issues/112
+date: 2017-08-16
+startTime: '18:10'
+endTime: '19:00'
+---
diff --git a/_posts/2017-09-14-intro-r.markdown b/_posts/2017-09-14-intro-r.markdown
new file mode 100644
index 000000000..f604c108f
--- /dev/null
+++ b/_posts/2017-09-14-intro-r.markdown
@@ -0,0 +1,9 @@
+---
+title: Introduction to R
+text: Learn the basics of programming in R.
+location: MP408
+link: https://github.com/UofTCoders/Events/issues/116
+date: 2017-09-14
+startTime: '18:10'
+endTime: '19:00'
+---
diff --git a/_posts/2017-09-21-social.markdown b/_posts/2017-09-21-social.markdown
new file mode 100644
index 000000000..6bc1390c2
--- /dev/null
+++ b/_posts/2017-09-21-social.markdown
@@ -0,0 +1,9 @@
+---
+title: Hacky Hour Social
+text: Look for the UofT Coders posters to find where we're seated!
+location: Red Lounge (College/Spadina)
+link: https://github.com/UofTCoders/Events/issues/117
+date: 2017-09-21
+startTime: '18:00'
+endTime: '21:00'
+---
diff --git a/_posts/2017-09-28-intro-python.markdown b/_posts/2017-09-28-intro-python.markdown
new file mode 100644
index 000000000..147b6ed1d
--- /dev/null
+++ b/_posts/2017-09-28-intro-python.markdown
@@ -0,0 +1,9 @@
+---
+title: Introduction to Python
+text: Learn the basics of how to program in Python
+location: MP408
+link: https://github.com/UofTCoders/Events/issues/118
+date: 2017-09-28
+startTime: '18:10'
+endTime: '19:00'
+---
diff --git a/_posts/2017-10-03-coworking.markdown b/_posts/2017-10-03-coworking.markdown
new file mode 100644
index 000000000..5de20e770
--- /dev/null
+++ b/_posts/2017-10-03-coworking.markdown
@@ -0,0 +1,9 @@
+---
+title: Tuesday Coworking Session
+text: Work through any of your coding problems in a friendly and collaborative environment.
+location: Hart House Reading Room (1st Floor)
+link: https://github.com/UofTCoders/Events/issues/126
+date: 2017-10-03
+startTime: '16:00'
+endTime: '18:00'
+---
diff --git a/_posts/2017-10-05-intro-git.markdown b/_posts/2017-10-05-intro-git.markdown
new file mode 100644
index 000000000..86bb4265d
--- /dev/null
+++ b/_posts/2017-10-05-intro-git.markdown
@@ -0,0 +1,9 @@
+---
+title: Introduction to Version Control with Git/Github
+text: Learn how to use version control with your code using Git and Github.
+location: MP408
+link: https://github.com/UofTCoders/Events/issues/119
+date: 2017-10-05
+startTime: '18:10'
+endTime: '19:00'
+---
diff --git a/_posts/2017-10-12-coworking-git.markdown b/_posts/2017-10-12-coworking-git.markdown
new file mode 100644
index 000000000..04abef46e
--- /dev/null
+++ b/_posts/2017-10-12-coworking-git.markdown
@@ -0,0 +1,9 @@
+---
+title: Coworking Session - Git and Github
+text: Work through any of your questions about Git and Github in an informal session.
+location: MP408
+link: https://github.com/UofTCoders/Events/issues/120
+date: 2017-10-12
+startTime: '18:10'
+endTime: '19:30'
+---
diff --git a/_posts/2017-10-17-coworking.markdown b/_posts/2017-10-17-coworking.markdown
new file mode 100644
index 000000000..3d2d16e2a
--- /dev/null
+++ b/_posts/2017-10-17-coworking.markdown
@@ -0,0 +1,9 @@
+---
+title: Tuesday Coworking Session
+text: Work through any of your coding problems in a friendly and collaborative environment.
+location: Hart House Reading Room (1st Floor)
+link: https://github.com/UofTCoders/Events/issues/126
+date: 2017-10-17
+startTime: '16:00'
+endTime: '18:00'
+---
diff --git a/_posts/2017-10-19-machine-learning.markdown b/_posts/2017-10-19-machine-learning.markdown
new file mode 100644
index 000000000..4e949c32b
--- /dev/null
+++ b/_posts/2017-10-19-machine-learning.markdown
@@ -0,0 +1,9 @@
+---
+title: Introduction to Machine Learning
+text: Machine learning crosses the boundaries of discipline and is found everywhere these days from our Netflix recommendations to how banks catch fraudulent transactions. This session will be an overview of important concepts behind machine learning and what it actually entails in more a lecture style session.
+location: MP408
+link: https://github.com/UofTCoders/Events/issues/121
+date: 2017-10-19
+startTime: '18:10'
+endTime: '19:00'
+---
diff --git a/_posts/2017-10-26-scikit-learn.markdown b/_posts/2017-10-26-scikit-learn.markdown
new file mode 100644
index 000000000..a2d9458e1
--- /dev/null
+++ b/_posts/2017-10-26-scikit-learn.markdown
@@ -0,0 +1,9 @@
+---
+title: Python's scikit-learn for Machine Learning
+text: Get an overview of how to use Python's scikit-learn package to implement common machine learning algorithms for problems like regression, and classification.
+location: MP408
+link: https://github.com/UofTCoders/Events/issues/122
+date: 2017-10-26
+startTime: '18:10'
+endTime: '19:00'
+---
diff --git a/_posts/2017-10-31-coworking.markdown b/_posts/2017-10-31-coworking.markdown
new file mode 100644
index 000000000..32780e1ae
--- /dev/null
+++ b/_posts/2017-10-31-coworking.markdown
@@ -0,0 +1,9 @@
+---
+title: Tuesday Coworking Session
+text: Work through any of your coding problems in a friendly and collaborative environment.
+location: Hart House Reading Room (1st Floor)
+link: https://github.com/UofTCoders/Events/issues/126
+date: 2017-10-31
+startTime: '16:00'
+endTime: '18:00'
+---
diff --git a/_posts/2017-11-02-intro-to-natural-language-processing.markdown b/_posts/2017-11-02-intro-to-natural-language-processing.markdown
new file mode 100644
index 000000000..0d082487b
--- /dev/null
+++ b/_posts/2017-11-02-intro-to-natural-language-processing.markdown
@@ -0,0 +1,9 @@
+---
+title: Introduction to Natural Language Processing
+text: Natural language processing (NLP) is its own field of machine learning focused on building systems that can understand language. While it is a very broad field, this session will be focused on the NLTK package in Python to tackle some basic NLP problems.
+location: MP408
+link: https://github.com/UofTCoders/Events/issues/123
+date: 2017-11-02
+startTime: '18:10'
+endTime: '19:00'
+---
diff --git a/_posts/2017-11-09-pair-programing-coding-challenges.markdown b/_posts/2017-11-09-pair-programing-coding-challenges.markdown
new file mode 100644
index 000000000..627e33fdc
--- /dev/null
+++ b/_posts/2017-11-09-pair-programing-coding-challenges.markdown
@@ -0,0 +1,9 @@
+---
+title: Coworking Session - Pair Programming Coding Challenges
+text: Come work on your general programming skills (whether you're a complete beginner or have been cdoing for years) by doing some coding challenges in the style of Pair Programming. Or if you'd prefer, come by with some of your own code to work on and if you need help, you can always ask for help from the other community members.
+location: MP408
+link: https://github.com/UofTCoders/Events/issues/124
+date: 2017-11-09
+startTime: '18:10'
+endTime: '19:30'
+---
diff --git a/_posts/2017-11-14-coworking.markdown b/_posts/2017-11-14-coworking.markdown
new file mode 100644
index 000000000..ccdf2e26f
--- /dev/null
+++ b/_posts/2017-11-14-coworking.markdown
@@ -0,0 +1,9 @@
+---
+title: Tuesday Coworking Session
+text: Work through any of your coding problems in a friendly and collaborative environment.
+location: Hart House Reading Room (1st Floor)
+link: https://github.com/UofTCoders/Events/issues/126
+date: 2017-11-14
+startTime: '16:00'
+endTime: '18:00'
+---
diff --git a/_posts/2017-11-16-Intro-Bash.markdown b/_posts/2017-11-16-Intro-Bash.markdown
new file mode 100644
index 000000000..11cd431c8
--- /dev/null
+++ b/_posts/2017-11-16-Intro-Bash.markdown
@@ -0,0 +1,9 @@
+---
+title: Intro to Bash
+text: Basic shell scripting in Bash
+location: MP408
+link: https://github.com/UofTCoders/Events/issues/130
+date: 2017-11-16
+startTime: '18:10'
+endTime: '19:00'
+---
diff --git a/_posts/2017-11-23-Gadgets-and-hardware-Intro-Programming-Small-Devices.markdown b/_posts/2017-11-23-Gadgets-and-hardware-Intro-Programming-Small-Devices.markdown
new file mode 100644
index 000000000..621784b6c
--- /dev/null
+++ b/_posts/2017-11-23-Gadgets-and-hardware-Intro-Programming-Small-Devices.markdown
@@ -0,0 +1,9 @@
+---
+title: "Gadgets and hardware: Introduction to Programming Small Devices"
+text: We will be introduced to the Arduino open source microcontroller development system and build a device using the Adafruit ESP8266 Feather Huzzah [https://www.adafruit.com/product/2821], a postage stamp sized 80MHz WiFi computer with stackable peripherals (called 'Wings'), that uses 1/2 Watt.
+location: BL520
+link: https://github.com/UofTCoders/Events/issues/128
+date: 2017-11-23
+startTime: '18:10'
+endTime: '19:00'
+---
diff --git a/_posts/2017-11-28-coworking.markdown b/_posts/2017-11-28-coworking.markdown
new file mode 100644
index 000000000..5a0c226ba
--- /dev/null
+++ b/_posts/2017-11-28-coworking.markdown
@@ -0,0 +1,9 @@
+---
+title: Tuesday Coworking Session
+text: Work through any of your coding problems in a friendly and collaborative environment.
+location: Hart House Reading Room (1st Floor)
+link: https://github.com/UofTCoders/Events/issues/126
+date: 2017-11-28
+startTime: '16:00'
+endTime: '18:00'
+---
diff --git a/_posts/2017-11-30-Intro-quantum-computing.markdown b/_posts/2017-11-30-Intro-quantum-computing.markdown
new file mode 100644
index 000000000..e1c3abcdc
--- /dev/null
+++ b/_posts/2017-11-30-Intro-quantum-computing.markdown
@@ -0,0 +1,9 @@
+---
+title: Introduction to Topics in Quantum Computing
+text: We'll go over some basic concepts of quantum computing, including qubits, quantum gates and some algorithms. We’ll also test out IBM’s 5-qubit quantum processor using their online interface.
+location: MP408
+link: https://github.com/UofTCoders/Events/issues/127
+date: 2017-11-30
+startTime: '18:10'
+endTime: '19:00'
+---
diff --git a/_posts/2017-12-07-hacky-hour.markdown b/_posts/2017-12-07-hacky-hour.markdown
new file mode 100644
index 000000000..814d1b2ce
--- /dev/null
+++ b/_posts/2017-12-07-hacky-hour.markdown
@@ -0,0 +1,9 @@
+---
+title: Hacky Hour Social
+text: Come meet the UofT Coders community members in a less formal setting. Everyone is welcome even if you've never come to a session before.
+location: GSU Pub
+link: https://github.com/UofTCoders/Events/issues/129
+date: 2017-12-07
+startTime: '18:10'
+endTime: '19:00'
+---
diff --git a/_posts/2018-01-11-IntroR.markdown b/_posts/2018-01-11-IntroR.markdown
new file mode 100644
index 000000000..e5397e182
--- /dev/null
+++ b/_posts/2018-01-11-IntroR.markdown
@@ -0,0 +1,9 @@
+---
+title: "Introduction to R"
+text: A brief introduction to R programming. No experience is necessary to attend this lesson.
+location: MADLAB at Gerstein
+link: https://github.com/UofTCoders/Events/issues/131
+date: 2018-01-11
+startTime: '18:10'
+endTime: '19:00'
+---
diff --git a/_posts/2018-01-18-Intro-Git.markdown b/_posts/2018-01-18-Intro-Git.markdown
new file mode 100644
index 000000000..8a068ea4f
--- /dev/null
+++ b/_posts/2018-01-18-Intro-Git.markdown
@@ -0,0 +1,9 @@
+---
+title: "Introduction to Git and the Philosophy of Version Control"
+text: Learn how to use version control for your project using Git and Github
+location: MADLAB at Gerstein
+link: https://github.com/UofTCoders/Events/issues/133
+date: 2018-01-18
+startTime: '18:10'
+endTime: '19:00'
+---
diff --git a/_posts/2018-01-18-SwcRUnixGit.markdown b/_posts/2018-01-18-SwcRUnixGit.markdown
new file mode 100644
index 000000000..250eb771a
--- /dev/null
+++ b/_posts/2018-01-18-SwcRUnixGit.markdown
@@ -0,0 +1,11 @@
+---
+title: Software Carpentry Workshop (2 days) - R, Unix Shell and Git
+text: "Join us for a hands-on two-day Software Carpentry workshop covering core small research team skills:
+programming with R, automating tasks with Unix Shell, and version control with Git.
+Workshop costs $25 and is open to everyone. Click to see the event page for more details and registration!"
+location: MADLab, Gerstein Science Information Centre, Room B112
+link: https://uoftcoders.github.io/2018-01-18-utoronto/
+date: 2018-01-18
+startTime: '09:00'
+endTime: '16:00'
+---
diff --git a/_posts/2018-01-25-intro-python.markdown b/_posts/2018-01-25-intro-python.markdown
new file mode 100644
index 000000000..ab6e27dea
--- /dev/null
+++ b/_posts/2018-01-25-intro-python.markdown
@@ -0,0 +1,9 @@
+---
+title: "Introduction to Data Analysis with Python"
+text: The very basics of data analysis using the programming language Python with a beginner-friendly code-along.
+location: MADLAB at Gerstein
+link: https://github.com/UofTCoders/Events/issues/134
+date: 2018-01-25
+startTime: '18:10'
+endTime: '19:00'
+---
diff --git a/_posts/2018-02-01-ML-for-CompBio-R.markdown b/_posts/2018-02-01-ML-for-CompBio-R.markdown
new file mode 100644
index 000000000..94d110321
--- /dev/null
+++ b/_posts/2018-02-01-ML-for-CompBio-R.markdown
@@ -0,0 +1,9 @@
+---
+title: "Machine Learning for Computational Biology using R"
+text: Learning about machine learning good practices in computational biology and tips to avoid common mistakes by a code-along application of k-nearest neighbors (k-NN) to a cancer sample dataset, using R.
+location: MADLAB at Gerstein
+link: https://github.com/UofTCoders/Events/issues/135
+date: 2018-02-01
+startTime: '18:10'
+endTime: '19:00'
+---
diff --git a/_posts/2018-02-08-ImageProcessing-python.markdown b/_posts/2018-02-08-ImageProcessing-python.markdown
new file mode 100644
index 000000000..ac1d7e6d2
--- /dev/null
+++ b/_posts/2018-02-08-ImageProcessing-python.markdown
@@ -0,0 +1,9 @@
+---
+title: Image Processing in Python
+text: This is an introductory tutorial on image processing using Python packages. We will do a code along to understand image data types, manipulate and prepare images for analysis such as image segmentation.
+location: MADLAB at Gerstein
+link: https://github.com/UofTCoders/Events/issues/137
+date: 2018-02-08
+startTime: '18:10'
+endTime: '19:00'
+---
diff --git a/_posts/2018-02-15-ggplot2R.markdown b/_posts/2018-02-15-ggplot2R.markdown
new file mode 100644
index 000000000..476ce7e0e
--- /dev/null
+++ b/_posts/2018-02-15-ggplot2R.markdown
@@ -0,0 +1,9 @@
+---
+title: Intro to ggplot2 in R
+text: ggplot2 is a great plotting package in R, learn the basics in this lesson!
+location: MADLAB at Gerstein
+link: https://github.com/UofTCoders/Events/issues/136
+date: 2018-02-15
+startTime: '18:10'
+endTime: '19:00'
+---
diff --git a/_posts/2018-02-22-graphic-design.markdown b/_posts/2018-02-22-graphic-design.markdown
new file mode 100644
index 000000000..12397b5b5
--- /dev/null
+++ b/_posts/2018-02-22-graphic-design.markdown
@@ -0,0 +1,9 @@
+---
+title: Open Source Tools for Graphic Design
+text: Learn to use the open source software Inkscape.
+location: MADLAB at Gerstein
+link: https://github.com/UofTCoders/Events/issues/138
+date: 2018-02-22
+startTime: '18:10'
+endTime: '19:00'
+---
diff --git a/_posts/2018-03-01-IntermediateR.markdown b/_posts/2018-03-01-IntermediateR.markdown
new file mode 100644
index 000000000..8aec17046
--- /dev/null
+++ b/_posts/2018-03-01-IntermediateR.markdown
@@ -0,0 +1,9 @@
+---
+title: Intermediate Topics in R
+text: More intermediate level topics in R
+location: MADLAB at Gerstein
+link: https://github.com/UofTCoders/Events/issues/143
+date: 2018-03-01
+startTime: '18:10'
+endTime: '19:00'
+---
diff --git a/_posts/2018-03-06-coffeeandcode.markdown b/_posts/2018-03-06-coffeeandcode.markdown
new file mode 100644
index 000000000..86a03f4b7
--- /dev/null
+++ b/_posts/2018-03-06-coffeeandcode.markdown
@@ -0,0 +1,9 @@
+---
+title: Coffee and Code
+text: Informal "Coffee and Code" meet-ups
+location: Second Cup at Grad House
+link: https://github.com/UofTCoders/Events/issues/141
+date: 2018-03-06
+startTime: '09:00'
+endTime: '11:00'
+---
diff --git a/_posts/2018-03-08-blockchain.markdown b/_posts/2018-03-08-blockchain.markdown
new file mode 100644
index 000000000..7199c00b6
--- /dev/null
+++ b/_posts/2018-03-08-blockchain.markdown
@@ -0,0 +1,9 @@
+---
+title: What is Blockchain
+text: Learn about cryptocurrencies and blockchain.
+location: MADLAB at Gerstein
+link: https://github.com/UofTCoders/Events/issues/139
+date: 2018-03-08
+startTime: '18:10'
+endTime: '19:00'
+---
diff --git a/_posts/2018-03-15-3dprinting.markdown b/_posts/2018-03-15-3dprinting.markdown
new file mode 100644
index 000000000..559860ebc
--- /dev/null
+++ b/_posts/2018-03-15-3dprinting.markdown
@@ -0,0 +1,9 @@
+---
+title: Intro to 3D Printing (MADLab Certification)
+text: Learn how to safely operate Gerstein Library's Makerbot Replicator 2 3D printers
+location: MADLAB at Gerstein
+link: https://github.com/UofTCoders/Events/issues/140
+date: 2018-03-15
+startTime: '18:10'
+endTime: '19:00'
+---
diff --git a/_posts/2018-03-22-neuralnetworkspython.markdown b/_posts/2018-03-22-neuralnetworkspython.markdown
new file mode 100644
index 000000000..523ec7c1d
--- /dev/null
+++ b/_posts/2018-03-22-neuralnetworkspython.markdown
@@ -0,0 +1,9 @@
+---
+title: Neural Networks in Python
+text: Learn to build neural networks in Python using Tensorflow and Keras
+location: MADLAB at Gerstein
+link: https://github.com/UofTCoders/Events/issues/142
+date: 2018-03-22
+startTime: '18:10'
+endTime: '19:00'
+---
diff --git a/_posts/2018-03-29-academicworkflows.markdown b/_posts/2018-03-29-academicworkflows.markdown
new file mode 100644
index 000000000..ab703cc0e
--- /dev/null
+++ b/_posts/2018-03-29-academicworkflows.markdown
@@ -0,0 +1,9 @@
+---
+title: Academic Workflows
+text: Learn about tools for reproducible research and maintaining a digital lab notebook using Jupyter Notebook.
+location: MADLAB at Gerstein
+link: https://github.com/UofTCoders/Events/issues/145
+date: 2018-03-29
+startTime: '18:10'
+endTime: '19:00'
+---
diff --git a/_posts/2018-04-05-interactiveplotting.markdown b/_posts/2018-04-05-interactiveplotting.markdown
new file mode 100644
index 000000000..e308b719d
--- /dev/null
+++ b/_posts/2018-04-05-interactiveplotting.markdown
@@ -0,0 +1,9 @@
+---
+title: Interactive Plotting in Python and R
+text: Make interactive plots in both R (with Shiny) and Python (with Pandas and Altair).
+location: MADLAB at Gerstein
+link: https://github.com/UofTCoders/Events/issues/146
+date: 2018-04-05
+startTime: '18:10'
+endTime: '19:30'
+---
diff --git a/_posts/2018-04-10-coffeeandcode.markdown b/_posts/2018-04-10-coffeeandcode.markdown
new file mode 100644
index 000000000..5ecf78bad
--- /dev/null
+++ b/_posts/2018-04-10-coffeeandcode.markdown
@@ -0,0 +1,9 @@
+---
+title: Coffee and Code
+text: A casual co-working session - bring your laptop and whatever you're working on!
+location: Second Cup at Grad House
+link: https://github.com/UofTCoders/Events/issues/144
+date: 2018-04-10
+startTime: '09:00'
+endTime: '11:00'
+---
diff --git a/_posts/2018-04-12-coworking.markdown b/_posts/2018-04-12-coworking.markdown
new file mode 100644
index 000000000..73de15e40
--- /dev/null
+++ b/_posts/2018-04-12-coworking.markdown
@@ -0,0 +1,9 @@
+---
+title: Coworking Session
+text: Work through any of your coding problems in a friendly and collaborative environment.
+location: MADLAB at Gerstein
+link: https://github.com/UofTCoders/Events/issues/148
+date: 2018-04-12
+startTime: '18:00'
+endTime: '19:00'
+---
diff --git a/_posts/2018-04-13-bugbbq.markdown b/_posts/2018-04-13-bugbbq.markdown
new file mode 100644
index 000000000..7393c0ce1
--- /dev/null
+++ b/_posts/2018-04-13-bugbbq.markdown
@@ -0,0 +1,9 @@
+---
+title: Software Carpentry Bug BBQ
+text: Help improve the Software Carpentry lessons, drink coffee, and meet your coding peers!
+location: MADLAB at Gerstein
+link: https://github.com/UofTCoders/Events/issues/147
+date: 2018-04-13
+startTime: '09:00'
+endTime: '14:00'
+---
diff --git a/_posts/2018-04-19-coworking.markdown b/_posts/2018-04-19-coworking.markdown
new file mode 100644
index 000000000..799cd1847
--- /dev/null
+++ b/_posts/2018-04-19-coworking.markdown
@@ -0,0 +1,9 @@
+---
+title: Coworking Session
+text: Work through any of your coding problems in a friendly and collaborative environment.
+location: MADLAB at Gerstein
+link: https://github.com/UofTCoders/Events/issues/149
+date: 2018-04-19
+startTime: '18:00'
+endTime: '19:00'
+---
diff --git a/_posts/2018-04-26-elections.markdown b/_posts/2018-04-26-elections.markdown
new file mode 100644
index 000000000..0c97afd06
--- /dev/null
+++ b/_posts/2018-04-26-elections.markdown
@@ -0,0 +1,9 @@
+---
+title: Elections + Pub Night
+text: Vote and/or run in the executive elections and celebrate afterwards at the pub.
+location: MADLAB at Gerstein, O'Grady's Pub
+link: https://github.com/UofTCoders/Events/issues/150
+date: 2018-04-26
+startTime: '18:00'
+endTime: '22:00'
+---
diff --git a/_posts/2018-05-01-coffeeandcode.markdown b/_posts/2018-05-01-coffeeandcode.markdown
new file mode 100644
index 000000000..1fb72e8dd
--- /dev/null
+++ b/_posts/2018-05-01-coffeeandcode.markdown
@@ -0,0 +1,9 @@
+---
+title: Coffee and Code
+text: A casual co-working session - bring your laptop and whatever you're working on!
+location: Second Cup at Grad House
+link: https://github.com/UofTCoders/Events/issues/151
+date: 2018-05-01
+startTime: '09:00'
+endTime: '11:00'
+---
diff --git a/_posts/2018-05-03-coworking.markdown b/_posts/2018-05-03-coworking.markdown
new file mode 100644
index 000000000..dbd3fd6aa
--- /dev/null
+++ b/_posts/2018-05-03-coworking.markdown
@@ -0,0 +1,9 @@
+---
+title: Coworking Session
+text: Work through any of your coding problems in a friendly and collaborative environment.
+location: MADLab at Gerstein
+link: https://github.com/UofTCoders/Events/issues/152
+date: 2018-05-03
+startTime: '18:00'
+endTime: '19:30'
+---
diff --git a/_posts/2018-05-10-LD-R.markdown b/_posts/2018-05-10-LD-R.markdown
new file mode 100644
index 000000000..d1653af8f
--- /dev/null
+++ b/_posts/2018-05-10-LD-R.markdown
@@ -0,0 +1,9 @@
+---
+title: Lightning Demos - R
+text: Demonstrate what you've created using R, or demo a tool or package that you've found useful.
+location: MADLab at Gerstein
+link: https://github.com/UofTCoders/Events/issues/154
+date: 2018-05-10
+startTime: '18:00'
+endTime: '19:00'
+---
diff --git a/_posts/2018-05-10-mozsprint.markdown b/_posts/2018-05-10-mozsprint.markdown
new file mode 100644
index 000000000..21a171894
--- /dev/null
+++ b/_posts/2018-05-10-mozsprint.markdown
@@ -0,0 +1,11 @@
+---
+title: Mozilla Global Sprint
+text: A fun two-day hackathon (May 10-11) where people from all over the world work on projects to promote internet health.
+location: Mozilla Toronto Office
+link: https://github.com/UofTCoders/Events/issues/153
+date: 2018-05-10
+startTime: '09:00'
+endTime: '17:00'
+---
+
+
diff --git a/_posts/2018-05-17-intro-r.markdown b/_posts/2018-05-17-intro-r.markdown
new file mode 100644
index 000000000..e802b0e57
--- /dev/null
+++ b/_posts/2018-05-17-intro-r.markdown
@@ -0,0 +1,9 @@
+---
+title: Intro to R
+text: An introduction to programming in R and using RStudio.
+location: MADLab at Gerstein
+link: https://github.com/UofTCoders/Events/issues/155
+date: 2018-05-17
+startTime: '18:00'
+endTime: '19:30'
+---
diff --git a/_posts/2018-05-24-intro-stats-r.markdown b/_posts/2018-05-24-intro-stats-r.markdown
new file mode 100644
index 000000000..14b352ca8
--- /dev/null
+++ b/_posts/2018-05-24-intro-stats-r.markdown
@@ -0,0 +1,9 @@
+---
+title: Intro to Statistics in R
+text: Learn how to use R for your statistical analyses.
+location: MADLab at Gerstein
+link: https://github.com/UofTCoders/Events/issues/156
+date: 2018-05-24
+startTime: '18:00'
+endTime: '19:30'
+---
diff --git a/_posts/2018-05-31-intermediate-stats-r.markdown b/_posts/2018-05-31-intermediate-stats-r.markdown
new file mode 100644
index 000000000..a42c7ee3d
--- /dev/null
+++ b/_posts/2018-05-31-intermediate-stats-r.markdown
@@ -0,0 +1,9 @@
+---
+title: Intermediate Statistics in R
+text: Learn how to use R for your statistical analyses.
+location: MADLab at Gerstein
+link: https://github.com/UofTCoders/Events/issues/157
+date: 2018-05-31
+startTime: '18:00'
+endTime: '19:30'
+---
diff --git a/_posts/2018-06-05-coffeeandcode.markdown b/_posts/2018-06-05-coffeeandcode.markdown
new file mode 100644
index 000000000..682604d5f
--- /dev/null
+++ b/_posts/2018-06-05-coffeeandcode.markdown
@@ -0,0 +1,9 @@
+---
+title: Coffee and Code
+text: A casual co-working session - bring your laptop and whatever you're working on!
+location: Second Cup at Grad House
+link: https://github.com/UofTCoders/Events/issues/173
+date: 2018-06-05
+startTime: '09:00'
+endTime: '11:00'
+---
diff --git a/_posts/2018-06-07-lightningdemo-editor.markdown b/_posts/2018-06-07-lightningdemo-editor.markdown
new file mode 100644
index 000000000..076ee50bd
--- /dev/null
+++ b/_posts/2018-06-07-lightningdemo-editor.markdown
@@ -0,0 +1,9 @@
+---
+title: Lightning Demos - Your favourite text editor
+text: Show off your favourite text editor and why you love using it over the others whether it's Vim, Sublime, Atom, etc.
+location: MADLab at Gerstein
+link: https://github.com/UofTCoders/Events/issues/160
+date: 2018-06-07
+startTime: '18:00'
+endTime: '19:30'
+---
diff --git a/_posts/2018-06-14-intro-bash.markdown b/_posts/2018-06-14-intro-bash.markdown
new file mode 100644
index 000000000..bf61592b8
--- /dev/null
+++ b/_posts/2018-06-14-intro-bash.markdown
@@ -0,0 +1,9 @@
+---
+title: Intro to Bash
+text: Basic shell scripting in Bash
+location: MADLab at Gerstein
+link: https://github.com/UofTCoders/Events/issues/159
+date: 2018-06-14
+startTime: '18:10'
+endTime: '19:00'
+---
diff --git a/_posts/2018-06-18-DC-python.markdown b/_posts/2018-06-18-DC-python.markdown
new file mode 100644
index 000000000..69969d9a2
--- /dev/null
+++ b/_posts/2018-06-18-DC-python.markdown
@@ -0,0 +1,11 @@
+---
+title: Data Carpentry Workshop (2 days) - Data analysis and visualization in Python
+text: "Join us for a hands-on two-day Data Carpentry workshop covering core small research team skills
+including data organization and cleaning, data analysis, and data visualization.
+Workshop costs $30 and is open to everyone. Click to see the event page for more details and registration!"
+location: MADLab, Gerstein Science Information Centre, Room B112
+link: https://uoftcoders.github.io/2018-06-18-utoronto/
+date: 2018-06-18
+startTime: '09:00'
+endTime: '16:30'
+---
diff --git a/_posts/2018-06-21-intro-latex.markdown b/_posts/2018-06-21-intro-latex.markdown
new file mode 100644
index 000000000..4cc787080
--- /dev/null
+++ b/_posts/2018-06-21-intro-latex.markdown
@@ -0,0 +1,9 @@
+---
+title: Intro to LaTeX
+text: We will introduce LaTeX and the basics of creating scientific documents with it.
+location: MADLab at Gerstein
+link: https://github.com/UofTCoders/Events/issues/158
+date: 2018-06-21
+startTime: '18:10'
+endTime: '19:00'
+---
diff --git a/_posts/2018-06-26-coffeeandcode.markdown b/_posts/2018-06-26-coffeeandcode.markdown
new file mode 100644
index 000000000..b8048c41d
--- /dev/null
+++ b/_posts/2018-06-26-coffeeandcode.markdown
@@ -0,0 +1,9 @@
+---
+title: Coffee and Code
+text: A casual co-working session - bring your laptop and whatever you're working on!
+location: Second Cup at Grad House
+link: https://github.com/UofTCoders/Events/issues/175
+date: 2018-06-26
+startTime: '09:00'
+endTime: '11:00'
+---
diff --git a/_posts/2018-06-28-rmarkdown-pandoc.markdown b/_posts/2018-06-28-rmarkdown-pandoc.markdown
new file mode 100644
index 000000000..6c38bcb3c
--- /dev/null
+++ b/_posts/2018-06-28-rmarkdown-pandoc.markdown
@@ -0,0 +1,9 @@
+---
+title: RMarkdown, Markdown, and Pandoc
+text: "Learn how to use RMarkdown, knitR, and Markdown, Pandoc to convert between file formats: PDF, html, Word, etc. "
+location: MADLab at Gerstein
+link: https://github.com/UofTCoders/Events/issues/161
+date: 2018-06-28
+startTime: '18:10'
+endTime: '19:00'
+---
diff --git a/_posts/2018-07-05-gadgets-hardware.markdown b/_posts/2018-07-05-gadgets-hardware.markdown
new file mode 100644
index 000000000..78718b3f2
--- /dev/null
+++ b/_posts/2018-07-05-gadgets-hardware.markdown
@@ -0,0 +1,9 @@
+---
+title: Gadgets and Hardware
+text: Programming small devices
+location: BL520 (Claude T Bissell Building, 5th Floor)
+link: https://github.com/UofTCoders/Events/issues/163
+date: 2018-07-05
+startTime: '18:10'
+endTime: '19:30'
+---
diff --git a/_posts/2018-07-10-coffeeandcode.markdown b/_posts/2018-07-10-coffeeandcode.markdown
new file mode 100644
index 000000000..b77f28cae
--- /dev/null
+++ b/_posts/2018-07-10-coffeeandcode.markdown
@@ -0,0 +1,9 @@
+---
+title: Coffee and Code
+text: A casual co-working session - bring your laptop and whatever you're working on!
+location: Second Cup at Grad House
+link: https://github.com/UofTCoders/Events/issues/176
+date: 2018-07-10
+startTime: '09:00'
+endTime: '11:00'
+---
diff --git a/_posts/2018-07-12-DC-python.markdown b/_posts/2018-07-12-DC-python.markdown
new file mode 100644
index 000000000..f518d8da5
--- /dev/null
+++ b/_posts/2018-07-12-DC-python.markdown
@@ -0,0 +1,11 @@
+---
+title: Data Carpentry Workshop (2 days) - Data analysis and visualization in Python
+text: "Join us for a hands-on two-day Data Carpentry workshop covering core small research team skills
+including data organization and cleaning, data analysis, and data visualization.
+Workshop costs $30 and is open to everyone. Click to see the event page for more details and registration!"
+location: MADLab, Gerstein Science Information Centre, Room B112
+link: https://uoftcoders.github.io/2018-07-12-utoronto/
+date: 2018-07-12
+startTime: '09:00'
+endTime: '16:30'
+---
diff --git a/_posts/2018-07-12-coworking-hardware.markdown b/_posts/2018-07-12-coworking-hardware.markdown
new file mode 100644
index 000000000..e5f4de8cb
--- /dev/null
+++ b/_posts/2018-07-12-coworking-hardware.markdown
@@ -0,0 +1,9 @@
+---
+title: Coworking - Programming Gadgets
+text: Applying what we learned in the previous session and programming our devices
+location: BL520 (Claude T Bissell Building, 5th Floor)
+link: https://github.com/UofTCoders/Events/issues/164
+date: 2018-07-12
+startTime: '18:10'
+endTime: '19:00'
+---
diff --git a/_posts/2018-07-19-Intro-python.markdown b/_posts/2018-07-19-Intro-python.markdown
new file mode 100644
index 000000000..99287b852
--- /dev/null
+++ b/_posts/2018-07-19-Intro-python.markdown
@@ -0,0 +1,9 @@
+---
+title: Intro to Python
+text: The basics of the programming language Python with a beginner-friendly code-along
+location: MADLab at Gerstein
+link: https://github.com/UofTCoders/Events/issues/165
+date: 2018-07-19
+startTime: '18:10'
+endTime: '19:00'
+---
diff --git a/_posts/2018-07-24-coffee-and-code.md b/_posts/2018-07-24-coffee-and-code.md
new file mode 100644
index 000000000..0aec46a09
--- /dev/null
+++ b/_posts/2018-07-24-coffee-and-code.md
@@ -0,0 +1,9 @@
+---
+title: "Coffee and Code"
+text: "A casual co-working session - bring your laptop and whatever you're working on!"
+location: "Second Cup at Grad Room"
+link: "https://github.com/UofTCoders/Events/issues/178"
+date: "2018-07-24"
+startTime: "09:00"
+endTime: "11:00"
+---
diff --git a/_posts/2018-07-26-statistical-testing-python.markdown b/_posts/2018-07-26-statistical-testing-python.markdown
new file mode 100644
index 000000000..433e59d38
--- /dev/null
+++ b/_posts/2018-07-26-statistical-testing-python.markdown
@@ -0,0 +1,9 @@
+---
+title: Measures of association and statistical testing of hypotheses in Python
+text: Introduction to statistical testing of hypotheses in Python using SciPy
+location: MADLab at Gerstein
+link: https://github.com/UofTCoders/Events/issues/166
+date: 2018-07-26
+startTime: '18:10'
+endTime: '19:30'
+---
diff --git a/_posts/2018-08-02-web-scraping.markdown b/_posts/2018-08-02-web-scraping.markdown
new file mode 100644
index 000000000..2b3afbd8e
--- /dev/null
+++ b/_posts/2018-08-02-web-scraping.markdown
@@ -0,0 +1,9 @@
+---
+title: Web Scraping
+text:
+location: MADLab at Gerstein
+link: https://github.com/UofTCoders/Events/issues/167
+date: 2018-08-02
+startTime: '18:10'
+endTime: '19:00'
+---
diff --git a/_posts/2018-08-07-coffee-and-code.md b/_posts/2018-08-07-coffee-and-code.md
new file mode 100644
index 000000000..debc1918b
--- /dev/null
+++ b/_posts/2018-08-07-coffee-and-code.md
@@ -0,0 +1,9 @@
+---
+title: "Coffee and Code"
+text: "A casual co-working session - bring your laptop and whatever you're working on!"
+location: "Second Cup at Grad Room"
+link: "https://github.com/UofTCoders/Events/issues/179"
+date: "2018-08-07"
+startTime: "09:00"
+endTime: "11:00"
+---
diff --git a/_posts/2018-08-09-coworking-python.markdown b/_posts/2018-08-09-coworking-python.markdown
new file mode 100644
index 000000000..f623de3d6
--- /dev/null
+++ b/_posts/2018-08-09-coworking-python.markdown
@@ -0,0 +1,9 @@
+---
+title: Coworking - Python
+text: Python-themed coworking session
+location: MADLab at Gerstein
+link: https://github.com/UofTCoders/Events/issues/168
+date: 2018-08-09
+startTime: '18:10'
+endTime: '19:00'
+---
diff --git a/_posts/2018-08-16-intro-git.markdown b/_posts/2018-08-16-intro-git.markdown
new file mode 100644
index 000000000..a45c45f0f
--- /dev/null
+++ b/_posts/2018-08-16-intro-git.markdown
@@ -0,0 +1,9 @@
+---
+title: Intro to Git
+text: Introduction to Git version control
+location: MADLab at Gerstein
+link: https://github.com/UofTCoders/Events/issues/169
+date: 2018-08-16
+startTime: '18:10'
+endTime: '19:00'
+---
diff --git a/_posts/2018-08-23-open-source-project-101.markdown b/_posts/2018-08-23-open-source-project-101.markdown
new file mode 100644
index 000000000..cbdf68d6f
--- /dev/null
+++ b/_posts/2018-08-23-open-source-project-101.markdown
@@ -0,0 +1,9 @@
+---
+title: Contributing to an Open Source Project 101
+text: Learn how to contribute to an open source project
+location: MADLab at Gerstein
+link: https://github.com/UofTCoders/Events/issues/170
+date: 2018-08-23
+startTime: '18:10'
+endTime: '19:00'
+---
diff --git a/_posts/2018-08-30-virtualization-docker-sphinx.markdown b/_posts/2018-08-30-virtualization-docker-sphinx.markdown
new file mode 100644
index 000000000..65b53b525
--- /dev/null
+++ b/_posts/2018-08-30-virtualization-docker-sphinx.markdown
@@ -0,0 +1,9 @@
+---
+title: Virtualization vs. Docker Images, Sphinx for Documentation
+text:
+location: MADLab at Gerstein
+link: https://github.com/UofTCoders/Events/issues/171
+date: 2018-08-30
+startTime: '18:10'
+endTime: '19:30'
+---
diff --git a/_posts/2018-09-04-coffee-and-code.md b/_posts/2018-09-04-coffee-and-code.md
new file mode 100644
index 000000000..1c925a3eb
--- /dev/null
+++ b/_posts/2018-09-04-coffee-and-code.md
@@ -0,0 +1,9 @@
+---
+title: "Coffee and Code"
+text: "A casual co-working session - bring your laptop and whatever you're working on!"
+location: "Second Cup at Grad Room"
+link: "https://github.com/UofTCoders/Events/issues/181"
+date: "2018-09-04"
+startTime: "09:00"
+endTime: "11:00"
+---
diff --git a/_posts/2018-09-06-coworking-bugs-pull-reqs.markdown b/_posts/2018-09-06-coworking-bugs-pull-reqs.markdown
new file mode 100644
index 000000000..4424beb6e
--- /dev/null
+++ b/_posts/2018-09-06-coworking-bugs-pull-reqs.markdown
@@ -0,0 +1,9 @@
+---
+title: Coworking - Bugs and Pull Requests
+text: A coworking session to practice contributing to open source projects
+location: MADLab at Gerstein
+link: https://github.com/UofTCoders/Events/issues/172
+date: 2018-09-06
+startTime: '18:10'
+endTime: '19:00'
+---
diff --git a/_posts/2018-09-10-DC-python.markdown b/_posts/2018-09-10-DC-python.markdown
new file mode 100644
index 000000000..bce0222aa
--- /dev/null
+++ b/_posts/2018-09-10-DC-python.markdown
@@ -0,0 +1,11 @@
+---
+title: Data Carpentry Workshop (2 days) - Data analysis and visualization in Python
+text: "Join us for a hands-on two-day Data Carpentry workshop covering core small research team skills
+including data organization and cleaning, data analysis, and data visualization.
+Workshop costs $25 and is open to everyone. Click to see the event page for more details and registration!"
+location: MADLab, Gerstein Science Information Centre, Room B112
+link: https://uoftcoders.github.io/2018-09-10-utoronto/
+date: 2018-09-10
+startTime: '09:00'
+endTime: '16:30'
+---
diff --git a/_posts/2018-09-13-social.md b/_posts/2018-09-13-social.md
new file mode 100644
index 000000000..081e67cb1
--- /dev/null
+++ b/_posts/2018-09-13-social.md
@@ -0,0 +1,9 @@
+---
+title: "UofT Coders Social- September 13"
+text: "We're having a social at the GSU Pub to welcome new and returning members with the start of the new academic year. Join us and get to know the exec and fellow members of the UofT Coders community in a less formal environment. You do not need to have attended an event previously to attend. Everyone is welcome."
+location: "GSU pub"
+link: "https://github.com/UofTCoders/Events/issues/182"
+date: "2018-09-13"
+startTime: "18:10"
+endTime: "21:00"
+---
diff --git a/_posts/2018-09-18-coffee-and-code.md b/_posts/2018-09-18-coffee-and-code.md
new file mode 100644
index 000000000..203b64059
--- /dev/null
+++ b/_posts/2018-09-18-coffee-and-code.md
@@ -0,0 +1,9 @@
+---
+title: "Coffee and Code"
+text: "A casual co-working session - bring your laptop and whatever you're working on!"
+location: "Second Cup at Grad Room"
+link: "https://github.com/UofTCoders/Events/issues/183"
+date: "2018-09-18"
+startTime: "09:00"
+endTime: "11:00"
+---
diff --git a/_posts/2018-09-20-coworking.md b/_posts/2018-09-20-coworking.md
new file mode 100644
index 000000000..9390de276
--- /dev/null
+++ b/_posts/2018-09-20-coworking.md
@@ -0,0 +1,10 @@
+---
+title: "Coworking"
+text: "Co-working sessions are meetings where you can work on projects and discuss strategies and tools to solve your coding problems with the help of other coding group members. Even if you're just starting out, this is a great place to get started.
+"
+location: "MADLab at Gerstein Science Information Centre"
+link: "https://github.com/UofTCoders/Events/issues/186"
+date: "2018-09-20"
+startTime: "18:10"
+endTime: "19:00"
+---
diff --git a/_posts/2018-09-27-demo-reproducible-documents.md b/_posts/2018-09-27-demo-reproducible-documents.md
new file mode 100644
index 000000000..71e56157a
--- /dev/null
+++ b/_posts/2018-09-27-demo-reproducible-documents.md
@@ -0,0 +1,10 @@
+---
+title: "Lightning Demos: reproducible documents (reports, papers and thesis)"
+text: "What is your approach to creating reproducible documents? how do you use the capabilities in R, Python, Latex, pandoc, etc. to integrate your data analysis with writing your reports and other manuscripts? Come to this session and show your peers what is your workflow for creating reproducible documents or hear from others how they do it.
+"
+location: "MADLab"
+link: "https://github.com/UofTCoders/Events/issues/187"
+date: "2018-09-27"
+startTime: "18:10"
+endTime: "19:00"
+---
diff --git a/_posts/2018-10-02-coffee-and-code.md b/_posts/2018-10-02-coffee-and-code.md
new file mode 100644
index 000000000..f1c7817c0
--- /dev/null
+++ b/_posts/2018-10-02-coffee-and-code.md
@@ -0,0 +1,9 @@
+---
+title: "Coffee and Code"
+text: "A casual co-working session - bring your laptop and whatever you're working on!"
+location: "Second Cup at Grad Room"
+link: "https://github.com/UofTCoders/Events/issues/184"
+date: "2018-10-02"
+startTime: "09:00"
+endTime: "11:00"
+---
diff --git a/_posts/2018-10-04-git-intro.md b/_posts/2018-10-04-git-intro.md
new file mode 100644
index 000000000..df0575c52
--- /dev/null
+++ b/_posts/2018-10-04-git-intro.md
@@ -0,0 +1,10 @@
+---
+title: "Intro to Version Control with Git and GitHub"
+text: "Learn how to take advantage of version control for your projects and why it can be useful. We will be focusing on Git, a popular piece of software that does version control. This session is geared towards complete beginners - if you've never touched Git before, this is for you!
+"
+location: "MADLab"
+link: "https://github.com/UofTCoders/Events/issues/196"
+date: "2018-10-04"
+startTime: "18:10"
+endTime: "19:00"
+---
diff --git a/_posts/2018-10-11-git-intermediate.md b/_posts/2018-10-11-git-intermediate.md
new file mode 100644
index 000000000..3bb3de9ce
--- /dev/null
+++ b/_posts/2018-10-11-git-intermediate.md
@@ -0,0 +1,10 @@
+---
+title: "Intermediate Topics in Git and GitHub"
+text: "In this session, we will build on the material presented at last week's Intro to Git and will discuss more advanced ways to use Git in collaboration with others. The material will be aimed at an audience that has some familiarity with basic Git commands, but by no means do you need to be experienced or an expert. If you attended last week's session or have used Git before or have looked over the material from last week, you should be well-prepared.
+"
+location: "MADLab"
+link: "https://github.com/UofTCoders/Events/issues/195"
+date: "2018-10-11"
+startTime: "18:10"
+endTime: "19:00"
+---
diff --git a/_posts/2018-10-18-R-intro.md b/_posts/2018-10-18-R-intro.md
new file mode 100644
index 000000000..40df62e38
--- /dev/null
+++ b/_posts/2018-10-18-R-intro.md
@@ -0,0 +1,9 @@
+---
+title: "Intro R and Tidyverse"
+text: ""
+location: "MADLab"
+link: "https://github.com/UofTCoders/Events/issues/197"
+date: "2018-10-18"
+startTime: "18:10"
+endTime: "19:00"
+---
diff --git a/_posts/2018-10-25-python-intro.md b/_posts/2018-10-25-python-intro.md
new file mode 100644
index 000000000..57894e067
--- /dev/null
+++ b/_posts/2018-10-25-python-intro.md
@@ -0,0 +1,9 @@
+---
+title: "Intro Python with Numpy and Pandas"
+text: ""
+location: "MADLab"
+link: "https://github.com/UofTCoders/Events/issues/198"
+date: "2018-10-25"
+startTime: "18:10"
+endTime: "19:00"
+---
diff --git a/_posts/2018-10-30-coffee-and-code.md b/_posts/2018-10-30-coffee-and-code.md
new file mode 100644
index 000000000..2993f23e6
--- /dev/null
+++ b/_posts/2018-10-30-coffee-and-code.md
@@ -0,0 +1,9 @@
+---
+title: "Coffee and Code"
+text: "A casual co-working session - bring your laptop and whatever you're working on!"
+location: "Second Cup at Grad Room"
+link: "https://github.com/UofTCoders/Events/issues/206"
+date: "2018-10-30"
+startTime: "09:00"
+endTime: "11:00"
+---
diff --git a/_posts/2018-11-01-R-plotting.md b/_posts/2018-11-01-R-plotting.md
new file mode 100644
index 000000000..3b85d462d
--- /dev/null
+++ b/_posts/2018-11-01-R-plotting.md
@@ -0,0 +1,9 @@
+---
+title: "R: Plotting with theme of Heatmaps"
+text: ""
+location: "MADLab"
+link: "https://github.com/UofTCoders/Events/issues/199"
+date: "2018-11-01"
+startTime: "18:10"
+endTime: "19:00"
+---
diff --git a/_posts/2018-11-08-python-plotting.md b/_posts/2018-11-08-python-plotting.md
new file mode 100644
index 000000000..c05d020ed
--- /dev/null
+++ b/_posts/2018-11-08-python-plotting.md
@@ -0,0 +1,9 @@
+---
+title: "Python: Plotting with Seaborn and Matplotlib"
+text: ""
+location: "MADLab"
+link: "https://github.com/UofTCoders/Events/issues/200"
+date: "2018-11-08"
+startTime: "18:10"
+endTime: "19:00"
+---
diff --git a/_posts/2018-11-13-coffee-and-code.md b/_posts/2018-11-13-coffee-and-code.md
new file mode 100644
index 000000000..31449de12
--- /dev/null
+++ b/_posts/2018-11-13-coffee-and-code.md
@@ -0,0 +1,9 @@
+---
+title: "Coffee and Code"
+text: "A casual co-working session - bring your laptop and whatever you're working on!"
+location: "Second Cup at Grad Room"
+link: "https://github.com/UofTCoders/Events/issues/207"
+date: "2018-11-13"
+startTime: "09:00"
+endTime: "11:00"
+---
diff --git a/_posts/2018-11-15-R-data-wrangling.md b/_posts/2018-11-15-R-data-wrangling.md
new file mode 100644
index 000000000..cc151d5dc
--- /dev/null
+++ b/_posts/2018-11-15-R-data-wrangling.md
@@ -0,0 +1,9 @@
+---
+title: "R: Magrittr/Dplyr/Tidyr for data wrangling"
+text: ""
+location: "MADLab"
+link: "https://github.com/UofTCoders/Events/issues/201"
+date: "2018-11-15"
+startTime: "18:10"
+endTime: "19:00"
+---
diff --git a/_posts/2018-11-22-python-machine-learning.md b/_posts/2018-11-22-python-machine-learning.md
new file mode 100644
index 000000000..f386f7ed6
--- /dev/null
+++ b/_posts/2018-11-22-python-machine-learning.md
@@ -0,0 +1,9 @@
+---
+title: "Python: Machine Learning with scikit-learn"
+text: ""
+location: "MADLab"
+link: "https://github.com/UofTCoders/Events/issues/202"
+date: "2018-11-22"
+startTime: "18:10"
+endTime: "19:00"
+---
diff --git a/_posts/2018-11-27-coffee-and-code.md b/_posts/2018-11-27-coffee-and-code.md
new file mode 100644
index 000000000..e8da7015a
--- /dev/null
+++ b/_posts/2018-11-27-coffee-and-code.md
@@ -0,0 +1,9 @@
+---
+title: "Coffee and Code"
+text: "A casual co-working session - bring your laptop and whatever you're working on!"
+location: "Second Cup at Grad Room"
+link: "https://github.com/UofTCoders/Events/issues/208"
+date: "2018-11-27"
+startTime: "09:00"
+endTime: "11:00"
+---
diff --git a/_posts/2018-11-29-R-stats.md b/_posts/2018-11-29-R-stats.md
new file mode 100644
index 000000000..2b1ed13f9
--- /dev/null
+++ b/_posts/2018-11-29-R-stats.md
@@ -0,0 +1,9 @@
+---
+title: "R: Statistical Methods"
+text: ""
+location: "MADLab"
+link: "https://github.com/UofTCoders/Events/issues/203"
+date: "2018-11-29"
+startTime: "18:10"
+endTime: "19:00"
+---
diff --git a/_posts/2018-12-06-python-stats.md b/_posts/2018-12-06-python-stats.md
new file mode 100644
index 000000000..efaeef70d
--- /dev/null
+++ b/_posts/2018-12-06-python-stats.md
@@ -0,0 +1,9 @@
+---
+title: "Python: Statistical Methods"
+text: ""
+location: "MADLab"
+link: "https://github.com/UofTCoders/Events/issues/204"
+date: "2018-12-06"
+startTime: "18:10"
+endTime: "19:00"
+---
diff --git a/_posts/2018-12-11-coffee-and-code.md b/_posts/2018-12-11-coffee-and-code.md
new file mode 100644
index 000000000..946ffddc8
--- /dev/null
+++ b/_posts/2018-12-11-coffee-and-code.md
@@ -0,0 +1,9 @@
+---
+title: "Coffee and Code"
+text: "A casual co-working session - bring your laptop and whatever you're working on!"
+location: "Second Cup at Grad Room"
+link: "https://github.com/UofTCoders/Events/issues/209"
+date: "2018-12-11"
+startTime: "09:00"
+endTime: "11:00"
+---
diff --git a/_posts/2019-01-10-intro-python.md b/_posts/2019-01-10-intro-python.md
new file mode 100644
index 000000000..940876848
--- /dev/null
+++ b/_posts/2019-01-10-intro-python.md
@@ -0,0 +1,10 @@
+---
+title: "Intro to Python"
+text: "The basics of data analysis using the programming language Python with a beginner-friendly participatory live-coding.
+"
+location: "MADLab"
+link: "NA"
+date: "2019-01-10"
+startTime: "18:10"
+endTime: "19:00"
+---
diff --git a/_posts/2019-01-15-coffee-and-code.md b/_posts/2019-01-15-coffee-and-code.md
new file mode 100644
index 000000000..1a44243f7
--- /dev/null
+++ b/_posts/2019-01-15-coffee-and-code.md
@@ -0,0 +1,9 @@
+---
+title: "Coffee and Code"
+text: "A casual co-working session - bring your laptop and whatever you're working on!"
+location: "Second Cup at Grad Room"
+link: "https://github.com/UofTCoders/Events/issues/211"
+date: "2019-01-15"
+startTime: "09:00"
+endTime: "11:00"
+---
diff --git a/_posts/2019-01-17-Intro-R.md b/_posts/2019-01-17-Intro-R.md
new file mode 100644
index 000000000..6029d2326
--- /dev/null
+++ b/_posts/2019-01-17-Intro-R.md
@@ -0,0 +1,10 @@
+---
+title: "Intro to R and Tidyverse"
+text: "The basics of using R and the Tidyverse for working with data, specifically: - Intro to R/navigating RStudio - Intro to Tidyverse - pipe operators - Basic data wrangling with dplyr and tidyr packages
+"
+location: "MADLab"
+link: "https://github.com/UofTCoders/Events/issues/219"
+date: "2019-01-17"
+startTime: "18:10"
+endTime: "19:00"
+---
diff --git a/_posts/2019-01-24-Intro-Bash.md b/_posts/2019-01-24-Intro-Bash.md
new file mode 100644
index 000000000..5303b593a
--- /dev/null
+++ b/_posts/2019-01-24-Intro-Bash.md
@@ -0,0 +1,10 @@
+---
+title: "Intro to Bash/Shell Scripting"
+text: "This introduction to BASH aims to make participants capable of working from the command line in Unix environments. The focus of this lesson will be to learn common file system tasks and to use built-in tools to make your work more efficient (and fun!). This is a beginner level workshop, so no previous knowledge is required. A few intermediate level concept will be introduced, but we will not go into scripting in BASH.
+"
+location: "MADLab"
+link: "https://github.com/UofTCoders/Events/issues/220"
+date: "2019-01-24"
+startTime: "18:10"
+endTime: "19:00"
+---
diff --git a/_posts/2019-01-29-coffee-and-code.md b/_posts/2019-01-29-coffee-and-code.md
new file mode 100644
index 000000000..3f9ca0cab
--- /dev/null
+++ b/_posts/2019-01-29-coffee-and-code.md
@@ -0,0 +1,9 @@
+---
+title: "Coffee and Code"
+text: "A casual co-working session - bring your laptop and whatever you're working on!"
+location: "Second Cup at Grad Room"
+link: "https://github.com/UofTCoders/Events/issues/212"
+date: "2019-01-29"
+startTime: "09:00"
+endTime: "11:00"
+---
diff --git a/_posts/2019-01-31-inkscape.md b/_posts/2019-01-31-inkscape.md
new file mode 100644
index 000000000..240e4b700
--- /dev/null
+++ b/_posts/2019-01-31-inkscape.md
@@ -0,0 +1,11 @@
+---
+title: "Inkscape - An Open-Source Alternative to Adobe Illustrator"
+text: "We will learn to use Inkscape, a cross-platform open source graphic design software.
+We will cover: - why use vector graphics instead of rasterized, - basic interface features of Inkscape - paths/shapes - strokes/fills - groups/layers/alignment - resizing drawing region and exporting - importing from other sources (e.g. plots generated in R or Python)
+"
+location: "MADLab"
+link: "https://github.com/UofTCoders/Events/issues/221"
+date: "2019-01-31"
+startTime: "18:10"
+endTime: "19:00"
+---
diff --git a/_posts/2019-02-07-R-reshape2.md b/_posts/2019-02-07-R-reshape2.md
new file mode 100644
index 000000000..32708beac
--- /dev/null
+++ b/_posts/2019-02-07-R-reshape2.md
@@ -0,0 +1,9 @@
+---
+title: "Intro to TidyR and Reshape2"
+text: ""
+location: "MADLab"
+link: "https://github.com/UofTCoders/Events/issues/222"
+date: "2019-02-07"
+startTime: "18:10"
+endTime: "19:00"
+---
diff --git a/_posts/2019-02-12-coffee-and-code.md b/_posts/2019-02-12-coffee-and-code.md
new file mode 100644
index 000000000..4efb45db8
--- /dev/null
+++ b/_posts/2019-02-12-coffee-and-code.md
@@ -0,0 +1,9 @@
+---
+title: "Coffee and Code"
+text: "A casual co-working session - bring your laptop and whatever you're working on!"
+location: "Second Cup at Grad Room"
+link: "https://github.com/UofTCoders/Events/issues/213"
+date: "2019-02-12"
+startTime: "09:00"
+endTime: "11:00"
+---
diff --git a/_posts/2019-02-14-python-imageprocessing.md b/_posts/2019-02-14-python-imageprocessing.md
new file mode 100644
index 000000000..77238604c
--- /dev/null
+++ b/_posts/2019-02-14-python-imageprocessing.md
@@ -0,0 +1,10 @@
+---
+title: "Image Processing in Python"
+text: "This is an introductory tutorial on image processing using Python packages. We will understand image data types, manipulate and prepare images for analysis such as image segmentation.
+"
+location: "MADLab"
+link: "https://github.com/UofTCoders/Events/issues/223"
+date: "2019-02-14"
+startTime: "18:10"
+endTime: "19:00"
+---
diff --git a/_posts/2019-02-21-R-shinyapps.md b/_posts/2019-02-21-R-shinyapps.md
new file mode 100644
index 000000000..ef5131fc1
--- /dev/null
+++ b/_posts/2019-02-21-R-shinyapps.md
@@ -0,0 +1,9 @@
+---
+title: "R: Interactive Plotting with Shinny Apps"
+text: ""
+location: "MADLab"
+link: "https://github.com/UofTCoders/Events/issues/224"
+date: "2019-02-21"
+startTime: "18:10"
+endTime: "19:00"
+---
diff --git a/_posts/2019-02-26-coffee-and-code.md b/_posts/2019-02-26-coffee-and-code.md
new file mode 100644
index 000000000..d252e73af
--- /dev/null
+++ b/_posts/2019-02-26-coffee-and-code.md
@@ -0,0 +1,9 @@
+---
+title: "Coffee and Code"
+text: "A casual co-working session - bring your laptop and whatever you're working on!"
+location: "Second Cup at Grad Room"
+link: "https://github.com/UofTCoders/Events/issues/214"
+date: "2019-02-26"
+startTime: "09:00"
+endTime: "11:00"
+---
diff --git a/_posts/2019-02-28-deeplearning-tensorflow.md b/_posts/2019-02-28-deeplearning-tensorflow.md
new file mode 100644
index 000000000..f9cb88c95
--- /dev/null
+++ b/_posts/2019-02-28-deeplearning-tensorflow.md
@@ -0,0 +1,9 @@
+---
+title: "Co-working Session"
+text: "Work on your code/research in a friendly and welcoming environment."
+location: "MADLab"
+link: "https://github.com/UofTCoders/Events/issues/225"
+date: "2019-02-28"
+startTime: "18:10"
+endTime: "19:30"
+---
diff --git a/_posts/2019-03-07-git-testing.md b/_posts/2019-03-07-git-testing.md
new file mode 100644
index 000000000..b1a36f79e
--- /dev/null
+++ b/_posts/2019-03-07-git-testing.md
@@ -0,0 +1,9 @@
+---
+title: "Git Continuous Integration and Testing"
+text: ""
+location: "MADLab"
+link: "https://github.com/UofTCoders/Events/issues/226"
+date: "2019-03-07"
+startTime: "18:10"
+endTime: "19:00"
+---
diff --git a/_posts/2019-03-12-coffee-and-code.md b/_posts/2019-03-12-coffee-and-code.md
new file mode 100644
index 000000000..1d53875cd
--- /dev/null
+++ b/_posts/2019-03-12-coffee-and-code.md
@@ -0,0 +1,9 @@
+---
+title: "Coffee and Code"
+text: "A casual co-working session - bring your laptop and whatever you're working on!"
+location: "Second Cup at Grad Room"
+link: "https://github.com/UofTCoders/Events/issues/215"
+date: "2019-03-12"
+startTime: "09:00"
+endTime: "11:00"
+---
diff --git a/_posts/2019-03-14-software-defined-radio.md b/_posts/2019-03-14-software-defined-radio.md
new file mode 100644
index 000000000..1342fe7b7
--- /dev/null
+++ b/_posts/2019-03-14-software-defined-radio.md
@@ -0,0 +1,9 @@
+---
+title: "Information on the Air - Software Defined Radio"
+text: ""
+location: "MADLab"
+link: "https://github.com/UofTCoders/Events/issues/227"
+date: "2019-03-14"
+startTime: "18:10"
+endTime: "19:00"
+---
diff --git a/_posts/2019-03-21-Regression-R.md b/_posts/2019-03-21-Regression-R.md
new file mode 100644
index 000000000..ca6477d74
--- /dev/null
+++ b/_posts/2019-03-21-Regression-R.md
@@ -0,0 +1,9 @@
+---
+title: "Regression Models in R"
+text: ""
+location: "MADLab"
+link: "https://github.com/UofTCoders/Events/issues/228"
+date: "2019-03-21"
+startTime: "18:10"
+endTime: "19:00"
+---
diff --git a/_posts/2019-03-26-coffee-and-code.md b/_posts/2019-03-26-coffee-and-code.md
new file mode 100644
index 000000000..932af1a4d
--- /dev/null
+++ b/_posts/2019-03-26-coffee-and-code.md
@@ -0,0 +1,9 @@
+---
+title: "Coffee and Code"
+text: "A casual co-working session - bring your laptop and whatever you're working on!"
+location: "Second Cup at Grad Room"
+link: "https://github.com/UofTCoders/Events/issues/216"
+date: "2019-03-26"
+startTime: "09:00"
+endTime: "11:00"
+---
diff --git a/_posts/2019-03-28-HTML.md b/_posts/2019-03-28-HTML.md
new file mode 100644
index 000000000..8a642ae37
--- /dev/null
+++ b/_posts/2019-03-28-HTML.md
@@ -0,0 +1,9 @@
+---
+title: "HTML and Web Design"
+text: ""
+location: "MADLab"
+link: "https://github.com/UofTCoders/Events/issues/229"
+date: "2019-03-28"
+startTime: "18:10"
+endTime: "19:00"
+---
diff --git a/_posts/2019-04-04-ggplot2.md b/_posts/2019-04-04-ggplot2.md
new file mode 100644
index 000000000..5dcdb4512
--- /dev/null
+++ b/_posts/2019-04-04-ggplot2.md
@@ -0,0 +1,9 @@
+---
+title: "Intro to ggplot2 in R"
+text: ""
+location: "MADLab"
+link: "https://github.com/UofTCoders/Events/issues/230"
+date: "2019-04-04"
+startTime: "18:10"
+endTime: "19:00"
+---
diff --git a/_posts/2019-04-09-coffee-and-code.md b/_posts/2019-04-09-coffee-and-code.md
new file mode 100644
index 000000000..7ebf3fb04
--- /dev/null
+++ b/_posts/2019-04-09-coffee-and-code.md
@@ -0,0 +1,9 @@
+---
+title: "Coffee and Code"
+text: "A casual co-working session - bring your laptop and whatever you're working on!"
+location: "Second Cup at Grad Room"
+link: "https://github.com/UofTCoders/Events/issues/217"
+date: "2019-04-09"
+startTime: "09:00"
+endTime: "11:00"
+---
diff --git a/_posts/2019-04-11-co-working.md b/_posts/2019-04-11-co-working.md
new file mode 100644
index 000000000..2b4d83296
--- /dev/null
+++ b/_posts/2019-04-11-co-working.md
@@ -0,0 +1,9 @@
+---
+title: "co-working"
+text: ""
+location: "MADLab"
+link: "https://github.com/UofTCoders/Events/issues/232"
+date: "2019-04-11"
+startTime: "18:10"
+endTime: "19:00"
+---
diff --git a/_posts/2019-04-18-Deeplearning-pytorch.md b/_posts/2019-04-18-Deeplearning-pytorch.md
new file mode 100644
index 000000000..4df8b11ed
--- /dev/null
+++ b/_posts/2019-04-18-Deeplearning-pytorch.md
@@ -0,0 +1,9 @@
+---
+title: "Deep Learning with PyTorch"
+text: ""
+location: "MADLab"
+link: "https://github.com/UofTCoders/Events/issues/231"
+date: "2019-04-18"
+startTime: "18:10"
+endTime: "19:00"
+---
diff --git a/_posts/2019-04-25-social.md b/_posts/2019-04-25-social.md
new file mode 100644
index 000000000..4361c22ef
--- /dev/null
+++ b/_posts/2019-04-25-social.md
@@ -0,0 +1,9 @@
+---
+title: "End of Term Social"
+text: ""
+location: "TBA"
+link: "https://github.com/UofTCoders/Events/issues/233"
+date: "2019-04-25"
+startTime: "19:00"
+endTime: "21:00"
+---
diff --git a/_posts/2019-05-23-Intro-R.md b/_posts/2019-05-23-Intro-R.md
new file mode 100644
index 000000000..5a9b26a29
--- /dev/null
+++ b/_posts/2019-05-23-Intro-R.md
@@ -0,0 +1,10 @@
+---
+title: "Intro to R and Tidyverse"
+text: "The basics of using R and the Tidyverse for working with data, specifically: - Intro to R/navigating RStudio - Intro to Tidyverse - pipe operators - Basic data wrangling with dplyr and tidyr packages
+"
+location: "MADLab"
+link: "https://github.com/UofTCoders/Events/issues/235"
+date: "2019-05-23"
+startTime: "18:10"
+endTime: "19:00"
+---
diff --git a/_posts/2019-05-30-r-ggplot.md b/_posts/2019-05-30-r-ggplot.md
new file mode 100644
index 000000000..2f57048fc
--- /dev/null
+++ b/_posts/2019-05-30-r-ggplot.md
@@ -0,0 +1,9 @@
+---
+title: "Data visualization in R with ggplot2"
+text: "The fundamentals of visualizing data in R using the ggplot2 package."
+location: "MADLab"
+link: "https://github.com/UofTCoders/Events/issues/236"
+date: "2019-05-30"
+startTime: "18:10"
+endTime: "19:00"
+---
diff --git a/_posts/2019-06-06-r-statistics.md b/_posts/2019-06-06-r-statistics.md
new file mode 100644
index 000000000..a89766bf7
--- /dev/null
+++ b/_posts/2019-06-06-r-statistics.md
@@ -0,0 +1,10 @@
+---
+title: "Statistics in R"
+text: "Building from our previous lesson, we will go over more advanced statistical analyses using the R programming language, and especially cases where your data may be a little bit messy or you might be working with repeated-measures data (also known as hierarchical data or within-subject data). We'll assume that you are familiar with basic linear regression (e.g. testing if x predicts y) and statistics basics (e.g. how to interpret a p-value), but we will do a brief review and explain everything else as we go!
+"
+location: "MADLab"
+link: "https://github.com/UofTCoders/Events/issues/237"
+date: "2019-06-06"
+startTime: "18:10"
+endTime: "19:00"
+---
diff --git a/_posts/2019-06-13-intro-python.md b/_posts/2019-06-13-intro-python.md
new file mode 100644
index 000000000..8d28b8e4a
--- /dev/null
+++ b/_posts/2019-06-13-intro-python.md
@@ -0,0 +1,10 @@
+---
+title: "Intro to Python"
+text: "Introduction to the programming language Python with a beginner-friendly participatory live-coding.
+"
+location: "MADLab"
+link: "https://github.com/UofTCoders/Events/issues/238"
+date: "2019-06-13"
+startTime: "18:10"
+endTime: "19:00"
+---
diff --git a/_posts/2019-06-20-data-analysis-workflow.md b/_posts/2019-06-20-data-analysis-workflow.md
new file mode 100644
index 000000000..a3267f48e
--- /dev/null
+++ b/_posts/2019-06-20-data-analysis-workflow.md
@@ -0,0 +1,10 @@
+---
+title: "Designing data analysis workflows"
+text: "How to make data analysis workflows in the programming language Python with a beginner-friendly participatory live-coding.
+"
+location: "MADLab"
+link: "https://github.com/UofTCoders/Events/issues/239"
+date: "2019-06-20"
+startTime: "18:10"
+endTime: "19:00"
+---
diff --git a/_posts/2019-06-27-oop-python.md b/_posts/2019-06-27-oop-python.md
new file mode 100644
index 000000000..1f33aaaaf
--- /dev/null
+++ b/_posts/2019-06-27-oop-python.md
@@ -0,0 +1,10 @@
+---
+title: "Object-oriented programming in Python"
+text: "Understanding and using object-oriented programming in the programming language Python with a beginner-friendly participatory live-coding.
+"
+location: "MADLab"
+link: "https://github.com/UofTCoders/Events/issues/240"
+date: "2019-06-27"
+startTime: "18:10"
+endTime: "19:00"
+---
diff --git a/_posts/2019-07-04-coworking.md b/_posts/2019-07-04-coworking.md
new file mode 100644
index 000000000..8662594ff
--- /dev/null
+++ b/_posts/2019-07-04-coworking.md
@@ -0,0 +1,10 @@
+---
+title: "Co-working"
+text: "Join us to work on some code in good company. Bring something to work on, ask and discuss with your fellow coders.
+"
+location: "MADLab"
+link: "https://github.com/UofTCoders/Events/issues/254"
+date: "2019-07-04"
+startTime: "18:10"
+endTime: "19:00"
+---
diff --git a/_posts/2019-07-11-bash-intro.md b/_posts/2019-07-11-bash-intro.md
new file mode 100644
index 000000000..09a0c8554
--- /dev/null
+++ b/_posts/2019-07-11-bash-intro.md
@@ -0,0 +1,10 @@
+---
+title: "Intro to Bash and shell scripting"
+text: "This introduction to BASH aims to make participants capable of working from the command line in Unix environments. The focus of this lesson will be to learn common file system tasks and to use built-in tools to make your work more efficient (and fun!). This is a beginner level workshop, so no previous knowledge is required. A few intermediate level concept will be introduced, but we will not go into scripting in BASH.
+"
+location: "MADLab"
+link: "https://github.com/UofTCoders/Events/issues/242"
+date: "2019-07-11"
+startTime: "18:10"
+endTime: "19:00"
+---
diff --git a/_posts/2019-07-18-git-intro.md b/_posts/2019-07-18-git-intro.md
new file mode 100644
index 000000000..9c7dc5a3e
--- /dev/null
+++ b/_posts/2019-07-18-git-intro.md
@@ -0,0 +1,10 @@
+---
+title: "Intro to Git"
+text: "Learn how to take advantage of version control for your projects and why it can be useful. We will be focusing on Git, a popular piece of software that does version control. This session is geared towards complete beginners - if you've never touched Git before, this is for you!
+"
+location: "MADLab"
+link: "https://github.com/UofTCoders/Events/issues/243"
+date: "2019-07-18"
+startTime: "18:10"
+endTime: "19:00"
+---
diff --git a/_posts/2019-07-25-journal-club.md b/_posts/2019-07-25-journal-club.md
new file mode 100644
index 000000000..445542bd6
--- /dev/null
+++ b/_posts/2019-07-25-journal-club.md
@@ -0,0 +1,10 @@
+---
+title: "Journal Club - academic workflows"
+text: "The basics of data analysis using the programming language Python with a beginner-friendly participatory live-coding.
+"
+location: "MADLab"
+link: "https://github.com/UofTCoders/Events/issues/255"
+date: "2019-07-25"
+startTime: "18:10"
+endTime: "19:00"
+---
diff --git a/_posts/2019-08-01-collaborating-github.md b/_posts/2019-08-01-collaborating-github.md
new file mode 100644
index 000000000..74cd3d5fe
--- /dev/null
+++ b/_posts/2019-08-01-collaborating-github.md
@@ -0,0 +1,10 @@
+---
+title: "Collaborating on GitHub"
+text: "Git and Github are tools not only for version control of your own code, but are widely used for collaborative team coding! Learn more about how you can use Git collaboratively on a project, the genereal workflow as well as details about the step-by-step process.
+"
+location: "MADLab"
+link: "https://github.com/UofTCoders/Events/issues/256"
+date: "2019-08-01"
+startTime: "18:10"
+endTime: "19:00"
+---
diff --git a/_posts/2019-08-08-machine-learning.md b/_posts/2019-08-08-machine-learning.md
new file mode 100644
index 000000000..5e056a6fd
--- /dev/null
+++ b/_posts/2019-08-08-machine-learning.md
@@ -0,0 +1,9 @@
+---
+title: "Machine learning: introduction to topics"
+text: ""
+location: "MADLab"
+link: "https://github.com/UofTCoders/Events/issues/257"
+date: "2019-08-08"
+startTime: "18:10"
+endTime: "19:00"
+---
diff --git a/_posts/2019-08-15-image-processing-python.md b/_posts/2019-08-15-image-processing-python.md
new file mode 100644
index 000000000..2edbcb5a5
--- /dev/null
+++ b/_posts/2019-08-15-image-processing-python.md
@@ -0,0 +1,10 @@
+---
+title: "Image processing in Python"
+text: "This is an introductory tutorial on image processing using Python packages. We will understand image data types, manipulate and prepare images for analysis such as image segmentation.
+"
+location: "MADLab"
+link: "https://github.com/UofTCoders/Events/issues/258"
+date: "2019-08-15"
+startTime: "18:10"
+endTime: "19:00"
+---
diff --git a/_posts/2019-08-22-coworking.md b/_posts/2019-08-22-coworking.md
new file mode 100644
index 000000000..3fb924416
--- /dev/null
+++ b/_posts/2019-08-22-coworking.md
@@ -0,0 +1,10 @@
+---
+title: "Co-working"
+text: "Join us to work on some code in good company. Bring something to work on, ask and discuss with your fellow coders.
+"
+location: "MADLab"
+link: "https://github.com/UofTCoders/Events/issues/259"
+date: "2019-08-22"
+startTime: "18:10"
+endTime: "19:00"
+---
diff --git a/_posts/2019-09-26-python-intro.md b/_posts/2019-09-26-python-intro.md
new file mode 100644
index 000000000..e80dd33f4
--- /dev/null
+++ b/_posts/2019-09-26-python-intro.md
@@ -0,0 +1,10 @@
+---
+title: "Intro to Python"
+text: "Introduction to the programming language Python with a beginner-friendly participatory live-coding.
+"
+location: "MADLab"
+link: "https://github.com/UofTCoders/Events/issues/262"
+date: "2019-09-26"
+startTime: "18:10"
+endTime: "19:00"
+---
diff --git a/_posts/2019-10-03-SWC-python.md b/_posts/2019-10-03-SWC-python.md
new file mode 100644
index 000000000..3b3d37ce2
--- /dev/null
+++ b/_posts/2019-10-03-SWC-python.md
@@ -0,0 +1,11 @@
+---
+title: Software Carpentry Workshop (2 days) - Python/Unix Shell/Git
+text: "Join us for a hands-on two-day Software Carpentry workshop covering core small research team skills
+including programming with Python, automating tasks with Unix Shell, and version control with Git.
+Workshop costs $25 and is open to everyone. Click to see the event page for more details and registration!"
+location: MADLab, Gerstein Science Information Centre, Room B112
+link: https://uoftcoders.github.io/2019-10-03-utoronto/
+date: 2019-10-03
+startTime: '09:00'
+endTime: '16:30'
+---
diff --git a/_posts/2019-10-03-r-intro.md b/_posts/2019-10-03-r-intro.md
new file mode 100644
index 000000000..07342ca19
--- /dev/null
+++ b/_posts/2019-10-03-r-intro.md
@@ -0,0 +1,10 @@
+---
+title: "Intro to R"
+text: "The basics of using R and the Tidyverse for working with data, specifically: - Intro to R/navigating RStudio - Intro to Tidyverse - pipe operators - Basic data wrangling with dplyr and tidyr packages
+"
+location: "MADLab"
+link: "https://github.com/UofTCoders/Events/issues/271"
+date: "2019-10-03"
+startTime: "18:10"
+endTime: "19:00"
+---
diff --git a/_posts/2019-10-10-bash-intro.md b/_posts/2019-10-10-bash-intro.md
new file mode 100644
index 000000000..d015f9240
--- /dev/null
+++ b/_posts/2019-10-10-bash-intro.md
@@ -0,0 +1,10 @@
+---
+title: "Intro to Bash and shell scripting"
+text: "This introduction to BASH aims to make participants capable of working from the command line in Unix environments. The focus of this lesson will be to learn common file system tasks and to use built-in tools to make your work more efficient (and fun!). This is a beginner level workshop, so no previous knowledge is required. A few intermediate level concept will be introduced, but we will not go into scripting in BASH.
+"
+location: "MADLab"
+link: "https://github.com/UofTCoders/Events/issues/263"
+date: "2019-10-10"
+startTime: "18:10"
+endTime: "19:00"
+---
diff --git a/_posts/2019-10-17-git-intro.md b/_posts/2019-10-17-git-intro.md
new file mode 100644
index 000000000..5dd83fcc1
--- /dev/null
+++ b/_posts/2019-10-17-git-intro.md
@@ -0,0 +1,10 @@
+---
+title: "Intro to Git"
+text: "Learn how to take advantage of version control for your projects and why it can be useful. We will be focusing on Git, a popular piece of software that does version control. This session is geared towards complete beginners - if you've never touched Git before, this is for you!
+"
+location: "MADLab"
+link: "https://github.com/UofTCoders/Events/issues/264"
+date: "2019-10-17"
+startTime: "18:10"
+endTime: "19:00"
+---
diff --git a/_posts/2019-10-24-reproducible-programming-bp.md b/_posts/2019-10-24-reproducible-programming-bp.md
new file mode 100644
index 000000000..6cf7488c6
--- /dev/null
+++ b/_posts/2019-10-24-reproducible-programming-bp.md
@@ -0,0 +1,10 @@
+---
+title: "Best practices for reproducible programming"
+text: "People are talking a lot these days about research being 'open' and 'reproducible'. It all sounds great, but HOW do we do it? How can we apply these great ideals to our actual work? This week we'll discuss reproducible computational research, guided by [Ten simple rules for computational research](https://journals.plos.org/ploscompbiol/article?id=10.1371/journal.pcbi.1003285) and Mozilla's [code review guidelines](https://mozillascience.github.io/codeReview/review.html)
+"
+location: "MADLab"
+link: "https://github.com/UofTCoders/Events/issues/265"
+date: "2019-10-24"
+startTime: "18:10"
+endTime: "19:00"
+---
diff --git a/_posts/2019-10-31-code-review.md b/_posts/2019-10-31-code-review.md
new file mode 100644
index 000000000..24c291578
--- /dev/null
+++ b/_posts/2019-10-31-code-review.md
@@ -0,0 +1,10 @@
+---
+title: "Code Review"
+text: "We will have a brief overview of code review (looking over code for mistakes, optimization etc. to increase the overall quality of the code), why you should do it, and how to do it. Then we will jump in and look at some of the attendees' code in pairs or groups. If you have some code that is currently being developed, we encourage you to bring it to the session for code review. Don't worry if you haven't fully optimized it yet, that's why we're holding this session :) Or if you'd prefer you can take part as just a reviewer instead and see how others write code and help them check for errors too!
+"
+location: "MADLab"
+link: "https://github.com/UofTCoders/Events/issues/266"
+date: "2019-10-31"
+startTime: "18:10"
+endTime: "19:00"
+---
diff --git a/_posts/2019-11-07-python-unit-tests.md b/_posts/2019-11-07-python-unit-tests.md
new file mode 100644
index 000000000..ee49f3a55
--- /dev/null
+++ b/_posts/2019-11-07-python-unit-tests.md
@@ -0,0 +1,10 @@
+---
+title: "Python Unit Tests"
+text: "Want to be sure your code works as intended? Say hello to unit testing! Unit tests are an automated way to check your code for bugs. Not only that but developing unit tests will improve your code all on its own.
+"
+location: "MADLab"
+link: "https://github.com/UofTCoders/Events/issues/267"
+date: "2019-11-07"
+startTime: "18:10"
+endTime: "19:00"
+---
diff --git a/_posts/2019-11-14-python-statistics.md b/_posts/2019-11-14-python-statistics.md
new file mode 100644
index 000000000..d163811d7
--- /dev/null
+++ b/_posts/2019-11-14-python-statistics.md
@@ -0,0 +1,12 @@
+---
+title: "Intro to Statistics in Python"
+text: "Statistics is an important cornerstone to data analysis.
+ Our introduction to doing statistics in Python lesson
+ will go over basic descriptive and inferential statistics
+"
+location: "MADLab"
+link: "https://github.com/UofTCoders/Events/issues/268"
+date: "2019-11-14"
+startTime: "18:10"
+endTime: "19:00"
+---
diff --git a/_posts/2019-11-21-r-statistics.md b/_posts/2019-11-21-r-statistics.md
new file mode 100644
index 000000000..e995952dd
--- /dev/null
+++ b/_posts/2019-11-21-r-statistics.md
@@ -0,0 +1,10 @@
+---
+title: "Statistics in R"
+text: "Building from our previous lesson, we will go over more advanced statistical analyses using the R programming language, and especially cases where your data may be a little bit messy or you might be working with repeated-measures data (also known as hierarchical data or within-subject data). We'll assume that you are familiar with basic linear regression (e.g. testing if x predicts y) and statistics basics (e.g. how to interpret a p-value), but we will do a brief review and explain everything else as we go!
+"
+location: "MADLab"
+link: "https://github.com/UofTCoders/Events/issues/269"
+date: "2019-11-21"
+startTime: "18:10"
+endTime: "19:00"
+---
diff --git a/_posts/2019-11-28-r-ggplot.md b/_posts/2019-11-28-r-ggplot.md
new file mode 100644
index 000000000..f8f1c6b8c
--- /dev/null
+++ b/_posts/2019-11-28-r-ggplot.md
@@ -0,0 +1,10 @@
+---
+title: "Data visualization in R with ggplot2"
+text: "The fundamentals of visualizing data in R using the ggplot2 package.
+"
+location: "MADLab"
+link: "https://github.com/UofTCoders/Events/issues/270"
+date: "2019-11-28"
+startTime: "18:10"
+endTime: "19:00"
+---
diff --git a/_posts/2020-02-06-reproducible-rstudio.md b/_posts/2020-02-06-reproducible-rstudio.md
new file mode 100644
index 000000000..3f8acf2d4
--- /dev/null
+++ b/_posts/2020-02-06-reproducible-rstudio.md
@@ -0,0 +1,10 @@
+---
+title: "Reproducible Science in RStudio"
+text: "An overview of the RStudio IDE highlighting features to make your work better documented and more reproducible.
+"
+location: "MADLab"
+link: "https://github.com/UofTCoders/Events/issues/280"
+date: "2020-02-06"
+startTime: "18:10"
+endTime: "20:00"
+---
diff --git a/_posts/2020-02-27-supervised-ml-python.md b/_posts/2020-02-27-supervised-ml-python.md
new file mode 100644
index 000000000..33cd2e58d
--- /dev/null
+++ b/_posts/2020-02-27-supervised-ml-python.md
@@ -0,0 +1,10 @@
+---
+title: "Supervised machine learning in Python"
+text: "An introduction to supervised machine learning in Python.
+"
+location: "MADLab"
+link: "https://github.com/UofTCoders/Events/issues/281"
+date: "2020-02-27"
+startTime: "18:10"
+endTime: "20:00"
+---
diff --git a/_posts/2020-03-12-git-ci-python.md b/_posts/2020-03-12-git-ci-python.md
new file mode 100644
index 000000000..44a4aa1e4
--- /dev/null
+++ b/_posts/2020-03-12-git-ci-python.md
@@ -0,0 +1,10 @@
+---
+title: "Git: continuous integration with examples in Python"
+text: "An overview of setting up continuous integration in a Git repo with worked examples in Python.
+"
+location: "MADLab"
+link: "https://github.com/UofTCoders/Events/issues/283"
+date: "2020-03-12"
+startTime: "18:10"
+endTime: "20:00"
+---
diff --git a/_posts/2020-03-26-programming-tidyverse.md b/_posts/2020-03-26-programming-tidyverse.md
new file mode 100644
index 000000000..c2a384ea0
--- /dev/null
+++ b/_posts/2020-03-26-programming-tidyverse.md
@@ -0,0 +1,10 @@
+---
+title: "Programming and Data Wrangling in R with the Tidyverse"
+text: "Exploring how to develop basic software for data wrangling with the Tidyverse suite of packages.
+"
+location: "MADLab"
+link: "https://github.com/UofTCoders/Events/issues/282"
+date: "2020-03-26"
+startTime: "18:10"
+endTime: "20:00"
+---
diff --git a/_posts/2020-04-09-writing-latex-pandoc.md b/_posts/2020-04-09-writing-latex-pandoc.md
new file mode 100644
index 000000000..1769bc0c8
--- /dev/null
+++ b/_posts/2020-04-09-writing-latex-pandoc.md
@@ -0,0 +1,10 @@
+---
+title: "Scientific writing with LaTeX and Pandoc"
+text: "An introduction to writing scientific and technical documents with LaTeX and managing document formats with Pandoc.
+"
+location: "MADLab"
+link: "https://github.com/UofTCoders/Events/issues/284"
+date: "2020-04-09"
+startTime: "18:10"
+endTime: "20:00"
+---
diff --git a/_posts/2020-04-23-image-processing.md b/_posts/2020-04-23-image-processing.md
new file mode 100644
index 000000000..3829e60e6
--- /dev/null
+++ b/_posts/2020-04-23-image-processing.md
@@ -0,0 +1,10 @@
+---
+title: "Image Processing"
+text: "An introduction to Image Processing in Python.
+"
+location: "MADLab"
+link: "https://github.com/UofTCoders/Events/issues/285"
+date: "2020-04-23"
+startTime: "18:10"
+endTime: "20:00"
+---
diff --git a/_posts/2020-10-22-lightning-demos-general.md b/_posts/2020-10-22-lightning-demos-general.md
new file mode 100644
index 000000000..98ce444dd
--- /dev/null
+++ b/_posts/2020-10-22-lightning-demos-general.md
@@ -0,0 +1,10 @@
+---
+title: "Lightning demos + welcome back"
+text: "Short coding demos. Anyone is welcome to present!
+"
+location: "Zoom"
+link: "NA"
+date: "2020-10-22"
+startTime: "19:00"
+endTime: "20:00"
+---
diff --git a/_posts/2020-10-29-reproducible-rstudio.md b/_posts/2020-10-29-reproducible-rstudio.md
new file mode 100644
index 000000000..eb984a317
--- /dev/null
+++ b/_posts/2020-10-29-reproducible-rstudio.md
@@ -0,0 +1,10 @@
+---
+title: "Reproducible Science in RStudio"
+text: "An overview of the RStudio IDE highlighting features to make your work better documented and more reproducible.
+"
+location: "Zoom"
+link: "https://github.com/UofTCoders/Events/issues/287"
+date: "2020-10-29"
+startTime: "19:00"
+endTime: "20:00"
+---
diff --git a/_posts/2020-11-05-lightning-demos-python.md b/_posts/2020-11-05-lightning-demos-python.md
new file mode 100644
index 000000000..a1f62129d
--- /dev/null
+++ b/_posts/2020-11-05-lightning-demos-python.md
@@ -0,0 +1,10 @@
+---
+title: "Lightning demos: Python"
+text: "Short coding demos - this time themed specifically around Python. Anyone is welcome to present!
+"
+location: "Zoom"
+link: "https://github.com/UofTCoders/Events/issues/288"
+date: "2020-11-05"
+startTime: "19:00"
+endTime: "20:00"
+---
diff --git a/_posts/2020-11-12-programming-tidyverse.md b/_posts/2020-11-12-programming-tidyverse.md
new file mode 100644
index 000000000..65c6b6cee
--- /dev/null
+++ b/_posts/2020-11-12-programming-tidyverse.md
@@ -0,0 +1,10 @@
+---
+title: "Programming and Data Wrangling in R with the Tidyverse"
+text: "Exploring how to develop basic software for data wrangling with the tidyverse suite of packages.
+"
+location: "Zoom"
+link: "https://github.com/UofTCoders/Events/issues/289"
+date: "2020-11-12"
+startTime: "19:00"
+endTime: "20:00"
+---
diff --git a/_posts/2020-11-19-lightning-demos-r.md b/_posts/2020-11-19-lightning-demos-r.md
new file mode 100644
index 000000000..7407aeb61
--- /dev/null
+++ b/_posts/2020-11-19-lightning-demos-r.md
@@ -0,0 +1,10 @@
+---
+title: "Lightning demos: R"
+text: "Short coding demos - this time themed specifically around R. Anyone is welcome to present!
+"
+location: "Zoom"
+link: "https://github.com/UofTCoders/Events/issues/290"
+date: "2020-11-19"
+startTime: "19:00"
+endTime: "20:00"
+---
diff --git a/_posts/2020-11-26-writing-markdown-pandoc.md b/_posts/2020-11-26-writing-markdown-pandoc.md
new file mode 100644
index 000000000..a6bcf82f5
--- /dev/null
+++ b/_posts/2020-11-26-writing-markdown-pandoc.md
@@ -0,0 +1,10 @@
+---
+title: "Scientific writing with Markdown and Pandoc"
+text: "An introduction to writing scientific and technical documents with Markdown and managing document formats with Pandoc.
+"
+location: "Zoom"
+link: "https://github.com/UofTCoders/Events/issues/291"
+date: "2020-11-26"
+startTime: "19:00"
+endTime: "20:00"
+---
diff --git a/_posts/2020-12-03-lightning-demos-data-viz.md b/_posts/2020-12-03-lightning-demos-data-viz.md
new file mode 100644
index 000000000..08b174c99
--- /dev/null
+++ b/_posts/2020-12-03-lightning-demos-data-viz.md
@@ -0,0 +1,10 @@
+---
+title: "Lightning demos: Data visualization"
+text: "Short coding demos - this time themed specifically around data visualization with any language. Anyone is welcome to present!
+"
+location: "Zoom"
+link: "https://github.com/UofTCoders/Events/issues/292"
+date: "2020-12-03"
+startTime: "19:00"
+endTime: "20:00"
+---
diff --git a/_posts/2021-01-13-intro-python.md b/_posts/2021-01-13-intro-python.md
new file mode 100644
index 000000000..b4b527eec
--- /dev/null
+++ b/_posts/2021-01-13-intro-python.md
@@ -0,0 +1,10 @@
+---
+title: "Introduction to Python"
+text: "A brief introduction to Python for beginners.
+"
+location: "Zoom"
+link: "https://github.com/UofTCoders/Events/issues/293"
+date: "2021-01-13"
+startTime: "18:00"
+endTime: "19:00"
+---
diff --git a/_posts/2021-01-20-intro-r.md b/_posts/2021-01-20-intro-r.md
new file mode 100644
index 000000000..fe271f962
--- /dev/null
+++ b/_posts/2021-01-20-intro-r.md
@@ -0,0 +1,10 @@
+---
+title: "Introduction to R"
+text: "A brief introduction to R for beginners.
+"
+location: "Zoom"
+link: "https://github.com/UofTCoders/Events/issues/294"
+date: "2021-01-20"
+startTime: "18:00"
+endTime: "19:00"
+---
diff --git a/_posts/2021-01-27-intro-git.md b/_posts/2021-01-27-intro-git.md
new file mode 100644
index 000000000..0e0674c9e
--- /dev/null
+++ b/_posts/2021-01-27-intro-git.md
@@ -0,0 +1,10 @@
+---
+title: "Introduction to Git"
+text: "A brief introduction to version control with Git for beginners.
+"
+location: "Zoom"
+link: "https://github.com/UofTCoders/Events/issues/295"
+date: "2021-01-27"
+startTime: "18:00"
+endTime: "19:00"
+---
diff --git a/_posts/2021-02-03-python-scikit-learn.md b/_posts/2021-02-03-python-scikit-learn.md
new file mode 100644
index 000000000..654c20771
--- /dev/null
+++ b/_posts/2021-02-03-python-scikit-learn.md
@@ -0,0 +1,10 @@
+---
+title: "Python: scikit-learn"
+text: "An introduction to using scikit-learn in Python.
+"
+location: "Zoom"
+link: "https://github.com/UofTCoders/Events/issues/296"
+date: "2021-02-03"
+startTime: "18:00"
+endTime: "19:00"
+---
diff --git a/_posts/2021-02-10-r-stat-methods.md b/_posts/2021-02-10-r-stat-methods.md
new file mode 100644
index 000000000..2c38dc401
--- /dev/null
+++ b/_posts/2021-02-10-r-stat-methods.md
@@ -0,0 +1,10 @@
+---
+title: "R: Statistical methods"
+text: "A beginner-oriented overview of implementing statistical tests and models in R.
+"
+location: "Zoom"
+link: "https://github.com/UofTCoders/Events/issues/297"
+date: "2021-02-10"
+startTime: "18:00"
+endTime: "19:00"
+---
diff --git a/_posts/2021-02-24-lightning-demos.md b/_posts/2021-02-24-lightning-demos.md
new file mode 100644
index 000000000..4a9694c51
--- /dev/null
+++ b/_posts/2021-02-24-lightning-demos.md
@@ -0,0 +1,10 @@
+---
+title: "Lightning demos"
+text: "Short coding demos - anyone is welcome to present!
+"
+location: "Zoom"
+link: "https://github.com/UofTCoders/Events/issues/298"
+date: "2021-02-24"
+startTime: "18:00"
+endTime: "19:00"
+---
diff --git a/_posts/2021-03-03-git-collab.md b/_posts/2021-03-03-git-collab.md
new file mode 100644
index 000000000..91d4b8889
--- /dev/null
+++ b/_posts/2021-03-03-git-collab.md
@@ -0,0 +1,10 @@
+---
+title: "Collaborating with Git and GitHub"
+text: "An overview of how to collaborate on projects using Git/GitHub.
+"
+location: "Zoom"
+link: "https://github.com/UofTCoders/Events/issues/299"
+date: "2021-03-03"
+startTime: "18:00"
+endTime: "19:00"
+---
diff --git a/_posts/2021-03-10-intro-latex.md b/_posts/2021-03-10-intro-latex.md
new file mode 100644
index 000000000..2b4821f0a
--- /dev/null
+++ b/_posts/2021-03-10-intro-latex.md
@@ -0,0 +1,10 @@
+---
+title: "Introduction to LaTeX"
+text: "An introduction to preparing documents with LaTeX.
+"
+location: "Zoom"
+link: "https://github.com/UofTCoders/Events/issues/300"
+date: "2021-03-10"
+startTime: "18:00"
+endTime: "19:00"
+---
diff --git a/_posts/2021-03-17-git-adv-topics.md b/_posts/2021-03-17-git-adv-topics.md
new file mode 100644
index 000000000..d4bdbbd09
--- /dev/null
+++ b/_posts/2021-03-17-git-adv-topics.md
@@ -0,0 +1,10 @@
+---
+title: "Git: advanced topics"
+text: "Advanced topics in Git - specific topics TBA.
+"
+location: "Zoom"
+link: "https://github.com/UofTCoders/Events/issues/301"
+date: "2021-03-17"
+startTime: "18:00"
+endTime: "19:00"
+---
diff --git a/_posts/2021-10-06-intro-python.md b/_posts/2021-10-06-intro-python.md
new file mode 100644
index 000000000..5bb16865c
--- /dev/null
+++ b/_posts/2021-10-06-intro-python.md
@@ -0,0 +1,10 @@
+---
+title: "Introduction to Python"
+text: "A brief introduction to Python for beginners.
+"
+location: "UofT Coders Discord server"
+link: "https://github.com/UofTCoders/Events/issues/304"
+date: "2021-10-06"
+startTime: "18:00"
+endTime: "19:00"
+---
diff --git a/_posts/2021-10-13-intro-r.md b/_posts/2021-10-13-intro-r.md
new file mode 100644
index 000000000..fbbdf74d9
--- /dev/null
+++ b/_posts/2021-10-13-intro-r.md
@@ -0,0 +1,10 @@
+---
+title: "Introduction to R"
+text: "A brief introduction to R for beginners.
+"
+location: "UofT Coders Discord server"
+link: "https://github.com/UofTCoders/Events/issues/305"
+date: "2021-10-13"
+startTime: "18:00"
+endTime: "19:00"
+---
diff --git a/_posts/2021-10-20-intro-git.md b/_posts/2021-10-20-intro-git.md
new file mode 100644
index 000000000..751ad34ca
--- /dev/null
+++ b/_posts/2021-10-20-intro-git.md
@@ -0,0 +1,10 @@
+---
+title: "Introduction to Git"
+text: "A brief introduction to version control with Git for beginners.
+"
+location: "UofT Coders Discord server"
+link: "https://github.com/UofTCoders/Events/issues/306"
+date: "2021-10-20"
+startTime: "18:00"
+endTime: "19:00"
+---
diff --git a/_posts/2021-10-27-r-data-visualization.md b/_posts/2021-10-27-r-data-visualization.md
new file mode 100644
index 000000000..4f7a003d5
--- /dev/null
+++ b/_posts/2021-10-27-r-data-visualization.md
@@ -0,0 +1,10 @@
+---
+title: "R: Data visualization with ggplot2"
+text: "A beginner-oriented overview of plotting in R with ggplot2.
+"
+location: "UofT Coders Discord server"
+link: "https://github.com/UofTCoders/Events/issues/307"
+date: "2021-10-27"
+startTime: "18:00"
+endTime: "19:00"
+---
diff --git a/_posts/2021-11-03-python-scikit-learn.md b/_posts/2021-11-03-python-scikit-learn.md
new file mode 100644
index 000000000..a82a5fea7
--- /dev/null
+++ b/_posts/2021-11-03-python-scikit-learn.md
@@ -0,0 +1,10 @@
+---
+title: "Python: Machine learning with scikit-learn"
+text: "An introduction to using scikit-learn in Python.
+"
+location: "UofT Coders Discord server"
+link: "https://github.com/UofTCoders/Events/issues/308"
+date: "2021-11-03"
+startTime: "18:00"
+endTime: "19:00"
+---
diff --git a/_posts/2021-11-17-pandoc-markdown.md b/_posts/2021-11-17-pandoc-markdown.md
new file mode 100644
index 000000000..b9a5a43c4
--- /dev/null
+++ b/_posts/2021-11-17-pandoc-markdown.md
@@ -0,0 +1,10 @@
+---
+title: "Pandoc and Markdown"
+text: "An introduction to preparing documents with Pandoc and Markdown.
+"
+location: "UofT Coders Discord server"
+link: "https://github.com/UofTCoders/Events/issues/309"
+date: "2021-11-17"
+startTime: "18:00"
+endTime: "19:00"
+---
diff --git a/_posts/2021-11-24-lightning-demos.md b/_posts/2021-11-24-lightning-demos.md
new file mode 100644
index 000000000..0ffed90e7
--- /dev/null
+++ b/_posts/2021-11-24-lightning-demos.md
@@ -0,0 +1,10 @@
+---
+title: "Lightning demos"
+text: "Short coding demos - anyone is welcome to present!
+"
+location: "UofT Coders Discord server"
+link: "https://github.com/UofTCoders/Events/issues/310"
+date: "2021-11-24"
+startTime: "18:00"
+endTime: "19:00"
+---
diff --git a/_posts/2021-12-01-r-blogdown.md b/_posts/2021-12-01-r-blogdown.md
new file mode 100644
index 000000000..52c9aea9f
--- /dev/null
+++ b/_posts/2021-12-01-r-blogdown.md
@@ -0,0 +1,10 @@
+---
+title: "Creating websites with RStudio and blogdown"
+text: "An overview of how to create personal and professional websites using blogdown in RStudio.
+"
+location: "UofT Coders Discord server"
+link: "https://github.com/UofTCoders/Events/issues/311"
+date: "2021-12-01"
+startTime: "18:00"
+endTime: "19:00"
+---
diff --git a/_posts/2021-winter-co-working.md b/_posts/2021-winter-co-working.md
new file mode 100644
index 000000000..6a39e659f
--- /dev/null
+++ b/_posts/2021-winter-co-working.md
@@ -0,0 +1,10 @@
+---
+title: "Weekly co-working"
+text: "An informal co-working session - come hang out with us while
+ working on code or whatever else you want to get done."
+location: "Zoom"
+link: "https://github.com/UofTCoders/Events/issues/302"
+date: "NA"
+startTime: "13:00"
+endTime: "14:00"
+---
diff --git a/_posts/2022-02-09-clustering-r.md b/_posts/2022-02-09-clustering-r.md
new file mode 100644
index 000000000..a7dabb782
--- /dev/null
+++ b/_posts/2022-02-09-clustering-r.md
@@ -0,0 +1,9 @@
+---
+title: "Clustering with R"
+text: "An introduction to clustering methods with R."
+location: "UofT Coders Discord server"
+link: "https://github.com/UofTCoders/Events/issues/312"
+date: "2022-02-09"
+startTime: "18:00"
+endTime: "19:00"
+---
diff --git a/_posts/2022-03-02-supervised-learning-r.md b/_posts/2022-03-02-supervised-learning-r.md
new file mode 100644
index 000000000..54222edc8
--- /dev/null
+++ b/_posts/2022-03-02-supervised-learning-r.md
@@ -0,0 +1,9 @@
+---
+title: "Supervised learning with R"
+text: "A walkthrough of a supervised learning workflow in R."
+location: "UofT Coders Discord server"
+link: "https://github.com/UofTCoders/Events/issues/313"
+date: "2022-03-02"
+startTime: "18:00"
+endTime: "19:00"
+---
diff --git a/_posts/2022-03-16-r-tidyverse-functions.md b/_posts/2022-03-16-r-tidyverse-functions.md
new file mode 100644
index 000000000..2d4d42589
--- /dev/null
+++ b/_posts/2022-03-16-r-tidyverse-functions.md
@@ -0,0 +1,9 @@
+---
+title: "R: Writing functions with the tidyverse"
+text: "An exploration of writing functions with tidyverse syntax in R."
+location: "UofT Coders Discord server"
+link: "https://github.com/UofTCoders/Events/issues/314"
+date: "2022-03-16"
+startTime: "18:00"
+endTime: "19:00"
+---
diff --git a/_posts/2022-03-30-epidemic-modelling.md b/_posts/2022-03-30-epidemic-modelling.md
new file mode 100644
index 000000000..152912ad8
--- /dev/null
+++ b/_posts/2022-03-30-epidemic-modelling.md
@@ -0,0 +1,9 @@
+---
+title: "Epidemic modelling"
+text: "A brief overview on modelling epidemics with code."
+location: "UofT Coders Discord server"
+link: "https://github.com/UofTCoders/Events/issues/315"
+date: "2022-03-30"
+startTime: "18:00"
+endTime: "19:00"
+---
diff --git a/_posts/2022-10-19-co-working.md b/_posts/2022-10-19-co-working.md
new file mode 100644
index 000000000..e0493850b
--- /dev/null
+++ b/_posts/2022-10-19-co-working.md
@@ -0,0 +1,9 @@
+---
+title: "Co-working (UTSG + online)"
+text: "A friendly co-working session. Bring yourself and something to work on!"
+location: "MADLab, Room B112, Gerstein Library"
+link: "https://github.com/UofTCoders/Events/issues/321"
+date: "2022-10-19"
+startTime: "15:00"
+endTime: "17:00"
+---
diff --git a/_posts/2022-10-19-python-pandas.md b/_posts/2022-10-19-python-pandas.md
new file mode 100644
index 000000000..4d447ed16
--- /dev/null
+++ b/_posts/2022-10-19-python-pandas.md
@@ -0,0 +1,9 @@
+---
+title: "Python: Pandas"
+text: "An introduction to working with data frames in Python using Pandas."
+location: "MADLab, Room B112 Gerstein Library"
+link: "https://github.com/UofTCoders/Events/issues/316"
+date: "2022-10-19"
+startTime: "18:00"
+endTime: "19:00"
+---
diff --git a/_posts/2022-10-28-co-working.md b/_posts/2022-10-28-co-working.md
new file mode 100644
index 000000000..041e212ea
--- /dev/null
+++ b/_posts/2022-10-28-co-working.md
@@ -0,0 +1,9 @@
+---
+title: "Co-working (UTM + online)"
+text: "A friendly co-working session. Bring yourself and something to work on!"
+location: "Graduate Lounge, William G. Davis Building"
+link: "https://github.com/UofTCoders/Events/issues/322"
+date: "2022-10-28"
+startTime: "10:00"
+endTime: "12:00"
+---
diff --git a/_posts/2022-11-02-co-working.md b/_posts/2022-11-02-co-working.md
new file mode 100644
index 000000000..46fd88d44
--- /dev/null
+++ b/_posts/2022-11-02-co-working.md
@@ -0,0 +1,9 @@
+---
+title: "Co-working (UTSG + online)"
+text: "A friendly co-working session. Bring yourself and something to work on!"
+location: "MADLab, Room B112, Gerstein Library"
+link: "https://github.com/UofTCoders/Events/issues/323"
+date: "2022-11-02"
+startTime: "15:00"
+endTime: "17:00"
+---
diff --git a/_posts/2022-11-02-r-data-viz.md b/_posts/2022-11-02-r-data-viz.md
new file mode 100644
index 000000000..c96a9fc13
--- /dev/null
+++ b/_posts/2022-11-02-r-data-viz.md
@@ -0,0 +1,9 @@
+---
+title: "Data visualization with R"
+text: "A crash course in making plots in R using the ggplot2 library."
+location: "University of Toronto Mississauga (Room TBA)"
+link: "https://github.com/UofTCoders/Events/issues/317"
+date: "2022-11-02"
+startTime: "18:00"
+endTime: "19:00"
+---
diff --git a/_posts/2022-11-11-co-working.md b/_posts/2022-11-11-co-working.md
new file mode 100644
index 000000000..35a0f34d0
--- /dev/null
+++ b/_posts/2022-11-11-co-working.md
@@ -0,0 +1,9 @@
+---
+title: "Co-working (UTM + online)"
+text: "A friendly co-working session. Bring yourself and something to work on!"
+location: "Graduate Lounge, William G. Davis Building"
+link: "https://github.com/UofTCoders/Events/issues/324"
+date: "2022-11-11"
+startTime: "10:00"
+endTime: "12:00"
+---
diff --git a/_posts/2022-11-16-co-working.md b/_posts/2022-11-16-co-working.md
new file mode 100644
index 000000000..79069d7c9
--- /dev/null
+++ b/_posts/2022-11-16-co-working.md
@@ -0,0 +1,9 @@
+---
+title: "Co-working (UTSG + online)"
+text: "A friendly co-working session. Bring yourself and something to work on!"
+location: "MADLab, Room B112, Gerstein Library"
+link: "https://github.com/UofTCoders/Events/issues/325"
+date: "2022-11-16"
+startTime: "15:00"
+endTime: "17:00"
+---
diff --git a/_posts/2022-11-16-r-sql.md b/_posts/2022-11-16-r-sql.md
new file mode 100644
index 000000000..b778c57f0
--- /dev/null
+++ b/_posts/2022-11-16-r-sql.md
@@ -0,0 +1,9 @@
+---
+title: "SQL with R"
+text: "A lesson covering working with SQL databases entirely using R."
+location: "MADLab, Room B112, Gerstein Library"
+link: "https://github.com/UofTCoders/Events/issues/318"
+date: "2022-11-16"
+startTime: "18:00"
+endTime: "19:00"
+---
diff --git a/_posts/2022-11-30-co-working.md b/_posts/2022-11-30-co-working.md
new file mode 100644
index 000000000..9d779872d
--- /dev/null
+++ b/_posts/2022-11-30-co-working.md
@@ -0,0 +1,9 @@
+---
+title: "Co-working (UTSG + online)"
+text: "A friendly co-working session. Bring yourself and something to work on!"
+location: "MADLab, Room B112, Gerstein Library"
+link: "https://github.com/UofTCoders/Events/issues/326"
+date: "2022-11-30"
+startTime: "15:00"
+endTime: "17:00"
+---
diff --git a/_posts/2022-11-30-r-functions-tidyverse.md b/_posts/2022-11-30-r-functions-tidyverse.md
new file mode 100644
index 000000000..e9945f118
--- /dev/null
+++ b/_posts/2022-11-30-r-functions-tidyverse.md
@@ -0,0 +1,9 @@
+---
+title: "R: Writing functions with the tidyverse"
+text: "A lesson covering how to write flexible functions using the tidyverse in R."
+location: "MADLab, Room B112, Gerstein Library"
+link: "https://github.com/UofTCoders/Events/issues/319"
+date: "2022-11-30"
+startTime: "18:00"
+endTime: "19:00"
+---
diff --git a/_posts/2022-12-09-co-working.md b/_posts/2022-12-09-co-working.md
new file mode 100644
index 000000000..4c88b6585
--- /dev/null
+++ b/_posts/2022-12-09-co-working.md
@@ -0,0 +1,9 @@
+---
+title: "Co-working (UTM + online)"
+text: "A friendly co-working session. Bring yourself and something to work on!"
+location: "Graduate Lounge, William G. Davis Building"
+link: "https://github.com/UofTCoders/Events/issues/327"
+date: "2022-12-09"
+startTime: "10:00"
+endTime: "12:00"
+---
diff --git a/_posts/2023-02-01-py-data-vis.md b/_posts/2023-02-01-py-data-vis.md
new file mode 100644
index 000000000..0a3b86cf9
--- /dev/null
+++ b/_posts/2023-02-01-py-data-vis.md
@@ -0,0 +1,9 @@
+---
+title: "Data visualization in Python"
+text: "An introduction to exploring and visualizing your data in Python."
+location: "Discord"
+link: "https://github.com/UofTCoders/Events/issues/328"
+date: "2023-02-01"
+startTime: "18:00"
+endTime: "19:00"
+---
diff --git a/_posts/2023-02-15-intro-bash.md b/_posts/2023-02-15-intro-bash.md
new file mode 100644
index 000000000..49264e52b
--- /dev/null
+++ b/_posts/2023-02-15-intro-bash.md
@@ -0,0 +1,9 @@
+---
+title: "Introduction to Bash"
+text: "A brief overview of working at the command line in Unix environments."
+location: "Discord"
+link: "https://github.com/UofTCoders/Events/issues/329"
+date: "2023-02-15"
+startTime: "18:00"
+endTime: "19:00"
+---
diff --git a/_posts/2023-03-01-python-numpy-pandas.md b/_posts/2023-03-01-python-numpy-pandas.md
new file mode 100644
index 000000000..5fd3e0cbf
--- /dev/null
+++ b/_posts/2023-03-01-python-numpy-pandas.md
@@ -0,0 +1,9 @@
+---
+title: "Python: Data processing with numpy and pandas"
+text: "A code-along demonstrating two popular libraries for data processing in Python."
+location: "TBA in-person + Discord"
+link: "https://github.com/UofTCoders/Events/issues/330"
+date: "2023-03-01"
+startTime: "18:00"
+endTime: "19:00"
+---
diff --git a/_posts/2023-03-15-python-intro-ml.md b/_posts/2023-03-15-python-intro-ml.md
new file mode 100644
index 000000000..29735d9cf
--- /dev/null
+++ b/_posts/2023-03-15-python-intro-ml.md
@@ -0,0 +1,9 @@
+---
+title: "Python: Intro to machine learning"
+text: "A tutorial covering basic ML topics in Python."
+location: "TBA in-person + Discord"
+link: "https://github.com/UofTCoders/Events/issues/331"
+date: "2023-03-15"
+startTime: "18:00"
+endTime: "19:00"
+---
diff --git a/_posts/2023-03-29-social.md b/_posts/2023-03-29-social.md
new file mode 100644
index 000000000..85e3e379a
--- /dev/null
+++ b/_posts/2023-03-29-social.md
@@ -0,0 +1,9 @@
+---
+title: "End of Term Social"
+text: ""
+location: "GSU Pub"
+link: "https://github.com/UofTCoders/Events/issues/332"
+date: "2023-03-29"
+startTime: "18:00"
+endTime: "20:00"
+---
diff --git a/_posts/2077-01-01-myEvent.markdown b/_posts/2077-01-01-myEvent.markdown
deleted file mode 100644
index 40f904497..000000000
--- a/_posts/2077-01-01-myEvent.markdown
+++ /dev/null
@@ -1,10 +0,0 @@
----
-title: Make Your First Event
-text: In order to make your first event, follow the instructions here.
-location: Your Location
-link: https://github.com/mozillascience/studyGroup#how-to-launch-a-new-event
-date: 2077-01-01
-startTime: '20:00'
-endTime: '21:00'
-
----
diff --git a/codeOfConduct.md b/codeOfConduct.md
index 45356d833..5dcdc2f92 100644
--- a/codeOfConduct.md
+++ b/codeOfConduct.md
@@ -1,25 +1,16 @@
-# Code of Conduct
-
-Study Group events are community events intended for networking and collaboration as well as learning. We value the participation of every member of the scientific community and want all attendees to have an enjoyable and fulfilling experience. Accordingly, all attendees are expected to show respect and courtesy to other attendees throughout the event and in interactions online associated with Study Group.
+Study Group events are community events intended for networking and collaboration as well as learning. We value the participation of every member of the scientific community and want all attendees to have an enjoyable and fulfilling experience. Accordingly, all attendees are expected to show respect and courtesy to other attendees throughout the events and in interactions online associated with Study Group.
To make clear what is expected, everyone taking part in Study Group events and discussions—instructors, helpers, organizers, and learners—is required to conform to the following Code of Conduct. Organizers will enforce this code throughout events, but you may also contact us privately; all communication will be treated as confidential.
-### The Short Version
-
- - Study Group is dedicated to providing a harassment-free learning experience for everyone, regardless of gender, sexual orientation, disability, physical appearance, body size, race, religion, or choice of text editor. We do not tolerate harassment of participants in any form.
- - All communication should be appropriate for a professional audience including people of many different backgrounds. Sexual language and imagery is not appropriate for any event.
- - Be kind to others. Do not insult or put down other attendees.
- - Behave professionally. Remember that harassment and sexist, racist, or exclusionary jokes are not appropriate.
- - Attendees violating these rules may be asked to leave the event at the sole discretion of the event organizers without a refund of any charge that may have been levied.
+## Code of Conduct
-Thank you for helping make this a welcoming, friendly event for all.
-
-### The Longer Version
+We are dedicated to providing a harassment-free learning experience for everyone, regardless of gender, sexual orientation, disability, physical appearance, body size, race, religion, choice of operating system, or choice of text editor. We do not tolerate harassment of participants in any form.
Harassment includes offensive verbal comments related to gender, sexual orientation, disability, physical appearance, body size, race, religion, sexual images in public spaces, deliberate intimidation, stalking, following, harassing photography or recording, sustained disruption of talks or other events, inappropriate physical contact, and unwelcome sexual attention.
+Participants asked to stop any harassing behaviour are expected to comply immediately.
-Participants asked to stop any harassing behavior are expected to comply immediately.
+Be kind to others. Be aware of your words, and use language that is positive and community-building. All communication should be appropriate for a professional audience including people of many different backgrounds. Remember that sexist, racist, and other exclusionary jokes can be offensive to those around you.
-Be careful in the words that you choose. Remember that sexist, racist, and other exclusionary jokes can be offensive to those around you.
+If a participant engages in behaviour that violates this code of conduct, the organizers may take any action they deem appropriate, including warning the offender or expulsion from the event.
-If a participant engages in behavior that violates this code of conduct, the organizers may take any action they deem appropriate, including warning the offender or expulsion from the event with no refund of any fee that may have been levied.
\ No newline at end of file
+Thank you for helping make this a welcoming, friendly event for all.
diff --git a/img/UofTCoders_Lightbulb.psd b/img/UofTCoders_Lightbulb.psd
new file mode 100644
index 000000000..c7a381eb1
Binary files /dev/null and b/img/UofTCoders_Lightbulb.psd differ
diff --git a/img/about/1.jpg b/img/about/1.jpg
deleted file mode 100644
index 0eadb7923..000000000
Binary files a/img/about/1.jpg and /dev/null differ
diff --git a/img/about/2.jpg b/img/about/2.jpg
deleted file mode 100644
index 24b4e5bc4..000000000
Binary files a/img/about/2.jpg and /dev/null differ
diff --git a/img/about/3.jpg b/img/about/3.jpg
deleted file mode 100644
index 6ed1b35a8..000000000
Binary files a/img/about/3.jpg and /dev/null differ
diff --git a/img/about/4.jpg b/img/about/4.jpg
deleted file mode 100644
index 4a4321017..000000000
Binary files a/img/about/4.jpg and /dev/null differ
diff --git a/img/header-bg.jpg b/img/header-bg.jpg
deleted file mode 100644
index eaf775ec1..000000000
Binary files a/img/header-bg.jpg and /dev/null differ
diff --git a/img/header1.jpg b/img/header1.jpg
new file mode 100644
index 000000000..7dfe547ca
Binary files /dev/null and b/img/header1.jpg differ
diff --git a/img/logos/aetuts.jpg b/img/logos/aetuts.jpg
deleted file mode 100644
index c75addaec..000000000
Binary files a/img/logos/aetuts.jpg and /dev/null differ
diff --git a/img/logos/creative-market.jpg b/img/logos/creative-market.jpg
deleted file mode 100644
index 3f308535e..000000000
Binary files a/img/logos/creative-market.jpg and /dev/null differ
diff --git a/img/logos/designmodo.jpg b/img/logos/designmodo.jpg
deleted file mode 100644
index 44ce8893b..000000000
Binary files a/img/logos/designmodo.jpg and /dev/null differ
diff --git a/img/logos/envato.jpg b/img/logos/envato.jpg
deleted file mode 100644
index 5d70a8705..000000000
Binary files a/img/logos/envato.jpg and /dev/null differ
diff --git a/img/logos/lightbulb_src.png b/img/logos/lightbulb_src.png
new file mode 100644
index 000000000..eacbf4fd7
Binary files /dev/null and b/img/logos/lightbulb_src.png differ
diff --git a/img/logos/logo_fullsize.png b/img/logos/logo_fullsize.png
new file mode 100644
index 000000000..53d028932
Binary files /dev/null and b/img/logos/logo_fullsize.png differ
diff --git a/img/logos/logo_fullsize_dark.png b/img/logos/logo_fullsize_dark.png
new file mode 100644
index 000000000..c50028866
Binary files /dev/null and b/img/logos/logo_fullsize_dark.png differ
diff --git a/img/logos/logo_icon.png b/img/logos/logo_icon.png
new file mode 100644
index 000000000..094ab457e
Binary files /dev/null and b/img/logos/logo_icon.png differ
diff --git a/img/logos/logo_icon_dark.png b/img/logos/logo_icon_dark.png
new file mode 100644
index 000000000..43f0a5baf
Binary files /dev/null and b/img/logos/logo_icon_dark.png differ
diff --git a/img/logos/microlancer.jpg b/img/logos/microlancer.jpg
deleted file mode 100644
index c4b91112a..000000000
Binary files a/img/logos/microlancer.jpg and /dev/null differ
diff --git a/img/logos/themeforest.jpg b/img/logos/themeforest.jpg
deleted file mode 100644
index 1dbba6f43..000000000
Binary files a/img/logos/themeforest.jpg and /dev/null differ
diff --git a/img/logos/wordpress.jpg b/img/logos/wordpress.jpg
deleted file mode 100644
index 29be11dce..000000000
Binary files a/img/logos/wordpress.jpg and /dev/null differ
diff --git a/img/map-image.png b/img/map-image.png
deleted file mode 100644
index a047a27d3..000000000
Binary files a/img/map-image.png and /dev/null differ
diff --git a/img/newbackground.png b/img/newbackground.png
new file mode 100644
index 000000000..e97df1020
Binary files /dev/null and b/img/newbackground.png differ
diff --git a/img/portfolio/dreams-thumbnail.png b/img/portfolio/dreams-thumbnail.png
deleted file mode 100644
index 1b925d810..000000000
Binary files a/img/portfolio/dreams-thumbnail.png and /dev/null differ
diff --git a/img/portfolio/dreams.png b/img/portfolio/dreams.png
deleted file mode 100644
index e2773b237..000000000
Binary files a/img/portfolio/dreams.png and /dev/null differ
diff --git a/img/portfolio/escape-thumbnail.png b/img/portfolio/escape-thumbnail.png
deleted file mode 100644
index d5fcee8dd..000000000
Binary files a/img/portfolio/escape-thumbnail.png and /dev/null differ
diff --git a/img/portfolio/escape.png b/img/portfolio/escape.png
deleted file mode 100644
index a2343b4de..000000000
Binary files a/img/portfolio/escape.png and /dev/null differ
diff --git a/img/portfolio/golden-thumbnail.png b/img/portfolio/golden-thumbnail.png
deleted file mode 100644
index 9b971ae83..000000000
Binary files a/img/portfolio/golden-thumbnail.png and /dev/null differ
diff --git a/img/portfolio/golden.png b/img/portfolio/golden.png
deleted file mode 100644
index b8fe73590..000000000
Binary files a/img/portfolio/golden.png and /dev/null differ
diff --git a/img/portfolio/roundicons-thumbnail.png b/img/portfolio/roundicons-thumbnail.png
deleted file mode 100644
index 97c0e9a71..000000000
Binary files a/img/portfolio/roundicons-thumbnail.png and /dev/null differ
diff --git a/img/portfolio/roundicons.png b/img/portfolio/roundicons.png
deleted file mode 100644
index dec02785c..000000000
Binary files a/img/portfolio/roundicons.png and /dev/null differ
diff --git a/img/portfolio/startup-framework-thumbnail.png b/img/portfolio/startup-framework-thumbnail.png
deleted file mode 100644
index 3516bbc42..000000000
Binary files a/img/portfolio/startup-framework-thumbnail.png and /dev/null differ
diff --git a/img/portfolio/startup-framework.png b/img/portfolio/startup-framework.png
deleted file mode 100644
index 0b612f39f..000000000
Binary files a/img/portfolio/startup-framework.png and /dev/null differ
diff --git a/img/portfolio/treehouse-thumbnail.png b/img/portfolio/treehouse-thumbnail.png
deleted file mode 100644
index a800611cc..000000000
Binary files a/img/portfolio/treehouse-thumbnail.png and /dev/null differ
diff --git a/img/portfolio/treehouse.png b/img/portfolio/treehouse.png
deleted file mode 100644
index df0447447..000000000
Binary files a/img/portfolio/treehouse.png and /dev/null differ
diff --git a/img/team/1.jpg b/img/team/1.jpg
deleted file mode 100644
index cabfc561c..000000000
Binary files a/img/team/1.jpg and /dev/null differ
diff --git a/img/team/2.jpg b/img/team/2.jpg
deleted file mode 100644
index 49d1c706d..000000000
Binary files a/img/team/2.jpg and /dev/null differ
diff --git a/img/team/3.jpg b/img/team/3.jpg
deleted file mode 100644
index f34ef1fe2..000000000
Binary files a/img/team/3.jpg and /dev/null differ
diff --git a/img/watch.png b/img/watch.png
new file mode 100644
index 000000000..6f007f70e
Binary files /dev/null and b/img/watch.png differ
diff --git a/js/contact_me.js b/js/contact_me.js
deleted file mode 100644
index 056706762..000000000
--- a/js/contact_me.js
+++ /dev/null
@@ -1,70 +0,0 @@
-$(function() {
-
- $("input,textarea").jqBootstrapValidation({
- preventSubmit: true,
- submitError: function($form, event, errors) {
- // additional error messages or events
- },
- submitSuccess: function($form, event) {
- event.preventDefault(); // prevent default submit behaviour
- // get values from FORM
- var name = $("input#name").val();
- var email = $("input#email").val();
- var phone = $("input#phone").val();
- var message = $("textarea#message").val();
- var firstName = name; // For Success/Failure Message
- // Check for white space in name for Success/Fail message
- if (firstName.indexOf(' ') >= 0) {
- firstName = name.split(' ').slice(0, -1).join(' ');
- }
- $.ajax({
- url: "././mail/contact_me.php",
- type: "POST",
- data: {
- name: name,
- phone: phone,
- email: email,
- message: message
- },
- cache: false,
- success: function() {
- // Success message
- $('#success').html("
");
- $('#success > .alert-danger').html("");
- $('#success > .alert-danger').append("Sorry " + firstName + ", it seems that my mail server is not responding. Please try again later!");
- $('#success > .alert-danger').append('
');
- //clear all fields
- $('#contactForm').trigger("reset");
- },
- })
- },
- filter: function() {
- return $(this).is(":visible");
- },
- });
-
- $("a[data-toggle=\"tab\"]").click(function(e) {
- e.preventDefault();
- $(this).tab("show");
- });
-});
-
-
-/*When clicking on Full hide fail/success boxes */
-$('#name').focus(function() {
- $('#success').html('');
-});
diff --git a/js/jqBootstrapValidation.js b/js/jqBootstrapValidation.js
deleted file mode 100644
index 29cbb083e..000000000
--- a/js/jqBootstrapValidation.js
+++ /dev/null
@@ -1,912 +0,0 @@
-/* jqBootstrapValidation
- * A plugin for automating validation on Twitter Bootstrap formatted forms.
- *
- * v1.3.6
- *
- * License: MIT - see LICENSE file
- *
- * http://ReactiveRaven.github.com/jqBootstrapValidation/
- */
-
-(function( $ ){
-
- var createdElements = [];
-
- var defaults = {
- options: {
- prependExistingHelpBlock: false,
- sniffHtml: true, // sniff for 'required', 'maxlength', etc
- preventSubmit: true, // stop the form submit event from firing if validation fails
- submitError: false, // function called if there is an error when trying to submit
- submitSuccess: false, // function called just before a successful submit event is sent to the server
- semanticallyStrict: false, // set to true to tidy up generated HTML output
- autoAdd: {
- helpBlocks: true
- },
- filter: function () {
- // return $(this).is(":visible"); // only validate elements you can see
- return true; // validate everything
- }
- },
- methods: {
- init : function( options ) {
-
- var settings = $.extend(true, {}, defaults);
-
- settings.options = $.extend(true, settings.options, options);
-
- var $siblingElements = this;
-
- var uniqueForms = $.unique(
- $siblingElements.map( function () {
- return $(this).parents("form")[0];
- }).toArray()
- );
-
- $(uniqueForms).bind("submit", function (e) {
- var $form = $(this);
- var warningsFound = 0;
- var $inputs = $form.find("input,textarea,select").not("[type=submit],[type=image]").filter(settings.options.filter);
- $inputs.trigger("submit.validation").trigger("validationLostFocus.validation");
-
- $inputs.each(function (i, el) {
- var $this = $(el),
- $controlGroup = $this.parents(".control-group").first();
- if (
- $controlGroup.hasClass("warning")
- ) {
- $controlGroup.removeClass("warning").addClass("error");
- warningsFound++;
- }
- });
-
- $inputs.trigger("validationLostFocus.validation");
-
- if (warningsFound) {
- if (settings.options.preventSubmit) {
- e.preventDefault();
- }
- $form.addClass("error");
- if ($.isFunction(settings.options.submitError)) {
- settings.options.submitError($form, e, $inputs.jqBootstrapValidation("collectErrors", true));
- }
- } else {
- $form.removeClass("error");
- if ($.isFunction(settings.options.submitSuccess)) {
- settings.options.submitSuccess($form, e);
- }
- }
- });
-
- return this.each(function(){
-
- // Get references to everything we're interested in
- var $this = $(this),
- $controlGroup = $this.parents(".control-group").first(),
- $helpBlock = $controlGroup.find(".help-block").first(),
- $form = $this.parents("form").first(),
- validatorNames = [];
-
- // create message container if not exists
- if (!$helpBlock.length && settings.options.autoAdd && settings.options.autoAdd.helpBlocks) {
- $helpBlock = $('');
- $controlGroup.find('.controls').append($helpBlock);
- createdElements.push($helpBlock[0]);
- }
-
- // =============================================================
- // SNIFF HTML FOR VALIDATORS
- // =============================================================
-
- // *snort sniff snuffle*
-
- if (settings.options.sniffHtml) {
- var message = "";
- // ---------------------------------------------------------
- // PATTERN
- // ---------------------------------------------------------
- if ($this.attr("pattern") !== undefined) {
- message = "Not in the expected format";
- if ($this.data("validationPatternMessage")) {
- message = $this.data("validationPatternMessage");
- }
- $this.data("validationPatternMessage", message);
- $this.data("validationPatternRegex", $this.attr("pattern"));
- }
- // ---------------------------------------------------------
- // MAX
- // ---------------------------------------------------------
- if ($this.attr("max") !== undefined || $this.attr("aria-valuemax") !== undefined) {
- var max = ($this.attr("max") !== undefined ? $this.attr("max") : $this.attr("aria-valuemax"));
- message = "Too high: Maximum of '" + max + "'";
- if ($this.data("validationMaxMessage")) {
- message = $this.data("validationMaxMessage");
- }
- $this.data("validationMaxMessage", message);
- $this.data("validationMaxMax", max);
- }
- // ---------------------------------------------------------
- // MIN
- // ---------------------------------------------------------
- if ($this.attr("min") !== undefined || $this.attr("aria-valuemin") !== undefined) {
- var min = ($this.attr("min") !== undefined ? $this.attr("min") : $this.attr("aria-valuemin"));
- message = "Too low: Minimum of '" + min + "'";
- if ($this.data("validationMinMessage")) {
- message = $this.data("validationMinMessage");
- }
- $this.data("validationMinMessage", message);
- $this.data("validationMinMin", min);
- }
- // ---------------------------------------------------------
- // MAXLENGTH
- // ---------------------------------------------------------
- if ($this.attr("maxlength") !== undefined) {
- message = "Too long: Maximum of '" + $this.attr("maxlength") + "' characters";
- if ($this.data("validationMaxlengthMessage")) {
- message = $this.data("validationMaxlengthMessage");
- }
- $this.data("validationMaxlengthMessage", message);
- $this.data("validationMaxlengthMaxlength", $this.attr("maxlength"));
- }
- // ---------------------------------------------------------
- // MINLENGTH
- // ---------------------------------------------------------
- if ($this.attr("minlength") !== undefined) {
- message = "Too short: Minimum of '" + $this.attr("minlength") + "' characters";
- if ($this.data("validationMinlengthMessage")) {
- message = $this.data("validationMinlengthMessage");
- }
- $this.data("validationMinlengthMessage", message);
- $this.data("validationMinlengthMinlength", $this.attr("minlength"));
- }
- // ---------------------------------------------------------
- // REQUIRED
- // ---------------------------------------------------------
- if ($this.attr("required") !== undefined || $this.attr("aria-required") !== undefined) {
- message = settings.builtInValidators.required.message;
- if ($this.data("validationRequiredMessage")) {
- message = $this.data("validationRequiredMessage");
- }
- $this.data("validationRequiredMessage", message);
- }
- // ---------------------------------------------------------
- // NUMBER
- // ---------------------------------------------------------
- if ($this.attr("type") !== undefined && $this.attr("type").toLowerCase() === "number") {
- message = settings.builtInValidators.number.message;
- if ($this.data("validationNumberMessage")) {
- message = $this.data("validationNumberMessage");
- }
- $this.data("validationNumberMessage", message);
- }
- // ---------------------------------------------------------
- // EMAIL
- // ---------------------------------------------------------
- if ($this.attr("type") !== undefined && $this.attr("type").toLowerCase() === "email") {
- message = "Not a valid email address";
- if ($this.data("validationValidemailMessage")) {
- message = $this.data("validationValidemailMessage");
- } else if ($this.data("validationEmailMessage")) {
- message = $this.data("validationEmailMessage");
- }
- $this.data("validationValidemailMessage", message);
- }
- // ---------------------------------------------------------
- // MINCHECKED
- // ---------------------------------------------------------
- if ($this.attr("minchecked") !== undefined) {
- message = "Not enough options checked; Minimum of '" + $this.attr("minchecked") + "' required";
- if ($this.data("validationMincheckedMessage")) {
- message = $this.data("validationMincheckedMessage");
- }
- $this.data("validationMincheckedMessage", message);
- $this.data("validationMincheckedMinchecked", $this.attr("minchecked"));
- }
- // ---------------------------------------------------------
- // MAXCHECKED
- // ---------------------------------------------------------
- if ($this.attr("maxchecked") !== undefined) {
- message = "Too many options checked; Maximum of '" + $this.attr("maxchecked") + "' required";
- if ($this.data("validationMaxcheckedMessage")) {
- message = $this.data("validationMaxcheckedMessage");
- }
- $this.data("validationMaxcheckedMessage", message);
- $this.data("validationMaxcheckedMaxchecked", $this.attr("maxchecked"));
- }
- }
-
- // =============================================================
- // COLLECT VALIDATOR NAMES
- // =============================================================
-
- // Get named validators
- if ($this.data("validation") !== undefined) {
- validatorNames = $this.data("validation").split(",");
- }
-
- // Get extra ones defined on the element's data attributes
- $.each($this.data(), function (i, el) {
- var parts = i.replace(/([A-Z])/g, ",$1").split(",");
- if (parts[0] === "validation" && parts[1]) {
- validatorNames.push(parts[1]);
- }
- });
-
- // =============================================================
- // NORMALISE VALIDATOR NAMES
- // =============================================================
-
- var validatorNamesToInspect = validatorNames;
- var newValidatorNamesToInspect = [];
-
- do // repeatedly expand 'shortcut' validators into their real validators
- {
- // Uppercase only the first letter of each name
- $.each(validatorNames, function (i, el) {
- validatorNames[i] = formatValidatorName(el);
- });
-
- // Remove duplicate validator names
- validatorNames = $.unique(validatorNames);
-
- // Pull out the new validator names from each shortcut
- newValidatorNamesToInspect = [];
- $.each(validatorNamesToInspect, function(i, el) {
- if ($this.data("validation" + el + "Shortcut") !== undefined) {
- // Are these custom validators?
- // Pull them out!
- $.each($this.data("validation" + el + "Shortcut").split(","), function(i2, el2) {
- newValidatorNamesToInspect.push(el2);
- });
- } else if (settings.builtInValidators[el.toLowerCase()]) {
- // Is this a recognised built-in?
- // Pull it out!
- var validator = settings.builtInValidators[el.toLowerCase()];
- if (validator.type.toLowerCase() === "shortcut") {
- $.each(validator.shortcut.split(","), function (i, el) {
- el = formatValidatorName(el);
- newValidatorNamesToInspect.push(el);
- validatorNames.push(el);
- });
- }
- }
- });
-
- validatorNamesToInspect = newValidatorNamesToInspect;
-
- } while (validatorNamesToInspect.length > 0)
-
- // =============================================================
- // SET UP VALIDATOR ARRAYS
- // =============================================================
-
- var validators = {};
-
- $.each(validatorNames, function (i, el) {
- // Set up the 'override' message
- var message = $this.data("validation" + el + "Message");
- var hasOverrideMessage = (message !== undefined);
- var foundValidator = false;
- message =
- (
- message
- ? message
- : "'" + el + "' validation failed "
- )
- ;
-
- $.each(
- settings.validatorTypes,
- function (validatorType, validatorTemplate) {
- if (validators[validatorType] === undefined) {
- validators[validatorType] = [];
- }
- if (!foundValidator && $this.data("validation" + el + formatValidatorName(validatorTemplate.name)) !== undefined) {
- validators[validatorType].push(
- $.extend(
- true,
- {
- name: formatValidatorName(validatorTemplate.name),
- message: message
- },
- validatorTemplate.init($this, el)
- )
- );
- foundValidator = true;
- }
- }
- );
-
- if (!foundValidator && settings.builtInValidators[el.toLowerCase()]) {
-
- var validator = $.extend(true, {}, settings.builtInValidators[el.toLowerCase()]);
- if (hasOverrideMessage) {
- validator.message = message;
- }
- var validatorType = validator.type.toLowerCase();
-
- if (validatorType === "shortcut") {
- foundValidator = true;
- } else {
- $.each(
- settings.validatorTypes,
- function (validatorTemplateType, validatorTemplate) {
- if (validators[validatorTemplateType] === undefined) {
- validators[validatorTemplateType] = [];
- }
- if (!foundValidator && validatorType === validatorTemplateType.toLowerCase()) {
- $this.data("validation" + el + formatValidatorName(validatorTemplate.name), validator[validatorTemplate.name.toLowerCase()]);
- validators[validatorType].push(
- $.extend(
- validator,
- validatorTemplate.init($this, el)
- )
- );
- foundValidator = true;
- }
- }
- );
- }
- }
-
- if (! foundValidator) {
- $.error("Cannot find validation info for '" + el + "'");
- }
- });
-
- // =============================================================
- // STORE FALLBACK VALUES
- // =============================================================
-
- $helpBlock.data(
- "original-contents",
- (
- $helpBlock.data("original-contents")
- ? $helpBlock.data("original-contents")
- : $helpBlock.html()
- )
- );
-
- $helpBlock.data(
- "original-role",
- (
- $helpBlock.data("original-role")
- ? $helpBlock.data("original-role")
- : $helpBlock.attr("role")
- )
- );
-
- $controlGroup.data(
- "original-classes",
- (
- $controlGroup.data("original-clases")
- ? $controlGroup.data("original-classes")
- : $controlGroup.attr("class")
- )
- );
-
- $this.data(
- "original-aria-invalid",
- (
- $this.data("original-aria-invalid")
- ? $this.data("original-aria-invalid")
- : $this.attr("aria-invalid")
- )
- );
-
- // =============================================================
- // VALIDATION
- // =============================================================
-
- $this.bind(
- "validation.validation",
- function (event, params) {
-
- var value = getValue($this);
-
- // Get a list of the errors to apply
- var errorsFound = [];
-
- $.each(validators, function (validatorType, validatorTypeArray) {
- if (value || value.length || (params && params.includeEmpty) || (!!settings.validatorTypes[validatorType].blockSubmit && params && !!params.submitting)) {
- $.each(validatorTypeArray, function (i, validator) {
- if (settings.validatorTypes[validatorType].validate($this, value, validator)) {
- errorsFound.push(validator.message);
- }
- });
- }
- });
-
- return errorsFound;
- }
- );
-
- $this.bind(
- "getValidators.validation",
- function () {
- return validators;
- }
- );
-
- // =============================================================
- // WATCH FOR CHANGES
- // =============================================================
- $this.bind(
- "submit.validation",
- function () {
- return $this.triggerHandler("change.validation", {submitting: true});
- }
- );
- $this.bind(
- [
- "keyup",
- "focus",
- "blur",
- "click",
- "keydown",
- "keypress",
- "change"
- ].join(".validation ") + ".validation",
- function (e, params) {
-
- var value = getValue($this);
-
- var errorsFound = [];
-
- $controlGroup.find("input,textarea,select").each(function (i, el) {
- var oldCount = errorsFound.length;
- $.each($(el).triggerHandler("validation.validation", params), function (j, message) {
- errorsFound.push(message);
- });
- if (errorsFound.length > oldCount) {
- $(el).attr("aria-invalid", "true");
- } else {
- var original = $this.data("original-aria-invalid");
- $(el).attr("aria-invalid", (original !== undefined ? original : false));
- }
- });
-
- $form.find("input,select,textarea").not($this).not("[name=\"" + $this.attr("name") + "\"]").trigger("validationLostFocus.validation");
-
- errorsFound = $.unique(errorsFound.sort());
-
- // Were there any errors?
- if (errorsFound.length) {
- // Better flag it up as a warning.
- $controlGroup.removeClass("success error").addClass("warning");
-
- // How many errors did we find?
- if (settings.options.semanticallyStrict && errorsFound.length === 1) {
- // Only one? Being strict? Just output it.
- $helpBlock.html(errorsFound[0] +
- ( settings.options.prependExistingHelpBlock ? $helpBlock.data("original-contents") : "" ));
- } else {
- // Multiple? Being sloppy? Glue them together into an UL.
- $helpBlock.html("
" + errorsFound.join("
") + "
" +
- ( settings.options.prependExistingHelpBlock ? $helpBlock.data("original-contents") : "" ));
- }
- } else {
- $controlGroup.removeClass("warning error success");
- if (value.length > 0) {
- $controlGroup.addClass("success");
- }
- $helpBlock.html($helpBlock.data("original-contents"));
- }
-
- if (e.type === "blur") {
- $controlGroup.removeClass("success");
- }
- }
- );
- $this.bind("validationLostFocus.validation", function () {
- $controlGroup.removeClass("success");
- });
- });
- },
- destroy : function( ) {
-
- return this.each(
- function() {
-
- var
- $this = $(this),
- $controlGroup = $this.parents(".control-group").first(),
- $helpBlock = $controlGroup.find(".help-block").first();
-
- // remove our events
- $this.unbind('.validation'); // events are namespaced.
- // reset help text
- $helpBlock.html($helpBlock.data("original-contents"));
- // reset classes
- $controlGroup.attr("class", $controlGroup.data("original-classes"));
- // reset aria
- $this.attr("aria-invalid", $this.data("original-aria-invalid"));
- // reset role
- $helpBlock.attr("role", $this.data("original-role"));
- // remove all elements we created
- if (createdElements.indexOf($helpBlock[0]) > -1) {
- $helpBlock.remove();
- }
-
- }
- );
-
- },
- collectErrors : function(includeEmpty) {
-
- var errorMessages = {};
- this.each(function (i, el) {
- var $el = $(el);
- var name = $el.attr("name");
- var errors = $el.triggerHandler("validation.validation", {includeEmpty: true});
- errorMessages[name] = $.extend(true, errors, errorMessages[name]);
- });
-
- $.each(errorMessages, function (i, el) {
- if (el.length === 0) {
- delete errorMessages[i];
- }
- });
-
- return errorMessages;
-
- },
- hasErrors: function() {
-
- var errorMessages = [];
-
- this.each(function (i, el) {
- errorMessages = errorMessages.concat(
- $(el).triggerHandler("getValidators.validation") ? $(el).triggerHandler("validation.validation", {submitting: true}) : []
- );
- });
-
- return (errorMessages.length > 0);
- },
- override : function (newDefaults) {
- defaults = $.extend(true, defaults, newDefaults);
- }
- },
- validatorTypes: {
- callback: {
- name: "callback",
- init: function ($this, name) {
- return {
- validatorName: name,
- callback: $this.data("validation" + name + "Callback"),
- lastValue: $this.val(),
- lastValid: true,
- lastFinished: true
- };
- },
- validate: function ($this, value, validator) {
- if (validator.lastValue === value && validator.lastFinished) {
- return !validator.lastValid;
- }
-
- if (validator.lastFinished === true)
- {
- validator.lastValue = value;
- validator.lastValid = true;
- validator.lastFinished = false;
-
- var rrjqbvValidator = validator;
- var rrjqbvThis = $this;
- executeFunctionByName(
- validator.callback,
- window,
- $this,
- value,
- function (data) {
- if (rrjqbvValidator.lastValue === data.value) {
- rrjqbvValidator.lastValid = data.valid;
- if (data.message) {
- rrjqbvValidator.message = data.message;
- }
- rrjqbvValidator.lastFinished = true;
- rrjqbvThis.data("validation" + rrjqbvValidator.validatorName + "Message", rrjqbvValidator.message);
- // Timeout is set to avoid problems with the events being considered 'already fired'
- setTimeout(function () {
- rrjqbvThis.trigger("change.validation");
- }, 1); // doesn't need a long timeout, just long enough for the event bubble to burst
- }
- }
- );
- }
-
- return false;
-
- }
- },
- ajax: {
- name: "ajax",
- init: function ($this, name) {
- return {
- validatorName: name,
- url: $this.data("validation" + name + "Ajax"),
- lastValue: $this.val(),
- lastValid: true,
- lastFinished: true
- };
- },
- validate: function ($this, value, validator) {
- if (""+validator.lastValue === ""+value && validator.lastFinished === true) {
- return validator.lastValid === false;
- }
-
- if (validator.lastFinished === true)
- {
- validator.lastValue = value;
- validator.lastValid = true;
- validator.lastFinished = false;
- $.ajax({
- url: validator.url,
- data: "value=" + value + "&field=" + $this.attr("name"),
- dataType: "json",
- success: function (data) {
- if (""+validator.lastValue === ""+data.value) {
- validator.lastValid = !!(data.valid);
- if (data.message) {
- validator.message = data.message;
- }
- validator.lastFinished = true;
- $this.data("validation" + validator.validatorName + "Message", validator.message);
- // Timeout is set to avoid problems with the events being considered 'already fired'
- setTimeout(function () {
- $this.trigger("change.validation");
- }, 1); // doesn't need a long timeout, just long enough for the event bubble to burst
- }
- },
- failure: function () {
- validator.lastValid = true;
- validator.message = "ajax call failed";
- validator.lastFinished = true;
- $this.data("validation" + validator.validatorName + "Message", validator.message);
- // Timeout is set to avoid problems with the events being considered 'already fired'
- setTimeout(function () {
- $this.trigger("change.validation");
- }, 1); // doesn't need a long timeout, just long enough for the event bubble to burst
- }
- });
- }
-
- return false;
-
- }
- },
- regex: {
- name: "regex",
- init: function ($this, name) {
- return {regex: regexFromString($this.data("validation" + name + "Regex"))};
- },
- validate: function ($this, value, validator) {
- return (!validator.regex.test(value) && ! validator.negative)
- || (validator.regex.test(value) && validator.negative);
- }
- },
- required: {
- name: "required",
- init: function ($this, name) {
- return {};
- },
- validate: function ($this, value, validator) {
- return !!(value.length === 0 && ! validator.negative)
- || !!(value.length > 0 && validator.negative);
- },
- blockSubmit: true
- },
- match: {
- name: "match",
- init: function ($this, name) {
- var element = $this.parents("form").first().find("[name=\"" + $this.data("validation" + name + "Match") + "\"]").first();
- element.bind("validation.validation", function () {
- $this.trigger("change.validation", {submitting: true});
- });
- return {"element": element};
- },
- validate: function ($this, value, validator) {
- return (value !== validator.element.val() && ! validator.negative)
- || (value === validator.element.val() && validator.negative);
- },
- blockSubmit: true
- },
- max: {
- name: "max",
- init: function ($this, name) {
- return {max: $this.data("validation" + name + "Max")};
- },
- validate: function ($this, value, validator) {
- return (parseFloat(value, 10) > parseFloat(validator.max, 10) && ! validator.negative)
- || (parseFloat(value, 10) <= parseFloat(validator.max, 10) && validator.negative);
- }
- },
- min: {
- name: "min",
- init: function ($this, name) {
- return {min: $this.data("validation" + name + "Min")};
- },
- validate: function ($this, value, validator) {
- return (parseFloat(value) < parseFloat(validator.min) && ! validator.negative)
- || (parseFloat(value) >= parseFloat(validator.min) && validator.negative);
- }
- },
- maxlength: {
- name: "maxlength",
- init: function ($this, name) {
- return {maxlength: $this.data("validation" + name + "Maxlength")};
- },
- validate: function ($this, value, validator) {
- return ((value.length > validator.maxlength) && ! validator.negative)
- || ((value.length <= validator.maxlength) && validator.negative);
- }
- },
- minlength: {
- name: "minlength",
- init: function ($this, name) {
- return {minlength: $this.data("validation" + name + "Minlength")};
- },
- validate: function ($this, value, validator) {
- return ((value.length < validator.minlength) && ! validator.negative)
- || ((value.length >= validator.minlength) && validator.negative);
- }
- },
- maxchecked: {
- name: "maxchecked",
- init: function ($this, name) {
- var elements = $this.parents("form").first().find("[name=\"" + $this.attr("name") + "\"]");
- elements.bind("click.validation", function () {
- $this.trigger("change.validation", {includeEmpty: true});
- });
- return {maxchecked: $this.data("validation" + name + "Maxchecked"), elements: elements};
- },
- validate: function ($this, value, validator) {
- return (validator.elements.filter(":checked").length > validator.maxchecked && ! validator.negative)
- || (validator.elements.filter(":checked").length <= validator.maxchecked && validator.negative);
- },
- blockSubmit: true
- },
- minchecked: {
- name: "minchecked",
- init: function ($this, name) {
- var elements = $this.parents("form").first().find("[name=\"" + $this.attr("name") + "\"]");
- elements.bind("click.validation", function () {
- $this.trigger("change.validation", {includeEmpty: true});
- });
- return {minchecked: $this.data("validation" + name + "Minchecked"), elements: elements};
- },
- validate: function ($this, value, validator) {
- return (validator.elements.filter(":checked").length < validator.minchecked && ! validator.negative)
- || (validator.elements.filter(":checked").length >= validator.minchecked && validator.negative);
- },
- blockSubmit: true
- }
- },
- builtInValidators: {
- email: {
- name: "Email",
- type: "shortcut",
- shortcut: "validemail"
- },
- validemail: {
- name: "Validemail",
- type: "regex",
- regex: "[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\\\.[A-Za-z]{2,4}",
- message: "Not a valid email address"
- },
- passwordagain: {
- name: "Passwordagain",
- type: "match",
- match: "password",
- message: "Does not match the given password"
- },
- positive: {
- name: "Positive",
- type: "shortcut",
- shortcut: "number,positivenumber"
- },
- negative: {
- name: "Negative",
- type: "shortcut",
- shortcut: "number,negativenumber"
- },
- number: {
- name: "Number",
- type: "regex",
- regex: "([+-]?\\\d+(\\\.\\\d*)?([eE][+-]?[0-9]+)?)?",
- message: "Must be a number"
- },
- integer: {
- name: "Integer",
- type: "regex",
- regex: "[+-]?\\\d+",
- message: "No decimal places allowed"
- },
- positivenumber: {
- name: "Positivenumber",
- type: "min",
- min: 0,
- message: "Must be a positive number"
- },
- negativenumber: {
- name: "Negativenumber",
- type: "max",
- max: 0,
- message: "Must be a negative number"
- },
- required: {
- name: "Required",
- type: "required",
- message: "This is required"
- },
- checkone: {
- name: "Checkone",
- type: "minchecked",
- minchecked: 1,
- message: "Check at least one option"
- }
- }
- };
-
- var formatValidatorName = function (name) {
- return name
- .toLowerCase()
- .replace(
- /(^|\s)([a-z])/g ,
- function(m,p1,p2) {
- return p1+p2.toUpperCase();
- }
- )
- ;
- };
-
- var getValue = function ($this) {
- // Extract the value we're talking about
- var value = $this.val();
- var type = $this.attr("type");
- if (type === "checkbox") {
- value = ($this.is(":checked") ? value : "");
- }
- if (type === "radio") {
- value = ($('input[name="' + $this.attr("name") + '"]:checked').length > 0 ? value : "");
- }
- return value;
- };
-
- function regexFromString(inputstring) {
- return new RegExp("^" + inputstring + "$");
- }
-
- /**
- * Thanks to Jason Bunting via StackOverflow.com
- *
- * http://stackoverflow.com/questions/359788/how-to-execute-a-javascript-function-when-i-have-its-name-as-a-string#answer-359910
- * Short link: http://tinyurl.com/executeFunctionByName
- **/
- function executeFunctionByName(functionName, context /*, args*/) {
- var args = Array.prototype.slice.call(arguments).splice(2);
- var namespaces = functionName.split(".");
- var func = namespaces.pop();
- for(var i = 0; i < namespaces.length; i++) {
- context = context[namespaces[i]];
- }
- return context[func].apply(this, args);
- }
-
- $.fn.jqBootstrapValidation = function( method ) {
-
- if ( defaults.methods[method] ) {
- return defaults.methods[method].apply( this, Array.prototype.slice.call( arguments, 1 ));
- } else if ( typeof method === 'object' || ! method ) {
- return defaults.methods.init.apply( this, arguments );
- } else {
- $.error( 'Method ' + method + ' does not exist on jQuery.jqBootstrapValidation' );
- return null;
- }
-
- };
-
- $.jqBootstrapValidation = function (options) {
- $(":input").not("[type=image],[type=submit]").jqBootstrapValidation.apply(this,arguments);
- };
-
-})( jQuery );
diff --git a/knitpost.R b/knitpost.R
new file mode 100755
index 000000000..d42522664
--- /dev/null
+++ b/knitpost.R
@@ -0,0 +1,30 @@
+#!/usr/bin/Rscript --vanilla
+#
+# Convert a Rmd file to a md file for Jekyll
+#
+# Usage:
+# -arg1 The Rmd file to convert to md for Jekyll use.
+#
+# Example:
+# cd lesson/lesson_name/
+# Rscript ../../knitpost.R lesson.Rmd
+#
+# Change `visible: false` to `visible: true` in the generated lesson.md file.
+#
+
+KnitPost <- function(input) {
+ outfile <- rename_to_post(input)
+ knitr::opts_knit$set(base.url = '../')
+ knitr::opts_chunk$set(fig.cap = "center")
+ knitr::render_markdown()
+ knitr::knit(input, outfile, envir = parent.frame())
+}
+
+rename_to_post <- function(draft)
+ paste0(sub(".Rmd$", ".md", draft))
+
+args <- commandArgs(trailingOnly = TRUE)
+if (length(args) > 1)
+ stop('Please pass only one argument: the file.')
+
+KnitPost(args[1])
diff --git a/lessons/git/advanced/beamercolorthemesolarized.sty b/lessons/git/advanced/beamercolorthemesolarized.sty
new file mode 100644
index 000000000..5d5874c71
--- /dev/null
+++ b/lessons/git/advanced/beamercolorthemesolarized.sty
@@ -0,0 +1,156 @@
+% Beamer Color Theme using the Solarized Palette,
+% http://ethanschoonover.com/solarized.
+%
+% Copyright 2012 Jeffrey B. Arnold
+%
+% This program is free software: you can redistribute it and/or modify
+% it under the terms of the GNU General Public License as published by
+% the Free Software Foundation, either version 3 of the License, or
+% (at your option) any later version.
+%
+% This program is distributed in the hope that it will be useful,
+% but WITHOUT ANY WARRANTY; without even the implied warranty of
+% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+% GNU General Public License for more details.
+%
+% You should have received a copy of the GNU General Public License
+% along with this program. If not, see .
+
+\ProvidesPackage{beamercolorthemesolarized}[2013/10/11 1.0.1 Solarized color theme for beamer]
+\RequirePackage{etoolbox}
+\RequirePackage{kvoptions}
+
+%% This is ugly. First time using options and conditionals in LaTeX
+\SetupKeyvalOptions{
+ family=solarized,
+ prefix=solarized@,
+}
+\DeclareBoolOption[false]{dark}
+\DeclareComplementaryOption{light}{dark}
+\DeclareStringOption[yellow]{accent}[yellow]
+\ProcessKeyvalOptions*
+
+% Solarized palette
+\definecolor{solarizedBase03}{HTML}{002B36}
+\definecolor{solarizedBase02}{HTML}{073642}
+\definecolor{solarizedBase01}{HTML}{586e75}
+\definecolor{solarizedBase00}{HTML}{657b83}
+\definecolor{solarizedBase0}{HTML}{839496}
+\definecolor{solarizedBase1}{HTML}{93a1a1}
+\definecolor{solarizedBase2}{HTML}{EEE8D5}
+\definecolor{solarizedBase3}{HTML}{FDF6E3}
+\definecolor{solarizedYellow}{HTML}{B58900}
+\definecolor{solarizedOrange}{HTML}{CB4B16}
+\definecolor{solarizedRed}{HTML}{DC322F}
+\definecolor{solarizedMagenta}{HTML}{D33682}
+\definecolor{solarizedViolet}{HTML}{6C71C4}
+\definecolor{solarizedBlue}{HTML}{268BD2}
+\definecolor{solarizedCyan}{HTML}{2AA198}
+\definecolor{solarizedGreen}{HTML}{859900}
+
+% Set Accent color
+% Ugly. Should be done with a switch
+\ifdefstring{\solarized@accent}{yellow}{
+ \colorlet{solarizedAccent}{solarizedYellow}
+}{}
+\ifdefstring{\solarized@accent}{orange}{
+ \colorlet{solarizedAccent}{solarizedOrange}
+}{}
+\ifdefstring{\solarized@accent}{red}{
+ \colorlet{solarizedAccent}{solarizedRed}
+}{}
+\ifdefstring{\solarized@accent}{magenta}{
+ \colorlet{solarizedAccent}{solarizedMagenta}
+}{}
+\ifdefstring{\solarized@accent}{violet}{
+ \colorlet{solarizedAccent}{solarizedViolet}
+}{}
+\ifdefstring{\solarized@accent}{blue}{
+ \colorlet{solarizedAccent}{solarizedBlue}
+}{}
+\ifdefstring{\solarized@accent}{cyan}{
+ \colorlet{solarizedAccent}{solarizedCyan}
+}{}
+\ifdefstring{\solarized@accent}{green}{
+ \colorlet{solarizedAccent}{solarizedGreen}
+}{}
+
+%% Set base colors for dark or light versions
+%% Dark
+% Switch between light and dark themes using the method in the CSS
+% stylesheet http://ethanschoonover.com/solarized
+\ifboolexpe{ bool {solarized@dark}}{
+ \colorlet{solarizedRebase03}{solarizedBase03}
+ \colorlet{solarizedRebase02}{solarizedBase02}
+ \colorlet{solarizedRebase01}{solarizedBase01}
+ \colorlet{solarizedRebase00}{solarizedBase00}
+ \colorlet{solarizedRebase0}{solarizedBase0}
+ \colorlet{solarizedRebase1}{solarizedBase1}
+ \colorlet{solarizedRebase2}{solarizedBase2}
+ \colorlet{solarizedRebase3}{solarizedBase3}
+}{
+ %% Light
+ \colorlet{solarizedRebase03}{solarizedBase3}
+ \colorlet{solarizedRebase02}{solarizedBase2}
+ \colorlet{solarizedRebase01}{solarizedBase1}
+ \colorlet{solarizedRebase00}{solarizedBase0}
+ \colorlet{solarizedRebase0}{solarizedBase00}
+ \colorlet{solarizedRebase1}{solarizedBase01}
+ \colorlet{solarizedRebase2}{solarizedBase02}
+ \colorlet{solarizedRebase3}{solarizedBase03}
+}
+
+\mode
+
+\setbeamercolor{normal text}{fg=solarizedRebase0, bg=solarizedRebase03}
+\setbeamercolor{alerted text}{fg=solarizedAccent}
+% based css pre element
+\setbeamercolor{example text}{fg=solarizedRebase1, bg=solarizedRebase02}
+
+% Header and footer from CSS
+\setbeamercolor{footline}{bg=solarizedRebase02,fg=solarizedRebase01}
+\setbeamercolor{headline}{bg=solarizedRebase01,fg=solarizedRebase1}
+
+% Titles
+\setbeamercolor*{titlelike}{fg=solarizedAccent}
+\setbeamercolor*{frametitle}{fg=solarizedAccent}
+\setbeamercolor*{title}{fg=solarizedAccent}
+
+% Structure elements use css style for header
+\setbeamercolor*{structure}{bg=solarizedRebase01, fg=solarizedRebase1}
+
+% Do not mess with subtle colors in palette. I don't like it.
+\setbeamercolor*{palette primary}{bg=solarizedRebase01, fg=solarizedRebase1}
+\setbeamercolor*{palette secondary}{bg=solarizedRebase01, fg=solarizedRebase1}
+\setbeamercolor*{palette tertiary}{bg=solarizedRebase01, fg=solarizedRebase1}
+\setbeamercolor*{palette quaternary}{bg=solarizedRebase01, fg=solarizedRebase1}
+
+% Make Blocks slightly lighter/darker
+\setbeamercolor{block title}{fg=solarizedAccent, bg=solarizedRebase02}
+%\setbeamercolor{block title alerted}{}
+%\setbeamercolor{block title example}{}
+
+\setbeamercolor{block body}{parent=normal text, bg=solarizedRebase02}
+% \setbeamercolor{block body alerted}{}
+% \setbeamercolor{block body example}{}
+
+% same as footline
+% Set Sidebar and footline to use the css style for footer
+\setbeamercolor*{sidebar}{parent=headline}
+\setbeamercolor*{palette sidebar primary}{fg=solarizedRebase01, fg=solarizedRebase1}
+\setbeamercolor*{palette sidebar secondary}{fg=solarizedRebase01, fg=solarizedRebase1}
+\setbeamercolor*{palette sidebar tertiary}{fg=solarizedRebase01, fg=solarizedRebase1}
+\setbeamercolor*{palette sidebar quaternary}{fg=solarizedRebase01, fg=solarizedRebase1}
+
+% border-color for headings
+\setbeamercolor{separation line}{fg=solarizedRebase0}
+\setbeamercolor{fine separation line}{fg=solarizedRebase0}
+
+\setbeamercolor*{section in sidebar shaded}{parent=palette sidebar primary}
+% a.hover.navlink in CSS
+\setbeamercolor*{section in sidebar}{parent=palette sidebar primary, fg=solarizedRebase02}
+\setbeamercolor*{subsection in sidebar}{parent=section in sidebar}
+\setbeamercolor*{subsection in sidebar shaded}{parent=section in sidebar shaded}
+
+\mode
+
diff --git a/lessons/git/advanced/lesson.md b/lessons/git/advanced/lesson.md
new file mode 100644
index 000000000..6f842732a
--- /dev/null
+++ b/lessons/git/advanced/lesson.md
@@ -0,0 +1,25 @@
+---
+layout: page
+title: 'An Intermediate Look at Git + GitHub'
+visible: true
+tags:
+ - git
+ - advanced
+---
+
+ - **Authors**: Elliott Sales de Andrade
+ - **Research field**: Seismology
+ - **Lesson topic**: Version control (Git)
+ - **Lesson content URL**:
+
+## Recap: ##
+
+* Configure your git client (`git config user.name` + `user.email`)
+* Create a git repository (`git init`)
+* Start tracking a file with git (`git add`)
+* Commit changes to the history (`git commit`)
+* Check what's going on (`git status`)
+* Compare a file with the one in the history (`git diff`)
+* Look into your history (`git log`)
+
+Please follow along in the [slides](../slides.pdf) for the remaining information.
diff --git a/lessons/git/advanced/slides.pdf b/lessons/git/advanced/slides.pdf
new file mode 100644
index 000000000..a9508cc9c
Binary files /dev/null and b/lessons/git/advanced/slides.pdf differ
diff --git a/lessons/git/advanced/slides.tex b/lessons/git/advanced/slides.tex
new file mode 100644
index 000000000..c787ff3d4
--- /dev/null
+++ b/lessons/git/advanced/slides.tex
@@ -0,0 +1,339 @@
+\documentclass{beamer}
+
+\usepackage[utf8]{inputenc}
+\usepackage[T1]{fontenc}
+\usepackage{lmodern,tgadventor}
+\usepackage{textcomp}
+\usepackage{tikz}
+\usetikzlibrary{backgrounds,decorations.pathreplacing,decorations.text,fadings,trees}
+
+\useinnertheme{rectangles}
+\usecolortheme[accent=blue]{solarized}
+\setbeamercolor{description item}{fg=solarizedAccent}
+\beamertemplatenavigationsymbolsempty
+\setbeamertemplate{footline}[frame number]
+
+% Shell highlighting
+\newcommand{\command}[1]{\textcolor{solarizedAccent}{\$}
+ \textcolor{solarizedRebase2}{#1}}
+\newcommand{\comment}[1]{\textit{\# #1}}
+\newcommand{\hiRed}[1]{\textcolor{solarizedRed}{#1}}
+\newcommand{\hiGreen}[1]{\textcolor{solarizedGreen}{#1}}
+\newcommand{\hiBlue}[1]{\textcolor{solarizedBlue}{#1}}
+\newcommand{\hiYellow}[1]{\textcolor{solarizedYellow}{#1}}
+
+% DAG commands
+\newcommand\commit[2]{\node[commit] (#1) {};%
+ \node[clabel] (#1 label) at (#1) {\texttt{#1}: #2};}
+\newcommand\ghost[1]{\coordinate (#1);}
+\newcommand\connect[2]{\path[connections] (#1) to[out=90,in=-90] (#2);}
+\newcommand\gittag[1]{%
+ \begin{tikzpicture}[baseline]
+ \node[fill=solarizedRebase02, rounded corners, inner sep=1pt, anchor=base] {
+ \color{solarizedYellow}\vphantom{|}#1
+ };
+ \end{tikzpicture}%
+}
+\newcommand\branch[1]{%
+ \begin{tikzpicture}[baseline]
+ \node[fill=solarizedRebase02, rounded corners, inner sep=1pt, anchor=base] {
+ \color{solarizedRed}\vphantom{|}#1
+ };
+ \end{tikzpicture}%
+}
+
+% https://tex.stackexchange.com/questions/55806/tikzpicture-in-beamer/55827#55827
+\tikzset{
+ invisible/.style={opacity=0},
+ visible on/.style={alt=#1{}{invisible}},
+ alt/.code args={<#1>#2#3}{%
+ \alt<#1>{\pgfkeysalso{#2}}{\pgfkeysalso{#3}}
+ },
+}
+
+\author{U of T Scientific Coders}
+\title{An Intermediate Look at Git + GitHub}
+\institute{University of Toronto}
+\date{October 1, 2015}
+\titlegraphic{%
+ \begin{tikzpicture}[
+ commit/.style={draw, circle, fill=solarizedViolet, inner sep=0pt,
+ minimum size=5pt},
+ clabel/.style={right, outer sep=1em},
+ connections/.style={draw, solarizedViolet}
+ ]
+ \useasboundingbox (0,1em) rectangle (10.7,6.5em); % Mysteriously chosen to fit...
+ \matrix [column sep={1em,between origins}, row sep=\lineskip,
+ ampersand replacement=\&]%
+ {
+ \commit{fd7a4e4}{\branch{gh-pages} Create 2015-10-08-Coworking4.markd\dots} \& \& \\
+ \commit{c3cb768}{Merge pull request \#41 from mbonsma/gh-pages} \& \& \\
+ \& \commit{e2764b7}{Incorporated PR comments into Biopython/less\dots} \& \\
+ \& \commit{d212bdd}{Merge remote-tracking branch `upstream/gh-p\dots} \& \\
+ \commit{85791b7}{Added start and end time to event post} \& \& \\
+ \& \commit{b83b3e0}{Merge remote-tracking branch `upstream/gh-p\dots} \& \\
+ \commit{0b7d78c}{Create 2015-10-01-MoreObGit.markdown} \& \& \\
+ \commit{c188bb0}{Merge pull request \#48 from lwjohnst86/gh-pages} \& \& \\
+ \ghost{ghost00} \& \ghost{ghost01} \& \\
+ };
+ % Left branch
+ \connect{c3cb768}{fd7a4e4};
+ \connect{85791b7}{c3cb768};
+ \connect{0b7d78c}{85791b7};
+ \connect{c188bb0}{0b7d78c};
+ \connect{ghost00}{c188bb0};
+ % Upper right branch
+ \connect{e2764b7}{c3cb768};
+ \connect{d212bdd}{e2764b7};
+ \connect{85791b7}{d212bdd};
+ % Lower right branch
+ \connect{b83b3e0}{d212bdd};
+ \connect{0b7d78c}{b83b3e0};
+ \connect{ghost01}{b83b3e0};
+ \fill [color=solarizedRebase03, path fading=north] (-1,-1.5) rectangle (16,0);
+ \end{tikzpicture}%
+}
+
+\AtBeginSection[]{\frame{\sectionpage}}
+
+\begin{document}
+
+\begin{frame}[plain,noframenumbering]
+ \titlepage
+\end{frame}
+
+\begin{frame}
+ \frametitle{Outline}
+ \tableofcontents
+\end{frame}
+
+\section{Review}
+
+\begin{frame}
+ \frametitle{Review}
+
+ \begin{itemize}
+ \item Configure your git client (\texttt{git config user.name} + \texttt{user.email})
+ \item Create a git repository (\texttt{git init})
+ \pause
+ \begin{tikzpicture}[%
+ remember picture,
+ show background rectangle,
+ background rectangle/.style={draw, visible on=<2->},
+ visible on=<2->
+ ]
+ \begin{scope}[
+ every node/.style={anchor=west, minimum height=1em,
+ font={\tiny\ttfamily}, inner sep=2.5pt},
+ every edge/.style={thick},
+ root/.style={},
+ grow via three points={one child at (0.25,-0.75em) and
+ two children at (0.25,-0.75em) and (0.25,-1.25em)},
+ edge from parent path={(\tikzparentnode.south) |- (\tikzchildnode.west)}
+ ]
+ \node[anchor=west, font={\scriptsize}, align=center]
+ at (0,0) (work) {Working\\Directory};
+ \node [root, anchor=north] at (work.south) (work root) {my\_project/}
+ child { node (git folder) {.git/} }
+ child { node (first folder) {foo/} }
+ child { node {bar/} }
+ child { node {baz.txt} }
+ child { node {qux.txt} }
+ child { node (last folder) {\dots} };
+ \end{scope}
+ \node[anchor=north west, font={\scriptsize}, xshift=4em]
+ at (work.north east) (repository) {Repository};
+ \begin{scope}[
+ every node/.style={anchor=west, minimum height=1em,
+ font={\tiny\ttfamily}, inner sep=2.5pt},
+ every edge/.style={thick},
+ root/.style={},
+ grow via three points={one child at (0.25,-0.75em) and
+ two children at (0.25,-0.75em) and (0.25,-1.25em)},
+ edge from parent path={(\tikzparentnode.south) |- (\tikzchildnode.west)}
+ ]
+ \node[anchor=north, font={\scriptsize}, align=center]
+ at (repository.south) (index) {Index/\\Staging Area};
+ \node<3->[root, anchor=north, align=center]
+ at (index.south) (snapshot) {\color{solarizedAccent} (Snapshot)}
+ child { node {foo/} }
+ child { node {baz.txt} }
+ child { node {\dots} };
+ \end{scope}
+ \begin{scope}[
+ commit/.style={draw, rectangle, rounded corners, fill=solarizedRebase02,
+ inner sep=1pt, minimum height=0.75em, minimum width=1em,
+ font={\tiny\sffamily}},
+ connections/.style={draw}
+ ]
+ \node[anchor=west, font={\scriptsize}, align=center, xshift=1em] at (index.east)
+ (history) {History};
+ \matrix at (history.south)
+ [column sep={1em,between origins}, row sep={1em,between origins},
+ ampersand replacement=\&, yshift=-2.5em]%
+ {
+ \node[commit,visible on=<4->] (10) {\color{solarizedAccent} 10}; \\
+ \node[commit] (9) {9}; \\
+ \node[commit] (8) {8}; \\
+ \ghost{7}; \\
+ };
+ \path[connections, visible on=<4->] (9) -- (10);
+ \connect{8}{9};
+ \path[connections, densely dotted] (7) -- (8);
+ \end{scope}
+ \begin{scope}[
+ path/.style={->},
+ label/.style={decorate, decoration={text along path, text align=center,
+ text color=solarizedRebase0,
+ raise=1pt}}
+ ]
+ \draw[path] (git folder.east) to[out=0,in=180] (repository.west);
+ \draw (index.north west) rectangle (7.south -| history.east);
+ \draw<3->[decorate, decoration={brace, raise=0.75em, aspect=0.45}]
+ (first folder.east) |- (last folder.east) node[near start] (mid selection) {};
+ \draw<3->[path] (mid selection.east) + (0.6em,0) to[out=0,in=180] (snapshot.west);
+ \draw<4->[path] (snapshot.east) to[out=0,in=180] (10.west);
+ \end{scope}
+ \end{tikzpicture}
+ \pause
+ \item Start tracking a file with git (\texttt{git add})
+ \pause
+ \item Commit changes to the history (\texttt{git commit})
+ \pause
+ \item Check what's going on (\texttt{git status})
+ \item Compare a file with the one in the history (\texttt{git diff})
+ \item Look into your history (\texttt{git log})
+ \end{itemize}
+\end{frame}
+
+\section{Viewing History}
+
+\begin{frame}
+ \frametitle{Viewing History}
+
+ Viewing the log allows you to ``see'' history:
+ \begin{itemize}
+ \item \texttt{git log}
+ \pause
+ \item \texttt{git log \alert{..}}
+ \item \texttt{git log \alert{-{}- }}
+ \item \texttt{git log \alert{-{}-oneline}}
+ \item \texttt{git log \alert{-{}-graph}}
+ \item \texttt{git log -{}-graph \alert{-{}-decorate}} \\
+ \end{itemize}
+ \pause
+ \begin{itemize}
+ \item \texttt{git blame }
+ \end{itemize}
+ \pause
+ \begin{itemize}
+ \item \texttt{gitk} + \texttt{gitg} + other viewers
+ \end{itemize}
+\end{frame}
+
+\section{Branching}
+
+\begin{frame}
+ \frametitle{Branches}
+
+ What are branches?
+ \begin{itemize}[<+->]
+ \item Divergent commits (two commits with the same parent) could be
+ considered ``virtual'' branches
+ \item Branches are simply a \alert{named pointer} to a commit
+ \item Branches automatically \emph{move forward} as commits are made
+ \end{itemize}
+ \pause[\thebeamerpauses]
+ Why use them?
+ \pause
+ \begin{itemize}[<+->]
+ \item They're cheap! Just pointers. No heavy changes, e.g., an extra
+ directory in svn.
+ \item To keep experimental work apart
+ \item To separate trials
+ \item To ease collaboration
+ \end{itemize}
+\end{frame}
+
+\begin{frame}
+ \frametitle{Branches}
+
+ Managing branches:
+ \begin{itemize}
+ \item \texttt{git branch [commit]}
+ \item \texttt{git branch -d }
+ \item \texttt{git branch [-l]}
+ \end{itemize}
+
+ \pause
+ Switching branches:
+ \begin{itemize}
+ \item \texttt{git checkout }
+ \item \texttt{git checkout -b [commit]} --- Create and switch
+ in one go
+ \end{itemize}
+
+ \pause
+ Merging branches:
+ \begin{itemize}
+ \item \texttt{git merge }
+ \item \texttt{git merge \alert{-{}-ff-only} }
+ \item \texttt{git merge \alert{-{}-no-ff} }
+ \end{itemize}
+\end{frame}
+
+\section{Collaborating with Others}
+
+\begin{frame}
+ \frametitle{Clones and Remotes}
+
+ Clones are complete copies of a repository's history (i.e., excluding the
+ index and working directory)
+ \pause
+ \begin{itemize}
+ \item \texttt{git clone }
+ \end{itemize}
+
+ \pause
+ Remotes are \emph{pointers} to other clones
+ \pause
+ \begin{itemize}
+ \item \texttt{git remote [-v]}
+ \item \texttt{git remote add }
+ \item \texttt{git remote rm }
+ \item Local branches can \emph{track} remote branches\\
+ \texttt{git branch -u }
+ \end{itemize}
+
+ \pause
+ \emph{You} are responsible for syncing
+ \begin{itemize}
+ \item \texttt{git push [] []}
+ \item \texttt{git fetch []}
+ \item \texttt{git pull []} --- \texttt{fetch} + \texttt{merge}
+ \end{itemize}
+\end{frame}
+
+\begin{frame}[plain]
+ \vfill
+ \begin{center}
+ \LARGE \color{solarizedAccent} GitHub Example
+ \end{center}
+ \vfill
+\end{frame}
+
+\appendix
+
+\section{Advanced Topics}
+
+\begin{frame}
+ \frametitle{Advanced Topics}
+
+ \begin{itemize}[<+->]
+ \item \texttt{git add \alert{-{}-patch}}
+ \item \texttt{git rebase}
+ \item Ignoring unwanted files
+ \end{itemize}
+\end{frame}
+
+\end{document}
diff --git a/lessons/git/branches/lesson.md b/lessons/git/branches/lesson.md
new file mode 100644
index 000000000..78d38e33d
--- /dev/null
+++ b/lessons/git/branches/lesson.md
@@ -0,0 +1,168 @@
+---
+layout: page
+title: 'Using branches in Git'
+visible: true
+tags:
+ - git
+ - intermediate
+---
+
+# Why and how branches are used in Git
+
+ - **Authors**: Luke Johnston
+ - **Research field**: Nutritional and diabetes epidemiology
+ - **Lesson topic**: Git branches
+ - **Lesson content URL**:
+ - **Lesson video stream**:
+
+## Preface: ##
+
+Version control systems like Git help manage changes to files. Sometimes, you'll
+want (or need) to make some 'feature' or 'patches' to a collaborative research
+project. Or maybe you want to make some experimental changes to your code, but
+don't want to touch your main code. This, and more, is where branches come into
+play.
+
+In this code-along we'll go over what branches are, and how and why you would use
+them.
+
+### Pre-requisites:
+
+* Obviously, have [Git installed](https://git-scm.com/book/en/v2/Getting-Started-Installing-Git)
+* Make sure to [configure your git](http://codeasmanuscript.org/lessons/git/cheatsheet/)
+
+
+## What are Git branches
+
+In very simple terms, git branches are individual projects within a git
+repository. Different branches within a repository can have completely different
+files and folders, or it could have everything the same except for some lines of
+code in a file.
+
+Let's use a few real world examples (at least that I've used before, others may
+have used them differently):
+
+- Pretend you submitted a research article to a journal and they want you to
+revise it based on some reviewers comments. There are several ways to deal with
+the comments, so instead of changing your main manuscript, you create a
+`revision` branch in your manuscript git repository. In that branch you make the
+changes to your manuscript in response to the reviewers. Once you are satisfied,
+you merge the branch into the `master` branch and resubmit the article.
+- Imagine you have a dataset that multiple people work off of but that is also
+often updated with more data. You think you found a problem with the dataset,
+but aren't sure. So you create a new branch `fixing` to fix the problems without
+messing with the master dataset. After you confirm the problem is real and that
+you have the solution, you submit a pull request of the `fixing` branch to be
+merged with the `master` branch.
+- What is often the case in software development, a bug or missing feature in
+the software gets identified. Because the software is already in production use
+(fairly stable, other people rely on it, etc), you can't just make changes to
+the main software code. So a `hotfix` or `feature` branch is created to address
+these problems, which will eventually get merged in with the `master` branch for
+the next version of the software. This ensures that other people's code isn't
+broken everytime a bug gets fixed.
+
+There are many uses of branches in Git. The nice (and very powerful) thing about
+Git is the fact that branches are very cheap compared to other version control
+systems. By cheap, I mean they don't take up much disk space, it's
+computationally easy to move between branches, and it's (relatively) easy to
+merge branches together. This is because of how Git represents branches, since
+they are simply *pointers* or an individual commit. *That's it.* Just a
+pointer... Git commit history is a
+[directed acyclic graph](https://en.wikipedia.org/wiki/Directed_acyclic_graph),
+which means that every single commit always has a 'parent' commit (the
+previous commit in the history, or multiple parents when a merge happens), and
+any individual commit can have multiple 'children'. This history can be traced
+back through the 'lineage' or 'ancestry'. The branch just gives a name to each
+'lineage' when a commit has multiple children.
+
+When you merge two branches together, the commit histories get merged together
+as well. Which means that all the changes you made in each branch gets combined
+back into a single lineage, rather than two. This makes it easier to work
+collaboratively on a project, since each individual could work on their own
+branches, without dealing with the messiness that could come from working all on
+one branch.
+
+## Commands used with branches
+
+Branches are best understood visually. So let's first start with using
+[this website](https://onlywei.github.io/explain-git-with-d3/) to see what the
+`branch`, `checkout`, and `merge` commands are doing.
+
+After we've tried that, let's do it locally (on your own computer). Here is a
+sequence of commands to try out:
+
+ cd ~/Desktop
+ mkdir git-branches
+ cd git-branches
+ git init # start a repo
+ git add .
+ git commit -m "First commit" # make the first commit
+ git branch testBranch # create branch
+ git checkout testBranch # move to branch
+ ## can also do git checkout -b testBranch
+ echo "Some text" > file.txt
+ git add file.txt
+ git commit -m "Added a file with text"
+ git checkout master
+ echo "Text in another file" > new-file.txt
+ git add new-file.txt
+ git commit -m "Added another file"
+ git log --graph --oneline --decorate --all
+ # This command is long, so shorten it using aliases
+ git config --global alias.lg 'log --graph --oneline --decorate --all'
+ git merge testBranch
+ git lg
+ git branch -d testBranch # delete the branch
+
+## Using branches for pull requests
+
+I mentioned this already, but branches are best used when doing a
+[pull request](https://help.github.com/articles/using-pull-requests/)
+(unless the pull request is very small or few people work on the repository).
+
+The steps to take would be:
+
+1. Fork a repository on GitHub
+2. Clone it onto your computer
+3. Make a branch and move to it: `git checkout -b fixingBranch`
+4. Make changes to the files
+5. Commit the changes to the history
+6. Push the branch up to your forked version: `git push origin fixingBranch`
+7. On GitHub, submit a Pull Request of your `fixingBranch`
+8. Once the pull request is merged,
+[delete](https://github.com/blog/1377-create-and-delete-branches)
+the `fixingBranch` on your forked repo on GitHub and on your computer
+(`git checkout master && git pull upstream master && git branch -d fixingBranch`)
+
+# Resources: #
+
+If you have any questions, often one of the best places to start is either
+[StackOverflow](https://stackoverflow.com/questions/tagged/git) or Google (which
+more likely links to StackOverflow).
+
+## Glossary: ##
+
+* `cd` - change directory
+* directory - the same thing as a folder
+* `mkdir` - make a directory
+* `echo` - print a message to the screen or to a file if `>` (redirect) is
+present.
+* `git init` - start or initialize a git repository
+* `git add` - put a file into the staging area, so that git starts
+ tracking it
+* `git commit` - send files in the staging/index area into the history
+ (the git repository)
+* `git log --graph --oneline --decorate --all` - view the commit history in the
+git repository and the branches, with each commit as one line.
+* `git branch` - An individual line of commit history that contains files that may
+differ from other branches.
+* `git checkout` - A way to move across the git commits and branches.
+* `git merge` - Combine a branch into the current checked out branch (i.e. the
+branch you are on).
+
+## Links: ##
+
+* [Interactive, visual tutorial on branching](https://pcottle.github.io/learnGitBranching/)
+* [Brief explanation of branching](https://www.atlassian.com/git/tutorials/using-branches/git-branch)
+
diff --git a/lessons/git/ci-github-python/lesson.md b/lessons/git/ci-github-python/lesson.md
new file mode 100644
index 000000000..9195789b3
--- /dev/null
+++ b/lessons/git/ci-github-python/lesson.md
@@ -0,0 +1,16 @@
+---
+layout: page
+title: Continuous integration in Git with examples in Python
+visible: true
+tags:
+ - python
+ - git
+ - intermediate
+---
+
+ - **Authors**: Jesse Knight
+ - **Lesson topic**: Git: continuous integration with worked examples in Python
+ - **Lesson content URL**: https://github.com/jessexknight/mwe-pytest-travis-cov
+
+ See [lesson repo](https://github.com/jessexknight/mwe-pytest-travis-cov) for material.
+
diff --git a/lessons/git/ci-github/lesson.md b/lessons/git/ci-github/lesson.md
new file mode 100644
index 000000000..f274584e8
--- /dev/null
+++ b/lessons/git/ci-github/lesson.md
@@ -0,0 +1,220 @@
+---
+layout: page
+title: Continuous integration on GitHub
+visible: true
+tags:
+ # languages
+ - git
+ # levels
+ - intermediate
+---
+
+ - **Authors**: Luke Johnston ([@lwjohnst86](https://github.com/lwjohnst86))
+ - **Research field**: Diabetes epidemiology
+ - **Lesson topic**: Using continuous integration within GitHub
+ - **Lesson content URL**:
+
+## What is Continuous Integration (CI)?
+
+[CI](https://en.wikipedia.org/wiki/Continuous_integration) historically is a
+system/workflow/practice of merging a codebase that developers work on
+individually into a main stream, usually several times a day. This ensures that
+there are few to no conflicts within the code base. However, CI presently is
+often used in the context of automated builds of a git repository to ensure that
+everything runs/tests/builds as expected in a clean, new environment (aka on a
+server). For this reason, I will only refer to CI in the context of git repos.
+
+Automated CI services are available on GitHub through [Travis CI](https://travis-ci.org/).
+Travis is a service independent (as a company) of GitHub, however they currently
+only work with GitHub. There is the `.org` version of Travis for public GitHub
+repos and a `.com` version for private repos. There are other CI's available on
+GitLab or BitBucket (services similar to GitHub). Through Travis, you can get
+your git repo and associated code/files/documents (really, any thing that is
+command based, including things such as pandoc, rmarkdown, or website build tools)
+to be built, tested, or whatever else you want it to do!
+
+The main use of CI is for automated testing of your code in a separate environment,
+to ensure that any new additions to the code don't cause any breaks or conflicts.
+Other common uses are to build websites that first require code or documents to
+be generated before pushing to the live website.
+
+## Why should you use it?
+
+There are [many reasons](https://about.gitlab.com/2015/02/03/7-reasons-why-you-should-be-using-ci/)
+to use CI, especially if your codebase is large and complex, when multiple people
+work on the code, when it is relied on by others, or if it is for production
+(industry or commercial) purposes. If your code is small or simple or a one-time
+thing, it is often not necessary to use CI. BUT! Using CI will make sure that your
+code is robust and more likely to be accurate and correct... which is especially
+important in most if not all scientific fields.
+
+## Travis and the `.travis.yml` file
+
+As I mentioned, you use Travis for GitHub. In order to use Travis, you need to
+sign up and follow the [getting started](https://docs.travis-ci.com/user/getting-started/)
+steps. Travis has many supported [languages](https://docs.travis-ci.com/),
+including [R](https://docs.travis-ci.com/user/languages/r/) and
+[Python](https://docs.travis-ci.com/user/languages/python/).
+
+The two main things you need for Travis are to include a `.travis.yml` file in
+your GitHub repo and link Travis to it via the [Travis website](https://travis-ci.org/).
+
+### Example using R and `.travis.yml` file
+
+```
+language: r
+cache: packages # to reduce the build time for dependent packages
+r:
+ - release
+ - devel
+script:
+ # If building packages
+ - R CMD build .
+ - R CMD check *.tar.gz
+ # If running from an R or shell file
+ - Rscript test.R
+ # or:
+ - sh ./deploy.sh
+```
+
+Package dependencies are by default searched for in the
+[`DESCRIPTION`](http://r-pkgs.had.co.nz/description.html) file. Otherwise,
+specific packages can be installed by including this in the `.travis.yml` file:
+
+```
+r_packages:
+ - "packagename"
+```
+
+If you are creating packages and want to use Travis to test your packages, use
+the R command `devtools::use_travis()` to get you started.
+
+Building websites via R Markdown is relatively straight forward. You first need
+to create a `deploy.sh` file of some sort (see
+[this file](https://github.com/codeasmanuscript/rworkshops/blob/master/deploy.sh) as
+an example) and include Travis commands to push to a `gh-pages` branch (see
+[this file](https://github.com/codeasmanuscript/rworkshops/blob/master/.travis.yml) as
+an example). For a more detailed example and walkthrough, see
+[this Gist](https://gist.github.com/willprice/e07efd73fb7f13f917ea.html).
+
+Let's work through a (very simple and silly) example. Create three files: `.travis.yml`,
+`function.R`, `test.R`, and `DESCRIPTION` (this file is needed for
+R with travis). (As a side note, as with above, I will not be covering formal
+unit testing in this lesson).
+
+**`.travis.yml`**
+
+```
+language: r
+cache: packages
+# build in two different OS
+r:
+ - release
+os:
+ - linux
+ - osx
+script:
+ - Rscript test.R
+```
+
+**`function.R`**
+
+```r
+add_nums <- function(num1, num2) {
+ num1 + num2
+}
+
+random_half_split <- function(data) {
+ size <- nrow(data) / 2
+ dplyr::sample_n(data, size)
+}
+```
+
+**`test.R`**
+
+```r
+library(testthat)
+source("function.R")
+expect_equal(add_nums(2, 2), 4)
+actual_size <- nrow(random_half_split(iris))
+expect_equal(actual_size, 75)
+```
+
+**`DESCRIPTION`**
+
+```
+Package: testing_ci_r
+Type: Package
+Title: Testing out
+Version: 0.0.0.9000
+Authors@R: person("Luke", "Johnston", email = "lwjohnst@gmail.com",
+ role = c("aut", "cre"))
+Description: Testing around
+LazyData: TRUE
+# packages to install
+Imports:
+ dplyr,
+ testthat
+RoxygenNote: 6.0.1
+```
+
+### Example Python `.travis.yml` file
+
+```
+language: python
+python:
+ - "3.6"
+# install dependencies
+install:
+ - pip install -r requirements.txt # if you put your dependencies in a file
+script: pytest
+```
+
+I am not nearly as familiar with Python, however, the same things that apply to R
+also apply to Python. You (optionally) need to install dependencies and use the `script` option
+to specify what commands or file to run the tests with.
+
+As with R, let's do a simple and silly example. Create the three files: `.travis.yml`,
+`function.py`, and `test_function.py`. (As a side note, as with above, I will not be covering
+formal unit testing in this lesson).
+
+**`.travis.yml`**
+
+```
+language: python
+python:
+ - 3.6
+script: pytest
+```
+
+**`function.py`**
+
+```python
+def add_nums(num1, num2):
+ added = num1 + num2
+ return added
+```
+
+**`test_function.py`**
+
+```python
+import function
+
+def test_add_nums():
+ added = function.add_nums(2, 2)
+ assert added == 4
+```
+
+## Lesson flow and other remarks
+
+In the live version of the lesson, I'll cover simple examples of using Travis
+for R and Python. Since I am more familiar with R, I'll be covering R examples
+in more detail. In general, the lesson will go over setting up Travis, creating
+the `.travis.yml` file, getting Travis to run, and seeing the results for the
+CI build.
+
+There are so many things you can do with Travis (or any CI for that matter)!
+Simple reasons are pretty straight forward, though there is a learning curve.
+More complex uses are, well, more complex to set up. In the end, setting up Travis/CI
+can save you time and reduce your workload as it automates many of the repetitive
+tasks you many do when creating code or code-dependent documents.
diff --git a/lessons/git/collaboration/lesson-AH.md b/lessons/git/collaboration/lesson-AH.md
new file mode 100644
index 000000000..839b8a846
--- /dev/null
+++ b/lessons/git/collaboration/lesson-AH.md
@@ -0,0 +1,229 @@
+---
+layout: page
+title: Collaborating on GitHub
+visible: true
+tags:
+ # languages
+ - git
+ # levels
+ - intermediate
+---
+
+
+
+ - **Authors**: Ahmed Hasan; Frances Wong
+ - **Research field**: Genomics; Physiology
+ - **Lesson topic**: Collaborating on GitHub
+ - **Lesson content URL**:
+ - **Lesson video stream**: n/a
+
+# What are Git and GitHub?
+
+## Git
+
+Git is a version control system that allows users to track changes in files.
+Git is used via the command line on your local computer. Once a given folder
+has been designated as a Git _repository_ (or 'repo' for short), Git will start
+looking for changes in files in that folder. Git is quite flexible: we can pick
+and choose which files we would like to track in a repository.
+
+## GitHub
+
+GitHub is a website that hosts Git repositories. Repositories are quite
+flexible: a Git repo could be any of:
+
+- Fully self contained software
+- Research projects, containing scripts and logs
+- Websites
+- Educational content (e.g. material for one or more workshops)
+- Just a place for you to keep a random collection of scripts!
+
+Although repos can be created on GitHub and maintained there, it is much more
+common for users to also have local copies of their repos as well and sync the
+two as changes happen on either end. GitHub accounts are free to use.
+
+GitHub also comes equipped with several additional features. Each repo has an
+Issues page, for instance, where owners, collaborators, and other users can
+submit feature requests, point out bugs, or simply have discussions pertaining
+to the repo in some form. Moreover, GitHub also allows for _forking_ repos,
+which is when users create a copy of a given repo that's associated with their
+own GitHub accounts. Finally, GitHub features a full Pull Requests tab
+associated with every repo that centralizes any proposed changes to the
+contents of the repo. We will explore both forks and pull requests below;
+these are very important features for collaboration!
+
+
+# Solo GitHub workflow - the minimal case
+
+Many researchers use GitHub repos simply as a place to keep all their scripts.
+New scripts and changes to existing to scripts are both _committed_ to the repo
+(saved changes are referred to as 'commits') and there tends to be a single
+linear commit history.
+
+To accomplish this, it's common to have a local repo that one works on and
+commits changes in, after which those changes are pushed to GitHub using
+command line Git commands.
+
+Let's quickly review a few core commands:
+
+```bash
+# getting started with a repo
+git init # initializing a repo at the command line
+git clone [url] # creating a copy of an existing repo
+
+# linking a repo to GitHub
+git remote # listing any remotes - eg the repo on GitHub
+git remote add origin [url] # add link to repo at specific url
+
+# committing (saving) changes to files
+git add [file] # telling git to track changes in a file
+git commit # saving those changes
+```
+
+# Collaborative work flows
+
+## Branches and pull requests
+
+However, collaborative workflows (and even solo software development) is often
+not done this way. Both make use of what are known as _branches_: a snapshot of
+the repo at a given time that has an independent commit history. Branches can
+be thought of as copies of a repo that can then be worked on without actually
+affecting the 'main' repo itself. This 'main' repo is itself a branch, and one
+that is typically called `master` or `main` by default.
+
+A branch can be created and switched to using `git checkout`:
+
+```bash
+git checkout -b patch-1
+# Switched to new branch 'patch-1'
+```
+
+after which branches can be switched between using `git checkout`:
+
+```bash
+git checkout main # switches back to main branch
+```
+
+Branches can be listed using `git branch`:
+
+```bash
+git branch
+git branch -v # for more details on branches
+```
+
+Why not work in `master`/`main` directly? By working in branches instead, users
+are free to make whatever changes they would like without fear of breaking the
+existing codebase, or causing some kind of similar problem. Instead, once one
+is done making changes in and ideally testing the changes in a given branch, a
+_pull request_ (PR) can be submitted, essentially requesting for the changes in the
+branch to be merged with `master`/`main`.
+
+A pull request functions as a means of merging the new commit history of a
+given branch to the `master`/`main` branch. This is the core concept behind
+collaborating in Git: collaborators working in branches and then submitting
+pull requests to have their changes incorporated into the codebase.
+
+There are two separate workflows by which this is done, each with a specific
+set of circumstances in which they are the appropriate choice: the 'shared
+repository' model as well as the 'fork and pull' model. We will touch on both
+before demonstrating the latter.
+
+## Shared repository
+
+The shared repository model is usually (but not always) put into practice on
+smaller projects with smaller amounts of collaborators. The key requirement for
+a shared repo model is that _all contributors have write access to the repo_,
+which is not always the case (e.g. when contributing to a large open source
+project).
+
+The shared repository model involves working _directly in the main repository_.
+Branches are still used to keep proposed changes separate, and then pull
+requests are submitted once a collaborator wishes for their changes to be
+merged into `master`/`main`. The `master`/`main` branch is still never written
+to directly -- any changes must go through the PR workflow (detailed further below)
+
+We won't be demoing this today, especially since much of this workflow is covered
+in the more extensive fork and pull workflow regardless.
+
+Here's the full workflow, for reference:
+
+1. Collaborator creates a branch on the main repo
+2. Collaborator makes changes in the branch
+3. Collaborator submits a PR, requesting changes from the branch to be merged into `master`/`main`
+4. Repo owner reviews PR and requests further changes if needed.
+5. If further changes are requested, collaborator makes them *in the branch*.
+6. When PR is good to go, owner merges PR into `master`/`main`
+7. The branch is deleted.
+
+This model is good for beginners to Git collaboration, since there is no need
+to sync anything after changes have been merged.
+
+## Fork and pull model
+
+In this model, collaborators _fork_ the repo: creating entirely separate copies of
+the repo altogether. It is common practice to also _clone_ (make a local copy of)
+the fork, especially for one of the two methods of syncing forks we'll learn below.
+
+Upon cloning the repo, the main repository is also added as a _remote_ to the fork.
+This will be used to sync the fork later:
+
+```bash
+git remote add upstream [main repo url]
+```
+
+Within their fork, a collaborator creates a new branch and adds in their proposed changes.
+Once the branch is ready, a pull request is submitted _from the branch of the fork_ to
+`master`/`main` _on the main repo_. This sort of 'cross-repo' pull request is only possible
+between forks, and since anyone can make a fork without necessarily having write access to a repo,
+this is the much more commonly used model of collaboration on GitHub.
+
+Once a PR is submitted, repo owners can use the pull request dialog on GitHub to
+request further changes if needed. If this is the case, the collaborator can continue making
+changes in their branch; GitHub will automatically update the PR with any new changes.
+
+Once the PR is ready, the owner will merge the PR into `master`/`main`. The changes have been
+merged! All that remains is for the collaborator to sync their fork: since the collaborator
+worked on a branch, the fork's `master`/`main` branch has not been updated at all.
+
+Forks can be updated in two different ways - first, on the command line:
+
+```bash
+# run in the repo dir
+git checkout master # or main - this will switch back out of the experimental branch
+git fetch upstream/master # fetches the updated codebase from the main repo
+git merge upstream/master # merges the updates from the main repo
+git push origin master # sends the updates to the *fork*
+```
+
+However, it can also be done via GitHub:
+
+1. Head to your fork of the repo.
+2. Click on 'Pull request' in the bar above the file list.
+3. Set the Base Repository to the fork, and the base to `master`/`main`.
+4. Set the Head Repository to the main repo, and the base to `master`/`main`.
+5. Create the pull request and merge it!
+
+This can be quite confusing at first glance! But it's important to sync the
+fork like so, since it updates it for any further changes if needed. It's good
+practice to do this both after changes are merged and before starting on a
+fresh branch. It is also entirely possible to simply delete and remake the fork
+instead, but that can be tiresome if you find yourself collaborating on the
+same repo for a long period of time.
+
+We'll now be demoing the fork and pull model for the remainder of the lesson!
+
+## Merge conflicts
+
+Merge conflicts can unfortunately arise during this process. A _merge conflict_
+happens `master`/`main` on the main repo is updated *after* being forked, and
+the changes a collaborator submits a PR for conflict with the current state of
+the main repo (e.g. if the same line is modified differently on the main repo
+than on the PR). Git won't know which of the changes to stick with, and will
+ask for the conflict to be manually resolved.
+
+We won't be demoing merge conflicts today given time constraints, but a guide
+on how to resolve them can be found [here][merge-conf]. The best way to avoid
+merge conflicts, however, is to make sure that your fork remains synced!
+
+[merge-conf]: https://docs.github.com/en/github/collaborating-with-issues-and-pull-requests/resolving-a-merge-conflict-on-github
+
diff --git a/lessons/git/collaboration/lesson.md b/lessons/git/collaboration/lesson.md
new file mode 100644
index 000000000..4297db4ae
--- /dev/null
+++ b/lessons/git/collaboration/lesson.md
@@ -0,0 +1,488 @@
+---
+layout: page
+title: Collaborating on GitHub
+visible: true
+tags:
+ # languages
+ - git
+ # levels
+ - beginner
+---
+
+
+
+ - **Authors**: Serena Jeblee; Kathy Chung
+ - **Research field**: Computational Linguistics; Post-Doc in Digital Humanities
+ - **Lesson topic**: Collaborating on GitHub
+ - **Lesson content URL**:
+ - **Lesson video stream**:
+
+## Collaborating with Git
+Kathy Chung, 2017-08-02
+
+#### QUESTIONS TO ASK PARTICIPANTS TO GAUGE KNOWLEDGE LEVEL
+1. How familiar are you with the unix command line? How often do you work with it?
+2. Have you used git before?
+2. On a scale of 1-5 (1=novice/beginner, 5=expert) what kind of git user are you? (how often do you use git in your work? once a week, once a day, once a month)
+3. Have you used GitHub before?
+4. Have you collaborated on a project on GitHub before?
+
+### Git vs GitHub
+#### Git
+- Git is the command line version control system (VCS) software which works on your local computer.
+- Git was created by Linus Torvalds in 2005 for development of the Linux kernel, with other kernel developers contributing to its initial development.
+- You need Git to use GitHub. You can use Git locally without GitHub.
+
+#### GitHub
+- GitHub is an internet hosting service for git repositories. Public repos are free; private repos are paid.
+- As a shared space for repos, it allows you to do collaborative work.
+
+
+### Two Common Collaborative Work Flows
+#### Shared Repository Model
+- For small projects where you are basically in the same physical space (e.g. lab with offices near each other).
+- Be careful! You are cloning the main repository.
+- Everyone has push and pull access to the central repo, so be careful and:
+ - Never commit to the master directly.
+ - Always do your work on a different branch from master.
+
+#### Basic Shared Repository Workflow
+- update your local repo with `git pull origin master`,
+- create a working branch with `git checkout -b MyNewBranch`
+- make your changes on your branch and stage them with `git add`,
+- commit your changes locally with `git commit -m "description of your commit"`, and
+- upload the changes (including your new branch) to GitHub with `git push origin MyNewBranch`
+- Go to the main repo on GitHub where you should now see your new branch
+- click on your branch name
+- click on "Pull Request" button (URC)
+- click on "Send Pull Request"
+
+
+#### Fork and Pull Model
+- This is the model used by U of T Coders on its own website and repos.
+- The "owner"/"Project Leader" of the upstream repo assigns rights to "Collaborators"
+- Collaborators do not have push access to main (upstream) repo
+- Project Lead accepts Pull Requests (PRs) from collaborators, reviews them, then merges them into main repo.
+
+
+#### Fork and Pull Workflow
+- to be demonstrated during lesson
+
+
+### Some Git Terminology/Jargon
+#### Repos and Branches
+
+Term | Description
+----- | ------------
+Origin (repo) | Your remote repo (on Github); it is the "origin" for your local copy. Either it is a repo you created yourself or it is a fork of someone else's GitHub repo.
+Upstream (repo)| The main repo (on GitHub) from which you forked your GiHub repo.
+Local (repo) | The repo on your local computer.
+Master | The main branch (version) of your repo.
+
+
+#### Basic Commands/Actions
+
+Term | Explanation
+---| ---
+Fork | Make a copy of someone else's GitHub repo in your own GitHub account.
+Clone | Make a copy of the your GitHub repo on your local computer. In CLI: 'git clone' copies a remote repo to create a local repo with a remote called `origin` automatically set up.
+Pull | You incorporate changes into your repo.
+Add | Adding snapshots of your changes to the "Staging" area.
+Commit | Takes the files as they are in your staging area and stores a snap shot of your files (changes) permanently in your Git directory.
+Push | You "push" your files (changes) to the remote repo.
+Merge | Incorporate changes into the branch you are on.
+Pull Request | Term used in collaboration. You "issue a pull request" to the owner of the upstream repo asking them to pull your changes into their repo (accept your work).
+
+
+
+### Configuring git global settings on your local computer
+You only have to do this once; global settings apply to all your git repos.
+Note: Any Local settings you initiate within individual git repositories will over ride global settings.
+- username
+- email
+- display colours
+- preferred text editor
+
+
+Command line git syntax is: ```git verb```
+
+>```$ git config --global user.name "Albert Einstein"```
+>```$ git config --global user.email "bertie@worlduniversity.edu"```
+>```$ git config --global color.ui "auto"```
+
+Use your own name and email address instead of Einstein's. This user name and email will be associated with your subsequent Git activity, which means that any changes pushed to a Git host server will include this information.
+
+For this lesson, we will be interacting with GitHub and so the email address used should be the same as the one used when setting up your GitHub account. If you are concerned about privacy, please review GitHub’s instructions for keeping your email address private. If you elect to use a private email address with GitHub, then use that same email address for the ```user.email``` value, e.g. ```username@users.noreply.github.com``` replacing ```username``` with your GitHub one. You can change the email address later on by using the ```git config``` command again.
+
+Set up your favorite text editor (default editor):
+
+>```$ git config --global core.editor "nano -w"```
+>```$ git config --global core.editor "atom --wait"```
+
+See https://swcarpentry.github.io/git-novice/02-setup/ for settings for other text editors
+
+------------------------------------------------------
+## Exercise 1
+### Two Person Collaboration via the CLI - Shared Repo Workflow (without branches)
+This exercise is based on the SWC Git Novice lesson https://swcarpentry.github.io/git-novice/08-collab/
+
+One of you will be the "Owner" and one of you will be the "Collaborator."
+
+#### A. Owner gives collaborator access to their repo.
+1. Go to your GitHub repo
+2. Add a file called "tenlines.txt" and put the text from the etherpad into the file. Commit your changes.
+2. Click on **Settings** tab.
+3. Click **Collaborators**
+4. Enter collaborataors username
+
+#### B. Collaborator clones Owner's Repo
+1. Go to https://github.com/notifications and accept access to Owner's repo.
+2. On the CLI, clone the owner's repo but issuing the commmand:
+```$ git clone URL-of-Origin-Repo Directory-Address-of-Local-Repo```
+
+#### C. Collaborator works on clone of Owner's Repo
+Go to your cloned repo:
+```$ cd ~/.../yourClone```
+
+Open editor and revise working file:
+```atom tenlines.txt```
+
+Commit your changes to your local repo:
+```$ git add tenlines.txt```
+```$ git commit -m "your commit message"```
+
+Push your changes to the Owner's repo on GitHub:
+```$ git push origin master```
+
+#### D. Owner review and accepts changes from Collaborator
+Look at Owner's GitHub repo and see new commit(s) from Collaborator.
+
+Download (pull) Collaborators changes to Owner's local repo:
+```$ git pull origin master```
+
+---------------------------------
+## Exercise 2
+### Dealing with Merge Conflicts
+This section is based on the SWC Git Novice lesson https://swcarpentry.github.io/git-novice/09-conflict/
+
+When two or more people work on the same files, conflicts are bound to occur. Version control will help notify us when there are conflicts. It will be up to the humans to sort out which changes to retain.
+
+The file "tenlines.txt" currently looks like this:
+```$ cat tenlinestxt```
+
+Let's say **Person A** adds a line to the file and review:
+```$ atom tenlines.txt```
+```$ cat tenlines.txt```
+
+and pushes changes to GitHub:
+```$ git add tenlines.txt```
+```$ git commit -m "added a line in local copy and pushed to remote"```
+```$ git push origin master```
+
+Now, **Person B** modifies her local file without first updating it (pulling the repo) from GitHub:
+Add a line to the file and review:
+```$ atom tenlines.txt```
+```$ cat tenlines.txt```
+
+Commit the changes locally:
+```$ git add tenlines.txt```
+```$ git commit -m "added a line in local copy"```
+
+But when we push, Git will not allow this because there were changes to the same line in the two files:
+```$ git push origin master```
+
+To resolve the conflict, you need to **pull** the changes from GitHub, **merge** them into your local copy, and then **push** it back to GitHub
+```$ git pull origin master```
+
+Git tells us there is a conflict and tells you the file it's in.
+Let's look at the file:
+```cat tenlines.txt```
+
+Git has put some new info in our file:
+
+```<<<<<<<<<<<<< HEAD```
+```our text```
+```========```
+```Other persons's text```
+```>>>>>>>>```
+
+You need to open your text editor and make the changes which is the accepted version by you and your collaborator:
+```atom tenfiles.txt```
+
+Then, to finish mergining, you need to **add**, **commit**, and **push** your changes back to GitHub:
+```$ git add tenlines.txt```
+
+You can verify the status of your repo first, then commit and push:
+```$ git status```
+```$ git commit -m "Merged changes from GitHub"```
+```$ git push origin master```
+
+Git keeps track that a conflict has been resolved and what was merged into what so when Person A who made the first changes pulls from GitHub, she doesn't have to fix things and merge again.
+
+Person A pull and sees new version of the file:
+```$ git pull origina master```
+```$ cat tenlines.txt```
+
+---------------------------------
+
+## Exercise 3
+### Solo Practise via the GitHub GUI
+This exercise is based on the 10 mins GitHub "Hello World" tutorial
+https://guides.github.com/activities/hello-world/
+
+#### A. Create a Remote Repo in your GitHub Account
+
+ 1. In URC, click **+**, then select **New repository**
+ 2. Name your repository ```Kathy's Project```.
+ 3. Write a short description.
+ 4. Select **Initialize this repository with a README**.
+
+#### B. Create a Branch
+
+1. Click drop down at top of file list that says **branch: master**.
+2. Type a branch name, `readme-edits`, into the new branch text box.
+3. Select the blue **Create branch** box or hit "Enter" on your keyboard. Notice you are now on the code view of your `readme-edits` branch, which is a copy of `master`.
+
+#### C. Make and commit changes
+You are now on your `readme-edits` branch.
+
+ 1. Select the `README.md` file.
+ 2. Click on the pencil icon (URC) of the file view.
+ 3. Edit the file. Write something about yourself and your project.
+ 4. Write a commit message at bottom of screen.
+ 5. Click the **Commit changes** button.
+
+#### D. Open a Pull Request (PR)
+
+1. Click on the **Pull Request** TAB, which takes you to the PR page
+2. Click on the green **New Pull Request** button.
+3. Select the branch you made, `readme-edits`, to compare with the original, `master`.
+4. Review your work.
+5. Name your pull request and give it a brief description. You can use @mention in your description to ask for feedback by specific persons.
+6. Click on the green **Create Pull Request** button.
+
+#### E. Merge your Pull Request
+You will merge your `readme-edits` branch into your `master` branch.
+
+1. Click on the green **Merge pull request** button.
+2. Click **Confirm merge**.
+3. You can now delete the branch
+
+--------------------------------
+
+## Exercise 4
+### Two Person Practise via GitHub GUI
+This exercise is based on the Mozilla Science WOW lesson on GitHub for Collaborating on Open Projects
+http://mozillascience.github.io/working-open-workshop/github_for_collaboration/
+
+One of you is the Project Lead. The other will be the Contributor.
+
+#### A. Project Lead: Create a Remote Repo in your GitHub Account
+
+ 1. In URC, click **+**, then select **New repository**
+ 2. Name your repository ```Kathy's Project```.
+ 3. Write a short description.
+ 4. Select **Initialize this repository with a README**.\
+ 5. Give your partner the URL to your repo.
+
+#### B. Project Lead: Add a File
+1. Click **New file**
+2. Give the file a name.
+3. Put some content in the file.
+4. Write a commit message at bottom of screen.
+5. Click the **Commit changes** button.
+
+#### C. Project Lead: Make a Label
+1. Click on **Issues** tab.
+2. Click on the **Labels** box.
+3. Add a label called ".............."
+
+#### D. Project Lead: Make an Issue
+1. Click on **New Issue** button.
+2. Give it a title and brief description. You can use @mention in your description to ask for specific feedback.
+3. Give it a label.
+
+#### E. Contributor: Comment on an Issue
+1. Go to the PL's repo.
+2. Click on the **issues** button to see all the issues.
+3. Select the one you wish to respond to.
+4. Make a comment, introduce yourself and volunteer to work on the issue.
+
+#### F. Project Lead: Reply to a comment
+1. From your own repo, select the commented issue.
+2. Write a reply.
+3. Assign the issue to yourself so you can monitor it and answer questions, etc.
+
+#### H. Contributor: Fork and Branch
+1. Go to your own GitHub account.
+2. Find the Lead's repo and fork it.
+3. Create a branch in your forked repo (see previous Solo practise for instructions)
+4. Give the branch a name which indicates the feature or change you're working on.
+
+#### I. Contributor: Do Work and Commit
+1. Make changes in this branch.
+2. When you are done, write a commit message, and click on the **Commit changes** button.
+
+#### J. Contributor: Make a Pull Request to the Upstream Repo
+1. Select **Pull Request** tab.
+2. Click on **New Pull Request**
+3. Make sure you've selected the correct branch where you've made your edits.
+4. Name your pull request and provide a brief description (you might wish to include a reference to the related issue #).
+5. Click on the green **Create Pull Request** button.
+
+#### K. Project Lead: Review the Pull Request
+1. Review changes made by contributor.
+2. You can send comments back and forth to discuss the work. Thank your contributor.
+
+#### L. Project Lead: Merge the changes
+1. Click on the **Merge pull request** button.
+2. Close the issue; additional remarks and thanks.
+
+----------------------------------
+
+## Miscellaneous Tasks
+#### Create a Local Git Repo (via CLI)
+1. Go to the directory which you wish to make into a Git repo: `$ cd ~/GitRepos/MyProject`
+2. Initialize the directory as a Git repo: `git init`.
+3. Confirm that it worked by looking for the hidden `.git` file in your directory: `ls -a`
+
+
+#### Forking Someone Else's Repo (via GitHub website)
+1. Go to someone else's repo and click on the **fork** button on the URC.
+2. Wait while GitHub does its work.
+3. Check that you now have a new repo in your GitHub account.
+
+
+#### Cloning a Repo onto Your Local computer (via CLI)
+```git clone URL-of-Origin-Repo Directory-Address-of-Local-Repo```
+e.g.
+```git clone https://github.com/chungkky/2017-08-02_Collaborating-with-Git.git ~/GitHubRepros_KC/2017-08-02_Collaborating-with-Git```
+
+--------------
+## Userful Resources
+* Git Cheat Sheet (CLI) https://services.github.com/resources/cheatsheets/
+* Visualizing Git Concepts with D3 https://onlywei.github.io/explain-git-with-d3/
+* Collaborative Development Models/Workflows https://help.github.com/articles/about-collaborative-development-models/
+* SWC's Version Control with Git Lesson (CLI) https://swcarpentry.github.io/git-novice/
+* Mozilla Science Working Open Workshop (WOW) lesson GitHub for Collaborating on Open Projects https://mozillascience.github.io/working-open-workshop/github_for_collaboration/
+* The Pro Git Book https://git-scm.com/book/en/v2
+* Atlassian has several good tutorials on Git:
+ * Index of All Tutuorials https://www.atlassian.com/git/tutorials
+ * Getting Started https://www.atlassian.com/git/tutorials/setting-up-a-repository
+ * Collaborating https://www.atlassian.com/git/tutorials/syncing
+ * Git Workflows https://www.atlassian.com/git/tutorials/comparing-workflows
+
+
+---------------
+
+## Collaborating with Git
+**Serena Jeblee, 2017-02-22**
+
+## Overview
+
+- A brief review of basic git usage
+- Some helpful git commands
+- Help! I've made a mistake! (aka how to unstage changes and undo commits)
+- Merge conflicts
+- Branches
+- Forking and Pull Requests
+
+If we have time:
+- Stashing changes
+- Rebasing
+
+## Whirlwind Overview of GitHub
+- What is GitHub?
+- What is version control?
+ - version control helps you collaborate on code especially when your changes might overlap
+ - master repo vs local repos
+ - master - shared version stored on GitHub or a server
+ - local - your local copy that you can play with and make changes to, only seen by you until you push your changes
+- How to contribute code
+~~~
+git clone [repo-url]
+git pull # syncs latest version from the master repo to your local repo
+[edit the code]
+git add [file] # stages code for commit (git remove does not unstage, it stages a deletion, we'll get to unstaging in a bit)
+git commit # create a record of the changes you've made
+git push # sync your local changes to the master repo
+~~~
+- Fork and pull request if you can't push directly
+- Some rules for good commits
+ - commit should represent one change or a small set of related changes (like a bug fix or new feature)
+ - all committed code should be functional and tested
+ - make sure the commit message is descriptive
+
+## Get Started
+- Create helloworld.sh
+~~~
+echo "Fancy code will go here"
+echo "More fancy code"
+~~~
+- Run it and commit it
+
+## Help! I messed up and now nothing works!
+- Add junk code to hello.sh and run it
+- Undo the changes to a file
+~~~
+git checkout -- [file]
+~~~
+- Unstage the changes, but keep them
+~~~
+git reset --soft HEAD
+~~~
+- Undo the changes and go back x commits
+~~~
+git reset --hard HEAD~x
+~~~
+
+## Oops, I didn't mean to commit that
+- Add the junk code back and commit it
+- Undo a local commit
+~~~
+git reset --soft HEAD~1 # keeps changes, but undoes the commit
+~~~
+- Pushed commits - do a revert commit
+~~~
+git revert [commit-hash]
+~~~
+
+## The Dreaded Merge Conflict
+- Clone a new copy of your repo
+- Change a line and commit it
+- Go back to your original repo
+- Change same line to "My version is better!"
+- Commit it
+~~~
+git commit
+git pull
+~~~
+- Resolve the merge conflict, delete >>> <<< lines, add and commit
+
+## Branches
+- Branches allow you to have different commit histories in the same repo
+- Useful for feature work
+- For more info see:
+
+## Forking and Pull Requests
+- Used when you don't have direct push access to a repo
+- Fork: creates your own version of the repo that you can commit to
+- When you're finished committing all of your changes, create a pull request
+- Pull Request: tells the main repo that you have some commits you would like to merge, and allows others to review them first
+
+## Reviewing Code
+- Look for:
+ - errors (typos, potential infinite loops, concurrency issues, etc)
+ - overly complicated code
+ - unclear variable names
+ - missing comments or documentation
+- Provide constructive suggestions for how to fix it
+
+## Updating the Pull Request
+- Try to address all comments, if you're not going to change something, say why not
+- Make a new commit and push it to the branch your pull request is on
+
+## Merging the Pull Request
+- Requires push access to the repo
+- If there are conflicts, you'll have to check out the pull request and resolve them, otherwise you can merge online
+- For more info on how to merge a pull request, see
diff --git a/lessons/git/intro/2024_Git_Reproducibility.ipynb b/lessons/git/intro/2024_Git_Reproducibility.ipynb
new file mode 100644
index 000000000..b08f8f099
--- /dev/null
+++ b/lessons/git/intro/2024_Git_Reproducibility.ipynb
@@ -0,0 +1,895 @@
+{
+ "cells": [
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "# Reproducibility, the BASH console and GIT\n",
+ "\n",
+ "---\n",
+ "\n",
+ "## Reproducibility: What is it, What does it mean, Why it's important\n",
+ "\n",
+ "The concept of reproducibility is just that \\- **is your work reproducible**? Reproduction of methods, analyses and results is important not only in scientific research but also in day\\-to\\-day activities. It is a major factor that determines if **research results are consistent and valid** If your work is reproducible, then **valid experiments and results build authentic discoveries that are more reliable** in your field and help develop robust literature for future research studies. While reproducibility ensures that your work is accurate and reliable, it can also **encourage community involvement and participation**. _**Remember, if your foundation is shaky then so is all the work built upon it**_\n",
+ "\n",
+ "
\n",
+ " \n",
+ "
\n",
+ "\n",
+ "There are different fields of reproducibility :\n",
+ "\n",
+ "1. **Scientific** Reproducibility \\- **Can your results be reproduced from your methods?**\n",
+ "2. **Computational** Reproducibility \\- **Can your results be reproduced from your code?**\n",
+ "3. **Statistical** Reproducibility \\- **Are your methods robust enough to reproduce your results?**\n",
+ "\n",
+ "While talk of reproducibility is all good and dandy, it may not be available to everyone. There are significant barriers to reproducibility including:\n",
+ "\n",
+ "- **Costs**\n",
+ "- The structure of dissemination does not currently fully support reproducibility\n",
+ "- **Lack of training and incentives**\n",
+ "- **Takes time, held to a higher standard**\n",
+ "- Privacy and security\n",
+ "- Differences between fields\n",
+ "\n",
+ "Your job as a scientist and a researcher is to try your best to ensure that your work is reproducible. **If the ability is beyond your means, do not hesitate to say so.** Science is about being open and transparent\n",
+ "\n",
+ "There are many tools and conventions to help with your reproducibility journey. These include having a proper workflow and file organization system, as well as GIT for version control\n",
+ "\n"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "## Workflows\n",
+ "\n",
+ "One way to ensure reproducibility is to have a well\\-organized project workflow and management. A common way to organize your files is by **project i.e. a project\\-oriented workflow**. Here, each project that you are working on is **self\\-contained in its own folder**, with its **different data types in different folders**. I.e. your raw data should be in a different folder than your processed data, documents and files should be in another folder etc. \n",
+ "\n",
+ "
\n",
+ " \n",
+ " \n",
+ " Note the differences between the first pane and the other two. The first pane, different file types are in the same folder which makes it difficult to find and filter through projects. In the second pane, all the projects are sorted into their own respective folders and with their own subdirectories based on their analysis or function. \n",
+ "
\n",
+ "\n"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "## File Paths\n",
+ "\n",
+ "Having a default file structure can also help with your own mental organization of your file paths. There are two types of file paths: **absolute and relative**. \n",
+ "\n",
+ "### Absolute File Paths\n",
+ "\n",
+ "Absolute file paths **start at your root file and mention every directory before arriving at your file**. For example, if I wanted to get the absolute file path of the CSV in the above figure, it would look something like this: `/Users/yeshoda/Desktop/Projects/Salt Tolerance/Chlamy sample - Sheet1.csv`, Where `Chlamy sample - Sheet1.csv` is the name of my file, which is located in the `Salt Tolerance/` folder. This folder is in the `Projects/` folder which is on my `Desktop/` \\(also a folder\\), within my user folder \\(`yeshoda/`\\), within the`Users/` folder in the **root** \\(`/`\\). The / **denotes a directory \\(also known as a folder\\)**. Absolute file paths are useful when trying to find files you're looking for, however, **they are sensitive to breaking**. For example, if I moved `Projects/` to `Documents/` rather than `Desktop/` my path will **no longer work and will cause an error**. \n",
+ "\n",
+ "### Relative File Paths\n",
+ "\n",
+ "Relative file paths are **relative to the current directory that you are working in**. Your current directory will be noted with a ./ and the parent directory will be denoted with ../ For example if I am in the `Figures/` directory and wish to go to the `References/` directory I can type: `cd ../References/.` Here I'm using the `cd` command which stands for **change directory**, and then specify I want to move into my parent folder Salt Tolerance \\(`../`\\) and then into `References/.` The benefit of using absolute paths is that now if I moved `Projects/` to `Documents/` rather than `Desktop/` **my path still works**. \n",
+ "\n",
+ "**There is no right or wrong file path format**! **Choose the one that works for you and for the type of project that you have.** If you know the hierarchy of your folders, relative paths might serve better. However, if you do not know the hierarchy but know where your file is in general then an absolute path might serve better. \n",
+ "\n",
+ "
\n",
+ " \n",
+ " \n",
+ " devopsschool \n",
+ "
\n",
+ "\n",
+ "Just like variable names, **it helps to name your folders something meaningful.** Folders called `1/` and `2/` do not do much to help you when you need to find your files.\n",
+ "\n"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "## BASH - Quick Recap\n",
+ "\n",
+ "Before we dive into GIT, let's refresh ourselves with some commonly used BASH commands. BASH is the typical Unix shell and command language for your computers. You can use BASH on your terminals. For your note\\-keeping, we can use BASH within a Python notebook! We just need to tell Python, hey! this cell is just going to run BASH \\- don't run me with Python! **We can do this by using a magic command denoted with** **`%%`**`. By running %%bash`, we're telling Python to run this entire cell in BASH. **It must be the first line in the cell or it will not work**. Let's try it out:\n"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 1,
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stderr",
+ "output_type": "stream",
+ "text": [
+ "UsageError: %%bash is a cell magic, but the cell body is empty.\n"
+ ]
+ }
+ ],
+ "source": [
+ "%%bash # denotes the start of a magic cell"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "Amazing! Now let's go ahead and play with some commonly used commands:\n",
+ "\n"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 2,
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "/Users/princess/Downloads/10_reproducibility\n",
+ "BINF5503_Week10_Class\n",
+ "Figures\n",
+ "Master_week10_module5_Reproducibility.html.html\n",
+ "Master_week10_module5_Reproducibility.html.ipynb\n",
+ "Master_week10_module5_Reproducibility.html.pdf\n",
+ "STUDENT_week10_module5_Reproducibility.html.ipynb\n",
+ "STUDENT_week10_module5_Reproducibility.html_Master.ipynb\n",
+ "UofTCoders_git_lesson_old\n",
+ "UofT_Coders_Master_Reproducibility.ipynb\n",
+ "week10_git_lesson\n",
+ "total 3208\n",
+ "drwxr-xr-x@ 14 princess staff 448 14 Nov 16:01 BINF5503_Week10_Class\n",
+ "drwxr-xr-x@ 15 princess staff 480 14 Nov 16:42 Figures\n",
+ "-rw-rw-r--@ 1 princess staff 83583 13 Mar 2024 Master_week10_module5_Reproducibility.html.html\n",
+ "-rw-rw-r--@ 1 princess staff 35238 2 Apr 2024 Master_week10_module5_Reproducibility.html.ipynb\n",
+ "-rw-rw-r--@ 1 princess staff 1397902 13 Mar 2024 Master_week10_module5_Reproducibility.html.pdf\n",
+ "-rw-rw-r--@ 1 princess staff 29500 2 Apr 2024 STUDENT_week10_module5_Reproducibility.html.ipynb\n",
+ "-rw-rw-r--@ 1 princess staff 24648 20 Mar 2024 STUDENT_week10_module5_Reproducibility.html_Master.ipynb\n",
+ "drwxr-xr-x 7 princess staff 224 14 Nov 16:58 UofTCoders_git_lesson_old\n",
+ "-rw-r--r-- 1 princess staff 54711 14 Nov 16:59 UofT_Coders_Master_Reproducibility.ipynb\n",
+ "drwxr-xr-x@ 6 princess staff 192 14 Nov 16:01 week10_git_lesson\n"
+ ]
+ },
+ {
+ "name": "stderr",
+ "output_type": "stream",
+ "text": [
+ "hello.txt: No such file or directory\n",
+ "cat: hello.txt: No such file or directory\n",
+ "mv: rename hello.txt to ../hello.txt: No such file or directory\n",
+ "mv: rename ../hello.txt to ./hello_there.txt: No such file or directory\n",
+ "cp: hello_there.txt: No such file or directory\n",
+ "rm: hello_there.txt: No such file or directory\n"
+ ]
+ }
+ ],
+ "source": [
+ "%%bash\n",
+ "pwd # path to working directory. Gives you the absolute file path of where you are\n",
+ "ls # list. Will list all of the files in your directory\n",
+ "ls -l # long list. Gives the long list of all the files in the directory\n",
+ "mkdir temp/ # make directory. This makes a new folder\n",
+ "cd temp/ # change directory. Will move \"you\" into the folder/directory you specify\n",
+ "# vim hello.txt # open the vim text editor and make a note\n",
+ "# hit i to go into insert mode, and start typing. Once done, hit esc, :wq to save and quit\n",
+ "less hello.txt # view the file contents\n",
+ "cat hello.txt # prints the contents of the file to standard out\n",
+ "mv hello.txt ../ # move hello.txt into the parent directory\n",
+ "mv ../hello.txt ./hello_there.txt # move hello.txt back to the current directory and rename it to hello_there.txt\n",
+ "cp hello_there.txt hello_there_copy.txt # copy. Make a copy of the file\n",
+ "rm hello_there.txt # remove. Delete the file\n",
+ "\n",
+ "cd ../ # go to parent directory\n",
+ "rm -r temp/ #delete the temp folder and all it's contents"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "## Git\n",
+ "\n",
+ "Now for the program of the hour! Git is a version control system that can be used to track file changes. While most commonly thought to be used for coding files only, **it can also be used for any file** including documents, figures, presentations etc. It's a great way to edit your files but also be able to **revert to a previous version if the need arises**. Used in tandem with **GitHub**, it can be a great way **to easily collaborate on projects with others**. It is important to note that you can use Git without having a GitHub account, however you cannot use GitHub without Git. \n",
+ "\n",
+ "
\n",
+ " \n",
+ "
\n",
+ "\n",
+ "### Configure git global settings on your local computer\n",
+ "\n",
+ "Before we start we need to tell git who we are so that we know who is making the files. We can do this using the `git config` commands\n",
+ "\n"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 3,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "%%bash\n",
+ "\n",
+ "# first tell git your email. Use the email you have when you set up your github account\n",
+ "git config --global user.email \"y.harrypaul@yahoo.com\"\n",
+ "\n",
+ "# Next your name\n",
+ "git config --global user.name \"Yeshoda Harry-Paul\"\n",
+ "\n",
+ "# Change the name of the branch from master to main\n",
+ "git config --global init.defaultBranch main"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "### Local git repo\n",
+ "\n",
+ "Let's make a local git repository. A repository **\\(or repo for short\\)** is a storage area for a project containing all the files for the project and the history of the changes made to it. **This repo will be on your local computer.** \n"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 4,
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "/Users/princess/Downloads/10_reproducibility/UofTCoders_git_lesson\n"
+ ]
+ }
+ ],
+ "source": [
+ "%%bash \n",
+ "# Make a new folder that we want to use:\n",
+ "mkdir UofTCoders_git_lesson\n",
+ "cd UofTCoders_git_lesson\n",
+ "pwd\n",
+ "ls"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 5,
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "Initialized empty Git repository in /Users/princess/Downloads/10_reproducibility/UofTCoders_git_lesson/.git/\n",
+ "total 0\n",
+ "drwxr-xr-x 3 princess staff 96 14 Nov 17:00 .\n",
+ "drwxr-xr-x@ 23 princess staff 736 14 Nov 17:00 ..\n",
+ "drwxr-xr-x 9 princess staff 288 14 Nov 17:00 .git\n",
+ "total 24\n",
+ "drwxr-xr-x 9 princess staff 288 14 Nov 17:00 .\n",
+ "drwxr-xr-x 3 princess staff 96 14 Nov 17:00 ..\n",
+ "-rw-r--r-- 1 princess staff 23 14 Nov 17:00 HEAD\n",
+ "-rw-r--r-- 1 princess staff 137 14 Nov 17:00 config\n",
+ "-rw-r--r-- 1 princess staff 73 14 Nov 17:00 description\n",
+ "drwxr-xr-x 14 princess staff 448 14 Nov 17:00 hooks\n",
+ "drwxr-xr-x 3 princess staff 96 14 Nov 17:00 info\n",
+ "drwxr-xr-x 4 princess staff 128 14 Nov 17:00 objects\n",
+ "drwxr-xr-x 4 princess staff 128 14 Nov 17:00 refs\n"
+ ]
+ }
+ ],
+ "source": [
+ "%%bash \n",
+ "# Initialize the git repository\n",
+ "cd UofTCoders_git_lesson\n",
+ "git init\n",
+ "ls -la # we see the new hidden .git folder\n",
+ "ls -la .git"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 6,
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "first_file.txt\n",
+ "On branch master\n",
+ "\n",
+ "No commits yet\n",
+ "\n",
+ "Untracked files:\n",
+ " (use \"git add ...\" to include in what will be committed)\n",
+ "\tfirst_file.txt\n",
+ "\n",
+ "nothing added to commit but untracked files present (use \"git add\" to track)\n"
+ ]
+ }
+ ],
+ "source": [
+ "%%bash\n",
+ "cd UofTCoders_git_lesson\n",
+ "# Now that we have our git repo, lets add a file to it\n",
+ "touch first_file.txt\n",
+ "ls\n",
+ "\n",
+ "# Let's see how git is doing by checking it's status\n",
+ "git status\n",
+ "\n",
+ "# git has noticed some untracked changes"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "### Hold your horses! The staging environment, the commit and you\n",
+ "\n",
+ "Before we get going on our git train, it's important to differentiate between your working directory, the staging environment and a commit. Commits are r**ecords of the changes you've last made since a commit**. These are what allow you to jump between the different stages of your project. However, git does not commit on its own, **you need to tell git what you want to commit**. To do this we first need to **add the file to the staging area** via the command `git add`. Once you've made a nice package of files in the staging area, you can then **commit your changes to your repo** in the `.git` repository. Let's see what this looks like\n",
+ "\n",
+ "
\n",
+ " \n",
+ "
\n",
+ "\n"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 7,
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "On branch master\n",
+ "\n",
+ "No commits yet\n",
+ "\n",
+ "Changes to be committed:\n",
+ " (use \"git rm --cached ...\" to unstage)\n",
+ "\tnew file: first_file.txt\n",
+ "\n"
+ ]
+ }
+ ],
+ "source": [
+ "%%bash\n",
+ "cd UofTCoders_git_lesson\n",
+ "\n",
+ "# Now let's add our file to the staging environment\n",
+ "git add first_file.txt\n",
+ "git status # We see now that our file isn't committed but it is about to be"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 8,
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "[master (root-commit) 5061b3f] Created empty file first_file.txt\n",
+ " 1 file changed, 0 insertions(+), 0 deletions(-)\n",
+ " create mode 100644 first_file.txt\n",
+ "On branch master\n",
+ "nothing to commit, working tree clean\n"
+ ]
+ }
+ ],
+ "source": [
+ "%%bash\n",
+ "cd UofTCoders_git_lesson\n",
+ "\n",
+ "# Now let's commit our file. We have the option to also add a message using the -m flag. It is always beneficial to write something useful so that when you are looking back between your versions it is easy to find what you're looking for \n",
+ "git commit -m \"Created empty file first_file.txt\" first_file.txt\n",
+ "git status # We see now that our file isn't committed but it is about to be"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 9,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "%%bash\n",
+ "cd UofTCoders_git_lesson\n",
+ "\n",
+ "# Great! You just created your first commit! Let's see what happens when we edit our file to add some information to it!\n",
+ "\n",
+ "#edit file in vim\n",
+ "\n",
+ "# git status #see that the file has been modified\n",
+ "\n",
+ "# git diff first_file.txt # what was different from the last commit?\n",
+ "\n",
+ "# git add first_file.txt #stage our changes\n",
+ "# git status \n",
+ "\n",
+ "# git commit -m \"Added some filler text to file\" \n",
+ "# git status"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 10,
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "commit 5061b3f9de53b181a14f495c6f7ee45c07e2d763\n",
+ "Author: Yeshoda Harry-Paul \n",
+ "Date: Thu Nov 14 17:01:02 2024 -0500\n",
+ "\n",
+ " Created empty file first_file.txt\n"
+ ]
+ }
+ ],
+ "source": [
+ "%%bash\n",
+ "cd UofTCoders_git_lesson\n",
+ "\n",
+ "#let's see what we've done so far\n",
+ "git log"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "### Branching in Git\n",
+ "\n",
+ "Branching is a great way to work on a new idea, bug fixes or developing features **without affecting your** **`main`** **branch**. They are designed to be **temporary** and to facilitate edits and trials without breaking your original codebase. They allow you to keep your original `main` branch as is. For example, say I had a website and I wanted to make a new webpage. I can branch off of my main branch, create my webpage and then merge once it is completed. This way my website still stays functional as I work on my new webpage. \n",
+ "\n",
+ "
\n",
+ " \n",
+ "
\n",
+ "\n",
+ "There are two phases of branch creation: 1**\\) Making a branch and 2\\) Moving to that branch**. Both of these steps can be combined into one but let us take it one at a time. First, let's make a new branch called new\\_files. Just like commits and variable names, it helps to have meaningful branch names so that you know what that branch is meant to be working on \n"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 11,
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "commit 5061b3f9de53b181a14f495c6f7ee45c07e2d763\n",
+ "Author: Yeshoda Harry-Paul \n",
+ "Date: Thu Nov 14 17:01:02 2024 -0500\n",
+ "\n",
+ " Created empty file first_file.txt\n",
+ "On branch master\n",
+ "nothing to commit, working tree clean\n",
+ "* master\n",
+ " new_branch\n",
+ " master\n",
+ "* new_branch\n",
+ "commit 5061b3f9de53b181a14f495c6f7ee45c07e2d763\n",
+ "Author: Yeshoda Harry-Paul \n",
+ "Date: Thu Nov 14 17:01:02 2024 -0500\n",
+ "\n",
+ " Created empty file first_file.txt\n",
+ "On branch new_branch\n",
+ "nothing to commit, working tree clean\n"
+ ]
+ },
+ {
+ "name": "stderr",
+ "output_type": "stream",
+ "text": [
+ "Switched to branch 'new_branch'\n"
+ ]
+ }
+ ],
+ "source": [
+ "%%bash\n",
+ "cd UofTCoders_git_lesson\n",
+ "\n",
+ "git branch new_branch\n",
+ "git log\n",
+ "git status # notice that while we made a branch our status has not changed\n",
+ "git branch --list\n",
+ "\n",
+ "# move to that branch\n",
+ "git checkout new_branch\n",
+ "git branch --list\n",
+ "\n",
+ "git log\n",
+ "git status # now our branch has changed"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 12,
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "On branch new_branch\n",
+ "Untracked files:\n",
+ " (use \"git add ...\" to include in what will be committed)\n",
+ "\tsecond_file.txt\n",
+ "\n",
+ "nothing added to commit but untracked files present (use \"git add\" to track)\n",
+ "On branch new_branch\n",
+ "Untracked files:\n",
+ "\tsecond_file.txt\n",
+ "\n",
+ "nothing added to commit but untracked files present\n",
+ "[new_branch 9a7d541] adding second file\n",
+ " 1 file changed, 0 insertions(+), 0 deletions(-)\n",
+ " create mode 100644 second_file.txt\n",
+ "first_file.txt\n",
+ "* master\n",
+ " new_branch\n",
+ "Updating 5061b3f..9a7d541\n",
+ "Fast-forward\n",
+ " second_file.txt | 0\n",
+ " 1 file changed, 0 insertions(+), 0 deletions(-)\n",
+ " create mode 100644 second_file.txt\n",
+ "Deleted branch new_branch (was 9a7d541).\n",
+ "On branch master\n",
+ "nothing to commit, working tree clean\n"
+ ]
+ },
+ {
+ "name": "stderr",
+ "output_type": "stream",
+ "text": [
+ "Switched to branch 'master'\n"
+ ]
+ }
+ ],
+ "source": [
+ "%%bash\n",
+ "cd UofTCoders_git_lesson\n",
+ "\n",
+ "# Let's make some changes to our files\n",
+ "\n",
+ "# edit first_file.txt\n",
+ "\n",
+ "cp first_file.txt second_file.txt # make a copy called second_file.txt\n",
+ "git status\n",
+ "\n",
+ "# edit the second_file.txt\n",
+ "\n",
+ "git commit -a -m \"Added another line of text about the weather to file\" #Notice how it only added changes and committed for the first_file.txt as git was watching it\n",
+ "\n",
+ "# Let's add and commit the other files\n",
+ "git add * # the * will add all the files in the current folder at once, rather than having to type them all individually\n",
+ "git commit -m \"adding second file\"\n",
+ "\n",
+ "# now let's merge our branch back to the main one\n",
+ "# First head back to the main branch\n",
+ "git checkout master\n",
+ "ls\n",
+ "\n",
+ "git branch --list\n",
+ "\n",
+ "# Merge your branch\n",
+ "git merge new_branch\n",
+ "\n",
+ "# Delete the old branch since there's no use for it anymore \n",
+ "git branch -d new_branch\n",
+ "\n",
+ "git status"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "### Going back to a previous commit\n",
+ "\n",
+ "Sometimes we had versions of our code that worked better or documents that were worded more eloquently, but we no longer have them as we've modified the same file. With Git, **as long as the file was committed** we can revert to that version. Let's play around with it:\n"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 13,
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "[master 3168bd8] adding temporary file to delete\n",
+ " 1 file changed, 0 insertions(+), 0 deletions(-)\n",
+ " create mode 100644 temp.txt\n",
+ "first_file.txt\n",
+ "second_file.txt\n",
+ "On branch master\n",
+ "Changes not staged for commit:\n",
+ " (use \"git add/rm ...\" to update what will be committed)\n",
+ " (use \"git restore ...\" to discard changes in working directory)\n",
+ "\tdeleted: temp.txt\n",
+ "\n",
+ "no changes added to commit (use \"git add\" and/or \"git commit -a\")\n",
+ "On branch master\n",
+ "nothing to commit, working tree clean\n",
+ "[master b3f5db5] added temp2.txt\n",
+ " 1 file changed, 0 insertions(+), 0 deletions(-)\n",
+ " create mode 100644 temp2.txt\n"
+ ]
+ }
+ ],
+ "source": [
+ "%%bash\n",
+ "cd UofTCoders_git_lesson\n",
+ "\n",
+ "# Make a temporary file and commit it\n",
+ "touch temp.txt\n",
+ "git add temp.txt\n",
+ "git commit -m \"adding temporary file to delete\"\n",
+ "\n",
+ "# Remove the file and update git\n",
+ "rm temp.txt\n",
+ "ls # Check that our file is deleted\n",
+ "git status # while we deleted the file locally, it is still in our repo\n",
+ "# git rm temp.txt # delete from git repo\n",
+ "# git restore --staged temp.txt # can pull our file back if didn't commit\n",
+ "git restore temp.txt\n",
+ "git commit -m \"deleted temporary file\"\n",
+ "\n",
+ "# Make some minor changes\n",
+ "touch temp2.txt\n",
+ "git add temp2.txt \n",
+ "git commit -m \"added temp2.txt\"\n",
+ "\n",
+ "## Revert back to the previous commit\n",
+ "# Get the commit ID\n",
+ "# git log --oneline\n",
+ "# git revert --no-commit 79c4a61..HEAD #use the --no-commit flag to avoid an automatic commit \n",
+ "# ls\n",
+ "# git commit -m \"reverting back to other commit with temp.txt\"\n",
+ "\n",
+ "## Revert but keep changes, can also do with the one above ^ however this one will delete the commits following the one you want to go to\n",
+ "# git reset --soft 8e4a7e0\n",
+ "# git restore --staged \n",
+ "# git restore \n",
+ "# git commit -m \"message\"\n",
+ "# git log"
+ ]
+ },
+ {
+ "attachments": {},
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "## Integrating GitHub\n",
+ "\n",
+ "Now that we have some of the basics under our belt let's push something to GitHub. First we need to create an access token to be able to push our work to a repository on GitHub. \n",
+ "\n",
+ "Click on your profile picture on Github and Navigate to `Settings`. Once there scroll all the way down to `Developer settings`. Next navigate to `Personal Access Tokens` > `Tokens Classic` > `Generate New Token`. Select all the permissions you would like this key to be able to access. Once you generate your key **KEEP IT SOMEWHERE SAFE**. You will not be able to view it again. \n",
+ "\n",
+ "
\n",
+ " \n",
+ "
\n",
+ "\n",
+ "\n",
+ "Now that we have our key we can create a new repo on GitHub. We can do this by logging in, pressing the plus button (create new) and selecting \"New Repository\"\n",
+ "\n",
+ "
\n",
+ " \n",
+ "
\n",
+ "\n",
+ "Next we can go ahead and name our repository and add a brief description. Once that is done go ahead and press \"Create repository\". \n",
+ "\n",
+ "
\n",
+ " \n",
+ "
\n",
+ "\n",
+ "GitHub gives us the option of pushing an existing repo from the commandline. Let's go ahead and push our week10_git_lesson folder to our GitHub:"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "%%bash\n",
+ "cd UofTCoders_git_lesson\n",
+ "\n",
+ "git remote add origin https://github.com/YeshodaHP/UofTCoders_Git_Lesson_2024.git\n",
+ "git branch -M main\n",
+ "git push -u origin main\n",
+ "\n",
+ "#This will prompt you to input your username and password (Now using token)\n",
+ "# To generate a token go to settings > developer settings > Personal access tokens > Generate new token"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "Great! Now we can see our files and commits on our GitHub! Note that now when we want to place our files onto GitHub (the remote directory), we now have to `push` it there. Let's try creating a file and pushing it to our GitHub\n",
+ "\n",
+ "
\n",
+ " \n",
+ "
"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "You should now be able to see your new file in your repo!"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "%%bash\n",
+ "cd week10_git_lesson\n",
+ "\n",
+ "#Make a new file, add and commit\n",
+ "vim github.txt\n",
+ "git add github.txt \n",
+ "git commit -m \"Adding new github.txt file\"\n",
+ "\n",
+ "# now push it to GitHub\n",
+ "git push "
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "## Collaborative Repos\n",
+ "Great! Now that we've pushed files to GitHub let's try to use it in a collaborative way. There are two common collaborative workflows:\n",
+ "1. The Shared Repository Workflow\n",
+ "\t- Everyone works on their own branch and then merges to the main\n",
+ "2. The Fork and Pull Workflow\n",
+ "\t- The project owner can assign rights to \"collaborators\" which do not have push access to the main branch. The project lead will accept pull requests (PRs), review and accept changes made\n",
+ " \n",
+ "Let's see how the shared repo workflow looks!\n",
+ "\n",
+ "### Shared Repo\n",
+ "Let's try creating a file with your name as the file name, containing something fun about you. Let's push it to Yeshoda's GitHub. First we will need to clone her repo located at: https://github.com/YeshodaHP/UofTCoders_Git_Lesson_2024.git. Next create a branch with your name, create your file, commit and push!\n",
+ "\n",
+ "Remember to always pull before you start to do your work so that you're on the most recent branch!"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "%%bash\n",
+ "git clone https://github.com/YeshodaHP/UofTCoders_Git_Lesson_2024.git #clone the repo\n",
+ "\n",
+ "git fetch #fetch new work done by others - it does not merge with your branch\n",
+ "\n",
+ "git merge #merge the work you've done with others\n",
+ "\n",
+ "git pull # will pull all the online work and merge it with your local work. Make sure you commit your own work before pulling \n",
+ "\n",
+ "#Create a branch with your name as the branch and add a new file with your name and something fun about you!\n",
+ "git branch Yeshoda_HP\n",
+ "git checkout Yeshoda_HP\n",
+ "#vim Yeshoda_HP.txt\n",
+ "git add Yeshoda_HP.txt\n",
+ "git commit -m \"Yeshoda is adding her file\"\n",
+ "git push --set-upstream origin Yeshoda\n",
+ "\n",
+ "#go back to the main branch and delete your branch\n",
+ "git checkout main\n",
+ "git branch -d Yeshoda"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "# Recap\n",
+ "Amazing Job! So far today we learned about :\n",
+ "- Reproducibility and why it is important\n",
+ "- File hierarchies\n",
+ "- The BASH console and some common commands\n",
+ "- An intro to Git\n",
+ "\t- Where we learned to make a local repository \n",
+ " - How to commit changes\n",
+ " - Create branches \n",
+ " - How to revert to previous commits\n",
+ " - GitHub:\n",
+ " \t- How to connect and clone\n",
+ " - How to collaborate with other users. \n",
+ " \n",
+ "We did a lot of Git today, and we know there is a lot of jargon surrounding git so here is a breif recap:\n",
+ "\n",
+ "| Term | Description |\n",
+ "| ----------- | ----------- |\n",
+ "| Add | Adding your changes to the “Staging” area|\n",
+ "| Branch | A parallel version of a repository where changes can be made that do not affect the main repository. New branches are often used to test changes or new ideas, which can later be merged with the base branch|\n",
+ "| Checkout | Moving from one branch to another|\n",
+ "| Clone | Make a copy of the your GitHub repo on your local computer|\n",
+ "| Commit | Takes the files in your staging area and store their changes permanently in your Git directory|\n",
+ "| Head | Head is a reference or pointer of the latest commit on your branch, there can only be one head at a time. You can move the head to a different commit by using checkout - this is known as a detatched head |\n",
+ "| Merge | Incorporate changes into the branch you are on|\n",
+ "| Pull | A combination of fetch and merge. This fetches the files from the remote repo and merges them with your local files|\n",
+ "| Pull Request | Term used in collaboration. You “issue a pull request” to the owner of the upstream repo asking them to pull your changes into their repo (accept your work)|\n",
+ "| Push | Sync your file changes to the remote repo on GitHub|\n",
+ "\n",
+ "As always if you have any questions feel free to email both Yeshoda and Vicki! Happy coding, see you next week!\n"
+ ]
+ }
+ ],
+ "metadata": {
+ "kernelspec": {
+ "display_name": "Python 3 (ipykernel)",
+ "language": "python",
+ "name": "python3"
+ },
+ "language_info": {
+ "codemirror_mode": {
+ "name": "ipython",
+ "version": 3
+ },
+ "file_extension": ".py",
+ "mimetype": "text/x-python",
+ "name": "python",
+ "nbconvert_exporter": "python",
+ "pygments_lexer": "ipython3",
+ "version": "3.10.0"
+ },
+ "toc": {
+ "base_numbering": 1,
+ "nav_menu": {},
+ "number_sections": true,
+ "sideBar": true,
+ "skip_h1_title": false,
+ "title_cell": "Table of Contents",
+ "title_sidebar": "Contents",
+ "toc_cell": false,
+ "toc_position": {},
+ "toc_section_display": true,
+ "toc_window_display": false
+ },
+ "varInspector": {
+ "cols": {
+ "lenName": 16,
+ "lenType": 16,
+ "lenVar": 40
+ },
+ "kernels_config": {
+ "python": {
+ "delete_cmd_postfix": "",
+ "delete_cmd_prefix": "del ",
+ "library": "var_list.py",
+ "varRefreshCmd": "print(var_dic_list())"
+ },
+ "r": {
+ "delete_cmd_postfix": ") ",
+ "delete_cmd_prefix": "rm(",
+ "library": "var_list.r",
+ "varRefreshCmd": "cat(var_dic_list()) "
+ }
+ },
+ "types_to_exclude": [
+ "module",
+ "function",
+ "builtin_function_or_method",
+ "instance",
+ "_Feature"
+ ],
+ "window_display": false
+ }
+ },
+ "nbformat": 4,
+ "nbformat_minor": 4
+}
diff --git a/lessons/git/intro/Figures/File Organization.png b/lessons/git/intro/Figures/File Organization.png
new file mode 100644
index 000000000..b8fe045fe
Binary files /dev/null and b/lessons/git/intro/Figures/File Organization.png differ
diff --git a/lessons/git/intro/Figures/File_Paths.jpeg b/lessons/git/intro/Figures/File_Paths.jpeg
new file mode 100644
index 000000000..745e97f31
Binary files /dev/null and b/lessons/git/intro/Figures/File_Paths.jpeg differ
diff --git a/lessons/git/intro/Figures/GitHub Repo.png b/lessons/git/intro/Figures/GitHub Repo.png
new file mode 100644
index 000000000..d5fffbfc7
Binary files /dev/null and b/lessons/git/intro/Figures/GitHub Repo.png differ
diff --git a/lessons/git/intro/Figures/Naming_repo.png b/lessons/git/intro/Figures/Naming_repo.png
new file mode 100644
index 000000000..a88c7320f
Binary files /dev/null and b/lessons/git/intro/Figures/Naming_repo.png differ
diff --git a/lessons/git/intro/Figures/Personal Access Tokens.png b/lessons/git/intro/Figures/Personal Access Tokens.png
new file mode 100644
index 000000000..4078e18f8
Binary files /dev/null and b/lessons/git/intro/Figures/Personal Access Tokens.png differ
diff --git a/lessons/git/intro/Figures/Reproducibility.jpeg b/lessons/git/intro/Figures/Reproducibility.jpeg
new file mode 100644
index 000000000..2a506893c
Binary files /dev/null and b/lessons/git/intro/Figures/Reproducibility.jpeg differ
diff --git a/lessons/git/intro/Figures/Version_control.jpeg b/lessons/git/intro/Figures/Version_control.jpeg
new file mode 100644
index 000000000..a8943991e
Binary files /dev/null and b/lessons/git/intro/Figures/Version_control.jpeg differ
diff --git a/lessons/git/intro/Figures/branches.png b/lessons/git/intro/Figures/branches.png
new file mode 100644
index 000000000..5e5da71d5
Binary files /dev/null and b/lessons/git/intro/Figures/branches.png differ
diff --git a/lessons/git/intro/Figures/git_staging_area.png b/lessons/git/intro/Figures/git_staging_area.png
new file mode 100644
index 000000000..065595a21
Binary files /dev/null and b/lessons/git/intro/Figures/git_staging_area.png differ
diff --git a/lessons/git/intro/Figures/git_workflow.png b/lessons/git/intro/Figures/git_workflow.png
new file mode 100644
index 000000000..90fd79030
Binary files /dev/null and b/lessons/git/intro/Figures/git_workflow.png differ
diff --git a/lessons/git/intro/lesson.md b/lessons/git/intro/lesson.md
new file mode 100644
index 000000000..002064561
--- /dev/null
+++ b/lessons/git/intro/lesson.md
@@ -0,0 +1,163 @@
+---
+layout: page
+title: '(Brief) Introduction to Git + GitHub'
+visible: true
+tags:
+ - git
+ - beginner
+---
+
+ - **Authors**: Luke Johnston
+ - **Research field**: Nutritional and diabetes epidemiology
+ - **Lesson topic**: Version control (Git)
+ - **Lesson content URL**:
+ - **Intro to Git slides (2015)**:
+ - **Philosophy of Git slides (2016)**:
+ - **Lesson video stream (2016)**:
+ - **Intro to Git slides (2017)**:
+
+## Preface: ##
+
+Version control is a system that manages changes to a file or files.
+These changes are kept as logs in a history, with detailed information
+on what file(s) was changed, what was changed within the file, who
+changed it, and a message on why the change was made. This is
+extremely useful, especially when working in teams or for yourself 6
+months in the future (because you *will* forget things)!
+
+To understand how incredibly powerful version control is, think about
+these questions: How many files of different versions of a manuscript
+or thesis do you have laying around after getting feedback from your
+supervisor or co-authors? Have you ever wanted to experiment with your
+code or your manuscript and need to make a new file so that the
+original is not touched? Have you ever deleted something and wish you
+hadn't? Have you ever forgotten what you were doing on a project? All
+these problems are fixed by using version control (git)!
+
+We are going to go over a typical workflow. This could be either a
+solo workflow or a collaborative workflow.
+
+## Checklist: ##
+
+* Configure your git
+* Create a folder and create a git repository (`git init`; the saved
+ history of the folder and files) in that folder
+* Create a file and track it with git (`git add`), saving it to the
+ history (`git commit`)
+* Write a short bio in the file
+* Check what's going on in the folder (`git status`)
+* Compare the file with the one in the history (`git diff`)
+* Add the tracked file to the 'staging' area (`git add`; this is an
+ area *before* going into the history)
+* Save the file in the history (`git commit`)
+* Look into your history (`git log`)
+
+(If we have time):
+
+* Create a GitHub account and create a repository
+* Set the URL of the new GitHub repository to your repository on your
+ computer (`git remote`; the command is usually provided from GitHub)
+* Upload your repository on your computer (called local repository)
+ up to your GitHub repository (called the remote repository; use `git
+ push`)
+* Download from the remote to the local repository (`git pull`)
+
+**Tips**:
+
+* Make use of TAB-completion in the terminal!
+* Up arrow on the terminal goes to the previous command you entered.
+
+## Lesson topics and commands ##
+
+For configuring your git, follow the "Initial setup" I've put
+together:
+
+* http://codeasmanuscript.org/lessons/git/cheatsheet/
+
+Create a folder and create a git repository (which is the stored
+history) in that folder. (Note: `##` is a comment, not a command).
+
+ cd ~/Desktop ## Move to your desktop
+ mkdir playing ## Create a folder (aka directory)
+ cd playing
+ git init ## Create the repository (init = initialize)
+
+Now, create a file, get git to track it, and save it to the history.
+
+ touch bio.txt ## Command to create a file called bio.txt
+ ls ## Check that you created the file, ls = list files
+ git add bio.txt ## Track the file
+ ## Save the file to the history with a message (-m)
+ git commit -m "Initial commit"
+
+Now, open the `bio.txt` file and add:
+
+* Your name
+* Your program and year
+* Your progamming language/statistical language of choice
+
+Then:
+
+ git status ## Check the activity
+ git diff bio.txt ## Compare to the one in the history
+ git add bio.txt ## This sends it to the staging area
+ git commit -m "Added my bio" ## This sends it to the history
+
+For a description on what the different stages are (working directory,
+staging area, and committed history) see the below links:
+
+* Description: https://git-scm.com/book/en/v2/Getting-Started-Git-Basics
+* Image: https://git-scm.com/book/en/v2/book/01-introduction/images/areas.png
+
+Then, to see what has happened in your history:
+
+ git log ## View the log of your history
+
+*If we have time*, we'll create a GitHub account, create a GitHub
+repository (a remote repository), and upload the repository on your
+computer (called the local repository) onto the remote repository
+(GitHub):
+
+ git remote add origin https://github.com/yourusername/playing.git
+ git push origin master
+ git pull
+
+Now you know about a typical workflow! There are **lots** of commands
+and options in git, you really can do almost anything. *However*,
+these are the basic tools that are used most frequently. If you have
+any questions, please check out
+[StackOverflow](https://stackoverflow.com/questions/tagged/git) for
+*literally* any question on or about Git!! Or just google it! Google
+usually shows answers from StackOverflow.
+
+# Resources: #
+
+## Glossary: ##
+
+* `cd` - change directory
+* directory - the same thing as a folder
+* `ls` - list the files and folders in a folder
+* `touch` - create an empty file
+* repository - the saved history of a folder and files, used by git.
+* `init` - start or initialize a git repository
+* `add` - put a file into the staging area, so that git starts
+ tracking it
+* staging/index area - where files are stored before going into the
+ history
+* `commit` - send files in the staging/index area into the history
+ (the git repository)
+* `status` - check the status of the folder and the git repository
+* `diff` - compare a file to the a file in the history
+* `log` - view the commit history in the git repository
+
+## Links: ##
+
+Here are a few great resources (excluding StackOverflow) to use if you
+ever need help:
+
+* [Hands-on tutorial, with web-based terminal](https://try.github.io/levels/1/challenges/1)
+* [Official git documentation](https://git-scm.com/doc)
+* [Simpler first-steps guide](https://rogerdudler.github.io/git-guide/)
+* [Reference pages for all git commands](http://gitref.org/)
+* [Interactive, visual tutorial on branching](https://pcottle.github.io/learnGitBranching/)
+
diff --git a/lessons/git/intro/philosophy_of_git.pdf b/lessons/git/intro/philosophy_of_git.pdf
new file mode 100644
index 000000000..a762d7d16
Binary files /dev/null and b/lessons/git/intro/philosophy_of_git.pdf differ
diff --git a/lessons/git/intro/practice-code-2015-06-18.sh b/lessons/git/intro/practice-code-2015-06-18.sh
new file mode 100644
index 000000000..e25f4ac0b
--- /dev/null
+++ b/lessons/git/intro/practice-code-2015-06-18.sh
@@ -0,0 +1,112 @@
+## <- this is a comment
+
+## Configure your local git setup. This only needs to be done once.
+git config --global user.name "Your Name"
+git config --global user.email "you@some.domain"
+git config --global color.ui "auto"
+git config --global core.editor "your_editor"
+git config --global push.default current
+
+## List all the configurations completed
+git config --list
+
+## cd = change directory (move to another folder)
+cd ~/Desktop
+
+## mkdir = make directory (create a folder)
+mkdir practice2/
+
+## First, fork the 'sandbox' repo from the UofTCoders group. Forking
+## just means copy over into your own account.
+
+## clone = copy the repo from GitHub to your computer
+git clone https://github.com/your-account-name/sandbox
+cd sandbox
+
+## Those with internet problems can do this: create a folder called
+## sandbox, move into that folder, and create an empty git repo (init)
+## init = initialize a git repo (start an empty git repo in that folder)
+mkdir sandbox && cd sandbox && git init
+
+## ls = list files and folders in the current location
+ls
+
+## pwd = print working directory (see what your current location is)
+pwd
+
+## touch = create a new text file
+touch your-name-bios.txt
+
+## Edit the file and add stuff to it
+
+## See the content of the file
+cat your-name-bios.txt
+
+## add = track and put the file into the git staging area (staging
+## just means ready to be saved into the history, but not actually
+## saved)
+git add your-name-bios.txt
+
+## commit = save everything in the staging area into the history (the
+## git repo). -m = the commit message to be included in the history.
+## Try to be descriptive with this message.
+git commit -m "Added my bio"
+
+## log = check the saved history
+git log
+
+## Make some edits to the bio file
+
+## status = check what is happening in non-saved files. This shows
+## things that have been modified or are untracked.
+git status
+
+## diff = compare the contents of the current file with the
+## (essentially) previous commit.
+git diff your-name-bios.txt
+
+## When you add a filename to the commit command, git will save that
+## file directly into the history. This bypasses the staging area.
+git commit your-name-bios.txt -m "Added a line to my bio"
+
+## push = upload your git repo to GitHub, basically syncing it.
+git push
+
+## remote add = set another GitHub to download from. This remote is
+## called 'upstream'. Having this remote allows you to keep
+## up-to-date with the original repo.
+git remote add upstream https://github.com/UofTCoders/sandbox
+
+## -v = verbose (show a detailed description of your remote
+## -locations/urls)
+git remote -v
+
+## pull = download. This syncs your local repo with the original
+## repo.
+git pull upstream master
+
+## Sync your local repo with your own forked repo on your GitHub
+## account (not the original).
+git push
+
+## Make edits and commit to the history.
+git commit your-name-bios.txt -m "Added line on type of analysis"
+
+## Upload and sync with your forked repo.
+git push
+
+## Check your history of the saved commits.
+git log
+
+## checkout = go back, forward, or around to different commits (or
+## branches) in your commit history. c1361 is the (completely!!)
+## unique commit hashtag (you can see the hash when you do git log; no
+## one will have the same hash!). -- = anything after this is a file.
+## So basically, this command will take the file from c1361 and bring
+## it into your current location... basically reviving a file from the
+## dead!
+git checkout c1361 -- your-name-bios.txt
+
+## You can confirm that the file is different from before!
+cat your-name-bios.txt
+
diff --git a/lessons/git/intro/practice-code-2016-05-19.sh b/lessons/git/intro/practice-code-2016-05-19.sh
new file mode 100644
index 000000000..fae39b9dd
--- /dev/null
+++ b/lessons/git/intro/practice-code-2016-05-19.sh
@@ -0,0 +1,148 @@
+## <- this is a comment
+
+## general command line tips
+## use tab completion: when you start typing something, hitting 'tab' will finish it for you.
+## use the 'up' arrow to cycle through past commands (to avoid re-typing)
+## for Git commands, typing git --help will show a help page
+
+## Configure your local git setup. This only needs to be done once. Only the first two are essential.
+git config --global user.name "Your Name"
+git config --global user.email "you@some.domain"
+git config --global color.ui "auto"
+git config --global core.editor "your_editor"
+
+## List all the configurations completed
+git config --list
+
+## cd = change directory (move to another folder)
+## note: "cd .." moves you back one folder
+cd ~/Documents
+
+## mkdir = make directory (create a folder)
+mkdir GitHub
+
+## move to the GitHub folder
+cd GitHub
+
+## First, fork the 'studyGroup' repo from the UofTCoders group. Forking
+## just means copy over into your own account. Click "fork" in the top right corner.
+## url: https://github.com/UofTCoders/studyGroup
+
+## clone = copy the repo from GitHub to your computer
+## In the terminal (still in the GitHub folder), type:
+git clone https://github.com/your-account-name/studyGroup
+cd studyGroup
+
+## Those with internet problems can do this: create a folder called
+## sandbox, move into that folder, and create an empty git repo (init)
+## git init = initialize a git repo (start an empty git repo in that folder)
+mkdir sandbox && cd sandbox && git init
+
+## ls = list files and folders in the current location
+ls
+
+## pwd = print working directory (see what your current location is)
+pwd
+
+## git status = check the status of your folder - see if there are any changes.
+git status
+
+## move into the _data folder, see what's there
+cd _data
+ls
+
+## cat = prints to the screen the contents of a file (also used to join files together)
+cat members.yml
+
+## Add yourself to the members list!
+## typing "nano filename" opens the file in the editor nano.
+## you can use any editor you like, such as atom, notepad, vim, etc.
+nano members.yml
+
+## git status = check the status of your repository
+## you'll see a changed file
+git status
+
+## add = track and put the file into the git staging area (staging
+## just means ready to be saved into the history, but not actually
+## saved)
+git add members.yml
+git status ## just to see what happened
+
+## commit = save everything in the staging area into the history (the
+## git repo). -m = the commit message to be included in the history.
+## Try to be descriptive with this message.
+git commit -m "Added myself to the members list"
+
+## log = check the saved history
+git log
+git status ## should be all clean again
+
+## Make some more edits to the members file
+nano members.yml
+git status
+
+## diff = compare the contents of the current file with the
+## (essentially) previous commit.
+git diff members.yml
+
+## When you add a filename to the commit command, git will save that
+## file directly into the history. This bypasses the staging area.
+git commit members.yml -m "Added a line to my bio"
+
+## Check your history of the saved commits.
+git log
+
+## Viewing history: git checkout
+
+## checkout = go back, forward, or around to different commits (or
+## branches) in your commit history. c1361 is the (completely!!)
+## unique commit hashtag (you can see the hash when you do git log; no
+## one will have the same hash!).
+
+## open a file browser and look at the _members.yml file.
+## run the command below (with the right commit id) and then look at the file again.
+git checkout c1361 ## this takes you back in time to the state at this commit id.
+
+## you are now in the legendary DETACHED HEAD state.
+## If you make any changes and commit them here, you'll need to
+## create a branch so that you can find them back later.
+## Otherwise they'll eventually disappear forever.
+## git checkout --help has details about this.
+
+## -- = anything after this is a file.
+## So basically, this command will take the file from c1361 and bring
+## it into your current location... reviving a file from the
+## dead! This takes ONLY the file members.yml, and no other changes.
+git checkout c1361 -- members.yml
+
+git status ## will show the members.yml file as modified,
+## since now you have a different version than the last commit.
+
+## If you want to go back to the state after the latest commit:
+git checkout -- members.yml
+## since we didn't specify a commit, this assumes the latest commit, and give you that version
+
+## If you like the old version better:
+git commit -m "I'm keeping the old version"
+
+## push = upload your git repo to GitHub, basically syncing it.
+git push
+
+## remote add = set another GitHub to download from. This remote is
+## called 'upstream'. Having this remote allows you to keep
+## up-to-date with the original repo.
+git remote add upstream https://github.com/UofTCoders/studyGroup
+
+## -v = verbose (show a detailed description of your remote
+## -locations/urls)
+git remote -v
+
+## pull = download. This syncs your local repo with the original
+## repo.
+git pull upstream master
+
+## Sync your local repo with your own forked repo on your GitHub
+## account (not the original).
+git push
+
diff --git a/lessons/git/intro/practice-code-2017-10-05.sh b/lessons/git/intro/practice-code-2017-10-05.sh
new file mode 100644
index 000000000..51965ea40
--- /dev/null
+++ b/lessons/git/intro/practice-code-2017-10-05.sh
@@ -0,0 +1,103 @@
+## <- this is a comment
+
+## general command line tips
+## use tab completion: when you start typing something, hitting 'tab' will finish it for you.
+## use the 'up' arrow to cycle through past commands (to avoid re-typing)
+## for Git commands, typing git --help will show a help page
+
+## Configure your local git setup. This only needs to be done once. Only the first two are essential.
+git config --global user.name "Your Name"
+git config --global user.email "you@some.domain"
+
+## other optional configurations
+git config --global color.ui "auto"
+
+## setup an editor for text files (if you need one)
+## you can use any editor you like, such as atom, notepad, vim, etc.
+## more help on setting up editors
+## https://help.github.com/articles/associating-text-editors-with-git/
+git config --global core.editor "your_editor"
+
+## List all the configurations completed
+git config --list
+
+## cd = change directory (move to another folder)
+## note: "cd .." moves you back one folder
+cd ~/Documents
+## for windows users with full path
+cd C:/Users/user_name/Documents
+
+## mkdir = make directory (create a folder)
+mkdir git-training
+
+## move to the new folder
+cd git-training
+
+## convert folder to git repo
+git init
+
+## check remote configuration of new git repo
+git remote -v
+
+## setup new remote for empty remote
+git remote add origin https://github.com/UofTCoders/git-training.git
+
+## check remote configuration again
+git remote -v
+
+## once the text file is created and saved as my_cred.txt in new repo
+## check file status
+git status
+
+## let us add this new file to the git index
+git add my_cred.txt
+
+## check changed file status again
+git status
+
+## commit new file to be tracked by git
+git commit -m "initial commit with my info"
+
+## if remote is set and you have an internet connection
+## push changes to remote repo
+git push -u origin master
+
+## create another repo on github to test cloning/copying function of git
+## let us call this repo sandbox-2017
+cd ~/Documents
+
+## clone using
+git clone https://github.com/UofTCoders/sandbox-2017.git
+cd sandbox-2017
+
+## see all files in directory
+ls
+
+## open file example_file.md in notepad or any other text editor of your choice
+## you can do so from the command line using
+notepad example_file.md
+
+## after saving and closing file add file to git index and commit
+git add example_file.md
+git commit -m "add one new line to file"
+
+## using diff to visualize differences between commits
+git diff example_file.md
+
+## check all the commits made to this repo
+git log
+
+## get ore info a cleaner format
+git log --online
+
+## chaneck remote version
+git remote -v
+
+## push changes to remote repo
+git push origin
+
+
+
+
+
+
diff --git a/lessons/git/intro/slides-2017.Rmd b/lessons/git/intro/slides-2017.Rmd
new file mode 100644
index 000000000..094bcb2f5
--- /dev/null
+++ b/lessons/git/intro/slides-2017.Rmd
@@ -0,0 +1,307 @@
+---
+title: "Intro to Git"
+author: "Shyam Srinivasan"
+date: "October 5, 2017"
+output: beamer_presentation
+---
+
+```{r setup, include=FALSE}
+knitr::opts_chunk$set(echo = FALSE)
+```
+
+# Learning expectations
+
+This won't even touch the surface of git... But! Hopefully, you:
+
+- Recognize the power of using version control
+- Know the basic tools to get started using git
+- Where to go for help
+
+But! No expectation to actually start using it :)
+
+# What is Git?
+
+
+# Getting started with Git and GitHub
+
+Create an account on GitHub
+
+* You set your username, email and password here
+
+## Windows/MacOS
+https://desktop.github.com/
+
+* Make sure you install posh-git along with GitHub
+
+## Linux
+
+* Download and install Git for Ubuntu/Debian/Mint Linux
+`sudo apt-get install git`
+
+* Download and install Git for Fedora Linux
+`sudo dnf install git`
+
+# Configuring your setup:
+
+```bash
+git config --global user.name "Your Name"
+git config --global user.email "you@some.domain"
+```
+
+Optional Configurations
+```bash
+git config --global color.ui "auto"
+```
+
+Setup Editor for Text Files
+
+```bash
+git config --global core.editor "your_editor"
+git config --list # To confirm
+```
+
+# Creating a Repo on Github
+The cloud (GitHub) serves as an online repo where files are accessible 24x7
+
+* Go to [GitHub](https://github.com/)
+
+* Create a new repo by pressing the `New Repository` button
+
+* Let us keep the name short and self explanatory and call it 'git-training'
+
+* We will call this the `remote` repo from here on
+
+# Creating a Git Repo
+* change directory (move to another folder) using
+```bash
+cd
+```
+* to move back one folder use
+```bash
+cd ..
+```
+* to make a new directory
+```bash
+mkdir
+```
+
+# Let us create a `local` Repo
+```bash
+cd ~/Documents
+# for windows users with full path
+cd C:/Users/user_name/Documents
+# create a new folder
+# use the same name as your remote repo on GitHub
+mkdir git-training
+# move to the new folder
+cd git-training
+```
+## Convert folder to **git** repo
+```bash
+git init
+```
+## check your folder to find git configuration files/folders
+This folder is now a git repo (short for repository)
+
+# Using GitHub with Git
+If you have GitHub (on Windows/MacOS), you can add the repository you cloned/created to it and visualize the changes
+
+Remember, you installed this earlier?
+
+# Configuring your repo for use with GitHub on the cloud
+In order to use this local repo with the one you created earlier we need to set the remote configuration
+```bash
+git remote -v
+```
+will tell you what is the remote corresponding to your local repo
+
+If it is empty, you can setup a remote using
+```bash
+git remote add remote_name remote_url
+```
+
+Before you do this, you need to have an account on GitHub and a repo on it
+
+# Configuring your repo for use with GitHub on the cloud
+* Copy the repo url from the repo creation page and use it in
+```bash
+git remote add origin
+https://github.com/UofTCoders/git-training.git
+```
+
+* Check your remote configuration again
+```bash
+git remote -v
+```
+
+# Adding new files to a repo
+* create a text file with
+ + your name
+ + program
+ + research area
+* save the file as `my_cred` in the git repo you just created
+
+# Visualize changes to files
+You can see the changes you made to this file in GitHub
+\begin{block}
+{New files} on GitHub can be seen with a \textcolor{green}{green '+'} to their right
+\end{block}
+
+This indicates the file is new and is `untracked` by git
+
+\begin{block}
+{Old modified files} can be seen with a \textcolor{gray}{gray circle} to their right
+\end{block}
+
+This indicates the file is already `tracked` and there are `uncommitted` changes
+```bash
+git status
+```
+can give information on `tracked`, `untracked` and `indexed` files
+
+# Adding Files to git index
+* add the file to the git index
+```bash
+git add my_cred.txt
+```
+* check file status again
+```bash
+git status
+```
+Notice the file has changed from \textcolor{red}{red} to \textcolor{green}{green}
+
+* let us `commit` this change to repo history
+```bash
+git commit -m "initial commit with my info"
+```
+* Now your file is `tracked` by git
+
+# `push` to your new repo on GitHub
+You can move all your **committed** changes to the remote repo
+```bash
+git push origin
+```
+Since this is the first time we are doing this, we need to
+establish a link between your local repo and remote repo.
+
+you can do this using
+```bash
+git push -u origin master
+```
+Make sure your `remote` is set before you do this
+
+# Cloning an Existing `git` repo
+We can copy or clone existing repositories from GitHub using
+```bash
+git clone remote_repo_url
+```
+Let us do this for the [sandbox repo](https://github.com/UofTCoders/sandbox-2017.git) I have created
+
+Select the green `Clone or Download` button and select ` copy to clipboard`
+
+In your shell/bash move to a directory of your choice and clone the repo
+```bash
+cd ~/Documents
+# if you are using git posh (in powershell)
+# use the right click to paste the copied url
+git clone
+https://github.com/UofTCoders/sandbox-2017.git
+```
+
+# Modify a existing file and commit changes
+Go to the directory containing the example file
+```bash
+cd sandbox-2017
+# see all files in the directory
+ls
+```
+Open file `example_file.md` in any text editor
+
+To open files in bash/shell
+```bash
+editor_name file_name
+notepad example_file.md
+```
+add a new line to this file starting with an asterisk(*)
+
+save file and close
+
+# Add changes to index and commit changes to repo
+We will use the previously used commands to `add` and `commit` files
+```bash
+git add example_file.md
+git commit -m "add one new line to file"
+```
+
+# Visualize changes to file
+You can use
+```bash
+git diff example_file.md
+```
+in the command line
+
+Note the file has to be `tracked` and
+the changes have to be `committed` to use `git diff`
+
+You can also visualize all commits to the repo using
+```bash
+git log
+```
+
+commit information can be obtained in a cleaner format using
+```bash
+git log --online
+```
+
+# `push` commits to the remote repo
+Let us first check the `remote` configuration
+```bash
+git remote -v
+```
+Notice that the remote is already set
+
+```bash
+git push origin
+```
+will push your `local` changes to the `remote` repo
+
+# Discarding changes in your repo
+Discard \textcolor{red}{unstaged} \textcolor{gray}{Tracked} files using
+```bash
+git checkout .
+```
+Discard \textcolor{red}{unstaged} unTracked files using
+```bash
+git clean -f
+```
+Use this command with caution:
+
+Discard \textcolor{green}{staged} and \textcolor{red}{unstaged} Tracked changes using
+```bash
+git reset --hard
+```
+
+# Summary of Commands covered today
+```bash
+git init
+git clone
+git config
+git remote
+git status
+git diff
+git add
+git commit
+git push
+git pull
+git checkout
+git clean
+```
+
+
+
+
+
+
+
+
+
diff --git a/lessons/git/intro/slides-2017.pdf b/lessons/git/intro/slides-2017.pdf
new file mode 100644
index 000000000..bf5fd32cd
Binary files /dev/null and b/lessons/git/intro/slides-2017.pdf differ
diff --git a/lessons/git/intro/slides.Rmd b/lessons/git/intro/slides.Rmd
new file mode 100644
index 000000000..0749aa6b7
--- /dev/null
+++ b/lessons/git/intro/slides.Rmd
@@ -0,0 +1,46 @@
+---
+title: "Let's git started :)"
+author: "Luke Johnston"
+date: "`r format(Sys.Date(), '%B %d, %Y')`"
+output: slidy_presentation
+---
+
+## Learning expectations
+
+This won't even touch the surface of git... But! Hopefully, you:
+
+- Recognize the power of using version control
+- Know the basic tools to get started using git
+- Where to go for help
+
+But! No expectation to actually start using it :)
+
+## Configuring your setup:
+
+```bash
+git config --global user.name "Your Name"
+git config --global user.email "you@some.domain"
+git config --global color.ui "auto"
+git config --global core.editor "your_editor"
+git config --list # To confirm
+```
+
+## 4 main concepts (and ~7 commands)
+
+- **Start repository**: `git init`, `git clone` (GitHub)
+- **Check activity**: `git status`, `git log`, `git diff`
+- **Save to history**: `git add`, `git commit`
+- **Move through the history**: `git checkout`, `git branch` (may be covered)
+
+## Different areas in Git
+
+
+
+## 4 areas to remember
+
+Using `git status` shows much of this information already.
+
+- Untracked files: Use `git add`
+- Tracked but modified: Use `git add` or `git commit filename`
+- Staged but not committed: Use `git commit`
+- Committed (in the repository): Use `git checkout` to access
diff --git a/lessons/git/intro/slides.html b/lessons/git/intro/slides.html
new file mode 100644
index 000000000..810f0084e
--- /dev/null
+++ b/lessons/git/intro/slides.html
@@ -0,0 +1,116 @@
+
+
+
+
+
+
+
+
+
+ Let’s git started :)
+
+
+
+
+
+
+
+
Let’s git started :)
+
+Luke Johnston
+
+
January 17, 2018
+
+
+
Learning expectations
+
This won’t even touch the surface of git… But! Hopefully, you:
diff --git a/lessons/install-git-python-r.md b/lessons/install-git-python-r.md
new file mode 100644
index 000000000..575687992
--- /dev/null
+++ b/lessons/install-git-python-r.md
@@ -0,0 +1,114 @@
+# Installing Git
+
+Installation instructions for Git can be found on the
+[Git download site](http://git-scm.com/book/en/Getting-Started-Installing-Git)
+- On Windows: Download the `.exe` file from this
+ [Github link](http://msysgit.github.io) and run it.
+- On Mac: To use the graphical Git installer, download from this
+ [SourceForge link](http://sourceforge.net/projects/git-osx-installer/)
+- On Linux: Use your respective package manager (for example, if you
+ use Ubuntu or Debian, run this code: `sudo apt-get install git`)
+
+
+# Installing Python
+
+Python can be managed through the Anaconda platform, which is [available for
+Linux, macOS and Windows](https://www.anaconda.com/distribution/#download-section).
+The Python3 installer is a suitable download choice for most people.
+
+## Using Python
+
+1. When the Anaconda installation has finished, Python is accessible by running
+ `python` in a terminal (on Windows, use the `Anaconda Prompt`).
+2. Anaconda also includes graphical interfaces for interacting with Python,
+ which can be invoked by running `spyder` or `jupyter-lab` from the command
+ line.
+3. To get an introduction on how to use Python, please read the tutorial over
+ at [Software
+ Carpentry](https://swcarpentry.github.io/python-novice-inflammation/).
+
+### Installing packages
+
+After Anaconda has been installed on your system, you can use the command line
+`conda` package manager or the GUI-driven `anaconda-navigator` to install
+Python packages. For comprehensive instructions on both of these, refer to the
+[official
+documentation](https://docs.continuum.io/anaconda/#navigator-or-conda). Brief
+step-by-step instructions to get up and running with `conda` follow.
+
+1. To install a new Python package from the Anaconda repositories, simply run
+ `conda install ` in a terminal. You can also use the `pip`
+ package manager, but it will be easier to keep track of packages by sticking
+ to one installation method.
+2. Some packages are not available in the default Anaconda repositories. User
+ contributed packaged are available in Anaconda "channels", use `anaconda
+ search -t conda `, to find a channel with the desired package.
+ To install this package, use `conda install -c `. The [conda forge channel](https://conda-forge.github.io/) channel
+ has many of the packages not in the default repositories.
+
+## Trying Python without installing
+
+There are a few online services that provide solutions to run Python and Jupyter
+Notebooks without installing anything. These often come with some limitations
+but is a simple way to just try things out:
+
+- https://notebooks.ai/ Optional to create account (but necessary for saving
+ progress). Most up to date version of some commonly used packages at the
+ time of testing.
+- https://codeocean.com/ Account required. Sign up with institutional email
+ for extra storage and run time. Flexible but requires slight setup of
+ specifying which packages to install.
+- https://colab.research.google.com/notebooks/welcome.ipynb Account required.
+ Google branded design.
+- https://jupyter.org/try No account required. Not possible to save progress.
+ The Notebook runs fine in the classic Jupyter version, but when run from
+ JupyterLab our experience is that it outputs lots of font-related warnings
+ when plotting (non-critical, but annoying).
+
+# Installing R
+
+## Official way
+
+If you are only or mainly using R, this method is the official and most common
+way of installing R:
+
+1. Download R from the [Comprehensive R Archive Network
+ (CRAN)](https://cran.r-project.org/), which is the official source for R and
+ R packages. From this page you can find R for Windows, Mac, and Linux.
+ Follow the instructions and get R installed on your computer.
+2. Download and install
+ [RStudio](https://www.rstudio.com/products/rstudio/download/#download),
+ which is the most commonly used and most powerful interface for using R.
+ Since R, like most other programming languages, is just a way of
+ communicating with the computer, RStudio is a way for humans to communicate
+ to R. RStudio is the recommended program for using R and all our R tutorials
+ use RStudio.
+3. Installing R packages is done within RStudio, or through the R console via
+ the `install.packages` command.
+
+To get an introduction on how to use R, please read the tutorial over at
+[Software Carpentry](https://swcarpentry.github.io/r-novice-inflammation/).
+
+## Anaconda way
+
+It is also possible to [install R via
+Anaconda](https://docs.anaconda.com/anaconda/user-guide/tasks/use-r-language),
+just as with Python. This is convenient if you already have Anaconda installed
+or want an easy way to manage multiple R environments on the same machine.
+
+1. R can be installed via `conda install -c r r-essentials r-base`, which
+ bundles R with some of its most frequently used libraries. `-c r` specifies
+ that this package will be fetched from the R-channel in the Anaconda
+ repositories. After the installation completes, R can be invoked from the
+ command line by typing `R`.
+2. Like with Python, `jupyter-lab` can be used with R, simply launch
+ the notebook and click `New >> R` (technically made possible via the
+ `r-irkernel` and `r-irdisplay` packages in the `r-essentials` bundle).
+ Another GUI-driven editor for R can be installed via `conda install -c
+ r rstudio`, and launched by typing `rstudio` at the command prompt.
+3. To install a new R package, simply type `conda install -c r `.
+ All R package names are prefixed with `r-`. You can also use the standard
+ `install.packages()` within R, but it will be easier to keep track of
+ packages by sticking to one installation method.
+
diff --git a/lessons/misc/REST/AIV.eps b/lessons/misc/REST/AIV.eps
new file mode 100644
index 000000000..785b99f99
--- /dev/null
+++ b/lessons/misc/REST/AIV.eps
@@ -0,0 +1,6730 @@
+%!PS-Adobe-3.0 EPSF-3.0
+%%Creator: GIMP PostScript file plugin V 1.17 by Peter Kirchgessner
+%%Title: AIV.eps
+%%CreationDate: Fri Apr 17 18:12:46 2015
+%%DocumentData: Clean7Bit
+%%LanguageLevel: 2
+%%Pages: 1
+%%BoundingBox: 14 14 913 782
+%%EndComments
+%%BeginProlog
+% Use own dictionary to avoid conflicts
+10 dict begin
+%%EndProlog
+%%Page: 1 1
+% Translate for offset
+14.173228346456694 14.173228346456694 translate
+% Translate to begin of first scanline
+0 767.24798285857025 translate
+898.49763779527575 -767.24798285857025 scale
+% Image geometry
+1198 1023 8
+% Transformation matrix
+[ 1198 0 0 1023 0 0 ]
+% Strings to hold RGB-samples per scanline
+/rstr 1198 string def
+/gstr 1198 string def
+/bstr 1198 string def
+{currentfile /ASCII85Decode filter /RunLengthDecode filter rstr readstring pop}
+{currentfile /ASCII85Decode filter /RunLengthDecode filter gstr readstring pop}
+{currentfile /ASCII85Decode filter /RunLengthDecode filter bstr readstring pop}
+true 3
+%%BeginData: 399485 ASCII Bytes
+colorimage
+JOeln!(cWMs%*,Z!(cfRr^[&]8G,LP8H23R8,u0Z8FK%K8H)*Z8F8nI8FK%K8GbpA8GksX8:aA+
+8V-pArrP_]8,5^Q8,c$\7n?2L8,l-Z8H;<[7g)@S84Z8L8H26]8Gu$Y8:a@f8H;
+JP
+JOdUJr^c]Pr^cTMs%'1\s%*/[s%*#WJOoH)JcGcMr($]Vq+(HUpdb9Rr($`Wr^ZlWr'u
+JOf0!!(crV!(c`P"@u$Q84`>BrCHTOr(-iXpIP9Rs%)WLs%*/[s%)cP!(cuW!(ciS#Y7HU84Z6@
+84`YKkt(_B!(_Z4ogs`7s8N*j8,5^R8,GjS7fZ*Z8H;<[7g;LU8Ou?A8Gu*[8Gu$Y8:a@e8H;
+JP>6#!)<)Z"AMQ`9hk+N!)<,[rCufUs%VrU!);6B!))?GrD!/_JPGc2JcGcMrCm,`q+U`]qb6o^
+rCm2brCm/arCd5b9S#pm:&.K_9`ds]9`.W`9`Iid9_M3X9_hBb9MJ5Sr(MZ9Le[e@r_<8`rD!8b
+b"[B~>
+JOeln!(c`P"@u$Q84_`1r^cNK!(a(Zr^coVJOoE(JcGcMrC?cVq+(ETqFCHSrC?iXrC?fWr'u
+fgts0s%*,Zr(-cV!(d&Yp.5'Nq+(QW84`VJJOkSfr($`Wqa^TUr^Y+%J,~>
+!Co]W7fZ*S7fZ*W7fZ*Z7fZ*@8,l-M8,l-X8,l-Z7fZ*67fZ*O7fZ*Z7fZ*W7fZ*S7fZ*M8,l-O
+8,PpW8,PpU7fZ*F7g)@Q7n?2J7fZ*W7fZ*W7fu:P7nEVLs%!8_84Z6@qagZUkt(_B!(_Z4oLXW6
+s8Vjbr^R#\7n
+!DH5a9E7f]9E7fa9E7fF9E7fW9E@d\c:e44o1T-Ylq@CRi(X/Fg.VZE9MA/S9D(sY:&@Ta:&7N`
+:&.H_:$54L:&@V8:%M)1s8W,u9`.W\9`.W_9`.W_9`@cc9`.W_9S#pl:&7Q_:&dob:&Rcc:&[i\
+:&7QZ:&.J69nuI@9`@c_9`@cc9Z^"Z~>
+m7..Ifgc$5n4*IL^IJ8plph%H[mpNk7n6,A7fZ*W7fZ*18,l-W7tF5&8:gg@s8GOd8GPdR8Gl!U
+8Gl!W8Gu'W8Gku/8D6W28,c'Z8,PpV8,l-Y8,,XO8,,XO7tF3d8Gl!W8GYjU8H)-$8:U~>
+!Co]W7fu:P7nEJH#>%EU84Q0@8H)*Z8F/hH8H)*Z8H)*Z8FT+L8GbpW8H23Z8Er_F8G#CP8Fo=O
+8H)*Z8GbmW8ENDB8G#FL8H)-W8GbmW8Ff:N8Gbm[84Q0@8GbmW8GbmW8H)*`84Q0@7n6,L8,Z!Y
+8,l*[8,c'W8*WYC7fZ)28b5N)s8W*!8,>dU8,c'Z8,Z!V7fZ*Y8H;<\7g2FT8Ou?Ar^d#[r'p`X
+JP"Tf!(cuW"\;3U7n6,K8H;<\7fc.PrC?ZT!(d#Xs%*/]qagQR!(_Z4Le7V;r'pf[84`\LrC@)`
+84Q0@8BOMS~>
+!DH5^9E7f`9F"9c92P9MPFY!))TN!)a!)<>a"&2H_:&[id:$,+L:&Rcc:&[fd:&I\9:%D#0s8W-!9`%Q_
+9E7fd9`7]`9`.W`9`7]b9`.W_9S#pk:&7Q`:&[ib:&Rcc:&Rc]:&IZc92,.Upe665LJ@Y>s%W>`
+rD!8ba\@9~>
+!Co]T7fZ*V7fZ*W7fZ*@7fZ*Z7fZ*L7fZ*W8,l-Z7fZ*D7fZ*P7fZ*D7fZ*27fZ*V7fZ*D7fZ*K
+7fZ*W7fZ*W7fu:P7nD#tJOo?&JcGcMs$urWrC6iYr^ZoXr($WTr^ZrYrC?cVr'u
+!Co]T7ghmY7n?0@7n?0@7nEVL!(cuWs%*/[s%)cP!(d)Z!(c`P!(cHH!(d&Y!(cuW!(d)Z!(cuW
+s%!/\8GYgV8E<8@8D?Z08H)-W8F&eG8FT+R84Q0@7n6,L8,l-[7hS?_7n?0@7n?-@84Q0@84Q0@
+8Gl!E8GbmW8:aA'8V-pArr>Rc8H)-Y8-DFR84cAM7fZ*Y8H;<\7gMXW8OuBB7n?2M8H;<[7fZ)2
+8_Q`98GbmY84cAO7fu:R8P&hN!D#f\7fZ*W8H;mRr($`W
+!D,i]7fZ*%8Up~>
+!DH5^9E7fa9`Iff9M>(Q!);cQ!):m8!)<2]"&2H_:&@Ta9=dgq:&7Q`:$G@O:%1gV:&%B^:&[fd
+:#8SD:&doc:&.J6:%D#0s8W-!9`.W`9`Iid9`@ca9`%Q_9`@cc9`.W_9S#pj:&7N`:&Rcb:&IZb
+:&Rc]:&@WY:&.J69nlC?9`@c`9`7]b9ZTqY~>
+!Co]T7fZ*W8,l-97fZ*.7fZ*S7fu:P7nBpUr^clU!(c
+!Co]T7gMXU7n?0@7n?2D7fl4Q8F/hH8CC!184Q0@qF:WZ7n6,H7fZ*J7fZ*<7fZ*P8+B.78,l-M
+8,l-[7fu:P7nEVL#Y7HU84Z6@84`YK"\;-R84Z8L8Gu'F8GbmW8:aA'8V-pAs8#:c8,5^R7fZ*Y
+8H;<[8,l0[8-2:P8H)0\8Gu$Y8:a@c8H;
+oh5?[r(I,a:%_0_92&&R9=dds:&7N`9s[Oj:!$'/:&@Ta:&@Ta:%M$Y:&@Ta:&%E]9`Rla:&@V8
+:%:r/s8W*!9`.W_9`@`d9`@ca9`%Q_9`7]b9`7]_9S#pk:&7Q`:&Rcc:&IZb:&Rc^:&7QZ:%q>4
+9nlC>9E7fc9EIp^9`7]a9ZTqY~>
+og]!QqaUWWo1/gOYt"dbZUb$ds$m&[a@?5$dmjC/r^ZlWqaZ3.nOS62s8W*hrCHiVs%*/[r^crW
+qagZUrCHoXrCHfUJOnEaqF:NVrC?lYr'p`XrC?ZSqa^KRp.'[)L.M#.!_>gOrCHlWa@Lg~>
+nOE[P7n6,B8,l,a7fZ-T7fZ*J8,l-X7fZ*G8,l*]7n?2E8+B.J8,l-C7fZ*S7fZ*Z7fu:P7nEVL
+"%YpP8H)-Z8GksZ84Q2/8GksX8:aA&8V-pAs85Fc8,PmY8P&bL!(d&[!(d&Y"@u*T84WYMr^d)\
+rC6iYJP"Nds%*#Ws%*,Z!_>mRrC6iYrC6iYr(-lZqa^ZWs%3/[!D,iX8,l,28V]k;8Gu$[84cAO
+8,PpX8H;<\7fZ*$8Up~>
+mnal:&%E\:&I]^:&Rcb:&[ia:&R`d92'n2fM239s%NPf9MGF[rCd2crCm&^rCd8c9MG4Uq+Q?6
+KMDD=r_<>bqG$r_a%_'~>
+mRI7Jo1&dOYX\[aj$s)?j@92@nji[M[RUXQ8Gl!T
+8Gu'X8H)-W8Gku/8CpE/8,l-Y8,l-T8,>dQ8,PmX8,c'T7tF3a8Gl!X8Gu'T8H)-"8:U~>
+nOERMfgc$5pdY
+ND'=Hge7]BlV%:Qo1]*WhFmoDg.VK@pItHYpItQ\r_3,^r(MZ9mnJB5s8W'mpItQ\r(Qu^rCm/a
+r_38bqb2Q8f1l-9s%WGcs%W8^qb?r]qG$r_s%W>`JPCelr(R)ar(R#_rCk:,!).n~>
+NCNt>`CBo!o1/dNh+%H9g.)-6pIG*Op.#*Rr($TSr'ud/s%*)Ys%)oTqagTSqFLTUs%)uVJOkGbr($`Wqa^TUrC=n!J,~>
+a@?5$pdb?TpIG6Sr($cXrC6iYl:1hFnj`[Nq*tEUq+(HUs$m&[pI>3SpI>3SoLJdLhFIT:n4*IL
+pdY"@l!R8P&bL!(_Z4mn&*1s8W'hrC?`U!D,i[8,PpY8Gu$Z84ieOs%!)[
+s%*2]r'p`XJP"Kc!(d#X!_>mRr^R#\8P&eM!(d)Z!(d&[!(cuW!(d&[rCH]Rs%%]4Kh288rC6lZ
+8c2-Z8,l*\8P&eM!(b7(!_>gOJ,~>
+a@lS.lq@CRqb7#a^J"W%h+[fBge@`Bk"GbLpIkQ]qb6f[oM#9Zr_*;dr_3;cr(MZ9mS/94s8W'm
+r(I)br_3;cr(Qu^r(R)arCm/ar(MZ9ekQ'9r_<>b!)<5^qb?r]peCKVJPCbkrCm2bqFpl_rCk:,
+s%Iq~>
+Z:=mcqa^ZWJOf9$s%(m7!(crVr^[)\84`>Bs%)uVr^crWJOo3"JcGcMs$m&[pdb
+r'p`XnOERMqF:NVmRR:Jr'p`Xqa^ZW!_5dPpdYBV8P&bLs%*,Zr^cQL"@u$Q84`5?!(c`P!(d)Z
+!(d)Z!(c`P!(cNJqFK[;!(cuWrCHrYs%)lS!(ciS!(d)Z#Y7HU84Z6@84`_MpIG9Smn!IKs%!/^
+8Gku/8a]0$s8W-!8,l-[8,l-[8,Z!V7fZ*X8H;<[7fu=R84WVLs%*2]r'p`XJP"Kcs%*&X!D#f\
+7fc1PrC?lYs$m&[rCHu[r($cXs%3#WqF:NVJOtMd!(d&Y"@u*T7n
+r(I)bmS!^U9MA+*9`Iib9E7fb9E7f*9E7fE9`Ii?9`IiA9E7fb9E@j]r_3Gf9hk4Q!)
+r'p`X\4?Qip.#*R`('eu[7C6fdRX=.!_5dPl::kFqaZ3.mRVp/s8Vd_r^crWqagWTs%*,ZqagWT
+JOn?_qa^ZWrC?lYrC?lYr^ZlWqa^TU"%PmQ8,c'U7tF3_8Gu'Y8Gu'Y8H)-Z8Gu'#8Gu&/~>
+r^ZuZ"%c$R8,GgW8,GgZ8Ou?AoLSsOr(-iXr^crW!(cuWr^d&Zs%)rUs%)lSr^cuXs%)oT!(d)Z
+!(cKIs%)cPs%*,Z!(c`P!(cQKpIOI;s%*#Ws%!;`84Q0@8G>US8H)*Z8G>US8H)*[84WYMr^Z]R
+s$uQLs$m,]8P&bL!(_Z4mR`!0s8W'grCHoX!_>mRr'p`Xr(-lZrC7&_8OuBB84`\Nr'p`XJP"Hb
+!(d#X!_>mRr^Qu[8c2'Y8H)-Y8cM?Z8,l-[8cM<]8,c$\7n?2K8,l,28V9S78H)*\84cAN8,PmY
+8P&hN!(b=*r^cuXJ,~>
+rCm5crCm5c!DH5d9`%Qa9`%Q_9`Ii[9E7fa9E7f`9E7fZ9`Ii]9`Ii>9E7ed9`Iia9E7fc9E7`:
+9`Ifg9MJ7X9E7fY9`@ca9S#q*9nE?Es8G^l:&I]a:&I]]:&Rcb:&[ia:&I\9:";u89`Iid9`Iib
+9E7fd9`7]^9`7]c9`Ii^9S#oh:&I]b:&Rc^:&Rc.:&I\8~>
+rC?iXr^R&]7n6,K8,GjW8,GjU8,l-Q7fZ*A8,l-S8,l-47fZ)Z7fZ*%8,l-[7fZ*G8,c'W7tF4u
+8:gg@s7]%_8Gl!S8Gu'X8H)-W8Gku/8C^9.8,l-Z8,l-X7fZ*Z8,PpT8,Z!Y8,l-T7tF3^8Gl!X
+8Gl!T8Gu'$8Gku.~>
+r^ZfUs%*2]r^m,\m7HtA!_GpRr^ZZQr^ZuZmmmCKqa^ZWk!oDBqa^ZWoLAmPqaUWWpIG3RoLJaK
+!(ZfTl:1hFqF:NVn4*ILr^R)^7n6*@qa^ZWs$urWs$u'>!D,i[7fZ)28aT*#s8W,u8,c'Y7fl4Q
+8GksX8Gl$Z8Gu'Y8H23X8-):Qr'p`XJP"Ea!(d&Y!_>mRrC6l[8GPdR8Gu'Y8-qjY84c?C7n?3B
+qa^ZWJOtGb!(d&Ys%)uVs%*/]!(d)Z!(b@+s%*#WJ,~>
+r_2-Bs%N,\rCm5cr(I)bqb-ua_G'u(!))uY!)88Cs%WAap.YN\oM,?Zr_<;aJPGK*JcGcMr_3>d
+rCm2br(Qr]rCm5cs%EGf9`.W`9E7_::"2o89`Iic9`Ii^9`@ca9_qK`9`Ii`9S#oh:&drc9E7f`
+9`.Wa9Zp0,9Rm~>
+rC>^8s$ucRrC?lYog]!Q_FOVsJOf6##"V6S84Z6@r^d&Zogo'Ps%*&XJOo,uJcGcMpdb_s%*&X!(coUr^cuXb=MJ"J,~>
+ogesOqa^QTs$uiT!(m)Zs%3/[s%*\k7n6*@8OuBB84Z
+oh>?Zo1]'Vr_2iVr_38bs%NGer(I,a9u9R*9h\4J9E7f\9E7fZ9`@cP9`IiA9E7`U9E7fb9`@ca
+9]AeF9S#q(9nE?Es8G[l:&Rcb:&I]]:&Rcc:&Rc`:&@V8:"2o99`@cc9`IiV9`.Td9MJ7U9S#oh
+:&dog9M>@Ys%W;_r_%e+J,~>
+oLAmPnONOKr^ZrYr^Z]Rr^ZoXs%!)[qaUWWP"5OCl::kF`(0huqFBR:rC;E0lUZU,s8Vmbr^crW
+qFLQTs%*)Yr(-]TJOn9]rC?iXr^ZuZn43CI!_5dPpIBd*JOof3r($cXq+(HUrC>%%q+#r~>
+cU[t*r^R,_8P)HC8,GjW8,l,^7fZ*W8,l-O8,5^S8,Z!?7fZ*H8,l-[7fZ*Y8,Z!V8,PpX8,,XT
+8a/eF8c2)08aAs!s8W,t8H23[8-):Qr'p`Xr(-lZrC6o[8P&eM"%Z!T8GksX8:a@_8H;
+a\;Y-s%NGes%EDeOA,UI\P3#tr(I)bqb6TUr(QcX!)38ar(MZ9lV2s1s8W'mrCm2br(Qr]r(R,b
+rCm/ar(MZ9dnTa6s%NPg92,=ZnkAmSp.U$3JPH);rCm5c##%Z`9MJ5Tr_<;abY@k+J,~>
+a[c>$rC6r\7n6+38,YuZ8,l*]7n?/G8GbpU8H)-X8H)-W8Gku/8F&fts8W*#7n?2L8,c'W8,>dS
+8,l-X8,c'W7tF4[8Gl!W8H23[8F]4H8G5Q)8:a>18Gu'Y8GYjU8Gl!%8GG]*~>
+^dn)hY"/L_!([#ZogedJr^ZiVj[T;Alpq(H!_5dPrC?cVs$uoVs%!&ZrCQrYi^Wu>JP#0!JcGcM
+r^d&Zs%!/^8GksX8Gl$Z8Gu'Y8Gu'X8-):Qr'p`XJP"?_!(d&Y#=qEW84Q3B8Fo=O8Gu-X8GPdU
+8:a?`8cD9]8H)*\84cAO8,YsZ8P&bLc:S%,r($cXr^VJ~>
+^J+Z%U.kS]oh>9XpIkQ]j%KGIi_9AHqb7#ar(QiZiCnesl:lj0s8W'mr_3;cr(Qr]rCm5cqb6u`
+r(MZ9dnT^5s%WMes%W&XpJ(HWJPC\ir([)_s%WDbrD!2`bt[n*J,~>
+^IS;pU.52So1/dN[RUhl:?L+s8W*irC?iXr($TSrC?lYqa^WVr'u_r(-`Us%*&XrCHiVbt.OuJ,~>
+\OZ0\rC6iYd7=4-qF:NVqa^ZWs%35]oLJ=?j[T;Ar^QrZm771Ir($`W!(Z]Qs%32\hF@Q:JP#,u
+JcGcMr^d&Z!_>mRrC?lYr(-lZrC6o[8P&hNr^[&]8GksX8:a@]8H;<[8,PmY8P&JDs%*/]qa^`Z
+8GbpW8:a?`8c;3\8Gu'Y8GbmZ84cBDrC6iYcUn.-rC?iXrC;A~>
+Z:t'g]1i,snk9$Xr_3>dqb6o^_b:&)rCm/as%EGf9`%Q?9S#q&9nE?Es8Pgm9`@ca9_qK]9`Iid
+9`.W_9S#pd:&[fe92,=Zs%NGeo1]*W"&)E`9`@c_9S#oh:&I``9`Iia9`@ca9[-9`Iic9Rm~>
+Yt+X]\ju]ij[]8?]gr)nr^R#\7n/8Gu'Y8GbpV8Gl!&8GbpW8Gu&/~>
+Zq(!arCQfU!(ZoWq+(HUlph%Hqa^TUr($`Wr'pi[8P)JE7fZ*Y8+T:!8,c'X8,l*\7nEVL!_>gO
+oLR_,!(_Z4kt-I+s8W*is$m,]8P/kN!(crX!(d)ZrCHoX"%Z!T8GksX8:a@]8H;<[7g;LU84Q0@
+8G,LQ8Gu*a84Q0@84Q5K8,c&18V'J38H;<[7fl4Q8GbmY84cAM8'jj-8Gl!W8Gku.~>
+YtXa`rCm2bfhDE?qFgl`qb6r_m7dLRr(R&`]hJ/pg.[&lkY6X.s8W*nr_3>drCm#]r(R)ar_38b
+r(MZ9d7sR5r_
+Y=J7VrC?lYcURt+qa^TUlph%Hqa^TU]gqffg.-]bkX^:)s8W*ir^ZuZrC?ZSr($`Wr^ZoXr'u
+d7F1*s%*,Z!(c`Pr(-fW"%YpP8Gbo.8:a>.8GksX8GPdU8Gl!'8G#E&~>
+lq##ar(-ZUr^d&\njr[Ks%)rUs%)oTr^[/^84Z6@rCHlWs%)cPr^crWr(-iXqagWTs%)ZMs%)?D
+s%*&XrCHrY!_>gOr(-fYs%(g5!(_Z4kXg@*s8N6n7n?0B8Gu$Y8GYmX8Gu$Z8P&hNs%*/]!(d#X
+!(_Z4dRaF0rC6o[8P&DBs%*&Z"%YpP8GYjV8:a?`8c)'Z8Gu'X8GbmY84cAN7fZ*-8cM?Z8,l-W
+7fZ)1~>
+oM#B\9hjhF!)(j9mnN^Rs%WMe!)<>a!);NJs%WAa!)<)Z!)<8_s%WDbs%W8^!):a4s%W>`peBF8
+JPG<%JcGcM"AMQ`9hkOZq+^c\s%WGcrD!2`JPFKcrCm5cr(I)`p.Y?Xs%EGd:&7P79n?%7:&I]b
+:&7Q_9`Ric9[?H09E7f`9Rm~>
+n4:/]nOWOI!(bd5s%)NI!(coUs%*#W!(a[kq+01/JOnrpJcGcMr^ZrYrC?ZSr($cXrC?fWr'u
+cq++*s%)WLqag]V!(crVJOk>_q+1ERs%)uVr^cuXcUdUsJ,~>
+n4De6p.#=KN(6C9Y,C8Lq+1NWr^d&\s%!,]r^[/`84Z6@rCHcTs%)lS!(d)Zr^[#ZrCHBIr^[#Z
+q+(KUqagNQ!(cTLs%)]N!(d&Y!(d&Ys%*&XrCHrYp.4O?lpu\!k=L7)s8W*h!_>mRrC6iYqFLZX
+rC7&_8Ou?A84`_Or'p`XJP"6\!(d&Y!D,iZ7fZ*V8,l-Z8cD6]8P&YIs%%]4JP#]0!(d&Yr(-cV
+!_>mRrC6iYdRjF/oLJpPJ,~>
+i_A]3#*Y*A9W>:ri_9>Gr_2fUo1]0Ynk9$Xr_3>dh+RfCb=hn1qFpo`qb6i\k"PYH!)38a!).r<
+j\:=+s8W*mr_<>bq+^`[!)
+i^ii7!(c`P#*=d68#NMfiCEo=r^ZHKi^Wu>r^ZuZh+%H9_FFSsqFCHSk!stnejtAls8W*hr^cuX
+q+1BQ!(d&YrCHiVJOn*XrC?lYo1/OGpd]m+JOoQ,r'p`Xq+(HUr(#+)o1/gOJ,~>
+i^ro9s%2rU"\lZ+qPd$bqYWn>8,,UT8bYdQ8,l-S7fZ*Z8,c$Z8,c'L8,GgW8,>dV8,PpC8,l-Z
+8,l-N7fZ*Z8,l-Z8,l-X8+]@D8+fCR8P"D(eOb>ls8N0k84cAN7fZ*V8H;<[8,c$Z8,c'Y8c2'Y
+8:a@Z8H;<\8,l-V7fZ*W7fZ*Y8c)'T8,l,28V'J08H;
+btS@>^A@],:&b"g:"W/2:$,.L:&doe:$G@O:&dle:&R`c:!H?3:&R`c:&.H_:&[i`:%(c,:!-1]
+s8W-!9`Iib9_qK\9EIp^9`%Q]9S#pb:&Rcc:%_0\92,.U!_c<_q+Q?6JPGo6r_*De9MJ7X9`@cb
+9[ZZ*9`@b:~>
+bt&"4]__K(8H/Ja8D-N-8E*,>8F/kH8GYgV8GYgV8@qCh8FT-#8BFDRs8W-!8,l-Y8,5^M8,PpT
+7tF4X8Gu'Y8Fo@I8H20[8GPc,8:a>,8Gl!X8GYjU8Gu'+8GbmW8GPdT8:U~>
+c:J4DeG?YaqRHP$rCQoXkstOF!D!"W7f`D]8H20hqK>A!84Q0fqF=*Q7n>M.b^)hZ8,l-I7fZ*Z7fZ*W8,GjV8cM?]8,i>eq!#M"r^ZiVW_!A#]Bo.>JC$jf
+qUeC0rs&%U>=heMmJ-\]8)!tEZq%CDs8GRf7fZ*V8H;<\q?llMThe0K84c?D8c2'Y8Ff=PqW^WP
+qV"O?q?-BFU/:#E!;bPD!29Af!;YnO!(d&Y!D,iT8,l-[8c)'R8,l,28YAWUqKMj/!H@nq8H;<[
+7fl4Q8GbmY84cAN7fZ*08cM?Z7fl4Q8GbpW8H)22~>
+c:nLLebZheqRQV%q+^'Hq"b"bqXR;^qFjUXqFgqdHMgG>Er&I'qYj1g:%CsX9E%W`:&@Ta:$#%Q
+RCrrTPtZ-*(J
+9MJ7Z9_hE^q??NIUf0r\r([&^nkB,\l:h9Tg.hSC"8(EF<9HsUqVFpHU](#hq<:WP9EIp^9D)!R
+:&%D59qG&[qKi'6!H\+t:&I]b:&7Q_:&Rc6:&7Q`:&7Q^9n3~>
+c:A.BeG?YaqRHP$q+0^>q"b"]qXR,YqF=%HqF:S_G5Oi5DYcjnqYj"b8FB"H8DZi@:nle=lca\-
+8,GjV8,i>eq!#M"rC<\T"^S_+o@8?;8-&M=8Fc]anrR'IRCrrTPtZ-*(J7n?2L8,5[U
+8,i>eo\?-8r^ZoXqa^3J!;btO!;bD?rqZ`hgn@O,8-&MC8-#@^q>g?U8Gu'Y8G,LI8GG]+8=i?Q
+qKMj.!H7hp8Gl!X8GYjU8Gu',8GYgV8GYjS8:U~>
+cUe@Wk4tR7Q_+$PqY<_X8F8nIqYWh`qXR,XqF='O8-8Io8,YsZZ1e/fs%!#Yoge^Hr($cX!(ZrX
+m7.FXd$%d/?)@:Kr^ZuZq+(HUoLJpPqFCNUs%32\rC6kar^R#kU"0*4VF_"piLF"MO7e(L8H?of
+8b)fbH^3jml]lPROq!;bD@!I_BA8H;<[7fl4Q8G5OR8H)3W8GYjV8:a@(8HJLpr(-ppp>edF8Gu$[84cAL
+7fl4Q8Gu$Y8GPgWb2#Vh8GbmY84cAL7fZ*X8Up~>
+cV4X^kP:a1r_3De9DqQS9`Y%T9`Y%D9aCMh9iu5#bZ
+cU\:Uk4tO5QC[jNqXd>C7f`D`7f`DV7f`Db8,PpX7fi:mr'pdmpA7A[8G#FO8,u0X8DZiB:XG;3
+93n@fKA/on8GksXqYitd=/"0=8-`5TRo`RMomtCZ!6X%enc&f?Q0J23Q#k=P!d0!6b5_K4r($QR
+$:jq_7oO)fb"tSur^coVnONZVl::pOg.2JF84Z]nQci7i8-&M?8-++Gl:CkDs%)fQqFLTU!(coU
+JOl>&!VNu#8--$ij%0)
+cq+UuoCI^DqYIOPoD8=T8b>RJ7f`D`7f`DV7f`Da7fc.NrC@"a]4(\0!aE84r^d&Z!_>mRog]'S
+8P/\J"%PmQ8,5^B7gPlF84Q0@8=I0h8,l-Z8,l*[8,c'P8,l-W8,>dQ7f`Da8-)TZU.GBcQi0JV
+S[$I3!9Dm+nc&V`o`"jkrTqr3"RStM:@67)!(d&Y!(crX"\;-RqF='T8-X727n?3C8GksX8F]7O
+qW^WPqV"L@qYWncGG=:m!;bGA!`7HKlU_(Ir^R#\8P&PF!(d)\r(-WRs%%]4S4NeV]41b2!aN>5
+j@T8>!D,iY8,l-\8Gu'R8H@i/8cM?Z8,Z!V8,l-W8Up~>
+cqOn&oCRmIqYIRTo_SFK:%V*ZqYX"eqXR;[qYEnb9aLL,A5#]l?b?16:&[id:%_3W:&dle:%V-Z
+:$bOSV2G7Gs%NNb^#_of:&7Q]:&.H`qFpl_!ESfd9`_>arCmM0:&I]\:&dleqYX"gH)+.5:&@WR9`Y%T9`Y%D9`Y%f9`]R9kY2'RgJ%`JelqB6rCd8e
+:/1FUr(R/br_]JPDV.!r'B>r_3H$]DCS_r_*De9MJ7X9`Iib9__<^jk``.9`Iia9_hD5~>
+cq"OsoCI[BqYILOoD8=I8G,IQqYWh`qXR,VqYE_]8.,+'?q3aY>.OK"8Gu'Y8G,LM8FT+L8F/hI
+UPAbjP*5qrrGgcrr3#tm*Yh9m7utBmE>M0
+8Gl!R8H20[qYWhbFeM>)8GbpH8-&MO8-&M?8-&Ma8-*n.kXY^MgIMBAeQ(p+rC?iXp.,$Os%!)[
+pd]m+Rn*VT]4(\0!aE84j@K2=s%)uVs%*&XpdbDGh+7--q+-#~>
+d7FJ6q<<4LrV?Z@HKb4!kXkP?s$m(cr'qe%FPQTIG"5&9bjP#JCe%"l7n6C\lgV/P84`T,XSta,
+Ujr538GYkLlZ_+Uh02@Z:pK?UYtIVZr($fXo1/pQ84`);"Pd*M7nH5G09^-o_ogr)jlKc&^>52ApPMBTi:YlJ8P)gclgV2S8PJAqiUocqi:YlJdn'StB),">;mtuW]2_EqmYC)oLPtH`LIk/,L[+5]
+MsBV`8P/dW8J:kk9C$fVo\Fda8bu$8qYIkj_H84Q0Dgdk"8[d*1j;crg#8QPLb8R(splZ_+Uh0DR`qFO7W[d*1jAlW4!V!`S>`rCJ)GbjP#KD+R<#`q.l#8P)t%o@[qN
+8Q*"^lap(c8GYmV7h,;c9C$fVo\FdahYR)Yi^s/@r($cXqF:NVq+6)~>
+d7jbC6j9PhuBn^2;L9_qFV"rB!?&%>2
+h0;Xg6kgm"nG2
+qYa,$qFscOHJJ/LHqd?3:#GgD^$Al$9`eD\=QN9IrrQo)pA=k:n9drDf`1tAs8VbS<`"qTs85pC
+AkZ^Zs8VS99k`2Zs7MLT:m(VNruA:ss+ITUs85[2>YBD3s85[2>YBD3s8TrE9P2]4s85Rd:&[gQ
+qFjUX9M87=9heZulKl2c>PMW$>4l&n?he!oHJJ/LHqd?39heZulKl2d9hfKLn+"hG9heg0n`,Z=mT8i9ds01=]Voqn[).f:&7RY5h4t=6Wic9cn5sn+"hG9heg3o\+:Z9j5U/g2Kb\\]iRm$qG$r_%Jiao
+l[%@YhL&&TqYIb]:&7N`:&7QY9n3~>
+d7=D4q<<4LrV?Z?H0G*ti(3i;!;cU`3VRXNp>:$`7qg-7n^))B8,>_G:pK?UYtISWqL>S:7nBG)
+qFF0R7nN#ig[sG2)ZFG=P/#[d*1j;b'FH
+L?e,[MX'M^84ZU_lgV/PqaWUA84ZqRl,or^[)gku?b8nc&Z)SG)j[-LcCWB\<@b8,rV^O]G;@qZ$Ioc=Ta[c2[h5
+Hqe;,s8VbS<`"qTqYqP?K`?_/s8W!m`*>r]n,N;]`*>r]n,NF)@8(:\j8]$Iq+1KT6Ma2C84Q0D
+gdjt6[d*1j;crg"86,=_86YdmlZ_+Uh0;I]qFF.T[d*1j<(KPobjP#JD+I2u_sl];qFF/0i:YlI
+iCEtFr(%5jgdjt5ZKq"c9N:=Vr^\J9lVp`elgV2R84`SJ85cn]lap+e9(@JnouL3*85Z\Yn?P_Y
+9Bgc]p%_,ZVi1OF),dp.lap+e9'^]Uo\Fa_85Z\Yn?GVV7n?2F8,>dV8,l-U7tF4"8-8X;XSt`o
+Ujr5?lW*pT!`J8^rCA#EbjP#JD+I2u`q.l#84Ze#o@[qN85Zh\lap(c8,>dU7h,;b9'^]Uo\Fa_
+hYR)YiCNN0pdfo~>
+dn'^=^A?Q.hu!6RhfmcM^/3f\r^[%cr(&a>]3nEthag;iLeU^:h+(!37n9eV<)90\7nXrrdA^s2K'XrtJ"\m.7*3
+s8PWHm.7*3s8Q*Oqn?kBrrBV,7f\J4Z(Y2qTqY+MqFO8]W`;upYt7O^\m&.*\OfAtTiP$aU.IrJ\6hr+8HEMKrCIj/W`;up
+Yt7O[]jX^"i(6MFTiP!_TgqUDrC6jFqt^B(8P/kOpdb?TJOu8$$i3NP;FsX:9DV5`T)M:^Q`U*V
++4l?F;P)]98[tWpJ_*Ib\>;uOf18H7WDl`kYt%@]8H)*eqFF3N]jX^"i(6N:q+1REqt^<&nO`aO
+rC?iXqa^ZWpdou~>
+dnL!E^\Z]3i;8$.)-ND5S_:$cjrM:bNs
+ZD1T'USLUYo=8=,:$cjrM:hZ!!06sQ!4h)`!VKLh9cgO>=]_Q.9hk>\u!&qYa,$qFs]X^1:0-iD!&C9hkIY9sC>j9`^]bqb7'Nqt^<'nkJZS"lErdFfF^+s!EYpp;CbH
+s%!+hP,%R@US7_f98;U(Z=3e5Mk0R[C]FEtU[e&QU&+clElS.!EW5tP8;Z^)VMbER8;Z^)VMbER
+.)-ND5S_:%l;3;jH<9:&7RY
+YcCo.W3]2mfSia0U#&L<[\Hr2]D5/qlu>jYf\oO)qYNtpoM&&cUKUZmUeS7br_4i/[8!s%>#h>n
+9hkIY9sC[$=/`H":&)>-=J<<#9sUNtj9`^]br(SfrN)NcNhG$_TW)\N'9hi0r
+<.igt9WtL!
+dmsX;^&$H,hu!6RhfmcM^/*WW!;cUa3;0sl:6FF)8(WPk:n?E48,>_GYb4rkTV4kGqFTL>7nhT.
+qFF0R84W?c?VQ[@7n9eV<)90\84`YK!/g[M!4_#Y!VK+\7jtU7<)90\7n<6b?VQ[@7n9\\<)KKs
+7n<9N:kJ#4:kRe!8?ead:S=E[8,l-XqD.5=84`?^?;!hkWDlcmYt30%8;ltp8<;(flYT:Kf18H:
+TiFp_U.@iH\6_g!lYT:KfD8#N\Dg$[ohkNU*j)D@;Pp]i8G8rYKBoL6KB#Knp8:c?l`!a6
+j%)`;rC@Rt84`Ee?qumC84`SJ8GYkJY+GV`!LKka8-"SFq>e%r8Fc]`he,W*WU'Q`-B"Gg`,#DQ
+8,rUPU[e&QU&Y-cL?A9:@K6@cSbC!;s8S7Wnb/`OqYp\=`rF%urr3['M1+q++'BD+fT7iCEtFqa_+e84]tY&nTqY(Ko=/+"qFCX"bPasKXf58tVQiZ_ot=a.P2Jl%Yb>&n
+TV4kG8Gu$YMYm5M\GJhl7tF3t8.58dh,-^;fh2*3Y+GV`!LKkb80?H>:/RV=84^7f:k@4h8@PEk
+JCd=^Xf58sV6NN]qFLTU$i3Cbot=a.P2Jl%qYN\F<&e8,l-U8,#Q)~>
+dn'[fqSe$Rq>(6^JAh;1hamhEr(.(g>Y.L^q#3ka81I@084`SI8*O2I7oS878,>`NPXg\+8GYkJ
+qFF-Q>=V1Wpd[j=>=_:ahYB\BMuEJP\Gf&!7fZ*G7fZ*Z7fi6Ur^Zq`s$o*6>";(]hFC*4>=V1W
+pd[j8?UmUij[_r=<_,p\iePA`(@hM
+_F_\28_g1MrCI=[>Y.LehFU<8@fAq#gnnHQ8H=\Iq>e%a8HJK_q+2Xg?V*goj[i&?=%Q-_<_6$\
+8P/b[8PT%^8PStO8c&BW(]$]pqHZZa:A@CPqFO9T8P*@Q9h@t6?M[4nMuEJP\FE/Zrs7A[G"f^O
+s&SUdrtJ!'s&\Ods70\"s$uASs8#:ds&SUdrrlKis8VY"qu7W$<;QXlH>3/>?`(@hM_F_\28bu^a8P]%P
+8bu"MjBkJM>ikiS%Slgk8`j,H8R_He8_g1MhamhEr(.;ioLVX=>Y.LehFVA;r^eKnB1_>m8P)q=
+8P/bM8`X5M8R1@K8buje8Qt@M8a0JO8QFV=8buok8HI+KrCIab?V*goj[i&?>tIU_pdn'A>Y%Ca
+hYBYAMZ*AO\GAbm8,l,28XE![qFRKJ8WBH9qFP,X9h@t6?MI(q:AIIQl<+!V&4l(e7n6-A8*!uH
+7p>"F8c&BU$i3FdqHZZa:A@CPqY3V^MuEJP\FN5k8GksZ84cAL8,l-S8Up~>
+dnKsmqSn3Wq>(6^K>m\8hb=+Ir(R@k?VO6lq"mc9;Ya![qFjTJ?;+$ohFpW>9Vn(LO/#DF9hkIX
+9_r-j9MkLX9^5tZ9j$:Ir(R,b!07$S!4h&^!VB7g9`=hf9If=69MAOE9MG:j9MA:X9MFPW9MAdS
+9MG:d9MkRh9i:[Z9^5qX9NU(E9`7ZmqFs[[@A:S4:&8H#9bZVu9hf!W9p`gn`3R9T`KsOHj;>]LV9`U4Pq>e(r:%/)fgT,Kk_#OF8n,32"8,rTj
+li7"UA,lR!lMpn\8H8]jn,31h=6ondnmhRs)s^K"s8,g^s8PUOs8VIgs8PUOs8VIgs8Q]%kkG)W
+\c#"uMt-iH9_hE\9EFu`rCnS6oM&'A@SBI%j\;)\9uO?T9uWGnqI*)m;>
+dmsUdqSe$Rq>(6^J&D,/hadbDr(%"f>=_:Zq"mT4:&.=MqF='?>";(]hFC*48#);=N1ic<84`SI
+8,?F[7ni\J8*O2J86"G:r'pfZ7uI9A!4UoW!VB(b8,`;a7k3b,7n6M77nbAc%8GZco8/(&k84ZtH8e%q8FQQagT,Kk_#OF8n,32"8,rTj
+li7"UA,lR!lMpn\8H8]jn,31h=6ondnmhRs)s^K"s8,g^s8PUOs8VIgs8PUOs8VIgs8Q]%kkG)W
+\c#"uMt-iH8,5^R7fiHVrCA5,oLMO6?:RLhj[bWR8A_UI8Ag]`qHQQ^:&%7MqFF0L86"G:8GYkJjBkGK>NJCH
+qHuib=m8IJl!$\L<8L/:qI0.i!R>9T8/:2m84ZtH84`S^84ZJM84_uL84QV8q*tFBrV?N(rCHWP
+JOl(t&GeqmPt6n.8GYkbk"J<;hHfnI"\ne`8Es:S8.Xud7n6*?8*!uH7p>"F8G`9T$i3CbqHQQ^
+:&%7MqY3S]MuEJP\F<&d8,l-V8+oK(~>
+dRaL`9DA2W!r#<2hFR_Dr(-nbrCILq8P*O3l1OiJ8P/bL8G2rX&bAL_qF=lK8Cq'9qF=*Q7ntOla8\^6VI_5JK$"h*>p%\AT8bPgV8cM
+dS0dg:\XV[!r#H9hG""Hr(R1frCmdu9hf??lLjrK9hkIY9_SG]&bA[iqFkAU:"WiIqFjTZ9MG<]
+9EY,b9_SG]!;-1_rCmBRqYIb\9EEjUqb.+g9MG0Yq?-=_9`"]]$i3OjohS7T:A%=UqYj1oqFs[X
+qFjTVrV?Qd9`.TbqYa+l=n,3\qG.#a)"g^"9i(FV?h%7e?LCqc?VP(>lIgAU:%nP^"S>D_qG.#a
+"D"t+fm!3c"-36S\_p0_ghcd\#k_"g9i(FV:&=i`!;c[h"8Y_dqYj1hqYj1kqFs]\rCmCj9hkK_
+9a:Gg:&7RYqYj1l_2hEanR##erCnL49hkIY:%_=W9i(FV9khQ2p%\AX:%h@W9i:a]9k:]tfluCL
+!;cUf"B4;S:%nP^$M7%eb^<-2btUq+rV@<%9hkIY:%_=W9i(FV:&7[\9i1OX:%nP^"S>D_qG-i\
+!KsDZ9aLDg9heFV9hkK_9`t5d:%nP^!;#tZ#`ecX\P5dl9MP:UJPDA'&,K"1hbMj5:&7RY_2h
+dRXF^9)&)V!r#90hFIYCr($harC@Fp84[=0l1OiJ84`SJ8+liW&bAL_qF=lK8Cq'9qF='P7nl."nqF='KrV?Wf7n_H8GYkJ
+8,>_Gp&4^fo1/^L!;cXb"]Xt^8GYpW8/V"m84ZAG86YO_mTJsWnQSOk[-H:b84`FPq?6C\8GYpW
+8-E;,lI^1Q8-=eHqRGHS!ShAa8-nl]84ZAG84`UV8-&Mc8-A]Z8G`dqb-th8,N>dqb-thkDrYXdeNhE\OT/JnGiMYq+1BQ!;c[bs%!l"
+iCHK38k2BCogi9V<:3oW<:O0`qY`r/qFF0R84`DH84ZAG84[=0l1OiJ84`DG84ZJO84[*plI^1:
+8-&Ma8-D]H84`FPq?lgb8BZ9LGKWNJp&4_&o12FK84`DH84ZAG84`SM84ZDH84`FPq?6C\8GYpR
+8-+dKr(%+d91VTGoghXMrC@%e84`FPq>g-^7gP%LqRB'e7n6,E7tF3r8.YPf?f"B,>Y+]^8AC*S
+ICoAI$"_$=p%\AS8G5[S8.\;b8Ol
+cq403s6T[[gdqMBr(-nbrCIUt8P/!0>>8&m8P/bM8E!N=8Gu$gqF=&rPJp$^qF='P7niSCIqYj%dqYj%gqFO9Tr^d+dr^dLo8P/\P8P*4a8P/dW8I##_
+8bu"MqYj%hE:@5sC\LC$Mn&4Im/I7[;ZHc"lhpbc8,rTro)&Fe8,`Gj8,rTllhpb`?h3sk!H6cm
+rt4.-s8PUPs8VFgs8PUPs8VFgrVlru]Nb.1!P+-Wrr>Uc8H;iSCI
+dB:S_afWu_8c&BW)u<,tqFO9=>"M:jj%2i'QWm0_qFO9BiSCIqY`tg
+qFO9;<;/o_8H26dMmu;L84Q0@qFCQVJOu(t&,JjhaHXY88bu"ME:@5sC\p[0jHj(F;u0'Wk["0Z
+)+[9]>=_=V7n;TB7n6eD8P&VM7n6k]8P/dW8H\f\8c&-P!K4JZ8cD9Z7fl4Q8GbpW8G#K(~>
+cqXH7s6]a\ge@eFr(R1frCmh!9hj]:?Vsl#9hkIY:#]7O9Fgnm9Z`U?9MG:V9_qFVqYa(mqFs]D
+=A;I`qb7#ar_*?P\b\u":$t[T:&IZd9qRjO9Ee2f9MFGIqb."drCdUq9MFJP9MAdQ9hkK`9`Y%h
+9Eb2c9]B.P9`%NaqYa+k>k(N_qYa+uj'GGS?fOjTd]gnhbHKCm9a-I;9hjVLqb7(eqFq!Kk4_RN
+Nk+%A!NDjm9alTh9hjYS9hf!T9hkK`9`Y%h9`t5d:&=i`!;c[h$i3Rlpeaa[@JW\mqYa+mqFs]\
+9hkK`9a#P-A*7b(9`^9bmnN0K"nGRks&n[crrbjls'P?orr>Rfrrbjls&n[crrHKtp\t84h#@$0`
+dnNR5rCn7-9hkIY:#fPS9jcpT:#q^L;-*Nf:$>_S9kX>#9`^17iCs=Kr(R?E[S9KU=SkeuJ^.0:
+K2#)"=Skf,qFs]E?;4.$j%W8EA5,d*kY4e2=SkemqYhE!Q9aKcc9hf!T9hkK_9a(;e:#]:K
+9`@`eNk,-`p.U$3P>)Sa9hi`r`_B2(9hf^!A*7b,9aTmK?Vsl#9hjhZr_