Coder Social home page Coder Social logo

bradparks / studentinsights Goto Github PK

View Code? Open in Web Editor NEW

This project forked from studentinsights/studentinsights

0.0 1.0 0.0 12.54 MB

Student Insights for Somerville educators

License: MIT License

Emacs Lisp 0.01% Ruby 48.39% JavaScript 42.96% HTML 4.35% CSS 1.79% Shell 2.51%

studentinsights's Introduction

Student Insights

Build Status Code Climate

Student Insights gives educators an overview of student progress at their school, classroom-level rosters and individual student profiles. It also allows them to capture interventions and notes during weekly or bi-weekly student support meetings focused on the most at-risk students. It’s currently in use at the pilot elementary school in Somerville.

Check out the demo site:

Our presentation at Code for Boston demo night in May 2016 also has a good product overview.

Table of Contents

User personas: Who we're serving

There are three main user personas we're serving. Principals, Interventionists and Classroom Teachers. Right now we're focused primarily on serving principals, and the rough progression will likely be to Interventionists next. Early adopter Classroom Teachers are great, but focused on scaling adoption across all classroom teachers isn't a priority yet.

Principals are responsible for a school, from ensuring all students are progressing academically to making hiring and staffing decisions for teachers.

Interventionists are typically folks who provide some kind of specialized service to students, like counseling, behavioral services or specialized reading instruction. They have caseloads of 20-70 students and are often involved in interdisciplinary teams focused on supporting students who are most at-risk.

Classroom Teachers are responsible for teaching all subjects in an elementary level, and at the middle school level typically teach two subjects, with a few periods of each subject.

Product overview: How we're helping

School overview

Principals and intervention specialists can get an overview of all students at school, updated automatically as new data comes in. This includes demographic information (left), academic progress indicators (center), and educational interventions (right).

Overview

Educators answer specific questions like "how are 3rd grade students doing on reading assessments?" and "are students on free lunch programs equitably distributed between 5th grade classrooms?" This is useful for understanding progress for groups of students, and also for identifying particular students in need of targeted interventions.

Filtering

Data can be exported as a CSV for more sophisticated analysis.

Classroom rosters

Classroom teachers can see rosters of all students in their classroom, calling out high-need students and letting them jump into the student's case history and record of previous assessments and interventions.

Rosters

Student profiles

Individual student profiles show how students are progressing on core academic skills, as measured summatively by MCAS or on more frequent formative measures like STAR assessments.

Profile

Student profiles also contain the full case history of demographic information, attendance and behavioral support.

Profile

We're working on some big improvements to the student profile page right now, check out #5 for more background.

Capturing meeting notes and interventions

It's one thing to have data, but acting on it to improve student outcomes is what really matters. Schools with regular student support meetings for at-risk students can track interventions like additional tutoring hours, attendance contracts or social skills groups. This is a building block to close the loop and monitor how effectively these interventions are serving students.

Interventions

It also allows capturing meeting notes as part of the student's record, which is particularly important on interdisciplinary teams.

School deployment

Somerville Public Schools has seven elementary schools, one high school, and two alternative schools.

We are focusing on rolling out Student Insights for Somerville's elementary schools:

School Data imported Principal on-boarded Used at an SST/MTSS meeting
Healey
West
East 🔜
Brown
Kennedy
Argenziano
Winter Hill

Contributing

We'd love your help! Take a look at CONTRIBUTING.md for more information on ways educators, developers and others can get involved and contribute directly to the project. You can also learn how to join our online chat channel and submit pull requests and join us in person at our weekly hack night with Code for America, in Kendall Square, Cambridge.

How it works

The project is a Rails app with a Postgres database. There are background tasks that replicate data from the Aspen SIS system and STAR assessment system into the Postgres database. This enables rapid iteration and experimentation on new product features with minimal risk to these existing production systems. The Postgres database is the system of record for unique data captured by the Student Insights product (eg., notes from clinical meetings and information about targeted interventions that students are receiving). Authentication is handled by the district's LDAP service.

how it works

Admin dashboard

This project includes an admin dashboard built with thoughtbot/administrate.

The admin dashboard has one function: Allow admins (principals, assistant principals, district admins) to set user roles and permissions for other staff, in particular staff who are not classroom-based teachers.

The admin dashboard is available at /admin for educators whose admin attribute is true.

Development Environment

This is a Ruby on Rails app that uses a PostgreSQL database, and relies on React for much of the UI code.

1. Install dependencies

Choose your favorite local development approach:

2. Create database tables and seed them with demo data

bundle exec rake db:create db:migrate db:seed

This will create demo students with fake student information. The demo educator username is [email protected] and the demo password is demo-password.

3. Start Rails

Once you've created the data, start a local server by running rails s from the root of your project. When the local server is up and running, visit http://localhost:3000/ and log in with your demo login information. You should see the roster view for your data.

4. Run the tests

This app uses Rspec. Run the test suite:

rspec

It uses Jasmine for JavaScript tests, run through the Teaspoon gem. You can run them in the browser at http://localhost:3000/teaspoon/default.

You can also run them from the command line:

teaspoon

eslint is setup, but not in the build yet since it would take some cleanup. See studentinsights#637 for more information, and try this out with either:

docker-compose build tools
docker-compose run tools

or

cd scripts/tools
npm install
npm run lint-quiet

5. Write code!

This project is a Rails app and has a typical Rails project structure. If you'd like to get up to speed on Rails, we recommend checking out their great documentation.

It also uses React for much the user interface code, with one minor wrinkle (see below). If you'd like to get up to speed on React, we recommend their great documentation, and the Tutorial and Thinking in React pages in particular.

The wrinkle with React usage is that at the moment, we don't use the JSX syntax but instead call methods directly. This is just a syntatic change and means:

var ProductTable = React.createClass({
  render: function() {
    var rows = [];
    this.props.products.forEach(function(product) {
      rows.push(<ProductRow product={product} key={product.name} />);
    });
    return (
      <table>
        <thead>
          <tr>
            <th>Name</th>
            <th>Price</th>
          </tr>
        </thead>
        <tbody>{rows}</tbody>
      </table>
    );
  }
});

becomes:

var ProductTable = React.createClass({
  render: function() {
    var rows = [];
    this.props.products.forEach(function(product) {
      rows.push(createEl(ProductRow, { product: product, key: product.name }));
    });
    return (
      dom.table({},
        dom.thead({},
          dom.tr({},
            dom.th({}, 'Name'),
            dom.th({}, 'Price')
          )
        ),
        dom.tbody({}, rows)
      )
    );
  }
});

There are also a few places where we use Flux patterns.

If you use Sublime Text Editor, we include the studentinsights.sublime-project file to standardize minor things like tabs vs. spaces, indentation, and generally make it easier to work with our folder structure. Go to Project --> Open Project and select that file to load it. Sublime remembers which project you were last in, so you only need to do this once. (Here's some background info on how projects work in Sublime).

Browser/OS Targeting

Category Target Comment
Browser IE 11 "Should be all IE 11 by now."
– John Breslin, Technology Department, Somerville Public Schools
OS Windows 7 and 8.1 "Maybe some Win10 next year."
– John Breslin, Technology Department, Somerville Public Schools

Deployment

Importing real data

If you're working with a real school district, you'll need flat files of the data you want to import.

Run an import task:

thor import:start

So far, Student Insights can import CSV and JSON and can fetch data from AWS and SFTP. To import a new flat file type, write a new data transformer: app/importers/data_transformers. To import from a new storage location, write a new client: app/importers/clients.

LDAP

The project is configured to use LDAP as its authentication strategy in production. To use database authentication (in a production demo site, for example) set the SHOULD_USE_LDAP environment variable. Authentication strategies are defined in educator.rb.

Heroku

We deployed this app on Heroku and you can, too.

Quotaguard Static, a Heroku add-on, provides the static IP addresses needed to connect with Somerville's LDAP server behind a firewall. This requires additional configuration to prevent Quotaguard Static from interfering with the connection between application and database. One way to accomplish this is to set a QUOTAGUARDSTATIC_MASK environment variable that routes only outbound traffic to certain IP subnets using the static IPs. Read Quotaguard Static's documentation for more information.

Set strong secret keys for DEVISE_SECRET_KEY and SECRET_KEY_BASE when you deploy.

Migrations on Heroku

This is how to execute a standard Rails migration. This is focused on the production deployment, but the demo site is the same, just add --app somerville-teacher-tool-demo to the Heroku CLI commands.

  • db:migrate isn't run as part of the deploy process and needs to be done manually
  • in order to heroku run rake db:migrate in production, the migration code needs to be merged to master and deployed to heroku
  • this means the commit adding migrations needs to work both with and without the migrations having been run
  • after deploying, you can run the migration and restart Rails through the Heroku CLI

So concretely, once your commit is on master, git push heroku master && heroku run rake db:migrate will deploy the new code and run the migration. This will cause a few seconds of downtime.

Rebuilding database in staging environment

Rebuilding the database in a staging deployment is a destructive action and permanently deletes data in the staging environment.

To do this:

# drop database
heroku pg:reset DATABASE --app student-insights-staging

# create database tables, run migrations and seed
heroku run bundle exec rake db:create db:migrate db:seed:somerville --app student-insights-staging

# import data
heroku run:detached thor import:start --app student-insights-staging

AWS

The project can also be deployed on AWS. There's a starting point for provisioning and deploying scripts here:

/scripts/aws/

Scripts by the fantastic Kevin Robinson.

Other Tools

Mixpanel

We use Mixpanel to track user interactions on the client side. It gives us nice graphs so we can see who's using the app and how.

More information

studentinsights's People

Contributors

alexsoble avatar amirhadjihabib avatar awalker4 avatar bdougsand avatar bran-van-d avatar bw120 avatar davidbader avatar dazzaji avatar erose avatar eudaimonious avatar hunterowens avatar iamctodd avatar ianaroot avatar jhilde avatar jochakovsky avatar johnrobbjr avatar jonchar avatar kbweaver avatar kevinrobinson avatar marimuraki avatar nazwr avatar pauledwardmitchell avatar quinnlee avatar ronny2205 avatar sentientmachine avatar thfield avatar

Watchers

 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.