Server-side programming 2 - Stanford University · Server-side programming 2 CS147L Lecture 7 Mike...

76
Server-side programming 2 CS147L Lecture 7 Mike Krieger Friday, November 13, 2009

Transcript of Server-side programming 2 - Stanford University · Server-side programming 2 CS147L Lecture 7 Mike...

Page 1: Server-side programming 2 - Stanford University · Server-side programming 2 CS147L Lecture 7 Mike Krieger Friday, November 13, 2009

Server-side programming 2

CS147L Lecture 7Mike Krieger

Friday, November 13, 2009

Page 2: Server-side programming 2 - Stanford University · Server-side programming 2 CS147L Lecture 7 Mike Krieger Friday, November 13, 2009

Intro

Friday, November 13, 2009

Page 3: Server-side programming 2 - Stanford University · Server-side programming 2 CS147L Lecture 7 Mike Krieger Friday, November 13, 2009

Welcome back!

Friday, November 13, 2009

Page 4: Server-side programming 2 - Stanford University · Server-side programming 2 CS147L Lecture 7 Mike Krieger Friday, November 13, 2009

By the end of today...

- Questions from implementations

- A note on Wizard of Oz

- Debugging PHP & Javascript

- More SQLite examples

- Full app: Where my friends at?

Friday, November 13, 2009

Page 5: Server-side programming 2 - Stanford University · Server-side programming 2 CS147L Lecture 7 Mike Krieger Friday, November 13, 2009

Administrative Stuff

- One more lecture next week

- No lecture dead week

- Email me with an honor code statement stating you attended 7/8 of the lectures

Friday, November 13, 2009

Page 6: Server-side programming 2 - Stanford University · Server-side programming 2 CS147L Lecture 7 Mike Krieger Friday, November 13, 2009

Question from Google Group

Friday, November 13, 2009

Page 8: Server-side programming 2 - Stanford University · Server-side programming 2 CS147L Lecture 7 Mike Krieger Friday, November 13, 2009

SolutionGive link an id:

Respond & return true:

Friday, November 13, 2009

Page 9: Server-side programming 2 - Stanford University · Server-side programming 2 CS147L Lecture 7 Mike Krieger Friday, November 13, 2009

Any other current Qs?

Friday, November 13, 2009

Page 10: Server-side programming 2 - Stanford University · Server-side programming 2 CS147L Lecture 7 Mike Krieger Friday, November 13, 2009

A note on WoZ

Friday, November 13, 2009

Page 11: Server-side programming 2 - Stanford University · Server-side programming 2 CS147L Lecture 7 Mike Krieger Friday, November 13, 2009

Wizard of Oz

- Have gotten some questions about camera, SMS, phone...

Friday, November 13, 2009

Page 12: Server-side programming 2 - Stanford University · Server-side programming 2 CS147L Lecture 7 Mike Krieger Friday, November 13, 2009

My app needs to take a picture

- Problem: iPod Touch has no camera

- WoZ: Take a screenshot of camera app from iPhone, bring it up at appropriate moment (or a video of the camera app moving around)

- I put some screenshots & video in the "resources" section

Friday, November 13, 2009

Page 13: Server-side programming 2 - Stanford University · Server-side programming 2 CS147L Lecture 7 Mike Krieger Friday, November 13, 2009

My app needs to make a call

- Problem: iPod Touch has no phone app

- WoZ: Present fake phone call screen (or build quick one in JS), have users act out call

Friday, November 13, 2009

Page 14: Server-side programming 2 - Stanford University · Server-side programming 2 CS147L Lecture 7 Mike Krieger Friday, November 13, 2009

App needs SMS send/receive

- WoZ: pop up Javascript alert() or prompt() with SMS message, have your app respond

Friday, November 13, 2009

Page 15: Server-side programming 2 - Stanford University · Server-side programming 2 CS147L Lecture 7 Mike Krieger Friday, November 13, 2009

Debugging Webapps

Friday, November 13, 2009

Page 16: Server-side programming 2 - Stanford University · Server-side programming 2 CS147L Lecture 7 Mike Krieger Friday, November 13, 2009

Quick Note

- WebKit nightly builds have terrific debugging tools

- http://webkit.org

- Windows, Mac, & Linux

Friday, November 13, 2009

Page 17: Server-side programming 2 - Stanford University · Server-side programming 2 CS147L Lecture 7 Mike Krieger Friday, November 13, 2009

Key Questions

- Is the right data living on the server?

- Is the right data making it back from the server?

- Is the Javascript parsing the data correctly?

Friday, November 13, 2009

Page 18: Server-side programming 2 - Stanford University · Server-side programming 2 CS147L Lecture 7 Mike Krieger Friday, November 13, 2009

Is the right data living on the server?

- Run same SELECT command using command-line tool

Friday, November 13, 2009

Page 19: Server-side programming 2 - Stanford University · Server-side programming 2 CS147L Lecture 7 Mike Krieger Friday, November 13, 2009

dumpdb.phpIn this week's folder, will go through all your entries in all your tables and print them out.

Friday, November 13, 2009

Page 20: Server-side programming 2 - Stanford University · Server-side programming 2 CS147L Lecture 7 Mike Krieger Friday, November 13, 2009

Running PHP from commandline

php yourfilename.php

No browser required!

Friday, November 13, 2009

Page 21: Server-side programming 2 - Stanford University · Server-side programming 2 CS147L Lecture 7 Mike Krieger Friday, November 13, 2009

Is it making it back?

- Just browser will work

- On Mac, can also use HTTP Analyzer

- Use Inspector's Request view

Friday, November 13, 2009

Page 22: Server-side programming 2 - Stanford University · Server-side programming 2 CS147L Lecture 7 Mike Krieger Friday, November 13, 2009

DemosJust browser (friends-1.php)HTTP ClientSafari Inspector

Friday, November 13, 2009

Page 23: Server-side programming 2 - Stanford University · Server-side programming 2 CS147L Lecture 7 Mike Krieger Friday, November 13, 2009

Debugging Javascript

Friday, November 13, 2009

Page 24: Server-side programming 2 - Stanford University · Server-side programming 2 CS147L Lecture 7 Mike Krieger Friday, November 13, 2009

General approach

- Set breakpoints in Safari

- Use console.log when breakpoints are impractical / too much work

Friday, November 13, 2009

Page 25: Server-side programming 2 - Stanford University · Server-side programming 2 CS147L Lecture 7 Mike Krieger Friday, November 13, 2009

Demosdebug-1 to debug-3.html

Friday, November 13, 2009

Page 26: Server-side programming 2 - Stanford University · Server-side programming 2 CS147L Lecture 7 Mike Krieger Friday, November 13, 2009

FriendFinder

Friday, November 13, 2009

Page 27: Server-side programming 2 - Stanford University · Server-side programming 2 CS147L Lecture 7 Mike Krieger Friday, November 13, 2009

Demo app features

- Locate user (we know how to do this)

- Update a central DB of locations

- Show:

- People around me

- Friend list

Friday, November 13, 2009

Page 28: Server-side programming 2 - Stanford University · Server-side programming 2 CS147L Lecture 7 Mike Krieger Friday, November 13, 2009

Approach

- Write JS and PHP separately, join near the end (you can do this on your team too)

- Use browser/HTTP Client to debug PHP calls

- Use Inspector to debug & develop JS & use fake data in meantime

Friday, November 13, 2009

Page 29: Server-side programming 2 - Stanford University · Server-side programming 2 CS147L Lecture 7 Mike Krieger Friday, November 13, 2009

Getting started

Friday, November 13, 2009

Page 30: Server-side programming 2 - Stanford University · Server-side programming 2 CS147L Lecture 7 Mike Krieger Friday, November 13, 2009

friends-0

- jQTouch template

Friday, November 13, 2009

Page 31: Server-side programming 2 - Stanford University · Server-side programming 2 CS147L Lecture 7 Mike Krieger Friday, November 13, 2009

friends-0.html

Friday, November 13, 2009

Page 32: Server-side programming 2 - Stanford University · Server-side programming 2 CS147L Lecture 7 Mike Krieger Friday, November 13, 2009

friends-1.html

- Skeleton menu

Friday, November 13, 2009

Page 33: Server-side programming 2 - Stanford University · Server-side programming 2 CS147L Lecture 7 Mike Krieger Friday, November 13, 2009

friends-1.html

Friday, November 13, 2009

Page 34: Server-side programming 2 - Stanford University · Server-side programming 2 CS147L Lecture 7 Mike Krieger Friday, November 13, 2009

friends-2.html

- Get location

- Get a user's status

Friday, November 13, 2009

Page 35: Server-side programming 2 - Stanford University · Server-side programming 2 CS147L Lecture 7 Mike Krieger Friday, November 13, 2009

Now-familiar location

Friday, November 13, 2009

Page 36: Server-side programming 2 - Stanford University · Server-side programming 2 CS147L Lecture 7 Mike Krieger Friday, November 13, 2009

prompt()

- Takes a string, returns whatever was entered into the prompt window

Friday, November 13, 2009

Page 37: Server-side programming 2 - Stanford University · Server-side programming 2 CS147L Lecture 7 Mike Krieger Friday, November 13, 2009

Callback

Friday, November 13, 2009

Page 38: Server-side programming 2 - Stanford University · Server-side programming 2 CS147L Lecture 7 Mike Krieger Friday, November 13, 2009

friends-3.html

- Provide confirmation that the status was sent to server

Friday, November 13, 2009

Page 39: Server-side programming 2 - Stanford University · Server-side programming 2 CS147L Lecture 7 Mike Krieger Friday, November 13, 2009

Feedback

Friday, November 13, 2009

Page 40: Server-side programming 2 - Stanford University · Server-side programming 2 CS147L Lecture 7 Mike Krieger Friday, November 13, 2009

friends-4.html

- Get a username and save it for this particular user using window.localStorage

Friday, November 13, 2009

Page 41: Server-side programming 2 - Stanford University · Server-side programming 2 CS147L Lecture 7 Mike Krieger Friday, November 13, 2009

localStorage

- HTML5 specification

- Provides key/value store

- Easier & more robust than using cookies

Friday, November 13, 2009

Page 42: Server-side programming 2 - Stanford University · Server-side programming 2 CS147L Lecture 7 Mike Krieger Friday, November 13, 2009

Two functionswindow.localStorage.getItem("itemName");

window.localStorage.setItem("itemName", "value");

// example:

if (!window.localStorage.getItem("city")) {� // prompt user for city� var city = prompt("What city are you in?");� window.localStorage.setItem("city", city);}

Friday, November 13, 2009

Page 43: Server-side programming 2 - Stanford University · Server-side programming 2 CS147L Lecture 7 Mike Krieger Friday, November 13, 2009

global object

Friday, November 13, 2009

Page 44: Server-side programming 2 - Stanford University · Server-side programming 2 CS147L Lecture 7 Mike Krieger Friday, November 13, 2009

Friday, November 13, 2009

Page 45: Server-side programming 2 - Stanford University · Server-side programming 2 CS147L Lecture 7 Mike Krieger Friday, November 13, 2009

friends-5.php

- Cache the found location globally so we don't have to fetch it every time we switch pages

- Have getLocation handle different callbacks

Friday, November 13, 2009

Page 46: Server-side programming 2 - Stanford University · Server-side programming 2 CS147L Lecture 7 Mike Krieger Friday, November 13, 2009

Save Position

Friday, November 13, 2009

Page 47: Server-side programming 2 - Stanford University · Server-side programming 2 CS147L Lecture 7 Mike Krieger Friday, November 13, 2009

Callbacks

Friday, November 13, 2009

Page 48: Server-side programming 2 - Stanford University · Server-side programming 2 CS147L Lecture 7 Mike Krieger Friday, November 13, 2009

Flexibility

Friday, November 13, 2009

Page 49: Server-side programming 2 - Stanford University · Server-side programming 2 CS147L Lecture 7 Mike Krieger Friday, November 13, 2009

friends-6

- Beginning of findNearby function

Friday, November 13, 2009

Page 50: Server-side programming 2 - Stanford University · Server-side programming 2 CS147L Lecture 7 Mike Krieger Friday, November 13, 2009

Friday, November 13, 2009

Page 51: Server-side programming 2 - Stanford University · Server-side programming 2 CS147L Lecture 7 Mike Krieger Friday, November 13, 2009

friends-7.php

- Import geoutil from last week's code

- Adding placeholder JSON object for response

Friday, November 13, 2009

Page 52: Server-side programming 2 - Stanford University · Server-side programming 2 CS147L Lecture 7 Mike Krieger Friday, November 13, 2009

Friday, November 13, 2009

Page 53: Server-side programming 2 - Stanford University · Server-side programming 2 CS147L Lecture 7 Mike Krieger Friday, November 13, 2009

Friday, November 13, 2009

Page 54: Server-side programming 2 - Stanford University · Server-side programming 2 CS147L Lecture 7 Mike Krieger Friday, November 13, 2009

friends-8.php

- getFriends() function

-

Friday, November 13, 2009

Page 55: Server-side programming 2 - Stanford University · Server-side programming 2 CS147L Lecture 7 Mike Krieger Friday, November 13, 2009

Server-side

Friday, November 13, 2009

Page 56: Server-side programming 2 - Stanford University · Server-side programming 2 CS147L Lecture 7 Mike Krieger Friday, November 13, 2009

Preparing the DB

- preparedb.php

Friday, November 13, 2009

Page 57: Server-side programming 2 - Stanford University · Server-side programming 2 CS147L Lecture 7 Mike Krieger Friday, November 13, 2009

Make the tables

Friday, November 13, 2009

Page 58: Server-side programming 2 - Stanford University · Server-side programming 2 CS147L Lecture 7 Mike Krieger Friday, November 13, 2009

Clear the tables

Friday, November 13, 2009

Page 59: Server-side programming 2 - Stanford University · Server-side programming 2 CS147L Lecture 7 Mike Krieger Friday, November 13, 2009

Fixture data

Friday, November 13, 2009

Page 60: Server-side programming 2 - Stanford University · Server-side programming 2 CS147L Lecture 7 Mike Krieger Friday, November 13, 2009

DB Commands

Friday, November 13, 2009

Page 61: Server-side programming 2 - Stanford University · Server-side programming 2 CS147L Lecture 7 Mike Krieger Friday, November 13, 2009

Iterate over friends

Friday, November 13, 2009

Page 62: Server-side programming 2 - Stanford University · Server-side programming 2 CS147L Lecture 7 Mike Krieger Friday, November 13, 2009

Iterate over others

Friday, November 13, 2009

Page 63: Server-side programming 2 - Stanford University · Server-side programming 2 CS147L Lecture 7 Mike Krieger Friday, November 13, 2009

checkin.php// grab data

Friday, November 13, 2009

Page 64: Server-side programming 2 - Stanford University · Server-side programming 2 CS147L Lecture 7 Mike Krieger Friday, November 13, 2009

Insert row

Friday, November 13, 2009

Page 65: Server-side programming 2 - Stanford University · Server-side programming 2 CS147L Lecture 7 Mike Krieger Friday, November 13, 2009

nearby.php// grab params

Friday, November 13, 2009

Page 66: Server-side programming 2 - Stanford University · Server-side programming 2 CS147L Lecture 7 Mike Krieger Friday, November 13, 2009

Grab all checkins// in real app we would search in the SELECT

Friday, November 13, 2009

Page 67: Server-side programming 2 - Stanford University · Server-side programming 2 CS147L Lecture 7 Mike Krieger Friday, November 13, 2009

Find nearby

Friday, November 13, 2009

Page 68: Server-side programming 2 - Stanford University · Server-side programming 2 CS147L Lecture 7 Mike Krieger Friday, November 13, 2009

Sort & Print

Friday, November 13, 2009

Page 69: Server-side programming 2 - Stanford University · Server-side programming 2 CS147L Lecture 7 Mike Krieger Friday, November 13, 2009

friends.php// JOIN

Friday, November 13, 2009

Page 70: Server-side programming 2 - Stanford University · Server-side programming 2 CS147L Lecture 7 Mike Krieger Friday, November 13, 2009

Run command

Friday, November 13, 2009

Page 71: Server-side programming 2 - Stanford University · Server-side programming 2 CS147L Lecture 7 Mike Krieger Friday, November 13, 2009

Iterate over results

Friday, November 13, 2009

Page 72: Server-side programming 2 - Stanford University · Server-side programming 2 CS147L Lecture 7 Mike Krieger Friday, November 13, 2009

Sort & Print

Friday, November 13, 2009

Page 73: Server-side programming 2 - Stanford University · Server-side programming 2 CS147L Lecture 7 Mike Krieger Friday, November 13, 2009

Closing the loop

Friday, November 13, 2009

Page 74: Server-side programming 2 - Stanford University · Server-side programming 2 CS147L Lecture 7 Mike Krieger Friday, November 13, 2009

friends-9.html

- .get -> .getJSON

- Remove placeholder data

Friday, November 13, 2009

Page 75: Server-side programming 2 - Stanford University · Server-side programming 2 CS147L Lecture 7 Mike Krieger Friday, November 13, 2009

Final Demo

Friday, November 13, 2009

Page 76: Server-side programming 2 - Stanford University · Server-side programming 2 CS147L Lecture 7 Mike Krieger Friday, November 13, 2009

Q’s?

Friday, November 13, 2009