Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
70 changes: 70 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,70 @@
# VS Code
.vscode/

# bundle.js
public/bundle.js

# Logs
logs
*.log
npm-debug.log*
yarn-debug.log*
yarn-error.log*

# Runtime data
pids
*.pid
*.seed
*.pid.lock

# Directory for instrumented libs generated by jscoverage/JSCover
lib-cov

# Coverage directory used by tools like istanbul
coverage

# nyc test coverage
.nyc_output

# Grunt intermediate storage (http://gruntjs.com/creating-plugins#storing-task-files)
.grunt

# Bower dependency directory (https://bower.io/)
bower_components

# node-waf configuration
.lock-wscript

# Compiled binary addons (https://nodejs.org/api/addons.html)
build/Release

# Dependency directories
node_modules/
jspm_packages/

# TypeScript v1 declaration files
typings/

# Optional npm cache directory
.npm

# Optional eslint cache
.eslintcache

# Optional REPL history
.node_repl_history

# Output of 'npm pack'
*.tgz

# Yarn Integrity file
.yarn-integrity

# dotenv environment variables file
.env

# next.js build output
.next

# build directory
dist/
76 changes: 5 additions & 71 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,77 +1,11 @@
Assignment 1 - Hello World: Basic Deployment w/ Git, GitHub, Glitch
===
# a1-bwhetherington

*DUE: Thursday, August 29th by 11:59 AM (before the start of class!)*

This assignment is a "warm-up" exercise.
You will simply deploy the starting Web site that you will use this term to [Glitch](http://www.glitch.com/).

Treat this assignment as a chance to get up to speed on Git, GitHub, and Glitch.
If you already know these, great.
However, if you're new to them, spend several hours practicing, experimenting, and reading documentation.
In other words, don't just get your website up and done. You will need skills with these tools throughout the rest of the course.

Assignment details
---

Do the following to complete this assignment:

1. Fork the starting project code in GitHub. This repo contains:
* the server code, `server.js`
* A starting `index.html` file that you will edit as described below
* A package.json file that helps configure Glitch
* This README
2. Edit `index.html` to show the following information about you:
* your name and class at WPI (e.g. class of 2020) Note: Do not put any contact or personal information that you do not potentially want other people outside of this class to see.
* your major(s) and minor(s)
* previous computer science courses that you have taken at WPI
* your experience with the following technologies and methods (none, some, a lot)
* HTML
* CSS
* Java
* JavaScript
* Ruby
* Python
* unit testing
3. Test your project to make sure that when someone goes to your main page, it displays correctly. You can do this locally by simply running `node server.js` from within the assignment directory.

4. Modify the README file according to the specification below.
5. Commit and push all your changes to GitHub.
6. Deploy your project to Glitch. You can do this by [importing the repo from GitHub](https://medium.com/glitch/import-code-from-anywhere-83fb60ea4875)
7. Ensure that your project has the proper naming scheme (guide follows) so we can find it.
8. Create and submit a Pull Request to the original repo.

Naming and URL Scheme
---

You must use a consistent naming scheme for all projects in this course.
If we can't find it, we can't grade it.

By default Glitch often assigns your application a random name. To change it, click on the project dropdown menu in the upper left corner of Glitch. You will then see an additional text field displaying the project name in the resulting menu; click here to edit the name.

The name scheme should be `a1-yourGitHubUsername`.
The `a1` will need to be updated to `a2`, `a3`, and so on in future projects.

Resources
---

If you need a JavaScript/HTML/CSS refresher, see [Technology Fundamentals by Scott Murray](http://chimera.labs.oreilly.com/books/1230000000345/ch03.html#_html) and/or [JavaScript Codeacademy](https://www.codecademy.com/en/tracks/javascript).

If you need a Git/GitHub refreseher, see [GitHub Bootcamp](https://help.github.com/categories/bootcamp/), the [GitHub Guides](https://guides.github.com/) (especially the ones on Hello World, and Understanding the GitHub Flow, and Forking Projects), and [CodeSchool's Try Git Course](https://www.codeschool.com/courses/try-git).

Sample Readme (delete the above when you're ready to submit, and modify the below so with your links and descriptions)
---

Charlie Roberts
http://charlieroberts-a1.glitch.me

This project shows ...
[Benjamin Hetherington](http://a1-bwhetherington.glitch.me)

## Technical Achievements
- **Proved P=NP**: Using a combination of...
- **Solved AI**: ...

### Design Achievements
- **Re-vamped Apple's Design Philosophy**: Shown in `style.css`, the code...
- **Custom Server Script:** I solved the problems with the original server script by writing my own from scratch. In addition, it restricts access to only files in the static directory to ensure that people cannot access other files on the server.

## Design Achievements

- **Custom CSS:** I wrote my own CSS for the website. It is admittedly quite simple, but it is something.
28 changes: 0 additions & 28 deletions index.html

This file was deleted.

13 changes: 13 additions & 0 deletions package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

7 changes: 5 additions & 2 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,11 @@
"name": "cr-4241-simple-glitch",
"version": "0.1.0",
"description": "WPI CS 4241 first assignment",
"author": "Charlie Roberts",
"author": "Benjamin Hetherington",
"scripts": {
"start": "node server.js"
"start": "node server/server.js"
},
"dependencies": {
"mime": "^2.4.4"
}
}
20 changes: 0 additions & 20 deletions server.js

This file was deleted.

79 changes: 79 additions & 0 deletions server/server.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,79 @@
const fs = require("fs");
const http = require("http");
const mime = require("mime");
const path = require("path");

class Server {
/**
* Creates a server that serves files from the specified static directory. If
* a user tries to access the root domain, the specified index file is
* served.
* @param indexFile The index file
* @param staticDir The static file directory
*/
constructor(indexFile = "index.html", staticDir = null) {
this.indexFile = indexFile;
this.staticDir = staticDir;
}

/**
* Starts the server, listening on the specified port.
* @param port The port to listen on
*/
listen(port) {
const server = http.createServer((request, response) => {
console.log(`${request.method}: ${request.url}`);
const url = request.url.slice(1);
if (url === "") {
this.sendFile(this.indexFile, response);
} else {
this.sendFile(url, response);
}
});
console.log(`Server listening on port: ${port}...`);
server.listen(port);
}

/**
* Sends a 404 error to the specified response.
* @param fileName The file name that the user tried to access
* @param response The response to send the 404 error to
*/
send404(fileName, response) {
response.writeHeader(404);
response.end(`404 Error: Could not read file "${fileName}"`);
}

resolveFile(fileName) {
const baseDir = path.normalize(this.staticDir || "");
const relativePath = path.normalize(fileName);
const filePath = path.join(baseDir, relativePath);
return filePath;
}

/**
* Sends the file with the specified file name as part of the specified
* response. If there is an error reading the file, a 404 response is sent.
* Files are looked for in the specified static directory if one is specified
* when the server is created.
* @param fileName The file name to send
* @param response The response to send the file to
*/
sendFile(fileName, response) {
const file = this.resolveFile(fileName);
console.log(`Sending ${file}...`);
fs.readFile(file, "utf8", (err, data) => {
// Check if we have successfully read the file
if (err) {
this.send404(fileName, response);
} else {
const mimeType = mime.getType(fileName);
response.writeHeader(200, { "content-type": mimeType });
response.end(data, "utf8");
}
});
}
}

const server = new Server("index.html", "static");
server.listen(process.env.PORT || 3000);
Loading