- Instructor - Sam Slover (email: slover@nyu.edu)
- Office Hours - Wednesday 7-9 and Thursday 5:30-6:30 (these Thursday office hours should be for last-minute trouble-shooting and bug fixes); Signup at Google Calendar
- Group/Listserv: Go here and click "Subscribe to this group"
The world is awash with new data, but how can designers take the next step to make this data more meaningful in people's day-to-day lives and interactions? Put differently, instead of giving people yet more data and visualizations to interpret, how can we personalize this data to provide simple insights that more intimately connect with what an individual really cares about?
In this class, we'll examine how personalized design can give people more meaningful and pleasant experiences with their data interactions. We'll explore how new technologies and designs are implementing these personalization strategies and how they're being successful (or not). We’ll learn how to model, generate, and store our own datasets; how to build our own APIs; and ultimately how to design meaningful applications and experiences around this data.
We will do so by designing 2 core applications or experiences over the course of the class:
-
Midterm project - Designing a new (playful) interaction around a dataset that you find personally meaningful (the most important consideration for this project is that it is a dataset that you find personally interesting). This dataset can be from an existing source or you can create it.
-
Final project - Designing around your own data (as designing for the self is often the best starting place). Over the course of the 2nd half of the class, you will build an API around a personal dataset that you want to track and better understand, and then will design an application or experience around your personal data (personal data can include community data, like ITP).
Students will learn techniques on how to work with existing Web APIs, how to build and use their own Web APIs (with Node.js and Mongodb), and will implement user-facing designs utilizing p5.js and other Web technologies. Class examples will be presented in Javascript. Javascript tutorials will be assigned as a pre-requisite for those with little to no Javascript experience.
By the end of the class, you should have a solid understanding of the following concepts:
- Full-Stack Javascript - Familiarity with both client-side and server-side Javascript.
- Designing Data-Driven Applications- How to design and build a 'full-stack' data application.
- User-facing Web design & data visualization concepts - How to design and build user-facing interfaces & visualizations that effectively communicate data.
- Designing Personalization Systems- How to design systems that can collect user information and personalize data.
- Using APIs - How to interact with and use an API from within your client application.
- Structuring Data - How to intelligently structure data.
- Storing Data - How to build systems to store your own data.
- Building APIs - How to build your own APIs and make the data available to client applications.
Grades will be determined according to the following breakdown:
- 2 Main Projects (Midterm and Final): 50%
- Participation and Attendance: 25%
- Weekly Assignments: 15%
- Group Project: 10%
It is expected that everyone in the class will create and maintain a blog for their assignments.
Email slover@nyu.edu with a link to you blog. I will add it to a list here:
- Ondina
- Joakim
- Anne
- Soy
- Joy
- Yan
- Yiting
- Gustavo
- Emmanuel
- Eve
- Jamal
- Nilomee
- Katie
- Osama
- Ian
- An
- Xiqiao
- Leslie
- Skylar
We will use a listserv both to conduct discussions outside of class, and for any technical help questions. Please email the listserv with all technical help questions (often, someone else will have a very similar question, or will at least find the answer informative).
Go here and click "Subscribe to this group"
This class covers numerous Web programming topics, and as a result, we will use laptops extensively throughout class time. However, use of the computer outside of class topics (for example, chatting on Gmail or checking Facebook) is disrespectful and repeated violators will be asked to leave the classroom.
Also - while your classmates are presenting, it is mandatory to put your laptop lid down and focus all of your attention on your colleague's presentation.
We will have small weekly assignments that build on material presented in class. It is expected that you post all assignments to your blog, and come prepared to talk about your work (and respectfully engage with your peers when they are presenting).
Attendance is mandatory. You must inform me via email if you are going to miss a class. Habitually showing up late for class or an excessive number of absences will adversely affect your grade.
Class participation is a critical part of the class, and (along with attendance) makes up 25% of your final grade. We expect pro-active participation and feedback throughout class discussions and presentations.
Starting on the 3rd class, we will have weekly group projects. I will divide the class up into groups and each week one or two groups will give a 15-minute presentation.
You can pick from 2 topics (although if you are really enthusiastic about doing something else, you may propose it):
-
Topic 1: Design Presentation/Critique - Pick a technology (hardware, software or service), project, or theme that relates to the overall topics in the class: designing around personal data; data personalization; data tracking; physical data installations. See Week 1 "Design Topic: Examples & Inspiration for the class" for examples of the types of services you could evaluate.
- Make a presentation that covers what the technology/service/project/theme is, what is novel about it, how are people using it and so on.
- What do you like about it? What would you do differently?
- Notice their design decisions (user experience, interactions, etc.). What is effective? What is not?
- Are there are any privacy concerns? Data Limitations?
- Does it fulfill its promise? Where could you see it going in the future?
-
Topic 2: Quick and dirty visualization project - compile a dataset and visualize it! - Pick a dataset that you want to compile as a group (you can manually collect it). For example, the average # of dishes left in the ITP sink at different times, noise levels on the ITP floor at different times, style trends spotted on the L train (septum piercings vs sleeve tattoos vs no socks), etc. It can be anything you find interesting and worth compiling/visualizing.
- Compile the dataset using any process that works for you (just be prepared to present your process) -- pen/paper, Google Spreadsheet, tallies on a notepad, App connected to a database, etc.
- Visualize the dataset in a way that helps relay its key themes and insights -- pen/paper, basic Web dashboard, 3D print, P5 sketch, performance, game, etc.
- Present your project: why did you choose the dataset? what was interesting about it? how did you compile the data? what were your hypotheses? how did you ultimately design around the data? what were your key learnings? what were some challenges?
For those who may not have prior experience with Javacsript, it is strongly recommended to do some outside tutorials. The following are a list of suggested tutorials:
Client-side Javascript:
- JS for Cats - Fun intro
- CodeSchool - JS Road Trip Part 1 and Part 2
- Codecademy - Javascript
- P5js vs Processing - Learn how to go from Processing to P5
Server-side Javascript
- CodeSchool - Real-time Web with Node.js
- Nodeschool
- MEAN (MongoDB Express.js AngularJS Node.js) tutorial - More Advanced
While not specifically required for the class, you may find the following tutorials helpful in building your projects.
- Codecademy - HTML & CSS
- Learn To Code HTML/CSS
- Learn CSS Layout
- W3 - Intro to HTML
- W3 - Intro to CSS
- Class Exercise: get to know eachother via data collection
- Download POSTMAN
- Get the following information from your partner, which we will POST to our API:
- name
- homeLocation
- vacationLocation
- dataInterest
- jsLevel (1 to 10)
- Intro to Designing for Data Personalization:
- Instructor/Topic Intro
- Syllabus Overview
- Design Topic: Examples & Inspiration for the class
- Making Data Personal & Playful
- Self-tracking Projects
- Personalizing Data (Apps)
BREAK
-
Technical topics:
- Intro to Web Development, APIs, Client-Server interactions, Javascript
- Quick intro to JSON (JSON is the data format we will work with all semester):
- HTML/CSS/JS 101: a wellformed page and simple script. How to structure a Web project.
- Create project folder (index.html, css, images, js)
- Demo is available at http://samslover.com/intro-to-web/ and code is at https://github.com/sslover/designing-for-data-personalization/tree/master/week1/instagram-html-css-demo.
- Presentation is available here
- List of Useful Tools
-
Assignment Week 1:
- Sign up to the listserv: Go here and click "Subscribe to this group"
- Set up your class blog. Email slover@nyu.edu with the link.
- Download useful tools:
- This week, use an app that tries to track or personalize data (Poncho, Gyroscope App, Foursquare, Yummly, Google Now, Reporter App, Mint.com, Slavery Footprint, Strava, Runkeeper, Fitbit, Sage Project, etc.). In your class blog, describe your interactions? What did you like about it? What bugged you? What would you do differently? Where could you see it going in the future?
- Read about JSON:
- Using the above examples as a starting place, create a simple JSON file on anything. Don't overthink it, something simple is fine... but it should be something that is interesting to you. Examples could be:
- make your CV/resume into JSON.. example: Sam's Sample JSON
- create a list of your pets - name, the year you got them, color, weight;
- create a list of vacations you've been on - location, year, companions, favorite activity;
- compile information about your family - relationship, name, year born, current location;
- create a list of your favorite bands - year founded, list of albums, awards won, links to songs;
- Use JSON Lint to validate the JSON you create and then post it to your class blog
- If needed, do the above Javascript/HTML/CSS tutorials
- If all of the above was very easy for you, write a simple Javascript program that renders your JSON from above onto a Webpage.
- Present last week's work
- Group Activities Overview + Assigning Groups
- Design Topic - Common Design Structures + Wireframing
- Presentation
- References:
- Some Wireframing Tools
- Pen & Paper
- UI Stencils
- Kung Fu for Keynote
- Balsamiq
- Framerjs
- Sketch can get 50% off as a student
- Experience Design
- Adobe Illustrator
- Web/CSS (HTML)
- Some Wireframing Tools
- Design Exercise/Sprint - Pen & Paper Wireframing
BREAK
-
Technical topics:
- JS 101 - going deeper into client-side js. Common Javscript functions, tips and tricks. Callbacks. Events. Etc. Javascript cheat sheet
- JSON 101: rules & validation. And why does it matter?
- Making an API request with AJAX and using the data within a Webpage (from both a JSON file and an external 3rd party API)
- Example project 1 - API Request
- Code is here
- live coding: dynamically changing the CSS; dynamically picking an icon based on a set of conditions;
- Example project 2 - API Request + Using Our Own JSON File
- Example project 3 - API Request + Detecting the User's Location From Their Browser
- python -m SimpleHTTPServer
- When working locally and making AJAX requests, you need to run on a simple server. cd into your project and folder and then run the above command (enter python -m SimpleHTTPServer and press enter). Then, go to http://localhost:8000/
- Example project 1 - API Request
-
Assignment Week 2:
-
Read up on Bootstrap, the HTML/CSS/JS Framework.
- In particular, look at this page and pay special attention to Bootstrap's Grid System
-
For those new to Javascript, read through the Javascript cheat sheet. Run the code in the Javascript console (in Chrome --> View > Developer > Javascript Console)
-
Design Assignment: Think about a dataset you've encountered in your day-to-day life (the weather, food labels, traffic, elevator status, restaurant wait times, etc.). Wireframe a simple app or dashboard that shows the data in a way that's more effective for you. Why is it more effective? Post the wireframe to your class blog.
-
Programming Assignment: Request data from your own JSON file OR a 3rd party API. If you use a 3rd party API, some options (but you can choose whatever you want - the most important is to try to pick something personally interesting):
-
Write a simple JS script that gets the above data and generates in it on a webpage in an interesting way. Make it interactive based on at least one JS event: user input, clicks, scrolling, etc. Some options:
- Make your CV/Resume into a simple interactive data experience. Generate visuals on the page based on the data and create a few key user interactions.
- Detect the user's location via the browser and do something based on it (see this resource in getting geolocation from the browser)
- Tell a simple data story about your family, pets, favorite bands, etc.
-
- Group Presentation 1:
- Emmanuel
- Leslie
- Osama
- Present last week's work
- JS/JS Events/AJAX/Updating the DOM (pick up where we left off last week). Key links:
BREAK
-
Technical topic:
- p5js boilerplate
- p5js - Processing-like-visuals with Javascript (with a focus on designing around data from a 3rd-party API or JSON file)
-
Assignment Week 3:
-
Review the following JS & JQuery methods for updating the DOM:
-
Review the following p5js examples & documentation:
- Getting Started Guide
- createCanvas. See the Getting Started Guide for information on how to create a p5js canvas within a specific HTML element (rather than within the entire body itself)
- loadJSON. Pay special attention to preload()
- p5js Objects and p5js Array of Objects
-
Technical assignment - 2 options:
-
- Write a simple p5js sketch that takes a dataset and visualizes it in a way that helps the user understand it. Could be based around charts, animations, text, etc. Bonus: can you combine your p5js sketch/canvas with other elements on the Webpage? A possibility is adding a p5js sketch to your week 2 project.
-
- Continue on your work from last week or create an entirely new small project that uses a JS script to get data and generate in it on a webpage in an interesting way.
-
-
Propose a dataset/topic for Midterm (due week 6) - Designing a new (playful) interaction around a dataset that you find personally meaningful
- By next week's class, you should be 100% clear on how you are getting your data (whether it is from a 3rd party API or your own JSON)
- Requirements (due Week 6)
- A working interactive Web page that does something interesting with your dataset
- A blog post that includes the following:
- A brief description of the data you chose, why you are interested in it, and what you wanted to express to the user.
- A sketch or wireframe of your concept.
- The color palette and fonts that you are using, any other options you were considering, and why you made these choices.
- Any next steps you think would be interesting for the project.
-
- Group Presentation 2
- Joy
- Eve
- 1-minute round-table: topics for midterm
- Designing around Data - Colors, Typography and more.
- Finish p5js examples. Creating p5js objects.
BREAK
-
Implementing Charts with chart.js
-
Custom chart demo
-
Assignment Week 4: Work on Midterm
- Design a new (playful) interaction around a dataset that you find personally meaningful. This dataset can be from an existing source or you can create it. 2 primary options:
-
- choose an existing dataset that is personally important to you (and that you want to design around in a novel way);
-
- create a dataset by tracking it for a week or two (it could be your own data, community data, or any other dataset you want to newly create).
-
- Requirements:
- Build a working interactive Web page or other experience/application that helps relay the key themes you want to highlight in the dataset
- Write a blog post that includes the following:
- A brief description of the data you chose, why you are interested in it, and what you wanted to express to the user.
- A sketch or wireframe of your concept.
- The color palette and fonts that you are using, any other options you were considering, and why you made these choices.
- Any next steps you think would be interesting for the project.
- Design a new (playful) interaction around a dataset that you find personally meaningful. This dataset can be from an existing source or you can create it. 2 primary options:
- Group Presentation 3
- Katie
- Xiqiao
- Design topic: Isotype (picture language)
- Finish Charting example
- Custom chart demo
BREAK
-
Combining multiple interactive elements on 1 Web page (p5 sketch, charts, interactive Web elements)
-
Common JS Use Cases are in the week 5 class folder
-
Assignment: Complete Midterm! See Week 4 for requirements
- Midterm Student Presentations: Designing a new (playful) interaction around a dataset that you find personally meaningful
- Assignment: install everything needed for server-side JS
- Group Presentation 4
- Gustavo
- Ian
- Xingjian
- Midterm Presentations from:
- Ian
- Leslie
- Xiqiao
- Skylar
BREAK
-
Build "Hello World" expressjs app
-
Presentation - Overview of Node.js + Express.js + Mongodb + Heroku
-
App Setup - Node.js / Express.js / MongoDb (+Mongoose) Boilerplate
-
App Overview
- app.js
- routes
- models
- package.json / node_modules
- .env
- .gitignore
-
Routes / Routing
-
Database Schemas
- See Mongoose Schemas
-
CRUD
- Create
- Retrieve (one and all)
- Update
- Delete
-
To do POST requests, download POSTMAN
-
Assignment Week 7:
- Read about RESTful APIs
- Get the boilerplate up and running. Email the class list if you run into any issue. Please provide the exact error you are getting and the command you ran that gave you that error.
- Requirements
- Download the boilerplate zip (do not clone it!)
- Read through the entire readme! Go step by step.
- Add some data using POSTMAN
- Remember that POSTMAN is just a tool for simulating HTTP requests (HTTP requests can originate from a browser, an Arduino Yun, a mobile app, etc. POSTMAN is just a tool for testing these requests.)
- You will be posting to the /api/create route.
- So, you will want to choose the POST option and then enter: http://localhost:3000/api/create
- Choose the "Body" tab and then x-www-form-urlencoded
- Enter key, value pairs. Look at the schema to see the data that is modeled. Examples:
- name: Billy
- tags: cute,black,puppy
- age: 8
- (the tags example is a comma-separated list that will get made into an array.. this is a standard approach)
- Once you have some data, play around with the other routes that are in index.js (you can go to GET routes in your browser, but need to make POST routes from POSTMAN):
- http://localhost:3000/api/get
- (GET route)
- http://localhost:3000/api/get/:id
- (GET route - copy and paste the id in place of :id... you can see the id in the response of http://localhost:3000/api/get)
- http://localhost:3000/api/delete/:id
- (GET route - copy and paste the id in place of :id... you can see the id in the response of http://localhost:3000/api/get)
- http://localhost:3000/api/update/:id
- (POST route - use POSTMAN)
- http://localhost:3000/api/create
- (POST route - use POSTMAN)
- http://localhost:3000/api/get
- Once you are comfortable, push the app to the heroku app you created (see the repo... it's the part with git push heroku master)
- Field trip!
- You need to come to Pirch SoHo by 6:25pm. It is down the street from ITP (10 minute walk): 200 Lafayette St, New York, NY 10012
- Group Presentation 5
- Jamal
- Yiting
BREAK
-
Finish boilerplate - get it completely up and running
-
Talking to your APIs from a client-application
-
Overview of Routing
-
Class Example - ITP Directory:
-
Simple AJAX Example:
- Interacting with a node-express-mongoose app using AJAX and Google's geocoder:
-
Using npm libraries
- Geocoder example in above app
-
Assignment Week 8:
- Design topic: Read Why Cards are the Future of the Web
- Read through the Mongoose.js Cheat Sheet
- This week you should build a simple app that does the following (use the boilerplate as a starting point)
- Has at least 3 routes:
- Create
- Retrieve (One or All)
- Delete
- The above routes should use the methods from the Mongoose.js Cheat Sheet
- Submits (POST) data via an HTML form or via AJAX
- Shows the data on a Webpage
- Has at least 3 routes:
- Push it to heroku and send me the URL
- Group Presentation 5
- Anne
- Ondina
- Joakim
- Design Topic: Onboarding!
- Oscar Health
- Poncho
- Yummly
- Sage Project
BREAK
-
ITP Directory Example
-
Topics:
- jQuery validation for validating forms
- Creating slugs
- Edit routes
- View Engine (Hogan Express)
- req.params and req.query
-
Simple AJAX Example:
- Interacting with a node-express-mongoose app using AJAX and Google's geocoder:
-
Using npm libraries
- Geocoder example in above app
-
Assignment Week 9:
-
This week, you must complete a fully working data app that has the following features:
-
Has your own data model
-
Has at least 5 routes:
-
Create (via a form POST or via ajax POST)
-
Retrieve One (by ID or some other parameter)
-
Retrieve All
-
Edit (via a form POST or via ajax POST)
-
Delete
-
-
-
The above routes should use the methods from the Mongoose.js Cheat Sheet
-
This week, you must also come up with your final project proposal. You should propose 1-2 datasets you want to track over the final weeks of the class. This can be personal data, community data, or any other dataset you want to track and then visualize. For your final, you must show data that you've collected, expose it as an API, and design a personally meaningful application or experience around it.
-
That said -- if there is another project idea you have in mind that fits the themes of the class, please propose it.
-
- Guest speaker
- Group Presentation 6
- Yan
- Nilomee
- Student Presentations: Present Your Final Project Proposal --> Designing around your own data
- Search query route
- Simple AJAX Example:
- Interacting with a node-express-mongoose app using AJAX and Google's geocoder:
- Using npm libraries
- Geocoder example in above app
** BREAK **
Amazon S3 for file/image storage
- Setup Guide
- Example App:
Twilio for SMS
- Setup Guide
- Example App:
Assignment - WORK ON YOUR FINAL PROJECT
- Group Presentation 7
- Skylar
- Soy
- AWS for image storage (continued)
- Twilio (continued)
** BREAK **
- Socket / Live Data
- Setting up Social Services (NPM)
If you are interested, dig in on your own:
- Going beyond the browser. Data on Physical Devices & Objects (hello Arduino Yun!)
- If time permits. More Complex Server/Mongoose commands - Layout, Subdocuments sort, where
HOMEWORK - FINISH YOUR FINAL PROJECT
For your final project, the following are requirements:
- You must create a working project that you demo in class.
- The project should have 2 public links:
- Project demo
- Github link
- If you've never pushed a repo to github. Here's the deal:
- Sign in to your Github account
- Click "New repository" in top right (the + sign)
- Give it a name and description and click Create
- Then, in terminal, enter the 2 commands in the 2nd box ("push an existing repository from the command line"). Or, if you've yet to start tracking it with Git, then go with the 1st box ("create a new repository on the command line")
- Refresh the page and you'll see your repo
- If you've never pushed a repo to github. Here's the deal:
- You must document it on your blog:
- What data did you decide to work with? Why were you interested in this data?
- What were your key design considerations?
- What are some of the key technology processes you used? What was interesting or tricky?
- What are the key takeaways for yourself or for your target audience? What did you want them to get from your project?
- Where else could you see this project going?
- You must email me a link to the blog post, project demo, and github repo.
- Student Presentations - Final Project