From 5ea481887e8b6fdce1c5d48bc6a069b33024b32e Mon Sep 17 00:00:00 2001 From: bielsnohr Date: Thu, 2 Dec 2021 11:29:18 +0000 Subject: [PATCH 01/58] Add reference to git workflows and coding style --- _episodes/10-section1-intro.md | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/_episodes/10-section1-intro.md b/_episodes/10-section1-intro.md index 9bd313ed9..55b7cf031 100644 --- a/_episodes/10-section1-intro.md +++ b/_episodes/10-section1-intro.md @@ -86,6 +86,16 @@ issue management, code review, code testing/Continuous Integration, and collaborative development. +An important concept in collaborative development is version control workflows +(i.e. how to effectively use version control on a project with others). + +### Python Coding Style +Most programming languages will have associated standards and conventions for how the source code +should be formatted and styled. +Although this sounds pedantic, +it is important for maintaining the consistency and readability of code across a project. +Therefore, it is important to be aware of these guidelines +and adhere to whatever the project you are working on has specified. Let's get started with setting up our software development environment! From 235d4ce984ab04c4db6a88c73c84c73da4d89dad Mon Sep 17 00:00:00 2001 From: bielsnohr Date: Thu, 2 Dec 2021 11:34:30 +0000 Subject: [PATCH 02/58] Further update to coding style paragraph --- _episodes/10-section1-intro.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/_episodes/10-section1-intro.md b/_episodes/10-section1-intro.md index 55b7cf031..5dc492284 100644 --- a/_episodes/10-section1-intro.md +++ b/_episodes/10-section1-intro.md @@ -94,8 +94,9 @@ Most programming languages will have associated standards and conventions for ho should be formatted and styled. Although this sounds pedantic, it is important for maintaining the consistency and readability of code across a project. -Therefore, it is important to be aware of these guidelines +Therefore, one should be aware of these guidelines and adhere to whatever the project you are working on has specified. +In Python, we will be looking at a convention called PEP8. Let's get started with setting up our software development environment! From 6716c86b99b3de18fa59473799b954f214bf0241 Mon Sep 17 00:00:00 2001 From: bielsnohr Date: Thu, 2 Dec 2021 16:13:43 +0000 Subject: [PATCH 03/58] Add some more context around section introducing the project --- _episodes/10-section1-intro.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/_episodes/10-section1-intro.md b/_episodes/10-section1-intro.md index 5dc492284..e3efdddee 100644 --- a/_episodes/10-section1-intro.md +++ b/_episodes/10-section1-intro.md @@ -15,7 +15,8 @@ you need to use a number of different tools." to decide which tool is right for you, which may be a matter of personal preference or what the team or community you belong to is using." --- -The first section of the course is dedicated to setting up your environment for collaborative software development. +The first section of the course is dedicated to setting up your environment for collaborative software development +and introducing the project that we will be working on throughout the course. In order to build working (research) software efficiently and to do it in collaboration with others rather than in isolation, you will have to get comfortable with using a number of different tools interchangeably From 40c7319a3e3cea3de2dc9e8375b557988a62c6ba Mon Sep 17 00:00:00 2001 From: bielsnohr Date: Fri, 7 Jan 2022 14:41:38 +0000 Subject: [PATCH 04/58] Add note about Python already being present on Linux --- setup.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/setup.md b/setup.md index 95b3b8db1..c5b2a5c4c 100644 --- a/setup.md +++ b/setup.md @@ -206,6 +206,9 @@ invocations should remain the same regardless of the Python distribution used. To download a Python distribution for your operating system, please head to [Python.org](https://www.python.org/downloads/). +If you are on Linux, +it is likely that the system Python already installed will satisfy the requirements of this course. +Check its version using the commands below. >## Recommended Python Version > We recommend using at least Python version 3.8+ but any [supported version](https://devguide.python.org/versions/#versions) should work (i.e. version 3.7 onward. From 80cc308b0d64be9127d035d3ec8e4f37588fa118 Mon Sep 17 00:00:00 2001 From: bielsnohr Date: Fri, 7 Jan 2022 17:55:18 +0000 Subject: [PATCH 05/58] Small typos and suggestions for 13-ides --- _episodes/13-ides.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/_episodes/13-ides.md b/_episodes/13-ides.md index d96e2d599..4ee962692 100644 --- a/_episodes/13-ides.md +++ b/_episodes/13-ides.md @@ -486,7 +486,8 @@ including: inline documentation ([*docstrings*](../15-coding-conventions/index.html#documentation-strings-aka-docstrings) for any symbol created in accordance with [PEP-257](https://peps.python.org/pep-0257/) - Parameter Info - - the names of parameters in method and function calls + the names and expected types of parameters in method and function calls. + Use this when cursor is on the argument of a function call. - Type Info - type of an expression From c3e9da66d32afdcd77070958bb866bb5cf3c218d Mon Sep 17 00:00:00 2001 From: bielsnohr Date: Tue, 11 Jan 2022 18:19:05 +0000 Subject: [PATCH 06/58] Minor fix to stackoverflow link --- _episodes/15-coding-conventions.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/_episodes/15-coding-conventions.md b/_episodes/15-coding-conventions.md index 01c93980f..85ff3ebfd 100644 --- a/_episodes/15-coding-conventions.md +++ b/_episodes/15-coding-conventions.md @@ -168,7 +168,7 @@ More details on good and bad practices for continuation lines can be found in All lines should be up to 80 characters long; for lines containing comments or docstrings (to be covered later) the line length limit should be 73 - -see [this discussion](https://stackoverflow.com/questions/15438326/python-pep-8-docstring-line-length) +see [this discussion](https://stackoverflow.com/q/15438326) for reasoning behind these numbers. Some teams strongly prefer a longer line length, and seemed to have settled on the length of 100. From 69bf31be33ba0d713c797f6b433e622c33a38c80 Mon Sep 17 00:00:00 2001 From: bielsnohr Date: Thu, 13 Jan 2022 17:53:08 +0000 Subject: [PATCH 07/58] Small improvements to automated testing episode --- _episodes/21-automatically-testing-software.md | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/_episodes/21-automatically-testing-software.md b/_episodes/21-automatically-testing-software.md index da8c97521..a96049289 100644 --- a/_episodes/21-automatically-testing-software.md +++ b/_episodes/21-automatically-testing-software.md @@ -413,9 +413,9 @@ but what you learn can scale to more complex functional testing for applications > Other unit testing frameworks exist for Python, > including Nose2 and Unittest, > and the approach to unit testing can be translated to other languages as well, -> e.g. FRUIT for Fortran, +> e.g. pFUnit for Fortran, > JUnit for Java (the original unit testing framework), -> Catch for C++, etc. +> Catch or gtest for C++, etc. {: .callout} > ## Why Use pytest over unittest? @@ -516,7 +516,9 @@ Notice the `..` after our test script: The error is included in the output so we can see what went wrong. So if we have many tests, we essentially get a report indicating which tests succeeded or failed. -Going back to our list of requirements, do we think these results are easy to understand? +Going back to our list of requirements (the bullets under [Using a Testing +Framework](#using-a-testing-framework)), +do we think these results are easy to understand? > ## Exercise: Write Some Unit Tests > From d4c09e919c757110bc6dbc08b2247994da53e880 Mon Sep 17 00:00:00 2001 From: bielsnohr Date: Mon, 24 Jan 2022 11:42:08 +0000 Subject: [PATCH 08/58] Avoid shadowing builtin fuction names in patient_normalise example --- _episodes/24-diagnosing-issues-improving-robustness.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/_episodes/24-diagnosing-issues-improving-robustness.md b/_episodes/24-diagnosing-issues-improving-robustness.md index 4bf69dc25..8da884d2c 100644 --- a/_episodes/24-diagnosing-issues-improving-robustness.md +++ b/_episodes/24-diagnosing-issues-improving-robustness.md @@ -425,9 +425,9 @@ def patient_normalise(data): Negative values are rounded to 0. """ - max = np.nanmax(data, axis=1) + maxima = np.nanmax(data, axis=1) with np.errstate(invalid='ignore', divide='ignore'): - normalised = data / max[:, np.newaxis] + normalised = data / maxima[:, np.newaxis] normalised[np.isnan(normalised)] = 0 normalised[normalised < 0] = 0 return normalised From 5436205fd400d7cde8bc59df50148b6408c0d7fd Mon Sep 17 00:00:00 2001 From: bielsnohr Date: Fri, 28 Jan 2022 11:42:03 +0000 Subject: [PATCH 09/58] Replace use of variable 'l' with 'sequence' The use of 'l' as a variable name goes against earlier variable naming advice --- _episodes/34-functional-programming.md | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/_episodes/34-functional-programming.md b/_episodes/34-functional-programming.md index 45431b994..750a0e235 100644 --- a/_episodes/34-functional-programming.md +++ b/_episodes/34-functional-programming.md @@ -477,15 +477,15 @@ One example of reducing would be to calculate the product of a sequence of numbe ~~~ from functools import reduce -l = [1, 2, 3, 4] +sequence = [1, 2, 3, 4] def product(a, b): return a * b -print(reduce(product, l)) +print(reduce(product, sequence)) # The same reduction using a lambda function -print(reduce((lambda a, b: a * b), l)) +print(reduce((lambda a, b: a * b), sequence)) ~~~ {: .language-python} ~~~ @@ -505,15 +505,15 @@ you need to import it from library `functools`. > > ~~~ > > from functools import reduce > > -> > l = [1, 2, 3, 4] +> > sequence = [1, 2, 3, 4] > > > > def add(a, b): > > return a + b > > -> > print(reduce(add, l)) +> > print(reduce(add, sequence)) > > > > # The same reduction using a lambda function -> > print(reduce((lambda a, b: a + b), l)) +> > print(reduce((lambda a, b: a + b), sequence)) > > ~~~ > > {: .language-python} > > ~~~ @@ -532,8 +532,8 @@ using the MapReduce approach. ~~~ from functools import reduce -def sum_of_squares(l): - squares = [x * x for x in l] # use list comprehension for mapping +def sum_of_squares(sequence): + squares = [x * x for x in sequence] # use list comprehension for mapping return reduce(lambda a, b: a + b, squares) ~~~ {: .language-python} @@ -577,8 +577,8 @@ The code may look like: ~~~ from functools import reduce -def sum_of_squares(l): - integers = [int(x) for x in l] +def sum_of_squares(sequence): + integers = [int(x) for x in sequence] squares = [x * x for x in integers] return reduce(lambda a, b: a + b, squares) ~~~ @@ -606,8 +606,8 @@ To do so, we may filter out certain elements and have: ~~~ from functools import reduce -def sum_of_squares(l): - integers = [int(x) for x in l if x[0] != '#'] +def sum_of_squares(sequence): + integers = [int(x) for x in sequence if x[0] != '#'] squares = [x * x for x in integers] return reduce(lambda a, b: a + b, squares) ~~~ From efddfd49690e6425f8ee406626f4b042c5d931a3 Mon Sep 17 00:00:00 2001 From: bielsnohr Date: Fri, 28 Jan 2022 13:57:36 +0000 Subject: [PATCH 10/58] Add comments to highlight where example code has been modified --- _episodes/36-architecture-revisited.md | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/_episodes/36-architecture-revisited.md b/_episodes/36-architecture-revisited.md index 0b460211a..0e6ed0186 100644 --- a/_episodes/36-architecture-revisited.md +++ b/_episodes/36-architecture-revisited.md @@ -276,8 +276,10 @@ class Patient(Person): super().__init__(name) self.observations = [] + ### MODIFIED START ### if observations is not None: self.observations = observations + ### MODIFIED END ### def add_observation(self, value, day=None): if day is None: @@ -327,6 +329,7 @@ def main(args): for filename in infiles: inflammation_data = models.load_csv(filename) + ### MODIFIED START ### if args.view == 'visualize': view_data = { 'average': models.daily_mean(inflammation_data), @@ -342,6 +345,7 @@ def main(args): patient = models.Patient('UNKNOWN', observations) views.display_patient_record(patient) + ### MODIFIED END ### if __name__ == "__main__": @@ -353,6 +357,7 @@ if __name__ == "__main__": nargs='+', help='Input CSV(s) containing inflammation series for each patient') + ### MODIFIED START ### parser.add_argument( '--view', default='visualize', @@ -364,6 +369,7 @@ if __name__ == "__main__": type=int, default=0, help='Which patient should be displayed?') + ### MODIFIED END ### args = parser.parse_args() From c9471b063dc17dc7c104ec70d4cf3253d55e1b13 Mon Sep 17 00:00:00 2001 From: bielsnohr Date: Fri, 28 Jan 2022 18:52:12 +0000 Subject: [PATCH 11/58] Correct API acronym --- _episodes/42-software-reuse.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/_episodes/42-software-reuse.md b/_episodes/42-software-reuse.md index 04a37fca4..e829e2a80 100644 --- a/_episodes/42-software-reuse.md +++ b/_episodes/42-software-reuse.md @@ -269,7 +269,7 @@ sufficiently well to make their own changes to it, including external developers, other members in your team and a future version of yourself too. This may include documentation that covers the software's architecture, including its different components and how they fit together, -API (Application Programmer Interface) documentation +API (Application Programming Interface) documentation that describes the interface points designed into your software for other developers to use, e.g. for a software library, or technical tutorials/'HOW TOs' to accomplish developer-oriented tasks. From 04d1e53a392f73a81ea38e6b7097fac49f58bdb2 Mon Sep 17 00:00:00 2001 From: bielsnohr Date: Fri, 28 Jan 2022 18:52:47 +0000 Subject: [PATCH 12/58] Add random number generator to help pick the group repo --- _episodes/52-assessing-software-suitability-improvement.md | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/_episodes/52-assessing-software-suitability-improvement.md b/_episodes/52-assessing-software-suitability-improvement.md index 6d2079c0f..76f13595e 100644 --- a/_episodes/52-assessing-software-suitability-improvement.md +++ b/_episodes/52-assessing-software-suitability-improvement.md @@ -44,7 +44,9 @@ will help you adopt the same attitude when assessing your own software for futur > Time: 5 mins > > 1. Decide as a team on one of your repositories that will represent your group. -> You can do this any way you wish. +> You can do this any way you wish, +> but if you are having trouble then a pseudo-random number might help: +> `python -c "import numpy as np; print(np.random.randint(low=1, high=))"` > 2. Add the URL of the repository to > the section of the shared notes labelled 'Decide on your Group's Repository', > next to your team's name. From cee505810e78917cc564ae73bc9a9907134b9f75 Mon Sep 17 00:00:00 2001 From: bielsnohr Date: Fri, 26 Nov 2021 16:08:07 +0000 Subject: [PATCH 13/58] Put down some initial notes for making the course instructor-led --- slides/README.md | 21 ++++++++++ slides/rough_notes.ipynb | 86 ++++++++++++++++++++++++++++++++++++++++ 2 files changed, 107 insertions(+) create mode 100644 slides/README.md create mode 100644 slides/rough_notes.ipynb diff --git a/slides/README.md b/slides/README.md new file mode 100644 index 000000000..40d696d75 --- /dev/null +++ b/slides/README.md @@ -0,0 +1,21 @@ +# Note for using slides + +Some quick information about how to use the slides when delivering the course. + +The slides themselves are written in Jupyter notebooks which has the built-in capability to produce slides. At the moment, the final HTML is not stored, so you need to have Jupyter installed. A virtual environment with a subsequent `pip` command is recommended: + +```bash +python3 -m venv .venv # it is important to use the dot prefix if you are creating this at the top level of this repo +. .venv/bin/activate +pip install jupyter +jupyter-notebook +# navigate to the slide file and edit +``` + +There are a few options for accessing these slides in a slideshow view. + +1. Use the RISE extension to Jupyter. This allows you to enter the slideshow from the Jupyter notebook web interface. Probably most helpful if you are editing the slides and want to see effects realtime. Get RISE: `pip install rise`. And then there will be a new button on the Jupyter notebook toolbar (you might need to go to the 'View' menu to get the toolbar to show). +2. Use `nbconvert` and run a server: `jupyter nbconvert --to slides rough_notes.ipynb --post serve`. That should open up in your browser automatically, or provide a link to do so. +3. A more involved option if you don't have an internet connection (this is the only instance I can see this option being useful) is to link the above command with your local reveal.js installation. I lost the page where this command is :( + +When the slides need to link to the course content, they assume the pages are hosted locally at `0.0.0.0:4000`. This is the default location where `make docker-serve` puts the website if you have build locally from this repo. The decision was made to link locally rather than too the live website to allow for local modifications of the content. diff --git a/slides/rough_notes.ipynb b/slides/rough_notes.ipynb new file mode 100644 index 000000000..059b5b042 --- /dev/null +++ b/slides/rough_notes.ipynb @@ -0,0 +1,86 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "id": "e7780fdb", + "metadata": { + "slideshow": { + "slide_type": "notes" + } + }, + "source": [ + "# Setup\n", + "\n", + "- Installation of required software should have been handled before, but make sure on the day before starting that all participants have access to the required tools: Bash, Git, a GitHub account, Python with pip and venv\n", + "- TODO need to make a decision about VSCode and whether we will support it " + ] + }, + { + "cell_type": "markdown", + "id": "d20e17e6", + "metadata": { + "slideshow": { + "slide_type": "notes" + } + }, + "source": [ + "# [Setting the Scene](http://0.0.0.0:4000/00-setting-the-scene/index.html)\n", + "\n", + "- fill out narrative about target audience and why we are here:\n", + " - we have learned programming to do our research: it is a tool and a means to an end\n", + " - likely we are mostly self-taught or have taken some intro courses\n", + " - but we now find the techniques we have picked up to be inadequate for the software we need to write\n", + " - single scripts no longer cut it and we are collaborating with more people, or have users for the software we are producing\n", + " - TODO think of a question to ask here like: how many times have you found yourself coding and thought \"there must be a better way to do this\" or \"this software is getting in the way of my research\", \"why is it so difficult to get this program to work?\", \"this code is incomprehensible and really difficult to modify\", \"I screwed up my Python installation again and need to reinstall my OS\", \n", + "\n", + "- objective of this course is to deal with some of these struggles you might be facing by teaching some intermediate software engineering skills\n", + " - just like maths, statistics, and physics theory, software engineering is a skill you need to continue to develop\n", + "\n", + "- teach intermediate software engineering skills so that you can:\n", + " - restructure existing code and design more robust software from scratch\n", + " - automate the process of testing and verifying software correctness \n", + " - support collaborations with others in a way that mimics a typical collaborative software development process\n", + " - get you ready to distribute your code for use by others\n", + "\n", + "- I want this to be seen as a collaborative learning session\n", + " - I'll be doing a bit of instructing, but most of the learning will come from the many exercises and other activities\n", + " - none of us here are computer scientists and have a variety of different backgrounds; so we can all contribute to this learning process, and this shouldn't be viewed as knowledge being imparted from your instructors on high; please speak up and get involved in the conversation\n", + "\n", + "- This course has necessarily made some decisions about the tools used to demonstrate the concepts being taught\n", + " - Python is used as a fairly ubiquitous and syntactically easy language; however, the point needs to be clear that this isn't a course about Python; the course is about software engineering, and it is using Python as the playground to demonstrate the skills and concepts that should be valuable independent of the domain and language\n", + " - to this end, I will be trying to draw connections with other languages and development scenarios when applicable since I know Python isn't necessarily the main development language for a researcher at UKAEA\n", + " - in the long run, you will encounter many more tools than those shown here, and you will form your own preferences; that is fine and we are in no way suggesting these are the definitive tools that should be used by any researcher who codes\n", + " \n", + "## Content Overview\n", + "\n", + "Four main sections for the course.\n", + "\n", + "![](../fig/course-overview.png)\n", + "\n", + "Just copy the summaries from the website content?" + ] + } + ], + "metadata": { + "celltoolbar": "Slideshow", + "kernelspec": { + "display_name": "Python 3 (ipykernel)", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.8.10" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} From 6f060f479f9827ae5c6fa050717062705c675fe3 Mon Sep 17 00:00:00 2001 From: bielsnohr Date: Fri, 26 Nov 2021 16:11:53 +0000 Subject: [PATCH 14/58] Add more details about using slides --- slides/README.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/slides/README.md b/slides/README.md index 40d696d75..8056453ae 100644 --- a/slides/README.md +++ b/slides/README.md @@ -15,7 +15,9 @@ jupyter-notebook There are a few options for accessing these slides in a slideshow view. 1. Use the RISE extension to Jupyter. This allows you to enter the slideshow from the Jupyter notebook web interface. Probably most helpful if you are editing the slides and want to see effects realtime. Get RISE: `pip install rise`. And then there will be a new button on the Jupyter notebook toolbar (you might need to go to the 'View' menu to get the toolbar to show). + - Use spacebar to advance slides. Presenter view with `t`. 2. Use `nbconvert` and run a server: `jupyter nbconvert --to slides rough_notes.ipynb --post serve`. That should open up in your browser automatically, or provide a link to do so. + - Arrow keys to advance slides. Presenter view with `s` 3. A more involved option if you don't have an internet connection (this is the only instance I can see this option being useful) is to link the above command with your local reveal.js installation. I lost the page where this command is :( When the slides need to link to the course content, they assume the pages are hosted locally at `0.0.0.0:4000`. This is the default location where `make docker-serve` puts the website if you have build locally from this repo. The decision was made to link locally rather than too the live website to allow for local modifications of the content. From 92352799eca96fb151afbf4946bbd750311d20de Mon Sep 17 00:00:00 2001 From: bielsnohr Date: Thu, 2 Dec 2021 15:26:53 +0000 Subject: [PATCH 15/58] Add content for intro to software environment --- slides/rough_notes.ipynb | 31 ++++++++++++++++++++++++++++++- 1 file changed, 30 insertions(+), 1 deletion(-) diff --git a/slides/rough_notes.ipynb b/slides/rough_notes.ipynb index 059b5b042..3f42b7f1e 100644 --- a/slides/rough_notes.ipynb +++ b/slides/rough_notes.ipynb @@ -57,7 +57,36 @@ "\n", "![](../fig/course-overview.png)\n", "\n", - "Just copy the summaries from the website content?" + "I think a single slide will be fine to cover all the sections, giving a brief idea about each.\n", + "\n", + "1. Setting up Software Environment: **PyCharm or VSCode** for editing, testing and debugging, **GitHub** for collaborative development, **virtual environments** for dependency isolation, and **Python code style**.\n", + "2. Verifying Software Correctness at Scale: how to set up a **test framework** and automate and scale testing with **Continuous Integration (CI)**\n", + "3. Designing Software Architecture: an exploration of different **software design paradigms** and their advantages and disadvantages\n", + "4. Managing and Improving Software: learn how to **collaborate** on code through a group project covering **issue tracking** and **software support** (TODO improve this once I go through the content)" + ] + }, + { + "cell_type": "markdown", + "id": "8e803f41", + "metadata": { + "slideshow": { + "slide_type": "notes" + } + }, + "source": [ + "## [Section 1: Environment For Collaborative Code Development](http://0.0.0.0:4000/01-section1-intro/index.html)\n", + "\n", + "### Overview Slide / Intro\n", + "\n", + "- get set up with the _tools_ for collaborative code development, and of course there are lots of decisions to make\n", + "- the recommendations are opinionated but backed by experience\n", + "1. Command Line & Virtual Development Environment: use of Git through command line and then the Python tools `venv` and `pip` to manage dependencies and isolate our project\n", + "2. Integrated Development Environment (IDE): course content supports **PyCharm**, but we will do our best to also support VSCode assuming you have prior knowledge of it\n", + "3. GitHub and Git development workflows\n", + " - _Mod_ there should be some reference to git workflows in this paragraph\n", + "4. Python coding style\n", + "\n", + "_Mod_ Add reference to python coding style on this page" ] } ], From 5f4452d8c8d319d71f57d320e42bed787f344655 Mon Sep 17 00:00:00 2001 From: Matthew Bluteau Date: Thu, 2 Dec 2021 16:55:44 +0000 Subject: [PATCH 16/58] Add further rough notes for "Introduction to Our Project" episode --- slides/rough_notes.ipynb | 45 ++++++++++++++++++++++++++++++++++++++-- 1 file changed, 43 insertions(+), 2 deletions(-) diff --git a/slides/rough_notes.ipynb b/slides/rough_notes.ipynb index 3f42b7f1e..439c2f4b1 100644 --- a/slides/rough_notes.ipynb +++ b/slides/rough_notes.ipynb @@ -81,13 +81,54 @@ "- get set up with the _tools_ for collaborative code development, and of course there are lots of decisions to make\n", "- the recommendations are opinionated but backed by experience\n", "1. Command Line & Virtual Development Environment: use of Git through command line and then the Python tools `venv` and `pip` to manage dependencies and isolate our project\n", - "2. Integrated Development Environment (IDE): course content supports **PyCharm**, but we will do our best to also support VSCode assuming you have prior knowledge of it\n", + "2. Integrated Development Environment (IDE): course content supports **PyCharm**, but we will do our best to also support **VSCode** assuming you have prior knowledge of it\n", "3. GitHub and Git development workflows\n", " - _Mod_ there should be some reference to git workflows in this paragraph\n", - "4. Python coding style\n", + "4. Python coding style: PEP8\n", "\n", "_Mod_ Add reference to python coding style on this page" ] + }, + { + "cell_type": "markdown", + "id": "2ea69e21", + "metadata": { + "slideshow": { + "slide_type": "notes" + } + }, + "source": [ + "# [Introduction to Software Design and Development](http://0.0.0.0:4000/02-software-development/index.html)\n", + "\n", + "- _Fix_ this episode feels a bit out of place here\n", + " - the section starts with talking about tools and environment, and then quickly moves to talking about design without any warning, and then immediately back to tools and environment\n", + " - I think the problem is that there is no mention that there will be an introduction to the example project that will be used throughout the course; if there is some warning, then I think this would be fine, and the piece on architecture can probably stay where it is at the bottom of the page\n", + " - Also, the episode could do with a rename! It should be called \"Introduction to Our Project\" or something like that\n", + " - I have made these modifications in my `mbluteau-modifications` branch\n", + "- Give an introduction to the \"patient inflammation project\"\n", + " - the software project studies inflammation in patients who have been given a new treatment for arthritis and reuses the inflammation dataset from the novice Software Carpentry Python lesson\n", + " - The dataset contains information for 60 patients, who had their inflammation levels recorded for 40 days, so a 2D dataset like below:\n", + " \n", + "![](../fig/inflammation-dataset.svg)\n", + " \n", + "- The analysis is incomplete and there are some errors that you will need to correct\n", + "- First, we need to get the project, so go to the course website and follow the instructions there for copying and then cloning the repository locally on your machine to work on\n", + " - Complete the lesson \"Obtain the Software Project Locally\"\n", + " - please let us know when you are done by using a sticky note\n", + "- Let's take a look at the project structure\n", + " - Demo this from commandline\n", + " - I like to use `tree`\n", + " - With this we see:\n", + " - README file (that typically describes the project, its usage, installation, authors and how to contribute),\n", + " - Python script inflammation-analysis.py provides the main entry point into the application\n", + " - three directories - inflammation, data and tests\n", + " - inflammation directory has two other Python scripts that we will look at more later\n", + " - data directory has the data we will be analysing in csv files\n", + " - tests directory has tests for our Python programs that we will be adding to and correcting\n", + " - **Important Point**: the structure of this project is not arbitrary\n", + " - a difference between novice and intermediate softare development is that at the intermediate level the structure of the project should be planned in advance, and this includes the structure of abstract entities like software components and how they interact\n", + " - in contrast, a novice will make this structure up as they go along (nothing wrong with that, it is part of learning, but at some point you need to stop doing that and have a think about these things in advance before you start a project)." + ] } ], "metadata": { From 72a2f1e7435d72834cfc3a2b261916e5e748b105 Mon Sep 17 00:00:00 2001 From: Matthew Bluteau Date: Fri, 3 Dec 2021 15:43:45 +0000 Subject: [PATCH 17/58] Complete notes for "Introduction to Software Design and Development" This episode has been renamed to "Introduction to Our Project and Architecture" in my modified branch --- fig/MVC-Process.svg | 274 +++++++++++++++++++++++++++++++++++++++ slides/rough_notes.ipynb | 39 +++++- 2 files changed, 311 insertions(+), 2 deletions(-) create mode 100644 fig/MVC-Process.svg diff --git a/fig/MVC-Process.svg b/fig/MVC-Process.svg new file mode 100644 index 000000000..00fe902db --- /dev/null +++ b/fig/MVC-Process.svg @@ -0,0 +1,274 @@ + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + MODEL + VIEW + CONTROLLER + USES + MANIPULATES + + + + + SEES + + + UPDATES + USER + + + + diff --git a/slides/rough_notes.ipynb b/slides/rough_notes.ipynb index 439c2f4b1..a3c65fbc7 100644 --- a/slides/rough_notes.ipynb +++ b/slides/rough_notes.ipynb @@ -91,7 +91,7 @@ }, { "cell_type": "markdown", - "id": "2ea69e21", + "id": "acc4d03a", "metadata": { "slideshow": { "slide_type": "notes" @@ -127,7 +127,42 @@ " - tests directory has tests for our Python programs that we will be adding to and correcting\n", " - **Important Point**: the structure of this project is not arbitrary\n", " - a difference between novice and intermediate softare development is that at the intermediate level the structure of the project should be planned in advance, and this includes the structure of abstract entities like software components and how they interact\n", - " - in contrast, a novice will make this structure up as they go along (nothing wrong with that, it is part of learning, but at some point you need to stop doing that and have a think about these things in advance before you start a project)." + " - in contrast, a novice will make this structure up as they go along (nothing wrong with that, it is part of learning, but at some point you need to stop doing that and have a think about these things in advance before you start a project).\n", + " - this is probably an appropriate point to link to the Python Cookiecutter project template: https://github.com/ukaea/scientific-python-cookiecutter\n", + "- Complete exercise \"Have a Peak at the Data\". Please post your answers in shared document.\n", + "\n", + "## Software Architecture\n", + "\n", + "- \"Software architecture is the fundamental structure of a software system... It refers to a 'bigger picture' of a software system that describes high-level components (modules) of the system and how they interact.\"\n", + "- Modules are an important idea\n", + " - common examples: libraries that we import and use in our own code (e.g. `numpy` and `matplotlib`), classes in object-oriented languages\n", + " - modules are largely self-contained (they can have dependencies) but there should be a well-defined way to interact with it (otherwise, what is the point?)\n", + " - the specification or contract of how to interact with a module is called a **programming interface** and these are everywhere in software engineering (e.g. user interfaces, APIs, and even function signatures)\n", + "- Have a read of the Wikipedia articles about different architectures\n", + "- What were some common features? Are any subsets or special cases of others? Any practical differences?\n", + " - MVC (as presented in the course content, which is actually Model-View-Adapter) is sort of a subset of the multitier/layer architecture concept, where the view is the \"presentation layer\", the controller is the \"application/business layer\" and the model is the \"data layer\"\n", + " - client-server is another subcase of multilayer architecture (where the presentation and application layers have been merged on the client-side)\n", + " - in contrast, SOA takes a much more loosely coupled view of software components; good example is HTTP-based REST APIs\n", + " - there is an agreed communication protocol over a network that the services use to communicate\n", + " - the purpose and function of each of these services is much less prescriptive than MVC or multilayer\n", + " - There is clear differentiation on underlying hardware: MVC is implementation agnostic (could be on sigle device or multiple) while multitier and server-client require distinct machines communicating between each other; similarly for SOA\n", + "- MVC is likely most applicable to research contexts and it is also what is used for the example project\n", + "- Traditional MVC is actually a bit different from the course content:\n", + "![](../fig/MVC-Process.svg)\n", + "By RegisFrey - Own work, Public Domain, https://commons.wikimedia.org/w/index.php?curid=10298177\n", + "- There is direct communication between the model and the view, and the controller does not interact with the view\n", + "- What is presented here is more accurately Model-View-Presenter/Mediator, where the view and model are completely decoupled and unaware of each other:\n", + "![](../fig/mvc-DNA-guide-GUI.png)\n", + "- TODO raise an issue about this on central repo?\n", + "- For the example project, the MVC corresponds as follows:\n", + " - **Controller** = `inflammation-analysis.py` that performs basic statistical analysis over patient data and provides the main entry point into the application\n", + " - **View** = `inflammation/view.py` TODO add brief summary\n", + " - **Model** = `inflammation/model.py` TODO add brief summary\n", + "- Discussion session in small groups about how MVC might be applicable to their own work\n", + "- Some final words on architecture and these particular patterns:\n", + " - don't get too caught up determining exactly what functionality should be the responsibility of each component\n", + " - the act of splitting things up and thinking about how they will interact through interfaces is where you get the most value\n", + " - it is likely you were already doing this in an informal fashion, but good to think about it more explicitly" ] } ], From 011e0cd138f9a6b98d60e5e54c92827331c4d28e Mon Sep 17 00:00:00 2001 From: Matthew Bluteau Date: Fri, 3 Dec 2021 18:13:15 +0000 Subject: [PATCH 18/58] Add notes about Virtual Environment section --- slides/rough_notes.ipynb | 48 +++++++++++++++++++++++++++++++++++++--- 1 file changed, 45 insertions(+), 3 deletions(-) diff --git a/slides/rough_notes.ipynb b/slides/rough_notes.ipynb index a3c65fbc7..137f01078 100644 --- a/slides/rough_notes.ipynb +++ b/slides/rough_notes.ipynb @@ -44,6 +44,7 @@ "\n", "- I want this to be seen as a collaborative learning session\n", " - I'll be doing a bit of instructing, but most of the learning will come from the many exercises and other activities\n", + " - Please type along as I am working at the command line or coding\n", " - none of us here are computer scientists and have a variety of different backgrounds; so we can all contribute to this learning process, and this shouldn't be viewed as knowledge being imparted from your instructors on high; please speak up and get involved in the conversation\n", "\n", "- This course has necessarily made some decisions about the tools used to demonstrate the concepts being taught\n", @@ -91,7 +92,7 @@ }, { "cell_type": "markdown", - "id": "acc4d03a", + "id": "0ef6a18c", "metadata": { "slideshow": { "slide_type": "notes" @@ -138,7 +139,7 @@ " - common examples: libraries that we import and use in our own code (e.g. `numpy` and `matplotlib`), classes in object-oriented languages\n", " - modules are largely self-contained (they can have dependencies) but there should be a well-defined way to interact with it (otherwise, what is the point?)\n", " - the specification or contract of how to interact with a module is called a **programming interface** and these are everywhere in software engineering (e.g. user interfaces, APIs, and even function signatures)\n", - "- Have a read of the Wikipedia articles about different architectures\n", + "- Have a read of the Wikipedia articles about different architectures (5 minutes)\n", "- What were some common features? Are any subsets or special cases of others? Any practical differences?\n", " - MVC (as presented in the course content, which is actually Model-View-Adapter) is sort of a subset of the multitier/layer architecture concept, where the view is the \"presentation layer\", the controller is the \"application/business layer\" and the model is the \"data layer\"\n", " - client-server is another subcase of multilayer architecture (where the presentation and application layers have been merged on the client-side)\n", @@ -158,12 +159,53 @@ " - **Controller** = `inflammation-analysis.py` that performs basic statistical analysis over patient data and provides the main entry point into the application\n", " - **View** = `inflammation/view.py` TODO add brief summary\n", " - **Model** = `inflammation/model.py` TODO add brief summary\n", - "- Discussion session in small groups about how MVC might be applicable to their own work\n", + "- Discussion session (5 minutes) in small groups about how MVC might be applicable to their own work. Think of a piece of software you work on, and how this might be used for it. Or think of a new tool you might want to make that uses this.\n", "- Some final words on architecture and these particular patterns:\n", " - don't get too caught up determining exactly what functionality should be the responsibility of each component\n", " - the act of splitting things up and thinking about how they will interact through interfaces is where you get the most value\n", " - it is likely you were already doing this in an informal fashion, but good to think about it more explicitly" ] + }, + { + "cell_type": "markdown", + "id": "09c563d5", + "metadata": { + "slideshow": { + "slide_type": "notes" + } + }, + "source": [ + "# [Virtual Environments For Software Development](http://0.0.0.0:4000/03-virtual-environments/index.html)\n", + "\n", + "- Switch to terminal, but follow the notes here\n", + "- Try to run the analysis script from the command line: `python3 inflammation-analysis.py`\n", + " - If you are in a clean Python installation, this should throw a `ModuleNotFoundError` which proves we have some external dependencies that are not installed and we need to get through a package manager\n", + " - Take a look at the top of the views file to see the other dependencies: `head inflammation/views.py`\n", + "- Before jumping to install matplotlib and numpy, it is worth a thought about other projects we might be currently be working on or in the future\n", + " - what if they have a requirement for a different version of numpy or matplotlib? or a different python version?\n", + " - in general, each project is going to have its own unique configuration and set of dependencies\n", + " - to solve this, we set up a virtual environment for each project, containing a specific python version and set of libraries that won't interact with others on the system\n", + "- TODO create more notes about virtual envs and package managers\n", + "- Get learners for follow content from \"Creating a `venv` Environment\" to \"Exporting/Importing an Environment with `pip`\"\n", + " - remember to use sticky notes for status\n", + "- Does anyone have opinions on the naming of a virtual environment folder?\n", + "- And important thing to note with `venv` is that you can only ever use the system version of python with it\n", + " - So, be mindful that if there is an update of your system installation then your virtual environment will stop working, and you will need to get rid of it and create a new one\n", + " - this is the process to do that:\n", + " ```bash\n", + " rm -r venv/\n", + " python3 -m venv venv\n", + " pip install #this is probably one of the best arguments for maintaing a requirements.txt\n", + " ```\n", + "- Now, onto the content about exporting/importing an environment\n", + " - I think there are actually two scenarios here:\n", + " 1. If you are providing a python module that is exclusively user facing, then it is fine to pin, or if you are creating an analysis script a la data science\n", + " 2. If you are providing a third-party library (i.e. one that might be called from someone else's code or another library) then pinning can be overly restrictive and cause issues\n", + " - In general, I would recommend against pinning unless necessary, and even then, you should specify version ranges for your requirements.txt file\n", + "- Get learners to practice exporting, then deleting their exising virtual env, the recreating it with the requirements.txt file\n", + "- Live code the \"Running Python Scripts From Command Line\"\n", + " - confirm everyone gets the same error" + ] } ], "metadata": { From bb5d68fbb440eaf2bf879930f4defe7deea06e71 Mon Sep 17 00:00:00 2001 From: Matthew Bluteau Date: Fri, 10 Dec 2021 15:24:25 +0000 Subject: [PATCH 19/58] Finish up comments on Virtual Environment section --- slides/rough_notes.ipynb | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/slides/rough_notes.ipynb b/slides/rough_notes.ipynb index 137f01078..56ff9402c 100644 --- a/slides/rough_notes.ipynb +++ b/slides/rough_notes.ipynb @@ -180,6 +180,7 @@ "- Switch to terminal, but follow the notes here\n", "- Try to run the analysis script from the command line: `python3 inflammation-analysis.py`\n", " - If you are in a clean Python installation, this should throw a `ModuleNotFoundError` which proves we have some external dependencies that are not installed and we need to get through a package manager\n", + " - Depending on what learners have in their `PYTHONPATH` and site packages for their current default environment, they may or may not have success with this command\n", " - Take a look at the top of the views file to see the other dependencies: `head inflammation/views.py`\n", "- Before jumping to install matplotlib and numpy, it is worth a thought about other projects we might be currently be working on or in the future\n", " - what if they have a requirement for a different version of numpy or matplotlib? or a different python version?\n", @@ -199,9 +200,13 @@ " ```\n", "- Now, onto the content about exporting/importing an environment\n", " - I think there are actually two scenarios here:\n", - " 1. If you are providing a python module that is exclusively user facing, then it is fine to pin, or if you are creating an analysis script a la data science\n", - " 2. If you are providing a third-party library (i.e. one that might be called from someone else's code or another library) then pinning can be overly restrictive and cause issues\n", - " - In general, I would recommend against pinning unless necessary, and even then, you should specify version ranges for your requirements.txt file\n", + " 1. If you are providing a python application (i.e. building and deploying something) or doing a project that is a scientific analysis, then it is fine to pin your dependencies as detailed here in a `requirements.txt`\n", + " 2. If you are providing a reusable library (i.e. one that might be called from someone else's code or another library) then pinning can be overly restrictive and cause issues for package managers, and it is considered bad practice to pin your dependencies like this\n", + " - Instead, you should specify loose dependency requirements in the `install_requires=[...]` metadata of `setup.py`. A full setup.py project is outside the scope of this course, but there are many good resources on this.\n", + " - \n", + " - \n", + " - and if you want a template for Python projects that keeps `requirements.txt` and `install_requires` synced: \n", + " - In general, I would recommend against pinning unless necessary\n", "- Get learners to practice exporting, then deleting their exising virtual env, the recreating it with the requirements.txt file\n", "- Live code the \"Running Python Scripts From Command Line\"\n", " - confirm everyone gets the same error" From ba06e7a64680d458fbc84c584c571b6046797db1 Mon Sep 17 00:00:00 2001 From: Matthew Bluteau Date: Fri, 10 Dec 2021 17:36:47 +0000 Subject: [PATCH 20/58] Add initial comments about IDE episode --- slides/rough_notes.ipynb | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/slides/rough_notes.ipynb b/slides/rough_notes.ipynb index 56ff9402c..c0857b9f6 100644 --- a/slides/rough_notes.ipynb +++ b/slides/rough_notes.ipynb @@ -211,6 +211,27 @@ "- Live code the \"Running Python Scripts From Command Line\"\n", " - confirm everyone gets the same error" ] + }, + { + "cell_type": "markdown", + "id": "86faec44", + "metadata": { + "slideshow": { + "slide_type": "notes" + } + }, + "source": [ + "# [Integrated Development Environments](http://0.0.0.0:4000/04-ides/index.html)\n", + "\n", + "- Most of us probably started out programming with a simple text editor and ran our programs from the command line with a compiler or interpreter\n", + " - This is fine to start off, but as our projects become more complex with more files and configurations, it natural that the tools we use to develop need to evolve as well\n", + " - Enter the Integrated Development Environment (IDE)\n", + "- Preference for Code Editors and IDEs is one of the more contentious and strongly felt topics among software developers, but the bottom line is that if a tool works for you and helps you be productive, then it is absolutely fine to use that tool\n", + " - But again, for the practicalities of this course, the decision to use PyCharm has been made\n", + " - If you are comfortable enough in another IDE or code editor to get the functionality demonstrated in the content below, then please feel free to use that tool here, but this is a disclaimer that we cannot promise to resolve any issues you have, and if these issues are holding the group up then we will need to move on\n", + "- TODO in the intro email, I should make it clear that if they want to use a different IDE, then they should read this section in advance and make sure that they can set up analogous functionality in their IDE\n", + "- Let learners read through and try out content from \"Using the PyCharm IDE\" (~ 30mins)" + ] } ], "metadata": { From 780f5ac6b3700206af6955c469503be8a4c47e0d Mon Sep 17 00:00:00 2001 From: Matthew Bluteau Date: Fri, 17 Dec 2021 17:11:10 -0400 Subject: [PATCH 21/58] Add further notes on IDE section --- slides/rough_notes.ipynb | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/slides/rough_notes.ipynb b/slides/rough_notes.ipynb index c0857b9f6..34b0487dd 100644 --- a/slides/rough_notes.ipynb +++ b/slides/rough_notes.ipynb @@ -209,7 +209,12 @@ " - In general, I would recommend against pinning unless necessary\n", "- Get learners to practice exporting, then deleting their exising virtual env, the recreating it with the requirements.txt file\n", "- Live code the \"Running Python Scripts From Command Line\"\n", - " - confirm everyone gets the same error" + " - confirm everyone gets the same error\n", + "- TODO a note about environment management for other languages\n", + " - Ask John and Kristian about C++\n", + " - Fortran???\n", + " - The \"nuclear\" option is to develop in a Docker container and specify the environment with a Dockerfile\n", + " - However, this might not be possible for a variety of reasons: performance and developing on a cluster" ] }, { @@ -230,7 +235,8 @@ " - But again, for the practicalities of this course, the decision to use PyCharm has been made\n", " - If you are comfortable enough in another IDE or code editor to get the functionality demonstrated in the content below, then please feel free to use that tool here, but this is a disclaimer that we cannot promise to resolve any issues you have, and if these issues are holding the group up then we will need to move on\n", "- TODO in the intro email, I should make it clear that if they want to use a different IDE, then they should read this section in advance and make sure that they can set up analogous functionality in their IDE\n", - "- Let learners read through and try out content from \"Using the PyCharm IDE\" (~ 30mins)" + "- Let learners read through and try out content from \"Using the PyCharm IDE\" (~ 30mins)\n", + " - TODO I am currently going through this and at this point: http://0.0.0.0:4000/13-ides/index.html#adding-an-external-library" ] } ], From d9773e4f32d17c0ab2cb4b2614af7d9b814374b8 Mon Sep 17 00:00:00 2001 From: Matthew Bluteau Date: Fri, 7 Jan 2022 17:57:30 +0000 Subject: [PATCH 22/58] Add notes about IDE section --- slides/rough_notes.ipynb | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/slides/rough_notes.ipynb b/slides/rough_notes.ipynb index 34b0487dd..881ca7e8f 100644 --- a/slides/rough_notes.ipynb +++ b/slides/rough_notes.ipynb @@ -235,8 +235,9 @@ " - But again, for the practicalities of this course, the decision to use PyCharm has been made\n", " - If you are comfortable enough in another IDE or code editor to get the functionality demonstrated in the content below, then please feel free to use that tool here, but this is a disclaimer that we cannot promise to resolve any issues you have, and if these issues are holding the group up then we will need to move on\n", "- TODO in the intro email, I should make it clear that if they want to use a different IDE, then they should read this section in advance and make sure that they can set up analogous functionality in their IDE\n", - "- Let learners read through and try out content from \"Using the PyCharm IDE\" (~ 30mins)\n", - " - TODO I am currently going through this and at this point: http://0.0.0.0:4000/13-ides/index.html#adding-an-external-library" + "- Let learners read through and try out content from \"Using the PyCharm IDE\" (~ 30mins -- I think this could be less, so poll learners after 20 minutes)\n", + " - Encourage learners to try out the features that are being discussed and don't worry about making modifications to their code since it is under version control it will be easy to reset any changes\n", + " - Reinforce that we won't be using the version control interface of PyCharm, but it is a perfectly useable feature, and again this comes down to preference\n", ] } ], From 345de358a8d37a95aa2ad48d425073a0b0037c60 Mon Sep 17 00:00:00 2001 From: Matthew Bluteau Date: Tue, 11 Jan 2022 18:06:20 +0000 Subject: [PATCH 23/58] Add notes on Python Coding Conventions --- slides/rough_notes.ipynb | 100 +++++++++++++++++++++++++++++++++++++-- 1 file changed, 97 insertions(+), 3 deletions(-) diff --git a/slides/rough_notes.ipynb b/slides/rough_notes.ipynb index 881ca7e8f..74b819570 100644 --- a/slides/rough_notes.ipynb +++ b/slides/rough_notes.ipynb @@ -163,7 +163,8 @@ "- Some final words on architecture and these particular patterns:\n", " - don't get too caught up determining exactly what functionality should be the responsibility of each component\n", " - the act of splitting things up and thinking about how they will interact through interfaces is where you get the most value\n", - " - it is likely you were already doing this in an informal fashion, but good to think about it more explicitly" + " - it is likely you were already doing this in an informal fashion, but good to think about it more explicitly **and try to record your design in some appropriate format**\n", + " - TODO if there is no mention of how to store or record design information in a later section, raise an issue that some mention should be made about options" ] }, { @@ -226,7 +227,7 @@ } }, "source": [ - "# [Integrated Development Environments](http://0.0.0.0:4000/04-ides/index.html)\n", + "# [Integrated Development Environments](http://0.0.0.0:4000/13-ides/index.html)\n", "\n", "- Most of us probably started out programming with a simple text editor and ran our programs from the command line with a compiler or interpreter\n", " - This is fine to start off, but as our projects become more complex with more files and configurations, it natural that the tools we use to develop need to evolve as well\n", @@ -236,8 +237,101 @@ " - If you are comfortable enough in another IDE or code editor to get the functionality demonstrated in the content below, then please feel free to use that tool here, but this is a disclaimer that we cannot promise to resolve any issues you have, and if these issues are holding the group up then we will need to move on\n", "- TODO in the intro email, I should make it clear that if they want to use a different IDE, then they should read this section in advance and make sure that they can set up analogous functionality in their IDE\n", "- Let learners read through and try out content from \"Using the PyCharm IDE\" (~ 30mins -- I think this could be less, so poll learners after 20 minutes)\n", + " - Should this be done in breakout rooms? It is probably fine that this is a solo portion of the course, and if learners have trouble then a helper can take them into a breakout room\n", " - Encourage learners to try out the features that are being discussed and don't worry about making modifications to their code since it is under version control it will be easy to reset any changes\n", - " - Reinforce that we won't be using the version control interface of PyCharm, but it is a perfectly useable feature, and again this comes down to preference\n", + " - Reinforce that we won't be using the version control interface of PyCharm, but it is a perfectly useable feature, and again this comes down to preference\n" + ] + }, + { + "cell_type": "markdown", + "id": "5f3717c2", + "metadata": { + "slideshow": { + "slide_type": "notes" + } + }, + "source": [ + "# [Collaborative Software Development Using Git and GitHub](http://0.0.0.0:4000/14-collaboration-using-git/index.html)\n", + "\n", + "- Walk through this image as a Git Refresher:\n", + "\n", + "![](../fig/git-lifecycle.png)\n", + "\n", + "- Do a poll to see if everyone is comfortable with all of the operations and terminology in that diagram\n", + " - allow for text entry for any terms that are uncertain\n", + " - Go into more depth on the terms that come up\n", + "\n", + "- Get learners to independently go through the section \"Checking-in Changes to Our Project\" (~ 10 minutes)\n", + " - note that SSH keys are also an equally valid (and now equally convenient) form of authentication with GitHub\n", + " - perhaps dig up a resource on this\n", + " - for the token, this seems to be the only resource that is actually needed: https://www.edgoad.com/2021/02/using-personal-access-tokens-with-git-and-github.html\n", + " - TODO perhaps suggest that this is the resource they lead with in the course content and say that users should follow it through; also, to prevent link rot it might be worthwhile to pull these instructions into the course itself\n", + " - for learners, remind them that they will need to copy the access token somewhere on their computer; if they use a password manager, consider making a new entry for this token; also, there are instructions to cache their token with the git cli, and that will make this more convenient since they will not need to enter the token with every git operation that communicates with GitHub\n", + "\n", + "- Git branches\n", + " - saying branches are versions of our code, while technically correct, is somewhat loose language and prone to potential errors\n", + " - TODO I think the term \"version\" should be reserved for versions of the code that are released; raise an issue about this\n", + " - branches are actually just a pointer to a commit, and that commit _can_ (but doesn't have to) define a distinct or divergent commit history of our main branch\n", + " - Talk through this image:\n", + " ![](../fig/git-feature-branch.svg)\n", + " - the best practice is to use a new branch for each separate and self-contained unit/piece of work you want to add to the project. This unit of work is also often called a feature and the branch where you develop it is called a feature branch. Each feature branch should have its own meaningful name - indicating its purpose (e.g. “issue23-fix”). If we keep making changes and pushing them directly to main branch on GitHub, then anyone who downloads our software from there will get all of our work in progress - whether or not it’s ready to use! So, working on a separate branch for each feature you are adding is good for several reasons:\n", + "\n", + " - it enables the main branch to remain stable while you and the team explore and test the new code on a feature branch,\n", + " - it enables you to keep the untested and not-yet-functional feature branch code under version control and backed up,\n", + " - you and other team members may work on several features at the same time independently from one another,\n", + " - if you decide that the feature is not working or is no longer needed - you can easily and safely discard that branch without affecting the rest of the code.\n", + "\n", + "\n", + "- Something missing from this section is a mention that a multi-person project, even if not external facing or with no users other than the developers, should have some record or agreement of how branching will work, and some document telling potential contributors how they can submit contributions through pull requests, usually in a `CONTRIBUTING.md` file.\n", + " - e.g. contributors fork you project, then work in their own feature branch, and when tested, they submit a PR to the *develop* branch of the upstream project\n", + " \n", + "- Get learners to go through the remainder of the content from \"Creating Branches\" onwards (~ 15 minutes)" + ] + }, + { + "cell_type": "markdown", + "id": "f1a43dd0", + "metadata": { + "slideshow": { + "slide_type": "notes" + } + }, + "source": [ + "# [Python Coding Conventions](http://0.0.0.0:4000/15-coding-conventions/index.html)\n", + "\n", + "- we now have all the tools to develop code in this course, but there is one further consideration about how these tools will support and guide our creation of code\n", + "\n", + "> \"Any fool can write code that a computer can understand. Good programmers write code that humans can understand.” — Martin Fowler\n", + "\n", + "- one of the main features of whether code is understandable is whether it follows a consistent *style*\n", + "- *style* encompasses but is not limited to\n", + " - cleanly and consistently formatted\n", + " - descriptive comments and docstrings\n", + " - descriptive names for variables, functions, classes, and modules\n", + "- the style you use for your code will vary depending on the language and what your team has agreed upon\n", + " - in order to help with implementing a consistent style, style guides or sets of conventions are used\n", + " - these can be agreed upon by colleagues or communities\n", + " - the important point is this: make sure whatever sytle you choose that it is consistent **within** a project, and if possible also across related projects\n", + "- Unless you have particular requirements, it is best to go with a sytle guide that has the majority consensus for a particular language (albeit sometimes this won't exist, so choose what seems best)\n", + " - In Python, this is PEP8\n", + " - C++\n", + " - [`clang-format`](https://clang.llvm.org/docs/ClangFormat.html) is widely used for enforcing formatting, and there are [built-in presets](https://clang.llvm.org/docs/ClangFormatStyleOptions.html#configurable-format-style-options) for existing conventions followed by Google, LLVM, etc. Project specific settings made in a `.clang-format` file.\n", + " - our guide on C++ for VSCode recommends cpplint: https://intranet.ccfe.ac.uk/software/guides/vscode-cpp.html\n", + " - Some other useful resources that cover a broader scope than just style and formatting are [Google's C++ Style Guide](https://google.github.io/styleguide/cppguide.html#Formatting) and the [C++ Core Guidelines by Bjarne Stroustrup (the creator of C++)](https://github.com/isocpp/CppCoreGuidelines/blob/master/CppCoreGuidelines.md)\n", + " - Fortran\n", + " - we have a great guide on tooling in VSCode: https://intranet.ccfe.ac.uk/software/guides/vscode-fortran.html\n", + " - this is a good online resource: https://fortran-lang.org/learn/best_practices\n", + "\n", + "- What IDEs help with: set it and forget it!\n", + " - In PyCharm, adherance to PEP8 will automatically be checked and violations flagged for fixing (demonstrate this live)\n", + " - It is worth mentioning that at a project level, not everyone will be using the same IDE, so it is better to use an independent tool called a linter that will enforce these style requirements\n", + " - `black` is a popular but harsh and opinionated tool that can take some getting used to\n", + " - `flake8` and `pylint` a bit more conventional -> PyCharm can be modified to use one of these directly (outside of the scope of this course)\n", + "\n", + "- Split learners into breakout rooms and get them to work through content from \"Indentation\" section (~ 30 minutes)\n", + "- Some comments after exercises\n", + " - There are many different docstring formats, and I tend to not like the Sphynx default very much. Google or Numpy style docstrings much more readable. TODO raise this as an amendment?\n", + " - TODO for the exercise to improve the docstrings, no mention is made of the fact that the module docstring should include a list of the functions in the module. This is another valid improvement." ] } ], From 6ab55fc30825bfea38752cd4a6caee30e14f571e Mon Sep 17 00:00:00 2001 From: Matthew Bluteau Date: Thu, 13 Jan 2022 17:53:58 +0000 Subject: [PATCH 24/58] Add notes on Section 2: Testing --- slides/rough_notes.ipynb | 124 ++++++++++++++++++++++++++++++++++++++- 1 file changed, 121 insertions(+), 3 deletions(-) diff --git a/slides/rough_notes.ipynb b/slides/rough_notes.ipynb index 74b819570..7c6e7d0a5 100644 --- a/slides/rough_notes.ipynb +++ b/slides/rough_notes.ipynb @@ -26,6 +26,7 @@ "source": [ "# [Setting the Scene](http://0.0.0.0:4000/00-setting-the-scene/index.html)\n", "\n", + "- **make sure to start recording and notify participants we will be recording**\n", "- fill out narrative about target audience and why we are here:\n", " - we have learned programming to do our research: it is a tool and a means to an end\n", " - likely we are mostly self-taught or have taken some intro courses\n", @@ -51,6 +52,12 @@ " - Python is used as a fairly ubiquitous and syntactically easy language; however, the point needs to be clear that this isn't a course about Python; the course is about software engineering, and it is using Python as the playground to demonstrate the skills and concepts that should be valuable independent of the domain and language\n", " - to this end, I will be trying to draw connections with other languages and development scenarios when applicable since I know Python isn't necessarily the main development language for a researcher at UKAEA\n", " - in the long run, you will encounter many more tools than those shown here, and you will form your own preferences; that is fine and we are in no way suggesting these are the definitive tools that should be used by any researcher who codes\n", + "- Rules of engagement\n", + " - Please use the green check mark and red x to indicate your status with lessons or the current content; this is a more subtle way of indicating that you need help without interrupting the instructor\n", + " - At the same time, please feel free to interrupt at any point with a question, preferably through the raise hand feature\n", + " - Polls will also be used to check how you are getting on. Please fill these in and don't ignore them! We want to know how you are doing, and the more information we have about your progress, the better we can tailor the course to you and make it more valuable\n", + " - Many portions of the course will involve breaking into separate groups to do work. Most of this will be independent work, but there are a few group tasks. There will usually be a helper in your room if you need assistance. Please also open up questions to your fellow participants.\n", + " - There will no doubt be a range of experiences and people moving at different paces in these groups. Please be mindful of that. If you find there is too much chatter and you can't focus on getting things done, feel free to mute audio.\n", " \n", "## Content Overview\n", "\n", @@ -244,7 +251,7 @@ }, { "cell_type": "markdown", - "id": "5f3717c2", + "id": "a3370700", "metadata": { "slideshow": { "slide_type": "notes" @@ -290,7 +297,7 @@ }, { "cell_type": "markdown", - "id": "f1a43dd0", + "id": "93de7a62", "metadata": { "slideshow": { "slide_type": "notes" @@ -329,9 +336,120 @@ " - `flake8` and `pylint` a bit more conventional -> PyCharm can be modified to use one of these directly (outside of the scope of this course)\n", "\n", "- Split learners into breakout rooms and get them to work through content from \"Indentation\" section (~ 30 minutes)\n", + " - poll/status check at the end\n", "- Some comments after exercises\n", " - There are many different docstring formats, and I tend to not like the Sphynx default very much. Google or Numpy style docstrings much more readable. TODO raise this as an amendment?\n", - " - TODO for the exercise to improve the docstrings, no mention is made of the fact that the module docstring should include a list of the functions in the module. This is another valid improvement." + " - TODO for the exercise to improve the docstrings, no mention is made of the fact that the module docstring should include a list of the functions in the module. This is another valid improvement.\n", + " \n", + "```python\n", + "\"\"\"\n", + "Functions:\n", + " load_csv - Load a Numpy array from a CSV file\n", + " daily_mean - Calculate the daily mean of a 2D inflammation data array\n", + " daily_max - Calculate the daily max of a 2D inflammation data array\n", + " daily_min - Calculate the daily min of a 2D inflammation data array\n", + "\"\"\"\n", + "```" + ] + }, + { + "cell_type": "markdown", + "id": "bde031f2", + "metadata": { + "slideshow": { + "slide_type": "notes" + } + }, + "source": [ + "# [Section 2: Ensuring Correctness of Software at Scale](http://0.0.0.0:4000/20-section2-intro/index.html)\n", + "\n", + "\n", + "![](../fig/section2-overview.png)\n", + "\n", + "- Probably the most important thing to take away from this course\n", + "\n", + "- Pre-course questions about how to deal with drift in regression test results\n", + " - complicated especially if these are predictive model results\n", + " - main thought: need to be very careful about what you are testing\n", + " - A dependent variable that is highly sensitive to model parameters is not a good choice for regression testing\n", + " - A dependent variable that has tight coupling to experimental results and should be stable is a better choice (drift in this case indicates your model isn't sastifying basic validation)" + ] + }, + { + "cell_type": "markdown", + "id": "ba469861", + "metadata": { + "slideshow": { + "slide_type": "notes" + } + }, + "source": [ + "# [Automatically Testing your Software](http://0.0.0.0:4000/21-automatically-testing-software/index.html)\n", + "\n", + "- Big questions: how can we be sure the code we have written is correct, produces accurate results, and is of good quality?\n", + "- This is the domain of Verification and Validation (V&V), in which testing plays an important role\n", + " - define V&V in the modelling/scientific context of research software? Probably out of scope\n", + " \n", + "> **testing:** The process of operating a system or component under specified conditions, observing or recording the results, and making an evaluation of some aspect of the system or component\n", + "> — IEEE Standard Glossary of Software Engineering\n", + "- i.e. inferring the _behaviour_ of our code through artifacts and making sure that matches what we expect or is required\n", + "- Types of testing\n", + " - Manual testing\n", + " - Automated testing: codify the expected behaviour of our software such that verification can happen repeatedly without user inspection\n", + " - Unit tests: tests for small function units of our code (i.e functions, class methods, class objects)\n", + " - Funcitonal or integration tests: work at a higher level, and test functional paths through your code, e.g. given some specific inputs, a set of interconnected functions across a number of modules (or the entire code) produce the expected result.\n", + " - Regression tests: compare the current output of your code (usually an end-to-end result) to make sure it matches previous output that you don't want to change\n", + " - there was a question that came in about drift in regression tests, and the short answer with how to deal with this is first determining whether the output you are tracking is actually an invariant. If not, then you will necessarily need to allow for relative proximity, but then you might question whether this is a good long term output to base your regression test on. In our area and science broadly, invariants tend to be some observable or experimental physical results, so if you test isn't based on that, you are probably going to have a tough time.\n", + "\n", + "- Breakout rooms from \"Set Up a New Feature Branch for Writing Tests\" (~45 minutes)\n", + "- status check\n", + "- comments from content\n", + " - FRUIT doesn't look very active, so I would recommend pFUnit for Fortran instead. TODO raise this on repo" + ] + }, + { + "cell_type": "markdown", + "id": "95c0e846", + "metadata": { + "slideshow": { + "slide_type": "notes" + } + }, + "source": [ + "# [Scaling Up Unit Testing](http://0.0.0.0:4000/22-scaling-up-unit-testing/index.html)\n", + "\n", + "- in this section:\n", + " - parameterise our tests (i.e. run through multiple sets of parameters to test the same function, without writing a new test function for each parameter/data case)\n", + " - check how much of our code is covered by tests\n", + "- send off learners into breakout rooms again (~ 15 minutes)\n", + "- Limits to testing\n", + " - there are some good points there about getting value from testing\n", + " - what most researchers think: \n", + " - \"Peer review of my paper will be the test\"\n", + " - \"Looking at a graph is enough\"\n", + " - \"I don't have time to implement a clunky testing framework\"\n", + " - it hints that there is a spectrum between throwaway code that doesn't need to be tested and library code used by hundreds in a community that requires extensive testing suites with more than just unit tests\n", + " - where your particular code lies is a tricky question to answer sometimes, but a good rule of thumb is that if there is a chance that someone else will be using it, then you should give some thought to tests\n", + " - testing has a demonstrably positive impact upon the design on your code\n", + " - it must of course also be acknowledged that testing is not the answer to everything, and that it can't substitute for good manual and acceptance testing" + ] + }, + { + "cell_type": "markdown", + "id": "146920f2", + "metadata": { + "slideshow": { + "slide_type": "notes" + } + }, + "source": [ + "# [Continuous Integration for Automated Testing](http://0.0.0.0:4000/23-continuous-integration-automated-testing/index.html)\n", + "\n", + "- we can run tests on our machine, but how do we know they will work on someone elses machine without getting them to also pull our changes and run the tests? enter continuous integration. off you go!\n", + "- breakout rooms for ~ 45 mins\n", + "- comments\n", + " - GitLab has very similar functionality and there are plenty of resources on our internal GitLab about this (add link?)\n", + " - TODO What about data access? Pose this to RSE team" ] } ], From 2f9540dc0b6a97c42e41d63d07bbb058e7a8f46d Mon Sep 17 00:00:00 2001 From: Matthew Bluteau Date: Fri, 14 Jan 2022 18:30:31 +0000 Subject: [PATCH 25/58] Add initial notes about programming paradigms and object-oriented section --- fig/paradigms.png | Bin 0 -> 39723 bytes slides/rough_notes.ipynb | 76 +++++++++++++++++++++++++++++++++++++-- 2 files changed, 73 insertions(+), 3 deletions(-) create mode 100644 fig/paradigms.png diff --git a/fig/paradigms.png b/fig/paradigms.png new file mode 100644 index 0000000000000000000000000000000000000000..9275f7b8cc50dc360ff1d357fee8e8e7b036a2ca GIT binary patch literal 39723 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 GdgI?n-11cb literal 0 HcmV?d00001 diff --git a/slides/rough_notes.ipynb b/slides/rough_notes.ipynb index 7c6e7d0a5..e8269bfe4 100644 --- a/slides/rough_notes.ipynb +++ b/slides/rough_notes.ipynb @@ -409,7 +409,7 @@ }, { "cell_type": "markdown", - "id": "95c0e846", + "id": "3bb0ac4d", "metadata": { "slideshow": { "slide_type": "notes" @@ -436,7 +436,7 @@ }, { "cell_type": "markdown", - "id": "146920f2", + "id": "6d74d98f", "metadata": { "slideshow": { "slide_type": "notes" @@ -449,7 +449,77 @@ "- breakout rooms for ~ 45 mins\n", "- comments\n", " - GitLab has very similar functionality and there are plenty of resources on our internal GitLab about this (add link?)\n", - " - TODO What about data access? Pose this to RSE team" + " - TODO What about data access on the GitLab runners? Or if you are on GitHub? Pose this to RSE team\n", + "- status check" + ] + }, + { + "cell_type": "markdown", + "id": "e548d7fe", + "metadata": {}, + "source": [] + }, + { + "cell_type": "markdown", + "id": "d814939c", + "metadata": { + "slideshow": { + "slide_type": "notes" + } + }, + "source": [ + "# Section 3: Software Architecture and Design\n", + "\n", + "![](../fig/section3-overview.png)\n", + "\n", + "- move up a conceptual level compared to previous section about tests\n", + "- taking a look at the overall structure of our code and how we make design decisions about it\n", + " - this will influence how the code will interact with other code (API) and with users (UI/UX)" + ] + }, + { + "cell_type": "markdown", + "id": "52c08b55", + "metadata": { + "slideshow": { + "slide_type": "notes" + } + }, + "source": [ + "# Programming Paradigms\n", + "\n", + "![](../fig/paradigms.png)\n", + "\n", + "> Modified from _Davis, Daniel. 2013. “Modelled on Software Engineering: Flexible Parametric Models in the Practice of Architecture.” PhD dissertation, RMIT University._\n", + "\n", + "- this is nice schematic view of how the different paradigms relate and are classified (loosely)\n", + " - database = query language in the text\n", + "- if I have time to make notes, then walk through the content on this page\n", + " - otherwise, get learners to read and perhaps have some questions to prompt discussion about these paradigms\n", + " - getting a poll of which paradigms people use day-to-day could be interesting, as well as what they have used more generally\n", + "- how could functional programming be beneficial in a scientific context at UKAEA? Practically, what would it look like?\n", + " - wait for functional programming section to answer this\n", + "- exercise (write FizzBuzz program ~ 5 minutes)\n", + " - comment: the advantage of the functional programming style is that we can easily modify the factors that we want to consider and the code of the function we have written is unchanged, whereas for the structural or procedural style, we would need to rewrite the conditional statements each time\n", + " - also, the important part about the functional style is that we are taking an input, not changing it, and then producing a single output from that (this is what gives us that advantage above)" + ] + }, + { + "cell_type": "markdown", + "id": "f2b94e29", + "metadata": { + "slideshow": { + "slide_type": "notes" + } + }, + "source": [ + "# Object-Oriented Programming\n", + "\n", + "- Set off reading the \"Encapsulating data\" section and the \"Structuring Data\" exercise ~ 5-7 minutes\n", + " - this can be done in the `models.py` file, and plant the idea of making a test\n", + " - comment about the `attach_names` function in lesson: it uses an `assert` which isn't great practice outside of unit tests. Instead, raise an `TypeError` exception if the lengths don't match\n", + " - if you have an implementation, show it on screen\n", + " - second thought: this might be dwelling too much on a portion of the lesson that isn't that important..." ] } ], From f8eb16034d91e573399bb0769d523fb6712cfc81 Mon Sep 17 00:00:00 2001 From: Matthew Bluteau Date: Fri, 14 Jan 2022 18:31:22 +0000 Subject: [PATCH 26/58] Changes in notes missed in previous commit --- slides/rough_notes.ipynb | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) diff --git a/slides/rough_notes.ipynb b/slides/rough_notes.ipynb index e8269bfe4..fac64e1ef 100644 --- a/slides/rough_notes.ipynb +++ b/slides/rough_notes.ipynb @@ -455,9 +455,17 @@ }, { "cell_type": "markdown", - "id": "e548d7fe", - "metadata": {}, - "source": [] + "id": "8ca9c2ad", + "metadata": { + "slideshow": { + "slide_type": "notes" + } + }, + "source": [ + "# Diagnosing Issues and Improving Robustness\n", + "\n", + "TODO fill in any notes here. Likely just let learners walk through this." + ] }, { "cell_type": "markdown", @@ -506,7 +514,7 @@ }, { "cell_type": "markdown", - "id": "f2b94e29", + "id": "b8f3ab37", "metadata": { "slideshow": { "slide_type": "notes" From a3135ff549aa676050e2e774cebc0523e37cd642 Mon Sep 17 00:00:00 2001 From: Matthew Bluteau Date: Wed, 19 Jan 2022 16:59:45 +0000 Subject: [PATCH 27/58] Notes up to OO episode completed --- slides/rough_notes.ipynb | 30 ++++++++++++++++++++++++------ 1 file changed, 24 insertions(+), 6 deletions(-) diff --git a/slides/rough_notes.ipynb b/slides/rough_notes.ipynb index fac64e1ef..73ab5a6b7 100644 --- a/slides/rough_notes.ipynb +++ b/slides/rough_notes.ipynb @@ -450,12 +450,13 @@ "- comments\n", " - GitLab has very similar functionality and there are plenty of resources on our internal GitLab about this (add link?)\n", " - TODO What about data access on the GitLab runners? Or if you are on GitHub? Pose this to RSE team\n", - "- status check" + "- status check\n", + "- TODO the matrix of Python version uses 3.7 and 3.8, but the previous single Python version was 3.9. Should try to reconcile these." ] }, { "cell_type": "markdown", - "id": "8ca9c2ad", + "id": "bd823b59", "metadata": { "slideshow": { "slide_type": "notes" @@ -464,7 +465,9 @@ "source": [ "# Diagnosing Issues and Improving Robustness\n", "\n", - "TODO fill in any notes here. Likely just let learners walk through this." + "- Split learners into breakout rooms (~50 mins although I think could be less, take a status check early)\n", + "\n", + "- TODO where do the test results come from for the `patient_normalise` test? There should be some indication that a manual calculation might have been done. This is a crucial question that many researchers have: where to get and/or generate test data.\n" ] }, { @@ -514,7 +517,7 @@ }, { "cell_type": "markdown", - "id": "b8f3ab37", + "id": "dbfb399e", "metadata": { "slideshow": { "slide_type": "notes" @@ -526,8 +529,23 @@ "- Set off reading the \"Encapsulating data\" section and the \"Structuring Data\" exercise ~ 5-7 minutes\n", " - this can be done in the `models.py` file, and plant the idea of making a test\n", " - comment about the `attach_names` function in lesson: it uses an `assert` which isn't great practice outside of unit tests. Instead, raise an `TypeError` exception if the lengths don't match\n", - " - if you have an implementation, show it on screen\n", - " - second thought: this might be dwelling too much on a portion of the lesson that isn't that important..." + " - if the instructor have an implementation, show it on screen\n", + " - second thought: this might be dwelling too much on a portion of the lesson that isn't that important...\n", + "- Breakout rooms (~ 45 minutes)\n", + "- Facilitate discussion about TDD\n", + " - add some questions to the collaborative notes document\n", + " - Do you think TDD is practical for exploratory research code? Are there elements of TDD that could be useful in your work? Share some examples or ideas for how you might use TDD with the group.\n", + "- For Doctor OO implementation, some additional feature ideas\n", + " - using the `dataclass` decorator offers a lot of advantages for these classes\n", + " - adding an age to patients could be helpful (fairly simple)\n", + " - a date range (or start date) for a patient's observations\n", + " - a Study class that is a list of Doctors (perhaps too much)\n", + " - a CSV reader of patient data (and preferably groups of patients data)\n", + "- A note about the Book/Library exercise\n", + " - advise to create separate files\n", + " 1. put a `library.py` under models, and a `test_library.py` under tests\n", + " 2. or put both of these files under a separate directory `library/` at the top level of the repo\n", + " - There will probably be the temptation to inherit from the builtin `list` class when implementing `Library`. Subclassing from builtin types is generally a bad idea for a host of complex reasons. The most easily comprehensible is that by inheriting a builtin type, you inherit a lot of behaviour that you might not intend to have for your new class. On the flip side, it is also quite restrictive. Is a Library really just a list? We might decide to add other functionality, like opening hours, later on. How does that data fit into the definition of a list? Well, it doesn't. If you really want to inherit from something here, then the better approach is to use the `abc` (abstract base class) module in Python and pick something from there that gets you closer to your desired functionality." ] } ], From a1707ac423dcf06614632bc26ddd38daadb571b1 Mon Sep 17 00:00:00 2001 From: Matthew Bluteau Date: Wed, 19 Jan 2022 17:53:22 +0000 Subject: [PATCH 28/58] Start actual slides for Section 1 --- slides/section_1_setting_up_environment.ipynb | 504 ++++++++++++++++++ 1 file changed, 504 insertions(+) create mode 100644 slides/section_1_setting_up_environment.ipynb diff --git a/slides/section_1_setting_up_environment.ipynb b/slides/section_1_setting_up_environment.ipynb new file mode 100644 index 000000000..37845e35b --- /dev/null +++ b/slides/section_1_setting_up_environment.ipynb @@ -0,0 +1,504 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "id": "fb8411ed", + "metadata": { + "slideshow": { + "slide_type": "slide" + } + }, + "source": [ + "# Intermediate Research Software Development in Python\n", + "\n", + "## Section 1" + ] + }, + { + "cell_type": "markdown", + "id": "e7780fdb", + "metadata": { + "slideshow": { + "slide_type": "notes" + } + }, + "source": [ + "# Setup\n", + "\n", + "- As participants arrive, ask them about the installation of required software: Bash, Git, a GitHub account, Python with pip and venv\n", + "- Concurrently, send the link for the collaborative notes document and get them to sign the attendance list\n", + "- If you are recording the session, notify participants you will be doing so, and start recording\n", + " - Breakout rooms are not recorded" + ] + }, + { + "cell_type": "markdown", + "id": "d00a1d89", + "metadata": { + "slideshow": { + "slide_type": "slide" + } + }, + "source": [ + "## Setting the Scene\n", + "\n", + "Why this course?\n", + "\n", + "Have you ever thought:\n", + "- \"there must be a better way to do this\"\n", + "- \"this software is getting in the way of my research\"\n", + "- \"why is it so difficult to get this program to run?\"\n", + "- \"this code is incomprehensible and really difficult to modify\"\n", + "- \"I screwed up my Python installation again and need to reinstall my OS\"" + ] + }, + { + "cell_type": "markdown", + "id": "1b02e623", + "metadata": { + "slideshow": { + "slide_type": "notes" + } + }, + "source": [ + "- why this course and why are you here?\n", + " - we have learned programming to do our research: it is a tool and a means to an end\n", + " - likely we are mostly self-taught or have taken some intro courses\n", + " - but we now find the techniques we have picked up to be inadequate for the software we need to write\n", + " - single scripts no longer cut it and we are collaborating with more people, or have users for the software we are producing\n", + " - you need some new skills and tools to tackle these problems\n", + " \n", + "- You might have thought at some point (see questions on slide)\n", + "\n", + "- If so, then you have come to the right place. The objective of this course is to deal with these struggles you might be facing by teaching some intermediate software engineering skills\n", + " - just like maths, statistics, and physics theory, software engineering is a skill you need to continue to develop as a researcher" + ] + }, + { + "cell_type": "markdown", + "id": "78025f94", + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, + "source": [ + "### Intermediate Research Software Development\n", + "\n", + "What you will be able to do at the end that should help your work:\n", + "\n", + "- restructure existing code and design more robust software from scratch\n", + "- automate the process of testing and verifying software correctness \n", + "- support collaborations with others in a way that mimics a typical collaborative software development process\n", + "- get you ready to distribute your code for use by others" + ] + }, + { + "cell_type": "markdown", + "id": "d50edc69", + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, + "source": [ + "### PSA: This is a Collaborative Learning Session" + ] + }, + { + "cell_type": "markdown", + "id": "bf344b99", + "metadata": { + "slideshow": { + "slide_type": "notes" + } + }, + "source": [ + "- PSA: This is a Collaborative Learning Session\n", + " - this is meant in two ways\n", + " - I'll be doing a bit of instructing, but most of the learning will come from the many exercises and other activities that you will do in groups. This is the first aspect of collaboration.\n", + " - Secondly, there will naturally be a variety of different backgrounds and levels of experience, and we the instructors and helpers should not be seen as the final authority on these matters. We have valuable experience to share, but so do you. Everyone here can and should contribute to this learning process, and this shouldn't be viewed as knowledge being imparted from your instructors on high; please speak up and get involved in the conversation." + ] + }, + { + "cell_type": "markdown", + "id": "a547a5fb", + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, + "source": [ + "### Tools\n", + "\n", + "- Python\n", + "- Integrated Development Environment: PyCharm\n", + "- `pip` and `venv`\n", + "- GitHub" + ] + }, + { + "cell_type": "markdown", + "id": "e50811ae", + "metadata": { + "slideshow": { + "slide_type": "notes" + } + }, + "source": [ + "- This course has necessarily made some decisions about the tools used to demonstrate the concepts being taught\n", + " - Python is used as a fairly ubiquitous and syntactically easy language; however, the point needs to be clear that this isn't a course about Python; the course is about software engineering, and it is using Python as the playground to demonstrate the skills and concepts that should be valuable independent of the domain and language\n", + " - to this end, I will be trying to draw connections with other languages and development scenarios when applicable since I know Python isn't necessarily the main development language for everyone at UKAEA\n", + " - Learners should have already been notified about the IDE selection and installation. If the instructor has decided to allow different editors, reiterate any caveats (e.g. happy for you to use these editors, but no guarantee that we can help you if you are stuck). At an intermediate level, it is likely learners already have exposure to a preferred IDE, so they can shoulder more of the responsibility for getting that to work.\n", + " - GitHub is ubiquitous in software development, and a lot of research code ends up there. Other platforms are similar and so whatever is learnt here will be applicable.\n", + "- in the long run, you will encounter many more tools than those shown here, and you will form your own preferences; that is fine and we are in no way suggesting these are the definitive tools that should be used by any researcher who codes" + ] + }, + { + "cell_type": "markdown", + "id": "e81ed41f", + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, + "source": [ + "### Rules of Engagement\n", + "\n", + "TODO current position" + ] + }, + { + "cell_type": "markdown", + "id": "d20e17e6", + "metadata": { + "slideshow": { + "slide_type": "notes" + } + }, + "source": [ + "\n", + "- Rules of engagement\n", + " - Please use the green check mark and red x to indicate your status with lessons or the current content; this is a more subtle way of indicating that you need help without interrupting the instructor\n", + " - At the same time, please feel free to interrupt at any point with a question, preferably through the raise hand feature\n", + " - Polls will also be used to check how you are getting on. Please fill these in and don't ignore them! We want to know how you are doing, and the more information we have about your progress, the better we can tailor the course to you and make it more valuable\n", + " - Many portions of the course will involve breaking into separate groups to do work. Most of this will be independent work, but there are a few group tasks. There will usually be a helper in your room if you need assistance. Please also open up questions to your fellow participants.\n", + " - There will no doubt be a range of experiences and people moving at different paces in these groups. Please be mindful of that. If you find there is too much chatter and you can't focus on getting things done, feel free to mute audio.\n", + " \n", + "## Content Overview\n", + "\n", + "Four main sections for the course.\n", + "\n", + "![](../fig/course-overview.png)\n", + "\n", + "I think a single slide will be fine to cover all the sections, giving a brief idea about each.\n", + "\n", + "1. Setting up Software Environment: **PyCharm or VSCode** for editing, testing and debugging, **GitHub** for collaborative development, **virtual environments** for dependency isolation, and **Python code style**.\n", + "2. Verifying Software Correctness at Scale: how to set up a **test framework** and automate and scale testing with **Continuous Integration (CI)**\n", + "3. Designing Software Architecture: an exploration of different **software design paradigms** and their advantages and disadvantages\n", + "4. Managing and Improving Software: learn how to **collaborate** on code through a group project covering **issue tracking** and **software support** (TODO improve this once I go through the content)" + ] + }, + { + "cell_type": "markdown", + "id": "8e803f41", + "metadata": { + "slideshow": { + "slide_type": "notes" + } + }, + "source": [ + "## [Section 1: Environment For Collaborative Code Development](http://0.0.0.0:4000/01-section1-intro/index.html)\n", + "\n", + "### Overview Slide / Intro\n", + "\n", + "- get set up with the _tools_ for collaborative code development, and of course there are lots of decisions to make\n", + "- the recommendations are opinionated but backed by experience\n", + "1. Command Line & Virtual Development Environment: use of Git through command line and then the Python tools `venv` and `pip` to manage dependencies and isolate our project\n", + "2. Integrated Development Environment (IDE): course content supports **PyCharm**, but we will do our best to also support **VSCode** assuming you have prior knowledge of it\n", + "3. GitHub and Git development workflows\n", + " - _Mod_ there should be some reference to git workflows in this paragraph\n", + "4. Python coding style: PEP8\n", + "\n", + "_Mod_ Add reference to python coding style on this page" + ] + }, + { + "cell_type": "markdown", + "id": "0ef6a18c", + "metadata": { + "slideshow": { + "slide_type": "notes" + } + }, + "source": [ + "# [Introduction to Software Design and Development](http://0.0.0.0:4000/02-software-development/index.html)\n", + "\n", + "- _Fix_ this episode feels a bit out of place here\n", + " - the section starts with talking about tools and environment, and then quickly moves to talking about design without any warning, and then immediately back to tools and environment\n", + " - I think the problem is that there is no mention that there will be an introduction to the example project that will be used throughout the course; if there is some warning, then I think this would be fine, and the piece on architecture can probably stay where it is at the bottom of the page\n", + " - Also, the episode could do with a rename! It should be called \"Introduction to Our Project\" or something like that\n", + " - I have made these modifications in my `mbluteau-modifications` branch\n", + "- Give an introduction to the \"patient inflammation project\"\n", + " - the software project studies inflammation in patients who have been given a new treatment for arthritis and reuses the inflammation dataset from the novice Software Carpentry Python lesson\n", + " - The dataset contains information for 60 patients, who had their inflammation levels recorded for 40 days, so a 2D dataset like below:\n", + " \n", + "![](../fig/inflammation-dataset.svg)\n", + " \n", + "- The analysis is incomplete and there are some errors that you will need to correct\n", + "- First, we need to get the project, so go to the course website and follow the instructions there for copying and then cloning the repository locally on your machine to work on\n", + " - Complete the lesson \"Obtain the Software Project Locally\"\n", + " - please let us know when you are done by using a sticky note\n", + "- Let's take a look at the project structure\n", + " - Demo this from commandline\n", + " - I like to use `tree`\n", + " - With this we see:\n", + " - README file (that typically describes the project, its usage, installation, authors and how to contribute),\n", + " - Python script inflammation-analysis.py provides the main entry point into the application\n", + " - three directories - inflammation, data and tests\n", + " - inflammation directory has two other Python scripts that we will look at more later\n", + " - data directory has the data we will be analysing in csv files\n", + " - tests directory has tests for our Python programs that we will be adding to and correcting\n", + " - **Important Point**: the structure of this project is not arbitrary\n", + " - a difference between novice and intermediate softare development is that at the intermediate level the structure of the project should be planned in advance, and this includes the structure of abstract entities like software components and how they interact\n", + " - in contrast, a novice will make this structure up as they go along (nothing wrong with that, it is part of learning, but at some point you need to stop doing that and have a think about these things in advance before you start a project).\n", + " - this is probably an appropriate point to link to the Python Cookiecutter project template: https://github.com/ukaea/scientific-python-cookiecutter\n", + "- Complete exercise \"Have a Peak at the Data\". Please post your answers in shared document.\n", + "\n", + "## Software Architecture\n", + "\n", + "- \"Software architecture is the fundamental structure of a software system... It refers to a 'bigger picture' of a software system that describes high-level components (modules) of the system and how they interact.\"\n", + "- Modules are an important idea\n", + " - common examples: libraries that we import and use in our own code (e.g. `numpy` and `matplotlib`), classes in object-oriented languages\n", + " - modules are largely self-contained (they can have dependencies) but there should be a well-defined way to interact with it (otherwise, what is the point?)\n", + " - the specification or contract of how to interact with a module is called a **programming interface** and these are everywhere in software engineering (e.g. user interfaces, APIs, and even function signatures)\n", + "- Have a read of the Wikipedia articles about different architectures (5 minutes)\n", + "- What were some common features? Are any subsets or special cases of others? Any practical differences?\n", + " - MVC (as presented in the course content, which is actually Model-View-Adapter) is sort of a subset of the multitier/layer architecture concept, where the view is the \"presentation layer\", the controller is the \"application/business layer\" and the model is the \"data layer\"\n", + " - client-server is another subcase of multilayer architecture (where the presentation and application layers have been merged on the client-side)\n", + " - in contrast, SOA takes a much more loosely coupled view of software components; good example is HTTP-based REST APIs\n", + " - there is an agreed communication protocol over a network that the services use to communicate\n", + " - the purpose and function of each of these services is much less prescriptive than MVC or multilayer\n", + " - There is clear differentiation on underlying hardware: MVC is implementation agnostic (could be on sigle device or multiple) while multitier and server-client require distinct machines communicating between each other; similarly for SOA\n", + "- MVC is likely most applicable to research contexts and it is also what is used for the example project\n", + "- Traditional MVC is actually a bit different from the course content:\n", + "![](../fig/MVC-Process.svg)\n", + "By RegisFrey - Own work, Public Domain, https://commons.wikimedia.org/w/index.php?curid=10298177\n", + "- There is direct communication between the model and the view, and the controller does not interact with the view\n", + "- What is presented here is more accurately Model-View-Presenter/Mediator, where the view and model are completely decoupled and unaware of each other:\n", + "![](../fig/mvc-DNA-guide-GUI.png)\n", + "- TODO raise an issue about this on central repo?\n", + "- For the example project, the MVC corresponds as follows:\n", + " - **Controller** = `inflammation-analysis.py` that performs basic statistical analysis over patient data and provides the main entry point into the application\n", + " - **View** = `inflammation/view.py` TODO add brief summary\n", + " - **Model** = `inflammation/model.py` TODO add brief summary\n", + "- Discussion session (5 minutes) in small groups about how MVC might be applicable to their own work. Think of a piece of software you work on, and how this might be used for it. Or think of a new tool you might want to make that uses this.\n", + "- Some final words on architecture and these particular patterns:\n", + " - don't get too caught up determining exactly what functionality should be the responsibility of each component\n", + " - the act of splitting things up and thinking about how they will interact through interfaces is where you get the most value\n", + " - it is likely you were already doing this in an informal fashion, but good to think about it more explicitly **and try to record your design in some appropriate format**\n", + " - TODO if there is no mention of how to store or record design information in a later section, raise an issue that some mention should be made about options" + ] + }, + { + "cell_type": "markdown", + "id": "09c563d5", + "metadata": { + "slideshow": { + "slide_type": "notes" + } + }, + "source": [ + "# [Virtual Environments For Software Development](http://0.0.0.0:4000/03-virtual-environments/index.html)\n", + "\n", + "- Switch to terminal, but follow the notes here\n", + "- Try to run the analysis script from the command line: `python3 inflammation-analysis.py`\n", + " - If you are in a clean Python installation, this should throw a `ModuleNotFoundError` which proves we have some external dependencies that are not installed and we need to get through a package manager\n", + " - Depending on what learners have in their `PYTHONPATH` and site packages for their current default environment, they may or may not have success with this command\n", + " - Take a look at the top of the views file to see the other dependencies: `head inflammation/views.py`\n", + "- Before jumping to install matplotlib and numpy, it is worth a thought about other projects we might be currently be working on or in the future\n", + " - what if they have a requirement for a different version of numpy or matplotlib? or a different python version?\n", + " - in general, each project is going to have its own unique configuration and set of dependencies\n", + " - to solve this, we set up a virtual environment for each project, containing a specific python version and set of libraries that won't interact with others on the system\n", + "- TODO create more notes about virtual envs and package managers\n", + "- Get learners for follow content from \"Creating a `venv` Environment\" to \"Exporting/Importing an Environment with `pip`\"\n", + " - remember to use sticky notes for status\n", + "- Does anyone have opinions on the naming of a virtual environment folder?\n", + "- And important thing to note with `venv` is that you can only ever use the system version of python with it\n", + " - So, be mindful that if there is an update of your system installation then your virtual environment will stop working, and you will need to get rid of it and create a new one\n", + " - this is the process to do that:\n", + " ```bash\n", + " rm -r venv/\n", + " python3 -m venv venv\n", + " pip install #this is probably one of the best arguments for maintaing a requirements.txt\n", + " ```\n", + "- Now, onto the content about exporting/importing an environment\n", + " - I think there are actually two scenarios here:\n", + " 1. If you are providing a python application (i.e. building and deploying something) or doing a project that is a scientific analysis, then it is fine to pin your dependencies as detailed here in a `requirements.txt`\n", + " 2. If you are providing a reusable library (i.e. one that might be called from someone else's code or another library) then pinning can be overly restrictive and cause issues for package managers, and it is considered bad practice to pin your dependencies like this\n", + " - Instead, you should specify loose dependency requirements in the `install_requires=[...]` metadata of `setup.py`. A full setup.py project is outside the scope of this course, but there are many good resources on this.\n", + " - \n", + " - \n", + " - and if you want a template for Python projects that keeps `requirements.txt` and `install_requires` synced: \n", + " - In general, I would recommend against pinning unless necessary\n", + "- Get learners to practice exporting, then deleting their exising virtual env, the recreating it with the requirements.txt file\n", + "- Live code the \"Running Python Scripts From Command Line\"\n", + " - confirm everyone gets the same error\n", + "- TODO a note about environment management for other languages\n", + " - Ask John and Kristian about C++\n", + " - Fortran???\n", + " - The \"nuclear\" option is to develop in a Docker container and specify the environment with a Dockerfile\n", + " - However, this might not be possible for a variety of reasons: performance and developing on a cluster" + ] + }, + { + "cell_type": "markdown", + "id": "86faec44", + "metadata": { + "slideshow": { + "slide_type": "notes" + } + }, + "source": [ + "# [Integrated Development Environments](http://0.0.0.0:4000/13-ides/index.html)\n", + "\n", + "- Most of us probably started out programming with a simple text editor and ran our programs from the command line with a compiler or interpreter\n", + " - This is fine to start off, but as our projects become more complex with more files and configurations, it natural that the tools we use to develop need to evolve as well\n", + " - Enter the Integrated Development Environment (IDE)\n", + "- Preference for Code Editors and IDEs is one of the more contentious and strongly felt topics among software developers, but the bottom line is that if a tool works for you and helps you be productive, then it is absolutely fine to use that tool\n", + " - But again, for the practicalities of this course, the decision to use PyCharm has been made\n", + " - If you are comfortable enough in another IDE or code editor to get the functionality demonstrated in the content below, then please feel free to use that tool here, but this is a disclaimer that we cannot promise to resolve any issues you have, and if these issues are holding the group up then we will need to move on\n", + "- TODO in the intro email, I should make it clear that if they want to use a different IDE, then they should read this section in advance and make sure that they can set up analogous functionality in their IDE\n", + "- Let learners read through and try out content from \"Using the PyCharm IDE\" (~ 30mins -- I think this could be less, so poll learners after 20 minutes)\n", + " - Should this be done in breakout rooms? It is probably fine that this is a solo portion of the course, and if learners have trouble then a helper can take them into a breakout room\n", + " - Encourage learners to try out the features that are being discussed and don't worry about making modifications to their code since it is under version control it will be easy to reset any changes\n", + " - Reinforce that we won't be using the version control interface of PyCharm, but it is a perfectly useable feature, and again this comes down to preference\n" + ] + }, + { + "cell_type": "markdown", + "id": "a3370700", + "metadata": { + "slideshow": { + "slide_type": "notes" + } + }, + "source": [ + "# [Collaborative Software Development Using Git and GitHub](http://0.0.0.0:4000/14-collaboration-using-git/index.html)\n", + "\n", + "- Walk through this image as a Git Refresher:\n", + "\n", + "![](../fig/git-lifecycle.png)\n", + "\n", + "- Do a poll to see if everyone is comfortable with all of the operations and terminology in that diagram\n", + " - allow for text entry for any terms that are uncertain\n", + " - Go into more depth on the terms that come up\n", + "\n", + "- Get learners to independently go through the section \"Checking-in Changes to Our Project\" (~ 10 minutes)\n", + " - note that SSH keys are also an equally valid (and now equally convenient) form of authentication with GitHub\n", + " - perhaps dig up a resource on this\n", + " - for the token, this seems to be the only resource that is actually needed: https://www.edgoad.com/2021/02/using-personal-access-tokens-with-git-and-github.html\n", + " - TODO perhaps suggest that this is the resource they lead with in the course content and say that users should follow it through; also, to prevent link rot it might be worthwhile to pull these instructions into the course itself\n", + " - for learners, remind them that they will need to copy the access token somewhere on their computer; if they use a password manager, consider making a new entry for this token; also, there are instructions to cache their token with the git cli, and that will make this more convenient since they will not need to enter the token with every git operation that communicates with GitHub\n", + "\n", + "- Git branches\n", + " - saying branches are versions of our code, while technically correct, is somewhat loose language and prone to potential errors\n", + " - TODO I think the term \"version\" should be reserved for versions of the code that are released; raise an issue about this\n", + " - branches are actually just a pointer to a commit, and that commit _can_ (but doesn't have to) define a distinct or divergent commit history of our main branch\n", + " - Talk through this image:\n", + " ![](../fig/git-feature-branch.svg)\n", + " - the best practice is to use a new branch for each separate and self-contained unit/piece of work you want to add to the project. This unit of work is also often called a feature and the branch where you develop it is called a feature branch. Each feature branch should have its own meaningful name - indicating its purpose (e.g. “issue23-fix”). If we keep making changes and pushing them directly to main branch on GitHub, then anyone who downloads our software from there will get all of our work in progress - whether or not it’s ready to use! So, working on a separate branch for each feature you are adding is good for several reasons:\n", + "\n", + " - it enables the main branch to remain stable while you and the team explore and test the new code on a feature branch,\n", + " - it enables you to keep the untested and not-yet-functional feature branch code under version control and backed up,\n", + " - you and other team members may work on several features at the same time independently from one another,\n", + " - if you decide that the feature is not working or is no longer needed - you can easily and safely discard that branch without affecting the rest of the code.\n", + "\n", + "\n", + "- Something missing from this section is a mention that a multi-person project, even if not external facing or with no users other than the developers, should have some record or agreement of how branching will work, and some document telling potential contributors how they can submit contributions through pull requests, usually in a `CONTRIBUTING.md` file.\n", + " - e.g. contributors fork you project, then work in their own feature branch, and when tested, they submit a PR to the *develop* branch of the upstream project\n", + " \n", + "- Get learners to go through the remainder of the content from \"Creating Branches\" onwards (~ 15 minutes)" + ] + }, + { + "cell_type": "markdown", + "id": "93de7a62", + "metadata": { + "slideshow": { + "slide_type": "notes" + } + }, + "source": [ + "# [Python Coding Conventions](http://0.0.0.0:4000/15-coding-conventions/index.html)\n", + "\n", + "- we now have all the tools to develop code in this course, but there is one further consideration about how these tools will support and guide our creation of code\n", + "\n", + "> \"Any fool can write code that a computer can understand. Good programmers write code that humans can understand.” — Martin Fowler\n", + "\n", + "- one of the main features of whether code is understandable is whether it follows a consistent *style*\n", + "- *style* encompasses but is not limited to\n", + " - cleanly and consistently formatted\n", + " - descriptive comments and docstrings\n", + " - descriptive names for variables, functions, classes, and modules\n", + "- the style you use for your code will vary depending on the language and what your team has agreed upon\n", + " - in order to help with implementing a consistent style, style guides or sets of conventions are used\n", + " - these can be agreed upon by colleagues or communities\n", + " - the important point is this: make sure whatever sytle you choose that it is consistent **within** a project, and if possible also across related projects\n", + "- Unless you have particular requirements, it is best to go with a sytle guide that has the majority consensus for a particular language (albeit sometimes this won't exist, so choose what seems best)\n", + " - In Python, this is PEP8\n", + " - C++\n", + " - [`clang-format`](https://clang.llvm.org/docs/ClangFormat.html) is widely used for enforcing formatting, and there are [built-in presets](https://clang.llvm.org/docs/ClangFormatStyleOptions.html#configurable-format-style-options) for existing conventions followed by Google, LLVM, etc. Project specific settings made in a `.clang-format` file.\n", + " - our guide on C++ for VSCode recommends cpplint: https://intranet.ccfe.ac.uk/software/guides/vscode-cpp.html\n", + " - Some other useful resources that cover a broader scope than just style and formatting are [Google's C++ Style Guide](https://google.github.io/styleguide/cppguide.html#Formatting) and the [C++ Core Guidelines by Bjarne Stroustrup (the creator of C++)](https://github.com/isocpp/CppCoreGuidelines/blob/master/CppCoreGuidelines.md)\n", + " - Fortran\n", + " - we have a great guide on tooling in VSCode: https://intranet.ccfe.ac.uk/software/guides/vscode-fortran.html\n", + " - this is a good online resource: https://fortran-lang.org/learn/best_practices\n", + "\n", + "- What IDEs help with: set it and forget it!\n", + " - In PyCharm, adherance to PEP8 will automatically be checked and violations flagged for fixing (demonstrate this live)\n", + " - It is worth mentioning that at a project level, not everyone will be using the same IDE, so it is better to use an independent tool called a linter that will enforce these style requirements\n", + " - `black` is a popular but harsh and opinionated tool that can take some getting used to\n", + " - `flake8` and `pylint` a bit more conventional -> PyCharm can be modified to use one of these directly (outside of the scope of this course)\n", + "\n", + "- Split learners into breakout rooms and get them to work through content from \"Indentation\" section (~ 30 minutes)\n", + " - poll/status check at the end\n", + "- Some comments after exercises\n", + " - There are many different docstring formats, and I tend to not like the Sphynx default very much. Google or Numpy style docstrings much more readable. TODO raise this as an amendment?\n", + " - TODO for the exercise to improve the docstrings, no mention is made of the fact that the module docstring should include a list of the functions in the module. This is another valid improvement.\n", + " \n", + "```python\n", + "\"\"\"\n", + "Functions:\n", + " load_csv - Load a Numpy array from a CSV file\n", + " daily_mean - Calculate the daily mean of a 2D inflammation data array\n", + " daily_max - Calculate the daily max of a 2D inflammation data array\n", + " daily_min - Calculate the daily min of a 2D inflammation data array\n", + "\"\"\"\n", + "```" + ] + } + ], + "metadata": { + "celltoolbar": "Slideshow", + "kernelspec": { + "display_name": "Python 3 (ipykernel)", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.8.10" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} From d53fe18d78033e6c81cc224a1fddc09f595deccd Mon Sep 17 00:00:00 2001 From: Matthew Bluteau Date: Thu, 20 Jan 2022 18:37:36 +0000 Subject: [PATCH 29/58] Continue with slide creation for section one. First 3 episodes. --- fig/mva-diagram.png | Bin 0 -> 23918 bytes slides/section_1_setting_up_environment.ipynb | 378 ++++++++++++++---- 2 files changed, 298 insertions(+), 80 deletions(-) create mode 100644 fig/mva-diagram.png diff --git a/fig/mva-diagram.png b/fig/mva-diagram.png new file mode 100644 index 0000000000000000000000000000000000000000..7c065dc45b570b7aaf2d0ef87aa106151cbfc655 GIT binary patch literal 23918 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 F{{ivouz&yn literal 0 HcmV?d00001 diff --git a/slides/section_1_setting_up_environment.ipynb b/slides/section_1_setting_up_environment.ipynb index 37845e35b..e984002e7 100644 --- a/slides/section_1_setting_up_environment.ipynb +++ b/slides/section_1_setting_up_environment.ipynb @@ -9,9 +9,7 @@ } }, "source": [ - "# Intermediate Research Software Development in Python\n", - "\n", - "## Section 1" + "# Intermediate Research Software Development in Python" ] }, { @@ -23,7 +21,7 @@ } }, "source": [ - "# Setup\n", + "## Setup\n", "\n", "- As participants arrive, ask them about the installation of required software: Bash, Git, a GitHub account, Python with pip and venv\n", "- Concurrently, send the link for the collaborative notes document and get them to sign the attendance list\n", @@ -33,7 +31,7 @@ }, { "cell_type": "markdown", - "id": "d00a1d89", + "id": "b625b1af", "metadata": { "slideshow": { "slide_type": "slide" @@ -54,7 +52,7 @@ }, { "cell_type": "markdown", - "id": "1b02e623", + "id": "0a528208", "metadata": { "slideshow": { "slide_type": "notes" @@ -76,7 +74,7 @@ }, { "cell_type": "markdown", - "id": "78025f94", + "id": "a9817f03", "metadata": { "slideshow": { "slide_type": "subslide" @@ -95,7 +93,7 @@ }, { "cell_type": "markdown", - "id": "d50edc69", + "id": "c55b47d2", "metadata": { "slideshow": { "slide_type": "subslide" @@ -107,7 +105,7 @@ }, { "cell_type": "markdown", - "id": "bf344b99", + "id": "12cd28d5", "metadata": { "slideshow": { "slide_type": "notes" @@ -122,7 +120,7 @@ }, { "cell_type": "markdown", - "id": "a547a5fb", + "id": "42124ba0", "metadata": { "slideshow": { "slide_type": "subslide" @@ -139,7 +137,7 @@ }, { "cell_type": "markdown", - "id": "e50811ae", + "id": "466d0c36", "metadata": { "slideshow": { "slide_type": "notes" @@ -156,7 +154,7 @@ }, { "cell_type": "markdown", - "id": "e81ed41f", + "id": "567b407e", "metadata": { "slideshow": { "slide_type": "subslide" @@ -165,38 +163,79 @@ "source": [ "### Rules of Engagement\n", "\n", - "TODO current position" + "- Monitoring your status\n", + " - self reporting\n", + " \n", + " ✅ = all good | ❌ = not following or need help\n", + " - sporadic polls\n", + "- Questions at any time by raising hand ✋\n", + "- Some instruction with breakout rooms for independent study, exercises, and group activities" ] }, { "cell_type": "markdown", - "id": "d20e17e6", + "id": "aa66770a", "metadata": { "slideshow": { "slide_type": "notes" } }, "source": [ - "\n", "- Rules of engagement\n", - " - Please use the green check mark and red x to indicate your status with lessons or the current content; this is a more subtle way of indicating that you need help without interrupting the instructor\n", - " - At the same time, please feel free to interrupt at any point with a question, preferably through the raise hand feature\n", - " - Polls will also be used to check how you are getting on. Please fill these in and don't ignore them! We want to know how you are doing, and the more information we have about your progress, the better we can tailor the course to you and make it more valuable\n", - " - Many portions of the course will involve breaking into separate groups to do work. Most of this will be independent work, but there are a few group tasks. There will usually be a helper in your room if you need assistance. Please also open up questions to your fellow participants.\n", - " - There will no doubt be a range of experiences and people moving at different paces in these groups. Please be mindful of that. If you find there is too much chatter and you can't focus on getting things done, feel free to mute audio.\n", - " \n", + "- Monitoring you status\n", + " - We want to know how you are doing, and the more information we have about your progress, the better we can tailor the course to you and make it more valuable.\n", + " - There are two main ways to do this.\n", + " - Self reporting: Please use the green check mark and red 'x' in Zoom (or stickies if in person) to indicate your status with lessons or the current content; this is a more subtle way of indicating that you need help without interrupting the instructor. The helpers will be keeping an eye on the list of participants and their statuses. Can everyone please check now that they can put the green check mark up.\n", + " - Polls within Zoom will also be used to check how you are getting on. Please fill these in and don't ignore them! \n", + "- Throughout the course, please feel free to interrupt at any point with a question, preferably through the raise hand feature.\n", + "- Many portions of the course will involve breaking into separate groups to do work. Most of this will be independent work, but there are a few group tasks. There will usually be a helper in your room if you need assistance, but again, they are not all-knowing, so please help other participants if you think you can help.\n", + " - There will no doubt be a range of experiences and people moving at different paces in these groups. Please be mindful of that. If you find there is too much chatter and you can't focus on getting things done, feel free to mute audio.\n", + " - If you fall behind on the independent exercises, don't worry and prioritise any group work or discussion at the end of a breakout session. You can catch up between sessions." + ] + }, + { + "cell_type": "markdown", + "id": "2a1944cf", + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, + "source": [ "## Content Overview\n", "\n", - "Four main sections for the course.\n", - "\n", - "![](../fig/course-overview.png)\n", - "\n", - "I think a single slide will be fine to cover all the sections, giving a brief idea about each.\n", + "![](../fig/course-overview.png)" + ] + }, + { + "cell_type": "markdown", + "id": "d20e17e6", + "metadata": { + "slideshow": { + "slide_type": "notes" + } + }, + "source": [ + "There are four main sections of the course, each roughly to be covered in one of the four sessions.\n", "\n", "1. Setting up Software Environment: **PyCharm or VSCode** for editing, testing and debugging, **GitHub** for collaborative development, **virtual environments** for dependency isolation, and **Python code style**.\n", "2. Verifying Software Correctness at Scale: how to set up a **test framework** and automate and scale testing with **Continuous Integration (CI)**\n", "3. Designing Software Architecture: an exploration of different **software design paradigms** and their advantages and disadvantages\n", - "4. Managing and Improving Software: learn how to **collaborate** on code through a group project covering **issue tracking** and **software support** (TODO improve this once I go through the content)" + "4. Managing and Improving Software: learn how to **collaborate** on code through a group project covering **issue tracking** and **software support**" + ] + }, + { + "cell_type": "markdown", + "id": "29a081c8", + "metadata": { + "slideshow": { + "slide_type": "slide" + } + }, + "source": [ + "## Section 1: Environment For Collaborative Code Development\n", + "\n", + "![](../fig/section1-overview.png)" ] }, { @@ -208,53 +247,103 @@ } }, "source": [ - "## [Section 1: Environment For Collaborative Code Development](http://0.0.0.0:4000/01-section1-intro/index.html)\n", - "\n", - "### Overview Slide / Intro\n", - "\n", - "- get set up with the _tools_ for collaborative code development, and of course there are lots of decisions to make\n", + "- the overall objective for this section is to get set up with the _tools_ for collaborative code development, and of course there are lots of decisions to make\n", "- the recommendations are opinionated but backed by experience\n", - "1. Command Line & Virtual Development Environment: use of Git through command line and then the Python tools `venv` and `pip` to manage dependencies and isolate our project\n", + "\n", + "1. Command Line & Virtual Development Environment: use command line to run our code and then the Python tools `venv` and `pip` to manage dependencies and isolate our project\n", "2. Integrated Development Environment (IDE): course content supports **PyCharm**, but we will do our best to also support **VSCode** assuming you have prior knowledge of it\n", "3. GitHub and Git development workflows\n", - " - _Mod_ there should be some reference to git workflows in this paragraph\n", "4. Python coding style: PEP8\n", "\n", - "_Mod_ Add reference to python coding style on this page" + "- But first, we will get an overview of the example project that we will be working on throughout the course and its structure." ] }, { "cell_type": "markdown", - "id": "0ef6a18c", + "id": "e915343e", "metadata": { "slideshow": { - "slide_type": "notes" + "slide_type": "subslide" } }, "source": [ - "# [Introduction to Software Design and Development](http://0.0.0.0:4000/02-software-development/index.html)\n", + "## Introduction to Our Project and Architecture\n", "\n", - "- _Fix_ this episode feels a bit out of place here\n", - " - the section starts with talking about tools and environment, and then quickly moves to talking about design without any warning, and then immediately back to tools and environment\n", - " - I think the problem is that there is no mention that there will be an introduction to the example project that will be used throughout the course; if there is some warning, then I think this would be fine, and the piece on architecture can probably stay where it is at the bottom of the page\n", - " - Also, the episode could do with a rename! It should be called \"Introduction to Our Project\" or something like that\n", - " - I have made these modifications in my `mbluteau-modifications` branch\n", + "The \"patient inflammation\" example from the Novice Software Carpentry Python Lesson.\n", + "\n", + "
" + ] + }, + { + "cell_type": "markdown", + "id": "248d0a06", + "metadata": { + "slideshow": { + "slide_type": "notes" + } + }, + "source": [ "- Give an introduction to the \"patient inflammation project\"\n", - " - the software project studies inflammation in patients who have been given a new treatment for arthritis and reuses the inflammation dataset from the novice Software Carpentry Python lesson\n", - " - The dataset contains information for 60 patients, who had their inflammation levels recorded for 40 days, so a 2D dataset like below:\n", - " \n", - "![](../fig/inflammation-dataset.svg)\n", - " \n", + " - the software project studies inflammation in patients who have been given a new treatment for arthritis and re-uses the inflammation dataset from the novice Software Carpentry Python lesson\n", + " - The dataset contains information for 60 patients, who had their inflammation levels recorded for 40 days, so a 2D dataset like shown in the figure\n", "- The analysis is incomplete and there are some errors that you will need to correct\n", "- First, we need to get the project, so go to the course website and follow the instructions there for copying and then cloning the repository locally on your machine to work on\n", - " - Complete the lesson \"Obtain the Software Project Locally\"\n", - " - please let us know when you are done by using a sticky note\n", + " - The link for this episode is in the shared document as the section header \"Introduction to Our Project and Architecture\"\n", + " - Complete the lesson \"Obtain the Software Project Locally\" ~ 2-3 minutes\n", + " - please let us know when you are done by taking off your status now and then setting it to the green check at the end" + ] + }, + { + "cell_type": "markdown", + "id": "ce5fc66a", + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, + "source": [ + "### Exercise: 🖉 Obtain the Software Project Locally" + ] + }, + { + "cell_type": "markdown", + "id": "0b01648d", + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, + "source": [ + "### Project Structure\n", + "\n", + "```bash\n", + "$ tree -L 1 -D\n", + ".\n", + "├── data/\n", + "├── inflammation/\n", + "├── inflammation-analysis.py\n", + "├── README.md\n", + "└── tests/\n", + "\n", + "3 directories, 2 files\n", + "\n", + "```" + ] + }, + { + "cell_type": "markdown", + "id": "a1607273", + "metadata": { + "slideshow": { + "slide_type": "notes" + } + }, + "source": [ "- Let's take a look at the project structure\n", - " - Demo this from commandline\n", - " - I like to use `tree`\n", + " - I like to use `tree` (on Ubuntu installable through apt-get, not sure if it comes with Git for Windows)\n", " - With this we see:\n", " - README file (that typically describes the project, its usage, installation, authors and how to contribute),\n", - " - Python script inflammation-analysis.py provides the main entry point into the application\n", + " - Python script `inflammation-analysis.py` provides the main entry point into the application\n", " - three directories - inflammation, data and tests\n", " - inflammation directory has two other Python scripts that we will look at more later\n", " - data directory has the data we will be analysing in csv files\n", @@ -262,42 +351,168 @@ " - **Important Point**: the structure of this project is not arbitrary\n", " - a difference between novice and intermediate softare development is that at the intermediate level the structure of the project should be planned in advance, and this includes the structure of abstract entities like software components and how they interact\n", " - in contrast, a novice will make this structure up as they go along (nothing wrong with that, it is part of learning, but at some point you need to stop doing that and have a think about these things in advance before you start a project).\n", - " - this is probably an appropriate point to link to the Python Cookiecutter project template: https://github.com/ukaea/scientific-python-cookiecutter\n", - "- Complete exercise \"Have a Peak at the Data\". Please post your answers in shared document.\n", + " - this is probably an appropriate point to link to the Python Cookiecutter project template: https://github.com/ukaea/scientific-python-cookiecutter (navigate to this page in shared browser screen)" + ] + }, + { + "cell_type": "markdown", + "id": "0e30c163", + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, + "source": [ + "### Exercise: 🖉 Have a Peak at the Data\n", "\n", - "## Software Architecture\n", + "Please post your answers in the shared document." + ] + }, + { + "cell_type": "markdown", + "id": "c2878bae", + "metadata": { + "slideshow": { + "slide_type": "notes" + } + }, + "source": [ + "- This should be quick, 1-2 minutes, no need to check on status.\n", + "- Demonstrate answer from command line using preferred command: `head -n 5 data/inflammation-01.csv`\n", + "- Explain that each line (row) is indexed by patient, and each comma delimited field (i.e. column) is indexed by the day" + ] + }, + { + "cell_type": "markdown", + "id": "f8b98b99", + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, + "source": [ + "### Software Architecture\n", + "\n", + "> Software architecture is the fundamental structure of a software system... It refers to a 'bigger picture' of a software system that describes high-level components (modules) of the system and how they interact.\n", + "\n", + "The specification or contract of how to interact with a module is called a **programming interface** and these are everywhere in software engineering (e.g. user interfaces, APIs, and even function signatures). \n", "\n", - "- \"Software architecture is the fundamental structure of a software system... It refers to a 'bigger picture' of a software system that describes high-level components (modules) of the system and how they interact.\"\n", + "How do we design a good **programming interface**?" + ] + }, + { + "cell_type": "markdown", + "id": "c39b3b52", + "metadata": { + "slideshow": { + "slide_type": "notes" + } + }, + "source": [ + "- Read quote on slide\n", "- Modules are an important idea\n", " - common examples: libraries that we import and use in our own code (e.g. `numpy` and `matplotlib`), classes in object-oriented languages\n", " - modules are largely self-contained (they can have dependencies) but there should be a well-defined way to interact with it (otherwise, what is the point?)\n", " - the specification or contract of how to interact with a module is called a **programming interface** and these are everywhere in software engineering (e.g. user interfaces, APIs, and even function signatures)\n", - "- Have a read of the Wikipedia articles about different architectures (5 minutes)\n", - "- What were some common features? Are any subsets or special cases of others? Any practical differences?\n", - " - MVC (as presented in the course content, which is actually Model-View-Adapter) is sort of a subset of the multitier/layer architecture concept, where the view is the \"presentation layer\", the controller is the \"application/business layer\" and the model is the \"data layer\"\n", - " - client-server is another subcase of multilayer architecture (where the presentation and application layers have been merged on the client-side)\n", - " - in contrast, SOA takes a much more loosely coupled view of software components; good example is HTTP-based REST APIs\n", - " - there is an agreed communication protocol over a network that the services use to communicate\n", - " - the purpose and function of each of these services is much less prescriptive than MVC or multilayer\n", - " - There is clear differentiation on underlying hardware: MVC is implementation agnostic (could be on sigle device or multiple) while multitier and server-client require distinct machines communicating between each other; similarly for SOA\n", - "- MVC is likely most applicable to research contexts and it is also what is used for the example project\n", - "- Traditional MVC is actually a bit different from the course content:\n", - "![](../fig/MVC-Process.svg)\n", - "By RegisFrey - Own work, Public Domain, https://commons.wikimedia.org/w/index.php?curid=10298177\n", - "- There is direct communication between the model and the view, and the controller does not interact with the view\n", - "- What is presented here is more accurately Model-View-Presenter/Mediator, where the view and model are completely decoupled and unaware of each other:\n", - "![](../fig/mvc-DNA-guide-GUI.png)\n", - "- TODO raise an issue about this on central repo?\n", - "- For the example project, the MVC corresponds as follows:\n", - " - **Controller** = `inflammation-analysis.py` that performs basic statistical analysis over patient data and provides the main entry point into the application\n", - " - **View** = `inflammation/view.py` TODO add brief summary\n", - " - **Model** = `inflammation/model.py` TODO add brief summary\n", - "- Discussion session (5 minutes) in small groups about how MVC might be applicable to their own work. Think of a piece of software you work on, and how this might be used for it. Or think of a new tool you might want to make that uses this.\n", + "- How do we design a good **programming interface**?\n", + " - architecture patterns are guides to help us not just with interfaces but the complete design of our code" + ] + }, + { + "cell_type": "markdown", + "id": "cc52ddf3", + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, + "source": [ + "### Architecture Patterns\n", + "\n", + "- Model-View-Controller (MVC)\n", + "- Model-View-Adapter (MVA)\n", + "- Service-Oriented Architecture (SOA)\n", + "- Client-Server Architecture\n", + "- Multilayer Architecture" + ] + }, + { + "cell_type": "markdown", + "id": "e4be8b81", + "metadata": { + "slideshow": { + "slide_type": "notes" + } + }, + "source": [ + "- there are quite a few different architecture patterns out there, and we don't have time to assess all the different advantages and disadvantages\n", + "- if you are interested, there are some links in the course content that you can follow up\n", + "- lots of them share some key similarities, and one of the progenitors is the Model-View-Controller\n", + "- unfortuantely, there is a pedantic semantic issue in the course content\n", + "- what it calls Model-View-Controller and what is used for our example project is actually Model-View-Adapter\n", + "- the are both very similar but have some key differences" + ] + }, + { + "cell_type": "markdown", + "id": "070f79fa", + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, + "source": [ + "### Model-View-Adapter (MVA)\n", + "\n", + "
" + ] + }, + { + "cell_type": "markdown", + "id": "b3922022", + "metadata": { + "slideshow": { + "slide_type": "notes" + } + }, + "source": [ + "- Model represents the data used by a program and also contains operations/rules for manipulating and changing the data in the model. This may be a database, a file, a single data object or a series of objects. For our example project, the Model is embodied in the `inflammation/model.py` module, which contains the patient data in appropriate data structures along with the methods to manipulate that patient data to get useful statistics. Show this file from command line using `tree -L 2`.\n", + "\n", + "- View is the means of displaying data to users/clients within an application (i.e. provides visualisation of the state of the model) **and** collecting user input in the case of a Graphical User Interface (GUI). However, sometimes the line can get a bit blurred, and the Adapter might collect user input directly (which is actually the case for our example project). For our example project, the View is represented by the module `inflammation/view.py` and it contains the routines to produce graphs of our patient data and the results from analysis. Show this file from command line.\n", + "\n", + "- Adapter manipulates both the Model and the View. Usually, it accepts input from the View and performs the corresponding action on the Model (changing the state of the model) and then updates the View accordingly. In our simple example project, the file `inflammation-analysis.py` is the Adapter, and it actually does handle user input so it not quite fully abiding by MVA.\n", + "\n", "- Some final words on architecture and these particular patterns:\n", " - don't get too caught up determining exactly what functionality should be the responsibility of each component\n", " - the act of splitting things up and thinking about how they will interact through interfaces is where you get the most value\n", - " - it is likely you were already doing this in an informal fashion, but good to think about it more explicitly **and try to record your design in some appropriate format**\n", - " - TODO if there is no mention of how to store or record design information in a later section, raise an issue that some mention should be made about options" + " - it is likely you were already doing this in an informal fashion, but good to think about it more explicitly **and try to record your design in some appropriate format**" + ] + }, + { + "cell_type": "markdown", + "id": "cb8540ca", + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, + "source": [ + "### Breakout Exercise: 🖉 MVA Application Examples from your Work\n", + "\n", + "Think of some other examples from your work or life where MVA architecture may be suitable and discuss these with your fellow learners. Keep it brief (about 1 minute per person)." + ] + }, + { + "cell_type": "markdown", + "id": "3d9c5aa3", + "metadata": { + "slideshow": { + "slide_type": "notes" + } + }, + "source": [ + "- send learners into breakout rooms for about 5 minutes\n", + "- helpers can kickstart the discussion if no one wants to start" ] }, { @@ -497,6 +712,9 @@ "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.8.10" + }, + "rise": { + "theme": "solarized" } }, "nbformat": 4, From d9e21f27f6717f01173d8510989aa126ed328118 Mon Sep 17 00:00:00 2001 From: Matthew Bluteau Date: Fri, 21 Jan 2022 17:33:02 +0000 Subject: [PATCH 30/58] Complete slides for Section 1 --- fig/PyCharm_Icon.png | Bin 0 -> 29648 bytes fig/git-feature-branch.png | Bin 0 -> 54204 bytes fig/vim-vs-emacs.png | Bin 0 -> 554754 bytes slides/section_1_setting_up_environment.ipynb | 554 ++++++++++++++---- 4 files changed, 438 insertions(+), 116 deletions(-) create mode 100644 fig/PyCharm_Icon.png create mode 100644 fig/git-feature-branch.png create mode 100644 fig/vim-vs-emacs.png diff --git a/fig/PyCharm_Icon.png b/fig/PyCharm_Icon.png new file mode 100644 index 0000000000000000000000000000000000000000..7df396f27c7eac320ae69468cc2cc72a28175e8a GIT binary patch literal 29648 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 m!F&(mxWh-DLlYirqkpGS`F#2(11t{xkm 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 CkXQl$ literal 0 HcmV?d00001 diff --git a/fig/vim-vs-emacs.png b/fig/vim-vs-emacs.png new file mode 100644 index 0000000000000000000000000000000000000000..18042a369f1cf9e0c5aa9dfb6a0baa8fac9c00ed GIT binary patch literal 554754 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≤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%0A>Kh1h(5g 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

7FzHAB;`X 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�GsJd+UfVFJ>5Za_;ZCxq}lY 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 z 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

Yg;i-Y>N%yE)JBc3^a0`uv?Rl))E7MtU>43gA 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
KjOmFJ+60j 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%0D625TO%O%MekS%w~T9S ziR*oQe7d1qp8ey@0Pr2e5R+3 zTyx;ZhbJ(s$hCM0qKTlHPL|d2qY)!9Y&{6E6)XhX zDp>f5tg8Gv3S>K?bvn0`KoJN#aM#gow@v?*FJbAo-PI%s`%*Iww~$JqaSV3dD5#1= zB;TCr_>F^*2X^RZQvz00GMMG`>FG&9A$t6G^y#(b!0?@?*4!ad zDh$s~ISi(rNc{ZCJMIlU>Gts=+~?yRe6_c4KM^6%{RM{%wn4V}5@74VVZp5)84&?h z_vQW&Yjm{@2l#l`{Jby7h9m!ioJFco2< zjt!K>9fDpvHs)``>N442j$jr=fLMKqsqoVQrhrmFo|Q?7j0(^=by@ z0s-t|DzIZ5@JOb*BIDhU01{-Deu zN)@T8rJNV#3Yf4M{uPjrV<9aNy{LZk@8+pfYb`(X4r^IDT1RmQw$+-J3YWmeda4s3 z1X7T-^}LS#KHU-rH8r)|9te65d3de%W@?>f^!W+Dz6-bp&Q|W6l;dH^A%&wUu;748 z7J9;=!hI-&iNhx2x{jCN^6Ia)a}yk;@~{=~=(IEe24yQd-8R=c&#YtD!OMA?0#UtG^$ZmG23T$)T z#j^;wh4YGgQo=ttCi;=nn*(*_L2G6@|M?SQ`(g6)FGKUEO$X%PKNBm!b*xCbfsJ(o zpggF)6C9K{s zlJYMYW^HV21}jsb@JP;`H6l`roscjJ;ZwTpj+2dEwju>6LV~Lt*)H^VEvXx+0&9K7 zb@y(@Q|`$STmlA}2InP(t2;?Ag>qvyzNbojr^Zi*qQ<0?KRCyK8ricScs#UM{vvfp z&Q=HGmY07g?Hu|_cJS+IIB-D$Hej8Xoqg-3=zQm#qgAyTdoeO9>K_r%9cWUOhY#~>vp5C2K{ubuUEJEC4(ggK0JcViYiQR3f)O6e-;!+S5EyQEOOj*n zn`VowCh>l(av3j-DnXU^aJk5@NcV~e;>Uu_D&9Uco}Zg5l`F~8D_3DOt@oy-5mmaY zMEAD4kOnI*Am>k#GS(aO@b~YB`uhP`+JgJydW4m_Ch2ao@%tyskG#DG3!0moPjsf<$2M?fKO#Q81k4tZ+f3L} z06?6U{2V`Jhh;F)BajN)TwY$@BQw`!)O|m_!`9+ zHhPqYq%eT`EcY*>iZnp9<`6zCsFFZRTi337N{%OJH9)q|1~G7I=teNs&basQ#+1*!&YjgUtlpgbY;$pHvHpTaB;-)_AhN3m?xBA5 z2<{Zu&6oi4d1>+DpLBG$#20xT(~^lqYF%s}wUT3_ZjwF+#dmb?Zmq>+Bt>b)x}tc< zD5eRI^Tepn%e-_Kqqo<~j@&MF`v22*>4xA~#D2U09$e@CITpb zgAe1Ct}X?hIWTS>-BeCaPFUf)f;As(@r8oQ(9qE2lxQF=L26Y`@MA3p4go=E<503l zm``c9PzMS8oP_T2@xSGq3kF%DWX6j11a|aJm@sI3{Z;#X@{x2}6&W=J1;%NJs3W+IK`;zg z1c*ht6Tnwv7hevrjWQa*9hYG-EBnFAg1M8z26oV7FOcD zgie3svDWj-tFZ8a>e2!dQBd>nqJu$M?vp7uX{@XVKZMS$Y6XvOCZ!`9z4^x89eXy+;vUli)l_%2 z?K+sTAJzSX|M|AnaJ(L1>5VQ@JOYh}-{53xhN%L+Ky?2jW^V2XOv8gOUB48<7658g zVVTs_MT^kU)lH0viHVC_Dd>K-y|ZZOc`vAQevqfndssr?F3ZUy3$I42SH+4Fc}N_Z z>A4O8bVQ}_fVzHV296l=6DcI5q~K)c830{?nTgwS0r*~$lD7Udob1@zGN9*j%Ed2a z2|fh;YUIUCGDbUai{5|tuZN`%0AUEgMHHH}zj;%!2{m=FG%-JQFz?rm+-1CH=BCQ*>eU3bmojXEBb4;J9pAeqBWEu*(LMV1ZwDUcGn}yXT7^j z21#R+CDTJb+Kn{2lxfUW+4oB61IL^;b&^w~iN=~YMU9^pH!?mshX)Gtug3$LLY`m> zUtz=2_a9G5eit%4QPiqc#wzDoPPFCx_HxZsUBpiF};xj@Yd6tE&G=dF(cMTWAAJ*@VR>uIi$%CQRb+tE zo@=>JAq%Mag&W4Mlqh7Hj^;*(B!HG}26WXLCRcmst0b;n{?!RzM2(Fld zwK_f%gMcGA8v~lWUm*TzoW4C0&r-z1w^Jr*kXF!|%_ujl+FO zIBH-tm~f?f|;c`Rmd z2T;>du}4aT6(Fb(z}IuHV)Fw{vn1ekd1?08w8<@eCLw9%k#B2DDbJ(yWO66rgr-Jn z=HMz4^v*=t#3#t1p|p7_HJb4A!7tAHJU8CxPmIDhxzF6g!N#yg(%9Q*DSqZH8yH~b zE8H~@lPfa!zWOmc`!ull^XJbT92}^T-_xYOx}H@5K}zm1cI4c)Y9h(pyOMHvc$k^V z#PF8j3P!1Slmf%wzlR|oYcdB%Paqui9%TXUlSC~+fsk;Z2R4R-xyHd==?vSkRr`^z zJ;9RL7}&&!+IZh8uI(zgGhkGgQ{0I)37LUk>;3&v-%}&>_e8opv6r-Y1ENYk84Rt7j+1?Y)0Y$o?FD_`uXpN%WsybpZ$U2x&cu@pNtRW2ODA{e6ud zqQRnaRHe7J+S-*;t#d2E_hSk>%*GoVw&0}2(4&;l%XybNI?=sp@#HK^y>UT*a3Od- z+08m``UST{lKdH-cXg+kI2FEQ{v%gyc{|k@t1qZJfB*b-K6Pu2jyC>ix@zw{v4iLF zon6r0nUEslGacUV;}g+IXa9<;sxOARSP4X{DPR7B1|)UBa6S%N9IZ?6>BE5u0Ivme88nkcQ^xJc|e=2HMO`rtht4M&^_2oS@Xw-Q%5kZ)c=?D#)nM5<^zy94w%taAunJ#ryNHXw`9@tUv zuW;}$3foFCF0R67dhaPG2j$?yXV{+iTvf-srsr8Y16c3(_Q!FY$GQNrTZ4hWR0f9x z<6S=)o}ICeqavl)=4~V>^-a|>!=&K@-Rh%pAU~fBAp+F;FUV$Sjc)pjmA?!H9E zUL4C{LH-_QcCZ@o66RdHQ_8%fELPmZFL;Xu=a+Xs5s{QPGMGGR9Aym}d0)$m&8#S~ zDg5P)XShwk)2!3--m-oZlO>B|x^!`Rn-Q21Ap6yj;%mgfV8riUHl-;YT!E$%zCyob_G z3o>GgbbVSOuRr*5;i+Xkzz`@`R$iItw~i~!E$FLa;bLN9Vr5nQ%xdR+j$&F4 zO)|^MA4kE!oYDoqRgMDzbbPo#w1Lj=7NH1A^$XNQd>0ZD>iRKI{;hRD`(6RN=Au;m zA4I(@l1fycy(Jtf+JxADn`}pKsfd}P$e3xo?lv`;U!yS?L|2m!h642S2NRq&_{67N zv<>R2eMU%UjTm3IjdKg)bJHh($~}(7>D^y_dV5WA6JBF#CQ*9ZZH)O6n-;F240>h> zZ7k+sk6mVKl|Cj**7!yW{Qz@USzdpA0lc5Ha$Qvb&+!>lt|E>zch_bQn6%5(IE+wzkdUfi%<|yrH?oz>yuBzp^ z*zCEnuDRvxma#Dl(icQJVyWNQ(1nmKea3>`y zNmo}FtHPb$l>j+(LG0g}!hJjO&cg7oBN@qKxL*~aWj10kG&zVqcKjOYeB=}o?uWm9 zLsOHdao6kma>yePc%`o3wUC;ah+!A+TXbwGPb~Kq{sGvX`N1UJp&1C&>10_%(m>5h zUW)ysw&UAl{~iDpb~yG!Ba-br%m-U$+Bjd0BLunTmZQ4R7+R?-{+>vj?4f>fFQyv` zivOQk`6bK0b&*ZNe~W{)JeIe%*?y|a-ly)(2jSVjJ3#&e&chU(z_CHaa3u=Hr)0w7 zIk6flzh1~CrcFr0Fo3~%?EpY(p&Soq1wtiGIhbi)`Sog9_bR_*S1C96tnL!;rmM*I zi7GQVI2eX0SXP;Zu!Az96VpBT*~Cugql#|#Ql9|tuU7L;AR3{(@P4lLwNbj{@-hFhst ze0wdGTePsO?aUSZ*wr9hja>`|3JuYhMRLqQgQCBV`tV@^loxx!L>EGCnwVB-i|HS7t8 z1*W(|=d6*=h-4WbY4Hyn_P-B)W$29r37*4l#>LjZV%H)nA@LV}RBq>x_0CV`Zra+~ zRn!Tz;KL^nRt0E9#tZ|Y4DhKbfS=zC+h7*fOFYJgbdNGAm8gh*wupdJO%szge^h&U z+DCm&EOCbB3gNa)LdMTiAE(m->w5~6O3suhuEWz}G)x+1w=%3uJ>5KqAs6-;UgY2M z8)7}*N{5lKz053ABJ&cw3|n6=di&6`n*m@xPD87mJWhY-HPud#4h;n2S}AbecUp1> z$$Z5TnpEP4rvL^p=|;)F>(5Nx?IV3_9EUCFJ=B`HyvH8&aHwo$d_FSvO@8)i;&(6yK?1@u}q4Z7)+f8#b(xDj`p;}m7B@eL!O9M1Sv=g{nVeb^jM0yn?(uD?detc5usdrAjUZ#6wLtwT#dz@9k!}sZGN1R9xuOMOba=W-( zjl47AFSxJ3Do$FDMIA@?H!CaaOmEs^K-1ZWTyiw`HH84L3Z5b}u7CZ4H^RNtdthT} z3Eky7RSvGeQm;Z}q?}V%8!IaFgM3K$Q()K0MeBU`_AL_0WAO?_K%Tc0!<$}(Y_3B> zm=XcS@uQEWe2=dZrZb0KGQTi7KGoNc&QtLvQ9!N~efO!pgpU~*s&N>k8E9$M-;J(| zcD;Yj=BS|1w>ZjGyceAa5}#R5%5Hz{PEYtc-Z)@0d#1&(U$zfM>fL*sxbtn>B!;P`Rg zz5Cth1;50m(VS7>y+EJS-T88-_F>{Q>PR>0$pW2B`|XwzU!hNkl~6;pu+)DS6Q2f+ zA6NuKFfRwo8xs^6IIBV+tVylCj=A{~baf)aT4o-m;BqgP!J|gSLqc+9-l=5|QvnJv z(*hjAEw^N3uAuNDgjdI;x~sbTwu`H4PEHPepSm60;3&4$tGv$}Vz@?mR!Rfb)U8d) z&f^8z(Tr1>yC=bBsCgjI69uCbm*8Z*?P%Z|7x{L-Yg?g#2X@HDKVSMbJO{^~oK||r z>1``3%@29{leqWis%!QOr_I=Jmut$z6 zTNMGBf5eoZfEbL;gc?GCEFfY=@UM%AyFzcl=o?R^roj9nsiH#gH$zi4dw-?&xMyeL z_lv55yHf5kTJ(RCRz8etP?f=eR3+AOTj6a$M~)WD8>OP(j9qb7=Y35=R(2+SR!n^Q z6^muf`+*`)>VF`uRDqfsJUM-e!*F`SHp`b)zdK0UH=-oVPnpwKtLDM?yp*K6*bhw| zI2-mJ9evmnY6QU<}7|P@7?90VGQDutj=~0xb+lWRv)DPM77iy7}aGW`TX_w5okGg1lNFf!aCokw=Au#si$JPMOt|7{!ewukW7do0Nyd(1l4weT18xsI6a;cXc%qpmNqG>HD( zg@y*n5{dd>;GU_iU1*`#5Ao?e$avgS8BD|(MYvW;^2i+$x+bjZwCt#+P#-wG3f{v( z=}q|IwqJJVPtu-YRU^v-juU3tKa>b0%n$-pOXYJky zDVaS*cburYH@`>kPbIy5`xX&N4SH@+b4-I2eVtuOs*ykW(GIEolxH3q8cCSm+Ka&d z7av3~E+Vc9ROKT_AlREg1LtDfpiL z(eS=dGKddK;qu|qXyOrKGBYsaNP$YVI$0lOkDZ@GB!n$2`DFrB$4(``KQ`z{69Q$bC!~Up(uOzZGS|jZA;J3)?lQDIwvAFsIXO$*D}4P(ng8 zXEgTT)aLfS{ZeIqLolkB*P@&;$QI!*oc#7->-@azgZ!%CtfQANh2nd1pJ

cE(=g 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%0A{DMUP6TNg$dhpirE6#}@mA~fe z%!K&))0c8|#3t_@{i`wXU1s-8luH@=BET84*s%F^tZ{|sYR_up+xa+Yk44$iSAEro zNpJjWH;W(sJ9_`yq`|6BC!jKxsqf!>fA_Nv{q-8Q^M8bkzrJdfm$YrmyWelQt1|V5 zcbuUziflGAx$+rE{KniH&1QtJ|2-LglFMzJjPflhG`4KFl-gg&q%-xIUS?vjn<7nyM;Drl7N+ zcU0bK5F*_|31g51)#3fZ#&eNVhtDyre(d~@*2K)hjQPG^o z4ln{dFda#Tj?N^{_rZhHNx6U8{}dY)7H0tnND$oTg;dyvU)$SGO*A??sE-LdDr%$H z7#vG$R5q!M#N*O!{~9@`4buw$x)c1X<=uVYlg4Mjq)7Jo33tW51KVZ%AGLL-XKNUY z6z4*NSuu%QmL@9RD-f=78V-glK|$h$2IR{lS%yVSv`?{b-BMsjOS|Y-3Ox9ds7Krk zcV({LB3JD#Hrube(_O)0GbeqRRO8!I$Z^;wS)SjqdVPXPe+@4?ZU_h>i>eDcrlft5 zf2UI*nj%irXA%&UA?q)PuaJ;oEB5B^8I4-YRpXms)MwVfaV)gPgoj-Yc5`0xagY{# z0K+6^P34qXDsaB4^(%2IhoeoO-l3s)Prc1U9Tx=a26g_srYj+Mk`fZO@2zQ@zCvT>iB)cs(q@>&|MhT4(;d|o!oPU!%wj#h8Ru%ZnVqR;7 z$K<-fxA`;clT{9blSx(I#mRrcwM$>!!yT~T5OV=9*w@B@fk#^g}*YC}# znP(E7a+f8Jsdkf%=CkuK8P*zm0yO~yOy;03gqyE{J9Y>|7_=i|FY5pyeQ?qhIN$Lg zRwr)f7tPh?>YaxB@my0zl)E`^I^ci%oQoPls*^6eix zB`7p-ITMsCVyni9^o#QHc3>uTb)^E4?vEc@RVS8plx)Xfd$$ZrIrA-O7L{Kopq0u7 z1Ph`>>@}D+mq~N!*d6DMpvr7Jt*CdT@@HcEl9IEKpK(1>#h}^ECARv)Jjf>`l<99f z_i4mbH0(+Gi-f+uzF>4xgw1jjchpnD%a-`k(7JdzE%7F;mJWC}({C|F3vP0ln3%BK z7VCcvTi;SoBGD8o9HrS68d}<9-gFtgwST7NJv~xr(dXov0=9b~(qJ1zSX5gsvv)lI zne^jO(fAM3Ju-56M+@+ni%RlP+1Fc1SHVMf6af%w$F-r@^NvnoLK|Xsf;Ik^H1tAf z`o~LH_$dSgX=rFDD4>(;E+M(CMU>>t%1LP)0P3+i{xq{FQ+}uSGB7>nZ499?Di@lw z-KPBDP4kuOmYU=##Y!M(qfaHL5np*LrZ7vAE zx%vqp=uydE)xOVe7{_f2HUYbfyN6&+4BpUp(-3#cqj-TI+qci+kgq4kAN02HM-1HN zX5pw&d=;e!Dklz(3bK&UE7;-;W+6a<+%>G+aw9by#LLW!N)X2n*@X!CBT*!rQbmJN z90AD^ru@fdos#vC!s8>o!-|bi@A_4;zY}ds+ql=uB~xhwLMO1P>RyCS+X}if!qx0= za`z2$I`O~L;){Zeq>Eiy9gBu>h{~aT5h`&BdkbL<`FBehzT-1s3MaUmY2JQ{JxyYJ zCsWRru9xB^pHe6qdgk{4dU|?51mEQlp$n=f1ZK++HWvaJ9N3AskiV&FGByCc>04L? zk-9i7h75Ntd01H3!~LZrn3jMhr+*T|hCSU|uzg!uil2XKb+s51tW}hWUK_HTE2!^6 zDF^~kmej4wZ!6shuu2d=kQzaY1P;;6dn-dO0_0QR+U`Jup+<*=i>tKcGE3|YFu?CU zqo^|DesLadZu(qnDM?99E+R5A6)yRnvnHZyPWBks36zj`0{vKM(J6IIz7SxWguIQ9 zPR|@sk~Yhq>)>SfdK=!f2M^c&)_P$Q_B%guH^qF8>6EkU=tt%KL?ojqPBqVIw*Z~o zmzPRzs^KA+7@%tnOo9 z6zKOL(Q}tnX-lH6z)trse`94cDpS_tfM<{oRIpsIXrAqy`Zm=p)6$p2UtB^L%w1Vg zKgm0jrri?!4%{R)@Ry(|o-Xqe&kv4RsJY*wAEIFNZy=?(aq zntOVbKsNp79?C_8D!;*7Q)eCB4Gj%}g4ogooOiZPBJA5_|z!|8tzMkhR&MB&! zjsfAY8lKMzc>A{Ith1%-5Jh1Q#i-E2xB%B5YS%QRTy!T5fH;SVT1LoSdiPb z!oP@3*8YM+M?Od@>JUDb4@us?`r#Gl)%RAY!2WM`A%-Fk;2cfTi) zhjAo_><}SZ1jvQ@otBF<6DPu6)RJNvoVrh;yq22)lE}W%XBk6tB6<3fT#3pxJ!XW= zOTM(kKCyn=(+GQTZ~zcT;IKD)eip?UT3+skR5Ng9cL_VrH{JkWgMrSI8xkdnPoF;N zNnD-o-lCvT)AP-e`POVc)}xut3Fx3J7^&RCYq#m4B-*4L`r77Bk+L|1@w}PLS|Mey zf+!~4DkS8puw!)M7O1rIT%RSsQ*}Z{=gX7(C&(ExIkMSpAFJI%LX~}gRQN`y-r$PLev2|s6kHkn}_-(CJRUH;im{I@EC z=>w)eb?Ub%QT!SLCffFosn*p*!(&nO>X-FL%N{>Z2Jd@dl6-}FlEOD1FPh~Ap82&0 zz^)2ol<982Q@XaLwc6x1&uOh7$cTo}7S(rsGeSHog4Wxnx$&`t;wRMY1Q6yXX>$JI2Nhs2BcqPuTf??VE3`kuHhOOI0QBNi09Q_2&y=b~$R>rON3EXoB#>g9y?-(_szvfsb$gIBRK*pRb1B$3X2; z4|RA~_ii?efg6os_4~&H;AS~(;us@D%jFo+QBh5bnx}v!DdKMnH41!!LoKz-Fs}dR z=F(kx5#T7pQblx6s?QtmhzcM>S*AS!8IiZtd30hc#wwY{A(b*Wa2>`D9vr=O%8hb(wp_nfb7&Gkb>Hz@wOXS;rGO8@H|N z$RdkgY&>-0`}DyH-x(g}!+`V=xi$qM&B8s^RUk+^ z=MTdJ$->5Fkmkbs_wQdd=|AYp;tZ} zlowZpu$xDxJH!A?VIu!R*svbot04G-osGh`+U3t?r6Dhm^z{oYlDbw8O-ROcfzU3Z zhlTYNM!x_kgHvKmacQIPPLb9l8}9V%#OmE$_M>E$d4p&E#bN77U3!_8iYDafkye7_sb0fUWn&xxnSlICJd%QC+rBN>;_VTk)_efDq}JD0zN> zVkB5tV$PW~uyWLbGQ`zHAP$i>i(SD~*CqibHEW13tJE4`{x{+{M~Z=bMGM$8$e)Y2 z8-tTtDwg<3|Bgo9!}zuUgJ?eg<_|z0;9>pS#PQ38a~Z3GVL@9Fd}Ll4);tyRs?bq= z_oOmwlKH*LmC@LPhM-EXqq(H;%ABrej|#-o8}eF(?_RmOubk32`gUn-CDrW9Jrl{+kU7kTYC?OvyBa^zsNb$6 z;Ni30t3rWq@4}aK|n#g7)`(0 z3HQZ;ql7dB38)tM@9gd2RLVkXVN3|%@^GYDv=HfWMNhJ0)N!AQ;QW#V(_{MAsKt~c zl)ldu37_;n1Jne}Bfnq1zVsuDDf682faW-A8s1*)zz$fEZZ3fB))azA8mp&-LM+Yi ziS~0Wo9plOH5L^I;KKK;J>A{4uzHET5*Nla&}~sjkSkti<<=3BtX3?05nc9^=(->O z$umjt_tSaXhNftenGutCbckd2)3L&WShY1QG<2$A2mQhG3%<1hsB}rqU65tuwuyR; zR{Gj?_6}^X+~!}78j1)rPCrRX`o^KtnxP*w4)!=OIz}iY31OiS3l14nSjoQ4WKxd# zu%sxa8CRmx*72s$nh@tc(bG~eA0J|BHhJ(52tfO5YfZpP#))8xWFFMS9V8y6si^aQ zygAs^YwPB=40qFwLQiF1#)G#y!^?=wkGL=XPtn3UWHOHg(}*fRzy77!K4;Rh)iU~V z@g?g6zOd0f1;x=AajcUq+<$bH656cO7=KUcxJDBoPWGiC$K4BJ*}CVqUfyD}+*CGR z-P4l&gcSYWQLuGy6i<@~#kZMjqNn&c-r9pcV*%KXaI*k(zWu`OlR;1pm0c{=^tD5(PCN|GWWaq00)RqF@Dc zHPmasCmL1NGjo^1c;xGzP5m+;A=J7za+O(h<_Opk5)l1>@k^+kqxwif>` zpA^}>hC;HxIL~~fc`p`ti}Yt+69{QV@@n@3*%=mr}>o$~^(xH5|y_e5IMZz|V=Lu($=g z9Z=P170|j=Sa_ekqw)4wZcVgi03<((AOwiYOkW35>7+b7Jf_m)3fW1b_P5#cy8r4Ts?$xpTe?E)rgy%Oo*#$HD$hYD0=eqbNwtQw&e-Fw}s6U2d!VYy0|C- zqeho=!8WNES#T>wXzWSmqY+~&vwBkaI$Ks$O{!GIIl|4Vr6}DdBlQ?Blg| zEoaV>@({_X21`xS*b^$j9gUwHw@;^?ufnH>*gELt^J8eq$@A0S)H?90n51WQgVV7b zxTMrR_t@M$-auQ67dM2e@rW8T_sGKT#iF(fEyN`4mG8wBKNj8`Wg8~b5qFTqPUP~SLrl_m z#g`m`ZZoS*58fKOHMKYYpm0ffgnM($44P$wNY?z(^)|dE8U^(Y4H`0sH#?a}1exR= z3+*4vKF~BU`IcSHs|ow%(zkC$iY);=zl5**TX}WR+&~iERUnHZkF>QJcN6i4u-y_Y z!A$zua3oZ2Z=yS1gP-UR_Xj4^b&P7EJEVv2{Z7A@++-Vt(t0hc6RFL(Fm)wSa# z>x_nx`6iD)?)n`FLYF-6mdZa0E6HqbEpm0rM}}($9%Jt-*J$j=W)TNk1Ij1CT(R~+ zhwhn04p4GBidVo5177m=d*{8zkzc=lrG3WwEbX=^0=^2`6-ju~3vi?@-8?<3tAbW? z#!ft$c{rvN?Pcy3uYG7%!}S^-Nue;gX*cz3JlT zIsR1z{=2rQuwXp7jG-N4m?a4C+qXZqsytyQHzr3Ug*6(Wk6dX!kU5fzvYg?0L6l%( z9i`FXRww+=2bg)g{WUk90AqvGv+9?Z`)Ja?cYrFI9h3ADB1ub1QX602Z#0;*12qlo zmKwfml&2lbkE=HX%D#g>374$MfoV;D+-+59y)0uD{ROXe1l4lWQ<$ybu2=-Oiq#PL zgl#P&U8Hjc-omEr+$I`#tS8P`S?)H;Fy~nz?OdLj3GaPh8rgZ*Y^`CECK_M?dJ4b& zW7WZX$q&<=WqXLBs-&a@8#6Bzmg8Z+gzdm28@mEZzbYyz z*}WOk-+RDb_lJmOPWj~}3Aga2awhz>(gQ1CT4x7V+c zZbi^4?{PS(bRaC=??hXZ*F4Se{d@N&{O1o`z4}{u?i@%wVd2K4;B@s^I&)v4ExMCK3)IPDO_yDd}GFvJ#q&Z_{4S&lhM!;OX@F zHgP~&ko~u_#sl19r$(sWxYw{UDQZk8$Ua-xJZnWm&E=UM%OdG0@E}>xbbp#^li9yX zRBAp@;#kxThIxL9xsgV0d)+IA0i=we&uZ50J*15_FK8+62e#}72cD6Y6+_&@w(clu zHZ#3+>_f&(jJg=#9{94jz+U4e1HhEZs4`f9BoTm{QqA#$(>QZo`&+lw1wT^~t>k!iuS0@nm)vN?I>C zfEhW5lNozmEr$8Mu2JAF*05G+wzgsQKqGIUtIN$b{_&%A?@=L213C>aya|3stAk7~Lt;iec#MtmsaCN59eX+miZu zDE_o`?Qt@~UI|dJ1fFDhd3k!8_p1)NUcz=3=o>UALN#>Q=!6J(Z!aeNRsEC;e?DAf zA_iI;daCHdGw;PgoLl7=W=&AI&M7fn<7l5^Q&OI-DY|kCRyveJ7|>@9IzK#FnGuqB zVZX#%u{2}YG^-Fj)BZr5^WE=Wtpj0NkYut+^txeOHQHjmfS-u`KE~t|%C<~)2jR;j zxY_Bo#RPk=|EOd9sat4VHeOM$JoxYsk_MrIi7YFde=Is=TB6tSRT^%Z{;Q+KtKA_l z+tW;jY^EL<5xP(GpOL`7ckFXBMB9N3_c;ux(R;jWE$U~pgNDoz7BXpq?%4^ASkLx4;=z0lj;rOv8 z5NR68zi%UnBK&>V`-pnSNf>vNpqAH~?lFQ49Mz|?|LG2}U@2B>=a0HN|zcny0 zh!D#VJN0$;^p>Pdv3Ui8?R-ascuPRosBW!>;Y01x@20eMW!jjTosDRzt*PNR^6J%q zDiHtmfmp-wB$!-3ynM+s{7;(8!V~fchzCnN)aPMBK5*QkE>g^l=@udaj}7PaD1COFcgpnpfZN`So0TBveQ!Z^DhP z!NpImeA>p7M8HHKv887niDEICSOXZFoA0IzoMVvx#l>!PUS>!oS`-g(;gptwwL-?jaSIj{3 z$OTTmlWzNpo!y#D-+l=W^@T5A4nUs&rexo&QYxbdA=e!+N&7)ZsD_~RWe`ZtvmHe= z8TTMTkn{1`RkQFKar2=<%ek}QuknpTOVs{g9A*Ol5gOKUk+b{l&H|a$&Ue{1rzU>= z`n9=h1(lkQ38?`2>|-K>M9;Pg!W6w4`f_}ngOnsO7QrmBv3F6HfSV{{5e?AsM@2;! z2xywW1!w%%`%fnd!|p&D>Jj+_5^@h%8miMj?KRWKw~b#lBDFn(2R*}$mkJbfPf_tP zGs6u{!TKU-=f%o*^5+QMx`5N~Ag^%Jk)(}~!5XTZ2S+2})Eqo`Q*<46h*+bRT&cr{ zBX&ncM)LNE6ob4%LvSXcQI*NW6+Az7Z!Mt(?{}8v#Z&8CP?ySMKWaS7rNpwB%a@#i z6MsP(Vyk8BC)o}Z*(oZB+dohGHO+_yOHQR^jo4oi_9LPQKwP^#`gs2B`dD$&({~WT zjl6jib&*h$VX867`6=?>!O*2U6)HtHTBZWG%$P4CQ^7YTb@~lhs~9%s&mDPLPJaR&);w|G&2hL;Jyfpx1=R*W1-zV4-Q3W> z1R1Q_`^y04fFkN=$q;CCC*~GgP{9i{`X=KAsU!Hh>4;=spt0zeIvnyfXvko9UYV}_ zD^?L*fuIq$k<&PW!fjC97LkJZNM1posQJJg`Ka^jCPaaQuBsJ3C&FxWvT1)>-;w4`1Kc#4x%e{$vO`!q6*^EHg!$ zETvih2xiH??ChjIMu#xL6ED=$B(2ZS-Ms5+@?Ygkwz0Dt1n-SM!o0bZN@RrfQo@_= z_?&5IXztv(Lz@%sz@4A?6%`P53`>NnyyguFp~Qc2aVeZ#@9n9ms;(BrBfPy|jWs$y z)GxmejZdhB{NR0wwY4=*4-fh)N;(bd5y8R15VZ13Z|zG@7t52rHuQR|{NXdDB<&=7 z`rLYzQ1jGt_Y~;mSDZX!xyy8Vy1T7#GZ6!c0I$mvjmJI1^$;XhK%*Nf*ZYb>PRDq9 z>~_BKnpT(=YQRKmYmr6-<=wmcvbl>{`dyhQB0fUz-sot^`-+T;MJv@Y zps2zeLC~HvoT%LnmPV2XPK^_0_Ud7-D+SXxFmq!2q{zLB`5I%@?LS5J^@_Y^mEEue z%}@r}rjfTOa|)Gcv5U0d#x*UOYNezuGkz2x8oBb1JS`m|ow?cBu}3ewuJP8R7X9xy zCIvI8Z(tc)K{O<;s15qMy1}nBmk3w?o<<1E9|iX50;orwS}^zEybFtqi^Fw>ZSwGD zZJh+k1;8z}8^-`}DOpU!YJSke{5{u7@hg-$AIBoRopSSD#`GFD)&7@Zdq!r8Vn3 zaeB6wxZnG3i%eTo)7$@u3lq&!xuG=68&i^rvWlu4BcT_rVZw1wiew5SW)(#&vF``e z>|9f-(Q@?W!ecPFe7OXKw$d2^`@lwSZP|Bf1*cIBdaTZ2ZNSqq(n#92Hc(T8DYDM>rz% zJ3X#j+*?cM4ECJyE$fo!c(B9C6?;`Zsq}=edz6j^3)H{(wQlc|P#5_XjVy7&QH2!aBX|AfR<&?77CA$dD zCR$AvGK2$3(O18Ye_vY*l|cm;EwjG1hgge#U#u_|&2ojV;(6NM-iF4zue&?#baJ76 zxHrY_)F&=79720M>U$pz?TE0MJ~Q~?&eLKV?IC@@UQItWbW{G4dWWp^R~{9-u^^w&;#|vBxw;CuB*;*e{^A zIA&9TNXwEz;PlI|BzLzpHY0jQ{J9+Y(1k&*m~Z$o$=OGCZ7>ibd?{T`it{pe?ReI5 zG<_ehKyGfXABl$!>o%rU=-+Q(&>wqxYJe zBO<?oA?NR4zBfo z=pKdDcx;T{Ap0Vp0{lCb|9;9F+^*f;!PyKuDCKo|h!LQ`C+>bqw(9ZYL-X!uzB?4w zA4;ZO=k?RlirHd(l;-A>SZn=s`}N1oK(d2;N>)Uh;>xjtmdltQ1TU z$4>0rcjh!1zkvzW zqMeIOh`Ms8eL%!@vknUiuE++TWsn_=tu3MGTlF+BtvZoMh_)^iN4zInKGl1Iidfdy zn~H_gASdKu*(pNVF&5^&i|O;Bbrasxvf^S;?8lBBOJtF@LvXI~3+$*t_jtzAGN0^@ zWNfHaMPZo2a{@0mZwoQciZ^yo~3<(gR*j;pL zL5d$^Dgp%Hnty`erHP62CkI>T!>4(|)_UKOnQW&Q2sf9d+PDa!n7n59$_}l);uqNc zm5?!EIPb)K`7R7u_ibvO@0B`5Z~v4^E7 zDW{C`ZnVdu@#pz5Nl5$32+?9SPwObpRb$uM9cvXH0EzxyH_czXdgv4%s7CT!Hxhi- zVb_N8%h%}U=Jv#((LvhQWIpk=atE)B3yiXmSZl>Q&3H8kdX5bb%flr9ejU;1M@NT5 z3)R*A{QP8{`U&YWFa%*`-Zbya?5r#k`@SxgC+d4!u>1J5iHoc2R-^7sfTHli6}nxx zVD|W;!M~b4dWk5u_R7xA^+5a=$E9A+3i7-TQKr3*b2-8xPq&2(~66CMG5& zjde8f{>JF)f>fWC+1WO57~&EVTpN#A?&A~GlaUe=i~F6D1r>#AnrLq4K?3V zKVYU75-DPTBU>TZ|Ga1wst0x_e0(;|qqp;z^7;YBsn~9&KBHj%MhMaX?tW;c($dn@lu4mh46s~`ET6%u zUw9p_&eCkkz{m(S$4l*o_Ia^$7$VRCK0}YaS&U4R`d+{5{Dj5huExgwI2rw|cpekY z!^Zt#D#4q|%-Qw1@hOx6k+~<*{@|x=0*a5tZ3|8iKtQ;*u(+6I^xdjNFC7uM>bdRn zknQtLA$Q3%>CftU^2~cbaI>){b(xYSpCNq5FNx8YYqUt#~J9mUhZKDA5^YgQ4Fy5=@v9P#It^lHRE+iRO&&h25 zf8+jnSJVzFHbm78v^F6XS6k>0x}}a=zws}@1AvORil4pjM668{(hR=;`W304A$syI z#&sj9<)3J5@C0cuu`DWAs|=n}^*+eUYlqSXh&Fh#pd9{VH{o&~M{`%#6`=F^?}bTt z3CsFyDg3XTd5{Rni$@dkM=g8NJ`oWSQL+fs$m*#aKAc|7wd0svOLMk?J2l79egxxZ{w&A+h4y&=1EuBd*WH zMU^$j8~wd7h++(2IgZutR4!e51mKP&qHvFSG4M-hGaecjwBTFwLA<1-m3p#DL6#I|kk z6!0DZP}dgvdD8Tu<2TW39Bv+NQV#^mlRrMg;8JDX6qq&2H6^H&gQ&|_kemZW=H-!93 z1q1?*LzSH_L;&0=C293C#7Cb8T!pU|z&alT5Sitbm3Xc2lnyJ2g;9Xr`P=x2<=vCR z#PO@e>2Ii?p~BW%ipWJeANO8t@ZtMNE_#=Oh{CNBYh57CiqMh(VQmac0rCwGDgelq(HRJ^81f9;51I)!^-nh)xItSv2ub za9w(1_`jpFe^-Ao>K9^OnxEJUP5}~KMR&)Y&>zK-2>%9RZQ8FrzxI>LpJxzwoW;ZQ z3DGycJQ<$w`<#H&$8)CLj;kQ zlq4K=0rnl!2o!O3bED4tjNgqXQ{)ra?T^m`_WOQWTs#eW{7rUw%*C**RG0X0uj7Xc z3JxJ>AhJE&qT~D}f8tPcOn;rYzy<$UEP)xAr;F>WJGr=s2C&-{Mdl6R<VW6uy+dZ*zdR4W<*o9Px_ z8AY;FkF}ALfKeNAEqfOajNRsU2!ksSHZ1(ftgI9(CWJ|czCju3@91#G-$W+iM zJhI$wrO*<>I=Vx0)in#LU?cu9>X>&J7BYX2iSK~*GBa6Bv4((^g9A?jr;{&eA;|Hw zf_M_XCz)uBp%XS3>&OF)LPkQuL(VSi6znHxgm=uVXJ7R?mSDYet7cuv6%IXEi=P!aI%0yie{iF?m6kZb5Bj^ zHvpVL8Wh-DI#%_m{{vkVcQ0bzyIX!><`YVdi8`cb2&w>ujPqlBcso?(9U4Ty8Ii}& z6&50ha4TALj5*yDM_OUx0yP7#vrTbz5^+eBXrwT&WX|DB7hPTB&-8Y7@@@f;5D*f| zgMSlyss;4Y)J}U4VhTTjIGK04b#vG|-;%zDNohTEra84ksYY|#(KY3|`8tX^0zojc zMJ8{-@0&)VH-mIv;iD_DQrOfLpXHnp7TMk2PLLO)ZrlXf{P{I?v^3i@pcZ#k2m{NP z{GTGsRQuI+KT3^wBZ`ytUDU_^S5#aoR)W6S+1Z7(!2DBEQbKq8V9hn5S8I>t$M60S zZ30kBMsGFWLJEppG5cOK#%}XqL}ZxCmphkR7e_OM_szgt^%_u!^B+-*dw+0SjgQ^A zWpwSoGDjIfqrj4OR7#328(vhOI@U2-gXp1xhiT_tzWQ`zs05{-wEcYkO|3N?Of62g zFeWUSF$BK77SpGpwAomcuntl4!T7WzNJU3>sOp_-Ki{3=NkV13>g9#+mvd~cmWH7e z3U|}~*48}&KgJbbYc(k7!PFn9FVwypne}HA<5#5A+ z@2ydP8rEVvLb;MSYjuJ!3aU?$>|xrgZh6mAT9zkG9PRDvL8#7%3+n6rwY0*WT9AT@ zLd{YtsO73w8GT(}zZ+i~>Nc1ts&Nl8g; zzQGeODkmL*^w{~Me*&NyMQcyU#JW~z z^O7ih8MJMk!ln1(qE%5*Zy=RF4HQ9R$3|@qDK>UEjg4%7`Qjj!`Gba2-l;!d_iABL zhgvu$rJ=hgFTqLb622;ebruVlbAJB#QAEwAa{Uih@o|6n_TPvqEZnRNx2P&I67bEe zy?yC68ov4Cu;t?~Ppy*3)A2oZ+~5){4x4Zf$?3g?ZstmzzxPh2jsUp<={s zV!CHMJw1^aaizlY5%0YYoM=2Yyhji}>-}fd_N%wAFV=8TDJ40cSlDeL+1h1w>|kse zm*-E2n~^?FM#O0`ju+$20r&TwYX!VZ-|hwMHtuIOKx_8}t47c^A!H12oKY!!PhUmE z(+b0Z;ZKg6n3#+hVD{qj6=HUUJKo&9lj=m_rtQs<@XE?cpjmU;nr2#u6e(C+@1J}2 z3*c~)V{{+n6a(FmT-Bfh&dA8nuDP4ksoBQoZg}V2i~W)kQeA}cMl~>3C&`qMoRiM> zpUcX)zigoTss<1-d%z z+<)n_bH6e!oS0Z89&LbUz-K@R7nhV27y*aIj*7V6fmb=(k3F%75E*MJg7cnB4X%mG zrh#-sj|RUoQIs7O2wEg7d3ffrh}u6!)~K}A!!NT8PR_;O3FN2|8}+U()lf`1Hx^wI zZxov{liRJO=}9xcgW=&ZwYf{R@#{l??fWP=;_3X(!4&jo@8ZqN`xEYdBoq)`nb=@P zH(4>TRTeGQ|#njt@NS;iiqe3tHxEED)LB!ZlWoOOAJxiskMn^@ss;~wzD%cLDznq zmDPiT0&{tL%?r8_Ptd%HD&miiLw4m7oyR1 z5;@&6KOO$xe0qmx(pBmwF6Dr8OZ^@qqQHMYhcSOP-^WH&lB0hS#f+SlKQ4D*8Qm+!8u=>|9Th@QOCJLr5`q9}Xj zq{sm+wODZ~O3D@+zt|7_j|!A%xB8D7tTb|>*IRdl)ulDx9bQWFE4aJ#@KLG6H{4vDQ=$xV)^e#o(d&7 zr&&I$YhyD>XqXQi5i}*3M?otVaK~NtbhEd&$LJ@#XK5A92$TxxKR6XOp-}@#X&{mP zzxF-PR-(npcrWBrr=g0QAGAS-L~fuvBYi;pp>cKGlKNc?E3t^e8xof31Orq0KIwPt zbxw7Qw_Z?B1o->IGr|jgo&!kWFsSVz8pi*%%>I>eI15OO@Wec|72b=(cOL>U%tboG z8-M-~CV=Wiu2X<6rZSQO%%|T~o=WgGdk(NvMBA3kb*`I^!`Rf%q4=LSQj34;EAGvw-&COp?$qB`*kq0YMc7CU+8t zlItHo&J(xt<%`HoRJKai;)ua0+d#-3E&rm;MF**^%J232(IZUb6Fof!vnl^wFO7-d zG`tl%nrnMqM)#E=r_AmIrsqP-G5tKNmgXVRN53OLukb4rD~jrmjS4K z{c6ZqQETf@bTrX6^(llXf+s{?g@+S+-f7YbcpH`c+)3l7gfU^@QRh(&R>RyKhysgI zoUQYJMxyl@u^!4 z?Dg~X)9Q!(okxSV!m39>-6iH{8&7S1a`hWPaY1lXXH)bbVkme+sCeF(1S4Lg)CAA@ z2p(DIvKooQ4rPWb6eS@KkjDKmFVEWBTUO8Lmq~KP51B#(B4-Y0&j?|`DfO@d7XQH$ z?5|flspU=>RvTv_X_Z3!bKj|&T1(M3_0##b_>hj3R`{;kHZvWPk!hFJn?YFvURcVL z2}l)J0UHF{jVOt}L`5R#cE>UA#@ynfGyK?dv;XU)XBfSUR$oK02fPkE99D|I9Je1$ ze)LFs9-KgxLLJ@piwK#-+pbAGctkVTMrQhU1S5vp(TC%32_EcidV1wkhQSQPdlXeT z!Q+Br-~Are2I{AWYH$Xpf^ecIRY8kSkTs_HR&z3czIXQNgPfeRco-F>8p*qWijxHr$Gasr>9I?<-Hy#sN(u zKwX5CcffPog+07HGc3}_G>WFHG}sQCnY{(HHy|F%+$m!b&Xpi|zifN1Smw$d((i~A za(Y{uu+lHg^}0O?Gk5B#ntDi@09st`&ksRM4SWBSCq5X3{gUTyEebeu2~Rsm><~XZH&H(s^O>BLL4-m2GR;WR1mtw_>Vo4?o#Ktz*id zUKQ4XBP|eYipu~CDJwk&ZLx`_N+r58L*gu2ZAg|hCC5SKDiIVI3bfuF@5m0%6Lx?> zP@-N4tp%9~EfzY-I8Y`+q$hvn8kB6b!g;RliK8|)qbi%13>}_$T&$B_X+VJlDrODE z9QYI%!*@r`k0%{S+86U_uji}x?|l(v1(bGeeVw1H?PaAxc~5)0)ZmBGw+lf})us$F z*cXleiXDimdo=pu#xs2?H67lB8tG>2kj7tkOk0~?7v~2rgo}a$9UYxofYyg7s?S1& zg)eCEzw=R$Yv_|PCn#uXf2#A)eBZ{a`$sIt>wJ%Cg7+cAt|c2=+W}<4(bCcqm(|kI z^SwU!=tAtCg22^D^v;0cEcDKMDe+~!Tb@aLRcf(?0C=yk#YM3-Kf9l^& za_~;6!!?R?G^%YIEOtiQ>FICQL`q`&G~F*MFHK`Nnk3 zPzbVW?CcHFoP1fp!;d7l{@)$yJ12$-d-zxnU91hUAqgIN7wdws-$PlFPezjqMG7QB579>KmIu_{l9TM}UABD^+bmn>{i*+EK`p z`S{th0Ne`L$#?ZxHTn@^-n@PWZSd~Z2oc}Gh~|r~yul9Te?}J$3=EW39Hs{+0__i! ztrXt;rFOg)04?Mj{@0sA>bQGL0%%z_Ierd2sKc3k0^g>hp(2}(JzTZ z!Doqyp3e~!`GcMP9Z&mrFY_qYcnfP@R`Hsn+LVJ2=RU8$b}2m(siUi_{v|&HGO+dV z;L5uUMccFqnf5*{I%{?A98{MwSeU&=b~-w%@Rq$A)xUc^cgqy)4csCqnT4OB-%d%@ z)uN2P75m$MAa9!bv=xu)lev?P+8u@px#OGc3re0WCvaB!1ts=8=<1oiYkAMm%lDrD ztwGOd!G))valTSf%ZVUFZr^j%6mX&Ttiz5UDx!Uk!ayTPv63phek7Vt<@1 zm#+6-(1FW@x+_k3u=6P0qKH|klNc2W_(7VBRcD>HP~N4q!wy)8oay^ho$>`L@&#(Y zUoe7oNO~qvrQcU>Gr8ybJ7iGJ$JqJDuVZ?1g`{N$Is2HHv@*?ozVqoW?QWe1Paasa@ zjXKsi;Uz1$p+)qa$!;xqGklyb@h~KATJQ1|H8nLcq&fVm@H?*|<8iZekkr#b*y_FX z8t+;y)Zx`VH@BD`S|L!p*tt}AV}HHy?{@neff)npay}h=k<-^K)9$WpiZ&Rgai+)K zg1Pe$2DHa#2%8KVCLlP6{{mekAdJhe0e-G zZS4Wb7LRk|=l_!y2@5k(I?Kw-11(Svw*{C4(PBtRvyqK@wA!EIhY!EqvJRx6&VL*^ z`5ftN{*~&~#-&hjLJQl$KZxInic{J03r$Iq(c^m-_p=oqw*?}r_O7&>VScBT{Gk8s z)$iZc8C^n?f?&n4Kh5Dy*tmqy=QZcg4ou-V?3Rx&QV+2vN7ATsbls7-c=4hU9rp%) z+F$6W&eyqzG+!Dj4|vTU_(&tdi%ud@giaSc;x{NvROB^<>{*kvyi%fMA6DBZ&!uGC zV)Q)e>!9uAtm#tixOcy{okNac#g|giJI`vEKX{tzk)2jJ1KcRZIn+RB^;JC$rLld1 z@X^r#^B^wEFCsSr-kJ&>dsX&It41uzARNPBdpTZwK0Ak+$Hg?c?dKn@OScbj1#Nkt zj=r)-@z9D_gVM=flYJtBwKCH5zc;0TZuf@H;^@do^8!H?$qPKYxD{I7KbV!!4lM)` zE-;LMTLFu~6d2h*7ugTH{CSebM}c#gt$)24J;`cdJW(_Oz%$} z*Tp2_aJA(s$p681xJRrlyubeeMM6tR9Hb7$>#YdS;NJ+vm_v_BXcnfr7m7?^rD16( z1nHmM96%JUochH~4QPbZQA~ur3&ASatu)`{OZfC#2(3|`(RbZnkO@`jom<0=kkm;W|HYkRK}qJb-}t$ zO98drol=6oqlMF@yBoFv%ae?N%(G8L(c8&kjWQu4LyutkAP(2pK@VI^~3mz=G1ww$Xk#$Vhx0>uj6OYkLS zG)1y?c^o^)??ay$Wu+dNf4+RGxag)Kz_9zA){n1B1PJ8(B ze)jQ;N2g^zei4!MIu&7#DZUf0yYYkN91W1WmctH)=u~u03nQ0)+TEKsu)AR% z;a3O`LYu2oWSS=}_fGHs4?I0&8a{N5gpw^NsKJ7^OV)Fy-IX89*z7QxLkpnOK;hv1 z9w1F&&ac(g{w8YQsf7jdXLNmEL<5-D`bf2{3E&4yAAxIu(gM43El;2Re#-xVr$DQ* zS$LuA;WtMyL+b2Z`P9U9G^_IWoBdXFvCAiCK4DlS*nYUU5~b9hCzY9xK}}MaW4kqO z1G2v8EH8P-SG2)E4B9uPFKfyom(vk8jM~~-E9aqd`jCE8v|I(WsCybW-&(Rv_D;Tf zi^bFw;Xh?BkN=5jRo`l7Q0YmjI>f|ni%`fv5J(Ga%F3-RvI=ITq?9BY&HLyYH0-{K zpjC21S^KF-qhP!%gh(yq(TU&X-1GV_VMo~Eln*Y)`2N?b@J=W7Q+UvmJqx>aL_xv+ z8Ciqwu(*8lP5Y=r=61dP;f@*|uMR&C)llKF=EWW)I>deXU@Of2O8gQW{HwNxywC=x zCnc>S&D6aWcyHBn46k?2)w*V-rZQH~mN14F(y@V(kNvT}9&Y;g@87O#s?mq-jO2)o z^!10h-oAZ()BYukzyLr?eBO@%8x+d^xe5fPhQ2ztyZLE5yx>~)_WVN8^8a?vzR|`4 zWl)Uq-k*oZv_amZ{bmjRh`|gXIkbN3YvNbl>aaNoR|}t4-%-yXXx^}W5mj3E`0;x0 zMTVZ2XcUhnu)TwNF*L2>e{iP8gZ!uG;2{GJVRIM&7(w~jTfof7mUZcsV(R~$=b`1CRNdk9U1|I@N z2tgeOZVIRd8yi~#T6NsTxwq6adj-f3TOfT$Gi?gv9~z~OH^8!>Qo^iMP%sd_=|!$h z1``$`WE#zb`_-%S>i=T$WuC9rSMh{*qC!66^vp+lO+rB_5}KUs`!9p$64q@)H@k>2 z%|6rR6w7T;x({5mG?(=r$6x1 zB$XdK7-(Wl*Y4L!eV|JARdiF6Y6d9#D-canMGxXUg|!52$KqLXA%|f=T{dfS+#1h zdm?$|F%W@6hs2gn`$IiMHhawW?R5Kla-E%JipSj1H*c!oc@_d@L}KNqb5^iR@bQh! zyQd!u%HXWCwE1Cd1?q`!{j0#}{+A;oEOER>4}krkDJ%>aKs>L;6M#zlO9{FfbRDl= zzeaLx#MfA{k-M8;|9>E}B&VW+MMa{Uu6NH4ed4s@l`uB|SrqqKn3!Jm!3*nm?V8Jn zmkysVtopTt9IjZop%`NG3$H%@pT+K%lAysIFOtQ$cP?cu~nL#da1SDJ`k>&>kKQff}BrczWj>1N8G{^ zl5w{(AHI((3v=7E z-{t)&QjC<|J$_>INj2hFVvcZT?(7j zExthb$WNl1xSg9@-SZ?Y=v4odZNc{yw57)BNx}-6>f?V!m<|i`4Y6q${yGGYVqbfE z9Yn3FhrB1X!t>gaj~36Z3?unxlBYAv8BNm25zOSFhm45E%EEGc`{1zrE&hhM{q7 zVIF;Zw)i5XDTvflu&A`4CV6>0`D@AVK?)7sEfhuW^@XE)Y25<1Y=3~?Vqy?T_y=<* zy3ftcO;QpP@F9!XSU^Z-1HrXL%o##(dVR(qXE;zuy7$Ec+6_@N7Xy9$Y7x4FgU!?| zQZ{%WhEgF5eCxFK!}e?9d42^YC6HJ}8JZdzxEyeVSZhfZ7GnD(Ppt^~l0@4X=(q4? zvJZ9I{O{p&jKg%KIlFj^M`QI|FVDF#t!F!Z>T&y{u4d)r?EUmE?-KmIYNxs$>%PQQ zYH5eSiZlq_*brW+Lx5L+Tg<#IP|E%A=FR*k@T%B?Hb9GS^eeb;#-Q0#!U~C@MX_$X zOs-Y`+$Cdl(b*-;@2StERxLZ7iBO7Bs&96ASH<^NQAzhydP=`*P104~~m1%gxx(oqxYS(f=D^yw5(yaPl;e zGaN*fm;9RD5!qpFHvRR1q^;NKg>*-u`CA*r!#4oo?Eb)2z1r$xhvR^|fgTP}Xn6Xd z55opo8L?fL7NHKpAv0%u_@9D(S5xRq0COGJa?wS6f4zJ7*7qz|<@0jMkt=e}g9OPY znkC)C<-M54Ad1KA0@LR5Oe&Jbz;?f0xYv9b!(Idxc z_U`@h>leuMAl$0M8cf`yK5#logrr;_$ekV!XS|aT7Z)~?`Wjt8C-=Vf35YM~4%}-L z4_(DChE*s@?_NV?yP#CeeLCw6Una1bpD#9-#MW*ATy+X2Xe(Gi30>R%6vq~ymRB+!+i4ZRLp z3C;7Igs@H>AenvD1&1wW~*JL;rx5Vwd-67M1ZA==v7uV6nk?Hj1;!GNi&Br~SvYVfhO}~_kragYqnA|io7e(PZ zz~cG1-_WxB-W$e>(uDTKhfm%XXIstCXO)BCzu9u3ElaPL?8$<2@=%nn${&fWJ#Ggd z?r9u0CsU9Jk1Yair$01P>v}|oZSvx0yjpouwnQ1ec)AGo|FtejyfKfq&FwwE!6M_7 zgvQP$LB={;pS#2O7^peqQBd7s;E~5g2){F=tnRXx&4F<*arAXE_4B55LrhEAO-)S^ z5d{4?R4Z^qYH;r3kK;VUb)G8814HE*#OIcR{^&voA$EMtbgV5ybebmHVC8i#;*n{2 z8drq+B1V+wdds?T_m`bcglX^i({=0k{ZVSBsnhH#!8uXvrS^I*6cM-c` zfHdIW_p7Qvd!pqw`k3=r!~82;0e{8Z-fy;9g{(66z!#%&^;KjpZ)@ z7H2g14A_q{N@~0o6aAk}NT%{-aWQ}0zT8a4Yx+Dds@{Re#(QFZ*ZjC_%8T)o7tDkD zzpp{MR#&GG&S8Ii%Y`oV4^fGH)N3cExF#EQCqkwY-vN^XW!`YT@T_P?B6?~*^#KRQ z?0vgUoHq3&hqD4V*YwSfWH)sEx@9%QpR}*q_`1Ya)T7H1!Z&XKY`Tkt zCkgb;@xO?Rc#Xw|L>&#?-Q9pn^VR7*%P&!-xK==5gty6rlpZ8kyJ0k@qsA#Y1mnnlXA_y-U|t()xw6pdcwvvYWPRZTBrn;mo+49QICQ zx$2p7ELkIDI>B>1ir5&=J)(TE`NDMoMgOpk&q++Whwy6W+tM&B$=j1qL^XuiSwC@M z-VK`UD&A;+KlT7Ca5@{-JDdAYBU0L-ILA<*_BT5BhG);j<_rH5b4W@|9zy?WRSU~K z$zCjvwI}lj_r`J;zxu)hmJ!hI0~AblL3;A>!{?kNDn;i;J79N@h1THO(LE z{|=?G$6NvR&5k!$iv?BNTFG2vPdQZ%dFlzeIf;Fk%z5EEX!z=Bo|Y+5T1>J`=C3Fk zTK4Z<`w#C}pSxucG^c7QLF=%~OgYW{!8h|mIZLV4NjdaVB|DMbeQAgNa@#G-Yds%A zhV6Oulq7rKvzadT>HHbUD3NxfMsytuPJo)G957P@$8H&yo_-RbInOWqh>M&l5?~h8 z=R5`wl7(R{x?$(dgn#p>$+_P_a|ZqnpME_^uhFOs$x+Zw^B#A<~14iuY|uU&bEtpld{owHIa}yS?0*xY~b{-NN{XB^GMMy~x9{lS|9R~ungKXuOM-PNYQAMvfEjt*nF$Pd+> zAF2aROi%0k0)IVrS}!nmf&!Twm`9XP_t+QF(;_{Q0x)^JhIZX;V*KS?{IXn7;~~dkA~K z(DLc1%$D7`wzO=$qr}M&ytK3ZZAV3*CUQ@6M8Z4=+b+R{_c6~VppDsX<=S3lqM3Ji zWGTLHxtoFW6K2c51BrpeImEi9?d{j0T&l;4+)FMlH|34VRCc~|?MQRbw8}(=kcqMG zV|wnJ2UK_X#jhucShx7K#x!k%`Zec0k`ZM;ojn~kPK3>vSd>cBO~qnpy*YU6#cG6P zv#DgXm4^7dTyx~(-K4+Sd}uP|v`@F&el+p?QO;Da^znxH?UQLHO}n`sSUaireIQ!* z+||dLGr#UoqJC|t=VZt46XKcf*BWU2rM4KZSM}R*U0;0}^!I6y=H6mKGO67%%~r?! z3%>w3WAGI}CrPqww_EmS(7)lJHlN~lVo$EWBX86g-!xh-q`v~?eFp^z4X^3%*3QmO z$-wV%+{wvd#koh-qL-<)cfBAonLMaw$S!KpDG)tKwl(>GOnqfkmEG1h-Q6H1UD6=k zE#2KID6Moi(%qfXAOeDPw}f;{cZ0;Yc;0i)^Nryc`a@u|_qykr^O{#wo%LWVmHy%Tey&}Mq;PjO$&C)D%VyPiT=4nI==lmzaRV9sP{;m~I!y(p zD3keBfrlA=xWL>|+Tmtj2-3e5AZB0qmvbHlbDAhWsanB_tbydGFq^{$ppF3eK%#$- zdwW2>Tn3^B8FVzAP>QN5-EZz7SM=)f_30P>KHSWA&p;`P`~gAm@W1-T5#NLg(3? z;7Etkd;pB?N5`A!m?5jAHlGK# zMBZY@vb7~3|3eVSU^VG-fVNT@DD~zUR-^;_FVnD zB91N?#1D1ov*akUqGjaG6$SuTTrGV^SdqwIeh^f2HMB_hGk#F{t<+7MDEOF{sZbDL z(TWnrH5Y}p1u>p`eu|q8#p(*sp`C2ckKpXBQA55dEdjGCxaNta(PW@;Owg301g?6% zb8@$k&lF!YLb$d9l+diDy@o*39USOVXlNv>)7Rdo_cPT#R~^vkek!1hjoE|bP%T4u z>IJrP^jsNtNM883%a=y6Z!C7NgE_v~y4w_myRS-xE;FqxHzM~m1t<|oG$vu_$3C^oYyvpb7 zh=_=Tsvl^{s;mS8hD1G-SKyesffd}@eNUX^kKG za7y7Ni5f1ja|Y_ zhK%s~!)OE{iBvoWWybikVN~P)+a*e2(DX1Er}mi0osv%F+~>=ONqDlxUaleTlDJ z^)W=~OQ8hT|KY=knGeA%UXU2OoTekqYXQg(TXd=r>)=(u*Yvmf0Naqj?=iE!AfX*{ zKxLDz56FA|+COdEpKkH2;55)30nFLw=Ev$wB!EHe96hOPsWLG`8`Rn&87QB%LIDAj zcfQXzzCf4Cn!SBnUtYeSZd=uvaPQ_>7H7=v4`=e^0}3PAQVb&4LfHw-lew)yrY_Wc z@Hq`6TMGv#k)eYYB^zAx&;7m+@F=9Id;oI!yR;*8Q>NsNgl?-S_`E(OYa}|4kmQf) zktjN;mUX8n^ZLeECc+fymFEbWsl)~J$CvhHjAsN0KFBNuD&{9|@5u?0Un)jArymB* z8Q{T5`_|2QN=m}&3OUddqqPH5uo~mqPSBpmI8mArAxwrq_zQzmZ8E=kDS}Mi5#xPm z22TGUu;G_F4cgeMWlg@D{r(eH4o-4yJJ^ZW`?W}^7A=k6Cu>Nc)wq3S-+J~H^g^#z zZ~LrGJ@c2RWgyXj#>>xj((fmb%qeAXqke!YLDw(LF5)==D#XY3=bPuHW6?vRN_YgA zEojw`i;bvO%L@x~tgM(9AdjpW$zI#O}4*k!duV?^GerH7_ zEzI_&&Dr?#!}!a92TY(;gnVy4`@%mk+D){eO-sCa*p(LU3fvE;%@&y{pi-$R@Kw&s zJe$5t@x8-8jFf^Xm=g_r`RsfFP`a*19K%0@^75H#lVPsczKkrO6H5u1-SiLZXC{rK z6$#WP!5cpDx#6Fiz&CK2bg1n#nFa~9`mQq?sUe7v7u)Sm2kkG>IPhoSY2Xmpb)=eu zswk)i=U#gRQObjlT$*<;cbDwrawii^VdwGw@iAJkSfWkrFWc_cyw;0UrNKWo#n|0_ zgsWSLeutAZU6z&{X?9WsnS1ICS))B>XUaU8@?j%nguK~|T1hx9a9`hT@NYx%m+{k` z(o@%xt2BBv@Kxjd>>WX(Z@`Pl+JuSWDpa(c2Lf*az)-&JnFL$^B&;Fft7)~Ihb>xU zzX=kIfv6ts!zJf&SZtx2C1-7Xt$DByC_|!CWNH)$V2i1CAk4of1^4$fy(T;{kgK#v zw`9eMAlQ;>U%fo6v4N^Qpjs*yzw{uEMc(396^!_69>@Fp?`>_nqk$np z8xVT}cun=tj8+IWyrn$f-)Hx8EkLzYkrW$r-%c{15;;z>b(8=hD1iahXI8x$atp=JVX_*0Nlm*`Nf9(Y<6}u%8l&*g2AP ztiBR%yHn1uSZwU%4~V;+?4+sZAvEXHo=!e23KwB^SHUBj(Ik944M7`nDB2K3iWsQy z*A82t$G46H2RE>Ej9p|AiEFjan#Ch$x3VLeQA0>=aX)_I7lBHANP5ECrjlse|}tj z7OcS-xdy$q6KDhg?S#&)MF30_;Ce>j4vv?`%!>jtxucw?y&RDcurh{Oh*~o&#?P61 zvaN2DN+FgzX#srz_ydUdcOae>tv7nJKRNWEZWxp&rrCLhIVv|HApmKcr*FD@fF7o6 zjkosqs9VLRdxZ2IfHwW!yB*4DC7fz@uK80#OrWC-minK6?WH^ z-??AbH+6yg1jMH9Tvl$N!~jWsVxg!cUs+9->7JaEwOmvE`Tn?eDo2%_E^?UFZn}+i z1oGZJTXDxW=0&icyj!<=sF?seVlGW3>6`Y%jodJO5$cDIM8Vc8?FmFR`hg>+J?6Ko zb%;xu-Hm_MW_Lu@$+Iin)z#Ec)9RI_YDD%d?J%j-5-X`B@wiHjRfSM9^XxBY_E>n_F%T*w+WqFV4)svU>sV zFFY1Q0V1?}2R{t%doYlRRFTuoJx=e^A0Z~OS9#@+7b4uh>qgQCp5hPuUSSpM@TX%KW(H!6-V+Hc>a6+L5Q;RLaZE`?aHo=Yql z!qo1GW$k7Acse#S4Gmo7Q&3cL0AQ(2CvJ=zjil{4%Jq8sAc?8yG+JNOC47x z&nDz`1?8D{@@}Av1gjz5!S+4#h88EDg4M5L6TZiCVv%_LX?tapn=bhzI_q81oIFp| z7;*OIgd{Qv+4B9LELdxVlDgiJ6B(c#x0xZCq zTQ>M@AvBy%z8^lkDK>Fm?lNa0J$IK#slZVWV;h@q0M$D zdzt_5y+{3?d{sfNOLk!bqV^1wj7#-LqM8y&-x`D-2UfOY=nDbJvweXKS&0vflx@z% z(pP;6KMmd>&DGWxyE%F5)UJ}dyf(^Q)IZ0dFGD(o8%dDYJEN-kHDrE7654X}J+wod z8Zu#)OQKzId786*RS)YD7ym9Y5{mWAmA|0yKBA3*JN^KN;S;B2D5m8fB{BJXWSNoA zQg4NCnjxxAH{T9?-FDF!rIV9apPV?3f$)JL8)B|?S2B1KZ*qX8h`-QmeDD9TCN;t7 zNRCN9t5kwD{VqA0@pmHk4`GgJbv}DjzA$dN48J}+lm3)4Mdj-OMu?$C?pyx&Tzk{}0 zT3LDYyZwo)nf{c=5b)p-sx!`5+dzkTrp$~Ar+S7FhGvI*N+dc(+olvzeBUb7VNc|P zeOPkW`#pX9>#KC`fdcjYk(%Bgp0?|kdf!2xl&D^TL-o`!b&dcU=(FZ@5g=4D~~`vRsW;@J?4wWO-Mr9 zqy$BdzPTKb&v&x6z{UKbgwJ*1sE zoUsipEgm2xrW^9LG7K@)G!Po`|52fm+aq&J?-!P<3S;jfaR*LGxi}6ua=5RmD=LWV zRcgkPR6`s+TdaW5{V5Q=`+$#=E}mrp9mzZcCy!+aY0e8QY0JyY!D8y?Pa%dXz&W{i z8G>nr&cZ=2hgSqyngRT3s^INj^6q_ayUBpBS7f9AuL4pgu;d?GQK```BF}rX4Rmg` z_4Ns1k4+S>UI6+?*J9*xQ2~*`BM9g~`RKSeQP!Lhp@)Uxo0gi>i7*mM?~>rw2UXN) z?T%lyl(gQO2lo9=hJQZ09t-~22$TlY&Ra)XygS>zEH@fC`}MDZKX{BkQU4L*zf zEz@7hCq{&Iy^ZynW1^v^P${rpeKv2<^{x*_ua=8gdEE7gl3=GJsOsa~_~PWO>NKAb z2MjaaS@J1fRS=yL%@jTTq7c_m^z3;`E~t&-U(k(_+K^>49NFRG^hFHDC;Wp4kSr0U zEr>$2A5JrY6Sf07oyp9DAoBn6SM&jZ=xB-ygl@SDWt3^8F;(z%dc&-n_<(hN+40hUAA< z#R(cp!7rwdt|YL@IH44MqCThNqs*qi#KU8xr%wZ$7r#%J>mMCiwg0?;JIYWH2F6q$ z%jVcIE#2MS4Gc(5(Gg%M#JtV$JA@y?p@r(jUZcA=9H*7yWd1HvEv*A18dUs?1+Esx4Ka2s6?c4C!mKK1#9K1*7Knk1A1a1#eLAv ztDUEbO+W#c{1=~!sKA>VIRIAzPn?)PDmBL`MAfb5NbeyPHu58x`Ib8)|9Rkv)F>jq z{`jF62YtxWdMb9K<|MQ3-U1B08Et2@@a8r9Ui1CERd`Q`**kU(-%VVD__2@@W#ilp&HiK#&Md%Nmp7kP zoHiWgA$5_KSsPo>PR*P1eXi44x4=w_m$Nb(?$5jQP~+8<8M*)%E}&4Oe8`;E&-emBk}%piy!XVl&y5_4a*I$R_RO4A)}9i;9l zvRp1(jpW;p+5$z5BcEHoR`BES|9U0)BRGq! zvvB&T$CHyLN;_I?g0CoC326**pr_X4a{{2x@VPShVcmQNeW83b9D z^Ih&i26~!w=^qcG8$L;Q`m+(YSp0yCX;#uFw0^U|ei=!mROneiZzsp!d={FoR6tEI zk_U}0Ntpzx`4`$)Zfy`DXt*a~-WsX_PN+_jcbnf#Cy_&p@0eW&$CW#7s2HXTkz-+~ zBxhjVXm&`Ow`3K8HuiJ(RzMx_Y|N-~_bN8r;usEC*~c={nb6WT-(T1xiKI8>EM|Ai zRMm8IL{9ykocj@hHij6R0eu;ti47&^i)_%wP|wDowg9G*9}Bzpq>Dfj?=n77w28i? zgQ1$MKoXY)4CUy-YJ;%6BenE+kRMYEipeYA0g*6D2-Kfokx5<)fTYwt-!pt)NR$FY zcZgR=nI|R|t24rq|H|M0nbV zb;Hcv5&E$Iw1zS^V95$74*8jO1%qu8O902>uX80B5@H=4#U`ozIMaqC5(vqOw z85(ipKpy-Ul=pJW2kP_TTF{Gk@@KNgI^tTcG5a@2P)yeuxh`yW>V0yevU>%mt5~BO z(i-QXJ3ZEM1lfbyWnWOIyTeO@SrmfM7|;kHtJk?21Vl^m$B8~aCGJ~OP_B~CCGue9 zl(LK8z_b!2f8HoF{hX)WQb4<~lCY1|O95JowBBE)wWiMZJwp+>>xrtGt>q$jdUv0p ztG*B^Hc7ivD4Hxd;ady*5j{Z=)&DBztxfA{jB?l(hkvA%K0O2k=Gl zz4~ed^qzcse3@IJAaC{>lyOHBKj=xc62Q#`R9qn0*VNJqgewbW{qv@mv+YaAC%QMU zi8vaC^?zc#%*3^0a-GHc?LOXgII3H_xB`6A94=5ws-h_Des0`ZmrZakWxp(NPWP{H zJI|6tzmw3a#YXxExIqnD7;o4nLW_=t!dCxn3n}}$AQI~TM(lC1W-TUU^TTp&!MeF# zj)sms!p?6;$UKYw`1$2G%kVKlo&M!AuBA!1?!lkmfndE9SOu0(&;Gvyb`8sPgL>-V z3n}_o+?hnuwLHWsiBIU{vXND`>BQq0x^dDNiG#2ehkf91k`rk}$E?Dr{XeCT_=;|Y zpv(JZcp0{lA1gu%ZhMrLQ@;MgT8)k)V!)oIU;$$k?txQ5E!KsVQ$XQoh!q|Toj^A% zZuZk$@0`fPwQOAY6hUJT8s%Q$;mbDb_4k{$)}kVo^!O&mTDjkHP*ScoxrH)8<;yMY z{K@jt*!jM8`oG*}_m$vTp<;OEkvGfaB`5xdTTC&$a~dPfbk#DdVnAHY z%kMPCppzlw2Q1FFz)eSA*lqi0srdrXZu<*tvT^X)|5*>I?(go-frbWky{xK=6!bmT zv-v6IoyKQF!{awWdh9xjd2pSi#fFFYW0{#>B`gbT>IlWBXnv<~&n9p6J;l<>xdy){ zbSxokhm9Y!Eb^uQ6(_4fYA@7Q@!`bwXuhtxp2t{`Pz%YNOY&ZHk}OHUm@N6v`!IEP zOIG9PuS}|Neby>juM-vXq4ATNNi?UMH3x58Nt8492c-tpldusRYz9@rLixH$+G_1I z2R;2h;53HyP#R$t1`D%NhO+2lJ#%6<%uct~;o`!#LRP18bB+%Z`%+~eqtW_jS-Z9z zch3Hb_=R1|>TLd7-{09S=-~?1B6Cdl2incgCqq3Yo{z&?=sVL%M%2|k&)$>ae19`&Z(5rD*2YkvkqN<4{apfEoVmMoW&_<@V_)PP$v81*+6}%DnWKmJxM!x zNAJSSrH-4!U)x&5VcHDUWDNCJ)OFJhg}1bNfQ7FZ&;6Unos;^qL@xz}{s zalb+fHGw8`cF(eRuBcbNoM-{NKNbK3gSXfWczJ>i%HIBdME@p^dsynk;Q8JY@xv^9 zP9k%#k@-KJN7&4){o<<)I%fKpRl{g_oY&RnY)AIeo9>hw>DR zmvIf1Ec`rL0EH+KD^GCQYv=`K(2-d{h8I?;wx)2%oP@bdUau2ZO@U9^k9&gE7h)7- zjG6WdarvIauO!;{T!&DA0vSO^G@|m0X<|A3!^ocEipnLo4UbZz43l)M%hrNk{eF9_9?tm?I;T+q3Na*ZRnES_HBzwK4qb6_HQ zXIa{zvL|UMlIzY#v34mHZ{V$xsMOsQGR*wL4v17dZw}pUJ>Su&G~X@}oqeE7jw4jS znH>K80xnfn3U14YF|B>E&lhq;395)`ke>n(_xE6-D)e*~1H4px0U;j5IrZ)UZsLnh z+=iA;FWgId20c^}#a5t*Jq@MmD_8+km6e4@CjPURrWX{w+ zj#dh~&{t^Cfp_`{iaqYSS~c1fNl`RYgX+lviBuf74fJmEajUtGj-P}^WQ{oIv1N_F z#ru6eYyMV1m;<-}j*7#3GEw_&I)qh3ArwV&5dpEKj(fK_hA#7dc>IBXS$d0fPYq(~ z4E595Oz$7jY7a4UF-(Pc3NDF{!h>IM!;6%W*De}(xE2X9-x9m-couA%mTE&?OiQTR zz5WBE6_+hf8&0MXR;*GY2g{{_cWJ=p3$?xTqmn^``e*OXY=OE86CD921{Y2Y4P?;J zNO)35@8oG~K1$ZOgsUXp70Rx!0M!A5)7(CMq5%_gsKonpZg4-7J>T|&HTlWS&%evo zoOKryld|7L^(jO7D0%qzqVY(U`1tswnl0===DJiN0fG*bqlUW78(<3Ex^r~&0*K!B zh*y38{+1{z0EIq{DvCqhJS-ioiPxQU!JV$4Fbbx@zIF4L*&Q%+vSTjCaK@)puJMEA zqpnM{g)X$mA2 zoApH)$yq>Oxoz{`ffgc7)?C=<_GuTrMKN@4{9#dqMnz)C04nN1$kEER>`?BauWkp?px8p z2|xpYm|0gx$A)eiU!gFby;t%W=DZ&nxzX5q1EJdN!AH1Ce}X(X(3IS~HWOcX^Y=e^3hcCQG{V3x7gn-Vf!cVKV}UiTTT1(e)eF zww${WtEc!bs~PPRQ=A=uK$d zycZ2tU6TZZBw>=~r_oBf>zQO&n(0KGRw4-Ykj=8|JT-V7DCH?_A3uDrrH#~* z*V8;^!W!gkay0#Lb`?1$IujGe_*G!Hl8(jpXx9r!icXp~(e&B3pkdym07ryz($#tV ze)`WLSoTMJVr2-EPHzt8yvt3F<6i};R&!v~Y14K^jaANaDxgty|HE~v%Ph4sw~lst zBOoHVZ=+E&(TvRiMxsl?IikZ`pzr_&35|gJ3TAI5;m1or@1dM@qjL2!LqIjCr)HRA zKc!KoC4NW4UcSv@Pj^FD{F@BJY*rps(_XipBO)s)OM0q~tn^Q9?T^%b6?MjxUj~G+ z&1>puc)ZZv1!V<`P5V+Tr%DV7mCRR4rOdpwZmh*s8cA#YJLWFx=V`A(3f_5g!oPhF z>BO9>X`r`le-I9ZCb}1LhK5Cm)596pfiq z$Tt1?{zv@UqX?wHgk_)7SL9KAF*LvY27l%I^cNJDISFj;of9tH1*%*i9BEqA-qaN# zXWw<-gMI6EAbh8%Hd+bCw>*Hv!n2ZU;r7t1tW4!0%^lxpfBBWJ;dFu{1sUs=VfGI& z*lUVPJ69G>&F4X0D6^a&Xf(@g9NxDOe^gn!qHGQX(J!kCMh3sg_tMg#1oi$|gAi*4 z_!aIG{te#2S7eurGZsFC%Mu+Gx3!e-bvwsp9L!=SyZRlEKJI-G!eT&9|E=$)C|P?# zMUqS*R3b0sc1W$X7ap78(kJ1(5ahH!uy>lxw_j7zB3;RJwh@{?ZT=>5ma4;le1N7EDw%CrD40U5nA&SMo95pTT8;&${yhXkK~0o|KA0Yjt(17u6m83$j)TrGN@jnZm5%xH?^F>KIj2??3S5#d zQVxl{u;*SzY$8oXKBGT8Qz79a*y4AF;Ee10Ub%lYx)oQlw=YR-$P4CYTjK~=!ER8z zC{3sz9FNxjJ*aMZu|m1`MbJ!4QZoGHix6#6O9&~g&BEj8pp=aSR+=?MmV9LEDZ8lG zEXlZ3f`O8PIOFvzY+E^reN2ru2VDc%j(3|V-Dime{d=ZeVD2qW7|L}C81syJy~A^{ z+~$kCJ(a1-~d86eV7IO5vvh0uMQSj!EzZ>B$3-<57{qgUNi=eAJpj!^q=1G(9 z+jP|TE4GQYoWO>D{SOO?3D4Foa%o28!)3v5r*{hx>&SASW!uN8jfuFzlWkK*muH9; z+N_i~iN4iAkw6=6w)U~FKNF%-@zhe{N(xfG)5yb&QP=Fg(oMvnGF@-|_QUMpiCGfP z+tKt#n8R*Mztz4^wal=hC?{%MkJ3$s>CZAx6azOPOiP_O7r#>MJY&3LaP^QZFCem? z&j}WT%NZ=f!x8-SA=8p7JDTcOoHo*0sPN`3W}K@z@${FZTBlmYPzlQSPU+HpFz4aX zxwyR)bhZj&i8`d|M}{5roV&i&nMEj_>$mN;KS z3+FGCA?jRt%k1~R^)rkXkZtVRd=gA#42<*PvtzmiU+AF0{*f_G#`q5K23uPA;KcqJ zt3lT<3%Tx?M=qNX@aKrJa&X~257u5Jjc0*uhm5#}qeXc2KngMb>1g@;FA~@~jL6A! z^yivMx6y>AICc}CI2T^YZnaFgt5+Y>quhm0Q}dAPCW-nTs&CKfTcp`gP~p*kUZqiRP$`O1 z=_orXM>(JE>&A_j(j)Wi9&oPsck|$?iQ*Et{_&rh#&Y0;7+Z13zmws~h>0Om(!s=( zR^Jl52qWk7aHS^_K`c#*p28A0;owKVA{M|pjx6pvlV`}fc54{f^-w!#`3W%RcXmr0 z7DI^u=3ob<{pHa!tyM(Di#Dv0gZ3BUL5bw9^-(hIUxBVIWVJFWgBFo666$4OpUL0% zQ&m&P=u)kTbja1=)myoGLr};P@8fB|6Sq>zvG}R!bxdVVeemkYG%N)lD|vw_QcRjs z%4um!cR0#G(MQHvzpU+_u{1xmMGA+p(_R~wSzVM-GTEHzv3mz3DQ&Q##Fhsjs-P9G zL$*m^m;ItRiRBE&P7^NLZk5%57}mzh_+HPxDJFzchER>v5=ISM7&naBpMW*UAYs{S zE)|4>8Jgm#I*y-dw|@KG{-5oGCiAqp(X zIwVECvsG+7b^kUV9>AbR@RW5me=Sg<#tNUjoR?AoV%Z3xInr@p1~xo2^wNF)-_fRJ zmUB`Fv9z4VG^)X4ngl5wRby3!c%i-3wiHLAAKX>kYsaG~DIi85e#Jg+=r_E@h!vow zmP|Mp4iE}Vjas5#qgIYh8ZU%@AAxkDFDIz^)5#*%40RC#ogr{Zjk3nk7b^VWmVMH7 zYQpa=PEFx}6`pJ(CMRXvdvd|tDEd3;8@lZ;~Q&g_JR z`i#JCei#u$U?~?)T-m|Xuc7GD+1V8~pffi6nUa?X9F0G~1c99)u|he)zePdDdM9Yq zuabA@Ta6rO&w==HBm7pf-gf`pE0<-nArrgkJqG%2%DOK8W%3Whq-+}{A1o9!c&lr> zvbB%7ACM2XTxecJha*tz$@{WM5T0{p$XJ<$+o={?j&BolKSKW~^<+XlPCzM)G^?|o z&X6%y(&R@#Efz2y?~%13HONdcwI-*ooIAPl?4|qp^b|ox8U^!cIZ-{Gc-OD!oIfXQ zs$Fn%*pE@2r%*wkt!!|p$e(s|KL1D^@5?K8gdSCv-}BwPk0)QezUiY?=>TgRpmQf- z^SfxTT)P2D@8t4wlmad;E|}pX3%>mCiInT@?X6+2ucI`l!U7Zr;!$1gro22zMw$)8 z7<@gME2;Q9QI~QVbLNCJwOL`-ltWMJJJcC_BE#;$6LW-ENcw4Ye07{JHVqeN^44y- z%uZmC3+xNI;@1wzSJcx$Ib6C_VSpw!W%^~SGymHCCeb)s@Kh!y7O0XlwKBzl=G zWKK1mAK3%-FUTOgM!{De;UBhO{&amrFA?*P;-C5|!M$cQI+Eq_*F_eFGOK@|0oqXW){Aii(O7 z^q=xlk)Uc|0I(QYCcMD17t`?^1FQahooLR;q&#{#7o&gx+L%$n}F z)Ww$3E6pNd!S`d8bWoBJn0DTI4isrY3dc8T92rFA!;z?{G@oXbKYXSm;x$$}iy%g6 z`F)w1uGoC4&dXQDn$eVgAdxO>3AdgJELdy5l-nW&@46IG5hUw%K#xjy>7f%J?S@NX z?==uKOTT{a)J=|?a)YIJco;=yeZq+52ESqcTm0n-iQ_5*p1BH_#lKerOz z9fzOoj(v6UYy0Ljk_DG={#zK$#CDk9s1rgtRhUT?RI{bH#6GCzNu*bC2CDm=b8Pb6 zi6swLSE=48PFgB-pSqn#Nl&_p+fC7|x_#UnhclKY*>9zF^u={7duW;z}u!Ag_h=6n==2VMy-XBcu^c z+AjYB9`aQH7hQc|hYtFh+Qd77I1gX@clJg-M2XXEJ2d%WS?ArVNfLb@4`kOu-9$!4 zJVP^WN+96v-n4s}yyo#7jEWt>r7%IiQ%%bIRfk@sdE?Nueh!I8+>P*srw++Ywpdvm z(PM91zjp3XPr^Uazx4fUxgBomNCKV;j}8kWOd{${@?46^41^e*^pB2?Z0R3mWf6Zm zm3NSwCTN}o0LgAur0F!R9|zw zZexKwCKwe%l)_CZLayUzKab&=>k6aCnWL>7dZo0tIwN0f);4Y7B(ZkusJIn7 zb<_VH_D`mFC`C)da2kLnmB$H8$y2V92ydLipG53P7$>UULd=kJI?X;@j}djXIE)o! zs#LiqbRA37yg^7|#*Jj6!*|HvRsQS8JV8XWRKaD=sy))fV9WtwsGy)=V?*DTm&-&y zC*$tUOOr{|>19XE0a}fk$2j!AdnGwPfraLz=_C&j`RJY!RI;1D<2NMX=wP|7b3M@1 zr{u{3ag9KdheO--zsZYF=kD(m;>@w&pxK#vCEv%%V^ zq-3Y8B>R54L}+Gi&U)KOBU4l5D+ru>+YyzT3S|EO$Zh!kzk_Bs3M7vKh#>mMBsBwo ziNFi*31}w^vbU8}yVE9XwjBw8Y^o3z=#*d7>`z_DECR*zsOhj>D!%HbVit5KtHxnO zho8G>xuFJv_Q;~7YIPQiI#B}6;P(7)L|E1Y#lO&BC~JwFatk42MSmr>yhND>30#o= zFD{ZGD<0VHzUW=6eIE}rG&CB&=A7DKEsO)pffe6p?|l|v>!Uicx2t6ZaJ2vH?4t?+ z83AJr=sH1?bK0mSu<2#cLnU*agafZD%vW-*{L;@o}{A}~1tObf(du?XUgZw~8SAh5oQ zayFE?LmQB3jGq1&`D}CK&@(VVLB81Ttv(&CW_z8>68&%+B5B|9`ew!{}(dcdnXt0|Cw9SGLL2@?8Esc{a0x^&opga$5Wea)&r9YH9I5hkkC&~kC z);ce_eWV_{d0?rM-}yp>ebGvTCg$IszeJn$E%*XJ;{H7~6)60prA1d)cMKS^5EPS% z%%LDOx`K}r5Q~(Q_iz3JNG=+%svHvsXSFNPLl7N{MzRH8TO9Q)m$hHk<>goxz$mBK)$0R*oUTBN8nFi0M4E5@uch#ag_vJM-Zp5$Z*7`7^kinLb< z3K&RuxVUeC3Y5<6?oW!Are^lsFy_D0ha-a2KG3FtH`w=y_6`x3aH$ADo1p&!!O(0d zo9byPtX>6^bk}ttt^u$Hv6E{lq&Yy>fX)f@M^5dl<1?K^oB35^pjP+**M(Kz=SK+& z(JJBIBoY-u9Gc%*OTXGs6gDHk5?cp6zknLW{PT7LL& z?yZIr*_^F>P2e*d*yx6T~# zFPx55Ea2P{T>uB^6`<+{CFKTSao5OA~ z1niL=zmk*C%xTeO2KI zmgeC9A+xkP0Gzv8?>idPju$K%SQFdW*-<$s2UwwS^ADE7vO%5J$O({w?cFobp&HXk z7pU~hg;)rHN&@QKW5}zIfTH`Td`?!UU9yQJS2C5`^O^;| z`B^z5BJ=`MhZHMIr$6vA0L8XI;{BeBZk!EO=FfuZ zjA_JL8DCYLsF$5tePLlxKhppAbuR-6pTWir^M59jm%sk^`@K}5|9w_3z{tNZ_~p9t zkNwZh@$#2doC`D5?BH&qMAT{=8DQP$#@~wJA@<0}kq}hV0HK6Ist;sSHuNKTf0locPv#sS^=vxIuW`^P#pfRx6Yf~= z$q=Iz3ez)UvZY=maZH(Tgra1@(yd~O7SKpuAkqT_4G>Wun>?!bP+=YntKT9EjhIu$ z0Wr6ht*tHagk-|&HTmUJ%a?3#XQy9l+6$QShZlFLi2ntOz>4|xX@%b^u@m_&1$TkX z8pd`)$`=`MOfbDMB}@XgvCpY5BBTl&>6w(OxS9NVkxEA%_lPwhk+5J|YO$q*H(%>I z(=07I+UsOzDLCv3Io@PGFf>ymN5ApKc`xeNOiMiedX(~Q){=4OIXCYse;-(lSS#7u zFAR>8J6ERb;Ni?9aU17l)0>S~6LJbPO;3!&_~b0p+o5%wL@ zIi>^^=(x@i(eNPTe7>R-=K5qhujc??o6m1%ovwFz?gi5KJB2mQtkd_Iq$iT$-&%#F zuO_4$b!Z+w1OzW-8GZFt6h>|-+`BE2W&N(a7LopGOv*)`%ccEyDD}V}nR*q4wLaj^ zt*)ubj{09v1-xjtEok%L?zq|6?l+<6z=$tcEYE?5I0kZmV_hbQ*kSqyTf*3YP;9{T z0B|qy>5+fHdqm~nZO{1uPi-mFxOelFx1YS-Dbun%vTiAn10qo$VJm?28(D+8BuR(s z`)7Nw`#p9VIO!fW$bRsRksf_?es?i};@;FaXS3oc-A``0oi>Gkv`}3{CFrXiRPAy$;ae;4vKX>KliZ)ZSVo{w=Bp-?#D;84YG#Jfe(Jko$R|~x)A3?7`A^r$h7oN8 z)xgAv6%O%m4JZ=8d=C4B)+={DS7ondc4DFaW$Ecmm9E=0Acj2KR(;P8_v7Fjs}N%{T{nhGqZ-Saf*?B=hIY=HoL-a zSLo*+swm=wDxR|p4-SSZv?zD7Y=Y3_MMa^G!HH6*ViA(=ol~SxO1j*-x^rMt?`ZSF zqx=mMt@tmrb0K93$E#+*dd*9n17s_cd`$$bNmHxUs~rskreo3HVrB>W!%j~R?3+p7P*c|HRopt*Tsc|K?9=mIIe zE;Lzk5fhn>rjeu>E&T_`0hc1)w`X@=hSgfXzll21|D_+(v@7PHb%AO&PS9x`F2zvw4n6lPmDuAxjffs_m{abRe7j$HUftg zr~mKW>F*eH69D;kLNpX{)=YS01CjE66>2n#jRljX+h^0Wvx;f#!N@`Xt@k24Gz~yT zl5ecSop5xt2W$_SX8#{~Z~a!~+C`0u0s_(?A=2I5B^{Cqh%`tl-6f!efYJg=N_R+u zgoF};q%=q)lG4pL*N%68=RY{tIlpo3YYS^V&wbArbIdUcOr`!%f1+m;r@*m}j{9F` zBSGs7w*>hnxA0$WH>t7-3E4)OABhpE=M6R3_X31^Kk&a_szZngA{mC6YkF)%QJn+^ zt;NF`)^y?O!+fBi+?mt*zw>h!M9?Sb{nGn;^yW3*vA%Qbv6ymaBGlA&o30Cijymf9 z{-_~*P$4HJ>B)s8#2ku_@vLio{BW#D|L~)=)|lIXiK;4ABF6tRk0WLQz(-%-xQHh) z-U-Wnz+C!dv_PBhj%prnt__<(-N51>#~1&ds?KOWRsBZKj~Qg$vOM^aj^veU{J38U zwf~&m08N+q|Ggf#VZw&Ke=1^Q@uzCePNf$dw)jCwGFQA`<6?Y<|wlkL!2sIY>0gTs__2?m9JkovMJN0>sBD^_|T+%z(isj?N&a0 z9~UOe63>IV2#ozjq<;}dHq^F{OxoIyigl6LdMzuP#GlvnHOW8Dlc%ZADe-JFqWCZA zQ{DZP1j;>2-K!=vgcy0lHl;SB%$j_6w6$`ej)9i)|M5u+LADEoCDt1_d?K8S;geo( zQydvM01uXtu`!qb`-uGx^AbbsWMdG88D%xW-+wOun6b#5=e;5wzbYs_Hrpf_Q2qA| zJ{G|y?*}I{T86d^M~1k0)1YF4L|d^zYqsQW>T+2-I;efa&liXzr5yCeceew z^Iqt+n*s8#%NTgRg@qs`*qbhyen0fTgO-az*ti?c3fW&E8S5yxzCuzD%_CMaP|#uO zz3bQY19qXSbHM&M9RB$WqmQXBHYA$hdjea?eylVV(7_6}7$LP~WyLQ2E|#Yk zeqb^Y>R4l!L9Umu(`Qln_*=!9#p7drHtLmdjA~S0)uM2Rk2I=F#NF)gB&~0vYD>!~ zy{bvR{paW6pcn;r&a-!2=n)En`>_iPumVXj?vD%fok>uh1xv&sKuSnZYj6GgMMw)P zr)AKdT@KynJnM5vQ)YFpcaealmljAI?uzPF}R3S!pFLw+k4*6nTT3`N`lN6V$&L=grN9Cme~~#{`WI)A_`!An25a!&DljN}u$YH%rJMSXLn zIEMKmw2zZw9u0xke*MLm7knR z#&jxfr97Kz`Dw;Y*s{`)Lg?;OhU9Miq2+1UrL1pugiaVHxiv4jAxq9wzoGoRr7{&#|X)9iKh)_8B*{CadODGCUgslGprGNQYW_y zuT^~0dvDv~z|sGrFg5DK0+m_m&Ag?C%l9|J?5S3lu>1d1GIKm4i<$hq72}*I98~$E zaahG|p6G&ThMax`?|ICsYKP9?E@6TK-_0NS3OS3ZasGuAs_P0;!r~^yvo@nPGny>% z^5PlDSfFH3Qdc}qxu5u!m~!)%#L(=-*w_&Wpuke@B`m3cx6Tjng${rHdP4tSHVvXA z;&+%m|AU2VMKvryaGIjv#oPeCD z;2V9+<7R(L2?s-asu?Q3%A5NsRkyl1(kDLO{x;;)HTdWnJBCNW5&?N#icLL5yl~1e za-)rNwt@ZK)cu+l_qvi3Y45EC#ohObTzhjTYqpU0rMQJ0BY~2ZaOBv2(iW%ca54EK z0ygvnj|4Y&*WlAOm`o!G?B6(BFxfzIN74&e?Yu<)_7z_ZL3L`YvR~p> z);V~q0p|6`^Df`=o=>WMa{V;wA(ek>p$Lc2YG42sX6|Z$YTN}IGgS`bD}S$s;i~i9 z5vy1+d;G4YTylzRBxf_`a6g_E$4F5zk$s1$u$>|s2@Aw_$7njiM+no3*zg1+; z>pFNCdswOGbG}v186;s)dFME+Dmdf4UIM)4#SOy$(%*1C*ztfQFUT%mM-jA}M8@v8 z+xD?pql+&hcP%a_`MY~X3TwRvE6d3uri`Ep?bx3O>o`G~k)_1THzVvYZ7B(HbBEtY zJQH;DIQSsm+hlTBhkkGoEV*;1$FlNso1?>$qCVK)P+snz_!1j9wk9_3=dhO6yy z-<0VeV%ioHXt2Cj%ag^IRvl}~_0YZSf09x9Y&qWIb6e(zmdXojE2~F7K4&*@#L6L_ zh;G#_!e%IVsV|dc|M$oV2`s<%+)uv2b0uaVcH_^?VmLo56J28@Pky$M;qiuvn8;h~X*u1my|Z(<=7g2ev{EC!IRvVVIM5(E zidgCf6qlTro8jN!~8a7a%Z{acE69Iz8|odlF&fUYdb-GtIM8%}TbY5Hc^rYL8wHSr}c2fzs zF!*oPTS*?B^q18+qu{XpJ1ctb`hp8E-SP5y&}{Gq5sb6bQ?_qBO_nkvFbP3lgMUB$&?KmH#x-64LkHDbgXzi{r(pGH^_XJ)(0<5^uvm+1AW} zlC%#l>NjwHFPN7U$9G#|sjfCyktd2>llt%>=c$=kp?4vEBAoG>=7!?N?4ruEoz~IW zt=Y7#w4diIg0K;DvY#i}1S*lcyStuZ_DPnSn$XEEhX1e0O}z($9N;ILVqBe$wR}bH z(ip2wYWVF$@caI^@Y_)|);qE&w@*Y|__$lBSXldK^5nvLfPO@h?ot`&4 zEw1;l_C!{Bg!s@v7XsYG zNqS<}>RTMH2e`R~#d4CuHq3$7*Uu1I!ab~I2oV_=Ubw)N{^!5pTGxsUmjOQv)Nduu zciKURk*$27qQpdL@Hh-B=Qe%r7*&v{DXL3f%`LkN0<&JcE@gB2a?{aUj~G=hRrGxC zaUCsdjn>FI{7@00C74t?P!H2im0X&~aEza-N`3f2xU>5yZCXLnlPCQBuJtW%4Y*We zywv>`2h9(~BQC$Gukq{+IB?V7wH_%On#ipr2Jnh|NIYH5z3xOUI=(g8d8Mv)ZZd}E z;v3ED4{VxKhVf=91qwMs#FtN``4#3wgtrLYmiJB@b88PYeD1pxnGLI*-6yt6Gsa6U zPsLig&-O+1&YAJba_ zawxv6uN6pR$bvR(A#Ww^?287e%q5|0>eag;DZH_C zj9&ttNlO`2p6MHm?Y#K363Y4#SrZuN76Qmr_ocV8E zcqebc?tOL3(fh)O%ML5+E+to&l2=a`();#(3oaLNZtCz3tCgvHJ9Jj(78j_zxiHSD z2NRlM#W)64==i~K;~jMLY#`GDlSSx@ei;KzwZ-0B{&|k@KU&&(jqQbka)O zC+v=e-ESc@Og`SVvUzRdubmh0zIOfS>ZCLM#?xo%S4(G6@7w3RS^^lbgvHlW<<1Y> z{kU(X>-!GJ+xJAO*bdsN%I0?chudpdWL^D15^UIhMm*u|q z(7Mwx|5TT}44R{MYdKeG^!vu|b8<4-BR-7hy6q#G$Z6Pi@jXrWXir`8YG)Wn0f+pk zA=tks`pW} z_4f&`p{><~Hp6?8q(jC&{5;2;_tR&~h+33Ks@*~)ul9??3|X&Q+`hNeaQ!$yFVdRL zi7Y5ncW)3GAOyD%SgPYQo+2cm|6`~w+nUmG`81m(<|@K?^TCC_(?dgjF`FLO=h7Qv z69bg~ji(n!kNl43ZxY@ytRF2;w3)o$A^-=badOWQX)lMt<~v;~DECfZx9uykYqgoK zHQ6Fgzl+*6%YNyuxS7p+XSDX$-S#@WseN&ciVrkjv2MI^j?|JKk`2;dUaJ_tR?V>pggmGt)tpIS1DQ8 z#gaqjnsNfudyvgkd2ipupeF2W-WN;%Ft?ZRbEa?Gsd3i%vxP*7Ctopr@At5c#ahrT zs4q&oeV%`9bw3`Ne-3O30W}Z?7w5}p&~^_EMH`MccLYHmu;J}HcV9smLl%J|vm4L{ zy{1;cj6_944y14#cbAl6HBq0gYTG;9@Fr@xyh-v6E>!_as?@Dv&`GeIh!c)^Pv-JkJZur3M^a3Qdfj4Du@gucMQZ=T@x&Ux)q$Q_S0G5 zqD!MW@uE>9!Qys{T6r?9!eMOA{pnZ^FqRz4&GoBuKFFgiQ+wEL_ zo`b;H7XVKx`x%k__)=z#57)Z8(!&Qt8QKXcyrw|c*dtxgfdVC05!{^$!BY?P)d+@F z5qtyCuz`5nN`laC6smL!06VlqBzR29eLfRL6;=R!xKy7 zencq+ zUnLKZ)fjvw_bq`k2(T%3SOH<}%54YgH~#ZreMnF4a|;8$sl5QliE#u$Xa z-m%h?am{3pm*7yWF>eJE9{m1MWYwQ`oXmP-r3Uyi80FpvPnE6XOu&0Olq2D6ryb`} zslfzaNE=9)p93h+?xn{6IlCTRy-xuxC$?R-S z(8U5p>?4z?x*`i{iz^@y%`2o&;atoJcgH8xpkg_CaL zs*6#=XFJZt7V|QKT(kyU0_pE3Ea7j3wrFZyf`+eCP+t!LF|k6+4g&+jSC#E#hvtl+ z#ysOLKow2#9*u{>bm)4iDM**W!P9KR@EkwOfXVV_c2)JGV?xHb#v5I=}uVG zyIqGjDRYCS{dg780#k^4J0?Q40@pG4?JvsO6@uSgO^PyU;8WwoLiS+rj}cE5(UYB} zZ;4SA%YDg-$qOdni1apEO2~OhQF(WxvY&?qMDzEd&ep(xw)E_*%Sb=d*P=ZHOC|&} zBN}#@ITw^y5F$baYcWu6$FgPP4l$FkZMJhgxt6t6<2q`jx>BT7@BrvRT#M0dR1uBL z53&`*@agw|GXF1H=EC*M0b0pxq2z#M#S0+peT!qn3AffSLEibvB=b^0aoT@tTG$u! z#{6xWdsTPf+#MdDNA;EfhzPxQ)$QkF{dcY=O1{#GYa{%V6shUx@vFi3fCHvfTtr&n zTAaNOud4Hg6U$U;a7Y{JhK)!wzc%ad&JH0s=x`lqUje73AG~T`WN-s<4cze<)BXJk z8&O!>i<$D!sl5YlIo)d3tF(+DkoKAFr|{W3VMMgk!CUh3@}SA+p9+HWRW`$QxSLD4 zu)AB{*O^(Z6*R3OTZM6yHQ2lpXlf=~b>of>B$mQAgE7LjOpqeUJ*Hm_W|(VX{LJEF zqTCeoJ$6jG{!Kck*z{x-vHUv>;?i$=>&YJtYJf#sxC1(UL|lJAd{U+15`968UP14=vdqXMLg+=V(NPans~ zyts~{cn-cP;LM58OeP`z`t6Zc54Q7X3dnEI`jyOdei3yem`#Htb*w}kCLcIAVkCP4 ze#*+7NwmsO6HQ>4Te$ zV>C-ONcgFj#;4yx|4voSSDc+{xP7%xe>{ad8Fc*9?+k%XF1{|Yo5VO8Z}FFOh>oC< z3&*W{C7IeLz(Acn`|-(5DSzl=UK4XhQUP_kSA6W%Ap)mCK9xO$0BitXwmVM0_Z{~l zEWc;kj>o93?V!@@f>Rls5`^ZkMGs+f8((=MOud((AenC+wv{BCouivAF=*7F@M*+) zB0Fz88WWn{3#$0{Ne6DH`?LHo#D}~{Yx-Qk!WwJT63=6rJcYtFcD7wPex&jd$gd1<MGA`c%eH=W(j*gB24FffaH|a?>XYru5 zvw87DvseiR8A*v!(ht`qAN*Zu`_T?G3Ll6;3u!B4?`6G$B9P1x;_P{sw1$4?5>U|TLoj{q?q&2cr zAQ;-7s*S4Qr*^$=c~%f0%GdT5hn`HxaSmG&&OrOTlUOodbx~u^7gH#@z?_p#&oiBJ z%j|2{44$OEcX*8x@lfHaU6u+&6#E9VX^3sJX8@gZ?PAvCqF6Quumi@8wH z;+iYQT1ksM3@CAv*j>CJdXU)u5jXg4VlsE~wh(-FMiu^gCDPMk(r6?mP~3*rgnb9i z4(Ri{1H^^V3t}3;QFOu!HCLnyC#=?PDkOdX_YcUAP`9B;p;Px?~ptJ7hEn!(Wx2acPTbc^?mj0 z98JYAZZE|`yw>bGwhS}8-Q^Cu7T`{IAdtn%avS)&&%nkR2013Ri!4(HBibF+Z!Y2n zgR@T0_iByUaRT_%V!MYA&}yk}PPH(KVG8fZr)7GIywLbN*91w2a#cC}^n>7p+zhD( zd<`GM?{7j!w5otMZp?g2tdr#7!5>?|Us!``V;HVPSAttdSUm>pB!Kf4c!5^6Mu+; zGlRbN$;#Vz6x02y88>CHnOL7TKt(-`bE889Jhto~>^D&++wp34RCu<4-AW47+(}#J z?o%BHRyc=R88i7X2Y4s&BM(HAWP@3z3h!e^^w$Sh%e%T(+2Dwnb39cwcQ8n+VJ;#c zd2vG$l+!(h((7)=Z#81=2_}v8Mj!=Dhj7!6DXYcKG!|V%1W5dbQqW-ID%A2Tx$e|9 zVELi&2H}MRJ-FF(w(oBPqi1xq8dNQ!fw@r;WX!L83FnTUbirfpGg4{WeY?)YnNJ?Z zV0+H~Q7!~5)dakbzsP*X%t&1@NsfVdnnaWpU9%EbG4VC+FpXtLn7Pv8+t-=Rahc*z zkP)`ZeTqWKUFWyfw}L-pE;IPS4i>_Z#_l?npbu<%4&1jlC7$Ho7oe>*ZAT@LT)+M_ zh&JZhL1wP65!ABKLA(DNXr1nMfAI0l`dCoXN*^H!{2 z5Mgy_w$A^w6RjJB#E*Xl+qo_7l|9b!*f(bSyJ&X7Fok>qak0hh3&!aUei6*(je+MFA**nBgUoAyw-hGiT%aPTD++FBZ7>&dmhKayP zf#qe}o?P5MyRJ%zx+BCl5#<(ycH6!}?S%80AUeti_)jCKCVDf#+FYWGZo8z#nzT4- zsNo=8ZOK#aeA<`%z2iDq&ZWN_2k;2d5sN;FM*3Vb^PR6MOqH>rTRkata>7zYh&z(M+ofu*+uAnn9lt%1vr(324V*S}_dV_}-4@NvJ8r zZ-m@qV6wC?VJJiX1Lt_Q$|jCn_}9!BUU0c~R?X=k`<2Xfggfhw)$3P5x>rp{voZo0 zgiHg_ZGaW4)2#~neFZMABCrz|k#WJcAxfH!5)@=ZiRaPGW@gH;V@je`z@GMmxaaQK zaC?eD8jivgXxTT5fH67jQ-olWn#I}FU|ANf>&D}az+`gh{QWZ<8oF20&c`3S`Rr%% z)G0e8I5@sj%(my^s!a*y!6TsKs@^k9|J9ztEX<$EXM=BX32jGoK4ZEszAB9rOpNNu zPf{fPFQMx?I$`W{KcV(-&YWn!+t<1Ii-(sF<8i)5#*X-ddS?r7B*B%)aUsJ1z9D9o4lByeIL^lGYzH&Y3pT?;@hlz&mUW8h#-Kz(B#X!w%wTg?j zgs|-?wE4OGjl(M4U)O{Ba!2~tUV2sJSKFV>7ocY#y97KF=eQtC*SZ0i+BcCo;Hwj) z(z5)blxTkj^)fq?r1yTlC_WXpLT&wHwuNJFzn8=22Qu~~*D=Dosp#^rw*``$I-T<> zY3JqwE*TycmXQyv@~?J)WIL~Zf4}|K`u;y)xyO9sa9s5i$f($ z5Mfv$@QnRl4wv|pI=%np`7c(tjvLJGfVe@L8-`kLFiU|}42BC->a)?Gr@I;0`@Vu% z@_n!3YdZKm;PmDR6%8}yg&R1D11u*F3y%nisNh?~8{A)@!*7I*u*N(ip%!rz<;&^d z6gys$tpj)`nUPhfpzJ72(64}IcT>;T4e)~em{i6Ubp|*}s2=X?dn5U36 z>Ytd^{4%flU^mY8Qu#eICe82tc$R7S_y8GD3sx8+%-%P@+q&N9PI`@@7pNOI#bdVYb9Pqyj;^8Fl6C~3k=L)~8T6)lc0w|3#q-CwTq;p-kqEpcuFzk+V|)zxAEWwnoq+B5oPYuMV&Q`v zWoQah+2KUoWNv~LC%6 z7x?~7Tu7T-F_tyr(eG_(rKv{?@eDYN~Iu z=O43%evjv!cNmL&<#@jGKKfDocsNb6DrO~B(L89t8gn~3509tnm_3>?E0Rws)t~6^ z1|*6uNa9L|9>9U;pew%<2e6e+vF_kXL1>6m9_$7c>wa87*tu%7g4Okq$#Y2M4UY3K zH#Y$B^HdqKjM%8Vo_PYb82%{1z*GeQZMTlLf2!xJhLE6X`T(0_rk5-i&-jlcqrn#n zJ=$8x3jhz_p3fkGG$^an$1<}N)#R)VXB*(PyS{}&X$Y+wkk-?mQsi)zNCpoLdVvGl!2k zG7h)|RdOAEHrE8BZ-zt-%GL;C(pMEo_Q=e$Y8M6(B+(5&CP}K!sMYfIgx2@NI-JC+ z86l+;fJUNmu3Y0jj}W8e#49QhQzfXi{rL*x_Qj%_VVvsR<&VmD5Td(C5xCd*b0+Ng z9cWe^Y{c~~ec>_ksO9sge;A&A%aZIHTf%=w!uHc(LnYtz2K@zsn=#Y^%VTiyX(^}j zI>i%g{CPf16v%a{I@O&)rN8kjatEgs<6m&h6wp&0pU*^s01W~kdQQ)lOrqb1n?-X zA3+ahCUs~+B0&l-21m;jB4EcKv>R(@`)e*xeD_OUO@E3AA489T&4+R7mDVjOiIGy6 z#}MKd(b2EmvjN=w4I>qAey9g38xPMeh|#uq9~A04tf9nbax`D1tX8pesD7<`vNMRX zB-5lAczsYv(E%_&TeaA)ob!y_GsL?Z$Zsz{c2cyDuNfo-hg7(gzfEtx=V@?MkA9EN zA1ao^jB2{WV8TJ3!;#FX87oM`TS)h}{j$G*-Td(>BT}%bpVxSGXv(GVFiq2RQvPMT zpTYISK%eSGc{c8C(r^;CbY9yHF`TDQr)nGc^G%Y0b>?HrH9#(LRapVB)0ltSUz4y7 zRSr1+`0~n^<(QuT&+tChaJTMg}}s#l}7>fc%YrWv==w-nL0TLaDs{uq67FR@s!AvrKKHeYvR+3xmh6kK&;)Hi6x zuB{}0yxFXS8apw+?S3y)P(OV&8h!gc!HSK&ci$ObfrmQr(QgV5Of||1;+Muvi9Vc8 zj8=6`kp?_RZ$Binxm{o5**E%*);-6Vm98(&Rd{my-RjNt%)g5r!3F^)bKdNdh{naFJ%qF#Mo95y2{Ti=p?X85`=Cw9;(6he{k4jJVtajMGq5JzxQ5vB= zzf7e#J6N~6iLRC`Py#5)JAGMMWJ-L>EEgEa*0QT(O0;%jlZ(8CF#t^Qbj2b<`0b}j z{K4!hj(pc%G&D1Y$->;+JVQFzb1{we+XADxSK~*~-Fu{JP%cCF1-~*?(mzcQk`ulE z?2dZlch#5g-%Lo(oWDyYGv$3^l(?tHE|Q9tM$F^mR6}Ge{5nHTCD% z*$q-UxrU%;4f+@40=6VhI{`>H()=&ImXH=J2<{9t2E?I8Qc6;gk=;)Mu*_S%3Ma6L z`Hx_2`yaJ*iHJeNdh7)cKtWY-eu^%>a%g(!TZ8n*Blo+g#j1J#r_!M!ChEMd>DAWj zxX$$E0pgR(HJ=LViR{d93Udwu#is6j0X5D^Mx@f^Pt6@M>Kpmu+dWEWJ>nL`)fYN*jP%_@pdh z*7wJ%|5Cs5g5AwWBPL;3Tzl7StHy&$JiJQS*DX{gsn{N5ho(l5t`y7tU5wfbPzM1> zxW7KO4dZ7h(=Q>z^(3$-leE5e;HECC$?Ao$4;`!b@s8gk~tw++XdfDG<4i%H(^Me%Q8)#Az{`l=F@b2^pOo;nZ(JZOCCX< zkvpf0IAkzI{#3%bEHk?& zyj^)RPawETR30!u{B-MAOU{9w(Q&7O0MlRh!O#D}j7Bmk2LNe+v%+`@P+Up@+jr#o zbB=bXWdVV#%kW5hp(D zdBc@7@$VS4utM91rF{pp97e_p-qBM zY$t=wdoTT}Rd}ie`9kIp;|%6lXk|dG=z}-uA(#L6Cz1{&(?eTaSO7>D^nUMR?f|Ue zUY?fflLinhfT|!_zz-IojUe=|Zf>4kPbq-l68+q?5&!2?)Y;U%NO&`8V+-&SRP8Qs z)uH271`MQFmwUPlU|+~SXBUFc@cu?CLzCZ;S%(ZnT7Pn0#;CAbWwQSH&#?wEqwPr1&>R2iNTX?LTFs*^K;s02c(EVcv?k zuHbb*%44n=&k}z}_TRU3oIaPA?xzQeB_Om06pR^|@4rO3Rj3*ijr&(k9D0S0&~^br z2}Dd05VC;Xodn#=e%MTE;UYm$$W?j48x1ac?rZv>zndHeM)*^ZDVto^h7hw^puI!x z%~!S8HC^Plpx<0g_iqNSc5C2G1Qp+IO27!*bK2RVce_nW`W`q=_}ROAFy2GBMZo}u zMdQOg;LqH;&GMF72GuP*=x_Y`{3HBTJ7_6~vz25zD9Op6Lumxb=Td4N@r|MH)9@Qv zW?0W{e}#i^D0a!J-1!J$cosGuJntkNS5lU7@Aey?j}K=Ma~fsqd$q4ZQ)&=7^0)@L zN0h?OOYlg%0!evL*;wQ5C1x~zl%zBX1Hioja7%aC%6y?doUWo14Y&4&5`%SOH3;VV{3E6p;S}fz5*L=FTRBwr)DulZH`;QbC1N z8O-MpUKGGD<)g(<0~QGcLSj}OHh5uS-H3(*kgnWuAsma`mn)lUD6Lpz$)ji8I26Y) z_I`Nnei*I<6pOI7lAkjTBacu#S||~|pXs0LGGL-wg$OWg5;aoSLiB~s(;gmkzu2A% z3<3SDE^DXx*%vfZz8@DeMX{X8rXTo;)-H zWIODU`*3PkyJ8jr)B6V8P>0$?07g^++-M6zpN^5wGUz)1CtI$4AlA1wB=v{==-g_-t$l9 z;~edvkDZUYNQ8GpymrlPiB#FO@&~pLS7YI=g708Z`e%5Xp6bs$uR?f$)&ue)h!uD! z;II7iIQ}_ESDz3}0HA@%=69iDCmfp)clsPoScTP7!odL>Ku)1t#y)8C(_q}a;MwMi zkAML|&Rmuj!K;8)3HDt0g;pV@J`vKDRZ-~$!{n8OTO#m?5@FyaeGaFRiUKaoEyd4| zXyxC$17_In0DP{c66R{JdZ_$0@mXHtS#-yu;K^xC4=GHIb<_xa434b3NgNx3PsFZQ z1*|V>N<&&K9vH-W_sCz)-^V8-6NRbcZ|Md2>^Z8*qf>2F*T|i|vDbdMJFd60Ot=l> z&tp^(!r6$m9^e@I!Z(60cL|?IeY11vDV$dlA^Po!O2#`x&An*)FafY8+IoF&h^?`f z=vMT-Z4q^&dUDmi&-a|xyx%svt&ei(-$#v!i9uMVAsXK=YY?Wsr-`rMmLAfuy!&Qe z+-X5JDb)QdIw?CS0GH&n2F<772`H7{|b;J)+c zptZzbzpVAB;LHLijfyg9>uAuBMXvS%=T~!@TbzIA^}2Z~13wUud4BoD4X_BKh1FsA zt!bO)pwj(cgS5K%p{~FN^n+5f%~;wo({w3_$sK~35ScfGt+=^?yFPU4W~#Hr2K5yX zB9PEAh}c32wx(+PuP@A<&<_VdSb(_;ZNz+VG#NEMqgo1+L0$P+b!a)DAuruNcqx*5 z2WtFLo?F)ub1o6i(ErutbH)Ni900J=@3Jy8UpgqK0W)s3d8xa4eu@;Uorwu&Q)%HE z^^%dVqCqo6Xb8>7oy)(Dx?*T!f)I8U9EKuG>`Y>Y!j`=xg}s|9C25Of6_>&h~8B&#^1ZqBL(XIC$(#}GxT5Tr5 zc4*}7wid9lUXAmE`fBadW~!^ZxzAvVHzhUG_Gpl6hVAg%JPK#9M&o*EqpKJ^L4TLAU9vv>7f+DdIJ z$jVm1;f0_A2Oa09!b&fu^quztDo^?AxfmEiuF$wbNPk1HNccN8ol{RhFIZwuD@}jz zjRU>awT?Q-0*v_d0`yy}ssXr}@^C&4z|~lozzN|}4?$@$4&;9lH2fgA!0HnRHql+= zEToR=L!tLdY5{!k=_)<{EY#81z&7#=3gq6lm@5Qlk5C{~mRjJ?kC)G&P!fmVGC`w8DI7@-7+kh}^F~22> z+n4y#*>udE`WRty-@CU z9rJ~dc^57nQ4=K)a|}uS-ai9vncrh&4(mZ4o0Hl=4Fh2*2KgLcQ%a>Tj>S>=obHM5 zUMQdO*-h@l-j-G4V5}>KB0a397>6ESm?6c7~BAp-vSsJLge(c_&lYXBS<=a zwF?EcusoIY!L&>NpaS~r%Zy+pY~V2hDBid_W}4L%Lh$4uD@p>w{N)F!z&ab>%HX$g zXV8d>i-?@2`D`)kRawUtb~gc`5y)@bPQtYaqAjd)tzDe_Q-fV{jb|tHw+!J2Dyt~| z-s5~kTT{c#qfbW~ea!{I6R;1_nE}ieL2MER0Hq$Zi2m6ogapD33Xy;^-u!h}TG3qT za;Xt0v(Rnhui;6@$-ngR&4t*8lw=jZ@WX&Z0-*L_Mh&ecMyeFKH%`LN3`_JYxkQBB z>kQHdcKIKFA$ zXf$?eVI4uqB-lu`k34}5;&{06SlYDBtg2^O33&q06KDtUqwE321-^*T8xQxkNW$79 z@$A0zNEV@-HQ>Mb8&0Mt!7`%|)~Ozpc0j9qXuN^v zaj`k&*&yOA*p8Y0&TK$o_1xq+(oc|WA@9uc+N5ru`^L;`82D~bqpKvjAj=NWi!dw@ z82^cw=w_&;ip=_9k}%eR>f95*oj4P6=n}NxT5G)!85*;umb=(|^20m9=yjQuOe|n! zyrvj|0((hs@>amjV-hHQ?G-z#fGRidwB0&SYP05Ql4lhMnieFE98r9O+Ira000Bb; z0e5Ml$>#`e%H$`Sw<4pUZ~?GC%;>y;TXYf@vkH?~>8Rm)q%U)fmg)|AAG5Nu29|MLYYrR&#;+=%MiAQ-}n^jeSlJ2$QUO# z%J0vSWH58O5Np`yn209inFft_$y+H?pv4AuYj z&^QsTCo}%-3Jf^*Fjga!P(p{|^zM*$SBq>Ieie?>9&jlhI2KUP3%ONgjW>0&1a+vn z9evrGyZfaw55uM?I$kbKm5jrvQIS0brysOYpo}qiY38;zw7i^XEI+eYDRrZX8F;=6 znotuUufJn`#36cT(ET3z;i37QcY+wf31-HNS}seK>o|9XqD_(+Z$LupmxLGgx-UG- zYu;`k1~z#7Xdzeh0W9;*9F6Ou8p42WB^2YZn}l=XOZ8KyP-_hYSD%g+lX_SUIRAh- z*~?CM;1F$cN*&_bn9==QO@DL+<^0LXPMYaGQrk??7*&>kDzcAMv9vF%N;J?m5dD(> z)#Xki?nxhfZ-^%~Cb74;BOpro48w5@@wJ_yGIhF#O`-@xkUtp7b};l)2*^sp)r+Yc zgd2T5ZGu(fLjb#7&iORc9CsrSyQwwbM)YeoM}Or1_{oCo_HAv*c*iW?47(!Cb)R8i zP`|XIh{Q$ZGvs2zT~m7V1%(m{T=u@|k1-~nyrhmx@T}>T@hz#HD*P4D zYE&79jp2$DtG=yxrOyUo3g%a?+|7c(d;_*dXJYJEsW05}L*s*-@C9#CkSSJ(3x129 zTZJw!1bM9ZfvDdZVB0xJq;Z}FZm%q8{(gkVi>A~c^d*Q12m&*Lqi#W6zz>dxqLYyU zv7rRi``=aZ*x=*s!=a?hhmNpIRRZ`eAun*1@ly%HP)Q<>kObaft73VYu)%#5Xfcf? z;F1h$n>eR7^)7$4GY?^?6LfE(_gq8=ng)91syVd7Y^RAyS5+_mna5^v!N^r3GdXvJFD&{7|zzm%q=qwP#%~Eji z>zgQc2x=$O*=A&ECs3fz?(<8H)YN!KxiFudRd}O5LBXB5?Sby(uc> z0Lt}arNOxn*ocu}RsznhO(~YqQ1^!lNxt!@Qv|&q=Jo9kPK4y-7qH1Sp5hB6@jHU{ z=dW-6jd^uY;!OP-;_FS5X!Y zEFqN56V(48Uyi~@jLu`( zYi%d}9Y#+x!0~;t`(-s~e-7?d0rLr0CU9<>;aJxyeEhdMUfPV4(Nu`z)Vc(@O& zPjHnY^upjpRd><-JmjW9G4c+5sja{r1aCGre>vjAGyp|xT~7bKeh70$b;y_fY^ji1+X-o(SYGA3jt}HsDkmIw zEcLQKaQEYHt;CQqt4V2mMi4}i!fS<{t4fQwxp1$-gkw0B*z~GGV|qEOfS?yv+Xp?p zX_SE*1TbhhP~Y%bbsaL2G+)37&j_eS(7>WxS-hY~0m)C;XMHhc)fJrqK+2oD>8mPl zk=4~t4r&XoR{jFyrZvU|0*T1+SMdm;O>}@sKBR4oG(lP-1eYF^e|zaYwV=MirY1op~iXDQ<&2~#mQ3Ip45zr%`OIeZM@rvfMN z38Q*6l_#|YT*{4Nlr~omkDeejSfoj~4~vkaP>RA*j$k9j_@8|p1+AXQiQ~;a`&ZiI zXUK`1X2d#94<$~!J}KeMOUzn`$`4^{341nh0t&BVE7~3HYpWK2>-B9`qGox4S6)D$ zYY6-FX~_BZm(b8qCcUbBa&l5%_NLG5T%@)y?lzuvGEAY8qf6|p1fNm}J9k_jzL;mU z3}OGn6#~V()VHY@5r_@N2}dl44g!j@a~@+xk{~u@&owTXw^@#J&&uX2%{b}QzhKp z6Q&}<_pn-u1T7+BAOf)4Zdx03FB6BWm^b*{c$9RIm)$p{FkxUzw!-rqY{z zH=E|nN1ZM8G8nhD23@|ndic7^^^?33DXc@jka1_N?5t(I$(hXs|OG-5dA z3S}ZK#lGb|iMMg~;gOLmEU5i}7X{*U-2WO{EvZd6%O0Z})Kep6=1MJxe&`bmB`(>M zGzLWaZt_0x0}BNi&bcRq60i+8sy0;p&ImT<@T8UNz`?x?cak!YNdRRF0zk9x2}p#9 ziadvFaLz*MIrjo)@RP%N=Z@vdZ)1%`By&JaB40WfLtrVk!ST_*58PBU6=fpGyXJFj z7w6~Z-cx8xtTg#Q(&Eukn31`82IF?Z*l3=BW*g{LL0)1w`b>{2mY_fj9ShT$S*`K> zasJA4$>>nF2$e12*okCQMv32bp6~Pg{_!fWmpVS5`@Zh$dav7G zH6mh$DI#qAr3eZXn?0aa66BuoULNYCQKg_wOLb0*&XpA8#V!u*2Hp;fbh=TzgAZ|W zqDdThUamK4iFXUA8lXT4=;x71#hx0P0`nTN1uTJ&Dai@phfX?z46*8imuhow-ESrJ zjpkrDE92<^oqXMtHy&`faDHE}2izC`Zb)fg{{oqpJ!1P%c35v8c7Skh6rxF_{ijH=>Hi-5%GPtQ z5wuk{pgsm1GwLB=JJH{V8>(Yzof`bY+M&vSF46xAFS7_Kf6V5y8=jLrFr&1)xm5a; zR>|S|@40NUQRboyy0;vsST1mIa`py+gXsY*u!ay;W7Lyx!btu3FCgXfU+NwDEq+#v zdx077`C?{UXd|WoibAWz!Q`={C1*i{p5KgaQVuQTcF^Ll3Q!KypZIkV)w1>U)0yvpT3%E08*e# z=6s*cwF0iYSKq;*J{hb>tbSESqBdn|Pu_Ra^2~#d2>QcopxWIUx6c;W5Nm~@YG|;a zO$3V23eDQjqqK8Rcd!iqaEcM^lp85qCAt8NMxH>7gH2)_Y80TprWfZ2VXNW~=rnk& z)vS>&0b~6E-Xv})f5pIPEb6;1lt)x6ZwL4~6>hma|cI6!ex-_?#Fes>n_UEZrR*kbhf$(Zo5#>oJp(k_@U8yrrN}MY^Im%t2R!HsR1d zgzXhk5m^e&y$N7Ac_AS4-@*Tu6-98T$oMWC;P*n%aEE}gBRJuyA4yP&9ECe?5wP^p2>j1Kv_uZ6=Dt2P*2K0*l%Y?WyoNYRX*P^Ck4LYTd zQ)DsxtfyS?(|`_@DhIh;nYgmA=d~fz8t-=HHI9@VbDyKeU+F`#+7&ef-5>5G;h6Vt9I;SaN~u0E@F~~w+wG?tUZrsW#VgI z<_o`SZvH%N4Zv#{j~1m;xy?Qf%bi)8GL(ejgHYFigMwiorP?fHqDXx*DxL50Y$CBj z3G8x1!BRcoY-|@4+xFAMJS(h}g$grP@@K#Z{0zWQTKRoTKuwK$y)hRv7lk)IRlIJz z|KR^y>pHod3aWA#Rsf*{x8g%7y7{l9@Mw^2FoqlqsN{i8NovieMkerMStbMAdD~^D zLy?=A#S#uJb9{9CGsUyqR4E)K(24sgA+SPfHy zv*!*!w;d{wdAL_PHnfnX#RNP+!!aNN94kCawP@D1{;ox=qZ)a*w7uE0m7|q^hJ;uFZGR~&ZSXE)}3&Z>$cg(`+oMM+>JK>qD3UUF*^#bL}1~+n4kSZK9 zQfi^s*5Ewxs*55saSU72Ya5={R+F4Ob3sOS@tFNvcstXkGn`ySg5`1abE8T_`H~EgznV9urXT zEYRgt@$izmd$aJ_Jv{sG@}@p1o_CO;Gf1Zf$DlvR+i_KMU1uLaNzugnj4)Stf%~O* z+Js|cyGq)bxgC9*@x90SYsFN~yagGrUm2e-gSr5OYo093)fTl5^al4R&(kZl2N||O z$C>ajDz*0lMx<=~+%tlFSyN8(xhbA21NUwT!YeXg$Y7M2R31HNlr4>p$L#dqBl5MYRStPH9I%9_)Ng7_rDkN(J9CQMd{N3(FpGlmp=>PBHC^ zoUYPrj92K1SGXZxHPg`BZ}=LTQnF*2$?QaiTT=f%p_oTLTUotVlLZYIW6|rcE@7dW z88T~ z27Yb!zhcH69;>5(@_L;d$he0@>^d-dEd)U=FEKXA-mXp)2)mu}sHQ@GO2TCq@p`tI zS1Sn&G^()k7_R7a@Fx9$fszUBTNg*Picw=!s>6JqE1C%0dVVj0eK-;qvI{*D6t!Bv zJ|;4@d^HX9CFBDaQkj|kwPxF!HeCp7e*hV&M{9s3zm_G-CJ0LZU&nuEj;Xn1QwI~e z56WyeXFiV47I%pijrL4ab{##R3r?QycM>TPJyPam^SX41Jsh>`Ycl-(Z;PP7irv6@ z@VQm2eeJ&wm=r}3eDMcO#U0Re^wnvc(ES#q*yp6R?4@9awl7Vam1lIO&JcM^xq0p6 z#bF?dp$r58CIik^6G#>bj$p7nhojYLCH^UY%;@jjKw0-{4WjfYZ1>m9!rld;$sc}! z^q4?V7_@v}=x9P$8#Nh!ExiyP(xJpwF;kwcxkmllo@@y15}X9Fm288(+fp$9WD1ZnbwcYrYKdlEqV zQht9t_`=N&Q%m@RgD-E5@yYB`S#7(&@{`Tz*p&+VgATjF&2|O<+f_Kr?tfC9qj>X1 z-$5xs?gEb*dx|lhI9Yd?&OpdOzceQcDnXS(l3i9w4~ZDJP`)g?VF&KLcT}^bXEQ84 zg|B4ZA?HvPgQwAf2mpxEKgwTo&&^TY1^uF=Y z#hkFB`t0D}%K!*LS_}Qf@B9gwt{SxF#=Xsrjv_i7NFhE4DWq4GSnf~5mLtR-)CYT3J9^D6t# z1Gs;-)TQ}=kS){w0}O~wAnTFk;4ioo@oJ4&BQQK9>qn~H4!2Af{~hiHv-?XSjs~J2 zNooy#lftnYIgoUNXD`Pz1SejCVG}_x1R7n`#QGrzv(Q1?08RQWLJzU~T-I+p(`Pz2 z8IX+RS$zRbUJx>XNCK=7`QL1;tsBjzij3a)!&eD>eKI+$etKMO@?x8Dmw*uQilr+ zMCK9Kk-EO^gg0#B4agmoXD}_rR6fV;#4O)B#dU3CXJclE;G@@sZmJ6bf{2JM29pN3 z&h>qqS$?_qSU7^aDSY-#;HoT9^QjsI>dYw0aa+!CMVw&6UXhOUc#-IxTdx^Kuc<(F z`4MCy$>y6W+c;oA9jX6`V8^MTSm!uCnH7r49Yr z3#O{K;S^N6tXohIwE^_L*q%Aim*I#J+%Fpb@G3A92k?s^?BSPkc`Cg17usuz=C1*+ zvHkk=f0)-$?$90X&Kw`@LB47OtSnpAz-yg^%YTmkYyizdXN+>DnQk2hWnInq6%q%0 z2!CNtGDNZe2G8m2Td5eeE6}cKggUZ~^rehUY|Si|jWFd>kDca&QF51zMTvFBT`&Dh zBYn5*-8zL_qwXvb9V%80@8HbBT(uUrl+Wmcl-aC8s!kwL20^v_Y3hIIvmISiEwuFQ?aGsBRDx zW$KQd__`Bvqa1e+#-_skPw+tSMLO(eRd$RP#D>@Vlrgu?J0g)t;2VL4&j+mQda76` z2V|bLuR-JY8h~^#@gZqp4t;0e=q7QDN_~$MI9-}jy%r}5ZDADvWCYj5uZaeq%JFoa z#xV{@a0URP`g90({ML=F#DplE8u$u=NHLy6i{sxca`hli0XjLRALfg!5mJqI z#XT4^;|BX&A^1iIKA@rN?q|#>GcErw(_l`jQrOe+%HWU}DBd$8ula?xIqxTdb+*BG zxM=hIM}4`n>(bHlxo5Xpa#M*_fsz9rVKAVgD$fC|1Jn5xEyjzcyy1(<4U82sd+!D? zcZ)bLug7daJjpbmjNq!YIS0ZqR)ye3v!f+kog3ZaysFfa9ooZ$@4F#%M?m@wK^+D; zg(uifu@ergrI7;DU|57t2k}3zJcN+$wY@kY-dj(6h`kELfRCLWg>8>^o5z}cRA+NY zAvtksp*MrYqVu<&{NXM{^iOlF4nzTvI+z-9tNTV2?q&b9uk`Gkj;H5O&}Qr`^eD3> zxZRVLCbUQZ{WzR0&w(+AID@uuRx?PWc}>FB`njb)x}RWTM9Bs9hN!%;@L%RN&4ISw z=!)uS?9jeOj#DTa);jzg@2^yK8Ax}xSn7q;T)J61+q(g^d^T-P7|bew?`^Zi7C`E( z-oB{y5El64->cky=+Ut_Y0DTz60OSrN8#y^8SIu1t+;k6BYP3`Z0zdrG$L`4_YVT0 z-G}p)_Db5rLrA#~t)$qZ*VvjUH0p0+!!S23!hM5Z(b~N@iCk~& zGI5Qt%I9uHU?~Y#LefBhFgQ<*vNITlk3kZ#zhZF=LO25-J2hQ}MSURF4%Ujxy1t}# ze5)l5MW49;wHQhzEYZ#s$H&l_Nyb^zJ^D&MegEKzkX{g@k|cUTL`goRix<*+g6AXo zOMby|onVUg4?W_P@hs6%9v??d`%TRTIXs~B#P*^LG3yQzJqT8fA0yv`pf&<56{T-T z^~n#gM4<1rUQ8Dld9uC6iMYZj$l<=`rU7(8HF&vN{;s(s5$;lLiwiOE4W@{00~H43YI?L<7vIRH6yQ5{l!y9{fxMdJcs-wfh+dfg zl0dD1n6HiIyz#a7u{8uqEkQvH)o=ErK8t7H{4zYIH~mvL)1V+wX4RtP*N2N~*B5sB z%Tk>tiY^mBZif?{Gju^XKuEOUA#{DKP&Fanc+a;tTcJhHLK<#GgNBQ66N*%2MCh0! zT`j|@r>n&q!TABUA5(hygx18BDyMRhzWI)!JOx71X`uC z`L~efN&a|#tvK`Czq?6iZrl9j64Nla$H;=M0q$Mu2ebuGQ#F-5lw^Lxjh_-t81x4& zSzo#x0zAr=hPWX2>)>piS&bbvsSTiTP!wo=pi@W<%Q<)UX|HnoTP}_8@-Y8=Wcm`q(zd`VgPEv} z%<+JC#>jUKaQl;u>^Af6P*FfHSer>V8}v4^d(8Wty52)t#5rq1wgof=hz5kW(;v1G znoLSxq4UstnExY#+!HetcDQC_#8h>eeh1jV24D$f?V;LLHg2CP`p~2iLN}yB_6-Kv zE)jjvb?vzqnNCUf9w!WErKUP#)j7eQth@;T=`C<{M z(N}u_sGR_U8ee)tIDMqdDrq?Oa&ZNaT3;8^!hkCKQ0oWhLeep0qklCu6+JYxl3a!b zNx0?^M*3lkS_5bT)&V&Tsi9WNQhkci4>&_h^B!Z@e%}j93=9Sd8(8fDgtQ|d~BPx-66%dvcM zKkO`68zHK>RL1@T%nTBZiB1nSy@LNk63A#QX*=mZ(L3;YrL=nIBiLy2oS?G9$-N83 zGeQs1hWMth5~U?xLh!t#U!r{4Ixj}Y)Oma5X0M-5`j*n6jO(mo`#7xUC-KkB@-KjU zkcv)eJ>s*9y1HTCW=7js>6Ityn=vRt9Cd+$>uf6k(IBx>TVxhb><0nE(^GJZ<4slZJfC(z$nG3{gtPzR2=6hcy3-gR&z8W(Dv&iLZhu9mi31hQ6tkg6wz zdgoATB?+{RIRO6U%Ern7;$HjN!4VK=YTy9N6!HBvxwPZr=C;yn9{Xj+^SFE>%xiC^?_dwC?x{iW_7Z%q;W|5)n7q zatu`7L92vweA$so`pmEqhLLbFYN@hl~M4H;>v;6F*l2s?6F4upZ{|`$=Sk3qE20M=x>*K-5jK z`ga!W3~r2j3H;6ew(#zyXg@s$7@|`HP-{+ihGa@dgCE*_+z=%= zn|`8k&)J~8X)>#fJfB25-x7CtiS3~j(BmU@fGiR2p#W#=>f}=bgOwZO(m03%!^$Us z5324uYu$yt#xCpYU_vfi*ok0M02j^GU$CzoNZ%F79ZX`g`QVaMUqWb-&qiN{*v<}s zE-;BQu8BdQC@Q6|vy3ffTKRJM$8uIGDgOf)hrV5ECM5^kAZyG5q27Zi@R*ojSZWbH z6aPge%U0mu<~($NFiv&4XY5A1N_W_5{4*X>K*MVly`ekCw)ZI@%=GI4jFz-~!R02h zB@@a=>w}Kf4USu!C~tBh*8BHa zf4hcU1~YsBqteW;9`QRp@k!X_MucEtH|y!P4)Z^$On&@aI_D7$k+W41vmPY%1Wlaa z93egVCJ?pRa7cjtt9~F0Qwz-56j9oo#}7QXMOWPb!WbJQs1Tj-FqjM0u#iXIN)x6^ z&Le{JL8V)e_F0#7)3r|Easa`83max)xU~D>ulhY=qm2oDvoBg_OryD0hYF+i3Ic5R zK}5_L)W*Il=f{)nrg|6jcyT8|LD5NLM^W?hDXy>x6d8H9zVl#Tf$N~H=TqI*XSh~i z6+Y+t9nHh0vl}ydtmKnt&c4$ITqT_~`J&@eGi=AAb;%+TeVkg&`(mquwaqd|2xRC~ zJZS%PVA$Qo6#%y&1xL%_^90!jjt-k07hLZ6eM_E|#C`09V-7l$76>&_>C8%k4{;_m7z#g0n0|Ao z8Zcww7W85KnhRl(QBgd?!z3 zKd@|@E%XG@vwBh-U_ds>$rS9IMxuvSn}96bNd}J(B-EYPZD4tnT%u+LBLB9S^3UkEOyI*M zu(&H<)EyGxELZ!0fSot|i;QO}iI9)`s;L7#(5{IMbCtltI+qW8fZX!HZdU1RIg z|Ay4ibMsvvtgWphDnPtSm^x9nW8X%f`E@+j5HLa(Mnv_FTm985IwqG{LD|q}n+#HS z+T~eZ;r5ulh0d2`-ehj0eOy3sFkXT<)jv#GUDMw9>GIA+t~d!&t{Am)(~x(WtOm?9@`}BC&wJ68eH0Rr?T$?=~W6MSBu0q zMw5Z^*ZHsUCDPi*jHIc#NM(#;Qi50Z{usYpbi=o6h8B}Q`}l46pfS<8F5}EW_9GrT zED;gytgq}%`xv$SDd*!|Ykwm6$B0^?N|6u|{qyILb7VwBigfVTa}>lxM1&t9qELb_ eT!We+#6<3K#m@7wk1+5JB286Ym6uAEVgCp43X2i| literal 0 HcmV?d00001 diff --git a/slides/section_1_setting_up_environment.ipynb b/slides/section_1_setting_up_environment.ipynb index e984002e7..f7f49ed7d 100644 --- a/slides/section_1_setting_up_environment.ipynb +++ b/slides/section_1_setting_up_environment.ipynb @@ -174,7 +174,7 @@ }, { "cell_type": "markdown", - "id": "aa66770a", + "id": "55c8a8f7", "metadata": { "slideshow": { "slide_type": "notes" @@ -195,7 +195,7 @@ }, { "cell_type": "markdown", - "id": "2a1944cf", + "id": "5ebdccf5", "metadata": { "slideshow": { "slide_type": "subslide" @@ -226,7 +226,7 @@ }, { "cell_type": "markdown", - "id": "29a081c8", + "id": "028b8c1f", "metadata": { "slideshow": { "slide_type": "slide" @@ -260,7 +260,7 @@ }, { "cell_type": "markdown", - "id": "e915343e", + "id": "a9217822", "metadata": { "slideshow": { "slide_type": "subslide" @@ -271,12 +271,12 @@ "\n", "The \"patient inflammation\" example from the Novice Software Carpentry Python Lesson.\n", "\n", - "

" + "
" ] }, { "cell_type": "markdown", - "id": "248d0a06", + "id": "a1a3eea8", "metadata": { "slideshow": { "slide_type": "notes" @@ -295,7 +295,7 @@ }, { "cell_type": "markdown", - "id": "ce5fc66a", + "id": "e8bce351", "metadata": { "slideshow": { "slide_type": "subslide" @@ -307,7 +307,7 @@ }, { "cell_type": "markdown", - "id": "0b01648d", + "id": "bb5f3f8e", "metadata": { "slideshow": { "slide_type": "subslide" @@ -316,23 +316,23 @@ "source": [ "### Project Structure\n", "\n", - "```bash\n", - "$ tree -L 1 -D\n", - ".\n", - "├── data/\n", - "├── inflammation/\n", + "
.\n",
+    "├── data/\n",
+    "│   └── inflammation-*.csv\n",
+    "├── inflammation/\n",
+    "│   ├── models.py\n",
+    "│   └── views.py\n",
     "├── inflammation-analysis.py\n",
     "├── README.md\n",
-    "└── tests/\n",
-    "\n",
-    "3 directories, 2 files\n",
-    "\n",
-    "```"
+    "└── tests/\n",
+    "    ├── test_models.py\n",
+    "    └── test_patient.py\n",
+    "
" ] }, { "cell_type": "markdown", - "id": "a1607273", + "id": "7fb282c0", "metadata": { "slideshow": { "slide_type": "notes" @@ -356,7 +356,7 @@ }, { "cell_type": "markdown", - "id": "0e30c163", + "id": "96dd1e85", "metadata": { "slideshow": { "slide_type": "subslide" @@ -370,7 +370,7 @@ }, { "cell_type": "markdown", - "id": "c2878bae", + "id": "8723173c", "metadata": { "slideshow": { "slide_type": "notes" @@ -384,7 +384,7 @@ }, { "cell_type": "markdown", - "id": "f8b98b99", + "id": "97e13378", "metadata": { "slideshow": { "slide_type": "subslide" @@ -402,7 +402,7 @@ }, { "cell_type": "markdown", - "id": "c39b3b52", + "id": "c5d89dcb", "metadata": { "slideshow": { "slide_type": "notes" @@ -420,7 +420,7 @@ }, { "cell_type": "markdown", - "id": "cc52ddf3", + "id": "142a29bc", "metadata": { "slideshow": { "slide_type": "subslide" @@ -438,7 +438,7 @@ }, { "cell_type": "markdown", - "id": "e4be8b81", + "id": "22feca09", "metadata": { "slideshow": { "slide_type": "notes" @@ -455,7 +455,7 @@ }, { "cell_type": "markdown", - "id": "070f79fa", + "id": "d5b0b651", "metadata": { "slideshow": { "slide_type": "subslide" @@ -464,12 +464,14 @@ "source": [ "### Model-View-Adapter (MVA)\n", "\n", - "
" + "
\n", + "\n", + "By Soroush Khanlou, https://khanlou.com/2014/03/model-view-whatever/" ] }, { "cell_type": "markdown", - "id": "b3922022", + "id": "b646fbdc", "metadata": { "slideshow": { "slide_type": "notes" @@ -490,7 +492,7 @@ }, { "cell_type": "markdown", - "id": "cb8540ca", + "id": "c1ea166a", "metadata": { "slideshow": { "slide_type": "subslide" @@ -499,12 +501,12 @@ "source": [ "### Breakout Exercise: 🖉 MVA Application Examples from your Work\n", "\n", - "Think of some other examples from your work or life where MVA architecture may be suitable and discuss these with your fellow learners. Keep it brief (about 1 minute per person)." + "Think of some other examples from your work or otherwise where MVA architecture may be suitable and discuss these with your fellow learners. Keep it brief (about 1 minute per person)." ] }, { "cell_type": "markdown", - "id": "3d9c5aa3", + "id": "5925011e", "metadata": { "slideshow": { "slide_type": "notes" @@ -517,140 +519,398 @@ }, { "cell_type": "markdown", - "id": "09c563d5", + "id": "86a110f8", + "metadata": { + "slideshow": { + "slide_type": "slide" + } + }, + "source": [ + "## Virtual Environments For Software Development\n" + ] + }, + { + "cell_type": "markdown", + "id": "f1baab59", "metadata": { "slideshow": { "slide_type": "notes" } }, "source": [ - "# [Virtual Environments For Software Development](http://0.0.0.0:4000/03-virtual-environments/index.html)\n", - "\n", - "- Switch to terminal, but follow the notes here\n", + "- Switch to terminal and the directory of the example project at its initial commit\n", + " - Make sure you don't have a virtual environment activated, and preferably no numpy or matplotlib in your system python installation. If you do, create a fresh virtual environment that doesn't have these packages.\n", "- Try to run the analysis script from the command line: `python3 inflammation-analysis.py`\n", " - If you are in a clean Python installation, this should throw a `ModuleNotFoundError` which proves we have some external dependencies that are not installed and we need to get through a package manager\n", " - Depending on what learners have in their `PYTHONPATH` and site packages for their current default environment, they may or may not have success with this command\n", " - Take a look at the top of the views file to see the other dependencies: `head inflammation/views.py`\n", "- Before jumping to install matplotlib and numpy, it is worth a thought about other projects we might be currently be working on or in the future\n", - " - what if they have a requirement for a different version of numpy or matplotlib? or a different python version?\n", + " - what if they have a requirement for a different version of numpy or matplotlib? or a different python version? how are you going to share your project with collaborators and make sure they have the correct dependencies?\n", " - in general, each project is going to have its own unique configuration and set of dependencies\n", - " - to solve this, we set up a virtual environment for each project, containing a specific python version and set of libraries that won't interact with others on the system\n", - "- TODO create more notes about virtual envs and package managers\n", - "- Get learners for follow content from \"Creating a `venv` Environment\" to \"Exporting/Importing an Environment with `pip`\"\n", - " - remember to use sticky notes for status\n", - "- Does anyone have opinions on the naming of a virtual environment folder?\n", - "- And important thing to note with `venv` is that you can only ever use the system version of python with it\n", - " - So, be mindful that if there is an update of your system installation then your virtual environment will stop working, and you will need to get rid of it and create a new one\n", - " - this is the process to do that:\n", - " ```bash\n", - " rm -r venv/\n", - " python3 -m venv venv\n", - " pip install #this is probably one of the best arguments for maintaing a requirements.txt\n", - " ```\n", - "- Now, onto the content about exporting/importing an environment\n", - " - I think there are actually two scenarios here:\n", - " 1. If you are providing a python application (i.e. building and deploying something) or doing a project that is a scientific analysis, then it is fine to pin your dependencies as detailed here in a `requirements.txt`\n", - " 2. If you are providing a reusable library (i.e. one that might be called from someone else's code or another library) then pinning can be overly restrictive and cause issues for package managers, and it is considered bad practice to pin your dependencies like this\n", - " - Instead, you should specify loose dependency requirements in the `install_requires=[...]` metadata of `setup.py`. A full setup.py project is outside the scope of this course, but there are many good resources on this.\n", - " - \n", - " - \n", - " - and if you want a template for Python projects that keeps `requirements.txt` and `install_requires` synced: \n", - " - In general, I would recommend against pinning unless necessary\n", - "- Get learners to practice exporting, then deleting their exising virtual env, the recreating it with the requirements.txt file\n", - "- Live code the \"Running Python Scripts From Command Line\"\n", - " - confirm everyone gets the same error\n", - "- TODO a note about environment management for other languages\n", - " - Ask John and Kristian about C++\n", - " - Fortran???\n", - " - The \"nuclear\" option is to develop in a Docker container and specify the environment with a Dockerfile\n", - " - However, this might not be possible for a variety of reasons: performance and developing on a cluster" + " - to solve this in python, we set up a virtual environment for each project, containing a specific python version and set of libraries that won't interact with others on the system\n", + " - it can be thought of like an isolated partial installation of Python specifically for your project" ] }, { "cell_type": "markdown", - "id": "86faec44", + "id": "64658958", + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, + "source": [ + "### Tools for Dependency Management\n", + "\n", + "- For creating and managing virtual environments: `venv`\n", + "- For installing dependencies in those environments: `pip`" + ] + }, + { + "cell_type": "markdown", + "id": "3439af1a", + "metadata": { + "slideshow": { + "slide_type": "notes" + } + }, + "source": [ + "- `venv` comes standard in `Python 3.3+` and is the main advantage for its use\n", + " - however, important thing to note with `venv` is that you can only ever use the system version of python with it (e.g. if you have Python 3.8 on your system, you can only ever create an virtual environment with Python 3.8). Most of the time this isn't a problem, but if you are in dire need of a particular Python version, then there are other tools that can do that job (next slide).\n", + " - Another consequence is that if there is an update of your system installation then your virtual environment will stop working, and you will need to get rid of it and create a new one (more on that later)\n", + "- `pip` stands for \"Pip Installs Packages\" and it queries the Python Package Index (PyPI) to install dependencies\n", + " - it is ubiquitous and compatible with all Python distributions" + ] + }, + { + "cell_type": "markdown", + "id": "63843c2a", + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, + "source": [ + "### Lots of other tools...\n", + "\n", + "
" + ] + }, + { + "cell_type": "markdown", + "id": "0b362960", "metadata": { "slideshow": { "slide_type": "notes" } }, "source": [ - "# [Integrated Development Environments](http://0.0.0.0:4000/13-ides/index.html)\n", + "- there are plenty of other tools out there that manage Python environments, and it can become messy\n", + "- worth a note is Anaconda which supplies `conda`\n", + " - `conda` is both a package manager and virtual environment manager, and it can install non-Python packages\n", + " - this has made it popular in a number of scientific settings; however, due to licensing ambiguity, we advise against the Anaconda distributed version\n", + " - there is an open source fork called `miniforge` that you might consider if your project has a lot of non-Python dependencies" + ] + }, + { + "cell_type": "markdown", + "id": "977e550e", + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, + "source": [ + "### Breakout Exercise: 🖉 Creating a `venv` Environment\n", "\n", + "Read through and follow along until the end of the episode page." + ] + }, + { + "cell_type": "markdown", + "id": "0c6ac37c", + "metadata": { + "slideshow": { + "slide_type": "notes" + } + }, + "source": [ + "- send into breakout rooms to do work and read for about 15 minutes\n", + "- remember they should clear their status and use the green check when they are done\n", + "- Checks at the end of the breakout\n", + " 1. Did everyone get the error when trying to run the `inflammation-analysis.py` script?\n", + " 2. A comment about exporting/importing an environment\n", + " - I think there are actually two scenarios here:\n", + " 1. If you are providing a python application (i.e. building and deploying something) or doing a project that is a scientific analysis, then it is fine to pin your dependencies as detailed here in a `requirements.txt`\n", + " 2. If you are providing a reusable library (i.e. one that might be called from someone else's code or another library) then pinning can be overly restrictive and cause issues for package managers, and it is considered bad practice to pin your dependencies like this\n", + " - Instead, you should specify loose dependency requirements in the `install_requires=[...]` metadata of `setup.py`. A full setup.py project is outside the scope of this course, but there are many good resources on this.\n", + " - There are some links in the shared document that discuss this further\n", + " - \n", + " - \n", + " - and if you want a template for Python projects that keeps `requirements.txt` and `install_requires` synced: \n", + " - In general, I would recommend against pinning unless necessary" + ] + }, + { + "cell_type": "markdown", + "id": "dca5f4b1", + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, + "source": [ + "### Need to recreate your virtual environment?\n", + "\n", + "```bash\n", + "rm -r venv/\n", + "python3 -m venv venv\n", + "source venv/bin/activate\n", + "pip install \n", + "# or\n", + "pip install -r requirements.txt # great reason to have this file\n", + "\n", + "```" + ] + }, + { + "cell_type": "markdown", + "id": "d37977cf", + "metadata": { + "slideshow": { + "slide_type": "notes" + } + }, + "source": [ + "- this should be in the shared document as well" + ] + }, + { + "cell_type": "markdown", + "id": "e95acf85", + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, + "source": [ + "### Dependency Management in Other Languages\n", + "\n", + "- Each will have its own way of handling this, and it will also depend on _where_ you are doing your development\n", + "- The _coverall_ option these days is to develop in a Docker container (or relevant analogue)\n", + " - The `Dockerfile` codifies the dependencies and setup for your project\n", + "- If you are on a cluster, then you might be familiar with the `module` command\n", + " - This allows you to get different versions of libraries without installing them yourself (and indeed, because you don't have permission to install them)\n", + " - Spack and Easy Build are also quite popular package management tools for HPC\n", + "- C++ TODO\n", + "- Fortran TODO" + ] + }, + { + "cell_type": "markdown", + "id": "804c8558", + "metadata": { + "slideshow": { + "slide_type": "slide" + } + }, + "source": [ + "## Integrated Development Environments\n", + "\n", + "
\n" + ] + }, + { + "cell_type": "markdown", + "id": "86faec44", + "metadata": { + "slideshow": { + "slide_type": "notes" + } + }, + "source": [ "- Most of us probably started out programming with a simple text editor and ran our programs from the command line with a compiler or interpreter\n", " - This is fine to start off, but as our projects become more complex with more files and configurations, it natural that the tools we use to develop need to evolve as well\n", " - Enter the Integrated Development Environment (IDE)\n", "- Preference for Code Editors and IDEs is one of the more contentious and strongly felt topics among software developers, but the bottom line is that if a tool works for you and helps you be productive, then it is absolutely fine to use that tool\n", " - But again, for the practicalities of this course, the decision to use PyCharm has been made\n", - " - If you are comfortable enough in another IDE or code editor to get the functionality demonstrated in the content below, then please feel free to use that tool here, but this is a disclaimer that we cannot promise to resolve any issues you have, and if these issues are holding the group up then we will need to move on\n", - "- TODO in the intro email, I should make it clear that if they want to use a different IDE, then they should read this section in advance and make sure that they can set up analogous functionality in their IDE\n", - "- Let learners read through and try out content from \"Using the PyCharm IDE\" (~ 30mins -- I think this could be less, so poll learners after 20 minutes)\n", - " - Should this be done in breakout rooms? It is probably fine that this is a solo portion of the course, and if learners have trouble then a helper can take them into a breakout room\n", - " - Encourage learners to try out the features that are being discussed and don't worry about making modifications to their code since it is under version control it will be easy to reset any changes\n", - " - Reinforce that we won't be using the version control interface of PyCharm, but it is a perfectly useable feature, and again this comes down to preference\n" + " - If you are comfortable enough in another IDE or code editor to get the functionality demonstrated in the content below, then please feel free to use that tool here, but this is a disclaimer that we cannot promise to resolve any issues you have, and if these issues are holding the group up then we will need to move on" ] }, { "cell_type": "markdown", - "id": "a3370700", + "id": "788be096", + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, + "source": [ + "### Breakout Exercise: 🖉 Using the PyCharm IDE" + ] + }, + { + "cell_type": "markdown", + "id": "5b2e42bd", "metadata": { "slideshow": { "slide_type": "notes" } }, "source": [ - "# [Collaborative Software Development Using Git and GitHub](http://0.0.0.0:4000/14-collaboration-using-git/index.html)\n", - "\n", - "- Walk through this image as a Git Refresher:\n", - "\n", - "![](../fig/git-lifecycle.png)\n", + "- Send learners into breakout rooms to read through and try out content from \"Using the PyCharm IDE\" (~ 30mins, but could be less, so poll helpers after 20 minutes to get a status check from the rooms)\n", + " - Remind to use status green check when done (or red x if having trouble)\n", + " - Encourage learners to try out the features that are being discussed and don't worry about making modifications to their code since it is under version control it will be easy to reset any changes\n", + " - Reinforce that we won't be using the version control interface of PyCharm, but it is a perfectly useable feature, and again this comes down to preference" + ] + }, + { + "cell_type": "markdown", + "id": "50a0ffbf", + "metadata": { + "slideshow": { + "slide_type": "slide" + } + }, + "source": [ + "## Collaborative Software Development Using Git and GitHub\n", "\n", + "
\n", + "
\n", + "
\n" + ] + }, + { + "cell_type": "markdown", + "id": "25f0bdb5", + "metadata": { + "slideshow": { + "slide_type": "notes" + } + }, + "source": [ + "- Git is the de facto tool for version control in software development\n", + " - we should all be familiar with the time machine magic of git\n", + " - however, to call it just a version control tool misses the fact that what git really does is facilitate non-linear and distributed development collaboration on software projects\n", + "- Walk through this image as a Git refresher\n", "- Do a poll to see if everyone is comfortable with all of the operations and terminology in that diagram\n", - " - allow for text entry for any terms that are uncertain\n", - " - Go into more depth on the terms that come up\n", - "\n", + " - Ask any uncertain terms to be put into the chat or shared document\n", + " - Go into more depth on the terms that come up" + ] + }, + { + "cell_type": "markdown", + "id": "f313e8ad", + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, + "source": [ + "### Breakout Exercise: 🖉 Checking in Changes to Our Project" + ] + }, + { + "cell_type": "markdown", + "id": "11be5ff0", + "metadata": { + "slideshow": { + "slide_type": "notes" + } + }, + "source": [ "- Get learners to independently go through the section \"Checking-in Changes to Our Project\" (~ 10 minutes)\n", " - note that SSH keys are also an equally valid (and now equally convenient) form of authentication with GitHub\n", - " - perhaps dig up a resource on this\n", - " - for the token, this seems to be the only resource that is actually needed: https://www.edgoad.com/2021/02/using-personal-access-tokens-with-git-and-github.html\n", - " - TODO perhaps suggest that this is the resource they lead with in the course content and say that users should follow it through; also, to prevent link rot it might be worthwhile to pull these instructions into the course itself\n", - " - for learners, remind them that they will need to copy the access token somewhere on their computer; if they use a password manager, consider making a new entry for this token; also, there are instructions to cache their token with the git cli, and that will make this more convenient since they will not need to enter the token with every git operation that communicates with GitHub\n", + " - for the token, this seems to be the only resource that is actually needed: https://www.edgoad.com/2021/02/using-personal-access-tokens-with-git-and-github.html (put this in shared document)\n", + " - Remind learners that they will need to copy the access token somewhere on their computer; if they use a password manager, consider making a new entry for this token; also, there are instructions to cache their token with the git cli, and that will make this more convenient since they will not need to enter the token with every git operation that communicates with GitHub" + ] + }, + { + "cell_type": "markdown", + "id": "572be8b1", + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, + "source": [ + "### Git Branches\n", "\n", + "
" + ] + }, + { + "cell_type": "markdown", + "id": "a3370700", + "metadata": { + "slideshow": { + "slide_type": "notes" + } + }, + "source": [ "- Git branches\n", - " - saying branches are versions of our code, while technically correct, is somewhat loose language and prone to potential errors\n", - " - TODO I think the term \"version\" should be reserved for versions of the code that are released; raise an issue about this\n", " - branches are actually just a pointer to a commit, and that commit _can_ (but doesn't have to) define a distinct or divergent commit history of our main branch\n", - " - Talk through this image:\n", - " ![](../fig/git-feature-branch.svg)\n", + " - this allows developers to take \"copies\" of the code and make their own modifications without making changes to original nor affecting the commit history of the main branch (so others won't see the changes there until they are merged)\n", + " - talk through the image\n", " - the best practice is to use a new branch for each separate and self-contained unit/piece of work you want to add to the project. This unit of work is also often called a feature and the branch where you develop it is called a feature branch. Each feature branch should have its own meaningful name - indicating its purpose (e.g. “issue23-fix”). If we keep making changes and pushing them directly to main branch on GitHub, then anyone who downloads our software from there will get all of our work in progress - whether or not it’s ready to use! So, working on a separate branch for each feature you are adding is good for several reasons:\n", - "\n", " - it enables the main branch to remain stable while you and the team explore and test the new code on a feature branch,\n", " - it enables you to keep the untested and not-yet-functional feature branch code under version control and backed up,\n", " - you and other team members may work on several features at the same time independently from one another,\n", " - if you decide that the feature is not working or is no longer needed - you can easily and safely discard that branch without affecting the rest of the code.\n", - "\n", - "\n", "- Something missing from this section is a mention that a multi-person project, even if not external facing or with no users other than the developers, should have some record or agreement of how branching will work, and some document telling potential contributors how they can submit contributions through pull requests, usually in a `CONTRIBUTING.md` file.\n", - " - e.g. contributors fork you project, then work in their own feature branch, and when tested, they submit a PR to the *develop* branch of the upstream project\n", - " \n", - "- Get learners to go through the remainder of the content from \"Creating Branches\" onwards (~ 15 minutes)" + " - e.g. contributors fork you project, then work in their own feature branch, and when tested, they submit a PR to the *develop* branch of the upstream project" ] }, { "cell_type": "markdown", - "id": "93de7a62", + "id": "2b370aa6", + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, + "source": [ + "### Breakout Exercise: 🖉 Creating Branches" + ] + }, + { + "cell_type": "markdown", + "id": "7a916ae8", "metadata": { "slideshow": { "slide_type": "notes" } }, "source": [ - "# [Python Coding Conventions](http://0.0.0.0:4000/15-coding-conventions/index.html)\n", - "\n", - "- we now have all the tools to develop code in this course, but there is one further consideration about how these tools will support and guide our creation of code\n", + "- Get learners to go through the remainder of the content from \"Creating Branches\" onwards (~ 15 minutes)" + ] + }, + { + "cell_type": "markdown", + "id": "697e7fff", + "metadata": { + "slideshow": { + "slide_type": "slide" + } + }, + "source": [ + "## Python Coding Conventions\n", "\n", "> \"Any fool can write code that a computer can understand. Good programmers write code that humans can understand.” — Martin Fowler\n", "\n", + "- Coding _style_ is one factor that makes our code more understandable\n", + "- Consistency is key" + ] + }, + { + "cell_type": "markdown", + "id": "9d198782", + "metadata": { + "slideshow": { + "slide_type": "notes" + } + }, + "source": [ "- one of the main features of whether code is understandable is whether it follows a consistent *style*\n", "- *style* encompasses but is not limited to\n", " - cleanly and consistently formatted\n", @@ -659,29 +919,91 @@ "- the style you use for your code will vary depending on the language and what your team has agreed upon\n", " - in order to help with implementing a consistent style, style guides or sets of conventions are used\n", " - these can be agreed upon by colleagues or communities\n", - " - the important point is this: make sure whatever sytle you choose that it is consistent **within** a project, and if possible also across related projects\n", + " - the important point is this: make sure whatever sytle you choose that it is consistent **within** a project, and if possible also across related projects" + ] + }, + { + "cell_type": "markdown", + "id": "f7e5df45", + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, + "source": [ + "### Style in Different Languages and Tools\n", + "\n", + "- Python: PEP8\n", + " - `black`, `flake8`, `pylint`, etc...\n", + "- C++: no language-wide consensus\n", + " - `clang-format` is widely used for enforcing formatting, and there are built-in presets for existing conventions followed by Google, LLVM, etc. Project specific settings made in a `.clang-format` file.\n", + " - `cpplint` is another option\n", + "- Fortran: no language-wide consensus\n", + " - some tools for VSCode\n", + " - recent revival and there is a push towards modernising (best practices on new website)" + ] + }, + { + "cell_type": "markdown", + "id": "93de7a62", + "metadata": { + "slideshow": { + "slide_type": "notes" + } + }, + "source": [ "- Unless you have particular requirements, it is best to go with a sytle guide that has the majority consensus for a particular language (albeit sometimes this won't exist, so choose what seems best)\n", " - In Python, this is PEP8\n", - " - C++\n", + " - In PyCharm, adherance to PEP8 will automatically be checked and violations flagged for fixing (demonstrate this live)\n", + " - It is worth mentioning that at a project level, not everyone will be using the same IDE, so it is better to use an independent tool called a linter that will enforce these style requirements\n", + " - `black` is a popular but harsh and opinionated tool that can take some getting used to\n", + " - `flake8` and `pylint` a bit more conventional -> PyCharm can be modified to use one of these directly (outside of the scope of this course)\n", + " - C++ doesn't have a language-wide convention for style\n", " - [`clang-format`](https://clang.llvm.org/docs/ClangFormat.html) is widely used for enforcing formatting, and there are [built-in presets](https://clang.llvm.org/docs/ClangFormatStyleOptions.html#configurable-format-style-options) for existing conventions followed by Google, LLVM, etc. Project specific settings made in a `.clang-format` file.\n", " - our guide on C++ for VSCode recommends cpplint: https://intranet.ccfe.ac.uk/software/guides/vscode-cpp.html\n", " - Some other useful resources that cover a broader scope than just style and formatting are [Google's C++ Style Guide](https://google.github.io/styleguide/cppguide.html#Formatting) and the [C++ Core Guidelines by Bjarne Stroustrup (the creator of C++)](https://github.com/isocpp/CppCoreGuidelines/blob/master/CppCoreGuidelines.md)\n", - " - Fortran\n", + " - Fortran also doesn't have a language-wide convention\n", " - we have a great guide on tooling in VSCode: https://intranet.ccfe.ac.uk/software/guides/vscode-fortran.html\n", - " - this is a good online resource: https://fortran-lang.org/learn/best_practices\n", - "\n", - "- What IDEs help with: set it and forget it!\n", - " - In PyCharm, adherance to PEP8 will automatically be checked and violations flagged for fixing (demonstrate this live)\n", - " - It is worth mentioning that at a project level, not everyone will be using the same IDE, so it is better to use an independent tool called a linter that will enforce these style requirements\n", - " - `black` is a popular but harsh and opinionated tool that can take some getting used to\n", - " - `flake8` and `pylint` a bit more conventional -> PyCharm can be modified to use one of these directly (outside of the scope of this course)\n", - "\n", + " - this is a good online resource: https://fortran-lang.org/learn/best_practices" + ] + }, + { + "cell_type": "markdown", + "id": "81987c01", + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, + "source": [ + "### Breakout Exercise: 🖉 Indentation" + ] + }, + { + "cell_type": "markdown", + "id": "4b869b33", + "metadata": { + "slideshow": { + "slide_type": "notes" + } + }, + "source": [ "- Split learners into breakout rooms and get them to work through content from \"Indentation\" section (~ 30 minutes)\n", " - poll/status check at the end\n", - "- Some comments after exercises\n", - " - There are many different docstring formats, and I tend to not like the Sphynx default very much. Google or Numpy style docstrings much more readable. TODO raise this as an amendment?\n", - " - TODO for the exercise to improve the docstrings, no mention is made of the fact that the module docstring should include a list of the functions in the module. This is another valid improvement.\n", - " \n", + "- Some comments after the exercises\n", + " - There are many different docstring formats, and I tend to not like the Sphynx default very much. Google or Numpy style docstrings much more readable.\n", + " - For the exercise to improve the docstrings, no mention is made of the fact that the module docstring should include a list of the functions in the module. This is another valid improvement. (Advance to next slide to see this)" + ] + }, + { + "cell_type": "markdown", + "id": "4472f7e6", + "metadata": { + "slideshow": { + "slide_type": "fragment" + } + }, + "source": [ "```python\n", "\"\"\"\n", "Functions:\n", From 08cb4246444ca48f27c8ac336efbc0bf46c15de6 Mon Sep 17 00:00:00 2001 From: Matthew Bluteau Date: Fri, 21 Jan 2022 18:04:30 +0000 Subject: [PATCH 31/58] Create initial slides for section 2 --- slides/section_2_ensuring_correctness.ipynb | 227 ++++++++++++++++++++ 1 file changed, 227 insertions(+) create mode 100644 slides/section_2_ensuring_correctness.ipynb diff --git a/slides/section_2_ensuring_correctness.ipynb b/slides/section_2_ensuring_correctness.ipynb new file mode 100644 index 000000000..cd6093e1e --- /dev/null +++ b/slides/section_2_ensuring_correctness.ipynb @@ -0,0 +1,227 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "id": "63081167", + "metadata": { + "slideshow": { + "slide_type": "slide" + } + }, + "source": [ + "# Section 2: Ensuring Correctness of Software at Scale\n", + "\n", + "
\n", + "
\n", + "
" + ] + }, + { + "cell_type": "markdown", + "id": "bde031f2", + "metadata": { + "slideshow": { + "slide_type": "notes" + } + }, + "source": [ + "- Probably the most important thing to take away from this course" + ] + }, + { + "cell_type": "markdown", + "id": "69449048", + "metadata": { + "slideshow": { + "slide_type": "slide" + } + }, + "source": [ + "## Automatically Testing your Software\n", + "\n", + "- Big questions: how can we be sure the code we have written is correct, produces accurate results, and is of good quality?" + ] + }, + { + "cell_type": "markdown", + "id": "ea352e6c", + "metadata": { + "slideshow": { + "slide_type": "fragment" + } + }, + "source": [ + "> **testing:** The process of operating a system or component under specified conditions, observing or recording the results, and making an evaluation of some aspect of the system or component\n", + "> — IEEE Standard Glossary of Software Engineering" + ] + }, + { + "cell_type": "markdown", + "id": "ba469861", + "metadata": { + "slideshow": { + "slide_type": "notes" + } + }, + "source": [ + "- Big questions: how can we be sure the code we have written is correct, produces accurate results, and is of good quality?\n", + " - This is the domain of Verification and Validation (V&V), in which testing plays an important role\n", + " \n", + "> **testing:** The process of operating a system or component under specified conditions, observing or recording the results, and making an evaluation of some aspect of the system or component\n", + "> — IEEE Standard Glossary of Software Engineering\n", + "- i.e. inferring the _behaviour_ of our code through artifacts and making sure that matches what we expect or is required" + ] + }, + { + "cell_type": "markdown", + "id": "524d5133", + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, + "source": [ + "### Types of Testing\n", + "\n", + "- Types of testing\n", + " - Manual testing\n", + " - Automated testing\n", + " - Unit tests\n", + " - Funcitonal or integration tests\n", + " - Regression tests" + ] + }, + { + "cell_type": "markdown", + "id": "fc9ced39", + "metadata": { + "slideshow": { + "slide_type": "notes" + } + }, + "source": [ + "- Types of testing\n", + " - Manual testing: an important part of exploratory research\n", + " - Automated testing: codify the expected behaviour of our software such that verification can happen repeatedly without user inspection\n", + " - Unit tests: tests for small function units of our code (i.e functions, class methods, class objects)\n", + " - Funcitonal or integration tests: work at a higher level, and test functional paths through your code, e.g. given some specific inputs, a set of interconnected functions across a number of modules (or the entire code) produce the expected result.\n", + " - Regression tests: compare the current output of your code (usually an end-to-end result) to make sure it matches previous output that you don't want to change\n", + "- there was a question that came in about drift in regression tests, and the short answer with how to deal with this is first determining whether the output you are tracking is actually an invariant (or something close to an invariant)\n", + " - If not, then you will necessarily need to allow for relative proximity, but then you might question whether this is a good long term output to base your regression test on.\n", + " - In our area and science broadly, invariants tend to be some observable or experimental physical results, so if you test isn't based on that, you are probably going to have a tough time." + ] + }, + { + "cell_type": "markdown", + "id": "88fef427", + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, + "source": [ + "### Breakout Exercise: 🖉 Set Up a New Feature Branch for Writing Tests" + ] + }, + { + "cell_type": "markdown", + "id": "1fd95e55", + "metadata": { + "slideshow": { + "slide_type": "notes" + } + }, + "source": [ + "- Breakout rooms from \"Set Up a New Feature Branch for Writing Tests\" (~45 minutes)\n", + "- status check\n", + "- comments from content\n", + " - FRUIT doesn't look very active, so I would recommend pFUnit for Fortran instead." + ] + }, + { + "cell_type": "markdown", + "id": "3bb0ac4d", + "metadata": { + "slideshow": { + "slide_type": "notes" + } + }, + "source": [ + "# [Scaling Up Unit Testing](http://0.0.0.0:4000/22-scaling-up-unit-testing/index.html)\n", + "\n", + "- in this section:\n", + " - parameterise our tests (i.e. run through multiple sets of parameters to test the same function, without writing a new test function for each parameter/data case)\n", + " - check how much of our code is covered by tests\n", + "- send off learners into breakout rooms again (~ 15 minutes)\n", + "- Limits to testing\n", + " - there are some good points there about getting value from testing\n", + " - what most researchers think: \n", + " - \"Peer review of my paper will be the test\"\n", + " - \"Looking at a graph is enough\"\n", + " - \"I don't have time to implement a clunky testing framework\"\n", + " - it hints that there is a spectrum between throwaway code that doesn't need to be tested and library code used by hundreds in a community that requires extensive testing suites with more than just unit tests\n", + " - where your particular code lies is a tricky question to answer sometimes, but a good rule of thumb is that if there is a chance that someone else will be using it, then you should give some thought to tests\n", + " - testing has a demonstrably positive impact upon the design on your code\n", + " - it must of course also be acknowledged that testing is not the answer to everything, and that it can't substitute for good manual and acceptance testing" + ] + }, + { + "cell_type": "markdown", + "id": "6d74d98f", + "metadata": { + "slideshow": { + "slide_type": "notes" + } + }, + "source": [ + "# [Continuous Integration for Automated Testing](http://0.0.0.0:4000/23-continuous-integration-automated-testing/index.html)\n", + "\n", + "- we can run tests on our machine, but how do we know they will work on someone elses machine without getting them to also pull our changes and run the tests? enter continuous integration. off you go!\n", + "- breakout rooms for ~ 45 mins\n", + "- comments\n", + " - GitLab has very similar functionality and there are plenty of resources on our internal GitLab about this (add link?)\n", + " - TODO What about data access on the GitLab runners? Or if you are on GitHub? Pose this to RSE team\n", + "- status check\n", + "- TODO the matrix of Python version uses 3.7 and 3.8, but the previous single Python version was 3.9. Should try to reconcile these." + ] + }, + { + "cell_type": "markdown", + "id": "bd823b59", + "metadata": { + "slideshow": { + "slide_type": "notes" + } + }, + "source": [ + "# Diagnosing Issues and Improving Robustness\n", + "\n", + "- Split learners into breakout rooms (~50 mins although I think could be less, take a status check early)\n", + "\n", + "- TODO where do the test results come from for the `patient_normalise` test? There should be some indication that a manual calculation might have been done. This is a crucial question that many researchers have: where to get and/or generate test data.\n" + ] + } + ], + "metadata": { + "celltoolbar": "Slideshow", + "kernelspec": { + "display_name": "Python 3 (ipykernel)", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.8.10" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} From f01de3816fa02e0c4ab841b254556b95e7eab644 Mon Sep 17 00:00:00 2001 From: Matthew Bluteau Date: Mon, 24 Jan 2022 12:33:01 +0000 Subject: [PATCH 32/58] Complete slides for Section 2 --- slides/section_2_ensuring_correctness.ipynb | 184 +++++++++++++++++--- 1 file changed, 159 insertions(+), 25 deletions(-) diff --git a/slides/section_2_ensuring_correctness.ipynb b/slides/section_2_ensuring_correctness.ipynb index cd6093e1e..fea90c1a9 100644 --- a/slides/section_2_ensuring_correctness.ipynb +++ b/slides/section_2_ensuring_correctness.ipynb @@ -2,7 +2,7 @@ "cells": [ { "cell_type": "markdown", - "id": "63081167", + "id": "8f4f88a1", "metadata": { "slideshow": { "slide_type": "slide" @@ -30,7 +30,7 @@ }, { "cell_type": "markdown", - "id": "69449048", + "id": "615283f5", "metadata": { "slideshow": { "slide_type": "slide" @@ -44,7 +44,7 @@ }, { "cell_type": "markdown", - "id": "ea352e6c", + "id": "134bb0de", "metadata": { "slideshow": { "slide_type": "fragment" @@ -74,7 +74,7 @@ }, { "cell_type": "markdown", - "id": "524d5133", + "id": "7af208f9", "metadata": { "slideshow": { "slide_type": "subslide" @@ -93,7 +93,7 @@ }, { "cell_type": "markdown", - "id": "fc9ced39", + "id": "4fd4d5c1", "metadata": { "slideshow": { "slide_type": "notes" @@ -113,7 +113,7 @@ }, { "cell_type": "markdown", - "id": "88fef427", + "id": "c540e804", "metadata": { "slideshow": { "slide_type": "subslide" @@ -125,7 +125,7 @@ }, { "cell_type": "markdown", - "id": "1fd95e55", + "id": "79ce7384", "metadata": { "slideshow": { "slide_type": "notes" @@ -140,20 +140,68 @@ }, { "cell_type": "markdown", - "id": "3bb0ac4d", + "id": "4105706b", + "metadata": { + "slideshow": { + "slide_type": "slide" + } + }, + "source": [ + "## Scaling Up Unit Testing\n", + "\n", + "1. Parameterise our tests to reduce repetition\n", + "2. Check the test coverage of our code" + ] + }, + { + "cell_type": "markdown", + "id": "8d3966c8", "metadata": { "slideshow": { "slide_type": "notes" } }, "source": [ - "# [Scaling Up Unit Testing](http://0.0.0.0:4000/22-scaling-up-unit-testing/index.html)\n", + "1. Parameterise our tests\n", + " - from the previous example, you may have noticed that if you want to run a test with the same logic but different input data, you will need to create a new test function that is mostly the same\n", + " - there is a convenient way to avoid this in pytest called _parameterisation_, allowing a single test function to run through a variety of test input cases\n", + " - very powerful to improve the coverage of the parameter space that you code might be dealing with\n", + "2. Check the test coverage\n", + " - on a related note, it is important to see how much of our code is \"covered\" (i.e. verified) by our tests so that we can get at least a relative idea of how the quality of our code is faring overtime, and where we should focus testing efforts" + ] + }, + { + "cell_type": "markdown", + "id": "921d7af7", + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, + "source": [ + "### Breakout Exercise: 🖉 Parameterising Our Unit Tests\n", + "\n", + "Go through the whole content of this page. In the last 5-7 minutes, please think about the question:\n", + "\n", + "_Where can and might the input data and corresponding expected results come from for your code?_\n", "\n", - "- in this section:\n", - " - parameterise our tests (i.e. run through multiple sets of parameters to test the same function, without writing a new test function for each parameter/data case)\n", - " - check how much of our code is covered by tests\n", - "- send off learners into breakout rooms again (~ 15 minutes)\n", - "- Limits to testing\n", + "Record answers in the shared document. Feel free to discuss with your peers." + ] + }, + { + "cell_type": "markdown", + "id": "c0c83590", + "metadata": { + "slideshow": { + "slide_type": "notes" + } + }, + "source": [ + "- send learners into breakout rooms for ~ 20 minutes\n", + " - before sending, make sure they are clear on the discussion question\n", + " - status check\n", + "- check answers to question in shared document and briefly summarise\n", + "- comments about the limits of testing:\n", " - there are some good points there about getting value from testing\n", " - what most researchers think: \n", " - \"Peer review of my paper will be the test\"\n", @@ -161,44 +209,127 @@ " - \"I don't have time to implement a clunky testing framework\"\n", " - it hints that there is a spectrum between throwaway code that doesn't need to be tested and library code used by hundreds in a community that requires extensive testing suites with more than just unit tests\n", " - where your particular code lies is a tricky question to answer sometimes, but a good rule of thumb is that if there is a chance that someone else will be using it, then you should give some thought to tests\n", + " - some further thoughts here: https://bielsnohr.github.io/2021/11/29/iccs-part2-and-testing.html\n", " - testing has a demonstrably positive impact upon the design on your code\n", " - it must of course also be acknowledged that testing is not the answer to everything, and that it can't substitute for good manual and acceptance testing" ] }, { "cell_type": "markdown", - "id": "6d74d98f", + "id": "5f305784", + "metadata": { + "slideshow": { + "slide_type": "slide" + } + }, + "source": [ + "# Continuous Integration for Automated Testing\n", + "\n", + "
\n", + "
\n", + "\n", + "_How do we know our tests—and code in general—will work on other people's machines?_" + ] + }, + { + "cell_type": "markdown", + "id": "4c277018", "metadata": { "slideshow": { "slide_type": "notes" } }, "source": [ - "# [Continuous Integration for Automated Testing](http://0.0.0.0:4000/23-continuous-integration-automated-testing/index.html)\n", + "- How do we know our tests—and code in general—will work on other people's machines?\n", + " - the main answer these days is to use Continuous Integration.\n", + "- What is Continuous Integration?\n", + " - very loosely, it is an automated system that is triggered upon certain actions to your repository (like pushing or merging) and performs quality checks on your code (and nearly anything else you like too!)\n", + " - the key part is that this all happens on a remote \"virtual\" machine that is set up and torn down each time the tasks need to be performed, thus ensuring there are no idiosyncracies that arise because of our particular development environment\n", + " - in our case, we will be setting up CI to run our tests on the remote service provided by GitHub called GitHub Actions" + ] + }, + { + "cell_type": "markdown", + "id": "6ee6feb6", + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, + "source": [ + "### Breakout Exercise: 🖉 Continuous Integration with GitHub Actions\n", "\n", - "- we can run tests on our machine, but how do we know they will work on someone elses machine without getting them to also pull our changes and run the tests? enter continuous integration. off you go!\n", + "Follow along to the bottom of the page." + ] + }, + { + "cell_type": "markdown", + "id": "2a28d6f1", + "metadata": { + "slideshow": { + "slide_type": "notes" + } + }, + "source": [ "- breakout rooms for ~ 45 mins\n", + "- status check\n", "- comments\n", " - GitLab has very similar functionality and there are plenty of resources on our internal GitLab about this (add link?)\n", - " - TODO What about data access on the GitLab runners? Or if you are on GitHub? Pose this to RSE team\n", - "- status check\n", - "- TODO the matrix of Python version uses 3.7 and 3.8, but the previous single Python version was 3.9. Should try to reconcile these." + " - you might notice that there is a slight discrepancy between the version numbers of Python that are used in the matrix\n", + " - don't worry about this too much, and just extend the Python version for the testing matrix to cover 3.9 as well" ] }, { "cell_type": "markdown", - "id": "bd823b59", + "id": "24896838", + "metadata": { + "slideshow": { + "slide_type": "slide" + } + }, + "source": [ + "# Diagnosing Issues and Improving Robustness" + ] + }, + { + "cell_type": "markdown", + "id": "8f3840f7", "metadata": { "slideshow": { "slide_type": "notes" } }, "source": [ - "# Diagnosing Issues and Improving Robustness\n", - "\n", - "- Split learners into breakout rooms (~50 mins although I think could be less, take a status check early)\n", + "- already while you have been creating tests, you might have encountered errors while you are trying to write those tests, and it is not immediately obvious what is going on\n", + " - debugging offers a powerful technique for investigating in these situations, and more generally\n", + "- there will also be some content about defensive programming" + ] + }, + { + "cell_type": "markdown", + "id": "8c568e3c", + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, + "source": [ + "### Breakout Exercise: 🖉 Setting the Scene (for Debugging)\n", "\n", - "- TODO where do the test results come from for the `patient_normalise` test? There should be some indication that a manual calculation might have been done. This is a crucial question that many researchers have: where to get and/or generate test data.\n" + "Follow along to the bottom of the page." + ] + }, + { + "cell_type": "markdown", + "id": "bd823b59", + "metadata": { + "slideshow": { + "slide_type": "notes" + } + }, + "source": [ + "- split learners into breakout rooms (~50 mins although likely less, so take a status check early)\n", + "- status check" ] } ], @@ -220,6 +351,9 @@ "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.8.10" + }, + "rise": { + "theme": "solarized" } }, "nbformat": 4, From 3ee74f6ab5d9d7f720e2d62a5bb30e2cddf608ee Mon Sep 17 00:00:00 2001 From: Matthew Bluteau Date: Mon, 24 Jan 2022 18:03:39 +0000 Subject: [PATCH 33/58] Final tweaks before delivery of first two sections. --- slides/section_1_setting_up_environment.ipynb | 64 +++++++++++++++++-- slides/section_2_ensuring_correctness.ipynb | 50 +++++++++++++++ 2 files changed, 110 insertions(+), 4 deletions(-) diff --git a/slides/section_1_setting_up_environment.ipynb b/slides/section_1_setting_up_environment.ipynb index f7f49ed7d..a2ebfc8d9 100644 --- a/slides/section_1_setting_up_environment.ipynb +++ b/slides/section_1_setting_up_environment.ipynb @@ -169,7 +169,8 @@ " ✅ = all good | ❌ = not following or need help\n", " - sporadic polls\n", "- Questions at any time by raising hand ✋\n", - "- Some instruction with breakout rooms for independent study, exercises, and group activities" + "- Some instruction with breakout rooms for independent study, exercises, and group activities\n", + "- Take a break whenever you need it ☕" ] }, { @@ -517,6 +518,18 @@ "- helpers can kickstart the discussion if no one wants to start" ] }, + { + "cell_type": "markdown", + "id": "1c83fab3", + "metadata": { + "slideshow": { + "slide_type": "slide" + } + }, + "source": [ + "## ☕ 5 Minute Break ☕" + ] + }, { "cell_type": "markdown", "id": "86a110f8", @@ -701,9 +714,14 @@ " - The `Dockerfile` codifies the dependencies and setup for your project\n", "- If you are on a cluster, then you might be familiar with the `module` command\n", " - This allows you to get different versions of libraries without installing them yourself (and indeed, because you don't have permission to install them)\n", - " - Spack and Easy Build are also quite popular package management tools for HPC\n", - "- C++ TODO\n", - "- Fortran TODO" + " - Spack and Easy Build are also quite popular package management tools for HPC; Spack has virtual environments!\n", + "- C++\n", + " - CMake is an ubiquitous build tool and overlaps with dependency management\n", + " - Conan is a specific package manager for C++\n", + " - Spack also a good option\n", + "- Fortran\n", + " - Very nascent creation of the Fortran package manager (fpm) and probably more for modern Fortran\n", + " - Spack again" ] }, { @@ -764,6 +782,18 @@ " - Reinforce that we won't be using the version control interface of PyCharm, but it is a perfectly useable feature, and again this comes down to preference" ] }, + { + "cell_type": "markdown", + "id": "8da58fe5", + "metadata": { + "slideshow": { + "slide_type": "slide" + } + }, + "source": [ + "## ☕ 15 Minute Break ☕" + ] + }, { "cell_type": "markdown", "id": "50a0ffbf", @@ -885,6 +915,18 @@ "- Get learners to go through the remainder of the content from \"Creating Branches\" onwards (~ 15 minutes)" ] }, + { + "cell_type": "markdown", + "id": "4ecd4158", + "metadata": { + "slideshow": { + "slide_type": "slide" + } + }, + "source": [ + "## ☕ 5 Minute Break ☕" + ] + }, { "cell_type": "markdown", "id": "697e7fff", @@ -1014,6 +1056,20 @@ "\"\"\"\n", "```" ] + }, + { + "cell_type": "markdown", + "id": "def0e39b", + "metadata": { + "slideshow": { + "slide_type": "slide" + } + }, + "source": [ + "## 🕓 End of Section 1 🕓\n", + "\n", + "Please fill out the end-of-section survey!" + ] } ], "metadata": { diff --git a/slides/section_2_ensuring_correctness.ipynb b/slides/section_2_ensuring_correctness.ipynb index fea90c1a9..83a67234b 100644 --- a/slides/section_2_ensuring_correctness.ipynb +++ b/slides/section_2_ensuring_correctness.ipynb @@ -138,6 +138,18 @@ " - FRUIT doesn't look very active, so I would recommend pFUnit for Fortran instead." ] }, + { + "cell_type": "markdown", + "id": "aebf4fd8", + "metadata": { + "slideshow": { + "slide_type": "slide" + } + }, + "source": [ + "## ☕ 5 Minute Break ☕" + ] + }, { "cell_type": "markdown", "id": "4105706b", @@ -214,6 +226,18 @@ " - it must of course also be acknowledged that testing is not the answer to everything, and that it can't substitute for good manual and acceptance testing" ] }, + { + "cell_type": "markdown", + "id": "492ce011", + "metadata": { + "slideshow": { + "slide_type": "slide" + } + }, + "source": [ + "## ☕ 5 Minute Break ☕" + ] + }, { "cell_type": "markdown", "id": "5f305784", @@ -279,6 +303,18 @@ " - don't worry about this too much, and just extend the Python version for the testing matrix to cover 3.9 as well" ] }, + { + "cell_type": "markdown", + "id": "54ee2a67", + "metadata": { + "slideshow": { + "slide_type": "slide" + } + }, + "source": [ + "## ☕ 15 Minute Break ☕" + ] + }, { "cell_type": "markdown", "id": "24896838", @@ -331,6 +367,20 @@ "- split learners into breakout rooms (~50 mins although likely less, so take a status check early)\n", "- status check" ] + }, + { + "cell_type": "markdown", + "id": "91d1b9a1", + "metadata": { + "slideshow": { + "slide_type": "slide" + } + }, + "source": [ + "## 🕓 End of Section 2 🕓\n", + "\n", + "Please fill out the end-of-section survey!" + ] } ], "metadata": { From abce1e049ee1499a827fd2a63c5b4221382ae8e2 Mon Sep 17 00:00:00 2001 From: Matthew Bluteau Date: Tue, 25 Jan 2022 10:43:50 +0000 Subject: [PATCH 34/58] Add notes about arrangement of windows for instructor --- slides/README.md | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/slides/README.md b/slides/README.md index 8056453ae..e643610af 100644 --- a/slides/README.md +++ b/slides/README.md @@ -21,3 +21,25 @@ There are a few options for accessing these slides in a slideshow view. 3. A more involved option if you don't have an internet connection (this is the only instance I can see this option being useful) is to link the above command with your local reveal.js installation. I lost the page where this command is :( When the slides need to link to the course content, they assume the pages are hosted locally at `0.0.0.0:4000`. This is the default location where `make docker-serve` puts the website if you have build locally from this repo. The decision was made to link locally rather than too the live website to allow for local modifications of the content. + +## Screen Arrangement for Remote Delivery + +- Screen 1 + - if there is a size difference in your screens, this should be the largest one + - shared with participants + - web browser with jupyter-notebook for current section open, `alt-r` to get presentation view, then `t` to get presenter view window which should be put on screen 2 + - tab with course content page + - tab with GitHub repo of example project + - PyCharm with example project open + - Terminal with current directory in example project +- Screen 2 + - smaller, not shared + - terminal running jupyter-notebook server for slides + - presenter view (produced from going to presenter view above) + - Zoom window + - Web browser + - workshop website + - course content + - collaborative document + - any other resources you think you might need to refer to + - messaging app for communication with helpers From 466f0ff2769b9aa59953ae47c5ea269b93ac181b Mon Sep 17 00:00:00 2001 From: Matthew Bluteau Date: Fri, 28 Jan 2022 18:53:36 +0000 Subject: [PATCH 35/58] Minor edits from running first two sessions --- slides/section_1_setting_up_environment.ipynb | 7 +++++-- slides/section_2_ensuring_correctness.ipynb | 18 ++++++++++-------- 2 files changed, 15 insertions(+), 10 deletions(-) diff --git a/slides/section_1_setting_up_environment.ipynb b/slides/section_1_setting_up_environment.ipynb index a2ebfc8d9..b7404ed30 100644 --- a/slides/section_1_setting_up_environment.ipynb +++ b/slides/section_1_setting_up_environment.ipynb @@ -850,6 +850,7 @@ }, "source": [ "- Get learners to independently go through the section \"Checking-in Changes to Our Project\" (~ 10 minutes)\n", + " - stop before the \"Git Branches\" Section\n", " - note that SSH keys are also an equally valid (and now equally convenient) form of authentication with GitHub\n", " - for the token, this seems to be the only resource that is actually needed: https://www.edgoad.com/2021/02/using-personal-access-tokens-with-git-and-github.html (put this in shared document)\n", " - Remind learners that they will need to copy the access token somewhere on their computer; if they use a password manager, consider making a new entry for this token; also, there are instructions to cache their token with the git cli, and that will make this more convenient since they will not need to enter the token with every git operation that communicates with GitHub" @@ -1018,7 +1019,9 @@ } }, "source": [ - "### Breakout Exercise: 🖉 Indentation" + "### Breakout Exercise: 🖉 Indentation\n", + "\n", + "Start from this section heading and go to the end of the page." ] }, { @@ -1030,7 +1033,7 @@ } }, "source": [ - "- Split learners into breakout rooms and get them to work through content from \"Indentation\" section (~ 30 minutes)\n", + "- Split learners into breakout rooms and get them to work through content starting from \"Indentation\" section (~ 30 minutes) going to the end of the page\n", " - poll/status check at the end\n", "- Some comments after the exercises\n", " - There are many different docstring formats, and I tend to not like the Sphynx default very much. Google or Numpy style docstrings much more readable.\n", diff --git a/slides/section_2_ensuring_correctness.ipynb b/slides/section_2_ensuring_correctness.ipynb index 83a67234b..92b44f544 100644 --- a/slides/section_2_ensuring_correctness.ipynb +++ b/slides/section_2_ensuring_correctness.ipynb @@ -100,7 +100,7 @@ } }, "source": [ - "- Types of testing\n", + "- Types of (dynamic) testing\n", " - Manual testing: an important part of exploratory research\n", " - Automated testing: codify the expected behaviour of our software such that verification can happen repeatedly without user inspection\n", " - Unit tests: tests for small function units of our code (i.e functions, class methods, class objects)\n", @@ -120,7 +120,9 @@ } }, "source": [ - "### Breakout Exercise: 🖉 Set Up a New Feature Branch for Writing Tests" + "### Breakout Exercise: 🖉 Set Up a New Feature Branch for Writing Tests\n", + "\n", + "Start from this section heading and go to the end of the page." ] }, { @@ -132,7 +134,7 @@ } }, "source": [ - "- Breakout rooms from \"Set Up a New Feature Branch for Writing Tests\" (~45 minutes)\n", + "- Breakout rooms from the page section \"Set Up a New Feature Branch for Writing Tests\" (~45 minutes) until the end of the page\n", "- status check\n", "- comments from content\n", " - FRUIT doesn't look very active, so I would recommend pFUnit for Fortran instead." @@ -193,7 +195,7 @@ "source": [ "### Breakout Exercise: 🖉 Parameterising Our Unit Tests\n", "\n", - "Go through the whole content of this page. In the last 5-7 minutes, please think about the question:\n", + "Go through the whole content of this page starting from this section heading. In the last 5-7 minutes, please think about the question:\n", "\n", "_Where can and might the input data and corresponding expected results come from for your code?_\n", "\n", @@ -283,7 +285,7 @@ "source": [ "### Breakout Exercise: 🖉 Continuous Integration with GitHub Actions\n", "\n", - "Follow along to the bottom of the page." + "Follow along from this section heading to the bottom of the page." ] }, { @@ -295,7 +297,7 @@ } }, "source": [ - "- breakout rooms for ~ 45 mins\n", + "- breakout rooms (for ~ 45 mins) from this section heading to the bottom of the page\n", "- status check\n", "- comments\n", " - GitLab has very similar functionality and there are plenty of resources on our internal GitLab about this (add link?)\n", @@ -352,7 +354,7 @@ "source": [ "### Breakout Exercise: 🖉 Setting the Scene (for Debugging)\n", "\n", - "Follow along to the bottom of the page." + "Follow along from this section heading to the bottom of the page." ] }, { @@ -364,7 +366,7 @@ } }, "source": [ - "- split learners into breakout rooms (~50 mins although likely less, so take a status check early)\n", + "- split learners into breakout rooms (~50 mins although likely less, so take a status check early) starting from this section heading and going to the end of the page\n", "- status check" ] }, From 32254df634a5e84bc16c346cbaff478efe305e52 Mon Sep 17 00:00:00 2001 From: Matthew Bluteau Date: Fri, 28 Jan 2022 18:53:54 +0000 Subject: [PATCH 36/58] Final rough notes on sections 3 and 4 --- slides/rough_notes.ipynb | 175 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 175 insertions(+) diff --git a/slides/rough_notes.ipynb b/slides/rough_notes.ipynb index 73ab5a6b7..f526375bb 100644 --- a/slides/rough_notes.ipynb +++ b/slides/rough_notes.ipynb @@ -547,6 +547,181 @@ " 2. or put both of these files under a separate directory `library/` at the top level of the repo\n", " - There will probably be the temptation to inherit from the builtin `list` class when implementing `Library`. Subclassing from builtin types is generally a bad idea for a host of complex reasons. The most easily comprehensible is that by inheriting a builtin type, you inherit a lot of behaviour that you might not intend to have for your new class. On the flip side, it is also quite restrictive. Is a Library really just a list? We might decide to add other functionality, like opening hours, later on. How does that data fit into the definition of a list? Well, it doesn't. If you really want to inherit from something here, then the better approach is to use the `abc` (abstract base class) module in Python and pick something from there that gets you closer to your desired functionality." ] + }, + { + "cell_type": "markdown", + "id": "0fed3f2d", + "metadata": { + "slideshow": { + "slide_type": "notes" + } + }, + "source": [ + "## Functional Programming\n", + "\n", + "### What is a Function?\n", + "\n", + "- we have undoubtedly all written functions during our time programming, but this doesn't mean we have done \"functional\" style programming, so let's look at what that involves\n", + "- I think the question that will inevitably come up is when to use functional vs OO programming, and are the two mutually exclusive\n", + "- the other bit I would add to the functional programming style: it separates the functions from the data (i.e. data and behaviour are distinct entities, whereas in OO they are bundled together in the same object)\n", + "- remind learners that because this is focussed on the *what*, this is a declarative style\n", + "\n", + "### Pure Functions and Side Effects\n", + "\n", + "- make sure there is some discussion around the \"Pure Functions\" Exercise, although I'm not sure I need to make this explicit, since it seems there is lots of discussion going on, and people feel comfortable speaking up\n", + "\n", + "- Testability is a huge point that I should consider emphasising. Even if you aren't following a strict functional style, it is likely that incorporating parts of this style into your code will make it more testable\n", + "\n", + "- TODO Unittest is being used in the \"Testing Impure Functions\" exercise, and it should switch to pytest\n", + "\n", + "- Having made it through most of this lesson, there is a missing note about Numpy, which itself contains a lot of functional-style operations on arrays. TODO could be nice to use an exercise with numpy instead of some of the more arbitrary ones here?\n", + "\n", + "- For the reduce function, it is also worth noting that it is just a simple for loop under the hood: https://github.com/python/cpython/blob/3.10/Lib/functools.py#L237\n", + "\n", + "```python\n", + "def reduce(function, sequence):\n", + " it = iterator(sequence)\n", + " for element in it:\n", + " value = function(value, element)\n", + " return value\n", + "```\n", + "\n", + "Do all functional-style languages require some form of imperative programming under the hood? I think the answer to that is pretty complicated, but at the bare metal in assembly and machine code, things will be imperative, so from a practical standpoint, yes every language will have an imperative base upon which it is built.\n", + "\n", + "- Coming to the end of this page, I find myself not really comprehending what benefit functional programming can yield. \n", + " - there are the statements that it gives you testability, composeability, and parallelisability, but then we don't really get a practical application of that\n", + "- Also, it feels like these examples should relate to the inflammation project...\n", + "\n", + "- I attempted the advanced exercise, and the Pool.map implementation was always slower :(\n", + "\n", + "- For the exercises, recommend that learners operate in a different directory, and for simplicity you can put tests in the same file as the functions you are writing, although it should also be possible to put the test files next to the modules as access those modules through relative imports (and then pytest won't complain about finding those modules)" + ] + }, + { + "cell_type": "markdown", + "id": "258acd45", + "metadata": { + "slideshow": { + "slide_type": "notes" + } + }, + "source": [ + "## Software Design\n", + "\n", + "- in the definition of \"software design\" I would probably swap \"architecture\" and \"design\" since I see design as a subset of architecture\n", + "\n", + "- for the \"Types of Software\" exercise, it would be nice to give some structure to how participants might do this in a group\n", + "\n", + "- For the \"MVC Revisited\", a question that might come up is testing views (since we are now getting to implement the view part)\n", + " - In the case of this exercise, it should be pretty straightforward to test\n", + "\n", + "- TODO also, the template repo seems to be out of sync with the lesson content since there is a `visualise()` function current in the repo with a todo, but then the course page never refers to this\n", + "\n", + "- TODO the changes that need to be made to inflammation-analysis.py should be highlighted somehow, because it is quite difficult to see what has changed between the version on the webpage and the version in the template repo" + ] + }, + { + "cell_type": "markdown", + "id": "d69076ca", + "metadata": { + "slideshow": { + "slide_type": "notes" + } + }, + "source": [ + "## Persistence\n", + "\n", + "- not much intro needed, other than the fact that reading and writing data is an important step for your code (even if not the most exciting)\n", + "\n", + "- TODO I should write my solution to the exercises here if I have time..." + ] + }, + { + "cell_type": "markdown", + "id": "122b8792", + "metadata": { + "slideshow": { + "slide_type": "notes" + } + }, + "source": [ + "# Section 4: Improving and Managing Software Over its Lifetime\n", + "\n", + "- use the image `../fig/section4-overview.png`\n", + "- up until this point, the course has been primarily focussed on technical practices, tools, and infrastructure, and primarily from the perspective of a single developer/researcher\n", + "- in this section, we will broaden this out and start looking at the management side of software projects, which necessarily makes it much more focussed on the team environment and broader considerations about how our code will be used and how we involve others contributors in the improvement of our code\n", + "\n", + "In this section we will:\n", + "\n", + "- Look at how to **prepare our software for release**, looking at what we actually mean by software reusability, the importance of good documentation, as well as what to consider when choosing an open source licence.\n", + "- Explore ways for us to **track issues with our software** registered by ourselves and external users, and how we should employ a critical mindset when reviewing software for reuse.\n", + "- Examine how we can manage the **improvement of our software through feedback** using agile management techniques. We'll employ effort estimation of development tasks as a foundational tool for prioritising future team work, and use the MoSCoW approach and software development sprints to manage improvement. As we will see, it is very difficult to prioritise work effectively without knowing both its relative importance to others as well as the effort required to deliver those work items." + ] + }, + { + "cell_type": "markdown", + "id": "2a55f8af", + "metadata": { + "slideshow": { + "slide_type": "notes" + } + }, + "source": [ + "## Preparing Software for Reuse\n", + "\n", + "- at this point, fine to just send learners to read\n", + "- note that at this point, they have already been writing markdown in the shared document, so it should be no shock to their system to write a README now\n", + "\n", + "### Writing a README\n", + "\n", + "- Consider walking through this section, for example writing parts of the README as a demo\n", + "- another great documentation link: https://documentation.divio.com/\n", + "\n", + "### Choosing an Open Source Licence\n", + "\n", + "- make notes in collaborative document about the licencing policy of your institution\n", + "\n", + "### Preparing for Release (exercise)\n", + "\n", + "- make learners aware they should try to time themselves(?)\n" + ] + }, + { + "cell_type": "markdown", + "id": "2d3e1b2e", + "metadata": { + "slideshow": { + "slide_type": "notes" + } + }, + "source": [ + "## Assessing Software for Suitability and Improvement\n", + "\n", + "- again, set off people reading\n", + "\n", + "- there will need to be a syncronisation point at \"Decide on your Group's Repository\", so let helpers and participants know this\n", + "- TODO will need to set up a table in the shared doc to put in the repo URLs for the \"Decide on you Group's Repository\"!\n", + "- comment about assessing dependencies to add to your project:\n", + " - how well maintained is it? how active is the project (go look when the last commit was made)?\n", + " - what is the funding model and horizon for the dependent library? who maintains it?\n", + " - in the crazy world we live in, there are some solo developer projects that support a huge amount of infrastructure --- this isn't to say that it is okay to pick project developed by small groups, but just that it does happen and sometimes on a large scale" + ] + }, + { + "cell_type": "markdown", + "id": "ad7c361a", + "metadata": { + "slideshow": { + "slide_type": "notes" + } + }, + "source": [ + "## Improvement Through Feedback\n", + "\n", + "- the groups will likely need document space to collaborate when making time estimates, prioritising, etc, so link to those documents from shared repo\n", + "- for the \"Prioritise!\" lesson, they could also use labels to specify the priority (i.e. have a `must have` label)\n", + "- basically have them in breakout rooms until the end of the session (likely)" + ] } ], "metadata": { From 065ddec1cfd7d9bdcfb7550ed78617094c064959 Mon Sep 17 00:00:00 2001 From: Matthew Bluteau Date: Mon, 31 Jan 2022 22:13:35 +0000 Subject: [PATCH 37/58] Create and complete slides for Section 3 --- slides/rough_notes.ipynb | 19 +- slides/section_3_software_arch_design.ipynb | 512 ++++++++++++++++++++ 2 files changed, 523 insertions(+), 8 deletions(-) create mode 100644 slides/section_3_software_arch_design.ipynb diff --git a/slides/rough_notes.ipynb b/slides/rough_notes.ipynb index f526375bb..16daf04eb 100644 --- a/slides/rough_notes.ipynb +++ b/slides/rough_notes.ipynb @@ -529,6 +529,7 @@ "- Set off reading the \"Encapsulating data\" section and the \"Structuring Data\" exercise ~ 5-7 minutes\n", " - this can be done in the `models.py` file, and plant the idea of making a test\n", " - comment about the `attach_names` function in lesson: it uses an `assert` which isn't great practice outside of unit tests. Instead, raise an `TypeError` exception if the lengths don't match\n", + " - TODO suggest this as a modification to the lesson\n", " - if the instructor have an implementation, show it on screen\n", " - second thought: this might be dwelling too much on a portion of the lesson that isn't that important...\n", "- Breakout rooms (~ 45 minutes)\n", @@ -550,7 +551,7 @@ }, { "cell_type": "markdown", - "id": "0fed3f2d", + "id": "151b370a", "metadata": { "slideshow": { "slide_type": "notes" @@ -599,7 +600,7 @@ }, { "cell_type": "markdown", - "id": "258acd45", + "id": "8d883d9f", "metadata": { "slideshow": { "slide_type": "notes" @@ -617,12 +618,14 @@ "\n", "- TODO also, the template repo seems to be out of sync with the lesson content since there is a `visualise()` function current in the repo with a todo, but then the course page never refers to this\n", "\n", - "- TODO the changes that need to be made to inflammation-analysis.py should be highlighted somehow, because it is quite difficult to see what has changed between the version on the webpage and the version in the template repo" + "- TODO the changes that need to be made to inflammation-analysis.py should be highlighted somehow, because it is quite difficult to see what has changed between the version on the webpage and the version in the template repo\n", + "\n", + "- TODO the entire section about Software Architecture at the beginning could be moved here, and replaced at the beginning with a simple flow diagram explaining the structure of the project" ] }, { "cell_type": "markdown", - "id": "d69076ca", + "id": "18e803f0", "metadata": { "slideshow": { "slide_type": "notes" @@ -638,7 +641,7 @@ }, { "cell_type": "markdown", - "id": "122b8792", + "id": "ed678ce4", "metadata": { "slideshow": { "slide_type": "notes" @@ -660,7 +663,7 @@ }, { "cell_type": "markdown", - "id": "2a55f8af", + "id": "786014d2", "metadata": { "slideshow": { "slide_type": "notes" @@ -688,7 +691,7 @@ }, { "cell_type": "markdown", - "id": "2d3e1b2e", + "id": "e4768a73", "metadata": { "slideshow": { "slide_type": "notes" @@ -709,7 +712,7 @@ }, { "cell_type": "markdown", - "id": "ad7c361a", + "id": "9a02f1be", "metadata": { "slideshow": { "slide_type": "notes" diff --git a/slides/section_3_software_arch_design.ipynb b/slides/section_3_software_arch_design.ipynb new file mode 100644 index 000000000..2163bda77 --- /dev/null +++ b/slides/section_3_software_arch_design.ipynb @@ -0,0 +1,512 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "id": "8f4f88a1", + "metadata": { + "slideshow": { + "slide_type": "slide" + } + }, + "source": [ + "# Section 3: Software Architecture and Design\n", + "\n", + "
\n", + "
\n", + "
" + ] + }, + { + "cell_type": "markdown", + "id": "bde031f2", + "metadata": { + "slideshow": { + "slide_type": "notes" + } + }, + "source": [ + "- There is a lot bundled in here\n", + "- We are again going to step up a level and look at the overall architecture of programs and how the different components interact. In contrast to our earlier discussion about architecture, we will be getting a bit more hands-on this time around now that we have had some experience with our project.\n", + "- We will be looking at some important design paradigms like Object Oriented and Functional Programming\n", + "- We will also look at tying up the MVA implementation of our example project" + ] + }, + { + "cell_type": "markdown", + "id": "615283f5", + "metadata": { + "slideshow": { + "slide_type": "slide" + } + }, + "source": [ + "## Programming Paradigms\n", + "\n", + "
\n", + "\n", + "> Modified from _Davis, Daniel. 2013. “Modelled on Software Engineering: Flexible Parametric Models in the Practice of Architecture.” PhD dissertation, RMIT University._" + ] + }, + { + "cell_type": "markdown", + "id": "ba469861", + "metadata": { + "slideshow": { + "slide_type": "notes" + } + }, + "source": [ + "- This section is going to be a bit of theory before we get back to more concrete programming, but it is important to have a conceptual view of the options available to us when solving problems, because the language we choose will have an influence upon this.\n", + "- Different languages apply different programming paradigms, which give us different tools for how we can structure and design our code.\n", + "- The primary divide is between _Imperative_ and _Declarative_ languages\n", + "- Poll the learners with stickies or Zoom reactions with the question: \"Have you heard the terms _paradigm_, _declarative_, and _imperative_ before in relation to programming?\"\n", + " - If a large number have, then ask the follow up: \"Do you have a good grasp of the meaning of these terms and the practical differences between imperative and declarative programming?\"\n", + " - If the majority answer in the affirmative, it is fine to skip to the FizzBuzz exercise\n", + " - Otherwise, give a brief description of imperative vs declarative, and then get the group to read through the section.\n", + "- Imperative: grammatically, an imperative statement is an order or instruction\n", + " - e.g. \"get me a soda\", \"got to the shop\", \"do this important task\"\n", + " - this can readily be applied to our relationship to a computer through a programming language, in which we give it instructions\n", + " - e.g. \"for all the elements in this list, add the value of each to this sum\", \"if the value is greater than 10, add it to the sum\", etc.\n", + " - This is likely the paradigm of programming we are all most familiar with\n", + "- Declarative: grammatically, a declarative sentence is a statement of fact or opinion. It is a description.\n", + " - e.g. \"the quick brown fox jumps over the lazy dog\", \"I don't understand functional programming\"\n", + " - it is less obvious how this can be used when interacting with computers\n", + " - The idea of applying a declarative paradigm in programming is that we describe _what_ we want the program to do, rather than _how_ it should do it\n", + " - implementation details (i.e. the _how_) are left to lower level features of the language\n", + " - if anyone has every used a query language like SQL before, this will make a lot more sense\n", + "- It is worth a note that Python is a multi-paradigm language\n", + " - it borrows elements from OO, functional, and procedural paradigms\n", + " - you can write programs that are a mix of these paradigms, or more strictly stick to one, it is up to you (which can be both a good and bad thing)\n", + " - more likely, you will write something where Python objects (so OO) are treated like data which is processed in a functional style\n", + "- It is pretty hard to get a grasp of these concepts without practical concrete examples, so let's move along to the exercise on this page." + ] + }, + { + "cell_type": "markdown", + "id": "5a7d4718", + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, + "source": [ + "### Breakout Exercise: 🖉 1, 2, Fizz, 4, Buzz ... FizzBuzz\n", + "\n", + "Start from this section heading and go to the end of the page." + ] + }, + { + "cell_type": "markdown", + "id": "e309ae42", + "metadata": { + "slideshow": { + "slide_type": "notes" + } + }, + "source": [ + "- Split into breakout rooms\n", + "- If learners need time to read through the content about paradigms (based on questions above), then give an additional 10 minutes to do that\n", + "- Allow about 5 minutes for the FizzBuzz exercise" + ] + }, + { + "cell_type": "markdown", + "id": "6a4c9601", + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, + "source": [ + "### FizzBuzz across Paradigms and Languages\n", + "\n", + "#### R (declarative, functional)\n", + "```r\n", + "xx <- x <- 1:100\n", + "xx[x %% 3 == 0] <- \"Fizz\"\n", + "xx[x %% 5 == 0] <- \"Buzz\"\n", + "xx[x %% 15 == 0] <- \"FizzBuzz\"\n", + "xx\n", + "```\n", + "\n", + "#### C (imperative, procedural)\n", + "```cpp\n", + "#include\n", + " \n", + "int main (void)\n", + "{\n", + " int i;\n", + " for (i = 1; i <= 100; i++)\n", + " {\n", + " if (!(i % 15))\n", + " printf (\"FizzBuzz\");\n", + " else if (!(i % 3))\n", + " printf (\"Fizz\");\n", + " else if (!(i % 5))\n", + " printf (\"Buzz\");\n", + " else\n", + " printf (\"%d\", i);\n", + " \n", + " printf(\"\\n\");\n", + " }\n", + " return 0;\n", + "}\n", + "```" + ] + }, + { + "cell_type": "markdown", + "id": "d476a95a", + "metadata": { + "slideshow": { + "slide_type": "notes" + } + }, + "source": [ + "- The R example isn't strictly functional, but it gets the point across about a very _declarative_ approach to computing (and elegant and concise)\n", + " - no need for bulky `if` and `for` statements\n", + " - the Python version of this doesn't quite get the elegance and clarity that this one does\n", + "- It is also worth noting that a lot of numpy syntax can become quite declarative and functional in its style." + ] + }, + { + "cell_type": "markdown", + "id": "d82955f6", + "metadata": { + "slideshow": { + "slide_type": "slide" + } + }, + "source": [ + "## Object Oriented Programming" + ] + }, + { + "cell_type": "markdown", + "id": "662f6eb4", + "metadata": { + "slideshow": { + "slide_type": "notes" + } + }, + "source": [ + "- the idea behind object-oriented programming to bundle data and methods together to represent objects\n", + " - this can be very intuitive, because we are used to working with objects in real life, and sometimes our software objects correspond quite closely to a real world object\n", + "- the more technical term for this is encapsulation, but not overly important to know that\n", + "- at the end of the day, we are again trying to create a well-defined _interface_ for how to interact with these objects / software components" + ] + }, + { + "cell_type": "markdown", + "id": "df3dea76", + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, + "source": [ + "### Breakout: Start from the Top\n", + "\n", + "Start reading from the top of this page all the way to the end. Complete exercises as you go.\n", + "\n", + "- It is fine to skip the **🖉 Structuring Data** exercise and just read it. Bottom line is that you can achieve a lot with built in data types, so don't jump to more advanced techniques if they aren't needed.\n", + "- A note about the Book/Library exercises: create separate files from the existing ones\n", + " 1. put a `library.py` under `models/`, and a `test_library.py` under `tests/`\n", + " 2. or put both of these files under a separate directory `library/` at the top level of the repo" + ] + }, + { + "cell_type": "markdown", + "id": "872367cc", + "metadata": { + "slideshow": { + "slide_type": "notes" + } + }, + "source": [ + "- Set learners into breakout rooms for 45 minutes with instructions on slide\n", + "\n", + "- Post-exercise comment: there will probably be the temptation to inherit from the builtin `list` class when implementing `Library`. \n", + " - Subclassing from builtin types is generally a bad idea for a host of complex reasons. \n", + " - The most easily comprehensible is that by inheriting a builtin type, you inherit a lot of behaviour that you might not intend to have for your new class. \n", + " - On the flip side, it is also quite restrictive. Is a Library really just a list? We might decide to add other functionality, like opening hours, later on. How does that data fit into the definition of a list? Well, it doesn't. \n", + " - If you really want to inherit from something here, then the better approach is to use the `abc` (abstract base class) module in Python and pick something from there that gets you closer to your desired functionality.\n", + "- If anyone asks about Doctor OO implementation, some additional feature ideas\n", + " - using the `dataclass` decorator offers a lot of advantages for these classes\n", + " - adding an age to patients could be helpful (fairly simple)\n", + " - a date range (or start date) for a patient's observations\n", + " - a Study class that is a list of Doctors (perhaps too much)\n", + " - a CSV reader of patient data (and preferably groups of patients data)" + ] + }, + { + "cell_type": "markdown", + "id": "29c75bf9", + "metadata": { + "slideshow": { + "slide_type": "slide" + } + }, + "source": [ + "## ☕ 5 Minute Break ☕" + ] + }, + { + "cell_type": "markdown", + "id": "1f0d0c5d", + "metadata": { + "slideshow": { + "slide_type": "slide" + } + }, + "source": [ + "## Functional Programming" + ] + }, + { + "cell_type": "markdown", + "id": "65dca8ab", + "metadata": { + "slideshow": { + "slide_type": "notes" + } + }, + "source": [ + "- We have undoubtedly all written functions during our time programming, but this doesn't mean we have done \"functional\" style programming, so let's look at what that involves\n", + "- The functional style will probably seem quite foreign, and it might not be obvious why it is useful initially\n", + " - This is just a taster, but I encourage you to stick with it and read further into the functional style if you are interested\n" + ] + }, + { + "cell_type": "markdown", + "id": "9940830a", + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, + "source": [ + "### Breakout: Start from the Top \"What is a Function?\"\n", + "\n", + "Start from the top of this page and read through, completing any exercises along the way. Like with the Book/Library exercise previously, it is recommended to put your new code into separate files/modules." + ] + }, + { + "cell_type": "markdown", + "id": "054b6aa8", + "metadata": { + "slideshow": { + "slide_type": "notes" + } + }, + "source": [ + "- Send learners into breakout rooms for about 40 minutes\n", + "- Post-exercise comments\n", + "- Invariably, the question will come up of when to use functional vs OO programming, and are the two mutually exclusive (i.e. do you have to use one or the other)\n", + " - as mentioned previously, it is unlikely you will do purely OO or functional programming, especially if you are using Python\n", + " - the two are certainly not mutually exclusive\n", + "- Testability is a huge point that should be emphasised. Even if you aren't following a strict functional style, it is likely that incorporating parts of this style into your code will make it more testable.\n", + "- Ask if anyone was able to get the `Pool.map` implementation to actually be quicker\n", + " - this could be a nice opportunity to talk about profiling, but likely not enough time\n", + "- Next slide for comment about the `reduce` function" + ] + }, + { + "cell_type": "markdown", + "id": "84713522", + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, + "source": [ + "#### The `reduce` function\n", + "\n", + "A `for` loop under the hood: https://github.com/python/cpython/blob/3.10/Lib/functools.py#L237\n", + "\n", + "```python\n", + "def reduce(function, sequence):\n", + " # some argument checking\n", + " # ...\n", + " it = iterator(sequence)\n", + " for element in it:\n", + " value = function(value, element)\n", + " return value\n", + "```\n" + ] + }, + { + "cell_type": "markdown", + "id": "00577318", + "metadata": { + "slideshow": { + "slide_type": "notes" + } + }, + "source": [ + "- In Python's case, there is very literally a procedural underpinning to some of its functional attributes\n", + " - but this is not the case for all languages" + ] + }, + { + "cell_type": "markdown", + "id": "615225b7", + "metadata": { + "slideshow": { + "slide_type": "slide" + } + }, + "source": [ + "## ☕ 10 Minute Break ☕" + ] + }, + { + "cell_type": "markdown", + "id": "468f64c7", + "metadata": { + "slideshow": { + "slide_type": "slide" + } + }, + "source": [ + "## Software Design\n", + "\n", + "> **Software design** is the process by which an agent creates a specification of a software artifact intended to accomplish goals, using a set of primitive components and subject to constraints. Software design may refer to either \"all the activity involved in conceptualizing, framing, implementing, commissioning, and ultimately modifying complex systems\" or \"the activity following requirements specification and before programming, as ... [in] a stylized software engineering process.\" " + ] + }, + { + "cell_type": "markdown", + "id": "98b29503", + "metadata": { + "slideshow": { + "slide_type": "fragment" + } + }, + "source": [ + "> **Software architecture** refers to the fundamental structures of a software system and the discipline of creating such structures and systems. Each structure comprises software elements, relations among them, and properties of both elements and relations. The architecture of a software system is a metaphor, analogous to the architecture of a building. It functions as a blueprint for the system and the developing project, laying out the tasks necessary to be executed by the design teams." + ] + }, + { + "cell_type": "markdown", + "id": "da3b03a2", + "metadata": { + "slideshow": { + "slide_type": "notes" + } + }, + "source": [ + "- We don't want to get bogged down in definitions, but here are some for the often mixed up software architecture and design\n", + "- Loosely, software architecture operates at a higher level than software design and is concerned only with completely abstracted software entities\n", + " - on the other hand, software design is concerned with the actual implementation of those software components\n", + "- In the text, it is implied that Software Architecture is a subset of Software Design, but I would say it is actually the other way around.\n", + " - However, this is also a question of scale. In small systems, the design and architecture might overlap so much that there is no distinction\n", + " - On larger projects, it becomes more obvious the distinction between the two" + ] + }, + { + "cell_type": "markdown", + "id": "eab93d48", + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, + "source": [ + "### Breakout: Start from the Top\n", + "\n", + "Start reading from the top of this page all the way to the end. Complete exercises as you go.\n", + "\n", + "For the **🖉 Types of Software** exercise, please take 5 minutes at the beginning of the session to write down answers to the questions in the shared document, and share your answers with your group." + ] + }, + { + "cell_type": "markdown", + "id": "967e13fb", + "metadata": { + "slideshow": { + "slide_type": "notes" + } + }, + "source": [ + "- Send learners into breakout rooms for about 35 minutes" + ] + }, + { + "cell_type": "markdown", + "id": "d9188c46", + "metadata": { + "slideshow": { + "slide_type": "slide" + } + }, + "source": [ + "## Persistence" + ] + }, + { + "cell_type": "markdown", + "id": "4f46cb94", + "metadata": { + "slideshow": { + "slide_type": "notes" + } + }, + "source": [ + "- not much intro needed, other than the fact that reading and writing data is an important step for your code (even if not the most exciting)" + ] + }, + { + "cell_type": "markdown", + "id": "a0b0406a", + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, + "source": [ + "### Breakout: Start from the Top\n", + "\n", + "Start reading from the top of this page all the way to the end. Complete exercises as you go." + ] + }, + { + "cell_type": "markdown", + "id": "91d1b9a1", + "metadata": { + "slideshow": { + "slide_type": "slide" + } + }, + "source": [ + "## 🕓 End of Section 3 🕓\n", + "\n", + "Please fill out the end-of-section survey!" + ] + } + ], + "metadata": { + "celltoolbar": "Slideshow", + "kernelspec": { + "display_name": "Python 3 (ipykernel)", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.8.10" + }, + "rise": { + "theme": "solarized" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} From dbf0723f55d0ef174fdd949b2d767305f5707f2a Mon Sep 17 00:00:00 2001 From: Matthew Bluteau Date: Tue, 1 Feb 2022 10:05:29 +0000 Subject: [PATCH 38/58] Modification of Section 3 slides about software design vs architecture --- slides/section_3_software_arch_design.ipynb | 84 +++++++++++++-------- 1 file changed, 54 insertions(+), 30 deletions(-) diff --git a/slides/section_3_software_arch_design.ipynb b/slides/section_3_software_arch_design.ipynb index 2163bda77..9da881d52 100644 --- a/slides/section_3_software_arch_design.ipynb +++ b/slides/section_3_software_arch_design.ipynb @@ -83,7 +83,7 @@ }, { "cell_type": "markdown", - "id": "5a7d4718", + "id": "4f2b3ea2", "metadata": { "slideshow": { "slide_type": "subslide" @@ -97,7 +97,7 @@ }, { "cell_type": "markdown", - "id": "e309ae42", + "id": "5166f75e", "metadata": { "slideshow": { "slide_type": "notes" @@ -156,7 +156,7 @@ }, { "cell_type": "markdown", - "id": "d476a95a", + "id": "f3ddde79", "metadata": { "slideshow": { "slide_type": "notes" @@ -171,7 +171,7 @@ }, { "cell_type": "markdown", - "id": "d82955f6", + "id": "49d89ef3", "metadata": { "slideshow": { "slide_type": "slide" @@ -183,7 +183,7 @@ }, { "cell_type": "markdown", - "id": "662f6eb4", + "id": "367d40a0", "metadata": { "slideshow": { "slide_type": "notes" @@ -198,7 +198,7 @@ }, { "cell_type": "markdown", - "id": "df3dea76", + "id": "f705abaa", "metadata": { "slideshow": { "slide_type": "subslide" @@ -217,7 +217,7 @@ }, { "cell_type": "markdown", - "id": "872367cc", + "id": "8632012a", "metadata": { "slideshow": { "slide_type": "notes" @@ -241,7 +241,7 @@ }, { "cell_type": "markdown", - "id": "29c75bf9", + "id": "a176f5ef", "metadata": { "slideshow": { "slide_type": "slide" @@ -253,7 +253,7 @@ }, { "cell_type": "markdown", - "id": "1f0d0c5d", + "id": "9bfe660d", "metadata": { "slideshow": { "slide_type": "slide" @@ -265,7 +265,7 @@ }, { "cell_type": "markdown", - "id": "65dca8ab", + "id": "ba7d4b6c", "metadata": { "slideshow": { "slide_type": "notes" @@ -279,7 +279,7 @@ }, { "cell_type": "markdown", - "id": "9940830a", + "id": "5363ad1d", "metadata": { "slideshow": { "slide_type": "subslide" @@ -293,7 +293,7 @@ }, { "cell_type": "markdown", - "id": "054b6aa8", + "id": "69db942a", "metadata": { "slideshow": { "slide_type": "notes" @@ -313,7 +313,7 @@ }, { "cell_type": "markdown", - "id": "84713522", + "id": "49fd9b47", "metadata": { "slideshow": { "slide_type": "subslide" @@ -337,7 +337,7 @@ }, { "cell_type": "markdown", - "id": "00577318", + "id": "c4a23db1", "metadata": { "slideshow": { "slide_type": "notes" @@ -350,7 +350,7 @@ }, { "cell_type": "markdown", - "id": "615225b7", + "id": "dd458937", "metadata": { "slideshow": { "slide_type": "slide" @@ -362,7 +362,7 @@ }, { "cell_type": "markdown", - "id": "468f64c7", + "id": "1b7a00c9", "metadata": { "slideshow": { "slide_type": "slide" @@ -376,36 +376,60 @@ }, { "cell_type": "markdown", - "id": "98b29503", + "id": "2b961a5c", "metadata": { "slideshow": { "slide_type": "fragment" } }, "source": [ - "> **Software architecture** refers to the fundamental structures of a software system and the discipline of creating such structures and systems. Each structure comprises software elements, relations among them, and properties of both elements and relations. The architecture of a software system is a metaphor, analogous to the architecture of a building. It functions as a blueprint for the system and the developing project, laying out the tasks necessary to be executed by the design teams." + "- Part of the software development process\n", + "- Be careful: the _process_ of designing software **VERSUS** _a design_ of some software (sometimes called a _design model_)" ] }, { "cell_type": "markdown", - "id": "da3b03a2", + "id": "af8ae586", "metadata": { "slideshow": { "slide_type": "notes" } }, "source": [ - "- We don't want to get bogged down in definitions, but here are some for the often mixed up software architecture and design\n", - "- Loosely, software architecture operates at a higher level than software design and is concerned only with completely abstracted software entities\n", - " - on the other hand, software design is concerned with the actual implementation of those software components\n", - "- In the text, it is implied that Software Architecture is a subset of Software Design, but I would say it is actually the other way around.\n", - " - However, this is also a question of scale. In small systems, the design and architecture might overlap so much that there is no distinction\n", - " - On larger projects, it becomes more obvious the distinction between the two" + "- We don't want to get bogged down in definitions, but it is good to know the difference between software design and architecture\n", + "- Read definition of software design and subsequent points" ] }, { "cell_type": "markdown", - "id": "eab93d48", + "id": "6d65beb4", + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, + "source": [ + "> **Software architecture** refers to the fundamental structures of a software system and the discipline of creating such structures and systems. Each structure comprises software elements, relations among them, and properties of both elements and relations. The architecture of a software system is a metaphor, analogous to the architecture of a building. It functions as a blueprint for the system and the developing project, laying out the tasks necessary to be executed by the design teams.\n", + "\n", + "- This can be thought of as a particular sub-category of the design model that becomes more important the larger your software project gets" + ] + }, + { + "cell_type": "markdown", + "id": "584e63dc", + "metadata": { + "slideshow": { + "slide_type": "notes" + } + }, + "source": [ + "- Software architecture tends to be a much higher level view with little detail about specific implementation, focussing rather on abstrated components and how they will interact\n", + " - a software degin model will be much lower level and refer to particular modules and classes" + ] + }, + { + "cell_type": "markdown", + "id": "f0470c1c", "metadata": { "slideshow": { "slide_type": "subslide" @@ -421,7 +445,7 @@ }, { "cell_type": "markdown", - "id": "967e13fb", + "id": "d254fb25", "metadata": { "slideshow": { "slide_type": "notes" @@ -433,7 +457,7 @@ }, { "cell_type": "markdown", - "id": "d9188c46", + "id": "75cf4533", "metadata": { "slideshow": { "slide_type": "slide" @@ -445,7 +469,7 @@ }, { "cell_type": "markdown", - "id": "4f46cb94", + "id": "f54147ba", "metadata": { "slideshow": { "slide_type": "notes" @@ -457,7 +481,7 @@ }, { "cell_type": "markdown", - "id": "a0b0406a", + "id": "4044b64f", "metadata": { "slideshow": { "slide_type": "subslide" From abfdb2bc920ac07d6e57335e6e8ada6d4fdf2637 Mon Sep 17 00:00:00 2001 From: Matthew Bluteau Date: Tue, 1 Feb 2022 12:04:56 +0000 Subject: [PATCH 39/58] Add slides for section 4 and minor update for section 2 --- slides/section_2_ensuring_correctness.ipynb | 1 + slides/section_4_managing_software.ipynb | 155 ++++++++++++++++++++ 2 files changed, 156 insertions(+) create mode 100644 slides/section_4_managing_software.ipynb diff --git a/slides/section_2_ensuring_correctness.ipynb b/slides/section_2_ensuring_correctness.ipynb index 92b44f544..fd923ea8f 100644 --- a/slides/section_2_ensuring_correctness.ipynb +++ b/slides/section_2_ensuring_correctness.ipynb @@ -367,6 +367,7 @@ }, "source": [ "- split learners into breakout rooms (~50 mins although likely less, so take a status check early) starting from this section heading and going to the end of the page\n", + " - if learners are using different editors, then encourage them to try and replicate the techique of debugging that is explained here\n", "- status check" ] }, diff --git a/slides/section_4_managing_software.ipynb b/slides/section_4_managing_software.ipynb new file mode 100644 index 000000000..413aec76a --- /dev/null +++ b/slides/section_4_managing_software.ipynb @@ -0,0 +1,155 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "id": "8f4f88a1", + "metadata": { + "slideshow": { + "slide_type": "slide" + } + }, + "source": [ + "# Section 4: Improving and Managing Software Over its Lifetime\n", + "\n", + "
\n", + "
\n", + "
" + ] + }, + { + "cell_type": "markdown", + "id": "bde031f2", + "metadata": { + "slideshow": { + "slide_type": "notes" + } + }, + "source": [ + "- up until this point, the course has been primarily focussed on technical practices, tools, and infrastructure, and primarily from the perspective of a single developer/researcher, albeit within a team environment\n", + "- in this section, we will broaden this out and start looking at the management side of software projects, which necessarily makes it much more focussed on the team environment and broader considerations about how our code will be used and how we involve others contributors in the improvement of our code\n", + "\n", + "In this section we will:\n", + "\n", + "- Look at how to **prepare our software for release**, looking at what we actually mean by software reusability, the importance of good documentation, as well as what to consider when choosing an open source licence.\n", + "- Explore ways for us to **track issues with our software** registered by ourselves and external users, and how we should employ a critical mindset when reviewing software for reuse.\n", + "- Examine how we can manage the **improvement of our software through feedback** using agile management techniques. We'll employ effort estimation of development tasks as a foundational tool for prioritising future team work, and use the MoSCoW approach and software development sprints to manage improvement. As we will see, it is very difficult to prioritise work effectively without knowing both its relative importance to others as well as the effort required to deliver those work items." + ] + }, + { + "cell_type": "markdown", + "id": "4f2b3ea2", + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, + "source": [ + "## Preparing Software for Reuse\n", + "\n", + "\n", + "### Breakout: Start from the Top\n", + "\n", + "Start from the top of this episode page and go to the end." + ] + }, + { + "cell_type": "raw", + "id": "14d644e0", + "metadata": { + "slideshow": { + "slide_type": "notes" + } + }, + "source": [ + "- Split into breakout rooms for about 50 minutes\n", + "- A few notes to preface\n", + " - If you have been using codimd for the shared document, then learners will have already been exposed to Markdown, so this section won't contain much new for them\n", + " - For writing documentation, this is another great link that can be added to the shared document: https://documentation.divio.com/\n", + " - For licensing software, make some notes in the shared document about the policy of your institution" + ] + }, + { + "cell_type": "markdown", + "id": "f705abaa", + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, + "source": [ + "## Assessing Software for Suitability and Improvement\n", + "\n", + "### Breakout: Start from the Top\n", + "\n", + "Start reading from the top of this episode page all the way to the end. Complete exercises as you go.\n", + "\n", + "You will need to synchronise as a group at the **🖉 Decide on your Group’s Repository!** exercise. Please use a sticky/reaction to indicate when you have reached this exercise.\n", + "\n", + "For the next exercise, you will then need to wait for the other group you are assessing to fill in their repo URL." + ] + }, + { + "cell_type": "markdown", + "id": "8632012a", + "metadata": { + "slideshow": { + "slide_type": "notes" + } + }, + "source": [ + "- Set learners into breakout rooms for 45 minutes with instructions on slide" + ] + }, + { + "cell_type": "markdown", + "id": "a176f5ef", + "metadata": { + "slideshow": { + "slide_type": "slide" + } + }, + "source": [ + "## ☕ 5 Minute Break ☕" + ] + }, + { + "cell_type": "markdown", + "id": "91d1b9a1", + "metadata": { + "slideshow": { + "slide_type": "slide" + } + }, + "source": [ + "## 🕓 End of Section 4 🕓\n", + "\n", + "Please fill out the end-of-section survey!" + ] + } + ], + "metadata": { + "celltoolbar": "Slideshow", + "kernelspec": { + "display_name": "Python 3 (ipykernel)", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.8.10" + }, + "rise": { + "theme": "solarized" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} From 78c219d699d7a847f08c495a7bb77132ed6391eb Mon Sep 17 00:00:00 2001 From: Matthew Bluteau Date: Tue, 10 May 2022 11:23:20 +0100 Subject: [PATCH 40/58] Finish off section 4 slides --- slides/section_3_software_arch_design.ipynb | 50 ++++++++++----------- slides/section_4_managing_software.ipynb | 50 ++++++++++++++++++++- 2 files changed, 73 insertions(+), 27 deletions(-) diff --git a/slides/section_3_software_arch_design.ipynb b/slides/section_3_software_arch_design.ipynb index 9da881d52..f0ed3bd74 100644 --- a/slides/section_3_software_arch_design.ipynb +++ b/slides/section_3_software_arch_design.ipynb @@ -83,7 +83,7 @@ }, { "cell_type": "markdown", - "id": "4f2b3ea2", + "id": "2839f323", "metadata": { "slideshow": { "slide_type": "subslide" @@ -97,7 +97,7 @@ }, { "cell_type": "markdown", - "id": "5166f75e", + "id": "e736019d", "metadata": { "slideshow": { "slide_type": "notes" @@ -156,7 +156,7 @@ }, { "cell_type": "markdown", - "id": "f3ddde79", + "id": "03c7d054", "metadata": { "slideshow": { "slide_type": "notes" @@ -171,7 +171,7 @@ }, { "cell_type": "markdown", - "id": "49d89ef3", + "id": "52e9edc9", "metadata": { "slideshow": { "slide_type": "slide" @@ -183,7 +183,7 @@ }, { "cell_type": "markdown", - "id": "367d40a0", + "id": "39d5afb9", "metadata": { "slideshow": { "slide_type": "notes" @@ -198,7 +198,7 @@ }, { "cell_type": "markdown", - "id": "f705abaa", + "id": "7e1e6b23", "metadata": { "slideshow": { "slide_type": "subslide" @@ -217,7 +217,7 @@ }, { "cell_type": "markdown", - "id": "8632012a", + "id": "b4ef007e", "metadata": { "slideshow": { "slide_type": "notes" @@ -241,7 +241,7 @@ }, { "cell_type": "markdown", - "id": "a176f5ef", + "id": "bcff090f", "metadata": { "slideshow": { "slide_type": "slide" @@ -253,7 +253,7 @@ }, { "cell_type": "markdown", - "id": "9bfe660d", + "id": "4f5c1134", "metadata": { "slideshow": { "slide_type": "slide" @@ -265,7 +265,7 @@ }, { "cell_type": "markdown", - "id": "ba7d4b6c", + "id": "15ea1a76", "metadata": { "slideshow": { "slide_type": "notes" @@ -279,7 +279,7 @@ }, { "cell_type": "markdown", - "id": "5363ad1d", + "id": "54d010c3", "metadata": { "slideshow": { "slide_type": "subslide" @@ -293,7 +293,7 @@ }, { "cell_type": "markdown", - "id": "69db942a", + "id": "19fab4ad", "metadata": { "slideshow": { "slide_type": "notes" @@ -313,7 +313,7 @@ }, { "cell_type": "markdown", - "id": "49fd9b47", + "id": "132d07f6", "metadata": { "slideshow": { "slide_type": "subslide" @@ -337,7 +337,7 @@ }, { "cell_type": "markdown", - "id": "c4a23db1", + "id": "a2ce5283", "metadata": { "slideshow": { "slide_type": "notes" @@ -350,7 +350,7 @@ }, { "cell_type": "markdown", - "id": "dd458937", + "id": "9cc57670", "metadata": { "slideshow": { "slide_type": "slide" @@ -362,7 +362,7 @@ }, { "cell_type": "markdown", - "id": "1b7a00c9", + "id": "9876d27e", "metadata": { "slideshow": { "slide_type": "slide" @@ -376,7 +376,7 @@ }, { "cell_type": "markdown", - "id": "2b961a5c", + "id": "0b284f23", "metadata": { "slideshow": { "slide_type": "fragment" @@ -389,7 +389,7 @@ }, { "cell_type": "markdown", - "id": "af8ae586", + "id": "57442f6f", "metadata": { "slideshow": { "slide_type": "notes" @@ -402,7 +402,7 @@ }, { "cell_type": "markdown", - "id": "6d65beb4", + "id": "2bff7e4f", "metadata": { "slideshow": { "slide_type": "subslide" @@ -416,7 +416,7 @@ }, { "cell_type": "markdown", - "id": "584e63dc", + "id": "c73ae51a", "metadata": { "slideshow": { "slide_type": "notes" @@ -429,7 +429,7 @@ }, { "cell_type": "markdown", - "id": "f0470c1c", + "id": "350f7cb4", "metadata": { "slideshow": { "slide_type": "subslide" @@ -445,7 +445,7 @@ }, { "cell_type": "markdown", - "id": "d254fb25", + "id": "522a8f37", "metadata": { "slideshow": { "slide_type": "notes" @@ -457,7 +457,7 @@ }, { "cell_type": "markdown", - "id": "75cf4533", + "id": "4191fbd3", "metadata": { "slideshow": { "slide_type": "slide" @@ -469,7 +469,7 @@ }, { "cell_type": "markdown", - "id": "f54147ba", + "id": "f849ba0c", "metadata": { "slideshow": { "slide_type": "notes" @@ -481,7 +481,7 @@ }, { "cell_type": "markdown", - "id": "4044b64f", + "id": "9df64860", "metadata": { "slideshow": { "slide_type": "subslide" diff --git a/slides/section_4_managing_software.ipynb b/slides/section_4_managing_software.ipynb index 413aec76a..a947f5fc1 100644 --- a/slides/section_4_managing_software.ipynb +++ b/slides/section_4_managing_software.ipynb @@ -68,6 +68,18 @@ " - For licensing software, make some notes in the shared document about the policy of your institution" ] }, + { + "cell_type": "markdown", + "id": "ac46b323", + "metadata": { + "slideshow": { + "slide_type": "slide" + } + }, + "source": [ + "## ☕ 5 Minute Break ☕" + ] + }, { "cell_type": "markdown", "id": "f705abaa", @@ -102,14 +114,48 @@ }, { "cell_type": "markdown", - "id": "a176f5ef", + "id": "3357ddff", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ - "## ☕ 5 Minute Break ☕" + "## ☕ 10 Minute Break ☕" + ] + }, + { + "cell_type": "markdown", + "id": "84e630ee", + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, + "source": [ + "## Improvement Through Feedback\n", + "\n", + "### Breakout: Start from the Top\n", + "\n", + "Start reading from the top of this episode page all the way to the end. Complete exercises as a group.\n", + "\n", + "There is a separate shared documents specific to your group linked from the original shared document. This will give your group an uncrowded space to handle the issues that another group has submitted on your repo." + ] + }, + { + "cell_type": "markdown", + "id": "1af3aa5a", + "metadata": { + "slideshow": { + "slide_type": "slide" + } + }, + "source": [ + "## Wrap Up\n", + "\n", + "
\n", + "
\n", + "
" ] }, { From d0bb34106dd96cd39a9688502bde34747e9a3ca2 Mon Sep 17 00:00:00 2001 From: bielsnohr Date: Mon, 16 May 2022 17:28:21 +0100 Subject: [PATCH 41/58] Update Section slides following feedback from 2022-01-25 session --- fig/Visual_Studio_Code_1.35_icon.png | Bin 0 -> 26302 bytes slides/section_1_setting_up_environment.ipynb | 116 +++++------------- 2 files changed, 30 insertions(+), 86 deletions(-) create mode 100644 fig/Visual_Studio_Code_1.35_icon.png diff --git a/fig/Visual_Studio_Code_1.35_icon.png b/fig/Visual_Studio_Code_1.35_icon.png new file mode 100644 index 0000000000000000000000000000000000000000..eb9c933af3ad9e40f07acf9127415929a310d471 GIT binary patch literal 26302 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 bE>8mf|8F>YQ6mIyfHc%}Rlh1fdj0 Software architecture is the fundamental structure of a software system... It refers to a 'bigger picture' of a software system that describes high-level components (modules) of the system and how they interact.\n", - "\n", - "The specification or contract of how to interact with a module is called a **programming interface** and these are everywhere in software engineering (e.g. user interfaces, APIs, and even function signatures). \n", - "\n", - "How do we design a good **programming interface**?" + "**Theory covered later in Section 3: Software Design**" ] }, { @@ -410,48 +406,7 @@ } }, "source": [ - "- Read quote on slide\n", - "- Modules are an important idea\n", - " - common examples: libraries that we import and use in our own code (e.g. `numpy` and `matplotlib`), classes in object-oriented languages\n", - " - modules are largely self-contained (they can have dependencies) but there should be a well-defined way to interact with it (otherwise, what is the point?)\n", - " - the specification or contract of how to interact with a module is called a **programming interface** and these are everywhere in software engineering (e.g. user interfaces, APIs, and even function signatures)\n", - "- How do we design a good **programming interface**?\n", - " - architecture patterns are guides to help us not just with interfaces but the complete design of our code" - ] - }, - { - "cell_type": "markdown", - "id": "142a29bc", - "metadata": { - "slideshow": { - "slide_type": "subslide" - } - }, - "source": [ - "### Architecture Patterns\n", - "\n", - "- Model-View-Controller (MVC)\n", - "- Model-View-Adapter (MVA)\n", - "- Service-Oriented Architecture (SOA)\n", - "- Client-Server Architecture\n", - "- Multilayer Architecture" - ] - }, - { - "cell_type": "markdown", - "id": "22feca09", - "metadata": { - "slideshow": { - "slide_type": "notes" - } - }, - "source": [ - "- there are quite a few different architecture patterns out there, and we don't have time to assess all the different advantages and disadvantages\n", - "- if you are interested, there are some links in the course content that you can follow up\n", - "- lots of them share some key similarities, and one of the progenitors is the Model-View-Controller\n", - "- unfortuantely, there is a pedantic semantic issue in the course content\n", - "- what it calls Model-View-Controller and what is used for our example project is actually Model-View-Adapter\n", - "- the are both very similar but have some key differences" + "- _Skip over the higher-level discussion of architecture because it is a bit out of place here; it is covered anyway in the later Section 3: Software Design_" ] }, { @@ -483,7 +438,7 @@ "\n", "- View is the means of displaying data to users/clients within an application (i.e. provides visualisation of the state of the model) **and** collecting user input in the case of a Graphical User Interface (GUI). However, sometimes the line can get a bit blurred, and the Adapter might collect user input directly (which is actually the case for our example project). For our example project, the View is represented by the module `inflammation/view.py` and it contains the routines to produce graphs of our patient data and the results from analysis. Show this file from command line.\n", "\n", - "- Adapter manipulates both the Model and the View. Usually, it accepts input from the View and performs the corresponding action on the Model (changing the state of the model) and then updates the View accordingly. In our simple example project, the file `inflammation-analysis.py` is the Adapter, and it actually does handle user input so it not quite fully abiding by MVA.\n", + "- Adapter manipulates both the Model and the View. Usually, it accepts input from the View and performs the corresponding action on the Model (changing the state of the model) and then updates the View accordingly. In our simple example project, the file `inflammation-analysis.py` is the Adapter, and it actually does handle user input so it not quite fully abiding by MVA, and actually shares features with another architectural pattern called Model-View-Controller\n", "\n", "- Some final words on architecture and these particular patterns:\n", " - don't get too caught up determining exactly what functionality should be the responsibility of each component\n", @@ -491,33 +446,6 @@ " - it is likely you were already doing this in an informal fashion, but good to think about it more explicitly **and try to record your design in some appropriate format**" ] }, - { - "cell_type": "markdown", - "id": "c1ea166a", - "metadata": { - "slideshow": { - "slide_type": "subslide" - } - }, - "source": [ - "### Breakout Exercise: 🖉 MVA Application Examples from your Work\n", - "\n", - "Think of some other examples from your work or otherwise where MVA architecture may be suitable and discuss these with your fellow learners. Keep it brief (about 1 minute per person)." - ] - }, - { - "cell_type": "markdown", - "id": "5925011e", - "metadata": { - "slideshow": { - "slide_type": "notes" - } - }, - "source": [ - "- send learners into breakout rooms for about 5 minutes\n", - "- helpers can kickstart the discussion if no one wants to start" - ] - }, { "cell_type": "markdown", "id": "1c83fab3", @@ -560,7 +488,7 @@ "- Before jumping to install matplotlib and numpy, it is worth a thought about other projects we might be currently be working on or in the future\n", " - what if they have a requirement for a different version of numpy or matplotlib? or a different python version? how are you going to share your project with collaborators and make sure they have the correct dependencies?\n", " - in general, each project is going to have its own unique configuration and set of dependencies\n", - " - to solve this in python, we set up a virtual environment for each project, containing a specific python version and set of libraries that won't interact with others on the system\n", + " - to solve this in python, we set up a virtual environment for each project, containing a set of libraries that won't interact with others on the system\n", " - it can be thought of like an isolated partial installation of Python specifically for your project" ] }, @@ -634,7 +562,7 @@ } }, "source": [ - "### Breakout Exercise: 🖉 Creating a `venv` Environment\n", + "### Breakout Exercise: Creating a `venv` Environment\n", "\n", "Read through and follow along until the end of the episode page." ] @@ -735,7 +663,14 @@ "source": [ "## Integrated Development Environments\n", "\n", - "
\n" + "\n", + " \n", + " \n", + "
\n", + " \n", + " \n", + " \n", + "
" ] }, { @@ -751,8 +686,9 @@ " - This is fine to start off, but as our projects become more complex with more files and configurations, it natural that the tools we use to develop need to evolve as well\n", " - Enter the Integrated Development Environment (IDE)\n", "- Preference for Code Editors and IDEs is one of the more contentious and strongly felt topics among software developers, but the bottom line is that if a tool works for you and helps you be productive, then it is absolutely fine to use that tool\n", - " - But again, for the practicalities of this course, the decision to use PyCharm has been made\n", - " - If you are comfortable enough in another IDE or code editor to get the functionality demonstrated in the content below, then please feel free to use that tool here, but this is a disclaimer that we cannot promise to resolve any issues you have, and if these issues are holding the group up then we will need to move on" + " - But again, for the practicalities of this course, the decision to support two editors, PyCharm and VSCode, has been made\n", + " - If you are comfortable enough in another IDE or code editor to get the functionality demonstrated in the content below, then please feel free to use that tool here, but this is a disclaimer that we cannot promise to resolve any issues you have, and if these issues are holding the group up then we will need to move on\n", + " - For VSCode, please consult the \"Extras\" content of the course web page and find the analogous functionality described there; if you are having trouble getting something to work, please ask for help!" ] }, { @@ -764,7 +700,9 @@ } }, "source": [ - "### Breakout Exercise: 🖉 Using the PyCharm IDE" + "### Breakout Exercise: Using the PyCharm IDE\n", + "\n", + "Start from this heading and continue to the end of the page." ] }, { @@ -837,7 +775,9 @@ } }, "source": [ - "### Breakout Exercise: 🖉 Checking in Changes to Our Project" + "### Breakout Exercise: Checking in Changes to Our Project\n", + "\n", + "Start from this heading and go until the \"Git Branches\" heading." ] }, { @@ -882,6 +822,7 @@ "- Git branches\n", " - branches are actually just a pointer to a commit, and that commit _can_ (but doesn't have to) define a distinct or divergent commit history of our main branch\n", " - this allows developers to take \"copies\" of the code and make their own modifications without making changes to original nor affecting the commit history of the main branch (so others won't see the changes there until they are merged)\n", + " - this is the main aspect of git that facilitates collaboration\n", " - talk through the image\n", " - the best practice is to use a new branch for each separate and self-contained unit/piece of work you want to add to the project. This unit of work is also often called a feature and the branch where you develop it is called a feature branch. Each feature branch should have its own meaningful name - indicating its purpose (e.g. “issue23-fix”). If we keep making changes and pushing them directly to main branch on GitHub, then anyone who downloads our software from there will get all of our work in progress - whether or not it’s ready to use! So, working on a separate branch for each feature you are adding is good for several reasons:\n", " - it enables the main branch to remain stable while you and the team explore and test the new code on a feature branch,\n", @@ -901,7 +842,9 @@ } }, "source": [ - "### Breakout Exercise: 🖉 Creating Branches" + "### Breakout Exercise: 🖉 Creating Branches\n", + "\n", + "Continue from this heading to the end of the page." ] }, { @@ -1034,6 +977,7 @@ }, "source": [ "- Split learners into breakout rooms and get them to work through content starting from \"Indentation\" section (~ 30 minutes) going to the end of the page\n", + " - A lot of these checks for formatting can now be done automatically with your IDE or linters, so don't spend too long absorbing them. It is good to be aware why rules are being applied, but the details of implementation are less important.\n", " - poll/status check at the end\n", "- Some comments after the exercises\n", " - There are many different docstring formats, and I tend to not like the Sphynx default very much. Google or Numpy style docstrings much more readable.\n", From cfbceb7b3ee164db5c86584e3f43772444ad155c Mon Sep 17 00:00:00 2001 From: bielsnohr Date: Wed, 25 May 2022 09:17:53 +0100 Subject: [PATCH 42/58] Add comment about where to launch jupyter-notebook --- slides/README.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/slides/README.md b/slides/README.md index e643610af..03a54a6e4 100644 --- a/slides/README.md +++ b/slides/README.md @@ -8,6 +8,8 @@ The slides themselves are written in Jupyter notebooks which has the built-in ca python3 -m venv .venv # it is important to use the dot prefix if you are creating this at the top level of this repo . .venv/bin/activate pip install jupyter +# launch jupyter from the top level of this repo, **not** in the slide +# directory or else the relative figure links won't work jupyter-notebook # navigate to the slide file and edit ``` From cff7ce8cc2f28146be3dc358110f32c5bc444883 Mon Sep 17 00:00:00 2001 From: bielsnohr Date: Mon, 31 Oct 2022 13:59:12 +0000 Subject: [PATCH 43/58] Remove the beta banner temporarily It is quit intrusive and takes up a lot of screen space. --- _config.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/_config.yml b/_config.yml index 434f152ab..ab9a92760 100644 --- a/_config.yml +++ b/_config.yml @@ -14,7 +14,7 @@ title: "Intermediate Research Software Development" # Life cycle stage of the lesson # possible values: "pre-alpha", "alpha", "beta", "stable" -life_cycle: "beta" +life_cycle: "stable" #------------------------------------------------------------ # Generic settings (should not need to change). From 4e7b25c7b27b307c27e2ed94d49d2449ee8eb6fe Mon Sep 17 00:00:00 2001 From: Dan Short <66615563+DanShort12@users.noreply.github.com> Date: Wed, 5 Apr 2023 09:08:20 +0100 Subject: [PATCH 44/58] Fix a couple of broken links ukaea-rse-training/python-intermediate-development#3 The links to the learning objectives were 404'ing as they resolve to https://ukaea-rse-training.github.io/index.html#learning-objectives-for-the-workshop and not https://ukaea-rse-training.github.io/python-intermediate-development/#learning-objectives-for-the-workshop (the latter being the anchor for that section). Removing the trailing slash should fix this as compared with the relative path link to quiz/index.html. --- index.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/index.md b/index.md index 30472b7bc..cf7d21a0a 100644 --- a/index.md +++ b/index.md @@ -8,7 +8,7 @@ This course aims to teach a **core set** of established, intermediate-level software development skills and best practices for working as part of a team in a research environment using Python as an example programming language -(see detailed [learning objectives](/index.html#learning-objectives-for-the-workshop) below). +(see detailed [learning objectives](index.html#learning-objectives-for-the-workshop) below). The core set of skills we teach is not a comprehensive set of all-encompassing skills, but a selective set of tried-and-tested collaborative development skills that forms a firm foundation for continuing on your learning journey. @@ -68,7 +68,7 @@ This course is for you if: In this case, we suggest you revisit the course after you have been programming for at least 6 months - You are well familiar with the - [learning objectives of the course](/index.html#learning-objectives-for-the-workshop) + [learning objectives of the course](index.html#learning-objectives-for-the-workshop) and those of individual episodes - The software you write is fully documented and well architected From 9db87a3c0530ee1462ef220247861d3461bba01f Mon Sep 17 00:00:00 2001 From: bielsnohr Date: Tue, 11 Apr 2023 16:19:37 +0100 Subject: [PATCH 45/58] Add some corrections to the "Setting the Scene" portion of the slides --- slides/section_1_setting_up_environment.ipynb | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/slides/section_1_setting_up_environment.ipynb b/slides/section_1_setting_up_environment.ipynb index b9b9945ae..90da2c215 100644 --- a/slides/section_1_setting_up_environment.ipynb +++ b/slides/section_1_setting_up_environment.ipynb @@ -130,7 +130,7 @@ "### Tools\n", "\n", "- Python\n", - "- Integrated Development Environment: PyCharm\n", + "- Integrated Development Environment: PyCharm or VS Code\n", "- `pip` and `venv`\n", "- GitHub" ] @@ -165,10 +165,9 @@ "\n", "- Monitoring your status\n", " - self reporting\n", - " - ✅ = all good | ❌ = not following or need help\n", " - sporadic polls\n", "- Questions at any time by raising hand ✋\n", - "- Some instruction with breakout rooms for independent study, exercises, and group activities\n", + "- Some lecturing by instructor combined with independent study, exercises, and group activities\n", "- Take a break whenever you need it ☕" ] }, @@ -186,8 +185,8 @@ " - We want to know how you are doing, and the more information we have about your progress, the better we can tailor the course to you and make it more valuable.\n", " - There are two main ways to do this.\n", " - Self reporting: Please use the green check mark and red 'x' in Zoom (or stickies if in person) to indicate your status with lessons or the current content; this is a more subtle way of indicating that you need help without interrupting the instructor. The helpers will be keeping an eye on the list of participants and their statuses. Can everyone please check now that they can put the green check mark up.\n", - " - Polls within Zoom will also be used to check how you are getting on. Please fill these in and don't ignore them! \n", - "- Throughout the course, please feel free to interrupt at any point with a question, preferably through the raise hand feature.\n", + " - Polls within Zoom will also be used to check how you are getting on. Please fill these in and don't ignore them! In person, it is easier to see how people are getting on. \n", + "- Throughout the course, please feel free to interrupt at any point with a question (preferably by raising hand if in person or using the raise hand feature in Zoom or relevant analogue).\n", "- Many portions of the course will involve breaking into separate groups to do work. Most of this will be independent work, but there are a few group tasks. There will usually be a helper in your room if you need assistance, but again, they are not all-knowing, so please help other participants if you think you can help.\n", " - There will no doubt be a range of experiences and people moving at different paces in these groups. Please be mindful of that. If you find there is too much chatter and you can't focus on getting things done, feel free to mute audio.\n", " - If you fall behind on the independent exercises, don't worry and prioritise any group work or discussion at the end of a breakout session. You can catch up between sessions." @@ -1036,7 +1035,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.8.10" + "version": "3.10.6" }, "rise": { "theme": "solarized" From 5752fbbb73a2a4fb4382d17bb6667d3d0b6b9622 Mon Sep 17 00:00:00 2001 From: bielsnohr Date: Wed, 19 Apr 2023 16:28:25 +0100 Subject: [PATCH 46/58] Add missing import in persistence episode --- _extras/persistence.md | 1 + 1 file changed, 1 insertion(+) diff --git a/_extras/persistence.md b/_extras/persistence.md index ab0379062..f071c82ff 100644 --- a/_extras/persistence.md +++ b/_extras/persistence.md @@ -213,6 +213,7 @@ we'll use the format we used as JSON example earlier. # file: inflammation/serializers.py import json +from inflammation import models class PatientSerializer: model = models.Patient From c0fbfa8e655391d8204819205a3ea2f5fa0d8cc8 Mon Sep 17 00:00:00 2001 From: bielsnohr Date: Tue, 6 Jun 2023 16:43:48 +0100 Subject: [PATCH 47/58] =?UTF-8?q?=E2=9C=A8=20Add=20further=20supplemental?= =?UTF-8?q?=20content=20to=20slides=20for=20Section=203?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- slides/section_3_software_arch_design.ipynb | 235 +++++++++++++++++++- 1 file changed, 229 insertions(+), 6 deletions(-) diff --git a/slides/section_3_software_arch_design.ipynb b/slides/section_3_software_arch_design.ipynb index f0ed3bd74..02f60a097 100644 --- a/slides/section_3_software_arch_design.ipynb +++ b/slides/section_3_software_arch_design.ipynb @@ -104,14 +104,14 @@ } }, "source": [ - "- Split into breakout rooms\n", + "- Send learners off to do exercises:\n", "- If learners need time to read through the content about paradigms (based on questions above), then give an additional 10 minutes to do that\n", "- Allow about 5 minutes for the FizzBuzz exercise" ] }, { "cell_type": "markdown", - "id": "6a4c9601", + "id": "50fb1b17", "metadata": { "slideshow": { "slide_type": "subslide" @@ -127,8 +127,18 @@ "xx[x %% 5 == 0] <- \"Buzz\"\n", "xx[x %% 15 == 0] <- \"FizzBuzz\"\n", "xx\n", - "```\n", - "\n", + "```" + ] + }, + { + "cell_type": "markdown", + "id": "6a4c9601", + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, + "source": [ "#### C (imperative, procedural)\n", "```cpp\n", "#include\n", @@ -196,6 +206,41 @@ "- at the end of the day, we are again trying to create a well-defined _interface_ for how to interact with these objects / software components" ] }, + { + "cell_type": "markdown", + "id": "1cf12b86", + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, + "source": [ + "### Decorators\n", + "\n", + "Decorators are _syntactic sugar_ for the case where we want to wrap a function with another function:\n", + "\n", + "```python\n", + "def my_decorator(func):\n", + " def wrapper():\n", + " print(\"Before wrapped function\")\n", + " func()\n", + " print(\"After wrapped function\")\n", + " return wrapper\n", + "\n", + "# we can replace this\n", + "def my_function():\n", + " print(\"Whee!\")\n", + " \n", + "my_function = my_decorator(my_function)\n", + "my_function()\n", + "\n", + "# with this\n", + "@my_decorator\n", + "def my_function():\n", + " print(\"Whee!\")\n", + "```" + ] + }, { "cell_type": "markdown", "id": "7e1e6b23", @@ -225,12 +270,16 @@ }, "source": [ "- Set learners into breakout rooms for 45 minutes with instructions on slide\n", + "- Please take the note about Test Driven Development on board as much as possible: write a test for the feature before implementing the feature.\n", "\n", "- Post-exercise comment: there will probably be the temptation to inherit from the builtin `list` class when implementing `Library`. \n", " - Subclassing from builtin types is generally a bad idea for a host of complex reasons. \n", " - The most easily comprehensible is that by inheriting a builtin type, you inherit a lot of behaviour that you might not intend to have for your new class. \n", " - On the flip side, it is also quite restrictive. Is a Library really just a list? We might decide to add other functionality, like opening hours, later on. How does that data fit into the definition of a list? Well, it doesn't. \n", - " - If you really want to inherit from something here, then the better approach is to use the `abc` (abstract base class) module in Python and pick something from there that gets you closer to your desired functionality.\n", + " - If you really want to inherit from something here, then the better approach is to use the `collections.abc` (abstract base class) module in Python and pick something from there that gets you closer to your desired functionality.\n", + "- A note about inheritance vs composition is probably worthwhile\n", + " - Inheritance tends to be quite abused and IMO should not be used as often as it is; it leads to very complex hierarchies of classes that make it difficult to determine where something is actually defined\n", + " - Composition tends to lead to better outcomes in my experience\n", "- If anyone asks about Doctor OO implementation, some additional feature ideas\n", " - using the `dataclass` decorator offers a lot of advantages for these classes\n", " - adding an age to patients could be helpful (fairly simple)\n", @@ -239,6 +288,37 @@ " - a CSV reader of patient data (and preferably groups of patients data)" ] }, + { + "cell_type": "markdown", + "id": "9830a50e", + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, + "source": [ + "### Class vs Static Methods\n", + "\n", + "One common use case for class methods is to create alternate _constructors_ for a class:\n", + "\n", + "```python\n", + "class Circle:\n", + " def __init__(self, radius):\n", + " self.radius = radius\n", + "\n", + " @classmethod\n", + " def from_diameter(cls, diameter):\n", + " return cls(radius=diameter / 2)\n", + "```\n", + "\n", + "Then, we can create `Circle` objects using either the radius or diameter:\n", + "\n", + "```python\n", + "circle_1 = Circle(radius=1)\n", + "circle_2 = Circle.from_diameter(radius=2)\n", + "```" + ] + }, { "cell_type": "markdown", "id": "bcff090f", @@ -348,6 +428,51 @@ " - but this is not the case for all languages" ] }, + { + "cell_type": "markdown", + "id": "6ebea73f", + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, + "source": [ + "### Alternate Sum of Squares\n", + "\n", + "```python\n", + "from functools import reduce\n", + "\n", + "\n", + "def sum_of_squares(sequence):\n", + " squares = [x * x for x in sequence]\n", + " return reduce(lambda a, b: a + b, squares)\n", + "\n", + "\n", + "def to_integer(sequence):\n", + " return [int(x) for x in sequence]\n", + "\n", + "\n", + "def remove_comments(sequence):\n", + " return [x for x in sequence if x[0] != \"#\"]\n", + "\n", + "sequence = ['#100', '1', '2', '4']\n", + "sum_of_squares(to_integer(remove_comments(sequence)))\n", + "```" + ] + }, + { + "cell_type": "markdown", + "id": "0aa217d2", + "metadata": { + "slideshow": { + "slide_type": "notes" + } + }, + "source": [ + "- This is closer to what actual purely function languages do: they chain together a sequence of function calls\n", + "- And example of what this looks like in another language can be seen here: https://bielsnohr.github.io/2023/02/18/elm-advent-of-code-2022.html#array-handling" + ] + }, { "cell_type": "markdown", "id": "9cc57670", @@ -455,6 +580,40 @@ "- Send learners into breakout rooms for about 35 minutes" ] }, + { + "cell_type": "markdown", + "id": "29903c07", + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, + "source": [ + "### Some More Thoughts about Software Design\n", + "\n", + "- Requirements collections is the important prerequisite since they determine the design constraints; the questions you ask to collect requirements are similar to the exercise **🖉 Types of Software**, but there can be many more\n", + "- Draw it out!\n", + " - Use diagrams and schematics to try and visualise what a software programme/system will look like\n", + " - It doesn't have to be fancy; just having something is far better than nothing\n", + " - Seeing the connections between software components can usually help you further refine the design\n", + "- Design it twice\n", + " - The more designs you consider, the higher the chance you will move towards a better one" + ] + }, + { + "cell_type": "markdown", + "id": "869f0e23", + "metadata": { + "slideshow": { + "slide_type": "notes" + } + }, + "source": [ + "- Also, emphasise the point from the course content: it is good to not get too caught up in the details of whether you are implementing an MVC architecture\n", + " - this is probably not an architecture that most would see or implement in research software\n", + " - but the point of separating the \"model\" from the \"view\" (i.e. plotting) is definitely something worthwhile" + ] + }, { "cell_type": "markdown", "id": "4191fbd3", @@ -479,6 +638,70 @@ "- not much intro needed, other than the fact that reading and writing data is an important step for your code (even if not the most exciting)" ] }, + { + "cell_type": "code", + "execution_count": 1, + "id": "da9f8129", + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, + "outputs": [], + "source": [ + "import json\n", + "\n", + "patient = {\"name\": \"Alice\", \"observations\": [1, 6, 8, 0, 5]}\n", + "with open(\"patient_serialized.json\", \"w\") as fp:\n", + " json.dump(patient, fp)" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "id": "3375de80", + "metadata": { + "slideshow": { + "slide_type": "fragment" + } + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "{\"name\": \"Alice\", \"observations\": [1, 6, 8, 0, 5]}" + ] + } + ], + "source": [ + "! cat patient_serialized.json " + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "id": "035dda90", + "metadata": { + "slideshow": { + "slide_type": "fragment" + } + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "{'name': 'Alice', 'observations': [1, 6, 8, 0, 5]}\n" + ] + } + ], + "source": [ + "with open(\"patient_serialized.json\", \"r\") as fp:\n", + " patient_deserialized = json.load(fp)\n", + "print(patient_deserialized)" + ] + }, { "cell_type": "markdown", "id": "9df64860", @@ -525,7 +748,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.8.10" + "version": "3.10.6" }, "rise": { "theme": "solarized" From c1ba198721834fffab0f414825cf2044b61f6e2c Mon Sep 17 00:00:00 2001 From: bielsnohr Date: Wed, 1 Nov 2023 10:48:23 +0000 Subject: [PATCH 48/58] =?UTF-8?q?=E2=8F=AA=20Revert=20"Remove=20the=20beta?= =?UTF-8?q?=20banner=20temporarily"?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This reverts commit cff7ce8cc2f28146be3dc358110f32c5bc444883. --- _config.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/_config.yml b/_config.yml index ab9a92760..434f152ab 100644 --- a/_config.yml +++ b/_config.yml @@ -14,7 +14,7 @@ title: "Intermediate Research Software Development" # Life cycle stage of the lesson # possible values: "pre-alpha", "alpha", "beta", "stable" -life_cycle: "stable" +life_cycle: "beta" #------------------------------------------------------------ # Generic settings (should not need to change). From d8f8725d157763d19a26414f9a8abe1349a80421 Mon Sep 17 00:00:00 2001 From: bielsnohr Date: Wed, 1 Nov 2023 11:27:31 +0000 Subject: [PATCH 49/58] =?UTF-8?q?=F0=9F=99=88=20Ignore=20vscode=20settings?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitignore | 1 + 1 file changed, 1 insertion(+) diff --git a/.gitignore b/.gitignore index 3d63e323d..77b7db019 100644 --- a/.gitignore +++ b/.gitignore @@ -22,3 +22,4 @@ venv/ .venv/ .*history .tool-versions +.vscode/ From 23dac31e7a3877ffe634c8c2061f10db9830513d Mon Sep 17 00:00:00 2001 From: Aleksandra Nenadic Date: Thu, 9 Nov 2023 17:20:04 +0000 Subject: [PATCH 50/58] Replacing checkout with switch --- _episodes/14-collaboration-using-git.md | 18 +++++++++--------- _episodes/15-coding-conventions.md | 8 ++++---- _episodes/16-verifying-code-style-linters.md | 6 +++--- _episodes/21-automatically-testing-software.md | 4 ++-- ...continuous-integration-automated-testing.md | 2 +- ...4-diagnosing-issues-improving-robustness.md | 4 +--- _episodes/41-code-review.md | 2 +- _episodes/42-software-reuse.md | 4 ++-- 8 files changed, 23 insertions(+), 25 deletions(-) diff --git a/_episodes/14-collaboration-using-git.md b/_episodes/14-collaboration-using-git.md index a7d354704..59363e829 100644 --- a/_episodes/14-collaboration-using-git.md +++ b/_episodes/14-collaboration-using-git.md @@ -105,9 +105,9 @@ sequenceDiagram Staging Area->>+Local Repository: git commit Local Repository->>+Remote Repository: git push Remote Repository->>+Local Repository: git fetch - Local Repository->>+Staging Area:git checkout + Local Repository->>+Staging Area:git checkout / git switch Local Repository->>+Staging Area:git merge - Remote Repository->>+Working Directory: git pull (shortcut for git fetch followed by git checkout/merge) + Remote Repository->>+Working Directory: git pull (shortcut for git fetch followed by git checkout / switch / merge) --> - - - - - - - - - - - - - - - - - - - - - image/svg+xml - - - - - - - - - - MODEL - VIEW - CONTROLLER - USES - MANIPULATES - - - - - SEES - - - UPDATES - USER - - - - diff --git a/slides/rough_notes.ipynb b/slides/rough_notes.ipynb deleted file mode 100644 index 16daf04eb..000000000 --- a/slides/rough_notes.ipynb +++ /dev/null @@ -1,752 +0,0 @@ -{ - "cells": [ - { - "cell_type": "markdown", - "id": "e7780fdb", - "metadata": { - "slideshow": { - "slide_type": "notes" - } - }, - "source": [ - "# Setup\n", - "\n", - "- Installation of required software should have been handled before, but make sure on the day before starting that all participants have access to the required tools: Bash, Git, a GitHub account, Python with pip and venv\n", - "- TODO need to make a decision about VSCode and whether we will support it " - ] - }, - { - "cell_type": "markdown", - "id": "d20e17e6", - "metadata": { - "slideshow": { - "slide_type": "notes" - } - }, - "source": [ - "# [Setting the Scene](http://0.0.0.0:4000/00-setting-the-scene/index.html)\n", - "\n", - "- **make sure to start recording and notify participants we will be recording**\n", - "- fill out narrative about target audience and why we are here:\n", - " - we have learned programming to do our research: it is a tool and a means to an end\n", - " - likely we are mostly self-taught or have taken some intro courses\n", - " - but we now find the techniques we have picked up to be inadequate for the software we need to write\n", - " - single scripts no longer cut it and we are collaborating with more people, or have users for the software we are producing\n", - " - TODO think of a question to ask here like: how many times have you found yourself coding and thought \"there must be a better way to do this\" or \"this software is getting in the way of my research\", \"why is it so difficult to get this program to work?\", \"this code is incomprehensible and really difficult to modify\", \"I screwed up my Python installation again and need to reinstall my OS\", \n", - "\n", - "- objective of this course is to deal with some of these struggles you might be facing by teaching some intermediate software engineering skills\n", - " - just like maths, statistics, and physics theory, software engineering is a skill you need to continue to develop\n", - "\n", - "- teach intermediate software engineering skills so that you can:\n", - " - restructure existing code and design more robust software from scratch\n", - " - automate the process of testing and verifying software correctness \n", - " - support collaborations with others in a way that mimics a typical collaborative software development process\n", - " - get you ready to distribute your code for use by others\n", - "\n", - "- I want this to be seen as a collaborative learning session\n", - " - I'll be doing a bit of instructing, but most of the learning will come from the many exercises and other activities\n", - " - Please type along as I am working at the command line or coding\n", - " - none of us here are computer scientists and have a variety of different backgrounds; so we can all contribute to this learning process, and this shouldn't be viewed as knowledge being imparted from your instructors on high; please speak up and get involved in the conversation\n", - "\n", - "- This course has necessarily made some decisions about the tools used to demonstrate the concepts being taught\n", - " - Python is used as a fairly ubiquitous and syntactically easy language; however, the point needs to be clear that this isn't a course about Python; the course is about software engineering, and it is using Python as the playground to demonstrate the skills and concepts that should be valuable independent of the domain and language\n", - " - to this end, I will be trying to draw connections with other languages and development scenarios when applicable since I know Python isn't necessarily the main development language for a researcher at UKAEA\n", - " - in the long run, you will encounter many more tools than those shown here, and you will form your own preferences; that is fine and we are in no way suggesting these are the definitive tools that should be used by any researcher who codes\n", - "- Rules of engagement\n", - " - Please use the green check mark and red x to indicate your status with lessons or the current content; this is a more subtle way of indicating that you need help without interrupting the instructor\n", - " - At the same time, please feel free to interrupt at any point with a question, preferably through the raise hand feature\n", - " - Polls will also be used to check how you are getting on. Please fill these in and don't ignore them! We want to know how you are doing, and the more information we have about your progress, the better we can tailor the course to you and make it more valuable\n", - " - Many portions of the course will involve breaking into separate groups to do work. Most of this will be independent work, but there are a few group tasks. There will usually be a helper in your room if you need assistance. Please also open up questions to your fellow participants.\n", - " - There will no doubt be a range of experiences and people moving at different paces in these groups. Please be mindful of that. If you find there is too much chatter and you can't focus on getting things done, feel free to mute audio.\n", - " \n", - "## Content Overview\n", - "\n", - "Four main sections for the course.\n", - "\n", - "![](../fig/course-overview.png)\n", - "\n", - "I think a single slide will be fine to cover all the sections, giving a brief idea about each.\n", - "\n", - "1. Setting up Software Environment: **PyCharm or VSCode** for editing, testing and debugging, **GitHub** for collaborative development, **virtual environments** for dependency isolation, and **Python code style**.\n", - "2. Verifying Software Correctness at Scale: how to set up a **test framework** and automate and scale testing with **Continuous Integration (CI)**\n", - "3. Designing Software Architecture: an exploration of different **software design paradigms** and their advantages and disadvantages\n", - "4. Managing and Improving Software: learn how to **collaborate** on code through a group project covering **issue tracking** and **software support** (TODO improve this once I go through the content)" - ] - }, - { - "cell_type": "markdown", - "id": "8e803f41", - "metadata": { - "slideshow": { - "slide_type": "notes" - } - }, - "source": [ - "## [Section 1: Environment For Collaborative Code Development](http://0.0.0.0:4000/01-section1-intro/index.html)\n", - "\n", - "### Overview Slide / Intro\n", - "\n", - "- get set up with the _tools_ for collaborative code development, and of course there are lots of decisions to make\n", - "- the recommendations are opinionated but backed by experience\n", - "1. Command Line & Virtual Development Environment: use of Git through command line and then the Python tools `venv` and `pip` to manage dependencies and isolate our project\n", - "2. Integrated Development Environment (IDE): course content supports **PyCharm**, but we will do our best to also support **VSCode** assuming you have prior knowledge of it\n", - "3. GitHub and Git development workflows\n", - " - _Mod_ there should be some reference to git workflows in this paragraph\n", - "4. Python coding style: PEP8\n", - "\n", - "_Mod_ Add reference to python coding style on this page" - ] - }, - { - "cell_type": "markdown", - "id": "0ef6a18c", - "metadata": { - "slideshow": { - "slide_type": "notes" - } - }, - "source": [ - "# [Introduction to Software Design and Development](http://0.0.0.0:4000/02-software-development/index.html)\n", - "\n", - "- _Fix_ this episode feels a bit out of place here\n", - " - the section starts with talking about tools and environment, and then quickly moves to talking about design without any warning, and then immediately back to tools and environment\n", - " - I think the problem is that there is no mention that there will be an introduction to the example project that will be used throughout the course; if there is some warning, then I think this would be fine, and the piece on architecture can probably stay where it is at the bottom of the page\n", - " - Also, the episode could do with a rename! It should be called \"Introduction to Our Project\" or something like that\n", - " - I have made these modifications in my `mbluteau-modifications` branch\n", - "- Give an introduction to the \"patient inflammation project\"\n", - " - the software project studies inflammation in patients who have been given a new treatment for arthritis and reuses the inflammation dataset from the novice Software Carpentry Python lesson\n", - " - The dataset contains information for 60 patients, who had their inflammation levels recorded for 40 days, so a 2D dataset like below:\n", - " \n", - "![](../fig/inflammation-dataset.svg)\n", - " \n", - "- The analysis is incomplete and there are some errors that you will need to correct\n", - "- First, we need to get the project, so go to the course website and follow the instructions there for copying and then cloning the repository locally on your machine to work on\n", - " - Complete the lesson \"Obtain the Software Project Locally\"\n", - " - please let us know when you are done by using a sticky note\n", - "- Let's take a look at the project structure\n", - " - Demo this from commandline\n", - " - I like to use `tree`\n", - " - With this we see:\n", - " - README file (that typically describes the project, its usage, installation, authors and how to contribute),\n", - " - Python script inflammation-analysis.py provides the main entry point into the application\n", - " - three directories - inflammation, data and tests\n", - " - inflammation directory has two other Python scripts that we will look at more later\n", - " - data directory has the data we will be analysing in csv files\n", - " - tests directory has tests for our Python programs that we will be adding to and correcting\n", - " - **Important Point**: the structure of this project is not arbitrary\n", - " - a difference between novice and intermediate softare development is that at the intermediate level the structure of the project should be planned in advance, and this includes the structure of abstract entities like software components and how they interact\n", - " - in contrast, a novice will make this structure up as they go along (nothing wrong with that, it is part of learning, but at some point you need to stop doing that and have a think about these things in advance before you start a project).\n", - " - this is probably an appropriate point to link to the Python Cookiecutter project template: https://github.com/ukaea/scientific-python-cookiecutter\n", - "- Complete exercise \"Have a Peak at the Data\". Please post your answers in shared document.\n", - "\n", - "## Software Architecture\n", - "\n", - "- \"Software architecture is the fundamental structure of a software system... It refers to a 'bigger picture' of a software system that describes high-level components (modules) of the system and how they interact.\"\n", - "- Modules are an important idea\n", - " - common examples: libraries that we import and use in our own code (e.g. `numpy` and `matplotlib`), classes in object-oriented languages\n", - " - modules are largely self-contained (they can have dependencies) but there should be a well-defined way to interact with it (otherwise, what is the point?)\n", - " - the specification or contract of how to interact with a module is called a **programming interface** and these are everywhere in software engineering (e.g. user interfaces, APIs, and even function signatures)\n", - "- Have a read of the Wikipedia articles about different architectures (5 minutes)\n", - "- What were some common features? Are any subsets or special cases of others? Any practical differences?\n", - " - MVC (as presented in the course content, which is actually Model-View-Adapter) is sort of a subset of the multitier/layer architecture concept, where the view is the \"presentation layer\", the controller is the \"application/business layer\" and the model is the \"data layer\"\n", - " - client-server is another subcase of multilayer architecture (where the presentation and application layers have been merged on the client-side)\n", - " - in contrast, SOA takes a much more loosely coupled view of software components; good example is HTTP-based REST APIs\n", - " - there is an agreed communication protocol over a network that the services use to communicate\n", - " - the purpose and function of each of these services is much less prescriptive than MVC or multilayer\n", - " - There is clear differentiation on underlying hardware: MVC is implementation agnostic (could be on sigle device or multiple) while multitier and server-client require distinct machines communicating between each other; similarly for SOA\n", - "- MVC is likely most applicable to research contexts and it is also what is used for the example project\n", - "- Traditional MVC is actually a bit different from the course content:\n", - "![](../fig/MVC-Process.svg)\n", - "By RegisFrey - Own work, Public Domain, https://commons.wikimedia.org/w/index.php?curid=10298177\n", - "- There is direct communication between the model and the view, and the controller does not interact with the view\n", - "- What is presented here is more accurately Model-View-Presenter/Mediator, where the view and model are completely decoupled and unaware of each other:\n", - "![](../fig/mvc-DNA-guide-GUI.png)\n", - "- TODO raise an issue about this on central repo?\n", - "- For the example project, the MVC corresponds as follows:\n", - " - **Controller** = `inflammation-analysis.py` that performs basic statistical analysis over patient data and provides the main entry point into the application\n", - " - **View** = `inflammation/view.py` TODO add brief summary\n", - " - **Model** = `inflammation/model.py` TODO add brief summary\n", - "- Discussion session (5 minutes) in small groups about how MVC might be applicable to their own work. Think of a piece of software you work on, and how this might be used for it. Or think of a new tool you might want to make that uses this.\n", - "- Some final words on architecture and these particular patterns:\n", - " - don't get too caught up determining exactly what functionality should be the responsibility of each component\n", - " - the act of splitting things up and thinking about how they will interact through interfaces is where you get the most value\n", - " - it is likely you were already doing this in an informal fashion, but good to think about it more explicitly **and try to record your design in some appropriate format**\n", - " - TODO if there is no mention of how to store or record design information in a later section, raise an issue that some mention should be made about options" - ] - }, - { - "cell_type": "markdown", - "id": "09c563d5", - "metadata": { - "slideshow": { - "slide_type": "notes" - } - }, - "source": [ - "# [Virtual Environments For Software Development](http://0.0.0.0:4000/03-virtual-environments/index.html)\n", - "\n", - "- Switch to terminal, but follow the notes here\n", - "- Try to run the analysis script from the command line: `python3 inflammation-analysis.py`\n", - " - If you are in a clean Python installation, this should throw a `ModuleNotFoundError` which proves we have some external dependencies that are not installed and we need to get through a package manager\n", - " - Depending on what learners have in their `PYTHONPATH` and site packages for their current default environment, they may or may not have success with this command\n", - " - Take a look at the top of the views file to see the other dependencies: `head inflammation/views.py`\n", - "- Before jumping to install matplotlib and numpy, it is worth a thought about other projects we might be currently be working on or in the future\n", - " - what if they have a requirement for a different version of numpy or matplotlib? or a different python version?\n", - " - in general, each project is going to have its own unique configuration and set of dependencies\n", - " - to solve this, we set up a virtual environment for each project, containing a specific python version and set of libraries that won't interact with others on the system\n", - "- TODO create more notes about virtual envs and package managers\n", - "- Get learners for follow content from \"Creating a `venv` Environment\" to \"Exporting/Importing an Environment with `pip`\"\n", - " - remember to use sticky notes for status\n", - "- Does anyone have opinions on the naming of a virtual environment folder?\n", - "- And important thing to note with `venv` is that you can only ever use the system version of python with it\n", - " - So, be mindful that if there is an update of your system installation then your virtual environment will stop working, and you will need to get rid of it and create a new one\n", - " - this is the process to do that:\n", - " ```bash\n", - " rm -r venv/\n", - " python3 -m venv venv\n", - " pip install #this is probably one of the best arguments for maintaing a requirements.txt\n", - " ```\n", - "- Now, onto the content about exporting/importing an environment\n", - " - I think there are actually two scenarios here:\n", - " 1. If you are providing a python application (i.e. building and deploying something) or doing a project that is a scientific analysis, then it is fine to pin your dependencies as detailed here in a `requirements.txt`\n", - " 2. If you are providing a reusable library (i.e. one that might be called from someone else's code or another library) then pinning can be overly restrictive and cause issues for package managers, and it is considered bad practice to pin your dependencies like this\n", - " - Instead, you should specify loose dependency requirements in the `install_requires=[...]` metadata of `setup.py`. A full setup.py project is outside the scope of this course, but there are many good resources on this.\n", - " - \n", - " - \n", - " - and if you want a template for Python projects that keeps `requirements.txt` and `install_requires` synced: \n", - " - In general, I would recommend against pinning unless necessary\n", - "- Get learners to practice exporting, then deleting their exising virtual env, the recreating it with the requirements.txt file\n", - "- Live code the \"Running Python Scripts From Command Line\"\n", - " - confirm everyone gets the same error\n", - "- TODO a note about environment management for other languages\n", - " - Ask John and Kristian about C++\n", - " - Fortran???\n", - " - The \"nuclear\" option is to develop in a Docker container and specify the environment with a Dockerfile\n", - " - However, this might not be possible for a variety of reasons: performance and developing on a cluster" - ] - }, - { - "cell_type": "markdown", - "id": "86faec44", - "metadata": { - "slideshow": { - "slide_type": "notes" - } - }, - "source": [ - "# [Integrated Development Environments](http://0.0.0.0:4000/13-ides/index.html)\n", - "\n", - "- Most of us probably started out programming with a simple text editor and ran our programs from the command line with a compiler or interpreter\n", - " - This is fine to start off, but as our projects become more complex with more files and configurations, it natural that the tools we use to develop need to evolve as well\n", - " - Enter the Integrated Development Environment (IDE)\n", - "- Preference for Code Editors and IDEs is one of the more contentious and strongly felt topics among software developers, but the bottom line is that if a tool works for you and helps you be productive, then it is absolutely fine to use that tool\n", - " - But again, for the practicalities of this course, the decision to use PyCharm has been made\n", - " - If you are comfortable enough in another IDE or code editor to get the functionality demonstrated in the content below, then please feel free to use that tool here, but this is a disclaimer that we cannot promise to resolve any issues you have, and if these issues are holding the group up then we will need to move on\n", - "- TODO in the intro email, I should make it clear that if they want to use a different IDE, then they should read this section in advance and make sure that they can set up analogous functionality in their IDE\n", - "- Let learners read through and try out content from \"Using the PyCharm IDE\" (~ 30mins -- I think this could be less, so poll learners after 20 minutes)\n", - " - Should this be done in breakout rooms? It is probably fine that this is a solo portion of the course, and if learners have trouble then a helper can take them into a breakout room\n", - " - Encourage learners to try out the features that are being discussed and don't worry about making modifications to their code since it is under version control it will be easy to reset any changes\n", - " - Reinforce that we won't be using the version control interface of PyCharm, but it is a perfectly useable feature, and again this comes down to preference\n" - ] - }, - { - "cell_type": "markdown", - "id": "a3370700", - "metadata": { - "slideshow": { - "slide_type": "notes" - } - }, - "source": [ - "# [Collaborative Software Development Using Git and GitHub](http://0.0.0.0:4000/14-collaboration-using-git/index.html)\n", - "\n", - "- Walk through this image as a Git Refresher:\n", - "\n", - "![](../fig/git-lifecycle.png)\n", - "\n", - "- Do a poll to see if everyone is comfortable with all of the operations and terminology in that diagram\n", - " - allow for text entry for any terms that are uncertain\n", - " - Go into more depth on the terms that come up\n", - "\n", - "- Get learners to independently go through the section \"Checking-in Changes to Our Project\" (~ 10 minutes)\n", - " - note that SSH keys are also an equally valid (and now equally convenient) form of authentication with GitHub\n", - " - perhaps dig up a resource on this\n", - " - for the token, this seems to be the only resource that is actually needed: https://www.edgoad.com/2021/02/using-personal-access-tokens-with-git-and-github.html\n", - " - TODO perhaps suggest that this is the resource they lead with in the course content and say that users should follow it through; also, to prevent link rot it might be worthwhile to pull these instructions into the course itself\n", - " - for learners, remind them that they will need to copy the access token somewhere on their computer; if they use a password manager, consider making a new entry for this token; also, there are instructions to cache their token with the git cli, and that will make this more convenient since they will not need to enter the token with every git operation that communicates with GitHub\n", - "\n", - "- Git branches\n", - " - saying branches are versions of our code, while technically correct, is somewhat loose language and prone to potential errors\n", - " - TODO I think the term \"version\" should be reserved for versions of the code that are released; raise an issue about this\n", - " - branches are actually just a pointer to a commit, and that commit _can_ (but doesn't have to) define a distinct or divergent commit history of our main branch\n", - " - Talk through this image:\n", - " ![](../fig/git-feature-branch.svg)\n", - " - the best practice is to use a new branch for each separate and self-contained unit/piece of work you want to add to the project. This unit of work is also often called a feature and the branch where you develop it is called a feature branch. Each feature branch should have its own meaningful name - indicating its purpose (e.g. “issue23-fix”). If we keep making changes and pushing them directly to main branch on GitHub, then anyone who downloads our software from there will get all of our work in progress - whether or not it’s ready to use! So, working on a separate branch for each feature you are adding is good for several reasons:\n", - "\n", - " - it enables the main branch to remain stable while you and the team explore and test the new code on a feature branch,\n", - " - it enables you to keep the untested and not-yet-functional feature branch code under version control and backed up,\n", - " - you and other team members may work on several features at the same time independently from one another,\n", - " - if you decide that the feature is not working or is no longer needed - you can easily and safely discard that branch without affecting the rest of the code.\n", - "\n", - "\n", - "- Something missing from this section is a mention that a multi-person project, even if not external facing or with no users other than the developers, should have some record or agreement of how branching will work, and some document telling potential contributors how they can submit contributions through pull requests, usually in a `CONTRIBUTING.md` file.\n", - " - e.g. contributors fork you project, then work in their own feature branch, and when tested, they submit a PR to the *develop* branch of the upstream project\n", - " \n", - "- Get learners to go through the remainder of the content from \"Creating Branches\" onwards (~ 15 minutes)" - ] - }, - { - "cell_type": "markdown", - "id": "93de7a62", - "metadata": { - "slideshow": { - "slide_type": "notes" - } - }, - "source": [ - "# [Python Coding Conventions](http://0.0.0.0:4000/15-coding-conventions/index.html)\n", - "\n", - "- we now have all the tools to develop code in this course, but there is one further consideration about how these tools will support and guide our creation of code\n", - "\n", - "> \"Any fool can write code that a computer can understand. Good programmers write code that humans can understand.” — Martin Fowler\n", - "\n", - "- one of the main features of whether code is understandable is whether it follows a consistent *style*\n", - "- *style* encompasses but is not limited to\n", - " - cleanly and consistently formatted\n", - " - descriptive comments and docstrings\n", - " - descriptive names for variables, functions, classes, and modules\n", - "- the style you use for your code will vary depending on the language and what your team has agreed upon\n", - " - in order to help with implementing a consistent style, style guides or sets of conventions are used\n", - " - these can be agreed upon by colleagues or communities\n", - " - the important point is this: make sure whatever sytle you choose that it is consistent **within** a project, and if possible also across related projects\n", - "- Unless you have particular requirements, it is best to go with a sytle guide that has the majority consensus for a particular language (albeit sometimes this won't exist, so choose what seems best)\n", - " - In Python, this is PEP8\n", - " - C++\n", - " - [`clang-format`](https://clang.llvm.org/docs/ClangFormat.html) is widely used for enforcing formatting, and there are [built-in presets](https://clang.llvm.org/docs/ClangFormatStyleOptions.html#configurable-format-style-options) for existing conventions followed by Google, LLVM, etc. Project specific settings made in a `.clang-format` file.\n", - " - our guide on C++ for VSCode recommends cpplint: https://intranet.ccfe.ac.uk/software/guides/vscode-cpp.html\n", - " - Some other useful resources that cover a broader scope than just style and formatting are [Google's C++ Style Guide](https://google.github.io/styleguide/cppguide.html#Formatting) and the [C++ Core Guidelines by Bjarne Stroustrup (the creator of C++)](https://github.com/isocpp/CppCoreGuidelines/blob/master/CppCoreGuidelines.md)\n", - " - Fortran\n", - " - we have a great guide on tooling in VSCode: https://intranet.ccfe.ac.uk/software/guides/vscode-fortran.html\n", - " - this is a good online resource: https://fortran-lang.org/learn/best_practices\n", - "\n", - "- What IDEs help with: set it and forget it!\n", - " - In PyCharm, adherance to PEP8 will automatically be checked and violations flagged for fixing (demonstrate this live)\n", - " - It is worth mentioning that at a project level, not everyone will be using the same IDE, so it is better to use an independent tool called a linter that will enforce these style requirements\n", - " - `black` is a popular but harsh and opinionated tool that can take some getting used to\n", - " - `flake8` and `pylint` a bit more conventional -> PyCharm can be modified to use one of these directly (outside of the scope of this course)\n", - "\n", - "- Split learners into breakout rooms and get them to work through content from \"Indentation\" section (~ 30 minutes)\n", - " - poll/status check at the end\n", - "- Some comments after exercises\n", - " - There are many different docstring formats, and I tend to not like the Sphynx default very much. Google or Numpy style docstrings much more readable. TODO raise this as an amendment?\n", - " - TODO for the exercise to improve the docstrings, no mention is made of the fact that the module docstring should include a list of the functions in the module. This is another valid improvement.\n", - " \n", - "```python\n", - "\"\"\"\n", - "Functions:\n", - " load_csv - Load a Numpy array from a CSV file\n", - " daily_mean - Calculate the daily mean of a 2D inflammation data array\n", - " daily_max - Calculate the daily max of a 2D inflammation data array\n", - " daily_min - Calculate the daily min of a 2D inflammation data array\n", - "\"\"\"\n", - "```" - ] - }, - { - "cell_type": "markdown", - "id": "bde031f2", - "metadata": { - "slideshow": { - "slide_type": "notes" - } - }, - "source": [ - "# [Section 2: Ensuring Correctness of Software at Scale](http://0.0.0.0:4000/20-section2-intro/index.html)\n", - "\n", - "\n", - "![](../fig/section2-overview.png)\n", - "\n", - "- Probably the most important thing to take away from this course\n", - "\n", - "- Pre-course questions about how to deal with drift in regression test results\n", - " - complicated especially if these are predictive model results\n", - " - main thought: need to be very careful about what you are testing\n", - " - A dependent variable that is highly sensitive to model parameters is not a good choice for regression testing\n", - " - A dependent variable that has tight coupling to experimental results and should be stable is a better choice (drift in this case indicates your model isn't sastifying basic validation)" - ] - }, - { - "cell_type": "markdown", - "id": "ba469861", - "metadata": { - "slideshow": { - "slide_type": "notes" - } - }, - "source": [ - "# [Automatically Testing your Software](http://0.0.0.0:4000/21-automatically-testing-software/index.html)\n", - "\n", - "- Big questions: how can we be sure the code we have written is correct, produces accurate results, and is of good quality?\n", - "- This is the domain of Verification and Validation (V&V), in which testing plays an important role\n", - " - define V&V in the modelling/scientific context of research software? Probably out of scope\n", - " \n", - "> **testing:** The process of operating a system or component under specified conditions, observing or recording the results, and making an evaluation of some aspect of the system or component\n", - "> — IEEE Standard Glossary of Software Engineering\n", - "- i.e. inferring the _behaviour_ of our code through artifacts and making sure that matches what we expect or is required\n", - "- Types of testing\n", - " - Manual testing\n", - " - Automated testing: codify the expected behaviour of our software such that verification can happen repeatedly without user inspection\n", - " - Unit tests: tests for small function units of our code (i.e functions, class methods, class objects)\n", - " - Funcitonal or integration tests: work at a higher level, and test functional paths through your code, e.g. given some specific inputs, a set of interconnected functions across a number of modules (or the entire code) produce the expected result.\n", - " - Regression tests: compare the current output of your code (usually an end-to-end result) to make sure it matches previous output that you don't want to change\n", - " - there was a question that came in about drift in regression tests, and the short answer with how to deal with this is first determining whether the output you are tracking is actually an invariant. If not, then you will necessarily need to allow for relative proximity, but then you might question whether this is a good long term output to base your regression test on. In our area and science broadly, invariants tend to be some observable or experimental physical results, so if you test isn't based on that, you are probably going to have a tough time.\n", - "\n", - "- Breakout rooms from \"Set Up a New Feature Branch for Writing Tests\" (~45 minutes)\n", - "- status check\n", - "- comments from content\n", - " - FRUIT doesn't look very active, so I would recommend pFUnit for Fortran instead. TODO raise this on repo" - ] - }, - { - "cell_type": "markdown", - "id": "3bb0ac4d", - "metadata": { - "slideshow": { - "slide_type": "notes" - } - }, - "source": [ - "# [Scaling Up Unit Testing](http://0.0.0.0:4000/22-scaling-up-unit-testing/index.html)\n", - "\n", - "- in this section:\n", - " - parameterise our tests (i.e. run through multiple sets of parameters to test the same function, without writing a new test function for each parameter/data case)\n", - " - check how much of our code is covered by tests\n", - "- send off learners into breakout rooms again (~ 15 minutes)\n", - "- Limits to testing\n", - " - there are some good points there about getting value from testing\n", - " - what most researchers think: \n", - " - \"Peer review of my paper will be the test\"\n", - " - \"Looking at a graph is enough\"\n", - " - \"I don't have time to implement a clunky testing framework\"\n", - " - it hints that there is a spectrum between throwaway code that doesn't need to be tested and library code used by hundreds in a community that requires extensive testing suites with more than just unit tests\n", - " - where your particular code lies is a tricky question to answer sometimes, but a good rule of thumb is that if there is a chance that someone else will be using it, then you should give some thought to tests\n", - " - testing has a demonstrably positive impact upon the design on your code\n", - " - it must of course also be acknowledged that testing is not the answer to everything, and that it can't substitute for good manual and acceptance testing" - ] - }, - { - "cell_type": "markdown", - "id": "6d74d98f", - "metadata": { - "slideshow": { - "slide_type": "notes" - } - }, - "source": [ - "# [Continuous Integration for Automated Testing](http://0.0.0.0:4000/23-continuous-integration-automated-testing/index.html)\n", - "\n", - "- we can run tests on our machine, but how do we know they will work on someone elses machine without getting them to also pull our changes and run the tests? enter continuous integration. off you go!\n", - "- breakout rooms for ~ 45 mins\n", - "- comments\n", - " - GitLab has very similar functionality and there are plenty of resources on our internal GitLab about this (add link?)\n", - " - TODO What about data access on the GitLab runners? Or if you are on GitHub? Pose this to RSE team\n", - "- status check\n", - "- TODO the matrix of Python version uses 3.7 and 3.8, but the previous single Python version was 3.9. Should try to reconcile these." - ] - }, - { - "cell_type": "markdown", - "id": "bd823b59", - "metadata": { - "slideshow": { - "slide_type": "notes" - } - }, - "source": [ - "# Diagnosing Issues and Improving Robustness\n", - "\n", - "- Split learners into breakout rooms (~50 mins although I think could be less, take a status check early)\n", - "\n", - "- TODO where do the test results come from for the `patient_normalise` test? There should be some indication that a manual calculation might have been done. This is a crucial question that many researchers have: where to get and/or generate test data.\n" - ] - }, - { - "cell_type": "markdown", - "id": "d814939c", - "metadata": { - "slideshow": { - "slide_type": "notes" - } - }, - "source": [ - "# Section 3: Software Architecture and Design\n", - "\n", - "![](../fig/section3-overview.png)\n", - "\n", - "- move up a conceptual level compared to previous section about tests\n", - "- taking a look at the overall structure of our code and how we make design decisions about it\n", - " - this will influence how the code will interact with other code (API) and with users (UI/UX)" - ] - }, - { - "cell_type": "markdown", - "id": "52c08b55", - "metadata": { - "slideshow": { - "slide_type": "notes" - } - }, - "source": [ - "# Programming Paradigms\n", - "\n", - "![](../fig/paradigms.png)\n", - "\n", - "> Modified from _Davis, Daniel. 2013. “Modelled on Software Engineering: Flexible Parametric Models in the Practice of Architecture.” PhD dissertation, RMIT University._\n", - "\n", - "- this is nice schematic view of how the different paradigms relate and are classified (loosely)\n", - " - database = query language in the text\n", - "- if I have time to make notes, then walk through the content on this page\n", - " - otherwise, get learners to read and perhaps have some questions to prompt discussion about these paradigms\n", - " - getting a poll of which paradigms people use day-to-day could be interesting, as well as what they have used more generally\n", - "- how could functional programming be beneficial in a scientific context at UKAEA? Practically, what would it look like?\n", - " - wait for functional programming section to answer this\n", - "- exercise (write FizzBuzz program ~ 5 minutes)\n", - " - comment: the advantage of the functional programming style is that we can easily modify the factors that we want to consider and the code of the function we have written is unchanged, whereas for the structural or procedural style, we would need to rewrite the conditional statements each time\n", - " - also, the important part about the functional style is that we are taking an input, not changing it, and then producing a single output from that (this is what gives us that advantage above)" - ] - }, - { - "cell_type": "markdown", - "id": "dbfb399e", - "metadata": { - "slideshow": { - "slide_type": "notes" - } - }, - "source": [ - "# Object-Oriented Programming\n", - "\n", - "- Set off reading the \"Encapsulating data\" section and the \"Structuring Data\" exercise ~ 5-7 minutes\n", - " - this can be done in the `models.py` file, and plant the idea of making a test\n", - " - comment about the `attach_names` function in lesson: it uses an `assert` which isn't great practice outside of unit tests. Instead, raise an `TypeError` exception if the lengths don't match\n", - " - TODO suggest this as a modification to the lesson\n", - " - if the instructor have an implementation, show it on screen\n", - " - second thought: this might be dwelling too much on a portion of the lesson that isn't that important...\n", - "- Breakout rooms (~ 45 minutes)\n", - "- Facilitate discussion about TDD\n", - " - add some questions to the collaborative notes document\n", - " - Do you think TDD is practical for exploratory research code? Are there elements of TDD that could be useful in your work? Share some examples or ideas for how you might use TDD with the group.\n", - "- For Doctor OO implementation, some additional feature ideas\n", - " - using the `dataclass` decorator offers a lot of advantages for these classes\n", - " - adding an age to patients could be helpful (fairly simple)\n", - " - a date range (or start date) for a patient's observations\n", - " - a Study class that is a list of Doctors (perhaps too much)\n", - " - a CSV reader of patient data (and preferably groups of patients data)\n", - "- A note about the Book/Library exercise\n", - " - advise to create separate files\n", - " 1. put a `library.py` under models, and a `test_library.py` under tests\n", - " 2. or put both of these files under a separate directory `library/` at the top level of the repo\n", - " - There will probably be the temptation to inherit from the builtin `list` class when implementing `Library`. Subclassing from builtin types is generally a bad idea for a host of complex reasons. The most easily comprehensible is that by inheriting a builtin type, you inherit a lot of behaviour that you might not intend to have for your new class. On the flip side, it is also quite restrictive. Is a Library really just a list? We might decide to add other functionality, like opening hours, later on. How does that data fit into the definition of a list? Well, it doesn't. If you really want to inherit from something here, then the better approach is to use the `abc` (abstract base class) module in Python and pick something from there that gets you closer to your desired functionality." - ] - }, - { - "cell_type": "markdown", - "id": "151b370a", - "metadata": { - "slideshow": { - "slide_type": "notes" - } - }, - "source": [ - "## Functional Programming\n", - "\n", - "### What is a Function?\n", - "\n", - "- we have undoubtedly all written functions during our time programming, but this doesn't mean we have done \"functional\" style programming, so let's look at what that involves\n", - "- I think the question that will inevitably come up is when to use functional vs OO programming, and are the two mutually exclusive\n", - "- the other bit I would add to the functional programming style: it separates the functions from the data (i.e. data and behaviour are distinct entities, whereas in OO they are bundled together in the same object)\n", - "- remind learners that because this is focussed on the *what*, this is a declarative style\n", - "\n", - "### Pure Functions and Side Effects\n", - "\n", - "- make sure there is some discussion around the \"Pure Functions\" Exercise, although I'm not sure I need to make this explicit, since it seems there is lots of discussion going on, and people feel comfortable speaking up\n", - "\n", - "- Testability is a huge point that I should consider emphasising. Even if you aren't following a strict functional style, it is likely that incorporating parts of this style into your code will make it more testable\n", - "\n", - "- TODO Unittest is being used in the \"Testing Impure Functions\" exercise, and it should switch to pytest\n", - "\n", - "- Having made it through most of this lesson, there is a missing note about Numpy, which itself contains a lot of functional-style operations on arrays. TODO could be nice to use an exercise with numpy instead of some of the more arbitrary ones here?\n", - "\n", - "- For the reduce function, it is also worth noting that it is just a simple for loop under the hood: https://github.com/python/cpython/blob/3.10/Lib/functools.py#L237\n", - "\n", - "```python\n", - "def reduce(function, sequence):\n", - " it = iterator(sequence)\n", - " for element in it:\n", - " value = function(value, element)\n", - " return value\n", - "```\n", - "\n", - "Do all functional-style languages require some form of imperative programming under the hood? I think the answer to that is pretty complicated, but at the bare metal in assembly and machine code, things will be imperative, so from a practical standpoint, yes every language will have an imperative base upon which it is built.\n", - "\n", - "- Coming to the end of this page, I find myself not really comprehending what benefit functional programming can yield. \n", - " - there are the statements that it gives you testability, composeability, and parallelisability, but then we don't really get a practical application of that\n", - "- Also, it feels like these examples should relate to the inflammation project...\n", - "\n", - "- I attempted the advanced exercise, and the Pool.map implementation was always slower :(\n", - "\n", - "- For the exercises, recommend that learners operate in a different directory, and for simplicity you can put tests in the same file as the functions you are writing, although it should also be possible to put the test files next to the modules as access those modules through relative imports (and then pytest won't complain about finding those modules)" - ] - }, - { - "cell_type": "markdown", - "id": "8d883d9f", - "metadata": { - "slideshow": { - "slide_type": "notes" - } - }, - "source": [ - "## Software Design\n", - "\n", - "- in the definition of \"software design\" I would probably swap \"architecture\" and \"design\" since I see design as a subset of architecture\n", - "\n", - "- for the \"Types of Software\" exercise, it would be nice to give some structure to how participants might do this in a group\n", - "\n", - "- For the \"MVC Revisited\", a question that might come up is testing views (since we are now getting to implement the view part)\n", - " - In the case of this exercise, it should be pretty straightforward to test\n", - "\n", - "- TODO also, the template repo seems to be out of sync with the lesson content since there is a `visualise()` function current in the repo with a todo, but then the course page never refers to this\n", - "\n", - "- TODO the changes that need to be made to inflammation-analysis.py should be highlighted somehow, because it is quite difficult to see what has changed between the version on the webpage and the version in the template repo\n", - "\n", - "- TODO the entire section about Software Architecture at the beginning could be moved here, and replaced at the beginning with a simple flow diagram explaining the structure of the project" - ] - }, - { - "cell_type": "markdown", - "id": "18e803f0", - "metadata": { - "slideshow": { - "slide_type": "notes" - } - }, - "source": [ - "## Persistence\n", - "\n", - "- not much intro needed, other than the fact that reading and writing data is an important step for your code (even if not the most exciting)\n", - "\n", - "- TODO I should write my solution to the exercises here if I have time..." - ] - }, - { - "cell_type": "markdown", - "id": "ed678ce4", - "metadata": { - "slideshow": { - "slide_type": "notes" - } - }, - "source": [ - "# Section 4: Improving and Managing Software Over its Lifetime\n", - "\n", - "- use the image `../fig/section4-overview.png`\n", - "- up until this point, the course has been primarily focussed on technical practices, tools, and infrastructure, and primarily from the perspective of a single developer/researcher\n", - "- in this section, we will broaden this out and start looking at the management side of software projects, which necessarily makes it much more focussed on the team environment and broader considerations about how our code will be used and how we involve others contributors in the improvement of our code\n", - "\n", - "In this section we will:\n", - "\n", - "- Look at how to **prepare our software for release**, looking at what we actually mean by software reusability, the importance of good documentation, as well as what to consider when choosing an open source licence.\n", - "- Explore ways for us to **track issues with our software** registered by ourselves and external users, and how we should employ a critical mindset when reviewing software for reuse.\n", - "- Examine how we can manage the **improvement of our software through feedback** using agile management techniques. We'll employ effort estimation of development tasks as a foundational tool for prioritising future team work, and use the MoSCoW approach and software development sprints to manage improvement. As we will see, it is very difficult to prioritise work effectively without knowing both its relative importance to others as well as the effort required to deliver those work items." - ] - }, - { - "cell_type": "markdown", - "id": "786014d2", - "metadata": { - "slideshow": { - "slide_type": "notes" - } - }, - "source": [ - "## Preparing Software for Reuse\n", - "\n", - "- at this point, fine to just send learners to read\n", - "- note that at this point, they have already been writing markdown in the shared document, so it should be no shock to their system to write a README now\n", - "\n", - "### Writing a README\n", - "\n", - "- Consider walking through this section, for example writing parts of the README as a demo\n", - "- another great documentation link: https://documentation.divio.com/\n", - "\n", - "### Choosing an Open Source Licence\n", - "\n", - "- make notes in collaborative document about the licencing policy of your institution\n", - "\n", - "### Preparing for Release (exercise)\n", - "\n", - "- make learners aware they should try to time themselves(?)\n" - ] - }, - { - "cell_type": "markdown", - "id": "e4768a73", - "metadata": { - "slideshow": { - "slide_type": "notes" - } - }, - "source": [ - "## Assessing Software for Suitability and Improvement\n", - "\n", - "- again, set off people reading\n", - "\n", - "- there will need to be a syncronisation point at \"Decide on your Group's Repository\", so let helpers and participants know this\n", - "- TODO will need to set up a table in the shared doc to put in the repo URLs for the \"Decide on you Group's Repository\"!\n", - "- comment about assessing dependencies to add to your project:\n", - " - how well maintained is it? how active is the project (go look when the last commit was made)?\n", - " - what is the funding model and horizon for the dependent library? who maintains it?\n", - " - in the crazy world we live in, there are some solo developer projects that support a huge amount of infrastructure --- this isn't to say that it is okay to pick project developed by small groups, but just that it does happen and sometimes on a large scale" - ] - }, - { - "cell_type": "markdown", - "id": "9a02f1be", - "metadata": { - "slideshow": { - "slide_type": "notes" - } - }, - "source": [ - "## Improvement Through Feedback\n", - "\n", - "- the groups will likely need document space to collaborate when making time estimates, prioritising, etc, so link to those documents from shared repo\n", - "- for the \"Prioritise!\" lesson, they could also use labels to specify the priority (i.e. have a `must have` label)\n", - "- basically have them in breakout rooms until the end of the session (likely)" - ] - } - ], - "metadata": { - "celltoolbar": "Slideshow", - "kernelspec": { - "display_name": "Python 3 (ipykernel)", - "language": "python", - "name": "python3" - }, - "language_info": { - "codemirror_mode": { - "name": "ipython", - "version": 3 - }, - "file_extension": ".py", - "mimetype": "text/x-python", - "name": "python", - "nbconvert_exporter": "python", - "pygments_lexer": "ipython3", - "version": "3.8.10" - } - }, - "nbformat": 4, - "nbformat_minor": 5 -} From 1923559639a92d6f44a18a83eeeb1f65cec8f830 Mon Sep 17 00:00:00 2001 From: bielsnohr Date: Fri, 10 Nov 2023 16:14:26 +0000 Subject: [PATCH 55/58] =?UTF-8?q?=E2=8F=AA=20Actually=20revert=20all=20of?= =?UTF-8?q?=20the=20max=20names=20changes?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- _episodes/24-diagnosing-issues-improving-robustness.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/_episodes/24-diagnosing-issues-improving-robustness.md b/_episodes/24-diagnosing-issues-improving-robustness.md index ce39f898c..4bf69dc25 100644 --- a/_episodes/24-diagnosing-issues-improving-robustness.md +++ b/_episodes/24-diagnosing-issues-improving-robustness.md @@ -427,7 +427,7 @@ def patient_normalise(data): """ max = np.nanmax(data, axis=1) with np.errstate(invalid='ignore', divide='ignore'): - normalised = data / maxima[:, np.newaxis] + normalised = data / max[:, np.newaxis] normalised[np.isnan(normalised)] = 0 normalised[normalised < 0] = 0 return normalised From 6b195ea6255b8ec6bd02f9dad5b89064b16c1856 Mon Sep 17 00:00:00 2001 From: bielsnohr Date: Mon, 13 Nov 2023 10:04:19 +0000 Subject: [PATCH 56/58] =?UTF-8?q?=F0=9F=93=9D=20Remove=20last=20mentions?= =?UTF-8?q?=20of=20git=20checkout?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- _episodes/14-collaboration-using-git.md | 2 +- fig/git-lifecycle.svg | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/_episodes/14-collaboration-using-git.md b/_episodes/14-collaboration-using-git.md index 59363e829..0d28793a8 100644 --- a/_episodes/14-collaboration-using-git.md +++ b/_episodes/14-collaboration-using-git.md @@ -461,7 +461,7 @@ $ git status On branch develop Changes not staged for commit: (use "git add ..." to update what will be committed) - (use "git checkout -- ..." to discard changes in working directory) + (use "git restore ..." to discard changes in working directory) modified: inflammation/models.py diff --git a/fig/git-lifecycle.svg b/fig/git-lifecycle.svg index 493c15367..32771f7bc 100644 --- a/fig/git-lifecycle.svg +++ b/fig/git-lifecycle.svg @@ -557,7 +557,7 @@ text-anchor="middle" y="438" x="379" - id="text160">git pull (shortcut for git fetch followed by git checkout/merge) + id="text160">git pull (shortcut for git fetch followed by git merge/rebase) Date: Mon, 13 Nov 2023 11:41:21 +0000 Subject: [PATCH 57/58] Update _episodes/15-coding-conventions.md Co-authored-by: Matthew --- _episodes/15-coding-conventions.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/_episodes/15-coding-conventions.md b/_episodes/15-coding-conventions.md index f44087404..0ee76d493 100644 --- a/_episodes/15-coding-conventions.md +++ b/_episodes/15-coding-conventions.md @@ -425,7 +425,7 @@ because an incorrect comment causes more confusion than no comment at all. > > ~~~ > $ git switch develop -> $ git switch -b style-fixes +> $ git switch -c style-fixes > ~~~ > {: .language-bash} > From 60fc6dd89602a8f3e964237dd62d797e2e9c2c7c Mon Sep 17 00:00:00 2001 From: Aleksandra Nenadic Date: Mon, 13 Nov 2023 11:42:16 +0000 Subject: [PATCH 58/58] Update _episodes/14-collaboration-using-git.md Co-authored-by: Matthew --- _episodes/14-collaboration-using-git.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/_episodes/14-collaboration-using-git.md b/_episodes/14-collaboration-using-git.md index 0d28793a8..642ed2cba 100644 --- a/_episodes/14-collaboration-using-git.md +++ b/_episodes/14-collaboration-using-git.md @@ -107,7 +107,7 @@ sequenceDiagram Remote Repository->>+Local Repository: git fetch Local Repository->>+Staging Area:git checkout / git switch Local Repository->>+Staging Area:git merge - Remote Repository->>+Working Directory: git pull (shortcut for git fetch followed by git checkout / switch / merge) + Remote Repository->>+Working Directory: git pull (shortcut for git fetch followed by git merge/rebase) -->