CryCupboard 2.0 The New Face to Grocery Shopping Cheralyn Cofer CS491 5.29.06.

21
CryCupboard 2.0 The New Face to Grocery Shopping Cheralyn Cofer CS491 5.29.06
  • date post

    18-Dec-2015
  • Category

    Documents

  • view

    214
  • download

    0

Transcript of CryCupboard 2.0 The New Face to Grocery Shopping Cheralyn Cofer CS491 5.29.06.

Page 1: CryCupboard 2.0 The New Face to Grocery Shopping Cheralyn Cofer CS491 5.29.06.

CryCupboard 2.0The New Face to Grocery Shopping

Cheralyn Cofer

CS491

5.29.06

Page 2: CryCupboard 2.0 The New Face to Grocery Shopping Cheralyn Cofer CS491 5.29.06.

cry cupboard?

• Definition• Origin• Why use it as a website name?

Page 3: CryCupboard 2.0 The New Face to Grocery Shopping Cheralyn Cofer CS491 5.29.06.

Recap

• What is CryCupboard.com’s service?

– The 3 C’s:• Centralization• Cross-referencing• Coordination

• Why do we need it?

Page 4: CryCupboard 2.0 The New Face to Grocery Shopping Cheralyn Cofer CS491 5.29.06.

The Larger Aspiration

• Combat the fastfood phenomena

• Internet niche that’s still untapped

• Tool to help career parents

Page 5: CryCupboard 2.0 The New Face to Grocery Shopping Cheralyn Cofer CS491 5.29.06.

The Personal Aspiration

Page 6: CryCupboard 2.0 The New Face to Grocery Shopping Cheralyn Cofer CS491 5.29.06.

What we’ll discuss

• Rethinking the orthography

• The grocery list as a “smart list”

• Some SQL insights

Page 7: CryCupboard 2.0 The New Face to Grocery Shopping Cheralyn Cofer CS491 5.29.06.

• The traditional one-to-many organization of a recipe box

• Problem: Is Chicken Caesar Salad a chicken dish or a salad dish?

• It can be both!

Rethinking the orthography

Recipe Meal Type

Page 8: CryCupboard 2.0 The New Face to Grocery Shopping Cheralyn Cofer CS491 5.29.06.

• The virtual recipe box allows many-to-many organization

• There is no “shelf”– Chicken Caesar Salad is both a chicken dish and a salad

• Restructuring

Rethinking the orthography

Recipe Meal TypeRecipeTypeLine

Page 9: CryCupboard 2.0 The New Face to Grocery Shopping Cheralyn Cofer CS491 5.29.06.

• Step 1: The big picture

The grocery list as a “smart list”

SELECT [recipe ingredients]…

UNION

SELECT [ad-hoc items]…

Page 10: CryCupboard 2.0 The New Face to Grocery Shopping Cheralyn Cofer CS491 5.29.06.

• Step 2: User considerations

– Grocery list could be 20+ items– Tedious to un-check the same items

Solution Find a way to “remember” what user has in-stock

The grocery list as a “smart list”

Page 11: CryCupboard 2.0 The New Face to Grocery Shopping Cheralyn Cofer CS491 5.29.06.

• Step 3: Record finalized list items

Procedure

• Record checked items

• Record un-checked items in not in database

The grocery list as a “smart list”

Page 12: CryCupboard 2.0 The New Face to Grocery Shopping Cheralyn Cofer CS491 5.29.06.

• Step 3 (cont): Record finalized list items

Implementation

• The 3 scenarios

• Actions: Insert / Update / Do nothing

• Data value: New timestamp / Keep existing timestamp

• Data structure: use Set vs. Map

Example

The grocery list as a “smart list”

Page 13: CryCupboard 2.0 The New Face to Grocery Shopping Cheralyn Cofer CS491 5.29.06.

• Step 4: Now put the smart in “smart list”

Automate some of the user’s un-checking

How:• Compare the recorded ingredient history to the average

shelf-life of each ingredient to evaluate ingredient status

Purpose

The grocery list as a “smart list”

Page 14: CryCupboard 2.0 The New Face to Grocery Shopping Cheralyn Cofer CS491 5.29.06.

• Step 4 (cont): Now put the smart in “smart list”

Implementation:

• Create a view that does the calculation on the fly

• Left-join the data set with this view results

• Mark each ingredient as either ok, overdue, or n/a

The grocery list as a “smart list”

Page 15: CryCupboard 2.0 The New Face to Grocery Shopping Cheralyn Cofer CS491 5.29.06.

• Step 4 (cont): Now put the smart in “smart list”

CREATE VIEW view_smart_items AS

SELECT f.u_id, f.item_id, f.date_finalized, g.shelf_life_days, datediff(now(), f.date_finalized) AS diff,

CASE 1

WHEN (g.shelf_life_days IS NULL)

THEN 'na'

WHEN (datediff(now(), f.date_finalized) > g.shelf_life_days) THEN'overdue'

ELSE 'ok' END AS status

FROM finalized_grocery_items f, groceryitemscategorymember g

WHERE f.item_id=g.item_id

The grocery list as a “smart list”

Page 16: CryCupboard 2.0 The New Face to Grocery Shopping Cheralyn Cofer CS491 5.29.06.

• Step 5: Putting it all together query = (SELECT tmp.a_id, tmp.aisle, tmp.ic_id, tmp.aislecategory, tmp.unit, tmp.quantity, tmp.g_id, tmp.g_name, tmp.item_id, tmp.itemname, tmp.r_id,

tmp.r_name, tmp.item_brand, tmp.details, tmp.sequence, CAST(tmp.ingrec_id AS CHAR), v.status, v.date_finalized FROM ( SELECT a.a_id, a.a_name AS aisle, ic.ic_id, ic.ic_name aislecategory, ir.unit, ir.quantity, gs.g_id, gs.g_name, g.item_id, g.item_name

itemname, r.r_id, r.r_name, ir.item_brand, ir.details, gsla.location_seq AS sequence, ir.ingrec_id FROM recipes r, ingredientsinrecipe ir, itemcategories ic, grocerystoreaislecategory gsac, aisle a, grocerystores gs, grocerystorelocatedaisles

gsla, groceryitemscategorymember g WHERE r.r_id=ir.r_id AND ir.item_id=g.item_id AND g.ic_id=ic.ic_id AND gsac.g_id=gs.g_id AND gsac.a_id=a.a_id AND gsac.ic_id=ic.ic_id AND gsla.g_id=gs.g_id AND gsla.a_id=a.a_id AND r.r_id in (SELECT r_id FROM recipescomposingmealplans where mp_id= ? ) AND gs.g_id = ? ) tmp LEFT JOIN view_smart_items v on (tmp.item_id=v.item_id AND v.u_id= ?) ) UNION (SELECT tmp.a_id, tmp.a_name, tmp.ic_id, tmp.ic_name,'','',tmp.g_id,tmp.g_name,tmp.item_id, tmp.item_name,'','','','',tmp.location_seq,'',

v.status, v.date_finalized FROM (SELECT a.a_id, a.a_name, ic.ic_id, ic.ic_name,gs.g_id,gs.g_name,g.item_id, g.item_name,gsla.location_seq

FROM groceryitemscategorymember g, itemcategories ic, grocerystoreaislecategory gsac, aisle a, grocerystores gs, grocerystorelocatedaisles gsla WHERE g.ic_id=ic.ic_id

AND gsac.g_id=gs.g_id AND gsac.a_id=a.a_id AND gsac.ic_id=ic.ic_id AND gsla.g_id=gs.g_id AND gsla.a_id=a.a_id AND gs.g_id = ? AND g.item_id IN ( " + itemsQueryIn + " ) ) tmp LEFT JOIN view_smart_items v on (tmp.item_id=v.item_id AND v.u_id= ?) ) ORDER BY sequence, aisle, aislecategory, itemname ;

The grocery list as a “smart list”

Page 17: CryCupboard 2.0 The New Face to Grocery Shopping Cheralyn Cofer CS491 5.29.06.

• Cast operation– Similar to Oracle’s To_char and To_Date functions

– When to use

– Why I used

SELECT CAST(tmp.ingrec_id AS CHAR)…

Some SQL insights

Page 18: CryCupboard 2.0 The New Face to Grocery Shopping Cheralyn Cofer CS491 5.29.06.

• Using hexidecimal

– When to use

– Why I used

SELECT r.r_id, r.r_name, r.r_source, replace(r.r_directions,0xD,'<br>'), r.r_serving_size, r.r_scope, r.added

FROM …

– #0xD represents a carriage return

Some SQL insights

Page 19: CryCupboard 2.0 The New Face to Grocery Shopping Cheralyn Cofer CS491 5.29.06.

• An SQL question

– Is there a function that takes an array and outputs a list such as:

WHERE (r.r_type like ‘%Appetizer%’ OR r.r_type like ‘%Dessert%’ OR r.r_type like ‘%Side dish%’)

– How do you use the Prepared Statement ? with a comma-separated list such as:

WHERE r.r_id IN (23,45,88)

Some SQL…questions

Page 20: CryCupboard 2.0 The New Face to Grocery Shopping Cheralyn Cofer CS491 5.29.06.

• What we discussed

– Rethinking the orthography

– The grocery list as a “smart list”

– Some SQL insights

In Conclusion

Page 21: CryCupboard 2.0 The New Face to Grocery Shopping Cheralyn Cofer CS491 5.29.06.

• Some fun things we can do next

– Automate a user’s “favorite recipes” list

– Suggest recommended meals with consideration to “in stock” items

– Functionality to download grocery list to PDA

In Conclusion