diff --git a/.gitignore b/.gitignore index ea62f3f6..261cfc1d 100644 --- a/.gitignore +++ b/.gitignore @@ -36,3 +36,7 @@ node_modules .build build .DS_Store +build/apps/resume/index.html +resume.json +resume.json +build/apps/resume/index.html diff --git a/build/apps/resume/index.html b/build/apps/resume/index.html new file mode 100644 index 00000000..1eb77628 --- /dev/null +++ b/build/apps/resume/index.html @@ -0,0 +1,129 @@ + + + + + + + + + + + + + + + + + +
+ + + +

Resume for Russell Mehring

+ +

Contact:

+ + +

Education:

+ + +

Technology Summary:

+ + +

Work Experience:

+ + +

Current Tasks:

+ + +
+ + + + diff --git a/build/apps/resume/subscribe.html b/build/apps/resume/subscribe.html new file mode 100644 index 00000000..780978ea --- /dev/null +++ b/build/apps/resume/subscribe.html @@ -0,0 +1,68 @@ + + + + + + + + + + + + + + + + + +
+ +

Subscribe

+ +
+
+ + +
+
+ +
+
+ Submit +
+
+ +
+

Current Subscribers

+ +
+
+ + + + diff --git a/build/apps/todos/high.html b/build/apps/todos/high.html new file mode 100644 index 00000000..631af3ff --- /dev/null +++ b/build/apps/todos/high.html @@ -0,0 +1,197 @@ + + + + + + + + + + + + + + + + + + + + + + +
+
+
+

TASK MANAGEMENT

+
+
+
+ +
+
+ +
+
+
+ + + +
+
+ Add A Task: +
+ + +
+
+
+ + +
+
+ + + +
+
+ + + \ No newline at end of file diff --git a/build/apps/todos/img/Thumbs.db b/build/apps/todos/img/Thumbs.db new file mode 100644 index 00000000..916b482f Binary files /dev/null and b/build/apps/todos/img/Thumbs.db differ diff --git a/build/apps/todos/img/flatirons.jpg b/build/apps/todos/img/flatirons.jpg new file mode 100644 index 00000000..1d3ea0ca Binary files /dev/null and b/build/apps/todos/img/flatirons.jpg differ diff --git a/build/apps/todos/inbox.html b/build/apps/todos/inbox.html new file mode 100644 index 00000000..4839a19c --- /dev/null +++ b/build/apps/todos/inbox.html @@ -0,0 +1,188 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + +
+

Adding a Task

+
+
+ + +
+
+ +
+
+ + +
+
+ +
+
+ + +
+
+ +
+
+ + +
+
+ + +
+
+ Submit +
+
+ +
+ + + + + + + + + + \ No newline at end of file diff --git a/build/apps/todos/index.html b/build/apps/todos/index.html new file mode 100644 index 00000000..71ac6709 --- /dev/null +++ b/build/apps/todos/index.html @@ -0,0 +1,249 @@ + + + + + + + + + + + + + + + + + + + + + + +
+
+
+

TASK MANAGEMENT

+
+
+
+ + + +
+
+ + + + +
+
+
+ + + + + + +
+
+ Add A Task: +
+ +
+
+ +
+ +
+
+ + + + + +
+
+ + + + diff --git a/build/apps/todos/low.html b/build/apps/todos/low.html new file mode 100644 index 00000000..dcc9c32d --- /dev/null +++ b/build/apps/todos/low.html @@ -0,0 +1,199 @@ + + + + + + + + + + + + + + + + + + + + + + +
+
+
+

TASK MANAGEMENT

+
+
+
+ + +
+
+ +
+
+
+ + + + +
+
+ Add A Task: +
+ + +
+
+
+ + +
+
+ + + +
+
+ + + + \ No newline at end of file diff --git a/build/apps/todos/medium.html b/build/apps/todos/medium.html new file mode 100644 index 00000000..ee26c4e3 --- /dev/null +++ b/build/apps/todos/medium.html @@ -0,0 +1,197 @@ + + + + + + + + + + + + + + + + + + + + + + +
+
+
+

TASK MANAGEMENT

+
+
+
+ +
+
+ +
+
+
+ + + + +
+
+ Add A Task: +
+ + +
+
+
+ + +
+
+ + + +
+
+ + + + \ No newline at end of file diff --git a/build/hackathons/01-18/index.html b/build/hackathons/01-18/index.html new file mode 100644 index 00000000..7a240847 --- /dev/null +++ b/build/hackathons/01-18/index.html @@ -0,0 +1,81 @@ + + + + + + + + + + + +
+

Hackathon: ToDos v2

+

Date: 01-18-2016

+

Objective

+

Your clients liked the initial version of the ToDos app you built. They came +back with a list of new requirements. Build them!

+

Due

+

Tuesday @ 11:59pm, 1/19/2016

+

Requirements

+ +

Hints

+

Priority

+

There are at least two approaches to showing tasks with different priorities on separate +pages:

+
    +
  1. Keep the current Firebase data structure. Each page retrieves the entire list +of tasks and does its own filtering based on the priority value, or
  2. +
  3. Modify the Firebase data structure so that tasks are organized by three separate +child data locations, such as todos/low, todos/medium, and todos/high.
  4. +
+

Make your own decision which approach to take. You are not limited to these two +approaches. When we meet again next Monday. We will discuss the props +and cons of various approaches.

+

Real-time Syncing

+ + +
+ + + + diff --git a/build/index.html b/build/index.html new file mode 100644 index 00000000..71183254 --- /dev/null +++ b/build/index.html @@ -0,0 +1,95 @@ + + + + + + + + + + + +
+

Book

+

Everything I’ve learned from UCDD 2 - Spring 2016.

+

Apps

+ +

Learning

+ +

Hackathons

+ + +
+ + + + diff --git a/build/learning/intro/index.html b/build/learning/intro/index.html new file mode 100644 index 00000000..537bf7c8 --- /dev/null +++ b/build/learning/intro/index.html @@ -0,0 +1,106 @@ + + + + + + + + + + + +
+

Intro

+

Welcome to the 2016 edition of UCDD II!

+

Today is introduction. We will go through the three major learning components +of this class:

+
    +
  1. Team Learning (Due: every Friday @ 11:59pm)
  2. +
  3. Individual Learning (Due: every Sunday @ 11:59pm)
  4. +
  5. Hackathon (starts the following Monday @ 4pm)
  6. +
+

Team Learning

+

Objective

+

Develop a TODO list app.

+

Teaming

+ +

Milestones

+ +

Submission

+ +

Individual Learning

+

Objective

+ +

Submission

+ +

Hackathon

+

At the beginning of each hackathon, a list of new (secret) feature requirements will +be released. Your team will be given some amount of time to add these requirements +to your app.

+

Feature Requirements

+ +

Submission

+ +

Presentation

+

After the time is up, we will have presentations from teams. Sometimes we +have time for every team to present. Sometimes we will select only a few teams.

+ +
+ + + + diff --git a/build/learning/week1/index.html b/build/learning/week1/index.html new file mode 100644 index 00000000..36c3cafa --- /dev/null +++ b/build/learning/week1/index.html @@ -0,0 +1,66 @@ + + + + + + + + + + + +
+

Week 1

+

Team Learning

+

Objective

+

Enhance your team’s TODO list app.

+

Requirements

+ +

Individual Learning

+ +

Submission

+ +

Hackathon

+

Details will be announced on Monday 4pm.

+ + +
+ + + + diff --git a/build/learning/week2/index.html b/build/learning/week2/index.html new file mode 100644 index 00000000..675bafbc --- /dev/null +++ b/build/learning/week2/index.html @@ -0,0 +1,87 @@ + + + + + + + + + + + +
+

Week 2

+

Team Learning

+

Objective

+

ToDos App v.3

+

Your clients came back with even more requirements. They want to be able +to edit the tasks directly through the app (not through the Firebase dashboard).

+

Due

+

Friday @ 11:59pm, 1/22/2016

+

Requirements

+ +

Individual Learning

+

Due

+

Sunday @ 11:59pm, 1/24/2016

+

Requirements

+ +

Submission

+ +

Hackathon

+

Details will be announced on Monday 4pm.

+ + +
+ + + + diff --git a/firebase.json b/firebase.json index ad3818e3..2537b7bc 100644 --- a/firebase.json +++ b/firebase.json @@ -1,5 +1,5 @@ { - "firebase": "ucdd2-book", + "firebase": "glowing-heat-5994", "public": "build", "ignore": [ "firebase.json", diff --git a/package.json b/package.json index 88d3a6c6..cd352a3e 100644 --- a/package.json +++ b/package.json @@ -25,6 +25,8 @@ "metalsmith-serve": "0.0.4", "metalsmith-watch": "^1.0.1", "node-random-name": "^1.0.1", - "nunjucks": "^2.3.0" + "nunjucks": "^2.3.0", + "chance": "1.0.1", + "firepad": "1.3.0" } } diff --git a/resume.json b/resume.json new file mode 100644 index 00000000..e363b5b7 --- /dev/null +++ b/resume.json @@ -0,0 +1,41 @@ +{ + "Contact" : { + "Cell" : "303-204-2852", + "Email" : "mehringr@colorado.edu", + "Github" : "https://github.com/BenedictRM" + }, + + "Technology" : { + "Languages" : "C, C++, Java, Python", + "Microsoft" : "Word, Excel, Outlook, PowerPoint", + "Databases" : "SPSS, MySQL" + }, + + "Experience" : { + "HitchhikerStudio" : "- Founded company with small team with goal to change the world through play, - Currently lead programmer on game app project, - Leading development and design teams by following Agile practices", + "UCB" : "- Graded individual student's code and interviewed students about their code, - Assigned grades based on code and interview assessment, - Tutored students as necessary", + "ATLAS" : "- Managed data for research on NSF funding dissemination, - Guided toward effective STEM education, - Led data entry team on a large-scale project directed toward computing and information technology education, - Performed excellent research and strong report writing for several projects, - Generally centered around STEM education fields" + }, + + "Education" : { + "Degree" : { + "Masters" : { + "School" : "University of Colorado at Boulder", + "GPA" : "4.0", + "GradDate" : "May 2016" + }, + "Bachelors" : { + "School" : "University of Colorado at Boulder", + "GPA" : "3.6", + "GradDate" : "May 2008" + }, + "Associates" : { + "School" : "Front Range Community College", + "GPA" : "3.7", + "GradDate" : "Dec 2005" + } + } + }, + "Subscribers" : { + } +} \ No newline at end of file diff --git a/src/apps/parking/SFstreet.jpg b/src/apps/parking/SFstreet.jpg new file mode 100644 index 00000000..5fbe121a Binary files /dev/null and b/src/apps/parking/SFstreet.jpg differ diff --git a/src/apps/parking/garages.html b/src/apps/parking/garages.html index df7b253d..ce15b990 100644 --- a/src/apps/parking/garages.html +++ b/src/apps/parking/garages.html @@ -5,52 +5,74 @@ - + + - + + + + + + +

Garages

-
diff --git a/src/apps/parking/garages_map.html b/src/apps/parking/garages_map.html index ddaec15a..58165815 100644 --- a/src/apps/parking/garages_map.html +++ b/src/apps/parking/garages_map.html @@ -5,7 +5,7 @@ - + @@ -21,15 +21,29 @@ - -
- -

Garages Map

-
- -
- - diff --git a/src/apps/parking/index.html b/src/apps/parking/index.html index bc60bf4b..270606f8 100644 --- a/src/apps/parking/index.html +++ b/src/apps/parking/index.html @@ -1 +1,58 @@ -TODO: + + + + + + + + + + + + + +
+

Find parking in San Francisco

+
+ Garage List + Garage Map +
+ +
+ + diff --git a/src/apps/resume/index.html b/src/apps/resume/index.html index 1ebc5297..1eb77628 100644 --- a/src/apps/resume/index.html +++ b/src/apps/resume/index.html @@ -16,33 +16,114 @@
+ + + +

Resume for Russell Mehring

-

Tom Yeh

- -

Favorite Programming Languages

-
diff --git a/src/apps/resume/subscribe.html b/src/apps/resume/subscribe.html index fadeadce..780978ea 100644 --- a/src/apps/resume/subscribe.html +++ b/src/apps/resume/subscribe.html @@ -40,18 +40,28 @@

Current Subscribers

diff --git a/src/apps/todos/high.html b/src/apps/todos/high.html index 1333ed77..631af3ff 100644 --- a/src/apps/todos/high.html +++ b/src/apps/todos/high.html @@ -1 +1,197 @@ -TODO + + + + + + + + + + + + + + + + + + + + + + +
+
+
+

TASK MANAGEMENT

+
+
+
+ +
+
+ +
+
+
+ + + +
+
+ Add A Task: +
+ + +
+
+
+ + +
+
+ + + +
+
+ + + \ No newline at end of file diff --git a/src/apps/todos/img/Thumbs.db b/src/apps/todos/img/Thumbs.db new file mode 100644 index 00000000..916b482f Binary files /dev/null and b/src/apps/todos/img/Thumbs.db differ diff --git a/src/apps/todos/img/flatirons.jpg b/src/apps/todos/img/flatirons.jpg new file mode 100644 index 00000000..1d3ea0ca Binary files /dev/null and b/src/apps/todos/img/flatirons.jpg differ diff --git a/src/apps/todos/inbox.html b/src/apps/todos/inbox.html index e444c4ab..4839a19c 100644 --- a/src/apps/todos/inbox.html +++ b/src/apps/todos/inbox.html @@ -1,85 +1,188 @@ - - - - - - - - - - + + + + + + + + + + + + + + + + + + - - - - + -
+ + + +

Adding a Task

+
+
+ + +
+
-
- - -
+
+ + +
-
- - -
+
+ + +
+
+ +
+
+ + +
-
-
- Submit -
+
+ Submit +
-
- - + + - // TODO: add logic to validate form data before pushing the - // data to firebase, only push/set if the required fields are not empty + - // TODO: study why push() and set() are both necessary - var newTaskRef = taskListRef.push() - newTaskRef.set(taskObject) - }) + - // IMPORTANT!! initialize materializecss select - $(document).ready(function() { - $('select').material_select(); - }); - - - + \ No newline at end of file diff --git a/src/apps/todos/index.html b/src/apps/todos/index.html index 6e2fd6f6..71ac6709 100644 --- a/src/apps/todos/index.html +++ b/src/apps/todos/index.html @@ -1,42 +1,249 @@ - - - - - - + + + + + + + + + + + + + + - - - + + + + + + +
+
+
+

TASK MANAGEMENT

+
+
+
- - - - + + +
+
+
  • Current Tasks:

+
+
    +
      +
      +
      +
      + + + + + - - + + +
      +
      + Add A Task: +
      + +
      +
      + +
      + +
      +
      + + + + + +
      +
      + + + + diff --git a/src/apps/todos/low.html b/src/apps/todos/low.html index 1333ed77..dcc9c32d 100644 --- a/src/apps/todos/low.html +++ b/src/apps/todos/low.html @@ -1 +1,199 @@ -TODO + + + + + + + + + + + + + + + + + + + + + + +
      +
      +
      +

      TASK MANAGEMENT

      +
      +
      +
      + + +
      +
      +
        +
        +
        +
        + + + + +
        +
        + Add A Task: +
        + + +
        +
        +
        + + +
        +
        + + + +
        +
        + + + + \ No newline at end of file diff --git a/src/apps/todos/medium.html b/src/apps/todos/medium.html index 1333ed77..ee26c4e3 100644 --- a/src/apps/todos/medium.html +++ b/src/apps/todos/medium.html @@ -1 +1,197 @@ -TODO + + + + + + + + + + + + + + + + + + + + + + +
        +
        +
        +

        TASK MANAGEMENT

        +
        +
        +
        + +
        +
        +
          +
          +
          +
          + + + + +
          +
          + Add A Task: +
          + + +
          +
          +
          + + +
          +
          + + + +
          +
          + + + + \ No newline at end of file diff --git a/src/apps/together/mockup-team/coding.html b/src/apps/together/mockup-team/coding.html new file mode 100644 index 00000000..ce9789f0 --- /dev/null +++ b/src/apps/together/mockup-team/coding.html @@ -0,0 +1,81 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
           
          + +
          +
          + +
          +
          +
          +
          +
          + + + + \ No newline at end of file diff --git a/src/apps/together/mockup-team/images/code.jpg b/src/apps/together/mockup-team/images/code.jpg new file mode 100644 index 00000000..0f3f6d39 Binary files /dev/null and b/src/apps/together/mockup-team/images/code.jpg differ diff --git a/src/apps/together/mockup-team/images/css_code.jpg b/src/apps/together/mockup-team/images/css_code.jpg new file mode 100644 index 00000000..304fb57e Binary files /dev/null and b/src/apps/together/mockup-team/images/css_code.jpg differ diff --git a/src/apps/together/mockup-team/images/firebase-logo.jpg b/src/apps/together/mockup-team/images/firebase-logo.jpg new file mode 100644 index 00000000..d09ec30c Binary files /dev/null and b/src/apps/together/mockup-team/images/firebase-logo.jpg differ diff --git a/src/apps/together/mockup-team/images/firebase-logo.png b/src/apps/together/mockup-team/images/firebase-logo.png new file mode 100644 index 00000000..3a466eaa Binary files /dev/null and b/src/apps/together/mockup-team/images/firebase-logo.png differ diff --git a/src/apps/together/mockup-team/images/gitterHQ.png b/src/apps/together/mockup-team/images/gitterHQ.png new file mode 100644 index 00000000..5442f189 Binary files /dev/null and b/src/apps/together/mockup-team/images/gitterHQ.png differ diff --git a/src/apps/together/mockup-team/index.html b/src/apps/together/mockup-team/index.html index 71d035bf..050b89ec 100644 --- a/src/apps/together/mockup-team/index.html +++ b/src/apps/together/mockup-team/index.html @@ -1,3 +1,75 @@ -TODO: + + + -
          Links to the pages of your team's app's mockup
          + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
          +
          +
          +
          +
          +

          Code Together

          + +

          Parallax is an effect where the background content or image in this case, is moved at a different speed than the foreground content while scrolling.

          + + +
          +
          +
          +
          +
          + + + + + + \ No newline at end of file diff --git a/src/apps/together/mockup-team/parallax_init.js b/src/apps/together/mockup-team/parallax_init.js new file mode 100644 index 00000000..4171bda8 --- /dev/null +++ b/src/apps/together/mockup-team/parallax_init.js @@ -0,0 +1,3 @@ +$(document).ready(function(){ + $('.parallax').parallax(); + }); \ No newline at end of file diff --git a/src/apps/together/mockup/code/index.html b/src/apps/together/mockup/code/index.html new file mode 100644 index 00000000..b50f1fb0 --- /dev/null +++ b/src/apps/together/mockup/code/index.html @@ -0,0 +1,133 @@ + + + + + + + +

          Code Together

          + +
          +
          + +
          +
          +
          import java.math.BigInteger;
          +import java.util.Random;
          +
          +public class PrimeEx {
          +
          +    /**
          +     * @param args
          +     */
          +    public static void main(String[] args) {
          +        printTest(10, 4);
          +        printTest(2, 2);
          +        printTest(54161329, 4);
          +        printTest(1882341361, 2);
          +        printTest(36, 9);
          +
          +        System.out.println(isPrime(54161329) + " expect false");
          +        System.out.println(isPrime(1882341361) + " expect true");
          +        System.out.println(isPrime(2) + " expect true");
          +        int numPrimes = 0;
          +        Stopwatch s = new Stopwatch();
          +        s.start();
          +        for(int i = 2; i < 10000000; i++) {
          +            if(isPrime(i)) {
          +                numPrimes++;
          +            }
          +        }
          +        s.stop();
          +        System.out.println(numPrimes + " " + s);
          +        s.start();
          +        boolean[] primes = getPrimes(10000000);
          +        int np = 0;
          +        for(boolean b : primes)
          +            if(b)
          +                np++;
          +        s.stop();
          +        System.out.println(np + " " + s);
          +
          +        System.out.println(new BigInteger(1024, 10, new Random()));
          +    }
          +
          +    public static boolean[] getPrimes(int max) {
          +        boolean[] result = new boolean[max + 1];
          +        for(int i = 2; i < result.length; i++)
          +            result[i] = true;
          +        final double LIMIT = Math.sqrt(max);
          +        for(int i = 2; i <= LIMIT; i++) {
          +            if(result[i]) {
          +                // cross out all multiples;
          +                int index = 2 * i;
          +                while(index < result.length){
          +                    result[index] = false;
          +                     index += i;
          +                }
          +            }
          +        }
          +        return result;
          +    }
          +
          +
          +    public static void printTest(int num, int expectedFactors) {
          +        Stopwatch st = new Stopwatch();
          +        st.start();
          +        int actualFactors = numFactors(num);
          +        st.stop();
          +        System.out.println("Testing " + num + " expect " + expectedFactors + ", " +
          +                "actual " + actualFactors);
          +        if(actualFactors == expectedFactors)
          +            System.out.println("PASSED");
          +        else
          +            System.out.println("FAILED");
          +        System.out.println(st.time());
          +    }
          +
          +    // pre: num >= 2
          +    public static boolean isPrime(int num) {
          +        assert num >= 2 : "failed precondition. num must be >= 2. num: " + num;
          +        final double LIMIT = Math.sqrt(num);
          +        boolean isPrime = (num == 2) ? true : num % 2 != 0;
          +        int div = 3;
          +        while(div <= LIMIT && isPrime) {
          +            isPrime = num % div != 0;
          +            div += 2;
          +        }
          +        return isPrime;
          +    }
          +
          +    // pre: num >= 2
          +    public static int numFactors(int num) {
          +        assert num >= 2 : "failed precondition. num must be >= 2. num: " + num;
          +        int result = 0;
          +        final double SQRT = Math.sqrt(num);
          +        for(int i = 1; i < SQRT; i++) {
          +            if(num % i == 0) {
          +                result += 2;
          +            }
          +        }
          +        if(num % SQRT == 0)
          +            result++;
          +        return result;
          +    }
          +
          +}
          +                    
          +                
          +
          +
          + + diff --git a/src/apps/together/mockup/data.md b/src/apps/together/mockup/data.md index 5dedd6fb..bc0c5611 100644 --- a/src/apps/together/mockup/data.md +++ b/src/apps/together/mockup/data.md @@ -4,4 +4,15 @@ layout: layout.hbs # Data Models -TODO +We will use an event driven data model. We base this on operational transform +technology. + +The state will be a string. This will be represented by an array of bytes. We +obtain this array of bytes by running a series of actions on the text (eg insert +"Hello Wofld", backspace.) These actions contain a summary of the actions that +have happened before, to allow for OT in constant time. Storing the list of +actions allows compaction and infinite undo, with respect to both the buffer or +the user. + +Specifically, we will have the text buffer for each project, a list of users, +and a list of actions that have been commited. \ No newline at end of file diff --git a/src/apps/together/mockup/index.html b/src/apps/together/mockup/index.html index d8752c47..9311e517 100644 --- a/src/apps/together/mockup/index.html +++ b/src/apps/together/mockup/index.html @@ -1,4 +1,52 @@ -TODO: - -
          Links to the pages of your app's mockup
          -
          Writeup of your ideation
          + + + + +
          +

          Mockup

          +

          Code Together

          +

          Writeup

          +
          What is the name of your app?
          + Code Together +
          What collaborative activity can people do together using your app?
          + Users can create apps and code with the help of their friends and teammates. +
          What is the ideal number of concurrent users (must be at least 10 but no more than 40)?
          + An ideal number of concurrent users would be around 15. More than + this will cause unavoidable conflicts, unless the code base is huge. + However, it is enough users that the full pain of typical team + coding tools like code reviews and git start to show their + weakenesses. +
          What skills do people need in order to do this activity?
          + Users must be able to user a web browser and keyboard. Hopefully, + they will also have a microphone or webcam. This will let them code + much more easily than current tools, with a mentor. Unlike + conventional tools, like Unix and Vim, this will be very easy to + learn, and social. Hopefully this will encourage more beginners, + especially people who would otherwise not be interested in computer + science. +
          Is this activity for fun or for something practical?
          + This is going to be a practical tool at first, and targetted at + users who have experienced the pain of coding with a group, using + tools like Vim and Git. However, hopefully the tool will be so easy + to use that beginners will start using it. +
          How can a person see what everyone else is doing?
          + Users can see what others are doing by viewing their cursor, + automatic running of tests to detect conflicting changes, and video + communication. Users will be able to see when changes they make + affect another user because we will run unit tests automatically, + and show the results in the IDE. +
          How can a person see the most recent result of everyone’s collaborative effort?
          + Users can see other's activity in the cursor position log, and also + can see all open chat rooms. Viewing the open chat rooms will let + users get expert help when they need it. +
          What can an admin see (i.e., God’s mode)?
          + We will have a page that will list all user's cursor positions. This + will let us anticipate conflicting changes, and avoid effort + duplication. +
          + + diff --git a/src/apps/together/proposal/bdd.md b/src/apps/together/proposal/bdd.md index ea722beb..50f5d894 100644 --- a/src/apps/together/proposal/bdd.md +++ b/src/apps/together/proposal/bdd.md @@ -4,32 +4,98 @@ layout: layout.hbs # Features -## Feature: My App's Feature 1 +## Feature: Text Chatrooms ``` gherkin -TODO: - +Feature: Text Chatrooms + As a user of Code Together + I want to be able to chat with my team + So that I can collabarate + + Scenario: Enter a message + Given I am logged into Code Together + And Iam in a code project + And I selected the chat message box + When I type text in the chat window + And I press enter + Then the other users can see my message + + Scenario: Look Through Chat History + Given I am logged into Code Together + And Iam in a code project + And I selected the chat message box + When I scroll + Then I should see past messages + + Scenario: Select a User + Given I am logged into Code Together + And Iam in a code project + And I selected the chat message box + When I select a user + Then I should see their profile + + Scenario: I don't understand a function + Given I have a question about a function + When other users see my chat + Then expirienced users can answer my question ``` -## Feature: My App's Feature 2 +## Feature: Login ``` gherkin -TODO: - +Feature: Login + As a user + I want to let other users see who I am and + I want to get credit for my contribution and + I want to get social valdiation. + Scenario: + Given that I am a new user + When I want to contribute to a project + I should be able to create an account. ``` -## Feature: My App's Feature 3 +## Feature: Video chat ``` gherkin -TODO: - +Feature: Video chat + As a user of code together + When I open up my project page + I want to be able to chat with other + Scenario: Start a video chat + Given that I start working on a project + Then I should be able to invite people to the video chat + Scenario: End a video chat + Given that I am in a video chat + Then I should be able to end the video chat + Scenario: Mute a video chat + Given that I am in a video chat + Then I should be able to mute myself and others in the video chat + Scenario: Invite others + Given that I am in a video chat with other people + Then I should be able to invite people not currently in the video chat into the video chat + Scenario: + I want to stop sending video but not exit video chat. + I should be able to disable the video feed and start it again with ease ``` -## Feature: My App's Feature 4 +## Feature: Collaborative coding ``` gherkin -TODO: - +Feature: Collaborative coding + As a user i want to be able to present my code + I want other users / partner to be able to edit my code + Scenario: Working on a group project + Given a team project and a group of people, + When I want to make change + Then I can make a change instantly. + Scenario: Concurrent editing + Given that other users are editing a file, + When they make a change, + Then the change should be shown to me. + Scenario: Understanding code + Given a file and a confusing function, + When I ask somebody for help, + I should be able to see their cursor. ``` diff --git a/src/apps/together/proposal/index.md b/src/apps/together/proposal/index.md index 2873c593..ddd8c897 100644 --- a/src/apps/together/proposal/index.md +++ b/src/apps/together/proposal/index.md @@ -6,7 +6,7 @@ layout: layout.hbs ## Team Members -(TODO: Names) +Dominic Tonozzo, Freerik Lohner, Daniel Maxson, Jacob Reman ## Ideation @@ -15,35 +15,35 @@ the integration of creative ideas from every team member. * What is the name of your app? -(TODO: Answer) + Code Together * What collaborative activity can people do together using your app? -(TODO: Answer) +Users can create apps and code with the help of their friends and teammates. * What is the ideal number of concurrent users (must be at least 10 but no more than 40)? -(TODO: Answer) + An ideal number of concurrent users would be around 15. More than this will cause conflicts, unless the code base is huge. However, it is enough users that the full pain of typical team coding tools like code reviews and git start to show their weakenesses. * What skills do people need in order to do this activity? -(TODO: Answer) + Users must be able to user a web browser and keyboard. Hopefully, they will also have a microphone or webcam. This will let them code much more easily than current tools, with a mentor. Unlike conventional tools, like Unix and Vim, this will be very easy to learn, and social. Hopefully this will encourage more beginners, especially people who would otherwise not be interested in computer science. * Is this activity for fun or for something practical? -(TODO: Answer) +This is going to be a practical tool at first, and targetted at users who have experienced the pain of coding with a group, using tools like Vim and Git. However, hopefully the tool will be so easy to use that beginners will start using it. * How can a person see what everyone else is doing? -(TODO: Answer) +Users can see what others are doing by viewing their cursor, automatic running of tests to detect conflicting changes, and video communication. Users will be able to see when changes they make affect another user because we will run unit tests automatically, and show the results in the IDE. * How can a person see the most recent result of everyone's collaborative effort? -(TODO: Answer) +Users can see other's activity in the cursor position log, and also can see all open chat rooms. Viewing the open chat rooms will let users get expert help when they need it. * What can an admin see (i.e., God's mode)? -(TODO: Answer) +We will have a page that will list all user's cursor positions. This will let us anticipate conflicting changes, and avoid effort duplication. ## Contributions @@ -52,18 +52,15 @@ It's okay to credit multiple people for the same idea. The rationale of this section of the proposal is to demonstrate that everyone on the team contributes useful ideas. -* Person 1 - * idea - * idea -* Person 2 - * idea - * idea -* Person 3 - * idea - * idea -* Person 4 - * idea - * idea +* Dominic + * Code together +* Jacob + * Chat + * Communal Shopping List +* Daniel + * Election system +* Frederik + * Polling system ## Plan @@ -73,15 +70,15 @@ efforts may be required from your team to develop the together app. * What existing components of the uber app your team can reuse? -(TODO: Answer) +Not very much. It would be really hard to use any our previous apps except maybe using the layout to get use started for a home page. * What new components and features your team may need to build? -(TODO: Answer) +We will have to build a chat window, a dynamic list of coding tasks, a coding window. * What new skills your team will still need to acquire? -(TODO: Answer) +This is a pretty open ended question but we will have to look into realtime data and making updates on others webpages as well. There will also have to be some new containers that will have to be worked with. ## What's Next? diff --git a/src/apps/together/proposal/random_chat.js b/src/apps/together/proposal/random_chat.js new file mode 100644 index 00000000..ff916112 --- /dev/null +++ b/src/apps/together/proposal/random_chat.js @@ -0,0 +1,75 @@ +var _ = require('lodash'); +var random_name = require('node-random-name'); +var Firebase = require('firebase'); +var Chance = require('chance'); + +// Instantiate Chance so it can be used +var chance = new Chance(); + +// simualate a random person entering, staying for a duration, and leaving +function simulate() { + + // generate a random person with a random name, + // random location, and random duration + var name = random_name(); + var chatLine = ""; + var duration = 1 + 5 * Math.random(); + + chatLine += chance.sentence({words: 7}); + + var person = { + name: name, + duration: duration, + chat: chatLine + }; + + enter(person); + + // simulate this person leaving after 'duration' seconds + setTimeout(function() { + leave(person); + }, duration * 1000); +} + +function enter(person) { + console.log('enter', person); + // Put this person in the Firebase + var ref = new Firebase('https://hello-jtresman.firebaseio.com/users'); + ref.child(person.name).set({ + name: person.name, + chat: person.chat + }); +} + +function leave(person) { + console.log('leave', person); + var ref = new Firebase('https://hello-jtresman.firebaseio.com/users') + var onComplete = function(error) { + if (error) { + console.log('Leave Synchronization failed'); + } else { + console.log('Leave Synchronization succeeded'); + } + }; + + ref.child(person.name).remove(onComplete); + +} + +function clear() { + // TODO: remove all people from the Firebase + var ref = new Firebase('https://hello-jtresman.firebaseio.com/users') + var onComplete = function(error) { + if (error) { + console.log('Clear Synchronization failed'); + } else { + console.log('Clear Synchronization succeeded'); + } + }; + + ref.remove(onComplete) +} +// clear the firebase, so that the simulation always starts from no one +clear() + // run each second +setInterval(simulate, 2000) \ No newline at end of file diff --git a/src/apps/together/proposal/random_lines_chars.js b/src/apps/together/proposal/random_lines_chars.js new file mode 100644 index 00000000..697cfc6e --- /dev/null +++ b/src/apps/together/proposal/random_lines_chars.js @@ -0,0 +1,106 @@ +var _ = require('lodash'); +var random_name = require('node-random-name'); +var Firebase = require('firebase'); +var Chance = require('chance'); +var Firepad = require('firepad'); + +// Instantiate Chance so it can be used +var chance = new Chance(); +var RootFirebase = 'https://glowing-heat-5994.firebaseio.com'; +var firebaseURL = RootFirebase + '/users'; + +// simualate a random person entering, staying for a duration, and leaving +function simulate() { + + // generate a random person with a random name, + // random location, and random duration + var name = random_name(); + var chatLine = ""; + var duration = 1 + 5 * Math.random(); + chatLine += chance.sentence({words: 7}); + + var person = { + name: name, + duration: duration, + chat: chatLine, + id: Math.floor(Math.random() * 10) + }; + + enterText(person, chatLine); + + // simulate this person leaving after 'duration' seconds + setTimeout(function() { + leave(person); + }, duration * 1000); +} + +function enter(person, pos) { + console.log('enter', person); + // Put this person in the Firebase + char_array = []; + for (var i = 0, len = person.chat.length; i < len; i++) { + char_array.push(person.chat[i]) + } + var ref = new Firebase(firebaseURL); + ref.child(person.id).set({ + name: person.name, + chat: person.chat, + characters: char_array, + color: '#'+Math.floor(Math.random()*16777215).toString(16), + cursor: { + position: pos, + selectionEnd: pos + } + }); +} + +function enterText(person, newLine, line){ + var headless = new Firepad.Headless(RootFirebase); + newLine += "\n"; + headless.getText(function(text){ + var pos = Math.floor(Math.random() * text.length); + while (text[pos] != "\n" && pos < text.length) { + pos = pos + 1; + }; + pos = pos + 1; + var chars = text.split(''); + chars.splice(pos, 0, newLine); + text = chars.join(''); + headless.setText(text, function(){ + enter(person, pos); + }); + }); +} + +function leave(person) { + console.log('leave', person); + var ref = new Firebase(firebaseURL) + var onComplete = function(error) { + if (error) { + console.log('Leave Synchronization failed'); + } else { + console.log('Leave Synchronization succeeded'); + } + }; + + ref.child(person.name).remove(onComplete); + +} + +function clear() { + // TODO: remove all people from the Firebase + var ref = new Firebase(firebaseURL) + var onComplete = function(error) { + if (error) { + console.log('Clear Synchronization failed'); + } else { + console.log('Clear Synchronization succeeded'); + } + }; + + ref.remove(onComplete) +} +// clear the firebase, so that the simulation always starts from no one +clear() +// run each second +setInterval(simulate, 2000) diff --git a/src/apps/together/proposal/spec.md b/src/apps/together/proposal/spec.md index cb5977ec..1fde6bc7 100644 --- a/src/apps/together/proposal/spec.md +++ b/src/apps/together/proposal/spec.md @@ -8,86 +8,65 @@ layout: layout.hbs Our app uses the following structure for the database backend: -* foo - * bar - * ss - * xx - * messages +* actions on text + * user + * position + * action (insert, delete) + * currently existing text +* messages + * user + * content + * timestamp # Actions The major actions of our app are: -* (TODO: action name) -* (TODO: action name) -* (TODO: action name) -* (TODO: action name) -* (TODO: action name) +Posting message +Editing text +Video chatting -## Action: (TODO: name) +## Action: Post message -(TODO: cases) - -## Action: (TODO: name) - -(TODO: cases) - -## Action: (TODO: name) - -(TODO: cases) - -## Action: (TODO: name) - -(TODO: cases) - - - - -(remove the example below before submission) - -## Action: Post A Message (Example) - -### case: post a message 'd' - -``` javascript -// given -foo.bar.messages is -{ - '-cadsace': 'a', - '-cadsacf': 'b', - '-cadsacg': 'c' +### case: I want my teammates to know some information +``` +messages = [] +message = { + content: "please help me with react", + user: "another_githubber", + timestamp: 1457368289 } -// when -post_a_message(text = 'd') +messages = messages.push(message) +``` -// then -foo.bar.messages should be -{ - '-cadsace': 'a', - '-cadsacf': 'b', - '-cadsacg': 'c', - '-cadsach': 'd', -} +## Action: Edit text +### case: change a typo in a document ``` + -### case: delete a message +// https://developers.google.com/google-apps/realtime/application#step_2_load_the_realtime_library +function initializeModel(model) { + var string = model.createString("Hello Realtime World!"); + model.getRoot().set("text", string); +} +function onStringChanged(evt) { + // Log the event to the console. + console.log(evt); +} -``` javascript -// given -foo.bar.messages is -{ - '-cadsace': 'a', - '-cadsacf': 'b', - '-cadsacg': 'c' +function onFileLoaded(doc) { + // Get the field named "text" in the root map. + var text = doc.getModel().getRoot().get("text"); + // Connect the event to the listener. + text.addEventListener(gapi.drive.realtime.EventType.TEXT_INSERTED, onStringChanged); } +``` -// when -delete_a_message(id = '-cadsacg') -// then -foo.bar.messages should be -{ - '-cadsace': 'a', - '-cadsacf': 'b' -} +## Action: Start video chat +### case: I'm blocked and I want help from an experienced user +``` +user = "nicot" +project = "CodeTogether" +startVideo(project, user) // https://bitbucket.org/webrtc/codelab ``` diff --git a/src/hackathons/01-18/index.md b/src/hackathons/01-18/index.md index c25dbd46..3f39136a 100644 --- a/src/hackathons/01-18/index.md +++ b/src/hackathons/01-18/index.md @@ -16,11 +16,11 @@ back with a list of new requirements. Build them! Tuesday @ 11:59pm, 1/19/2016 ## Requirements -* [ ] There should be three separate pages showing tasks with different priority values +* [X] There should be three separate pages showing tasks with different priority values 1. [high](/apps/todos/high.html) 2. [medium](/apps/todos/medium.html) 3. [low](/apps/todos/low.html) -* [ ] The landing page of the app ([index.html](/apps/todos/index.html)) should contain +* [X] The landing page of the app ([index.html](/apps/todos/index.html)) should contain a navigation bar with links to these three pages. * [ ] When a task's priority value is modified (e.g., medium --> high), all four pages (index, low, medium, high) are automatically refreshed. diff --git a/src/learning/intro/index.md b/src/learning/intro/index.md index bf3a65e7..9cf41e96 100644 --- a/src/learning/intro/index.md +++ b/src/learning/intro/index.md @@ -27,10 +27,10 @@ Develop a TODO list app. ### Milestones -* [ ] _EVERYONE_ should fork the Git repository of this book. -* [ ] Get the template code in [apps/todos/index.html](/apps/todos) to run -* [ ] Modify the code to show your team's name -* [ ] Use your team's own Firebase to serve the task data +* [x] _EVERYONE_ should fork the Git repository of this book. +* [x] Get the template code in [apps/todos/index.html](/apps/todos) to run +* [x] Modify the code to show your team's name +* [x] Use your team's own Firebase to serve the task data ### Submission diff --git a/src/learning/week1/index.md b/src/learning/week1/index.md index cd0d482d..b88d8da3 100644 --- a/src/learning/week1/index.md +++ b/src/learning/week1/index.md @@ -12,14 +12,14 @@ Enhance your team's TODO list app. ### Requirements -* [ ] Three additional fields need to be added to each task object: priority, type, and deadline. -* [ ] Use the CSS, Components, and JavaScript provided by [materializecss](http://materializecss.com/) to make the app pretty. -* [ ] The Firebase database must be populated with at least 10 tasks for a reasonable demo. +* [X] Three additional fields need to be added to each task object: priority, type, and deadline. +* [X] Use the CSS, Components, and JavaScript provided by [materializecss](http://materializecss.com/) to make the app pretty. +* [X] The Firebase database must be populated with at least 10 tasks for a reasonable demo. ## Individual Learning -* [ ] Add more data to enrich your personal resume app. Data must include typical items that go on your resume. -* [ ] The data must be pulled from Firebase in realtime, rather than hardcoded. +* [X] Add more data to enrich your personal resume app. Data must include typical items that go on your resume. +* [X] The data must be pulled from Firebase in realtime, rather than hardcoded. ### Submission diff --git a/src/learning/week2/index.md b/src/learning/week2/index.md index 2c25e871..64241446 100644 --- a/src/learning/week2/index.md +++ b/src/learning/week2/index.md @@ -19,15 +19,15 @@ Friday @ 11:59pm, 1/22/2016 ### Requirements -* [ ] There should be an inbox page ([inbox.html](/apps/todos/inbox.html)) for adding a +* [X] There should be an inbox page ([inbox.html](/apps/todos/inbox.html)) for adding a new task. -* [ ] Each new task should _at least_ have the following fields: +* [X] Each new task should _at least_ have the following fields: - title - priority - assigned (someone's Github id) - due (a date) - completed (always set to false when it's created) -* [ ] In the main page ([index.html](/apps.todos/index.html)), each task should have a complete button. When clicked, +* [X] In the main page ([index.html](/apps.todos/index.html)), each task should have a complete button. When clicked, the task is marked as complete, and the visual representation of this task should be updated accordingly. @@ -39,7 +39,7 @@ Sunday @ 11:59pm, 1/24/2016 ### Requirements -* [ ] Add a __Tasks__ section the main page of your resume app ([index.html](/apps/resume/index.html)). +* [X] Add a __Tasks__ section the main page of your resume app ([index.html](/apps/resume/index.html)). This section should displays a list of tasks assigned to you. These tasks are pulled from your team's Firebase. * [ ] Create a __Subscribe__ page ([subscribe.html](/apps/resume/subscribe.html)). This page should have a simple text box for a visitor (e.g., prospective employer) diff --git a/src/learning/week7/index.md b/src/learning/week7/index.md index 178d90ab..76f2b8a7 100644 --- a/src/learning/week7/index.md +++ b/src/learning/week7/index.md @@ -24,22 +24,22 @@ behind a bit, please start early. Don't wait until the weekend. ## Requirements * Team - * [ ] Form a team of FOUR - * [ ] Write a proposal of a together app that integrates ideas from every team + * [x] Form a team of FOUR + * [x] Write a proposal of a together app that integrates ideas from every team member * Individual - * [ ] Your personal repo should contain the same code of all the apps your teams + * [x] Your personal repo should contain the same code of all the apps your teams have developed and submitted up to this point. This may involve copying code and database from your teams' repos and making sure everything works. - * [ ] Every link on the index page of your book (e.g., + * [x] Every link on the index page of your book (e.g., [https://ucdd2-book.firebaseapp.com/](https://ucdd2-book.firebaseapp.com/)) should be working and will show the latest content. - * [ ] ToDos - * [ ] Resume - * [ ] Parking - * [ ] Uber - * [ ] Together + * [x] ToDos + * [x] Resume + * [x] Parking + * [x] Uber + * [x] Together ## Submission * Write your proposal in `/apps/together/proposal/index.md`, which will generate diff --git a/src/learning/week8/index.md b/src/learning/week8/index.md index 93146ca7..cb99377a 100644 --- a/src/learning/week8/index.md +++ b/src/learning/week8/index.md @@ -34,8 +34,8 @@ previous Uber app can be a good skeleton code to build upon. ## Requirements * __Milestone (1)__ - * [ ] Design the Firebase database structure - * [ ] Write the actions / state transformation specification + * [x] Design the Firebase database structure + * [x] Write the actions / state transformation specification * __Milestone (2)__ * [ ] Develop the basic functions of the user simulator * [ ] Simulate user login / logout @@ -43,7 +43,7 @@ previous Uber app can be a good skeleton code to build upon. * __Milestone (3)__ * [ ] Complete the user simulator * [ ] Simulate all the major actions specific to your application - * [ ] Develop a high-fidelity prototype mockup of the main screen using mock data (this mockup + * [x] Develop a high-fidelity prototype mockup of the main screen using mock data (this mockup is not connected with the database). ## Submission