Skip to content
Snippets Groups Projects

Compare revisions

Changes are shown as if the source revision was being merged into the target revision. Learn more about comparing revisions.

Source

Select target project
No results found

Target

Select target project
  • osian/sucs-site
  • kais58/sucs-site
  • imranh/sucs-site
  • foshjedi2004/sucs-site
  • gigosaurus/sucs-site
  • matstn/sucs-site
  • ripp_/sucs-site
  • eggnog/sucs-site
  • sucssite/sucs-site
  • elbows/sucs-site
  • realitykiller/sucs-site
  • crox/sucs-site
  • vectre/sucs-site
  • welshbyte/sucs-site
  • paperclipman/sucs-site
15 results
Show changes
Showing
with 604 additions and 331 deletions
(function($) {
"use strict"
///////////////////////////
// Preloader
$(window).on('load', function() {
$("#preloader").delay(600).fadeOut();
});
///////////////////////////
// Scrollspy
$('body').scrollspy({
target: '#nav',
offset: $(window).height() / 2
});
///////////////////////////
// Smooth scroll
$("#nav .main-nav a[href^='#']").on('click', function(e) {
e.preventDefault();
var hash = this.hash;
$('html, body').animate({
scrollTop: $(this.hash).offset().top
}, 600);
});
$('#back-to-top').on('click', function(){
$('body,html').animate({
scrollTop: 0
}, 600);
});
///////////////////////////
// Btn nav collapse
$('#nav .nav-collapse').on('click', function() {
$('#nav').toggleClass('open');
});
///////////////////////////
// Mobile dropdown
$('.has-dropdown a').on('click', function() {
$(this).parent().toggleClass('open-drop');
});
///////////////////////////
// On Scroll
$(window).on('scroll', function() {
var wScroll = $(this).scrollTop();
// Fixed nav
wScroll > 1 ? $('#nav').addClass('fixed-nav') : $('#nav').removeClass('fixed-nav');
// Back To Top Appear
wScroll > 700 ? $('#back-to-top').fadeIn() : $('#back-to-top').fadeOut();
});
///////////////////////////
// magnificPopup
$('.work').magnificPopup({
delegate: '.lightbox',
type: 'image'
});
///////////////////////////
// Owl Carousel
$('#about-slider').owlCarousel({
items:1,
loop:true,
margin:15,
nav: true,
navText : ['<i class="fa fa-angle-left"></i>','<i class="fa fa-angle-right"></i>'],
dots : true,
autoplay : true,
animateOut: 'fadeOut'
});
$('#testimonial-slider').owlCarousel({
loop:true,
margin:15,
dots : true,
nav: false,
autoplay : true,
responsive:{
0: {
items:1
},
992:{
items:2
}
}
});
})(jQuery);
This diff is collapsed.
<?php
exec("cd ..; git reset --hard HEAD; git pull", $retArr, $retVal);
if ($retVal == 0) {
print("ok");
exit(0);
}
print("not ok\n");
var_dump($retArr);
var_dump($retVal);
?>
\ No newline at end of file
......@@ -23,10 +23,10 @@ if (isset($session->groups[$permission])) {
$smarty->assign("banana_admin", TRUE);
if ($_REQUEST['action'] == "award") {
if (trim($_POST['why']) !== "") {
$number = intval($_POST['number']);
if (trim($_REQUEST['why']) !== "") {
$number = intval($_REQUEST['number']);
$why = $_POST['why'];
$why = $_REQUEST['why'];
if ((abs($number) <= $maxbanana) && $number) {
......@@ -46,8 +46,8 @@ if (isset($session->groups[$permission])) {
}
} elseif ($session->loggedin) {
if ($_REQUEST['action'] == "award") {
$number = intval($_POST['number']);
$why = $_POST['why'];
$number = intval($_REQUEST['number']);
$why = $_REQUEST['why'];
// Send a mail to someone about them bananas
$msgbody = $session->username . " thinks $who deserves $number bananas:\r\n";
......
......@@ -12,7 +12,7 @@ will return "nope" if the user/pass passed is inavlid
Example usage:
include_once("ldap-auth.php");
require "ldap-auth.php";
isAuthd = ldapAuth("usaername", "password");
......@@ -29,6 +29,8 @@ if (isAuthd == "sucs"){
// we don't care about warnings, we write our own
error_reporting(E_ERROR | E_PARSE);
define(LDAP_OPT_DIAGNOSTIC_MESSAGE, 0x0032);
function ldapAuth($username, $password)
{
......@@ -45,24 +47,29 @@ function ldapAuth($username, $password)
$username = implode("@", $s);
}
// filter out everything but A-Z a-z 0-9 . - _ from username
$safeusername = preg_replace("/[^A-Za-z0-9\.\-\_]/", '', $username);
// if safeusername isn't the same as username just error out
if ($safeusername != $username) {
return "nope";
}
// ldap servers
$sucsLDAPServer = 'silver.sucs.swan.ac.uk';
$lisLDAPServer = 'ccs-suld1.swan.ac.uk';
// lis auth stuffs
$lisUsernameOu = substr($username, -1);
$lisOtherOu = "Moved";
$issLDAPServer = '192.168.10.16';
// how to bind
$sucsBindDn = "uid=$username,ou=People,dc=sucs,dc=org";
$lisBindDn1 = "cn=$username,ou=$lisUsernameOu,ou=Students,ou=SWANSEA,o=SWANUNI";
$lisBindDn2 = "cn=$username,ou=$lisOtherOu,ou=Students,ou=SWANSEA,o=SWANUNI";
$sucsBindDn = "uid=$safeusername,ou=People,dc=sucs,dc=org";
$issBindDn = "cn=$safeusername,ou=Students,ou=Active,ou=Resources,o=Swansea";
// Main auth
// Try and connect to silver
$ldapconnSUCS = ldap_connect($sucsLDAPServer) or die("Could not connect to SUCS LDAP server.");
ldap_set_option($ldapconnSUCS,LDAP_OPT_PROTOCOL_VERSION,3);
if ($ldapconnSUCS) {
//echo "Connected to $sucsLDAPServer <br>";
......@@ -73,28 +80,28 @@ function ldapAuth($username, $password)
if ($ldapbindSUCS) {
//echo "Auth'd as $username using SUCS LDAP<br>";
return "sucs";
// turns out they didn't give us valid sucs creds, lets try lis now
// turns out they didn't give us valid sucs creds, lets try iss now
} else {
// try and connect to the lis ldap server
$ldapconnLIS = ldap_connect($lisLDAPServer) or die("Could not connect to uni LDAP server.");
//echo "Connected to $lisLDAPServer <br>";
// try and connect to the iss ldap server
$ldapconnISS = ldap_connect($issLDAPServer) or die("Could not connect to uni LDAP server.");
// echo "Connected to $issLDAPServer <br>";
ldap_set_option($ldapconnISS,LDAP_OPT_PROTOCOL_VERSION,3);
// lets try and bind to the uni ldap
$ldapbindLIS1 = ldap_bind($ldapconnLIS, $lisBindDn1, $password);
if ($ldapbindLIS1) {
//echo "Auth'd as $username using uni LDAP using ou=$lisUsernameOu<br>";
$ldapbindiss = ldap_bind($ldapconnISS, $issBindDn, $password);
/*if (ldap_get_option($ldapconnISS, LDAP_OPT_DIAGNOSTIC_MESSAGE, $extended_error)) {
echo "Error Binding to LDAP: $extended_error";
}*/
if ($ldapbindiss) {
//echo "Auth'd as $username using uni LDAP using ou=$issUsernameOu<br>";
return "uni";
} else {
$ldapbindLIS2 = ldap_bind($ldapconnLIS, $lisBindDn2, $password);
if ($ldapbindLIS2) {
//echo "Auth'd as $username using uni LDAP using ou=moved<br>";
return "uni";
// shit, couldn't bind to anything
} else {
//exit("Invalid Username or Password");
return "nope";
}
//exit("Invalid Username or Password");
return "nope";
}
}
}
......
<?
<?php
function make_password($length = 8)
{
$vowels = "aeiouy";
......@@ -29,6 +29,19 @@ function make_password($length = 8)
return $password;
}
// https://stackoverflow.com/a/44428794
function cryptPassword($password, $salt = "", $rounds = 5000)
{
if ($salt == "") {
// Generate random salt
$salt = substr(bin2hex(openssl_random_pseudo_bytes(16)),0,16);
}
// $6$ specifies SHA512
$hash = crypt($password, sprintf('$6$rounds=%d$%s$', $rounds, $salt));
return $hash;
}
function generateUid()
{
......@@ -63,7 +76,7 @@ function generateLdif($uid, $password, $type, $realname, $username)
// explode the realname
$nameexplode = explode(' ', trim($realname));
// hash the password
$ldappassword = "{SHA}" . base64_encode(pack("H*", sha1($password)));
$ldappassword = "{CRYPT}" . cryptPassword($password);
// compile ldif
$ldif = "dn: uid=" . $username . ",ou=People,dc=sucs,dc=org\n";
$ldif .= "uid: " . $username . "\n";
......@@ -126,7 +139,7 @@ function renew_membership($username)
$sucsDB->Execute("UPDATE members SET paid=?, lastupdate=DEFAULT, lastedit=? WHERE username=?", array(paidUntil(time()), "99999", $username));
// Give them their 200 print credits
exec("/usr/local/sbin/printerrenew.apache ${username} 200");
exec("sudo /usr/local/sbin/printerrenew.apache ${username} 200");
// apprently sending them an email confirming so is nice
$message = "Your Swansea University Computer Society (SUCS) membership has been renewed\n\n";
......
<?
<?php
function piechart($title, $slice, $itemName, $fsizes = 0)
{
......
<?
<?php
function sanitizePhone($phone)
{
return preg_replace("/[ ()]/", "", $phone);
......
<?
<?php
// To use:
// include_once "session.php"
// $mysession = new Session;
......@@ -116,7 +116,15 @@ class Session
// Is this a login attempt ?
if ($submit != '' && $session_user != '' && $session_pass != '') {
$this->session_init($session_user, $session_pass);
// filter out everything but A-Z a-z 0-9 . - _ from username
$safeusername = preg_replace("/[^A-Za-z0-9\.\-\_]/", '', $session_user);
if ($safeusername != $session_user) {
trigger_error("Invalid username", E_USER_NOTICE);
$this->newsession();
return;
} elseif ($safeusername == $session_user) {
$this->session_init($safeusername, $session_pass);
}
}
// Retrieve session information
......
<?
<?php
require_once("validationData.php");
require_once("sanitization.php");
/* useful validation functions */
......@@ -7,18 +7,22 @@ require_once("sanitization.php");
function validEmail($email)
{
global $error;
//split user and domain
list($user, $domain) = explode("@", $email);
// check for bad characters, and check for zero length user & domain
if (!preg_match("/^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]{2,3})$/i", $email) or !$user or !$domain) {
$error = 'an invalid email address (syntax)';
// check for valid syntax
if (!filter_var($email, FILTER_VALIDATE_EMAIL)) {
$error = 'Invalid email address (syntax)';
return false;
}
// Syntax OK
// domain consists of any character after a '@' and cannot contain '@'
// therefore any character after the last '@' is part of the domain
$domain = substr($email, strrpos($email, '@') + 1);
// Check for an mail server
elseif (!getmxrr($domain, $mx) or !gethostbyname($domain)) {
$error = "no mail servers listed for '$domain'";
if (!getmxrr($domain, $mx) or !gethostbyname($domain)) {
$error = "No mail servers listed for '$domain'";
return false;
} else {
// Email address valid from technical point of view
......@@ -26,41 +30,6 @@ function validEmail($email)
}
}
// test whether a password is considered Strong Enough
// ideally we'd want to use cracklib or something here, but no RPM for the php bindings :-(
// dont use this, use weakPassword instead it uses cracklib
function strongPassword($pass)
{
// you call this a password? my cat could bruteforce this.
if (strlen($pass) < 6) {
return false;
}
// start at 0, and increment for certain features
$score = 0;
// greater than 8 characters
if (strlen($pass) > 8) $score++;
// includes lowercase characters
if (preg_match("/[a-z]/", $pass)) $score++;
// includes uppercase characters
if (preg_match("/[A-Z]/", $pass)) $score++;
// includes digits
if (preg_match("/\d/", $pass)) $score++;
// includes "non-word" characters
if (preg_match("/\W/", $pass)) $score++;
// I reckons if it has at least 3 of the above it should be... adequate
// better if it checked for dictionary words too though
if ($score > 3) {
return true;
} else {
return false;
}
}
# Use cracklib to check for weak passwords.
# returns FALSE if the password is good i.e. not weak
# otherwise returns a string saying why its weak
......@@ -112,7 +81,7 @@ function isAlias($username)
return $ok;
}
//check if a user with a sid already exsists
//check if a user with a sid already exists
function sidUsed($sid)
{
$sucsDB = NewADOConnection('postgres8');
......@@ -127,12 +96,12 @@ function sidUsed($sid)
function validUsername($username)
{
global $error;
// check if uname is sytactically valid
// check if uname is syntactically valid
$syntax = preg_match("/^[a-z][a-z0-9_]*$/", $username);
if (!$syntax || (strlen($username) < 2)) {
$error = "Usernames must start with a letter, only contain lowercase letter, numbers 0-9 and underscores (_) and be at least 2 characters.";
$error = "Usernames must start with a letter, only contain lowercase letters, numbers 0-9 and underscores (_) and be at least 2 characters.";
return false;
} // check if the username already exsists
} // check if the username already exists
elseif (posix_getpwnam($username)) {
$error = "Username already taken";
return false;
......@@ -156,14 +125,14 @@ function validSID($SID, $override)
return true;
}
} else {
if (!preg_match("/^[0-9]*$/", $SID) || strlen($SID) != 6) {
if (!preg_match("/^[0-9]{6,}$/", $SID)) {
$error = "Invalid student ID";
return false;
} elseif (sidUsed($SID)) {
$error = "A user with that student ID already exists, email <a href=\"mailto:admin@sucs.org\">admin@sucs.org</a> if this is an error.";
return false;
} elseif (lookupSID($SID) == " ") {
$error = "Student not found, email<a href=\"mailto:admin@sucs.org\">admin@sucs.org</a> if this is an error.";
$error = "Student not found, email <a href=\"mailto:admin@sucs.org\">admin@sucs.org</a> if this is an error.";
return false;
} else {
return true;
......@@ -171,7 +140,7 @@ function validSID($SID, $override)
}
}
function validRealName($realName, $override)
function validName($realName, $override)
{
global $error;
if ($override) {
......@@ -182,56 +151,12 @@ function validRealName($realName, $override)
return true;
}
} else {
//check for enough names for real name (we insist on at least 2
if (count(explode(" ", $realName)) < 2) {
$error = "Too few names given, please give at least two.";
return false;
} //check for a sane realname, see comment below
elseif (!preg_match("/^([A-Z]([.]+ +[A-Z])*([\']+[A-Z])*[a-z]+[ -]*)+$/", $realName)) {
$error = "Name incorrectly formatted, email <a href=\"mailto:admin@sucs.org\">admin@sucs.org</a> if this is an error.";
return false;
} /*
* This should force sane real names, with capitals for the first letter of each word,
* Whist alowing for complex names such as Robin M. O'Leary
*
* break down of regexp
*
* (
* [A-Z] - start with a single capital
* ([.]+ +[A-Z])* - zero or more of, (at least one "." followed by at least one space then another single capital) //we dont expect people to have initals at the end of there names so this is alright
* ([\']+[A-Z])* - zero or more of, (at least one "'"s followed by a single capital letter)
* [a-z]+ - One or more lower case letters, this forces initals to be followed by a "."
*[ -]* - zero or more " "s or "-"s so double barreled names are supported
* )
*
* In its current state
* Robin M. O'Leary is valid
* Robin M O'Leary is not
* Robin M. OLeary is Not
* Robin M. O'LeaRy is valid (though its not meant to be.. bad side effect of not requireing at least one space...)
* BUT... this alows for McSmith's... which is rather nice :)... and of course delibrate
* RObin M O'Leary is not
*
*/
else {
return true;
}
}
}
function validSocName($socname, $override)
{
global $error;
if ($override) {
if ($socname == "") {
$error = "You MUST provide some sort of name";
return false;
} else {
return true;
}
} else {
if (!preg_match('/^[A-Z1-9]/', $socname) || strlen($socname) < 2) {
$error = "Must start with a capital letter or a number and be more than 1 character";
// names can legally be really weird so just check that it is at least 1 visible character
// followed by any number of non-control characters
$realName = trim($realName);
if (!preg_match("/^[[:graph:]][[:print:]]*$/", $realName)) {
$error = "Invalid name";
return false;
} else {
return true;
......@@ -243,9 +168,11 @@ function validAddress($address)
{
global $error;
$address = sanitizeAddress($address);
$regex = "/^([A-Z0-9]([[:alnum:]]|[ .\/'-])*\n)+[A-Z0-9]([[:alnum:]]|[ .\/'-])*$/";
// check that they at least entered in something. Address doesn't need to be as strict when the postcode is.
$regex = "/^.{5,}+$/s";
if (!preg_match($regex, $address)) {
$error = "Please supply at least two valid lines of address.";
$error = "Please supply a valid address.";
return false;
} else {
return true;
......@@ -255,7 +182,10 @@ function validAddress($address)
function validPostcode($postcode)
{
$postcode = sanitizePostcode($postcode);
if (!preg_match('/^[A-Z]{1,2}[0-9]{1,2}[A-Z]{0,1} [0-9][A-Z]{2}$/', $postcode)) {
// matches all postcodes following the valid format described in a 2012 government published document
$postcodeRegex = "/^([A-Z](([0-9][0-9]?)|([A-Z][0-9][0-9]?)|([A-Z]?[0-9][A-Z])) ?[0-9][ABD-HJLNP-UW-Z]{2})$/";
if (!preg_match($postcodeRegex, $postcode)) {
return false;
} else {
return $postcode;
......
<?
<?php
// lookup real names from sid's using campus ldap
function lookupSID($sid)
{
$ds = ldap_connect("192.168.10.16");
ldap_set_option($ds, LDAP_OPT_NETWORK_TIMEOUT, 10); /* 10 second timeout */
ldap_bind($ds);
$sr = ldap_search($ds, "ou=Active,ou=Resources,o=Swansea", "EDUPERSONTARGETEDID=" . $sid);
$info = ldap_get_entries($ds, $sr);
......
......@@ -8,7 +8,7 @@ Date: May 2002</p>
<ol>
<li>Members of Swansea University Computer Society are entitled to an account on the SUCS network. For all except life members, membership will only be granted on payment of the appropriate fee.</li>
<li>All members agree not to do anything to bring the Society into disrepute, and to abide by the Terms and Conditions of the Society, as noted below and as may be subsequently amended. Non-compliance with these rules may result in membership being withdrawn.</li>
<li>Members must comply with the regulations of the network(s) over which they access the SUCS network. This will always include the UK Joint Academic Network (JANET), the Acceptable Use Policy of which can be found at <a href="http://www.ja.net/services/publications/policy/aup.html">http://www.ja.net/services/publications/policy/aup.html</a>.</li>
<li>Members must comply with the regulations of the network(s) over which they access the SUCS network. This will always include the UK Joint Academic Network (JANET), the Acceptable Use Policy of which can be found at <a href="https://community.jisc.ac.uk/library/acceptable-use-policy">https://community.jisc.ac.uk/library/acceptable-use-policy</a>.</li>
<li>Except when explicitly set up for clubs or groups within the University, accounts on the SUCS network are strictly for use by one person only. Multiple use of personal accounts is prohibited, and may result in the offending owner's account being withdrawn. 'Multiple use' includes the owner of the account making known his/her password to others, as well as allowing others access to the account by other means.</li>
<li>Members must take into account the relevant laws of England and Wales as they apply to their use of the SUCS network. These include, but are not limited to, the Data Protection Act (1984), the Copyright, Designs and Patents Act (1988), the Obscene Publications Act (1959 &amp; 1964 etc), the Telecommunications Act (1984), and the Computer Misuse Act (1990).</li>
<li>Members must always use the SUCS network in a manner that does not adversely affect its use by others. In particular, disproportionate use of system resources (including, but not limited to, disc space, network bandwidth and processor time), may result in offending processes and/or files being terminated and/or removed without warning.</li>
......
<h1>Swansea University Computer Society Data Policy</h1>
<p>Date: May 2018</p>
<p>GDPR (EU regulation 2016/679) replaces the Data Protection Directive
(EU directive 95/46/EC) on 25/05/2018. As per articles 12, 13, and 14 here is
our policy on data.</p></p>
<p>This is aimed to be the one and only place with regards to data within
Swansea University Computer Society, henceforth refereed to as SUCS.
This is written in as simple language as possible therefore may include some
informal phrasing.</p>
<h1>Clarifications:</h1>
<h3>Interested groups:</h3>
<ul>
<li/>
<p>Swansea University Computer Society (SUCS). SUCS is <b>not</b>
a legal entity. We are a ‘group’ of unpaid volunteers within a
larger charity. SUCS does not have a data protection officer. We are able to
deal with data related queries directly via the email address
<a href="mailto:admin@sucs.org">admin@sucs.org</a></p>
<p>In this document we consider “our” stuff to be any computer
system or network we manage, even if we do not directly own such
system or network.</p>
<li/>
<p>Swansea University Students' Union (Charity number:
1149941). Is the organisation we are a part of, legally no
difference between us (SUCS) and them. You may contact them via
<a href="mailto:info@swansea-union.co.uk">info@swansea-union.co.uk</a> for
any queries.</p>
<li/>
<p>Swansea University (Charity Number: 1138342). You may contact them via
<a href="mailto:dataprotection@swansea.ac.uk">dataprotection@swansea.ac.uk</a>
for any queries.</p>
<li/>
<p>You, the ‘data subject’, just by reading this (it’s
only available via our website) we have collected personal data on
you.</p>
</ul>
<p><br/>
<br/>
</p>
<h1></h1>
<h1>Data:</h1>
<h3>Non-members:</h3>
<p>SUCS stores data about your interactions with our systems as per
Article 6, Paragraph 1, Point F, Recital 49 of GDPR. It is not used
for purposes other than described in Recital 49.</p>
<p>Such data is exempt from Right To Be Forgotten (Article 17)
requests as per Article 17, Paragraph 3, Point E.</p>
<p>It may be shared with Swansea University ISS Networking Team and
Law Enforcement upon request.</p>
<p>No other data is stored.</p>
<h3>Members:</h3>
<p>SUCS stores data about all your interactions with our systems as
per Article 6, Paragraph 1, Point F, Recital 49 of GDPR. It is not
used for purposes other than described in Recital 49.</p>
<p>Such data is exempt from Right To Be Forgotten (Article 17)
requests as per Article 17, Paragraph 3, Point E.</p>
<p>It may be shared with Swansea University ISS Networking Team and
Law Enforcement upon request.</p>
<p>SUCS only starts to store other personal data until a member has
created a account on our systems.</p>
<p>Once you have created a account we hold the following personal
data that you give us:</p>
<ul>
<li/>
<p>Name</p>
<li/>
<p>Contact Details</p>
<ul>
<li/>
<p>Phone number</p>
<li/>
<p>Address</p>
<li/>
<p>Email address</p>
</ul>
<li/>
<p>SUCS Username</p>
<li/>
<p>SUCS UID</p>
<li/>
<p>Swansea University ID</p>
<li/>
<p>CCTV images &amp; video</p>
</ul>
<p>SUCS username is used to identify and address you.</p>
<p>SUCS UID is used in reference to GDPR Recital 49.</p>
<p>Swansea University ID is used to verify membership eligibility and
linkage when interfacing with Swansea University Students’ Union
and Swansea University.</p>
<p>CCTV is used in a non-monitoring fashion, history is only accessed
by staff when there is reasonable need. CCTV may be shared with
Swansea University (Estates and Facilities – Security) and law
enforcement.</p>
<p>Other stored details are used for contact purposes. They are not
shared with any third party outside of SUCS. However, they may be
shared with law enforcement when required.</p>
<p>We do not share data with third parties, that includes the
Students’ Union unless otherwise stated.</p>
<h1>Data Requests:</h1>
<h3>Non-members:</h3>
<p>You may send data requests for your data to <a href="mailto:admin@sucs.org">admin@sucs.org</a></p>
<h3>Members:
</h3>
<p>You may send data requests for your data to <a href="mailto:admin@sucs.org">admin@sucs.org</a></p>
<h3>Students’ Union Staff:</h3>
<p>We do not share data directly, if you would like some data please
speak to us at <a href="mailto:admin@sucs.org">admin@sucs.org</a></p>
<h3>Swansea University Staff:</h3>
<p>ISS Networking Team - You may send data requests to <a href="mailto:admin@sucs.org">admin@sucs.org</a></p>
<p>Estates Security - You may send data requests to <a href="mailto:admin@sucs.org">admin@sucs.org</a></p>
<p>Other – We do not share data directly.</p>
<h3>Law Enforcement:</h3>
<p>You may send data requests to <a href="mailto:admin@sucs.org">admin@sucs.org</a>.
If you wish to have a specific person to liaise with, please say so
in the original email.</p>
\ No newline at end of file
<h2>Donations Policy</h2>
<ol>
<li> All donations to the society are final, and non-returnable. Any equipment loaned to the society must have the terms of the loan (e.g. time period and/or conditions of fair use) laid out clearly before the loan is accepted.</li>
<li>The society shall not feel obligated to reimburse a donator in any way. Donations should be given freely for the benefit of the society and its members, not for personal gain.</li>
<li>Only equipment that has a direct and immediate use, or a clearly defined planned near-future use, shall be accepted. We simply do not have the storage capacity to collect items that 'may be useful someday'.</li>
<li>A clear log shall be kept of who, what and when equipment was donated, and kept in a prominent place so as to honour our benefactors.</li>
<li> The Society can not be held responsible for the safe keeping of any items loaned or otherwise to it. Whilst every effort will be maintained to protect it, any subsequent damage or theft is entirely at your own risk.</li>
<li> The Society retains the right to return or dispose of any item that threatens, or is believed to threaten the safety rules laid down by the Student Union and the University.</li>
<li> The Society may use, or dispose of donated equipment (non-loan items) in any manner that benefits the society, this includes potentially selling items in order to raise funds to purchase more directly useful items, or donating or swapping equipment with others for good will and favour towards the society.</li>
</ol>
<h2>Donated Equipment List</h2>
<p> This list is incomplete</p>
<table border="0" class="border wide">
<tbody>
<tr>
<th>Who</th><th>Date</th><th>Type</th><th>Items</th>
</tr>
<tr>
<td>Arthur</td>
<td>Sept 99</td>
<td>Loan</td>
<td>Deskjet 540 colour printer</td>
</tr>
<tr>
<td>Zaphod &amp; Spook</td>
<td>2000</td>
<td>Loan</td>
<td>Sun Workstations</td>
</tr>
<tr>
<td>Anarchy</td>
<td>2000</td>
<td>Loan</td>
<td>Motherboard, CPU, and RAM for Platinum</td>
</tr>
<tr>
<td>Milamber</td>
<td>2001</td>
<td>Loan</td>
<td>Brother Mono Laser Printer.</td>
</tr>
<tr>
<td>Weazel</td>
<td>Sep 2002</td>
<td>Loan</td>
<td>120Gb IDE Hard disk for Silver</td>
</tr>
<tr>
<td>Rohan</td>
<td>Jan 2003</td>
<td>Donated</td>
<td>PII 350MHz machine to be used as Cobalt<br /> Dual CPU machine<br /> Empty 1U Rack Case </td>
</tr>
<tr>
<td>Anarchy</td>
<td>Feb 2003</td>
<td>Donated</td>
<td>17" Dell Monitor for Cobalt</td>
</tr>
<tr>
<td>Anarchy &amp; Dick</td>
<td>Feb 2003</td>
<td>Donated</td>
<td>Profits from 2002 BT lecture, presented as components to build 2 new workstations</td>
</tr>
<tr>
<td>Anarchy</td>
<td>Dec 2003</td>
<td>Loan</td>
<td>Pentium to replace the router, a Cyrix machine for workstation</td>
</tr>
<tr>
<td>jk</td>
<td>June 2005</td>
<td>Donated</td>
<td>PIII 1GHz + Board + Memory, used to create thorium</td>
</tr>
<tr>
<td>aeternus</td>
<td>Nov 2005</td>
<td>Donated</td>
<td>19" monitor. Used to replace platinum's old small one</td>
</tr>
<tr>
<td>Rohan</td>
<td>Nov 2005</td>
<td>Donated</td>
<td>Dual PIII 1GHz machine with SCSI disk<br /> 2 other boxes (expand on this..)</td>
</tr>
<tr>
<td>EMC via Rohan</td>
<td>Nov 2005</td>
<td>Donated</td>
<td>PIII 800MHz 1U box with 4x80GB disks</td>
</tr>
<tr>
<td>gimbo</td>
<td>Feb 2006</td>
<td>Donated</td>
<td>17" monitor. Used to replace zinc's old one.</td>
</tr>
<tr>
<td>mattaw</td>
<td>Sep 2006</td>
<td>Donated</td>
<td>Athlon PC</td>
</tr>
<tr>
<td>Rohan<br /></td>
<td>Summer 2006<br /></td>
<td>Donated<br /></td>
<td>Another Dual PIII 1GHz machine with SCSI disk</td>
</tr>
<tr>
<td>Rohan<br /></td>
<td>August 2011<br /></td>
<td>Loan<br /></td>
<td>
<p>UPS (Smart-UPS 1400) and Switch (3Com 3870)</p>
</td>
</tr>
<tr>
<td>Problaze<br /></td>
<td>September 2012<br /></td>
<td>Donated<br /></td>
<td>
<p>Dell Poweredge 1950</p>
</td>
</tr>
</tbody>
<h2>Donations Policy</h2>
<ol>
<li> All donations to the society are final, and non-returnable. Any equipment loaned to the society must have the terms of the loan (e.g. time period and/or conditions of fair use) laid out clearly before the loan is accepted.</li>
<li>The society shall not feel obligated to reimburse a donator in any way. Donations should be given freely for the benefit of the society and its members, not for personal gain.</li>
<li>Only equipment that has a direct and immediate use, or a clearly defined planned near-future use, shall be accepted. We simply do not have the storage capacity to collect items that 'may be useful someday'.</li>
<li>A clear log shall be kept of who, what and when equipment was donated, and kept in a prominent place so as to honour our benefactors.</li>
<li> The Society can not be held responsible for the safe keeping of any items loaned or otherwise to it. Whilst every effort will be maintained to protect it, any subsequent damage or theft is entirely at your own risk.</li>
<li> The Society retains the right to return or dispose of any item that threatens, or is believed to threaten the safety rules laid down by the Student Union and the University.</li>
<li> The Society may use, or dispose of donated equipment (non-loan items) in any manner that benefits the society, this includes potentially selling items in order to raise funds to purchase more directly useful items, or donating or swapping equipment with others for good will and favour towards the society.</li>
</ol>
<h2>Donated Equipment List</h2>
<p> This list is incomplete</p>
<table border="0" class="border wide">
<tbody>
<tr>
<th>Who</th><th>Date</th><th>Type</th><th>Items</th>
</tr>
<tr>
<td>Arthur</td>
<td>Sept 99</td>
<td>Loan</td>
<td>Deskjet 540 colour printer</td>
</tr>
<tr>
<td>Zaphod &amp; Spook</td>
<td>2000</td>
<td>Loan</td>
<td>Sun Workstations</td>
</tr>
<tr>
<td>Anarchy</td>
<td>2000</td>
<td>Loan</td>
<td>Motherboard, CPU, and RAM for Platinum</td>
</tr>
<tr>
<td>Milamber</td>
<td>2001</td>
<td>Loan</td>
<td>Brother Mono Laser Printer.</td>
</tr>
<tr>
<td>Weazel</td>
<td>Sep 2002</td>
<td>Loan</td>
<td>120Gb IDE Hard disk for Silver</td>
</tr>
<tr>
<td>Rohan</td>
<td>Jan 2003</td>
<td>Donated</td>
<td>PII 350MHz machine to be used as Cobalt<br /> Dual CPU machine<br /> Empty 1U Rack Case </td>
</tr>
<tr>
<td>Anarchy</td>
<td>Feb 2003</td>
<td>Donated</td>
<td>17" Dell Monitor for Cobalt</td>
</tr>
<tr>
<td>Anarchy &amp; Dick</td>
<td>Feb 2003</td>
<td>Donated</td>
<td>Profits from 2002 BT lecture, presented as components to build 2 new workstations</td>
</tr>
<tr>
<td>Anarchy</td>
<td>Dec 2003</td>
<td>Loan</td>
<td>Pentium to replace the router, a Cyrix machine for workstation</td>
</tr>
<tr>
<td>jk</td>
<td>June 2005</td>
<td>Donated</td>
<td>PIII 1GHz + Board + Memory, used to create thorium</td>
</tr>
<tr>
<td>aeternus</td>
<td>Nov 2005</td>
<td>Donated</td>
<td>19" monitor. Used to replace platinum's old small one</td>
</tr>
<tr>
<td>Rohan</td>
<td>Nov 2005</td>
<td>Donated</td>
<td>Dual PIII 1GHz machine with SCSI disk<br /> 2 other boxes (expand on this..)</td>
</tr>
<tr>
<td>EMC via Rohan</td>
<td>Nov 2005</td>
<td>Donated</td>
<td>PIII 800MHz 1U box with 4x80GB disks</td>
</tr>
<tr>
<td>gimbo</td>
<td>Feb 2006</td>
<td>Donated</td>
<td>17" monitor. Used to replace zinc's old one.</td>
</tr>
<tr>
<td>mattaw</td>
<td>Sep 2006</td>
<td>Donated</td>
<td>Athlon PC</td>
</tr>
<tr>
<td>Rohan<br /></td>
<td>Summer 2006<br /></td>
<td>Donated<br /></td>
<td>Another Dual PIII 1GHz machine with SCSI disk</td>
</tr>
<tr>
<td>Rohan<br /></td>
<td>August 2011<br /></td>
<td>Loan<br /></td>
<td>
<p>UPS (Smart-UPS 1400) and Switch (3Com 3870)</p>
</td>
</tr>
<tr>
<td>Problaze<br /></td>
<td>September 2012<br /></td>
<td>Donated<br /></td>
<td>
<p>Dell Poweredge 1950</p>
</td>
</tr>
<tr>
<td>imranh<br /></td>
<td>June 2017<br /></td>
<td>Donated<br /></td>
<td>
<p>PlayStation 2</p>
</td>
</tr>
</tbody>
</table>
\ No newline at end of file
......@@ -13,15 +13,32 @@
<th>Gaming</th>
</tr>
<tr>
<td><p>2019</p></td>
<td><a href="/~colours/">colours</a> (Declan Morbey)</td>
<td><a href="/~elbows/">elbows</a> (Laurence Sebastian Bowes)</td>
<td><a href="/~mr_miyagi_420/">mr_miyagi_420</a> (Rafal Gajewski)</td>
<td><a href="/~vectre/">vectre</a> (Alexander Moras)</td>
<td><a href="/~mpg/">mpg</a> (Maxwell Michael Gisborne)</td>
</tr>
<tr>
<td>
<p><strong>2017</strong></p>
<p>2018</p>
</td>
<td><strong><a href="/~andy">andy</a> (Andrew Vincent Pover)</strong></td>
<td><strong><a href="/~eggnog">eggnog</a> (George Henry Woolley)</strong></td>
<td><strong><a href="/~sgelfod98">sgelfod98</a> (Megan Warren-Davis)</strong></td>
<td><strong><em>N/A</em></strong></td>
<td><strong><a href="/~crox">crox</a> (Ciaran Crocker)</strong></td>
<td><a href="/~vectre">vectre</a> (Alexander Moras)</td>
<td><a href="/~elbows">elbows</a> (Laurence Sebastian Bowes)</td>
<td><a href="/~xray_effect">xray_effect</a> (Ryan Williams)</td>
<td><em>None</em></td>
<td><a href="/~arcryalis">arcryalis</a> (Gwen Williams)</td>
</tr>
<tr>
<td>
<p>2017</p>
</td>
<td><a href="/~andy">andy</a> (Andrew Vincent Pover)</td>
<td><a href="/~eggnog">eggnog</a> (George Henry Woolley)</td>
<td><a href="/~sgelfod98">sgelfod98</a> (Megan Warren-Davis)</td>
<td><em>None</em></td>
<td><a href="/~crox">crox</a> (Ciaran Crocker)</td>
</tr>
<tr>
<td>
......@@ -271,4 +288,4 @@
</tr>
</tbody>
</table>
<p>In 2001, the elections were moved so that the committee now stays in position for one calendar year.</p>
\ No newline at end of file
<p>In 2001, the elections were moved so that the committee now stays in position for one calendar year.</p>
<p>Below are links to the Rules and Regulations of the society:</p> <h2>Conditions of Membership</h2> <p>All SUCS members must adhere to the society&#39;s <a href="Conditions">Terms and Conditions</a>, which incorporate the <a href="https://community.jisc.ac.uk/library/acceptable-use-policy">JANET acceptable use policy</a> governing use of the SUCS network connection.</p> <h2>Room Rules</h2> <p>There is an additional set of rules covering the use of the <a href="Room">SUCS Computer Room</a>. Please take note of the <a href="Room%20Rules">Rules of the Room</a> if you plan to make use of this facility.</p> <h2>Constitution</h2> <p>The <a href="Constitution">SUCS Constitution</a> states the aims and objectives of the society, along with basic rules about how it is run.</p>
\ No newline at end of file
<p>Below are links to the Rules and Regulations of the society:</p>
<h2>Data/Privacy Policy/Notice</h2>
<p>
SUCS stores and processes data, details of which can be found in our
<a href="Data">Data Policy</a>.
</p>
<h2>Conditions of Membership</h2>
<p>
All SUCS members must adhere to the society&#39;s
<a href="Conditions">Terms and Conditions</a>, which incorporate the
<a href="https://community.jisc.ac.uk/library/acceptable-use-policy">JANET
acceptable use policy</a> governing use of the SUCS network connection.
</p>
<h2>Room Rules</h2>
<p>
There is an additional set of rules covering the use of the
<a href="Room">SUCS Computer Room</a>. Please take note of the
<a href="Room%20Rules">Rules of the Room</a> if you plan to make use of this
facility.</p> <h2>Constitution</h2> <p>The <a href="Constitution">SUCS
Constitution</a> states the aims and objectives of the society, along with
basic rules about how it is run.
</p>
\ No newline at end of file
......@@ -4,41 +4,38 @@
<p>The following people were elected to the following posts in accordance with the <a href="../About/Constitution">SUCS constitution</a>.</p>
<ul class="boxes">
<li>
<div>&nbsp;<img height="100" src="https://sucs.org/pictures/people/andy.png" width="100" />
<div>&nbsp;<img height="100" src="https://sucs.org/pictures/people/colours.png" width="100" />
<br />
<strong>President</strong><br />Andrew Vincent Pover (~andy)</div>
<strong>President</strong><br />Declan Morbey (~colours)</div>
</li>
<li>
<div>&nbsp;<img height="100" src="https://sucs.org/pictures/people/eggnog.png" width="100" />
<div>&nbsp;<img height="100" src="https://sucs.org/pictures/people/elbows.png" width="100" />
<br />
<strong>Treasurer</strong><br />George Henry Woolley (~eggnog)
</div>
<strong>Treasurer</strong><br />Laurence Sebastian Bowes (~elbows)</div>
</li>
<li>
<div>
<div>&nbsp;<img height="100" src="https://sucs.org/pictures/people/sgelfod98.png" width="100" />
<div>&nbsp;<img height="100" src="https://sucs.org/pictures/people/mr_miyagi_420.png" width="100" />
<br />
<strong>Secretary</strong><br />Megan Warren-Davis (~sgelfod98)
</div>
</div>
<strong>Secretary</strong><br />Rafal Gajewski (~mr_miyagi_420)</div>
</li>
<li>
<div>&nbsp;<img height="100" src="https://sucs.org/pictures/people/crox.png" width="100" />
<div>&nbsp;<img height="100" src="https://sucs.org/pictures/people/mpg.png" width="100" />
<br />
<strong>Gaming</strong><br />Ciaran Crocker (~crox)
</div>
<strong>Events</strong><br />Maxwell Michael Gisborne (~mpg)</div>
</li>
<div>&nbsp;<img height="100" src="https://sucs.org/pictures/people/vectre.png" width="100" />
<br />
<strong>Publicity</strong><br />Alexander Moras (~vectre)</div>
</li>
</ul>
<div class="clear"></div>
<h2>Additional Staff</h2>
<p>If you're trying to contact the Admin team please email admin@</p>
<ul>
<li>Chris Jones (<a href="/~rollercow">rollercow</a>)</li>
<li>Tim Clark (<a href="/~eclipse">eclipse</a>)<br /></li>
<li>Thomas Lake (<a href="/~tswsl1989/">tswsl1989</a>)</li>
<li>Nicholas Corlett (<a href="/~worldinsideme">worldinsideme</a>)</li>
<li>Callum Massey (<a href="/~kais58/">kais58</a>)</li>
<li>Imran Hussain (<a href="/~imranh/">imranh</a>)</li>
<li>Laurence Bowes (<a href="/~elbows/">elbows</a>)</li>
</ul>
<h2>Thanks</h2>
<p>
......@@ -58,6 +55,9 @@ exceptional help over the years.</p>
<li>James Frost (<a href="/~frosty">frosty</a>)</li>
<li>Peter Berry (<a href="/~pwb">pwb</a>)</li>
<li>Andrew Price (<a href="/~welshbyte">welshbyte</a>)</li>
<li>Chris Jones (<a href="/~rollercow">rollercow</a>)</li>
<li>Nicholas Corlett (<a href="/~worldinsideme">worldinsideme</a>)</li>
<li>Callum Massey (<a href="/~kais58/">kais58</a>)</li>
</ul>
<!--
<div class="box">
......@@ -104,4 +104,4 @@ exceptional help over the years.</p>
</div>
</div>
</div>
-->
\ No newline at end of file
-->
<p>Milliways has existed for a very long time and its regular users include members both past and present, as such there is a sense of community, and like any community a number of rules of etiquette have formed over the years.</p><p>The denizens of Milliways are usually polite and helpful to strangers and newcomers, but do expect those that wish to hang around to familiarise themselves with <em>&quot;the way things are&quot;</em> and play nice.&nbsp; As with most communities, newcomers need to show respect for the existing members and not expect the community to immediately adapt to accommodate them. </p><p>So the following is an attempt to describe some of the more usual pitfalls that a new user may come across.&nbsp;<br /></p><p><strong>Nothing Personal</strong></p><p>Milliways is a relaxed and informal environment, and as such there is often a lot of joking and messing around, a part of this that a newcomer may find difficult at first is the way that users will often ridicule and criticise each other, themselves, and anything else that catches their attention. If you happen to become the target of such comments then do not take it as a personal attack, it usually isn&#39;t.</p><p><strong>Spelling</strong> &nbsp;</p><p>Users are expected to express themselves using full and valid English sentences and words, the use of &quot;txt spk&quot; is not tolerated, and any bad spellings, abbreviations, and general bad use of English will typically result in corrections being offered, or scorn poured upon, as appropriate.&nbsp; Not only does proper use of English allow you to make yourself better understood, but it is good practice in preparation for the Real World (and &quot;txt spk&quot; really isn&#39;t any quicker than real English if you are practiced).<br /></p><p><strong>Meta-Questions</strong> aka Ask or Ask Not, there is no &quot;May I&quot;&nbsp;</p><p>If you have a question or something that you require help on, just come straight out and ask it, be as specific as you can, no asking &quot;can I ask a question?&quot;. Ask the actual question and anybody that is able and willing to help will do so, if you get no answer its because nobody can help you.&nbsp; Don&#39;t repeatedly ask the same question if no one is replying - if someone was able to help they would do, asking them over and over will just annoy and reduce the chance of someone helping in future.</p><p>Don&#39;t assume people know exactly what you are talking about just because your question is obvious in the context of your specific course.&nbsp; For example, a programming question like &quot;how do I do $foo&quot; is less helpful than &quot;how do I do $foo in $language&quot;.&nbsp; The former is likely to get you answers covering C, Python, Haskell, etc. rather than the language you are interested in.&nbsp;</p><p><strong>Flooding the Channel&nbsp;</strong></p><p>If you have anything that you wish to share with the world (for criticism generally ;) that is more than a line or two of text then you should make use of the SUCS website utilities of&nbsp; <a href="http://sucs.org/Tools/ShortURI" title="ShortURI" target="_blank">ShortURI </a> and <a href="http://sucs.org/Tools/PasteBin" target="_blank">PasteBin</a> as appropriate, and just paste the resulting url instead. this saves cluttering up the screens of all of the users. In the case of questions on items of coursework it would be a good idea only to paste the section around the actual problem, not your entire answer, as anybody can see the result.</p><p><strong>Further Reading</strong></p><p>Eric Raymond maintains quite a good (but long) document on how to ask questions in a technical forum.&nbsp; It is worth a read if you have time: <a href="http://www.catb.org/~esr/faqs/smart-questions.html">http://www.catb.org/~esr/faqs/smart-questions.html</a></p>
\ No newline at end of file
<p>
Milliways regulars include society members from both past and present, and some
who just like to use Milliways but have never been part of the society. There
is a unique sense of community, and you will often find passionate debate on
all sorts of subjects from programming to politics, plus the odd pun.
</p>
<p>
It can be a little daunting when first joining Milliways as the community is so
well established, but stick around and get to know how things work and you'll
soon find out how to get the most out of Milliways. If you find any way
that Milliways can be improved, let us know. Milliways is an open source
project developed by SUCS members since 1992 and it changes regularly!
</p>
<p>
Below are a few guidelines that every user should follow so that Milliways can
be a place where people want to hang out and tell their friends about.
</p>
<p>
<strong>You're Talking To Humans</strong>
</p>
<p>
It's important to keep in mind that there are real people behind the usernames
and that they all have their own backgrounds and experiences, and perhaps some
of them are even having a bad day. Use good judgement as to your familiarity
with other users and the power dynamic between you before choosing your words,
especially when using light hearted banter.
</p>
<strong>Asking Questions</strong>
</p>
<p>
It is tempting to ask if you can ask a question on Milliways, or if anyone is
around who knows about a certain subject, but if you have a question or
something that you require help with, the best thing to do is to ask that
question straight away. Provide as much context as you can. You may have to
wait for an answer outside of busy hours and if you do not get an answer it can
be useful to other users to report back when you've found the answer elsewhere.
If the question is likely to be answered with a quick web search, try that
first to save time. Note that students asking for coursework solutions will
likely encounter silence but asking very specific questions to help you
understand the concepts you need is highly encouraged.
</p>
<p>
<strong>Answering Questions</strong>
</p>
<p>
Particularly with newcomers, it's important to appreciate that asking a
question may be a difficult thing to do. We were all new students and new to
Milliways at one point. If you think the answer is obvious or simple, it's best
to keep that to yourself to avoid belittling the asker. Not everybody has the
same knowledge in their head.
</p>
<p>
<strong>Don't Flood the Talker</strong>
</p>
<p>
If you have anything that you wish to share on Milliways that is more than a
line or two of text then you should make use of a pastebin, such as the <a
href="http://sucs.org/Tools/PasteBin" target="_blank">SUCS PasteBin</a> and
there is also a <a href="http://sucs.org/Tools/ShortURI" title="ShortURI"
target="_blank">SUCS URI shortener</a> for posting very long links without
flooding, although many long URIs can be shortened greatly just by trimming the
ad tracking elements from them.
</p>
<p>We have put together a set of tools to make it easier to access SUCS services from your own computer. Note that you don't have to use the SUCS Tools to use our services - they're just a time-saving way to do so. The tools consist of the following:</p>
<ul>
<li><a href="/Tools/Desktop%20on%20Demand">Desktop on Demand (VNC)</a></li>
<li><a href="/Community/Milliways">Milliways chat rooms</a></li>
<li><a href="/Knowledge/Help/SUCS%20Services/Logging%20in%20remotely">SUCS remote shell (SSH)</a></li>
<li><a href="/">SUCS Website</a></li>
<li><a href="/Knowledge/Help/SUCS%20Services/Accessing%20your%20email">Your Email</a></li>
<li><a href="/Knowledge/Help/SUCS%20Services/Using%20WebDAV">Your Files (WebDAV)</a></li>
</ul>
<p>For more information about the services, click on the links.</p>
<h2>Downloading and installing the tools</h2>
<p>There are two versions of the tools. Which one you need depends on which operating system you use - <a href="#windows">Windows</a> or <a href="#macosx">Mac OS X</a>. If you use Linux, you probably already have an SSH and a VNC client installed and so don't need the SUCS Tools.</p>
<a name="windows"></a>
<h3>Windows</h3>
<ol>
<li><a href="/files/sucstools-latest.exe">Download SUCS Tools for Windows</a></li>
<li>Once the file has downloaded, double-click on it to start installing the SUCS Tools. A dialog box might appear telling you that "the publisher could not be verified." This is because we haven't paid for a digital certificate to sign the file with. Click "Run" to start the installation.</li>
<li>Follow the instructions provided by the installer.</li>
</ol>
<p>When the installation has completed, you can access the SUCS Tools via Start > All Programs > SUCS Tools.</p>
<a name="macosx"></a>
<h3>Mac OS X</h3>
<ol>
<li><a href="/files/SUCS-latest.dmg">Download SUCS Tools for Mac OS X</a></li>
<li>Once the file has downloaded, it might automatically open (it depends which browser you use). If it doesn't, double click on the file to mount the disk image.</li>
<li>Drag the SUCS folder to the Applications shortcut to install the tools.</li>
</ol>
<p>When the files have finished copying, you will find the SUCS Tools in your Applications folder.</p>
\ No newline at end of file
......@@ -7,5 +7,5 @@ hour access. There are usually members present through the week
so feel free to stop by.</p>
<p>Visit the <a href="Community">Community</a> section of the site for more
ways to get in touch with your fellow members, including <a href="Community/Milliways">Milliways</a>, our chat room.&nbsp;</p>
<p>SUCS celebrated its twenty-fifth birthday in the summer of 2014. We have compiled a site about the society's history. To read about it and contribute your part of the story, visit <a href="http://history.sucs.org/">http://history.sucs.org/</a>.</p>
<div style="text-align: center"><a href="http://history.sucs.org/"><img alt="SUCS history" height="50" src="https://sucs.org/images/sucshistory.png" width="231" /></a></div>
\ No newline at end of file
<p>SUCS celebrated its thirtieth birthday in the summer of 2019. We have compiled a site about the society's history. To read about it and contribute your part of the story, visit <a href="http://history.sucs.org/">http://history.sucs.org/</a>.</p>
<div style="text-align: center"><a href="http://history.sucs.org/"><img alt="SUCS history" height="50" src="https://sucs.org/images/sucshistory.png" width="231" /></a></div>