**WATCH** Think Piece: [Carol Dweck: The power of believing that you can improve](http://www.ted.com/talks/carol_dweck_the_power_of_believing_that_you_can_improve)
**WRITE** a Medium post about something technical or non technical you learned this week
+| May 1 |
**CODE:** [OOP](homework/week-0.md)
**WATCH** Think Piece: [Carol Dweck: The power of believing that you can improve](http://www.ted.com/talks/carol_dweck_the_power_of_believing_that_you_can_improve)
**WRITE** a Medium post about something technical or non technical you learned this week
**WRITE** a Medium post about something technical or non technical you learned this week
+| May 15 |
**CODE:** [Revenge of the Horoscope App](homework/week-2.md)
diff --git a/exercises/10_Github-Debugging/src/BuggyClass.java b/exercises/10_Github-Debugging/src/BuggyClass.java
new file mode 100644
index 00000000..9ea7c1e9
--- /dev/null
+++ b/exercises/10_Github-Debugging/src/BuggyClass.java
@@ -0,0 +1,62 @@
+public class BuggyClass {
+ static int N = 1000*1000;
+ static int TRIES = 100;
+ static int TOLERANCE = 10;
+
+ static int used_loop = 0;
+ static int used_recursive = 0;
+ static int used_divide_and_conquer = 0;
+
+ public static void main(String[] args) {
+ int[] A = new int[N];
+ int BIG = 1000*1000*1000;
+ long correct_sum = 0;
+ for(int i=0; i p;
+ }
+
+ public static int sum_loop(int[] A){
+ int sum = 0;
+ for(int i=0; i<=A.length; i++) {
+ sum += A[i];
+ }
+ return sum;
+ }
+
+ public static int sum_recursive(int i, int[] A){
+ if(i==A.length - 1) {
+ return 0; }
+ return A[i+1] + sum_recursive(i+1, A);
+ }
+
+ public static int sum_divide_and_conquer(int lo, int hi, int[] A) {
+ int mid = A.length/2;
+ if(lo==hi) {
+ return A[0]; }
+ return sum_divide_and_conquer(lo, mid, A) + sum_divide_and_conquer(mid, hi, A);
+ }
+
+}
\ No newline at end of file
diff --git a/exercises/assessment_prep.md b/exercises/assessment_prep.md
new file mode 100644
index 00000000..48da1c93
--- /dev/null
+++ b/exercises/assessment_prep.md
@@ -0,0 +1,22 @@
+### Assessment Prep
+
+In order to be prepared for the assessment, make sure you know how to do the following things. If you don't know,
+don't just look up how to do it. Practice doing it in an application, several times.
+
+1. Start a new Android project.
+
+1. Create a new Activity.
+
+1. Move between two Activities using Explicit intents.
+
+1. Open up a new app using Implicit Intents.
+
+1. Know the order of Activity lifecycle methods for common cases.
+
+1. Be able to reason about the Activity lifecycle diagram.
+
+1. Know how to use the resources directory.
+
+1. Know how to add a widget to a layout and set properties on it.
+
+1. Know how to use a linear layout, including weight, gravity and layout_gravity.
diff --git a/homework/.DS_Store b/homework/.DS_Store
new file mode 100644
index 00000000..2e2cc11c
Binary files /dev/null and b/homework/.DS_Store differ
diff --git a/homework/week-2.md b/homework/week-2.md
new file mode 100644
index 00000000..2a94fa16
--- /dev/null
+++ b/homework/week-2.md
@@ -0,0 +1,53 @@
+##Homework
+
+##### Exercise 1: Code Review
+
+Find your name in the first column; code review the developer in the second column.
+
+| Reviewer | Reviewee |
+|----------|----------|
+| Abass Bayo-Awoyemi | Jaellys Bales
+| Allison Bojarski | Madelyn Tavarez
+| Alvin Kuang | Kadeem Maragh
+| Anthony Fermin | Rosmary Fermin
+| Anthony McBride | Joshelyn Vivas
+| Charlyn Buchanan | John Gomez
+| Dison Ruan | Sufei Zhao
+| Elvis Boves | George Syrimis
+| George Syrimis | Alvin Kuang
+| Hanbi Choi | Pooja Pasawala
+| Hoshiko Oki | Jose Garcia
+| Jaellys Bales | Jorge Reina
+| Janneisy Vidals | Reinard Cox
+| John Gomez | Anthony Fermin
+| Jorge Reina | Anthony McBride
+| Jose Garcia | Luke Lee
+| Joshelyn Vivas | Vanice Yee
+| Kadeem Maragh | Na Li
+| Madelyn Tavarez | Allison Bojarski
+| Marbella Vidals | Tasha Smith
+| Na Li | Elvis Boves
+| Ramona Harrison | Charlyn Buchanan
+| Raynaldie Acevedi | Dison Ruan
+| Reinard Cox | Ramona Harrison
+| Rosmary Fermin | Yuliya Kaleda
+| Sarah Kim | Raynaldie Acevedi
+| Sufei Zhao | Hanbi Choi
+| Tasha Smith | Marbella Vidals
+| Vanice Yee | Sarah Kim
+| Yuliya Kaleda | Abass Bayo-Awoyemi
+| Pooja Pasawala | Hoshiko Oki
+| Luke Lee | Janneisy Vidals
+
+It is on you to have communication with your reviewer/reviewee in order to complete this assignment.
+
+##### Exercise 2: Revenge of the Horoscope App
+* Resolve all comments your reviewer leaves on your app.
+* Change the layout of at least two of your existing features.
+* Create consistent UI styling across your app.
+* Test your app on at least two devices of different screen sizes.
+
+The main purpose of this week's assignment is to play around with the visual elements - have fun with it and iterate with your peers.
+
+##### Bonus
+* Create your own [Theme](http://developer.android.com/guide/topics/ui/themes.html).
diff --git a/homework/week-2/jvidals1/Horoscope/.gitignore b/homework/week-2/jvidals1/Horoscope/.gitignore
new file mode 100644
index 00000000..afbdab33
--- /dev/null
+++ b/homework/week-2/jvidals1/Horoscope/.gitignore
@@ -0,0 +1,6 @@
+.gradle
+/local.properties
+/.idea/workspace.xml
+/.idea/libraries
+.DS_Store
+/build
diff --git a/homework/week-2/jvidals1/Horoscope/.idea/.name b/homework/week-2/jvidals1/Horoscope/.idea/.name
new file mode 100644
index 00000000..b6e2a0b0
--- /dev/null
+++ b/homework/week-2/jvidals1/Horoscope/.idea/.name
@@ -0,0 +1 @@
+Horoscope
\ No newline at end of file
diff --git a/homework/week-2/jvidals1/Horoscope/.idea/compiler.xml b/homework/week-2/jvidals1/Horoscope/.idea/compiler.xml
new file mode 100644
index 00000000..217af471
--- /dev/null
+++ b/homework/week-2/jvidals1/Horoscope/.idea/compiler.xml
@@ -0,0 +1,23 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/homework/week-2/jvidals1/Horoscope/.idea/copyright/profiles_settings.xml b/homework/week-2/jvidals1/Horoscope/.idea/copyright/profiles_settings.xml
new file mode 100644
index 00000000..e7bedf33
--- /dev/null
+++ b/homework/week-2/jvidals1/Horoscope/.idea/copyright/profiles_settings.xml
@@ -0,0 +1,3 @@
+
+
+
\ No newline at end of file
diff --git a/homework/week-2/jvidals1/Horoscope/.idea/encodings.xml b/homework/week-2/jvidals1/Horoscope/.idea/encodings.xml
new file mode 100644
index 00000000..e206d70d
--- /dev/null
+++ b/homework/week-2/jvidals1/Horoscope/.idea/encodings.xml
@@ -0,0 +1,5 @@
+
+
+
+
+
diff --git a/homework/week-2/jvidals1/Horoscope/.idea/gradle.xml b/homework/week-2/jvidals1/Horoscope/.idea/gradle.xml
new file mode 100644
index 00000000..736c7b5c
--- /dev/null
+++ b/homework/week-2/jvidals1/Horoscope/.idea/gradle.xml
@@ -0,0 +1,18 @@
+
+
+
+
+
+
+
diff --git a/homework/week-2/jvidals1/Horoscope/.idea/misc.xml b/homework/week-2/jvidals1/Horoscope/.idea/misc.xml
new file mode 100644
index 00000000..58ff01f3
--- /dev/null
+++ b/homework/week-2/jvidals1/Horoscope/.idea/misc.xml
@@ -0,0 +1,26 @@
+
+
+
+
+
+
+
+
+
+
+
+
+ 1.7
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/homework/week-2/jvidals1/Horoscope/app/build.gradle b/homework/week-2/jvidals1/Horoscope/app/build.gradle
new file mode 100644
index 00000000..f9bd98b7
--- /dev/null
+++ b/homework/week-2/jvidals1/Horoscope/app/build.gradle
@@ -0,0 +1,25 @@
+apply plugin: 'com.android.application'
+
+android {
+ compileSdkVersion 22
+ buildToolsVersion "22.0.1"
+
+ defaultConfig {
+ applicationId "jvidals1.c4q.nyc.horoscope"
+ minSdkVersion 17
+ targetSdkVersion 22
+ versionCode 1
+ versionName "1.0"
+ }
+ buildTypes {
+ release {
+ minifyEnabled false
+ proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
+ }
+ }
+}
+
+dependencies {
+ compile fileTree(dir: 'libs', include: ['*.jar'])
+ compile 'com.android.support:appcompat-v7:22.1.1'
+}
diff --git a/homework/week-2/jvidals1/Horoscope/app/proguard-rules.pro b/homework/week-2/jvidals1/Horoscope/app/proguard-rules.pro
new file mode 100644
index 00000000..6f7bbd8a
--- /dev/null
+++ b/homework/week-2/jvidals1/Horoscope/app/proguard-rules.pro
@@ -0,0 +1,17 @@
+# Add project specific ProGuard rules here.
+# By default, the flags in this file are appended to flags specified
+# in /Users/s3a/Library/Android/sdk/tools/proguard/proguard-android.txt
+# You can edit the include path and order by changing the proguardFiles
+# directive in build.gradle.
+#
+# For more details, see
+# http://developer.android.com/guide/developing/tools/proguard.html
+
+# Add any project specific keep options here:
+
+# If your project uses WebView with JS, uncomment the following
+# and specify the fully qualified class name to the JavaScript interface
+# class:
+#-keepclassmembers class fqcn.of.javascript.interface.for.webview {
+# public *;
+#}
diff --git a/homework/week-2/jvidals1/Horoscope/app/src/androidTest/java/jvidals1/c4q/nyc/horoscope/ApplicationTest.java b/homework/week-2/jvidals1/Horoscope/app/src/androidTest/java/jvidals1/c4q/nyc/horoscope/ApplicationTest.java
new file mode 100644
index 00000000..797a2be0
--- /dev/null
+++ b/homework/week-2/jvidals1/Horoscope/app/src/androidTest/java/jvidals1/c4q/nyc/horoscope/ApplicationTest.java
@@ -0,0 +1,13 @@
+package jvidals1.c4q.nyc.horoscope;
+
+import android.app.Application;
+import android.test.ApplicationTestCase;
+
+/**
+ * Testing Fundamentals
+ */
+public class ApplicationTest extends ApplicationTestCase {
+ public ApplicationTest() {
+ super(Application.class);
+ }
+}
\ No newline at end of file
diff --git a/homework/week-2/jvidals1/Horoscope/app/src/main/AndroidManifest.xml b/homework/week-2/jvidals1/Horoscope/app/src/main/AndroidManifest.xml
new file mode 100644
index 00000000..1ede474c
--- /dev/null
+++ b/homework/week-2/jvidals1/Horoscope/app/src/main/AndroidManifest.xml
@@ -0,0 +1,50 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/homework/week-2/jvidals1/Horoscope/app/src/main/java/jvidals1/c4q/nyc/horoscope/FindSignActivity.java b/homework/week-2/jvidals1/Horoscope/app/src/main/java/jvidals1/c4q/nyc/horoscope/FindSignActivity.java
new file mode 100644
index 00000000..027b0ed3
--- /dev/null
+++ b/homework/week-2/jvidals1/Horoscope/app/src/main/java/jvidals1/c4q/nyc/horoscope/FindSignActivity.java
@@ -0,0 +1,16 @@
+package jvidals1.c4q.nyc.horoscope;
+
+import android.app.Activity;
+import android.os.Bundle;
+
+/**
+ * Created by s3a on 5/16/15.
+ */
+public class FindSignActivity extends Activity{
+
+ @Override
+ protected void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ setContentView(R.layout.activity_sign);
+ }
+}
diff --git a/homework/week-2/jvidals1/Horoscope/app/src/main/java/jvidals1/c4q/nyc/horoscope/GameActivity.java b/homework/week-2/jvidals1/Horoscope/app/src/main/java/jvidals1/c4q/nyc/horoscope/GameActivity.java
new file mode 100644
index 00000000..1b48563f
--- /dev/null
+++ b/homework/week-2/jvidals1/Horoscope/app/src/main/java/jvidals1/c4q/nyc/horoscope/GameActivity.java
@@ -0,0 +1,15 @@
+package jvidals1.c4q.nyc.horoscope;
+
+import android.app.Activity;
+import android.os.Bundle;
+
+/**
+ * Created by s3a on 5/16/15.
+ */
+public class GameActivity extends Activity{
+ @Override
+ protected void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ setContentView(R.layout.activity_game);
+ }
+}
diff --git a/homework/week-2/jvidals1/Horoscope/app/src/main/java/jvidals1/c4q/nyc/horoscope/MainActivity.java b/homework/week-2/jvidals1/Horoscope/app/src/main/java/jvidals1/c4q/nyc/horoscope/MainActivity.java
new file mode 100644
index 00000000..403bfd15
--- /dev/null
+++ b/homework/week-2/jvidals1/Horoscope/app/src/main/java/jvidals1/c4q/nyc/horoscope/MainActivity.java
@@ -0,0 +1,93 @@
+package jvidals1.c4q.nyc.horoscope;
+
+import android.content.Intent;
+import android.support.v7.app.ActionBarActivity;
+import android.os.Bundle;
+import android.view.Menu;
+import android.view.MenuItem;
+import android.view.View;
+import android.widget.Button;
+import android.widget.ListView;
+
+import java.lang.reflect.Array;
+
+
+public class MainActivity extends ActionBarActivity {
+
+ Button buttonSign;
+ Button buttonGame;
+ Button buttonRomantic;
+ Button buttonFind;
+
+
+
+ @Override
+ protected void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ setContentView(R.layout.activity_main);
+
+ buttonFind = (Button) findViewById(R.id.button_find_sign);
+ buttonGame = (Button) findViewById(R.id.button_game);
+ buttonRomantic = (Button) findViewById(R.id.button_romantic);
+ buttonSign = (Button) findViewById(R.id.button_sign);
+
+ buttonFind.setOnClickListener(new View.OnClickListener() {
+ @Override
+ public void onClick(View view) {
+ Intent intent = new Intent(getApplicationContext(), FindSignActivity.class);
+ startActivity(intent);
+ }
+ });
+
+ buttonGame.setOnClickListener(new View.OnClickListener() {
+ @Override
+ public void onClick(View view) {
+ Intent intent = new Intent(getApplicationContext(), GameActivity.class);
+ startActivity(intent);
+
+ }
+ });
+
+ buttonRomantic.setOnClickListener(new View.OnClickListener() {
+ @Override
+ public void onClick(View view) {
+ Intent intent = new Intent(getApplicationContext(), RomanticActivity.class);
+ startActivity(intent);
+
+ }
+ });
+
+ buttonSign.setOnClickListener(new View.OnClickListener() {
+ @Override
+ public void onClick(View view) {
+ Intent intent = new Intent(getApplicationContext(), SignActivity.class);
+ startActivity(intent);
+
+ }
+ });
+
+
+ }
+
+ @Override
+ public boolean onCreateOptionsMenu(Menu menu) {
+ // Inflate the menu; this adds items to the action bar if it is present.
+ getMenuInflater().inflate(R.menu.menu_main, menu);
+ return true;
+ }
+
+ @Override
+ public boolean onOptionsItemSelected(MenuItem item) {
+ // Handle action bar item clicks here. The action bar will
+ // automatically handle clicks on the Home/Up button, so long
+ // as you specify a parent activity in AndroidManifest.xml.
+ int id = item.getItemId();
+
+ //noinspection SimplifiableIfStatement
+ if (id == R.id.action_settings) {
+ return true;
+ }
+
+ return super.onOptionsItemSelected(item);
+ }
+}
diff --git a/homework/week-2/jvidals1/Horoscope/app/src/main/java/jvidals1/c4q/nyc/horoscope/RomanticActivity.java b/homework/week-2/jvidals1/Horoscope/app/src/main/java/jvidals1/c4q/nyc/horoscope/RomanticActivity.java
new file mode 100644
index 00000000..75c997f3
--- /dev/null
+++ b/homework/week-2/jvidals1/Horoscope/app/src/main/java/jvidals1/c4q/nyc/horoscope/RomanticActivity.java
@@ -0,0 +1,16 @@
+package jvidals1.c4q.nyc.horoscope;
+
+import android.app.Activity;
+import android.os.Bundle;
+
+/**
+ * Created by s3a on 5/16/15.
+ */
+public class RomanticActivity extends Activity {
+ @Override
+ protected void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ setContentView(R.layout.activity_romantic);
+
+ }
+}
diff --git a/homework/week-2/jvidals1/Horoscope/app/src/main/java/jvidals1/c4q/nyc/horoscope/SignActivity.java b/homework/week-2/jvidals1/Horoscope/app/src/main/java/jvidals1/c4q/nyc/horoscope/SignActivity.java
new file mode 100644
index 00000000..87f49188
--- /dev/null
+++ b/homework/week-2/jvidals1/Horoscope/app/src/main/java/jvidals1/c4q/nyc/horoscope/SignActivity.java
@@ -0,0 +1,39 @@
+package jvidals1.c4q.nyc.horoscope;
+
+import android.app.Activity;
+import android.app.ListActivity;
+import android.content.Intent;
+import android.os.Bundle;
+import android.view.View;
+import android.widget.ArrayAdapter;
+import android.widget.ListView;
+
+/**
+ * Created by s3a on 5/16/15.
+ */
+public class SignActivity extends ListActivity {
+
+ public final static String[] signs = {"Capricorn","Aquarius","Pieces", "Aries", "Taurus", "Gemini", "Cancer"," Leo", "Virgo", "Libra","Scorpio"};
+
+ ListView list;
+
+ @Override
+ protected void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ setContentView(R.layout.activity_sign);
+
+
+
+ ArrayAdapter adapter = new ArrayAdapter(getApplicationContext(), android.R.layout.simple_list_item_1, signs);
+
+ setListAdapter(adapter);
+ }
+
+ @Override
+ protected void onListItemClick(ListView l, View v, int position, long id) {
+ super.onListItemClick(l, v, position, id);
+ Intent intent = new Intent(getApplicationContext(), SignInfoActivity.class);
+ intent.putExtra("position", position);
+ startActivity(intent);
+ }
+}
diff --git a/homework/week-2/jvidals1/Horoscope/app/src/main/java/jvidals1/c4q/nyc/horoscope/SignInfoActivity.java b/homework/week-2/jvidals1/Horoscope/app/src/main/java/jvidals1/c4q/nyc/horoscope/SignInfoActivity.java
new file mode 100644
index 00000000..69f66991
--- /dev/null
+++ b/homework/week-2/jvidals1/Horoscope/app/src/main/java/jvidals1/c4q/nyc/horoscope/SignInfoActivity.java
@@ -0,0 +1,32 @@
+package jvidals1.c4q.nyc.horoscope;
+
+import android.app.Activity;
+import android.app.ExpandableListActivity;
+import android.os.Bundle;
+import android.widget.TextView;
+
+import java.lang.reflect.Array;
+
+/**
+ * Created by s3a on 5/16/15.
+ */
+public class SignInfoActivity extends Activity {
+
+ TextView textView;
+ int position;
+
+ @Override
+ protected void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ setContentView(R.layout.activity_info);
+ position = getIntent().getExtras().getInt("position");
+
+
+
+
+ }
+}
+
+
+
+
diff --git a/homework/week-2/jvidals1/Horoscope/app/src/main/res/layout/activity_findsign.xml b/homework/week-2/jvidals1/Horoscope/app/src/main/res/layout/activity_findsign.xml
new file mode 100644
index 00000000..3509b841
--- /dev/null
+++ b/homework/week-2/jvidals1/Horoscope/app/src/main/res/layout/activity_findsign.xml
@@ -0,0 +1,6 @@
+
+
+
+
\ No newline at end of file
diff --git a/homework/week-2/jvidals1/Horoscope/app/src/main/res/layout/activity_game.xml b/homework/week-2/jvidals1/Horoscope/app/src/main/res/layout/activity_game.xml
new file mode 100644
index 00000000..3509b841
--- /dev/null
+++ b/homework/week-2/jvidals1/Horoscope/app/src/main/res/layout/activity_game.xml
@@ -0,0 +1,6 @@
+
+
+
+
\ No newline at end of file
diff --git a/homework/week-2/jvidals1/Horoscope/app/src/main/res/layout/activity_info.xml b/homework/week-2/jvidals1/Horoscope/app/src/main/res/layout/activity_info.xml
new file mode 100644
index 00000000..696fae4e
--- /dev/null
+++ b/homework/week-2/jvidals1/Horoscope/app/src/main/res/layout/activity_info.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/homework/week-2/jvidals1/Horoscope/app/src/main/res/layout/activity_main.xml b/homework/week-2/jvidals1/Horoscope/app/src/main/res/layout/activity_main.xml
new file mode 100644
index 00000000..6a2de1be
--- /dev/null
+++ b/homework/week-2/jvidals1/Horoscope/app/src/main/res/layout/activity_main.xml
@@ -0,0 +1,53 @@
+
+
+
+
+
+
+
+
+
+
diff --git a/homework/week-2/jvidals1/Horoscope/app/src/main/res/layout/activity_romantic.xml b/homework/week-2/jvidals1/Horoscope/app/src/main/res/layout/activity_romantic.xml
new file mode 100644
index 00000000..3509b841
--- /dev/null
+++ b/homework/week-2/jvidals1/Horoscope/app/src/main/res/layout/activity_romantic.xml
@@ -0,0 +1,6 @@
+
+
+
+
\ No newline at end of file
diff --git a/homework/week-2/jvidals1/Horoscope/app/src/main/res/layout/activity_sign.xml b/homework/week-2/jvidals1/Horoscope/app/src/main/res/layout/activity_sign.xml
new file mode 100644
index 00000000..d4b83601
--- /dev/null
+++ b/homework/week-2/jvidals1/Horoscope/app/src/main/res/layout/activity_sign.xml
@@ -0,0 +1,11 @@
+
+
+
+
diff --git a/homework/week-2/jvidals1/Horoscope/app/src/main/res/menu/menu_main.xml b/homework/week-2/jvidals1/Horoscope/app/src/main/res/menu/menu_main.xml
new file mode 100644
index 00000000..b1cb9081
--- /dev/null
+++ b/homework/week-2/jvidals1/Horoscope/app/src/main/res/menu/menu_main.xml
@@ -0,0 +1,6 @@
+
diff --git a/homework/week-2/jvidals1/Horoscope/app/src/main/res/mipmap-hdpi/ic_launcher.png b/homework/week-2/jvidals1/Horoscope/app/src/main/res/mipmap-hdpi/ic_launcher.png
new file mode 100644
index 00000000..cde69bcc
Binary files /dev/null and b/homework/week-2/jvidals1/Horoscope/app/src/main/res/mipmap-hdpi/ic_launcher.png differ
diff --git a/homework/week-2/jvidals1/Horoscope/app/src/main/res/mipmap-mdpi/ic_launcher.png b/homework/week-2/jvidals1/Horoscope/app/src/main/res/mipmap-mdpi/ic_launcher.png
new file mode 100644
index 00000000..c133a0cb
Binary files /dev/null and b/homework/week-2/jvidals1/Horoscope/app/src/main/res/mipmap-mdpi/ic_launcher.png differ
diff --git a/homework/week-2/jvidals1/Horoscope/app/src/main/res/mipmap-xhdpi/ic_launcher.png b/homework/week-2/jvidals1/Horoscope/app/src/main/res/mipmap-xhdpi/ic_launcher.png
new file mode 100644
index 00000000..bfa42f0e
Binary files /dev/null and b/homework/week-2/jvidals1/Horoscope/app/src/main/res/mipmap-xhdpi/ic_launcher.png differ
diff --git a/homework/week-2/jvidals1/Horoscope/app/src/main/res/mipmap-xxhdpi/ic_launcher.png b/homework/week-2/jvidals1/Horoscope/app/src/main/res/mipmap-xxhdpi/ic_launcher.png
new file mode 100644
index 00000000..324e72cd
Binary files /dev/null and b/homework/week-2/jvidals1/Horoscope/app/src/main/res/mipmap-xxhdpi/ic_launcher.png differ
diff --git a/homework/week-2/jvidals1/Horoscope/app/src/main/res/values-w820dp/dimens.xml b/homework/week-2/jvidals1/Horoscope/app/src/main/res/values-w820dp/dimens.xml
new file mode 100644
index 00000000..63fc8164
--- /dev/null
+++ b/homework/week-2/jvidals1/Horoscope/app/src/main/res/values-w820dp/dimens.xml
@@ -0,0 +1,6 @@
+
+
+ 64dp
+
diff --git a/homework/week-2/jvidals1/Horoscope/app/src/main/res/values/dimens.xml b/homework/week-2/jvidals1/Horoscope/app/src/main/res/values/dimens.xml
new file mode 100644
index 00000000..47c82246
--- /dev/null
+++ b/homework/week-2/jvidals1/Horoscope/app/src/main/res/values/dimens.xml
@@ -0,0 +1,5 @@
+
+
+ 16dp
+ 16dp
+
diff --git a/homework/week-2/jvidals1/Horoscope/app/src/main/res/values/strings.xml b/homework/week-2/jvidals1/Horoscope/app/src/main/res/values/strings.xml
new file mode 100644
index 00000000..bb419ca4
--- /dev/null
+++ b/homework/week-2/jvidals1/Horoscope/app/src/main/res/values/strings.xml
@@ -0,0 +1,8 @@
+
+ Horoscope
+
+ Hello world!
+ Settings
+
+
+
diff --git a/homework/week-2/jvidals1/Horoscope/app/src/main/res/values/styles.xml b/homework/week-2/jvidals1/Horoscope/app/src/main/res/values/styles.xml
new file mode 100644
index 00000000..766ab993
--- /dev/null
+++ b/homework/week-2/jvidals1/Horoscope/app/src/main/res/values/styles.xml
@@ -0,0 +1,8 @@
+
+
+
+
+
+
diff --git a/homework/week-2/jvidals1/Horoscope/build.gradle b/homework/week-2/jvidals1/Horoscope/build.gradle
new file mode 100644
index 00000000..d3ff69d6
--- /dev/null
+++ b/homework/week-2/jvidals1/Horoscope/build.gradle
@@ -0,0 +1,19 @@
+// Top-level build file where you can add configuration options common to all sub-projects/modules.
+
+buildscript {
+ repositories {
+ jcenter()
+ }
+ dependencies {
+ classpath 'com.android.tools.build:gradle:1.1.0'
+
+ // NOTE: Do not place your application dependencies here; they belong
+ // in the individual module build.gradle files
+ }
+}
+
+allprojects {
+ repositories {
+ jcenter()
+ }
+}
diff --git a/homework/week-2/jvidals1/Horoscope/gradle.properties b/homework/week-2/jvidals1/Horoscope/gradle.properties
new file mode 100644
index 00000000..1d3591c8
--- /dev/null
+++ b/homework/week-2/jvidals1/Horoscope/gradle.properties
@@ -0,0 +1,18 @@
+# Project-wide Gradle settings.
+
+# IDE (e.g. Android Studio) users:
+# Gradle settings configured through the IDE *will override*
+# any settings specified in this file.
+
+# For more details on how to configure your build environment visit
+# http://www.gradle.org/docs/current/userguide/build_environment.html
+
+# Specifies the JVM arguments used for the daemon process.
+# The setting is particularly useful for tweaking memory settings.
+# Default value: -Xmx10248m -XX:MaxPermSize=256m
+# org.gradle.jvmargs=-Xmx2048m -XX:MaxPermSize=512m -XX:+HeapDumpOnOutOfMemoryError -Dfile.encoding=UTF-8
+
+# When configured, Gradle will run in incubating parallel mode.
+# This option should only be used with decoupled projects. More details, visit
+# http://www.gradle.org/docs/current/userguide/multi_project_builds.html#sec:decoupled_projects
+# org.gradle.parallel=true
\ No newline at end of file
diff --git a/homework/week-2/jvidals1/Horoscope/gradle/wrapper/gradle-wrapper.jar b/homework/week-2/jvidals1/Horoscope/gradle/wrapper/gradle-wrapper.jar
new file mode 100644
index 00000000..8c0fb64a
Binary files /dev/null and b/homework/week-2/jvidals1/Horoscope/gradle/wrapper/gradle-wrapper.jar differ
diff --git a/homework/week-2/jvidals1/Horoscope/gradle/wrapper/gradle-wrapper.properties b/homework/week-2/jvidals1/Horoscope/gradle/wrapper/gradle-wrapper.properties
new file mode 100644
index 00000000..0c71e760
--- /dev/null
+++ b/homework/week-2/jvidals1/Horoscope/gradle/wrapper/gradle-wrapper.properties
@@ -0,0 +1,6 @@
+#Wed Apr 10 15:27:10 PDT 2013
+distributionBase=GRADLE_USER_HOME
+distributionPath=wrapper/dists
+zipStoreBase=GRADLE_USER_HOME
+zipStorePath=wrapper/dists
+distributionUrl=https\://services.gradle.org/distributions/gradle-2.2.1-all.zip
diff --git a/homework/week-2/jvidals1/Horoscope/gradlew b/homework/week-2/jvidals1/Horoscope/gradlew
new file mode 100755
index 00000000..91a7e269
--- /dev/null
+++ b/homework/week-2/jvidals1/Horoscope/gradlew
@@ -0,0 +1,164 @@
+#!/usr/bin/env bash
+
+##############################################################################
+##
+## Gradle start up script for UN*X
+##
+##############################################################################
+
+# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
+DEFAULT_JVM_OPTS=""
+
+APP_NAME="Gradle"
+APP_BASE_NAME=`basename "$0"`
+
+# Use the maximum available, or set MAX_FD != -1 to use that value.
+MAX_FD="maximum"
+
+warn ( ) {
+ echo "$*"
+}
+
+die ( ) {
+ echo
+ echo "$*"
+ echo
+ exit 1
+}
+
+# OS specific support (must be 'true' or 'false').
+cygwin=false
+msys=false
+darwin=false
+case "`uname`" in
+ CYGWIN* )
+ cygwin=true
+ ;;
+ Darwin* )
+ darwin=true
+ ;;
+ MINGW* )
+ msys=true
+ ;;
+esac
+
+# For Cygwin, ensure paths are in UNIX format before anything is touched.
+if $cygwin ; then
+ [ -n "$JAVA_HOME" ] && JAVA_HOME=`cygpath --unix "$JAVA_HOME"`
+fi
+
+# Attempt to set APP_HOME
+# Resolve links: $0 may be a link
+PRG="$0"
+# Need this for relative symlinks.
+while [ -h "$PRG" ] ; do
+ ls=`ls -ld "$PRG"`
+ link=`expr "$ls" : '.*-> \(.*\)$'`
+ if expr "$link" : '/.*' > /dev/null; then
+ PRG="$link"
+ else
+ PRG=`dirname "$PRG"`"/$link"
+ fi
+done
+SAVED="`pwd`"
+cd "`dirname \"$PRG\"`/" >&-
+APP_HOME="`pwd -P`"
+cd "$SAVED" >&-
+
+CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar
+
+# Determine the Java command to use to start the JVM.
+if [ -n "$JAVA_HOME" ] ; then
+ if [ -x "$JAVA_HOME/jre/sh/java" ] ; then
+ # IBM's JDK on AIX uses strange locations for the executables
+ JAVACMD="$JAVA_HOME/jre/sh/java"
+ else
+ JAVACMD="$JAVA_HOME/bin/java"
+ fi
+ if [ ! -x "$JAVACMD" ] ; then
+ die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME
+
+Please set the JAVA_HOME variable in your environment to match the
+location of your Java installation."
+ fi
+else
+ JAVACMD="java"
+ which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
+
+Please set the JAVA_HOME variable in your environment to match the
+location of your Java installation."
+fi
+
+# Increase the maximum file descriptors if we can.
+if [ "$cygwin" = "false" -a "$darwin" = "false" ] ; then
+ MAX_FD_LIMIT=`ulimit -H -n`
+ if [ $? -eq 0 ] ; then
+ if [ "$MAX_FD" = "maximum" -o "$MAX_FD" = "max" ] ; then
+ MAX_FD="$MAX_FD_LIMIT"
+ fi
+ ulimit -n $MAX_FD
+ if [ $? -ne 0 ] ; then
+ warn "Could not set maximum file descriptor limit: $MAX_FD"
+ fi
+ else
+ warn "Could not query maximum file descriptor limit: $MAX_FD_LIMIT"
+ fi
+fi
+
+# For Darwin, add options to specify how the application appears in the dock
+if $darwin; then
+ GRADLE_OPTS="$GRADLE_OPTS \"-Xdock:name=$APP_NAME\" \"-Xdock:icon=$APP_HOME/media/gradle.icns\""
+fi
+
+# For Cygwin, switch paths to Windows format before running java
+if $cygwin ; then
+ APP_HOME=`cygpath --path --mixed "$APP_HOME"`
+ CLASSPATH=`cygpath --path --mixed "$CLASSPATH"`
+
+ # We build the pattern for arguments to be converted via cygpath
+ ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null`
+ SEP=""
+ for dir in $ROOTDIRSRAW ; do
+ ROOTDIRS="$ROOTDIRS$SEP$dir"
+ SEP="|"
+ done
+ OURCYGPATTERN="(^($ROOTDIRS))"
+ # Add a user-defined pattern to the cygpath arguments
+ if [ "$GRADLE_CYGPATTERN" != "" ] ; then
+ OURCYGPATTERN="$OURCYGPATTERN|($GRADLE_CYGPATTERN)"
+ fi
+ # Now convert the arguments - kludge to limit ourselves to /bin/sh
+ i=0
+ for arg in "$@" ; do
+ CHECK=`echo "$arg"|egrep -c "$OURCYGPATTERN" -`
+ CHECK2=`echo "$arg"|egrep -c "^-"` ### Determine if an option
+
+ if [ $CHECK -ne 0 ] && [ $CHECK2 -eq 0 ] ; then ### Added a condition
+ eval `echo args$i`=`cygpath --path --ignore --mixed "$arg"`
+ else
+ eval `echo args$i`="\"$arg\""
+ fi
+ i=$((i+1))
+ done
+ case $i in
+ (0) set -- ;;
+ (1) set -- "$args0" ;;
+ (2) set -- "$args0" "$args1" ;;
+ (3) set -- "$args0" "$args1" "$args2" ;;
+ (4) set -- "$args0" "$args1" "$args2" "$args3" ;;
+ (5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;;
+ (6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;;
+ (7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;;
+ (8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;;
+ (9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;;
+ esac
+fi
+
+# Split up the JVM_OPTS And GRADLE_OPTS values into an array, following the shell quoting and substitution rules
+function splitJvmOpts() {
+ JVM_OPTS=("$@")
+}
+eval splitJvmOpts $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS
+JVM_OPTS[${#JVM_OPTS[*]}]="-Dorg.gradle.appname=$APP_BASE_NAME"
+
+exec "$JAVACMD" "${JVM_OPTS[@]}" -classpath "$CLASSPATH" org.gradle.wrapper.GradleWrapperMain "$@"
diff --git a/homework/week-2/jvidals1/Horoscope/gradlew.bat b/homework/week-2/jvidals1/Horoscope/gradlew.bat
new file mode 100644
index 00000000..aec99730
--- /dev/null
+++ b/homework/week-2/jvidals1/Horoscope/gradlew.bat
@@ -0,0 +1,90 @@
+@if "%DEBUG%" == "" @echo off
+@rem ##########################################################################
+@rem
+@rem Gradle startup script for Windows
+@rem
+@rem ##########################################################################
+
+@rem Set local scope for the variables with windows NT shell
+if "%OS%"=="Windows_NT" setlocal
+
+@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
+set DEFAULT_JVM_OPTS=
+
+set DIRNAME=%~dp0
+if "%DIRNAME%" == "" set DIRNAME=.
+set APP_BASE_NAME=%~n0
+set APP_HOME=%DIRNAME%
+
+@rem Find java.exe
+if defined JAVA_HOME goto findJavaFromJavaHome
+
+set JAVA_EXE=java.exe
+%JAVA_EXE% -version >NUL 2>&1
+if "%ERRORLEVEL%" == "0" goto init
+
+echo.
+echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
+echo.
+echo Please set the JAVA_HOME variable in your environment to match the
+echo location of your Java installation.
+
+goto fail
+
+:findJavaFromJavaHome
+set JAVA_HOME=%JAVA_HOME:"=%
+set JAVA_EXE=%JAVA_HOME%/bin/java.exe
+
+if exist "%JAVA_EXE%" goto init
+
+echo.
+echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME%
+echo.
+echo Please set the JAVA_HOME variable in your environment to match the
+echo location of your Java installation.
+
+goto fail
+
+:init
+@rem Get command-line arguments, handling Windowz variants
+
+if not "%OS%" == "Windows_NT" goto win9xME_args
+if "%@eval[2+2]" == "4" goto 4NT_args
+
+:win9xME_args
+@rem Slurp the command line arguments.
+set CMD_LINE_ARGS=
+set _SKIP=2
+
+:win9xME_args_slurp
+if "x%~1" == "x" goto execute
+
+set CMD_LINE_ARGS=%*
+goto execute
+
+:4NT_args
+@rem Get arguments from the 4NT Shell from JP Software
+set CMD_LINE_ARGS=%$
+
+:execute
+@rem Setup the command line
+
+set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar
+
+@rem Execute Gradle
+"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %CMD_LINE_ARGS%
+
+:end
+@rem End local scope for the variables with windows NT shell
+if "%ERRORLEVEL%"=="0" goto mainEnd
+
+:fail
+rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of
+rem the _cmd.exe /c_ return code!
+if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1
+exit /b 1
+
+:mainEnd
+if "%OS%"=="Windows_NT" endlocal
+
+:omega
diff --git a/homework/week-2/jvidals1/Horoscope/settings.gradle b/homework/week-2/jvidals1/Horoscope/settings.gradle
new file mode 100644
index 00000000..e7b4def4
--- /dev/null
+++ b/homework/week-2/jvidals1/Horoscope/settings.gradle
@@ -0,0 +1 @@
+include ':app'
diff --git a/lessons/10_Github-Debugging.md b/lessons/10_Github-Debugging.md
new file mode 100644
index 00000000..077765d0
--- /dev/null
+++ b/lessons/10_Github-Debugging.md
@@ -0,0 +1,273 @@
+### Github and Debugging
+
+#### Objective
+Students will learn general software engineering practices and will be able
+to navigate Git, have more available debugging tools at their disposal,
+and learn the basics of exception handling.
+
+#### Pre-Work
+
+[Github & Git Foundations](https://www.youtube.com/playlist?list=PLg7s6cbtAD15G8lNyoaYDuKZSKyJrgwB-)
+
+#### Do Now (Morning)
+
+Create a new Java class to do the following string operations:
+* Reverse - "Quispe" -> "epsiuQ"
+* Uppercase words - "i love java" -> "I Love Java"
+* Reverse words - "Java Love I" -> "I Love Java"
+* Parse Addition Expression - "3 + (4 + 2)" -> "9". Assume that the only operations are "+" and parentheses.
+
+#### Git and Github
+
+*Git* is a version control system. *Github* is a very popular website for storing git repositories and collaborating.
+
+Some basic git commands:
+
+| Command | Description |
+|---------|-------------|
+| git init | Creates a new git repository |
+| git clone [path] | Creates a local copy of a repository |
+| git add | Adds a file or directory to staging |
+| git rm | Adds the removal of a file or directory to staging |
+| git commit | Commits staged changes to head |
+| git push origin [branch] | Push changes to [branch] at remote |
+| git status | Lists staged changes and changes that have not get been staged |
+| git fetch | Get remote changes |
+| git pull | Get remote changes and merge |
+| git branch | List branches and indicate current branch |
+| git branch [branchname] | Create new branch called [branchname] |
+| git checkout [branchname] | Switch to branch called [branchname] |
+| git checkout -b [branchname] | Create a new branch called [branchname] and switch to it |
+| git blame | Revision and author of a line of the file |
+| git log | Show commit logs |
+| git diff | Show changes between commits |
+
+Other vocabulary:
+* Fork: A copy of a repository.
+* Master: The main branch.
+* Origin: The remote repository.
+* Upstream: The repository that origin copied.
+* Branch: A series of changes starting at a particular commit.
+
+## Git log --graph
+[git log graph](https://github.com/davisRoman/git_dag/blob/master/intro_to_the_dag.md)
+
+-----
+
+> Exercise: Partner with the other person at your table.
+
+> Part I: Fork and Pull
+
+> 1. Create a repository on Github.
+
+> 1. Clone the repository locally, add the Do Now, and push the change to Github.
+
+> 1. Fork your partner's repository.
+
+> 1. Clone the fork of your partner's repository locally.
+
+> 1. Set the upstream to your partner's repository.
+
+> 1. Create a new branch and make changes to the file in your partner's repository.
+
+> 1. Commit and push this change to Github.
+
+> 1. Open a pull request to your partner's repository master.
+
+> 1. Code review the pull request from your partner.
+
+> 1. Respond to all the changes requested on your pull request (either make the change or push back), and push your changes.
+
+> 1. Accept your partner's pull request.
+
+> Part II: Merge Conflict
+
+> 1. Make your partner a collaborator on your repository.
+
+> 1. Sync your local clone of your repository to origin master.
+
+> 1. Clone your partner's repository locally.
+
+> 1. Make changes to the file in your partner's repository and push.
+
+> 1. Make changes to the file in your own repository and commit.
+
+> 1. Before pushing, sync to origin master.
+
+> 1. Resolve any merge conflicts.
+
+> 1. Push your changes to your repository.
+
+> Part III: Shared repository
+
+> 1. Sync your local clone of your partner's repository to origin master.
+
+> 1. Create a new branch on your partner's repository.
+
+> 1. Push this branch to Github.
+
+> 1. Make changes to the file on this branch and push.
+
+> 1. Open a pull request from this branch to master.
+
+> 1. Code review your partner's pull request on your repository.
+
+> 1. Respond to all comments on your partner's code review on your pull request (either make changes or push back) and push your changes.
+
+> 1. Go back and forth code reviewing and responding to comments until all comments are resolved.
+
+> 1. If comments can't be resolved, ask a third party to weigh in on your pull requst.
+
+> 1. Once all comments are resolved, accept your partner's pull request.
+
+> 1. Sync your local clones of your repositories to origin master, and delete all resolved branches.
+
+#### Do Now (Afternoon)
+
+Find the pull request for your reviewee from this week's code review. Download and run their horoscope app. If there are any problems with the pull request, please work with your reviewee to fix this pull request.
+
+#### Debugging Basics
+
+##### Variable Scope
+
+A few rules about variable scope:
+* Anything declared between {} belongs only to that block. This also goes for the signature of a loop.
+* Anything declared in a method only exists for the scope of that method.
+* Reference class variables using the `this` keyword.
+
+##### Reading Stack Traces
+
+Stack traces explain the series of method calls that have led to the current state. For example:
+
+```
+Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 1000000
+ at BuggyClass.sum_loop(BuggyClass.java:44)
+ at BuggyClass.find_sum(BuggyClass.java:29)
+ at BuggyClass.main(BuggyClass.java:19) <5 internal calls>
+```
+
+Means that `main` called `find_sum` on line 19, `find_sum` called `sum_loop` on line 29, and `sum_loop` received an `ArrayIndexOutOfBoundsException` on line 44. On the other hand:
+
+```
+Exception in thread "main" java.lang.StackOverflowError
+ at BuggyClass.sum_recursive(BuggyClass.java:50)
+ at BuggyClass.sum_recursive(BuggyClass.java:52)
+ at BuggyClass.sum_recursive(BuggyClass.java:52)
+ at BuggyClass.sum_recursive(BuggyClass.java:52)
+ at BuggyClass.sum_recursive(BuggyClass.java:52)
+ at BuggyClass.sum_recursive(BuggyClass.java:52)
+ at BuggyClass.sum_recursive(BuggyClass.java:52)
+ at BuggyClass.sum_recursive(BuggyClass.java:52)
+ at BuggyClass.sum_recursive(BuggyClass.java:52)
+ at BuggyClass.sum_recursive(BuggyClass.java:52)
+ at BuggyClass.sum_recursive(BuggyClass.java:52)
+ .
+ .
+ .
+```
+
+means that `sum_recursive` infinitely calls itself and eventually crashes.
+
+### Example:
+- Division by zero
+
+```java
+public class Main {
+
+ public static void m1(){
+ System.out.println("Method one - m1");
+ m2();
+ }
+
+ public static void m2(){
+ System.out.println("Method two - m2");
+
+ int x= 10;
+ int y = 0;
+
+ double z = x/y;
+
+ System.out.println(z);
+ }
+
+ public static void main(String[] args) {
+ System.out.println("Starting Main method");
+ m1();
+ System.out.println("End main method");
+ }
+}
+```
+Output:
+```
+Exception in thread "main" java.lang.ArithmeticException: / by zero
+Starting Main method
+Method one - m1
+Method two - m2
+ at com.company.Main.m2(Main.java:16)
+ at com.company.Main.m1(Main.java:7)
+ at com.company.Main.main(Main.java:25)
+ at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
+ at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
+ at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
+ at java.lang.reflect.Method.invoke(Method.java:606)
+ at com.intellij.rt.execution.application.AppMain.main(AppMain.java:134)
+```
+
+##### Using the Debugger
+
+The debugger allows you to set breakpoints in your code. When you run your code, the execution stops when it reaches a breakpoint. At this point, you can inspect the current state of the program as well as step through the code line by line.
+
+> Exercise: Debug [BuggyClass](../exercises/10_Github-Debugging/src/BuggyClass.java). BuggyClass attemps to compare several different array addition algorithms, but it's fraught with bugs. Remember, bugs are problems with functionality, not just crashing. It may be tricky to infer what someone *meant* to do with the code - in the future you may have to deal with (and fix!) poorly-documented code written by someone who is no longer at the company, or is otherwise not contactable.
+
+#### Exception Handling
+
+Exceptions are errors generated by your program. These errors normally crash your program, but you can write code to `catch` them and recover.
+
+First, let's see how to raise an exception. For example, let's say you had a `myDivide` method. Since dividing by zero isn't defined arithmetically, we should raise an exception.
+
+```
+public static double myDivide(int dividend, int divisor) {
+ if(divisor == 0){
+ throw new IllegalArgumentException("Dividing By Zero");
+ }
+ // implement division here
+ .
+ .
+ .
+}
+```
+
+Once an exception is raised, calling code may handle it. For example, let's say you are using the `myDivide` API for a calculator application.
+
+```
+public static void myCalculator(String userInput) {
+ .
+ . // parse userInput
+ .
+ .
+ try {
+ myDivide(num1, num2);
+ }
+ catch (IllegalArgumentException e) {
+ alert_user(e.getMessage());
+ }
+ .
+ .
+ .
+ .
+}
+```
+
+Here, we use the exception to alert the user as to what went wrong. Exceptions propogate up the call stack, so the method that called `myCalculator` can also handle the exception. If the exception gets to the top of the call stack, then the program crashes.
+
+##### Printing and Logging ( time permitting )
+
+Printing is a very useful debugging method that you've probably already touched. Printing is useful because it can help display intermediate program state. Logging is essentially the same method (i.e. writing state to external output).
+
+#### Bonus
+
+[Project Euler Problem 20](https://projecteuler.net/problem=20)
+
+#### Assessment
+
+What does the first line in the call stack indicate? ([Exit Ticket](https://docs.google.com/forms/d/1a-gfjjsn35N-C6wrQU9y02vHoYLFaEfjUgD7J91n3rM/viewform?usp=send_form))
diff --git a/lessons/11_Android-UI-Basics.md b/lessons/11_Android-UI-Basics.md
new file mode 100644
index 00000000..77135c09
--- /dev/null
+++ b/lessons/11_Android-UI-Basics.md
@@ -0,0 +1,68 @@
+### Android UI Basics
+
+#### Objective
+
+Students will learn about the properties of widgets and containers and be more comfortable editing widget properties in the XML.
+
+#### Code Review
+
+Code Review a lucky developer's app!
+
+#### Lesson (Morning)
+
+Widgets are UI components meant to serve a particular interaction with the user. Containers determine the structure of how widgets are arranged. Here are a few key things to know about widgets:
+* Parent/Child: If a widget A is structured within another widget or container B, then A is a child of B, and B is a parent of A.
+* Padding vs. Margin: Padding is internal spacing, margin is external spacing.
+* match_parent: Fills the space of the parent element.
+* wrap_content: Takes up the minimum amount of space needed for the content.
+* Structure vs Function: XML displays the structure of the user interface. Function should be definied in Java. When structure needs to be defined in Java, it should be disconnected from function as much as possible.
+* Structure vs Style: Structure defines the hierchy in which elements are laid out, while style dictates things such as font color and size. Although both can be defined in XML, these different pieces should also be separated from each other when possible.
+* Callbacks: A callback is a piece of code passed to another piece of code, which controls the execution. We will start to see code that asynchronously executes some action. This may be different from the "linear" programs you may have been writing before. Reasoning about synchronous/asynchronous items will become important in the future.
+
+
+> Exercise: Without using the designer, do the following:
+
+> 1. Create an Android app with a blank Activity.
+
+> 1. In the main layout, add a button.
+
+> 1. Add another button positioned underneath the first button.
+
+> 1. Add another button positioned undernead the second button.
+
+> 1. Have your buttons display the text 1, 2, and 3 based on their position.
+
+> 1. Add a button to the right of each button displaying R1, R2, and R3 respectively.
+
+> 1. Add a TextView under each button.
+
+> 1. Create an OnClickListener in a new class.
+
+> 1. Implement a method that increments a class variable OnClick i.e. this variable should count the number of times something has been clicked.
+
+> 1. Add a constructor to the OnClickListener that takes in a TextView and change OnClick such that it updates the TextView with the # of times the button has been clicked.
+
+> 1. For each button, add an instance of the OnClickListener and pass in the corresponding TextView.
+
+> 1. Create a new TextView that displays all the times all of the Buttons have been clicked in total.
+
+> 1. Exchange code review with the person at your table and resolve all comments.
+
+#### Do Now (Afternoon)
+
+Add TODOs into your horoscope app based on what we learned this morning.
+
+#### Github
+
+Work on yesterdays' [Github exercises](10_Github-Debugging.md)
+
+#### Group Project
+
+Spend the rest of the day working on your group project with your team.
+
+#### Assessment
+
+[Exit Ticket](https://docs.google.com/forms/d/1a-gfjjsn35N-C6wrQU9y02vHoYLFaEfjUgD7J91n3rM/viewform?usp=send_form)
+
+#### Resources
+* Textbook: The Theory of Widgets, The Android User Interface, Basic Widgets
diff --git a/lessons/12_Layouts.md b/lessons/12_Layouts.md
new file mode 100644
index 00000000..2de12d51
--- /dev/null
+++ b/lessons/12_Layouts.md
@@ -0,0 +1,48 @@
+## Layouts
+
+### Lesson: Layouts
+
+#### Views and View Groups
+
+A View is the building block of a basic UI element. Views are bounded by a rectangle and are in charge of event
+handling and drawing. A Widget is a type of View. A ViewGroup is also a type of View.
+
+A ViewGroup is a container class that contains other Views, including ViewGroups. Layouts are a type of ViewGroup.
+
+#### Layout Basics
+
+Layouts define the structure of a user interface, typically in the XML, although you can dynamically create
+the UI in Java.
+
+When loading a layout, call `setContentView`. You have probably seen this in your `onCreate`, but take note that
+you can change the layout at any time. Activities are not implicitly associated with layouts.
+
+A Layout is a rectangle - the boundaries of the a Layout are defined by `getLeft()`, `getRight()`, `getTop()`, and
+`getBottom()`. You can also use `getHeight()` and `getWidth()` to get the actual size of the Layout box.
+
+#### Linear Layout
+
+In a Linear Layout, all the children are aligned either horizontally or vertically, depending on the
+`android:orientation`. That is, all the children are placed one after another linearly.
+
+* Orientation: Vertical for rows, horizontal for columns.
+* Gravity: [Gravity and layout_gravity](http://sandipchitale.blogspot.com/2010/05/linearlayout-gravity-and-layoutgravity.html)
+* Weight: Weight describes the relative importance of the Views, which allows these views to expand to fit the
+parent proportionally. For example, two views with a weight of 1 will fill the layout at a 1:1 ratio (or, the same
+amount), and two views with weights of 1 and 2 will fill the layout with a 1:2 ratio (so, 1/3 and 2/3 of the screen).
+
+#### Relative Layout
+
+In a Relative Layout, the children can define their position relative to the parent or the other children available.
+
+### Exercises
+
+> 1. Create a form using a Linear Layout that asks a user for first and last name, username, DOB, etc.
+
+> 1. Create a calculator layout using a Linear Layout. Use this opportunity to figure out how to nest layouts.
+
+### [Quiz](https://docs.google.com/forms/d/1AZO4SyYgglEzroJqMbEuTTRp3D7TnEBiI--LHcfNTSo/viewform?usp=send_form)
+
+### Assessment
+
+[Exit ticket](https://docs.google.com/forms/d/1a-gfjjsn35N-C6wrQU9y02vHoYLFaEfjUgD7J91n3rM/viewform?usp=send_form)
diff --git a/lessons/8_Intro-Final-Project.md b/lessons/8_Intro-Final-Project.md
index b840b80f..092e43d7 100644
--- a/lessons/8_Intro-Final-Project.md
+++ b/lessons/8_Intro-Final-Project.md
@@ -16,6 +16,16 @@ for the Unit 1 final project.
> Exercise: Work with your team to design the project and figure out division of labor.
+> 1. Make a git repo for work & make sure both partners can push.
+
+> 2. Create design for app.
+
+> 3. Put together a schedule for group work.
+
+> 4. Figure out who is taking what parts.
+
+> 5. Create your skeleton project & push to github.
+
#### Assessment