diff --git a/20191128/hp-20191128.pdf b/20191128/hp-20191128.pdf
index 1a516387207ea82b85a05d92696d9e364f0cf1f7..563b9a13967299971a69b572711f8473dee7c7d3 100644
Binary files a/20191128/hp-20191128.pdf and b/20191128/hp-20191128.pdf differ
diff --git a/20191128/hp-20191128.tex b/20191128/hp-20191128.tex
index a64d527716f8eb38f57a3ee8148afde192ae2ab1..6bceba84fdcd51ebad1a256bb42d7d8a20c48ec5 100644
--- a/20191128/hp-20191128.tex
+++ b/20191128/hp-20191128.tex
@@ -634,7 +634,7 @@
           ibpng16 -I/usr/include/glib-2.0 -I/usr/lib/x86_64-linux
           -gnu/glib-2.0/include -lgtk-3 -lgdk-3 -lpangocairo-1.0
           -lpango-1.0 -latk-1.0 -lcairo-gobject -lcairo -lgdk_pix
-          buf-2.0 -lgio-2.0 -lgobject-2.0 -lglib-2.0-o hello-gtk¿
+          buf-2.0 -lgio-2.0 -lgobject-2.0 -lglib-2.0 -o hello-gtk¿
         \end{lstlisting}
         \vspace*{-1cm}
       \end{onlyenv}
diff --git a/20191205/gtk-10.c b/20191205/gtk-10.c
index 928f80f9331b86af1e431385e32691dbd1591b60..f7fb2d5b1c4d3f1082a15b8f3a23fb5480fdd4f1 100644
--- a/20191205/gtk-10.c
+++ b/20191205/gtk-10.c
@@ -3,29 +3,28 @@
 #define WIDTH 320
 #define HEIGHT 240
 
-double t = 0.0;
-
-double x = 10;
-double y = 200;
-double vx = 20;
-double vy = -60;
+double x = 5;
+double y = 95;
+double vx = 0.5;
+double vy = 0.7;
+double dt = 0.05;
 double g = 9.81;
 
 gboolean draw (GtkWidget *widget, cairo_t *c, gpointer data)
 {
   GdkRGBA blue = { 0.0, 0.5, 1.0, 1.0 };
-
   gdk_cairo_set_source_rgba (c, &blue);
-  cairo_rectangle (c, x + vx * t, y + vy * t + 0.5 * g * t * t, 10, 10);
+  cairo_arc (c, x, HEIGHT - y, 5, 0, 2 * G_PI);
   cairo_fill (c);
-
-  return FALSE;  /* TRUE to stop other handlers from being invoked for the event.
-                    FALSE to propagate the event further. */
+  return FALSE;
 }
 
 gboolean timer (GtkWidget *widget)
 {
-  t += 0.05;
+  x += vx * dt;
+  y += vy * dt;
+  vx += 0.0 * dt;
+  vy += (-g) * dt;
   gtk_widget_queue_draw_area (widget, 0, 0, WIDTH, HEIGHT);
   g_timeout_add (50, (GSourceFunc) timer, widget);
   return FALSE;
@@ -34,20 +33,28 @@ gboolean timer (GtkWidget *widget)
 int main (int argc, char **argv)
 {
   gtk_init (&argc, &argv);
-
   GtkWidget *window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
-  gtk_widget_show (window);
   gtk_window_set_title (GTK_WINDOW (window), "Hello");
   g_signal_connect (window, "destroy", G_CALLBACK (gtk_main_quit), NULL);
 
+  GtkWidget *vbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, 5);
+  gtk_container_add (GTK_CONTAINER (window), vbox);
+
+  GtkWidget *button = gtk_button_new_with_label ("Quit");
+  g_signal_connect (button, "clicked", G_CALLBACK (gtk_main_quit), NULL);
+  gtk_container_add (GTK_CONTAINER (vbox), button);
+
   GtkWidget *drawing_area = gtk_drawing_area_new ();
-  gtk_widget_show (drawing_area);
-  gtk_container_add (GTK_CONTAINER (window), drawing_area);
-  gtk_widget_set_size_request (drawing_area, WIDTH, HEIGHT);
+  gtk_container_add (GTK_CONTAINER (vbox), drawing_area);
   g_signal_connect (drawing_area, "draw", G_CALLBACK (draw), NULL);
+  gtk_widget_set_size_request (drawing_area, WIDTH, HEIGHT);
 
   g_timeout_add (50, (GSourceFunc) timer, drawing_area);
 
+  gtk_widget_show (drawing_area);
+  gtk_widget_show (button);
+  gtk_widget_show (vbox);
+  gtk_widget_show (window);
   gtk_main ();
   return 0;
 }
diff --git a/20191205/gtk-11.c b/20191205/gtk-11.c
index 303627b49953e1d37761213505b48fb7a0ff2c02..1fa3d7169dc09ed0a5e89abffdce3cb297509842 100644
--- a/20191205/gtk-11.c
+++ b/20191205/gtk-11.c
@@ -1,35 +1,30 @@
 #include <gtk/gtk.h>
 
-#define WIDTH 320
-#define HEIGHT 240
+#define WIDTH 640
+#define HEIGHT 480
 
-double t = 0.0;
+double x = 5;
+double y = 95;
+double vx = 0.5;
+double vy = 0.7;
 double dt = 0.05;
-
-double x = 10;
-double y = 200;
-double vx = 20;
-double vy = -60;
 double g = 9.81;
 
 gboolean draw (GtkWidget *widget, cairo_t *c, gpointer data)
 {
   GdkRGBA blue = { 0.0, 0.5, 1.0, 1.0 };
-
   gdk_cairo_set_source_rgba (c, &blue);
-  cairo_rectangle (c, x, y, 10, 10);
+  cairo_arc (c, x, HEIGHT - y, 5, 0, 2 * G_PI);
   cairo_fill (c);
-
-  return FALSE;  /* TRUE to stop other handlers from being invoked for the event.
-                    FALSE to propagate the event further. */
+  return FALSE;
 }
 
 gboolean timer (GtkWidget *widget)
 {
-  t += dt;
   x += vx * dt;
   y += vy * dt;
-  vy += g * dt;
+  vx += 0.0 * dt;
+  vy += (-g) * dt;
   gtk_widget_queue_draw_area (widget, 0, 0, WIDTH, HEIGHT);
   g_timeout_add (50, (GSourceFunc) timer, widget);
   return FALSE;
@@ -38,20 +33,28 @@ gboolean timer (GtkWidget *widget)
 int main (int argc, char **argv)
 {
   gtk_init (&argc, &argv);
-
   GtkWidget *window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
-  gtk_widget_show (window);
   gtk_window_set_title (GTK_WINDOW (window), "Hello");
   g_signal_connect (window, "destroy", G_CALLBACK (gtk_main_quit), NULL);
 
+  GtkWidget *vbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, 5);
+  gtk_container_add (GTK_CONTAINER (window), vbox);
+
+  GtkWidget *button = gtk_button_new_with_label ("Quit");
+  g_signal_connect (button, "clicked", G_CALLBACK (gtk_main_quit), NULL);
+  gtk_container_add (GTK_CONTAINER (vbox), button);
+
   GtkWidget *drawing_area = gtk_drawing_area_new ();
-  gtk_widget_show (drawing_area);
-  gtk_container_add (GTK_CONTAINER (window), drawing_area);
-  gtk_widget_set_size_request (drawing_area, WIDTH, HEIGHT);
+  gtk_container_add (GTK_CONTAINER (vbox), drawing_area);
   g_signal_connect (drawing_area, "draw", G_CALLBACK (draw), NULL);
+  gtk_widget_set_size_request (drawing_area, WIDTH, HEIGHT);
 
   g_timeout_add (50, (GSourceFunc) timer, drawing_area);
 
+  gtk_widget_show (drawing_area);
+  gtk_widget_show (button);
+  gtk_widget_show (vbox);
+  gtk_widget_show (window);
   gtk_main ();
   return 0;
 }
diff --git a/20191205/gtk-12.c b/20191205/gtk-12.c
index d551f7a760c7aad6b7146094de6dfe7152eece6f..e0c274336e1ea7a21983daaa95a563796b532e25 100644
--- a/20191205/gtk-12.c
+++ b/20191205/gtk-12.c
@@ -1,41 +1,30 @@
 #include <gtk/gtk.h>
 
-#define WIDTH 320
-#define HEIGHT 240
+#define WIDTH 640
+#define HEIGHT 480
 
-double t = 0.0;
+double x = 5;
+double y = 95;
+double vx = 5.0;
+double vy = 0.7;
 double dt = 0.05;
-
-double x = 10;
-double y = 200;
-double vx = 20;
-double vy = -60;
 double g = 9.81;
 
 gboolean draw (GtkWidget *widget, cairo_t *c, gpointer data)
 {
   GdkRGBA blue = { 0.0, 0.5, 1.0, 1.0 };
-
   gdk_cairo_set_source_rgba (c, &blue);
-  cairo_rectangle (c, x, y, 10, 10);
+  cairo_arc (c, x, HEIGHT - y, 5, 0, 2 * G_PI);
   cairo_fill (c);
-
-  return FALSE;  /* TRUE to stop other handlers from being invoked for the event.
-                    FALSE to propagate the event further. */
+  return FALSE;
 }
 
 gboolean timer (GtkWidget *widget)
 {
-  t += dt;
   x += vx * dt;
   y += vy * dt;
-  vy += g * dt;
-  if (y >= HEIGHT)
-    vy = -vy;
-  if (x >= WIDTH)
-    vx = -vx;
-  if (x <= 0)
-    vx = -vx;
+  vx += 0.0 * dt;
+  vy += (-g) * dt;
   gtk_widget_queue_draw_area (widget, 0, 0, WIDTH, HEIGHT);
   g_timeout_add (50, (GSourceFunc) timer, widget);
   return FALSE;
@@ -44,20 +33,28 @@ gboolean timer (GtkWidget *widget)
 int main (int argc, char **argv)
 {
   gtk_init (&argc, &argv);
-
   GtkWidget *window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
-  gtk_widget_show (window);
   gtk_window_set_title (GTK_WINDOW (window), "Hello");
   g_signal_connect (window, "destroy", G_CALLBACK (gtk_main_quit), NULL);
 
+  GtkWidget *vbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, 5);
+  gtk_container_add (GTK_CONTAINER (window), vbox);
+
+  GtkWidget *button = gtk_button_new_with_label ("Quit");
+  g_signal_connect (button, "clicked", G_CALLBACK (gtk_main_quit), NULL);
+  gtk_container_add (GTK_CONTAINER (vbox), button);
+
   GtkWidget *drawing_area = gtk_drawing_area_new ();
-  gtk_widget_show (drawing_area);
-  gtk_container_add (GTK_CONTAINER (window), drawing_area);
-  gtk_widget_set_size_request (drawing_area, WIDTH, HEIGHT);
+  gtk_container_add (GTK_CONTAINER (vbox), drawing_area);
   g_signal_connect (drawing_area, "draw", G_CALLBACK (draw), NULL);
+  gtk_widget_set_size_request (drawing_area, WIDTH, HEIGHT);
 
   g_timeout_add (50, (GSourceFunc) timer, drawing_area);
 
+  gtk_widget_show (drawing_area);
+  gtk_widget_show (button);
+  gtk_widget_show (vbox);
+  gtk_widget_show (window);
   gtk_main ();
   return 0;
 }
diff --git a/20191205/gtk-13.c b/20191205/gtk-13.c
index 1b7c4dbf2434f88fa3e6ae838b8911e58447a2d9..a91d9abf14066d773103a8fca1e2c41abad40be3 100644
--- a/20191205/gtk-13.c
+++ b/20191205/gtk-13.c
@@ -1,43 +1,30 @@
 #include <gtk/gtk.h>
 
-#define WIDTH 320
-#define HEIGHT 240
-
-double t = 0.0;
-double dt = 0.2;
-
-int r = 5;
-
-double x = 10;
-double y = 200;
-double vx = 20;
-double vy = -60;
+#define WIDTH 640
+#define HEIGHT 480
+
+double x = 5;
+double y = 95;
+double vx = 50.0;
+double vy = 0.7;
+double dt = 0.05;
 double g = 9.81;
 
 gboolean draw (GtkWidget *widget, cairo_t *c, gpointer data)
 {
   GdkRGBA blue = { 0.0, 0.5, 1.0, 1.0 };
-
   gdk_cairo_set_source_rgba (c, &blue);
-  cairo_arc (c, x, y, r, 0, 2 * G_PI);
+  cairo_arc (c, x, HEIGHT - y, 5, 0, 2 * G_PI);
   cairo_fill (c);
-
-  return FALSE;  /* TRUE to stop other handlers from being invoked for the event.
-                    FALSE to propagate the event further. */
+  return FALSE;
 }
 
 gboolean timer (GtkWidget *widget)
 {
-  t += dt;
   x += vx * dt;
   y += vy * dt;
-  vy += g * dt;
-  if (y + r >= HEIGHT)
-    vy = -vy * 0.9;
-  if (x + r >= WIDTH)
-    vx = -vx * 0.9;
-  if (x - r <= 0)
-    vx = -vx * 0.9;
+  vx += 0.0 * dt;
+  vy += (-g) * dt;
   gtk_widget_queue_draw_area (widget, 0, 0, WIDTH, HEIGHT);
   g_timeout_add (50, (GSourceFunc) timer, widget);
   return FALSE;
@@ -46,20 +33,28 @@ gboolean timer (GtkWidget *widget)
 int main (int argc, char **argv)
 {
   gtk_init (&argc, &argv);
-
   GtkWidget *window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
-  gtk_widget_show (window);
   gtk_window_set_title (GTK_WINDOW (window), "Hello");
   g_signal_connect (window, "destroy", G_CALLBACK (gtk_main_quit), NULL);
 
+  GtkWidget *vbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, 5);
+  gtk_container_add (GTK_CONTAINER (window), vbox);
+
+  GtkWidget *button = gtk_button_new_with_label ("Quit");
+  g_signal_connect (button, "clicked", G_CALLBACK (gtk_main_quit), NULL);
+  gtk_container_add (GTK_CONTAINER (vbox), button);
+
   GtkWidget *drawing_area = gtk_drawing_area_new ();
-  gtk_widget_show (drawing_area);
-  gtk_container_add (GTK_CONTAINER (window), drawing_area);
-  gtk_widget_set_size_request (drawing_area, WIDTH, HEIGHT);
+  gtk_container_add (GTK_CONTAINER (vbox), drawing_area);
   g_signal_connect (drawing_area, "draw", G_CALLBACK (draw), NULL);
+  gtk_widget_set_size_request (drawing_area, WIDTH, HEIGHT);
 
   g_timeout_add (50, (GSourceFunc) timer, drawing_area);
 
+  gtk_widget_show (drawing_area);
+  gtk_widget_show (button);
+  gtk_widget_show (vbox);
+  gtk_widget_show (window);
   gtk_main ();
   return 0;
 }
diff --git a/20191205/gtk-14.c b/20191205/gtk-14.c
new file mode 100644
index 0000000000000000000000000000000000000000..47095bb576288741f0753f63966ba853cbc3ad4e
--- /dev/null
+++ b/20191205/gtk-14.c
@@ -0,0 +1,60 @@
+#include <gtk/gtk.h>
+
+#define WIDTH 640
+#define HEIGHT 480
+
+double x = 5;
+double y = 95;
+double vx = 50.0;
+double vy = 70.0;
+double dt = 0.05;
+double g = 9.81;
+
+gboolean draw (GtkWidget *widget, cairo_t *c, gpointer data)
+{
+  GdkRGBA blue = { 0.0, 0.5, 1.0, 1.0 };
+  gdk_cairo_set_source_rgba (c, &blue);
+  cairo_arc (c, x, HEIGHT - y, 5, 0, 2 * G_PI);
+  cairo_fill (c);
+  return FALSE;
+}
+
+gboolean timer (GtkWidget *widget)
+{
+  x += vx * dt;
+  y += vy * dt;
+  vx += 0.0 * dt;
+  vy += (-g) * dt;
+  gtk_widget_queue_draw_area (widget, 0, 0, WIDTH, HEIGHT);
+  g_timeout_add (50, (GSourceFunc) timer, widget);
+  return FALSE;
+}
+
+int main (int argc, char **argv)
+{
+  gtk_init (&argc, &argv);
+  GtkWidget *window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
+  gtk_window_set_title (GTK_WINDOW (window), "Hello");
+  g_signal_connect (window, "destroy", G_CALLBACK (gtk_main_quit), NULL);
+
+  GtkWidget *vbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, 5);
+  gtk_container_add (GTK_CONTAINER (window), vbox);
+
+  GtkWidget *button = gtk_button_new_with_label ("Quit");
+  g_signal_connect (button, "clicked", G_CALLBACK (gtk_main_quit), NULL);
+  gtk_container_add (GTK_CONTAINER (vbox), button);
+
+  GtkWidget *drawing_area = gtk_drawing_area_new ();
+  gtk_container_add (GTK_CONTAINER (vbox), drawing_area);
+  g_signal_connect (drawing_area, "draw", G_CALLBACK (draw), NULL);
+  gtk_widget_set_size_request (drawing_area, WIDTH, HEIGHT);
+
+  g_timeout_add (50, (GSourceFunc) timer, drawing_area);
+
+  gtk_widget_show (drawing_area);
+  gtk_widget_show (button);
+  gtk_widget_show (vbox);
+  gtk_widget_show (window);
+  gtk_main ();
+  return 0;
+}
diff --git a/20191205/gtk-15.c b/20191205/gtk-15.c
new file mode 100644
index 0000000000000000000000000000000000000000..8c93bc8ce1f7e09b7b58ab36732abfebb99d5b51
--- /dev/null
+++ b/20191205/gtk-15.c
@@ -0,0 +1,62 @@
+#include <gtk/gtk.h>
+
+#define WIDTH 640
+#define HEIGHT 480
+
+double x = 5;
+double y = 95;
+double vx = 50.0;
+double vy = 70.0;
+double dt = 0.05;
+double g = 9.81;
+
+gboolean draw (GtkWidget *widget, cairo_t *c, gpointer data)
+{
+  GdkRGBA blue = { 0.0, 0.5, 1.0, 1.0 };
+  gdk_cairo_set_source_rgba (c, &blue);
+  cairo_arc (c, x, HEIGHT - y, 5, 0, 2 * G_PI);
+  cairo_fill (c);
+  return FALSE;
+}
+
+gboolean timer (GtkWidget *widget)
+{
+  x += vx * dt;
+  y += vy * dt;
+  vx += 0.0 * dt;
+  vy += (-g) * dt;
+  if (x + 5 >= WIDTH)
+    vx = -vx;
+  gtk_widget_queue_draw_area (widget, 0, 0, WIDTH, HEIGHT);
+  g_timeout_add (50, (GSourceFunc) timer, widget);
+  return FALSE;
+}
+
+int main (int argc, char **argv)
+{
+  gtk_init (&argc, &argv);
+  GtkWidget *window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
+  gtk_window_set_title (GTK_WINDOW (window), "Hello");
+  g_signal_connect (window, "destroy", G_CALLBACK (gtk_main_quit), NULL);
+
+  GtkWidget *vbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, 5);
+  gtk_container_add (GTK_CONTAINER (window), vbox);
+
+  GtkWidget *button = gtk_button_new_with_label ("Quit");
+  g_signal_connect (button, "clicked", G_CALLBACK (gtk_main_quit), NULL);
+  gtk_container_add (GTK_CONTAINER (vbox), button);
+
+  GtkWidget *drawing_area = gtk_drawing_area_new ();
+  gtk_container_add (GTK_CONTAINER (vbox), drawing_area);
+  g_signal_connect (drawing_area, "draw", G_CALLBACK (draw), NULL);
+  gtk_widget_set_size_request (drawing_area, WIDTH, HEIGHT);
+
+  g_timeout_add (50, (GSourceFunc) timer, drawing_area);
+
+  gtk_widget_show (drawing_area);
+  gtk_widget_show (button);
+  gtk_widget_show (vbox);
+  gtk_widget_show (window);
+  gtk_main ();
+  return 0;
+}
diff --git a/20191205/gtk-16.c b/20191205/gtk-16.c
new file mode 100644
index 0000000000000000000000000000000000000000..0901dd7f491ca219cceb6c1f344291de0c154f38
--- /dev/null
+++ b/20191205/gtk-16.c
@@ -0,0 +1,63 @@
+#include <gtk/gtk.h>
+
+#define WIDTH 640
+#define HEIGHT 480
+#define RADIUS 5
+
+double x = 5;
+double y = 95;
+double vx = 50.0;
+double vy = 70.0;
+double dt = 0.05;
+double g = 9.81;
+
+gboolean draw (GtkWidget *widget, cairo_t *c, gpointer data)
+{
+  GdkRGBA blue = { 0.0, 0.5, 1.0, 1.0 };
+  gdk_cairo_set_source_rgba (c, &blue);
+  cairo_arc (c, x, HEIGHT - y, RADIUS, 0, 2 * G_PI);
+  cairo_fill (c);
+  return FALSE;
+}
+
+gboolean timer (GtkWidget *widget)
+{
+  x += vx * dt;
+  y += vy * dt;
+  vx += 0.0 * dt;
+  vy += (-g) * dt;
+  if (x + RADIUS >= WIDTH)
+    vx = -vx;
+  gtk_widget_queue_draw_area (widget, 0, 0, WIDTH, HEIGHT);
+  g_timeout_add (50, (GSourceFunc) timer, widget);
+  return FALSE;
+}
+
+int main (int argc, char **argv)
+{
+  gtk_init (&argc, &argv);
+  GtkWidget *window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
+  gtk_window_set_title (GTK_WINDOW (window), "Hello");
+  g_signal_connect (window, "destroy", G_CALLBACK (gtk_main_quit), NULL);
+
+  GtkWidget *vbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, 5);
+  gtk_container_add (GTK_CONTAINER (window), vbox);
+
+  GtkWidget *button = gtk_button_new_with_label ("Quit");
+  g_signal_connect (button, "clicked", G_CALLBACK (gtk_main_quit), NULL);
+  gtk_container_add (GTK_CONTAINER (vbox), button);
+
+  GtkWidget *drawing_area = gtk_drawing_area_new ();
+  gtk_container_add (GTK_CONTAINER (vbox), drawing_area);
+  g_signal_connect (drawing_area, "draw", G_CALLBACK (draw), NULL);
+  gtk_widget_set_size_request (drawing_area, WIDTH, HEIGHT);
+
+  g_timeout_add (50, (GSourceFunc) timer, drawing_area);
+
+  gtk_widget_show (drawing_area);
+  gtk_widget_show (button);
+  gtk_widget_show (vbox);
+  gtk_widget_show (window);
+  gtk_main ();
+  return 0;
+}
diff --git a/20191205/gtk-17.c b/20191205/gtk-17.c
new file mode 100644
index 0000000000000000000000000000000000000000..978156ac66b448bf164108a7900b18041428bb0c
--- /dev/null
+++ b/20191205/gtk-17.c
@@ -0,0 +1,64 @@
+#include <gtk/gtk.h>
+
+#define WIDTH 640
+#define HEIGHT 480
+#define RADIUS 5
+
+double x = 5;
+double y = 95;
+double vx = 50.0;
+double vy = 70.0;
+double dt = 0.05;
+double g = 9.81;
+double k = 0.1;
+
+gboolean draw (GtkWidget *widget, cairo_t *c, gpointer data)
+{
+  GdkRGBA blue = { 0.0, 0.5, 1.0, 1.0 };
+  gdk_cairo_set_source_rgba (c, &blue);
+  cairo_arc (c, x, HEIGHT - y, RADIUS, 0, 2 * G_PI);
+  cairo_fill (c);
+  return FALSE;
+}
+
+gboolean timer (GtkWidget *widget)
+{
+  x += vx * dt;
+  y += vy * dt;
+  vx += (-k * vx) * dt;
+  vy += (-g - k * vy) * dt;
+  if (x + RADIUS >= WIDTH)
+    vx = -vx;
+  gtk_widget_queue_draw_area (widget, 0, 0, WIDTH, HEIGHT);
+  g_timeout_add (50, (GSourceFunc) timer, widget);
+  return FALSE;
+}
+
+int main (int argc, char **argv)
+{
+  gtk_init (&argc, &argv);
+  GtkWidget *window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
+  gtk_window_set_title (GTK_WINDOW (window), "Hello");
+  g_signal_connect (window, "destroy", G_CALLBACK (gtk_main_quit), NULL);
+
+  GtkWidget *vbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, 5);
+  gtk_container_add (GTK_CONTAINER (window), vbox);
+
+  GtkWidget *button = gtk_button_new_with_label ("Quit");
+  g_signal_connect (button, "clicked", G_CALLBACK (gtk_main_quit), NULL);
+  gtk_container_add (GTK_CONTAINER (vbox), button);
+
+  GtkWidget *drawing_area = gtk_drawing_area_new ();
+  gtk_container_add (GTK_CONTAINER (vbox), drawing_area);
+  g_signal_connect (drawing_area, "draw", G_CALLBACK (draw), NULL);
+  gtk_widget_set_size_request (drawing_area, WIDTH, HEIGHT);
+
+  g_timeout_add (50, (GSourceFunc) timer, drawing_area);
+
+  gtk_widget_show (drawing_area);
+  gtk_widget_show (button);
+  gtk_widget_show (vbox);
+  gtk_widget_show (window);
+  gtk_main ();
+  return 0;
+}
diff --git a/20191205/gtk-18.c b/20191205/gtk-18.c
new file mode 100644
index 0000000000000000000000000000000000000000..a26e54921f6106789e9ded8c34b2bb2028f7e943
--- /dev/null
+++ b/20191205/gtk-18.c
@@ -0,0 +1,64 @@
+#include <gtk/gtk.h>
+
+#define WIDTH 640
+#define HEIGHT 480
+#define RADIUS 5
+
+double x = 5;
+double y = 95;
+double vx = 50.0;
+double vy = 70.0;
+double dt = 0.05;
+double g = 9.81;
+double k = 0.3;
+
+gboolean draw (GtkWidget *widget, cairo_t *c, gpointer data)
+{
+  GdkRGBA blue = { 0.0, 0.5, 1.0, 1.0 };
+  gdk_cairo_set_source_rgba (c, &blue);
+  cairo_arc (c, x, HEIGHT - y, RADIUS, 0, 2 * G_PI);
+  cairo_fill (c);
+  return FALSE;
+}
+
+gboolean timer (GtkWidget *widget)
+{
+  x += vx * dt;
+  y += vy * dt;
+  vx += (-k * vx) * dt;
+  vy += (-g - k * vy) * dt;
+  if (x + RADIUS >= WIDTH)
+    vx = -vx;
+  gtk_widget_queue_draw_area (widget, 0, 0, WIDTH, HEIGHT);
+  g_timeout_add (50, (GSourceFunc) timer, widget);
+  return FALSE;
+}
+
+int main (int argc, char **argv)
+{
+  gtk_init (&argc, &argv);
+  GtkWidget *window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
+  gtk_window_set_title (GTK_WINDOW (window), "Hello");
+  g_signal_connect (window, "destroy", G_CALLBACK (gtk_main_quit), NULL);
+
+  GtkWidget *vbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, 5);
+  gtk_container_add (GTK_CONTAINER (window), vbox);
+
+  GtkWidget *button = gtk_button_new_with_label ("Quit");
+  g_signal_connect (button, "clicked", G_CALLBACK (gtk_main_quit), NULL);
+  gtk_container_add (GTK_CONTAINER (vbox), button);
+
+  GtkWidget *drawing_area = gtk_drawing_area_new ();
+  gtk_container_add (GTK_CONTAINER (vbox), drawing_area);
+  g_signal_connect (drawing_area, "draw", G_CALLBACK (draw), NULL);
+  gtk_widget_set_size_request (drawing_area, WIDTH, HEIGHT);
+
+  g_timeout_add (50, (GSourceFunc) timer, drawing_area);
+
+  gtk_widget_show (drawing_area);
+  gtk_widget_show (button);
+  gtk_widget_show (vbox);
+  gtk_widget_show (window);
+  gtk_main ();
+  return 0;
+}
diff --git a/20191205/gtk-8.c b/20191205/gtk-8.c
index 35edb31368161671917a1523845e73c6d944c8a4..80e5747c13d94699d4883018a5b2457fed9885cb 100644
--- a/20191205/gtk-8.c
+++ b/20191205/gtk-8.c
@@ -3,26 +3,22 @@
 #define WIDTH 320
 #define HEIGHT 240
 
-double t = 0.0;
-
-double vx = 40;
-double vy = 30;
+double x = 5;
+double y = 95;
 
 gboolean draw (GtkWidget *widget, cairo_t *c, gpointer data)
 {
   GdkRGBA blue = { 0.0, 0.5, 1.0, 1.0 };
-
   gdk_cairo_set_source_rgba (c, &blue);
-  cairo_rectangle (c, 10 + vx * t, 10 + vy * t, 10, 10);
+  cairo_arc (c, x, y, 5, 0, 2 * G_PI);
   cairo_fill (c);
-
-  return FALSE;  /* TRUE to stop other handlers from being invoked for the event.
-                    FALSE to propagate the event further. */
+  return FALSE;
 }
 
 gboolean timer (GtkWidget *widget)
 {
-  t += 0.05;
+  x += 0.5;
+  y -= 0.7;
   gtk_widget_queue_draw_area (widget, 0, 0, WIDTH, HEIGHT);
   g_timeout_add (50, (GSourceFunc) timer, widget);
   return FALSE;
@@ -31,20 +27,28 @@ gboolean timer (GtkWidget *widget)
 int main (int argc, char **argv)
 {
   gtk_init (&argc, &argv);
-
   GtkWidget *window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
-  gtk_widget_show (window);
   gtk_window_set_title (GTK_WINDOW (window), "Hello");
   g_signal_connect (window, "destroy", G_CALLBACK (gtk_main_quit), NULL);
 
+  GtkWidget *vbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, 5);
+  gtk_container_add (GTK_CONTAINER (window), vbox);
+
+  GtkWidget *button = gtk_button_new_with_label ("Quit");
+  g_signal_connect (button, "clicked", G_CALLBACK (gtk_main_quit), NULL);
+  gtk_container_add (GTK_CONTAINER (vbox), button);
+
   GtkWidget *drawing_area = gtk_drawing_area_new ();
-  gtk_widget_show (drawing_area);
-  gtk_container_add (GTK_CONTAINER (window), drawing_area);
-  gtk_widget_set_size_request (drawing_area, WIDTH, HEIGHT);
+  gtk_container_add (GTK_CONTAINER (vbox), drawing_area);
   g_signal_connect (drawing_area, "draw", G_CALLBACK (draw), NULL);
+  gtk_widget_set_size_request (drawing_area, 100, 100);
 
   g_timeout_add (50, (GSourceFunc) timer, drawing_area);
 
+  gtk_widget_show (drawing_area);
+  gtk_widget_show (button);
+  gtk_widget_show (vbox);
+  gtk_widget_show (window);
   gtk_main ();
   return 0;
 }
diff --git a/20191205/gtk-9.c b/20191205/gtk-9.c
index af68170dc104db075df0b609a2878d7256050074..7beb24ccbed561b4f7451838ea1120fe71cf8b1c 100644
--- a/20191205/gtk-9.c
+++ b/20191205/gtk-9.c
@@ -3,29 +3,28 @@
 #define WIDTH 320
 #define HEIGHT 240
 
-double t = 0.0;
-
-double x = 10;
-double y = 10;
-double vx = 40;
-double vy = 30;
+double x = 5;
+double y = 95;
+double vx = 0.5;
+double vy = 0.7;
+double dt = 0.05;
 double g = 9.81;
 
 gboolean draw (GtkWidget *widget, cairo_t *c, gpointer data)
 {
   GdkRGBA blue = { 0.0, 0.5, 1.0, 1.0 };
-
   gdk_cairo_set_source_rgba (c, &blue);
-  cairo_rectangle (c, x + vx * t, y + vy * t - 0.5 * g * t * t, 10, 10);
+  cairo_arc (c, x, y, 5, 0, 2 * G_PI);
   cairo_fill (c);
-
-  return FALSE;  /* TRUE to stop other handlers from being invoked for the event.
-                    FALSE to propagate the event further. */
+  return FALSE;
 }
 
 gboolean timer (GtkWidget *widget)
 {
-  t += 0.05;
+  x += vx * dt;
+  y += vy * dt;
+  vx += 0.0 * dt;
+  vy += (-g) * dt;
   gtk_widget_queue_draw_area (widget, 0, 0, WIDTH, HEIGHT);
   g_timeout_add (50, (GSourceFunc) timer, widget);
   return FALSE;
@@ -34,20 +33,28 @@ gboolean timer (GtkWidget *widget)
 int main (int argc, char **argv)
 {
   gtk_init (&argc, &argv);
-
   GtkWidget *window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
-  gtk_widget_show (window);
   gtk_window_set_title (GTK_WINDOW (window), "Hello");
   g_signal_connect (window, "destroy", G_CALLBACK (gtk_main_quit), NULL);
 
+  GtkWidget *vbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, 5);
+  gtk_container_add (GTK_CONTAINER (window), vbox);
+
+  GtkWidget *button = gtk_button_new_with_label ("Quit");
+  g_signal_connect (button, "clicked", G_CALLBACK (gtk_main_quit), NULL);
+  gtk_container_add (GTK_CONTAINER (vbox), button);
+
   GtkWidget *drawing_area = gtk_drawing_area_new ();
-  gtk_widget_show (drawing_area);
-  gtk_container_add (GTK_CONTAINER (window), drawing_area);
-  gtk_widget_set_size_request (drawing_area, WIDTH, HEIGHT);
+  gtk_container_add (GTK_CONTAINER (vbox), drawing_area);
   g_signal_connect (drawing_area, "draw", G_CALLBACK (draw), NULL);
+  gtk_widget_set_size_request (drawing_area, 100, 100);
 
   g_timeout_add (50, (GSourceFunc) timer, drawing_area);
 
+  gtk_widget_show (drawing_area);
+  gtk_widget_show (button);
+  gtk_widget_show (vbox);
+  gtk_widget_show (window);
   gtk_main ();
   return 0;
 }
diff --git a/20191205/hp-20191205.pdf b/20191205/hp-20191205.pdf
index 4086393f57e295c46c0cb1618cec58fd032907f7..d3cb9e3cf0c36c35101d1c56096155b99db8bd70 100644
Binary files a/20191205/hp-20191205.pdf and b/20191205/hp-20191205.pdf differ
diff --git a/20191205/hp-20191205.tex b/20191205/hp-20191205.tex
index 0e88f1319a2e8850a56bcfbe299c7533ccabe6d8..00aba63404fa43e5db265a2a66163dbf9b010ad3 100644
--- a/20191205/hp-20191205.tex
+++ b/20191205/hp-20191205.tex
@@ -119,6 +119,14 @@
       Konvention: Großbuchstaben
   \end{itemize}
 
+%  \pause
+  \bigskip
+
+  Nur Präprozessor laufen lassen:
+  \begin{lstlisting}[style=terminal]
+    $ ¡gcc -E hello-6.c¿
+  \end{lstlisting}
+
 \end{frame}
 
 \subsection{Bibliotheken einbinden}
@@ -155,6 +163,16 @@
       = Datei \file{libfoo.a} in Standard-Verzeichnis
   \end{itemize}
 
+%  \pause
+  \bigskip
+
+  Quelltexte separat compilieren:
+  \begin{lstlisting}[style=terminal]
+    $ ¡gcc -Wall -O hello-6.c -c¿
+    $ ¡gcc -Wall -O pruzzel.c -c¿
+    $ ¡gcc hello-6.o pruzzel.o -o hello-6.c¿
+  \end{lstlisting}
+
 \end{frame}
 
 \subsection{Bibliothek verwenden (Beispiel: GTK+)}
@@ -209,7 +227,7 @@
           ibpng16 -I/usr/include/glib-2.0 -I/usr/lib/x86_64-linux
           -gnu/glib-2.0/include -lgtk-3 -lgdk-3 -lpangocairo-1.0
           -lpango-1.0 -latk-1.0 -lcairo-gobject -lcairo -lgdk_pix
-          buf-2.0 -lgio-2.0 -lgobject-2.0 -lglib-2.0-o hello-gtk¿
+          buf-2.0 -lgio-2.0 -lgobject-2.0 -lglib-2.0 -o hello-gtk¿
         \end{lstlisting}
         \vspace*{-1cm}
       \end{onlyenv}
@@ -339,7 +357,7 @@
   \showsection
   \showsubsection
 
-  \textbf{Beispiel 1: Gleichmäßig beschleunigte Bewegung} (Schräger Wurf)
+  \textbf{Beispiel 1: Gleichmäßig beschleunigte Bewegung} -- Schräger Wurf
 
   \strut\hfill
   \begin{minipage}{2.5cm}
@@ -391,7 +409,7 @@
       \end{lstlisting}
     \end{minipage}%
     \begin{minipage}{5.13cm}
-      Siehe: \file{gtk-13.c}
+      Siehe: \file{gtk-16.c}
     \end{minipage}
   \end{onlyenv}%
   \hfill\strut
diff --git a/20191205/photo-20191205-171706.jpg b/20191205/photo-20191205-171706.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..b9783584460a8f8d659c4eea2b0e676268cd83e0
Binary files /dev/null and b/20191205/photo-20191205-171706.jpg differ
diff --git a/20191205/photo-20191205-171706.txt b/20191205/photo-20191205-171706.txt
new file mode 100644
index 0000000000000000000000000000000000000000..db0f9c7de8cc180ed7ebd4bc5527c9ac20da0bb8
--- /dev/null
+++ b/20191205/photo-20191205-171706.txt
@@ -0,0 +1 @@
+README: Schräger Wurf
diff --git a/README.md b/README.md
index 91c8cc3ffd35160552c8cbfea2cd9006bb2f9523..d82dab87c7e8845b056af0e65c499ba36591dcd1 100644
--- a/README.md
+++ b/README.md
@@ -56,6 +56,7 @@ Tafelbilder:
  * [14.11.2019: Logische und bitweise Und-Verknüpfung (rechts), einzelnes Bit auf 1 setzen (links)](https://gitlab.cvh-server.de/pgerwinski/hp/raw/master/20191114/photo-20191114-172339.jpg)
  * [14.11.2019: Einzelnes Bit auf 1 (rechts) bzw. auf 0 (links) setzen](https://gitlab.cvh-server.de/pgerwinski/hp/raw/master/20191114/photo-20191114-172358.jpg)
  * [14.11.2019: Einzelnes Bit auf 0 setzen (rechts) bzw. umklappen (Mitte) bzw. abfragen (links)](https://gitlab.cvh-server.de/pgerwinski/hp/raw/master/20191114/photo-20191114-172434.jpg)
+ * [05.12.2019: Schräger Wurf](https://gitlab.cvh-server.de/pgerwinski/hp/raw/master/20191205/photo-20191205-171706.jpg)
 
 Praktikumsunterlagen:
 ---------------------
diff --git a/hp-slides-2019ws.pdf b/hp-slides-2019ws.pdf
index 7fd1a30e5988165401bb850f69ff774e23e16761..22b56fe4981b07e15d49d4c585d8857fc98a2961 100644
Binary files a/hp-slides-2019ws.pdf and b/hp-slides-2019ws.pdf differ