!!! Qualcomm Innovation Fellowship (~QInF) 2014 Proposal

[QInF 2014 site|http://www.qualcomm.com/research/university-relations/innovation-fellowship/2014]

!! Round 1: proposal

[Proposal document|QInF2014/QInF2014-proposal.pdf] attached

!! Round 2: presentation

Presentation attached as [PowerPoint slides|QInF2014/S2014-6568-Thywissen-Peters-Misra-FinalSlides.pptx] and as [Print-version PDF|QInF2014/S2014-6568-Thywissen-Peters-Misra-FinalSlides_forprint.pdf].

Speaker notes are in a [Google Slides file|https://docs.google.com/a/utexas.edu/presentation/d/10fOwibfTIgbKpW0T1CO5CiwdixhHPX3e_6hfYuzFxcQ/edit?usp=sharing]

! Presentation Notes

__Show:__
* Novel -- via related work? Hop, GWT, ...
* Significant/Useful -- Use motivation from proposal
* Feasible -- Demonstrate via progress
* We're the right team -- We start from a good place (Orc), and have done this kink of work

__Question:__ How much Orc-ish context to put in presentation?
* Orc proc calc underlies Orc
* ''Pervasive concurrency'' in Orc, vice parallelizing sequential code
* Fewer sync primitives needed
* Strong semantics

__Topics:__
* Optimization possibilities
** As part of out p.o.v.
* Static analysis
* Min-cut

! Outline

__1 sentence abstract:__ dOrc enables constructing ''cohesive'' distributed systems: those distributed systems that are better written as one cohesive program, rather than communicating modules. 

* (Title slide)
* Intro to problem (Base on proposal doc)
** Browser user ID validation example
** Present the conventional code (see code snippets below)
*** First sequentially all-in-one
*** Fragment code across locations
*** (Uglier and uglier....)
* Our current solution
** Show dOrc code (re-integrate back to start point)
** Explain semantics as applied to example
*** Policy set and location set, per values
*** "Pinned" values: Singleton/small policy set
** Note semantics offer multiple possible distributions (subexpressions-to-locations relation)
* Future directions
** Optimization opportunities abound
** Static analysis
*** Back-propagate knowledge of ultimate destinations of values
*** Can find some distributions dominate others
** Metadata may let us replicate values or computations safely
** Build a graph of locations and data flow costs, use std graph partitioning algos (min-cut et al.)
* (Summary slide)

__Note:__ Make sure terminology is consistent with proposal.

!! Code examples
(Arthur has Latex of these as well, if we need it)

! dOrc
{{{
def attemptRegistration() =
  askUser(“Pick a username”) > username >
  if isLegal(username)
     and isUnique(username)
  then
    createNewUser(username)
  else
    displayError(username)
}}}

! Optimistic State of the Art Solution
{{{
def createNewUserIfUnique(username) =
  if isUnique(username)
  then
    createNewUser(username) >> true
  else
    false
-----------------------------
def attemptRegistration() =
  askUser(“Pick a username”) >username>
  if not isLegal(username)
     or not createNewUserIfUnique(username)
  then
    displayError(username)
}}}

! Realistic State of the Art Solution
{{{
remote def createNewUserIfUnique(username) =
  if isUnique(username)
  then
    createNewUser(username) >> true
  else
    false
-----------------------------
def callback(username, success) =
  if not success
  then
    displayError(username)
-----------------------------
def attemptRegistration() =
  askUser(“Pick a username”) > username >
  if isLegal(username)
  then
    createNewUserIfUnique(username, callback)
  else
    callback(username, false)
}}}

! Even More Realistic State of the Art Solution
{{{
remote def createNewUserIfUnique(username) =
  if isUnique(username)
  then
    createNewUser(username) >> true
  else
    false
-----------------------------
def makeCallback(username) =
  callback def callback(success) =
    if not success
    then
      displayError(username)
  callback
-----------------------------
def attemptRegistration() =
  askUser(“Pick a username”) > username >
  if isLegal(username)
  then
    createNewUserIfUnique(username, makeCallback(username))
  else
    makeCallback(username)(false)
}}}