Unverified Commit a718bc6b authored by Zach Knox's avatar Zach Knox

Merge branch 'master' into project-page-updates

parents 03a5ccfb 279a6823
......@@ -2,8 +2,8 @@
*.pyc
*~
srctweb/website/build/
.venv
.virtualevn
.venv
srctweb/_site/
.sass-cache/
.jekyll-metadata
SRCTweb -- the homepage of Mason SRCT
SRCTweb -- the homepage of Mason SRCT.
Copyright (C) {{ site.time | date: '%y' }} Mason SRCT
This program is free software; you can redistribute it and/or
......
......@@ -6,6 +6,9 @@ main:
- title: "Events"
url: "/events/"
- title: "News"
url: "/news/"
- title: "Calendar"
url: "/calendar/"
......
......@@ -50,8 +50,8 @@
}
},
{
"name": "Kinga Dobolyi",
"email": "kdobolyi@gmu.edu",
"name": "Jonathan Bell",
"email": "bellj@gmu.edu",
"alum": false,
"exec": {
"status": true,
......@@ -70,7 +70,7 @@
{
"name": "Jason Yeomans",
"email": "jyeoman2@gmu.edu",
"alum": false,
"alum": true,
"exec": {
"status": false
}
......@@ -443,4 +443,28 @@
"status": false
}
},
{
"name": "Christopher Gallarno",
"email": "cgallarn@gmu.edu",
"alum": false,
"exec": {
"status": false
}
},
{
"name": "Tyler Hallada",
"email": "thallada@gmu.edu",
"alum": true,
"exec": {
"status": false
}
},
{
"name": "Luke Faraone",
"email": "lfaraone@gmu.edu",
"alum": true,
"exec": {
"status": false
}
}
]
......@@ -3,7 +3,7 @@
{
"name": "Go",
"language": "Python",
"current_release": "Go 2.2 - Bloomin' Onion Edition",
"current_release": "Go 2.3 - Smash Mouth & Fake News Edition",
"current_release_url": "https://git.gmu.edu/srct/go/milestones/3",
"next_release": "Go 2.3 - Smash Mouth & Fake News Edition",
"next_release_url": "https://git.gmu.edu/srct/go/milestones/4",
......@@ -39,7 +39,18 @@
"blurb": "GitLab is a central host for Git repositories. It's like GitHub, but operated by Mason for Mason. Any student or member of the community may log into it with their Mason NetID. Users may upload code either for private work or public viewing, and may allow others to contribute to their projects."
},
{
"name": "Masontoday",
"name": "Masontoday Mobile",
"language": "JavaScript (React Native)",
"status": "in_dev",
"repo_url": "https://github.com/srct/masontoday/",
"fa_icon": "far fa-calendar-alt",
"project_manager": "Zach Osman",
"issues_url": "https://github.com/srct/masontoday/issues",
"docs_url": "https://github.com/srct/masontoday/blob/master/README.md",
"blurb": "Mobile app showing students events and other happenings around the Mason campus"
},
{
"name": "Masontoday API & Web",
"language": "Python",
"status": "in_dev",
"repo_url": "https://git.gmu.edu/srct/mason-today-web",
......@@ -68,8 +79,10 @@
{
"name": "Schedules",
"language": "Ruby on Rails",
"status": "in_dev",
"status": "active",
"current_release": "1.0",
"repo_url": "https://git.gmu.edu/srct/schedules",
"deployed_url": "schedules.gmu.edu",
"fa_icon": "far fa-calendar",
"project_manager": "Zac Wood",
"issues_url": "https://git.gmu.edu/srct/schedules/issues",
......@@ -95,7 +108,7 @@
"current_release_url": "https://git.gmu.edu/srct/weather/milestones/1",
"next_release": "Beta",
"next_release_url": "https://git.gmu.edu/srct/weather/milestones/2",
"status": "active",
"status": "inactive",
"repo_url": "https://git.gmu.edu/srct/weather",
"fa_icon": "fas fa-umbrella",
"project_manager": "Zach Knox",
......@@ -105,7 +118,7 @@
"blurb": "Provides a beautiful way to check up on the weather across all of Mason's campuses."
},
{
"name": "What's Open",
"name": "What's Open API",
"language": "Python",
"current_release": "2.1 - Grain of Salt",
"current_release_url": "https://git.gmu.edu/srct/whats-open/tags/2.1.1",
......@@ -175,7 +188,9 @@
{
"name": "What's Open Google Assistant",
"language": "JavaScript",
"status": "ideas",
"status": "in_dev",
"repo_url": "https://git.gmu.edu/srct/whats-open-assistant",
"project_manager": "Ayham Hasan",
"fa_icon": "far fa-clock",
"blurb": "Google Home client app for the What's Open API."
},
......@@ -183,7 +198,6 @@
"name": "Photos",
"status": "in_dev",
"repo_url": "https://flickr.com/masonsrct",
"project_manager": "Mark Stenglein",
"fa_icon": "fas fa-camera",
"issues_url": "https://git.gmu.edu/srct/whats-open-alexa/issues",
"docs_url": "https://git.gmu.edu/srct/whats-open-alexa/blob/master/README.md",
......@@ -220,11 +234,11 @@
"name": "sks-rs",
"language": "Rust",
"status": "in_dev",
"repo_url": "github.com/srct/sks-rs",
"repo_url": "https://github.com/srct/sks-rs",
"fa_icon": "fas fa-key",
"project_manager": "Kunal Sarkhel",
"issues_url": "https://github.com/srct/sks-rs/issues",
"docs_url": "github.com/srct/sks-rs/blob/master/README.md",
"docs_url": "https://github.com/srct/sks-rs/blob/master/README.md",
"blurb": "Rust implementation of the Synchronizing Key Server for PGP keys."
},
{
......@@ -247,5 +261,15 @@
"issues_url": "https://git.gmu.edu/srct/advisor/issues",
"docs_url": "https://git.gmu.edu/srct/advisor/blob/master/README.md",
"blurb": "Advisor is an automatic academic advising system. The goal is to allow students to enter their academic history in a standard form and receive an interactive list of coursework they are required to complete for graduation, as well as possible electives and prerequisite trees. This would not serve as a replacement for in-person academic advisor meetings."
},
{
"name": "Where",
"status": "in_dev",
"repo_url": "https://git.gmu.edu/srct/where",
"fa_icon": "fas fa-map-marker",
"project_manager": "Jay Wilson",
"issues_url": "https://git.gmu.edu/srct/where/issues",
"docs_url": "https://git.gmu.edu/srct/where/blob/master/README.md",
"blurb": "Mapping effort for various facilities and amenities on campus"
}
]
......@@ -11,7 +11,7 @@
<meta property="og:url" content="{{ site.url }}{{ page.permalink }}">
<meta property="og:type" content="website">
<meta property="og:title" content="{{ site.title }}{% if page.permalink != '/' %} | {{ page.title }}{% endif %}">
<meta property="og:image" content="{{ site.url }}/assets/img/SRCT_sq_white_shadow.png">
<meta property="og:image" content="{{ site.url }}/assets/img/SRCT_square_green_sm.png">
<meta property="og:description" content="{{ page.description }}">
<meta property="og:site_name" content="{{ site.title }}">
<meta property="og:locale" content="{{ site.locale }}">
......@@ -23,14 +23,12 @@
<meta name="twitter:url" content="{{ site.url }}{{ page.permalink }}">
<meta name="twitter:title" content="{{ site.title }}{% if page.permalink != '/' %} | {{ page.title }}{% endif %}">
<meta name="twitter:description" content="{{ page.description }}">
<meta name="twitter:image" content="{{ site.url }}/assets/img/SRCT_sq_white_shadow.png">
<meta name="twitter:image" content="{{ site.url }}/assets/img/SRCT_square_green_sm.png">
<!-- Load stylesheets -->
<link rel="stylesheet" href="https://srct.gmu.io/masonstrap/css/masonstrap.min.css" />
<link rel="stylesheet" href="https://srct.gmu.io/masonstrap/css/masonstrap.min.css"
/>
<link href="/assets/css/style.css" rel="stylesheet">
<link rel="stylesheet" href="https://cdn.pride.codes/css/bar_helpers.css">
<!-- Load favicon -->
<link rel="icon" href="/assets/img/favicon.ico">
{% if page.tablesorter_css %}
<link rel="stylesheet" href="/assets/css/theme.bootstrap_4.min.css">
{% endif %}
<link rel="icon" href="/assets/img/favicon.ico"> {% if page.tablesorter_css %}
<link rel="stylesheet" href="/assets/css/tablesorter.css"> {% endif %}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.2.1/jquery.min.js" integrity="sha256-hwg4gsxgFZhOsEEamdOYGBf13FyQuiTwlAQgxVSNgt4=" crossorigin="anonymous"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.11.0/umd/popper.min.js" integrity="sha384-b/U6ypiBEHpOf/4+1nzFpr53nxSS+GLCkfwBdFNTxtclqqenISfwAzpKaMNFNmj4" crossorigin="anonymous"></script>
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-beta/js/bootstrap.min.js" integrity="sha384-h0AbiXch4ZDo7tp9hKZ4TsHbi047NrKGLO3SEJAg45jXxnGIfYzk4Si90RDIqNm1" crossorigin="anonymous"></script>
<script src="/assets/js/functions.js"></script>
<script src="https://srct.gmu.io/masonstrap/js/masonstrap.min.js"></script>
......@@ -8,6 +8,8 @@ layout: default
</h1>
{% if page.category == 'events' %}
<h4>{{ post.event_date | date: "%A %B %-d, %Y" }}</h4>
{% elsif post.author %}
<h4>by {{ post.author }} | {{ post.date | date: "%A %B %-d, %Y" }}</h4>
{% else %}
<h4>{{ post.date | date: "%A %B %-d, %Y" }}</h4>
{% endif %}
......@@ -17,23 +19,31 @@ layout: default
{% if post.hero_image %}
<div class="col-md-6">
<p>
<img class="img-fluid" src="{{ post.hero_image | absolute_url }}" alt={{ post.hero_alt }}>
<img class="img-fluid" src="{{ post.hero_image | prepend: site.url }}" alt={{ post.hero_alt }}>
</p>
</div>
<div class="col-md-6">
<p>
{{ post.excerpt }}
{% if post.content contains "<!-- more -->" %}
{{ post.content | split:"<!-- more -->" | first }}
{% else %}
{{ post.excerpt }}
{% endif %}
</p>
<p>
<a href="{{ post.url | absolute_url }}">Read More
<a href="{{ post.url | prepend: site.url }}">Read More
<i class="fas fa-arrow-circle-right"></i>
</a>
</p>
</div>
{% else %}
{{ post.excerpt }}
{% if post.content contains "<!-- more -->" %}
{{ post.content | split:"<!-- more -->" | first }}
{% else %}
{{ post.excerpt }}
{% endif %}
<p>
<a href="{{ post.url | absolute_url }}">Read More
<a href="{{ post.url | prepend: site.url }}">Read More
<i class="fas fa-arrow-circle-right"></i>
</a>
</p>
......@@ -44,5 +54,5 @@ layout: default
<br />
{% if page.archive %}
<p><a href="{{ page.archive | aosulute_url }}"><i class="fas fa-arrow-circle-left"></i> Archive</a></p>
<p><a href="{{ page.archive | prepend: site.url }}"><i class="fas fa-arrow-circle-left"></i> Archive</a></p>
{% endif %}
\ No newline at end of file
......@@ -20,6 +20,9 @@
<div class="container">
<div class="d-flex justify-content-center flex-wrap">
<h1 style="color: white">{{ page.title }}</h1>
{% if page.author %}
<h3 style="color: white">by {{ page.author }}</h1>
{% endif %}
</div>
</div>
</div>
......
......@@ -32,11 +32,11 @@ permalink: /documents/logos/
<ul class="list-group list-group-flush">
<li class="list-group-item py-1">
<a href="/assets/media/SRCT_rectangle_green_lg.png"
download="SRCT_rectangle_green_lg.png">PNG (Large)</a>
download="SRCT_rectangle_green_lg.png">PNG (1200x400)</a>
</li>
<li class="list-group-item py-1">
<a href="/assets/media/SRCT_rectangle_green_sm.png"
download="SRCT_rectangle_green_sm.png">PNG (Small)</a>
download="SRCT_rectangle_green_sm.png">PNG (600x200)</a>
</li>
</ul>
</div>
......@@ -49,11 +49,11 @@ permalink: /documents/logos/
<ul class="list-group list-group-flush">
<li class="list-group-item py-1">
<a href="/assets/media/SRCT_rectangle_black_lg.png"
download="SRCT_rectangle_black_lg.png">PNG (Large)</a>
download="SRCT_rectangle_black_lg.png">PNG (1200x400)</a>
</li>
<li class="list-group-item py-1">
<a href="/assets/media/SRCT_rectangle_black_sm.png"
download="SRCT_rectangle_black_sm.png">PNG (Small)</a>
download="SRCT_rectangle_black_sm.png">PNG (600x200)</a>
</li>
</ul>
</div>
......@@ -66,11 +66,11 @@ permalink: /documents/logos/
<ul class="list-group list-group-flush">
<li class="list-group-item py-1">
<a href="/assets/media/SRCT_rectangle_white_lg.png"
download="SRCT_rectangle_white_lg.png">PNG (Large)</a>
download="SRCT_rectangle_white_lg.png">PNG (1200x400)</a>
</li>
<li class="list-group-item py-1">
<a href="/assets/media/SRCT_rectangle_white_sm.png"
download="SRCT_rectangle_white_sm.png">PNG (Small)</a>
download="SRCT_rectangle_white_sm.png">PNG (600x200)</a>
</li>
</ul>
</div>
......@@ -94,11 +94,11 @@ permalink: /documents/logos/
<ul class="list-group list-group-flush">
<li class="list-group-item py-1">
<a href="/assets/media/SRCT_rectangle_wo_text_green_lg.png"
download="SRCT_rectangle_wo_text_green_lg.png">PNG (Large)</a>
download="SRCT_rectangle_wo_text_green_lg.png">PNG (1200x360)</a>
</li>
<li class="list-group-item py-1">
<a href="/assets/media/SRCT_rectangle_wo_text_green_sm.png"
download="SRCT_rectangle_wo_text_green_sm.png">PNG (Small)</a>
download="SRCT_rectangle_wo_text_green_sm.png">PNG (600x180)</a>
</li>
</ul>
</div>
......@@ -111,11 +111,11 @@ permalink: /documents/logos/
<ul class="list-group list-group-flush">
<li class="list-group-item py-1">
<a href="/assets/media/SRCT_rectangle_wo_text_black_lg.png"
download="SRCT_rectangle_wo_text_black_lg.png">PNG (Large)</a>
download="SRCT_rectangle_wo_text_black_lg.png">PNG (1200x360)</a>
</li>
<li class="list-group-item py-1">
<a href="/assets/media/SRCT_rectangle_wo_text_black_sm.png"
download="SRCT_rectangle_wo_text_black_sm.png">PNG (Small)</a>
download="SRCT_rectangle_wo_text_black_sm.png">PNG (600x180)</a>
</li>
</ul>
</div>
......@@ -128,11 +128,11 @@ permalink: /documents/logos/
<ul class="list-group list-group-flush">
<li class="list-group-item py-1">
<a href="/assets/media/SRCT_rectangle_wo_text_white_lg.png"
download="SRCT_rectangle_wo_text_white_lg.png">PNG (Large)</a>
download="SRCT_rectangle_wo_text_white_lg.png">PNG (1200x360)</a>
</li>
<li class="list-group-item py-1">
<a href="/assets/media/SRCT_rectangle_wo_text_white_sm.png"
download="SRCT_rectangle_wo_text_white_sm.png">PNG (Small)</a>
download="SRCT_rectangle_wo_text_white_sm.png">PNG (600x180)</a>
</li>
</ul>
</div>
......@@ -156,11 +156,11 @@ permalink: /documents/logos/
<ul class="list-group list-group-flush">
<li class="list-group-item py-1">
<a href="/assets/media/SRCT_square_green_lg.png"
download="SRCT_square_green_lg.png">PNG (Large)</a>
download="SRCT_square_green_lg.png">PNG (800x800)</a>
</li>
<li class="list-group-item py-1">
<a href="/assets/media/SRCT_square_green_sm.png"
download="SRCT_square_green_sm.png">PNG (Small)</a></strong>
download="SRCT_square_green_sm.png">PNG (400x400)</a></strong>
</li>
</ul>
</div>
......@@ -173,11 +173,11 @@ permalink: /documents/logos/
<ul class="list-group list-group-flush">
<li class="list-group-item py-1">
<a href="/assets/media/SRCT_square_black_lg.png"
download="SRCT_square_black_lg.png">PNG (Large)</a>
download="SRCT_square_black_lg.png">PNG (800x800)</a>
</li>
<li class="list-group-item py-1">
<a href="/assets/media/SRCT_square_black_sm.png"
download="SRCT_square_black_sm.png">PNG (Small)</a></strong>
download="SRCT_square_black_sm.png">PNG (400x400)</a></strong>
</li>
</ul>
</div>
......@@ -190,11 +190,11 @@ permalink: /documents/logos/
<ul class="list-group list-group-flush">
<li class="list-group-item py-1">
<a href="/assets/media/SRCT_square_black_lg.png"
download="SRCT_square_black_lg.png">PNG (Large)</a>
download="SRCT_square_white_lg.png">PNG (800x800)</a>
</li>
<li class="list-group-item py-1">
<a href="/assets/media/SRCT_square_black_sm.png"
download="SRCT_square_black_sm.png">PNG (Small)</a></strong>
download="SRCT_square_white_sm.png">PNG (400x400)</a></strong>
</li>
</ul>
</div>
......
......@@ -23,7 +23,7 @@ jumbotron: true
<div class="row smidge">
<legend><i class="fas fa-bullhorn fa-fw"></i>&nbsp;<strong>Mission</strong></legend>
<legend><i class="fas fa-bullhorn fa-fw"></i>&nbsp;<strong><a id="Mission" href="#Mission">Mission</a></strong></legend>
<div class="col-md-12">
<p><strong>S</strong>tudent-<strong>R</strong>un <strong>C</strong>omputing and
<strong>T</strong>echnology (SRCT, pronounced "<em>circuit</em>") is a student
......@@ -37,7 +37,7 @@ jumbotron: true
</div>
<div class="row smidge">
<legend><i class="fas fa-child fa-fw"></i>&nbsp;<strong>Initiatives</strong></legend>
<legend><i class="fas fa-child fa-fw"></i>&nbsp;<strong><a id="Initiatives" href="#Initiatives">Initiatives</a></strong></legend>
<!-- Projects & Infrastructure Responsive Image -->
<img src="/assets/img/openhatch.jpg" alt="Renfred and Daniel assist Heather, a student attending our Openhatch workshop in 2014." class="index-image d-md-none d-flex mx-auto">
......@@ -136,7 +136,7 @@ jumbotron: true
</div>
<div class="row smidge">
<legend><i class="fas fa-laptop fa-fw"></i>&nbsp;<strong>Getting Involved</strong></legend>
<legend><i class="fas fa-laptop fa-fw"></i>&nbsp;<strong><a id="GettingInvolved" href="#GettingInvolved">Getting Involved</a></strong></legend>
<div class="col-lg-4 d-flex align-items-stretch">
<div class="card border-primary index-card">
......@@ -326,14 +326,17 @@ $(function() {
"key":apiKey
},
function(data) {
//console.log(data.items[0])
var d = new Date(data.items[0].start.dateTime),
monthName = d.toLocaleString("en-us", {month: "long"}),
dateOptions = { weekday: 'long', month: 'long', day: 'numeric' },
timeOptions = { hour: 'numeric', minute: 'numeric'},
dateString = d.toLocaleString("en-us", dateOptions),
timeString = d.toLocaleString("en-us", timeOptions);
$("#meetingDate").text("Join us for our next meeting in "+data.items[0].location+" at "+timeString+" on "+dateString +". Make sure to bring your laptop!")
if(data.items.length == 0) {
$("#meetingDate").text("No meetings scheduled yet. Check back soon!");
} else {
var d = new Date(data.items[0].start.dateTime),
monthName = d.toLocaleString("en-us", {month: "long"}),
dateOptions = { weekday: 'long', month: 'long', day: 'numeric' },
timeOptions = { hour: 'numeric', minute: 'numeric'},
dateString = d.toLocaleString("en-us", dateOptions),
timeString = d.toLocaleString("en-us", timeOptions);
$("#meetingDate").text("Join us for our next meeting in "+data.items[0].location+" at "+timeString+" on "+dateString +". Make sure to bring your laptop!")
}
});
});
</script>
......@@ -7,29 +7,47 @@ tablesorter_css: true
<!-- Exec Table -->
<h3>
<strong><a href="http://wiki.srct.gmu.edu/Executive_Board">Executive Board</a></strong>
<strong>
<a href="http://wiki.srct.gmu.edu/Executive_Board">Executive Board</a>
</strong>
</h3>
<table class="table table-hover text-center">
<thead>
<tr>
<th></th>
<th><h4>Name</h4></th>
<th><h4>Position</h4></th>
<th><h4>Email</h4></th>
<th>
<h4>Name</h4>
</th>
<th>
<h4>Position</h4>
</th>
<th>
<h4>Email</h4>
</th>
</tr>
</thead>
<tbody>
{% for member in site.data.people %}
{% if member.exec.status == true %}
<tr>
<td><img class="exec-image" src="{{ member.email | get_gravatar }}" alt="gravatar image"></td>
<td class="align-middle"><h5>{{ member.name }}</h5></td>
<td class="align-middle"><h5><a href="{{ member.exec.link }}">{{ member.exec.position }}</a></h5></td>
<td class="align-middle"><h5><a href="mailto:{{ member.email }}">{{ member.email }}</a></h5></td>
</tr>
{% endif %}
{% endfor %}
{% for member in site.data.people %} {% if member.exec.status == true %}
<tr>
<td>
<img class="exec-image" src="{{ member.email | get_gravatar }}" alt="gravatar image">
</td>
<td class="align-middle">
<h5>{{ member.name }}</h5>
</td>
<td class="align-middle">
<h5>
<a href="{{ member.exec.link }}">{{ member.exec.position }}</a>
</h5>
</td>
<td class="align-middle">
<h5>
<a href="mailto:{{ member.email }}">{{ member.email }}</a>
</h5>
</td>
</tr>
{% endif %} {% endfor %}
</tbody>
</table>
......@@ -37,53 +55,70 @@ tablesorter_css: true
<div class="col-md-6">
<!-- Devs -->
<h3>
<strong><a href="http://wiki.srct.gmu.edu/Developers">Developers</a></strong>
<strong>
<a href="http://wiki.srct.gmu.edu/Developers">Developers</a>
</strong>
</h3>
<table id="devs-table" class="table table-hover text-center">
<thead>
<tr>
<th data-sorter="false"></th>
<th class="sorter-last-name"><h4>Name</h4></th>
<th data-sorter="false"><h4>Email</h4></th>
<th class="sorter-last-name">
<h4>Name</h4>
</th>
<th data-sorter="false">
<h4>Email</h4>
</th>
</tr>
</thead>
<tbody>
{% for member in site.data.people %}
{% if member.alum == false and member.exec.position != 'Faculty Advisor' %}
<tr>
<td><img class="member-image" src="{{ member.email | get_gravatar }}" alt="gravatar image"></td>
<td class="align-middle">{{ member.name }}</td>
<td class="align-middle"><a href="mailto:{{ member.email }}">{{ member.email }}</a></td>
</tr>
{% endif %}
{% endfor %}
{% for member in site.data.people %} {% if member.alum == false and member.exec.position
!= 'Faculty Advisor' %}
<tr>
<td>
<img class="member-image" src="{{ member.email | get_gravatar }}" alt="gravatar image">
</td>
<td class="align-middle">{{ member.name }}</td>
<td class="align-middle">
<a href="mailto:{{ member.email }}">{{ member.email }}</a>
</td>
</tr>
{% endif %} {% endfor %}
</tbody>
</table>
</div>
<div class="col-md-6">
<!-- Alum -->
<h3>
<strong><a href="#">Alumni</a></strong>
<strong>
<a href="#">Alumni</a>
</strong>
</h3>
<table id="alums-table" class="table table-hover text-center">
<thead>
<tr>
<th data-sorter="false"></th>
<th class="sorter-last-name"><h4>Name</h4></th>
<th data-sorter="false"><h4>Email</h4></th>
<th class="sorter-last-name">
<h4>Name</h4>
</th>
<th data-sorter="false">
<h4>Email</h4>
</th>
</tr>
</thead>
<tbody>
{% for member in site.data.people %}
{% if member.alum == true %}
<tr>
<td><img class="member-image" src="{{ member.email | get_gravatar }}" alt="gravatar image"></td>
<td class="align-middle">{{ member.name }}</td>
<td class="align-middle"><a href="mailto:{{ member.email }}">{{ member.email }}</a></td>
</tr>
{% endif %}
{% endfor %}
{% for member in site.data.people %} {% if member.alum == true %}
<tr>
<td>
<img class="member-image" src="{{ member.email | get_gravatar }}" alt="gravatar image">
</td>
<td class="align-middle">{{ member.name }}</td>
<td class="align-middle">
<a href="mailto:{{ member.email }}">{{ member.email }}</a>
</td>
</tr>
{% endif %} {% endfor %}
</tbody>
</table>
</div>
......@@ -91,31 +126,35 @@ tablesorter_css: true
<script src="/assets/js/jquery.tablesorter.min.js" type="text/javascript"></script>
<script>
$(function() {
// from https://stackoverflow.com/questions/38209618/
// response there by the person who maintains the project
$.tablesorter.addParser({
id: 'last-name',
is: function() {
return false;
},
format: function(str) {
var parts = (str || '').split(/\s+/),
last = parts.pop();
parts.unshift(last);
return parts.join(' ');
},
// set type, either numeric or text
type: 'text'
});
$(function () {
// from https://stackoverflow.com/questions/38209618/
// response there by the person who maintains the project
$.tablesorter.addParser({
id: 'last-name',
is: function () {
return false;
},
format: function (str) {
var parts = (str || '').split(/\s+/),
last = parts.pop();
parts.unshift(last);
return parts.join(' ');
},
// set type, either numeric or text
type: 'text'
});
$("#devs-table").tablesorter({
theme: "bootstrap",
sortList: [[1,0]]
});
$("#alums-table").tablesorter({
theme: "bootstrap",
sortList: [[1,0]]
$("#devs-table").tablesorter({
theme: "bootstrap",
sortList: [
[1, 0]
]
});
$("#alums-table").tablesorter({
theme: "bootstrap",
sortList: [
[1, 0]
]
});
});
});
</script>
---
title: "Tales of IMT #1: Addressing Aquia and How SRCT Content Gets Served"
layout: post
categories: news
slug: imt-ep-1
date: 2018-04-29T00:00:00-0400
hero_image: "/assets/img/servers.jpg"
hero_alt: "Future Aquia Servers in a car"
author: "Michael Bailey"
---
This is going to be one part of what will presumably be part of a multi-piece transparency initiative in which I, Michael Bailey (Lead Systems Admin on the Infrastructure Management Team at SRCT), show the campus community (and SRCT) how information is served at SRCT. I'll cover how our sites are served and a few IT tricks we use including Host matching, reverse proxy, and auditing. **These pieces are going to tow a line between what is right and what we do**. I will try to disclaim what we do and what the right move would be to do, because they aren't always the same as this is effectively a volunteer position with limited resources.
<!--more-->
# Addressing Aquia
I've been hearing a lot in terms of people wondering what the situation is with Aquia. Presently we are working on having relatively semantic changes shuffled between us and Professor Bell according to ITS's requests and concerns. We are working now on getting our servers to a new intermediate location until we can move in. After all of this is done, we may need to hold for background checks. They have not started to my knowledge and really only apply to me.
# How Requests are Made to Us
Essentially, whenever a browser is provided a URL like go.gmu.edu, it asks a series of servers where it actually is on the internet via it's [IP Address](https://en.wikipedia.org/wiki/IP_address). This is a configuration known as [DNS](https://en.wikipedia.org/wiki/Domain_Name_System) and we have ours configured at [Hurricane Electric](http://www.he.net/). Our *.gmu.edu domains were handled with an agreement with [GMU Networking](https://itservices.gmu.edu/services/view-service.cfm?customel_dataPageID_4609=6141). As a reminder or if you weren't aware, pretty much everyone on the Infrastructure Management Team is in the workforce, so there's some vested trust in how we handle things.
![imt](/assets/img/imt/dns.png "dhaynes making dns requests")
# What Happens After Requests Are Made To Us
So now we have a web request we need to fulfill sent to 107.170.176.214. All we have to go on as far as fulfilling their request is the browser requesting from our IP right? **This is a key misconception.** We get a wide variety of information, including, on average, what is below. Not only can we use this information to route your request to the right site internally, we can use this to handle other things, such as if we are able to serve you an old copy without issue ([caching](https://en.wikipedia.org/wiki/Cache_(computing))).
![imt](/assets/img/imt/go_request.png "HTTP Payload ")
As an example of caching, services like Whats Open can cache data in certain cases. For instance, if you requested what was open at 3:00pm, while the interface may change as far as what is closed when you ask again at 3:05pm, the actual hours aren't changed so we are free and clear to serve you "stale" hours without requiring the server to go back and fetch the hours again, which may take processing power.
More importantly, routing the request properly. A key element our web server, nginx, is able to manage is the "Host" header. It can read this and determine what actual page you're trying to visit. It's a simple configuration in nginx called [server_name](http://nginx.org/en/docs/http/server_names.html). It defines what configurations should be taken into effect in what cases.
# Redirecting Request Internally
Despite being rich applications in most cases rather than just static HTML, we host multiple applications of multiple types on our servers.
Take for instance "albert", where following web configurations/routes exist.
```
albert bookshare gitbot icinga-web.conf
pgp pmwiki roomlist schedules weather
api default go mediawiki
piwik punycode sched-joke srctweb
whats-open-web
```
As a result, we really squeeze resources out. We have 2GB of memory on albert, leaverage swap, and 30GB of disk on Albert. Gitlab is on a much bigger dedicated box, so that's a different story.
But what does this actual delivery look like? Take for instance our Go example.
Here's ashortened version of what's in production, ignoring certain overrided paths, comments or anything "extra" we don't need to care about.
```
server {