Sprint 0: Course Introduction
Table of Contents
- 1. About This Sprint CoursePM
- 2. User Stories covered in this Sprint
- 3. Introduction
- 4. Learning Material
- 5. Experiential Learning
- 6. Sprint Acceptance Tests
1 About This Sprint CoursePM
This sprint introduces the course and the course structure. This sprint also serves as the required Course PM to explain in more detail how the couse is going to be conducted in relation to the course syllabus.
The following courses are covered by this course PM:
| Course Code | Name | Extent (in ECTS) | Programme(s) |
|---|---|---|---|
| PA1415 | Programvarudesign | 7.5 | BSc i Spelprogrammering |
| PA1434 | Grunder i Objektorienterad Design | 4 | |
| PA1435 | Objektorienterad Design | 6 | CI i Spel- och Programvaruteknik, CI i Industriell Ekonomi |
| PA1443 | Introduktion till Programvarudesign och Arkitektur | 5 | BSc i Programvaruteknik, BSc International Software Engineering |
2 User Stories covered in this Sprint
- As a student I want to pass this course.
- As a student I want to understand how this course is structured so that I can quickly find the information I need to learn the subject.
- As a student I want to know why this topic is important so that I can be properly motivated.
- As a university we require all courses to have a “Course PM” so that the students can get further information about the courses they are taking.
3 Introduction
Welcome to the course!
Of course you want to pass the course, and I want you to too. This document is intended to give an overview of how the course is structured, and give you a “map” of sorts to the rest of the course material. It is my hope that this will help you find the material you want easily so that you can focus on learning each part of the course.
The course is divided into a series of Sprints, that is, short iterations that focus on a small number of issues per sprint. I have borrowed this term from an agile development methodology called Scrum, which is something you will learn more about in this course and are sure to encounter in your future career as well.
Speaking of agile, there are a few other things I have borrowed from there as well. The User Stories that each sprint document starts with is one such thing. A user story is a sort of stylised requirement, and I use them to set you into the right frame of mind for each sprint. As you notice, the user story contains information about which perspective you should have, the goals you should achieve, and a brief explanation of why this goal is important.
Related to this is the Sprint Acceptance Tests that you find at the bottom of each sprint document. These acceptance tests tell you how we plan on ensuring that the goal of the sprint has been reached.
The bulk of the sprint consists of Learning Material, and Experiential Learning. Learning material are book chapters, videos, blog posts, etc. that you can use to learn more about the topic in the sprint. Experiential Learning (which is not a good name, but I can’t think of any better) consists of different activities you should do as part of the sprint. Some of these activities are just practice activities. Others are activities that will help you organise the material better. Others again are those activities that we (as teachers) would like to look at to assess your progress. Let me repeat this:
Experiential Learning are things you are supposed to do, and includes:
- Things you do for practice
- Things you do to organise the material
- Things you may submit as assignments to the teachers for marking
You will note that in some sprints you are expected to produce an assignment document and commit/push it to your project repository without actually submitting it for marking. These documents are intermediate steps, and you will be using the knowledge gained from them when creating the documents that will be marked. In some cases, we will go back to them when marking a subsequent assignment to see that you have not missed anything. In other cases, we will go back to them to be able to follow your reasoning in your submission. I try to ensure that the overhead of creating these documents (as opposed to just doing the analysis/design work) is minimal. Please do not skip these documents just because they are not submitted; they are a helpful and sometimes necessary tool to be able to continue.
Exactly what documents you should deliver for marking is detailed in a set of Release Sprints, where you package and submit the previously created material.
Some activities are started during this initial sprint, and then I ask you to revisit them during every subsequent sprint. The idea with these activities are to help you structure your learning, and give you a means to follow your own progress.
So, without further ado, let’s get started with the learning material. Good Luck!
4 Learning Material
4.1 Course PM Overview CoursePM
Course Overview:
| Course Platform | ItsLearning and https://mickesv.github.io/OODesign/ |
| Further Information | |
| Course Responsible | Mikael Svahnberg<EMAIL_ADDRESS>|
| Examiner | Mikael Svahnberg<EMAIL_ADDRESS>|
| Other Teachers | Ricardo Britto, Raquel Ouriques |
4.1.1 2017 Schedules
Please see the individual page for each course:
| Course |
|---|
| PA1415 Software Design |
| PA1435 Object Oriented Design |
| PA1443 Introduction to Software Design and Architecture |
4.1.2 Common Information for all Courses
In all course-related communication, we prefer if you use your BTH-student email address. Using other email addresses or varying email addresses can lead to problems and issues that we cannot take responsibility for.
| Writing guide(s) | http://writingguide.se |
| Plagiarism and cheating | https://studentportal.bth.se/web/studentportal.nsf/web.xsp/plagiarism_and_cheating |
4.2 Overall Course Goals and Contents CoursePM
The overall goal in all the involved courses is to teach Object Oriented Design, and to understand how the design process fits into the overall development process. The involved courses takes a slightly different route towards this, where some focus more on the development process and the process components that lead up to the design process (PA1415), and others focus more on putting the design into a bigger technical context (i.e. the software architecture) (PA1443). The core of all courses is the Object Oriented Design, and we use UML and RUP for this part.
The detailed aims and contents for each of the courses are listed below (In swedish, copied from the respective course syllabus).
PA1415 Software Design
Syfte
För att kunna producera programvara som uppfyller rätt krav för rätt kostnad, inom rätt tidsram och med rätt kvalitet så krävs det att man följer en kontrollerad process och att man lägger tid på tidig planering av programvaruproduktionen (modellering och design). I den här kursen förväntas studenten införskaffa förståelse för en utvecklingsprocess för mjukvara och för de grundläggande aktiviteter och artefakter som tas fram under utvecklingsprocessen. Vidare förväntas studenten införskaffa förståelse för objektorienterad modellering och design genom användande av UML (Unified Modeling Language). Detta binds sedan samman i och med att studenten förväntas visa sina förvärvade kunskaper genom att utveckla ett mindre mjukvarusystem.
Innehåll
Kursen omfattar följande moment:
- Introduktion till programvaruteknik
- Introduktion till systemutvecklingsprocessen
- Introduktion till kravhantering
- Tids-, storleks-, resurs- och komplexitetsskattningar
- Planering av arbete
- Testning
- Objektorienterad design
- Grundläggande begrepp inom objektorienterad modellering
- Användarfall (use cases)
- Konceptuell modell samt systembeteende •Samarbetsdiagram
- Klassdiagram
- Tillståndsdiagram
- Designmönster
- Överföring av design till programkod
PA1434 Basic Object Oriented Design
PA1435 Object Oriented Design
Syfte
Kursens syfte är att ge insikt i den speciella design- och implementationsproblematik som objektorienterad programvaruutveckling medför. Utgående från grundläggande objektorienterade begrepp modelleras struktur och beteende hos objektorienterade system med hjälp av modelleringsspråket UML (Unified Modeling Language). Designprinciper och designmönster introduceras som verktyg för att skapa robust programvara och förbättra möjligheten till organisation och underhåll av programvara. Designmönster är standardiserade metoder för att sätta samman objekt och klasser för att lösa vanligt förekommande designproblem. Utvecklare av objektorienterad programvara bör veta hur designmönster kan användas för att förenkla utvecklingsarbetet och kunna bedöma kvaliteten och eventuella förbättringar av källkoden. Kursen omfattar laborationer där designkunskaperna tillämpas och implementeras i källkod.
Innehåll
Kursen omfattar följande:
- Grundläggande begrepp inom objektorienterad modellering.
- Strukturella och beteendemässiga perspektiv på objektorienterade system.
- Introduktion till modelleringsspråket UML (Unified Modeling Language).
- Diagramtyper i UML för användningsfall, klasser, interaktion och tillstånd.
- Grundläggande designprinciper exempelvis låg koppling, hög sammanhållning, inkapsling och polymorfism.
- Designmönster samt orientering om hur dessa kan användas.
- Förbättring av källkod genom s.k. reverse engineering.
PA1443 Introduction to Software Design and Architecture
Syfte
Val av mjukvarudesign och arkitektur har stark påverkan på kvalitet och kostnad för programvara. Syftet med kursen är att ge studenten grundläggande förståelse för tekniker och metoder för mjukvarudesign. Vidare skaffar studenterna grundläggande förståelse för hur dessa val av design och arkitektur påverkar kvalitet och därmed kostnad för utveckling, drift och underhåll för programvara. Kursen innehåller både teori och praktiska övningar där studenterna ges möjlighet att skapa programvarudesigner och arkitekturer, samt jämföra möjliga design- och arkitekturlösningar i olika typer av mjukvarusystem.
Innehåll
Kursen omfattar följande moment:
- Introduktion till Objektorienterad Design
- Introduktion till Programvaruarkitekturer
- Grundläggande begrepp inom objektorienterad designmodellering
- Grundläggande objektorienterade designprinciper
- Designmönster
- Mjukvaruarkitekturstilar
- Överföring av design till programkod
- Testning
4.3 Course Structure CoursePM
The course has an online presence as well as a campus existense.
The online presence consists of these pages, and is organised as a set of sprints, where each sprint focus on a small topic and a few user stories. In each sprint there are things to read and watch, as well as activities to do. The result of some of those activities will be submitted as assignments for marking. This is further detailed in Release Sprints where instructions about which documents to deliver are given.
The campus existense consists of lectures (that I try to run as seminars) and exercises. My idea is that you first study the online material, and then we can have lively discussions during the lectures/seminars. Basically, you go through the design notation and a basic understanding of the topic with the online material and then we discuss together what makes a good design.
Some of ther sprints are so called release sprints. In these sprints you primarily package what you have done in previous sprints, but you may also be requested to produce new material during the release sprint too. This is then delivered as a course assignment for marking.
Please see the Start Page for each course for information about which sprints, lectures, seminars, and assignments are relevant for each course.
4.4 Learning Outcomes CoursePM
The following learning outcomes apply to the different courses.
| Course Code | Learning Outcomes |
|---|---|
| PA1415 | - på en grundläggande nivå i grupp kunna ta fram krav på en programvara och uttrycka dem i en kravspecifikation |
| PA1415 | - i grupp producera en översiktlig utvecklingsprojektplan baserat på en kravspecifikation |
| PA1415 (PA1435/PA1434) | - i grupp kunna skapa en detaljerad objektorienterad design för ett mjukvaruprogram |
| PA1415 | - i grupp kunna implementera ett mjukvaruprogram inom rimlig tid, baserat på en kravspecifikation och en objektorienterad design |
| PA1415 (PA1443) | - på en grundläggande nivå i grupp kunna planera och genomföra testning av producerad programvara, baserat på en kravspecifikation |
| PA1415 (PA1435/PA1434) | - skapa och analysera objektorienterade artefakter uttryckta i UML |
| PA1415 (PA1435/PA1434/ PA1443) | - kunna motivera och använda designmönster i utvecklingen av mjukvarusystem |
| Kunskap och förståelse | |
| PA1435/PA1434/ PA1443 | - kunna visa förståelse för grundläggande principer i objektorienterad programvaruutveckling. |
| PA1435/PA1434 | - kunna visa förståelse för UML som modelleringsspråk. |
| PA1435/PA1434/ PA1443 | - kunna visa kunskap om grundläggande designprinciper. |
| PA1435/PA1434/ PA1443 | - kunna visa kunskap om grundläggande designmönster. |
| PA1443 | - kunna visa kunskap om grundläggande mjukvaruarkitekturstilar |
| Färdigheter och förmåga | |
| PA1435/PA1434/ PA1443 | - kunna uttrycka strukturen och beteendet hos ett system i termer av objektorienterade koncept. |
| PA1435/PA1434 | - kunna korrekt använda UML för att uttrycka struktur och beteende hos ett system. |
| PA1435/PA1434 | - kunna korrekt transformera en objektorienterad design till källkod. |
| PA1435/PA1434 | - kunna tillämpa designprinciper och designmönster i allmänhet och inom en särskild domän. |
| PA1443 | - kunna tillämpa grundläggande designmönster i en objektorienterad design. |
| PA1443 | - kunna skapa en objektorienterad design för ett system enligt goda objektorienterade designprinciper |
| PA1443 | - kunna tillämpa grundläggande arkitekturstilar för ett mjukvarusystem |
| PA1443 | - kunna resonera om de kvalitetsegenskaper ett system med en viss arkitekturstil har eller bör ha |
| PA1443 | - kunna resonera om och skapa en grundläggande testplan för ett objektorienterat system |
| Värderingsförmåga och förhållningssätt | |
| PA1435/ PA1434 | - kunna analysera källkod för eventuella förbättringar. |
| PA1435/PA1434/ PA1443 | - kunna analysera och kritiskt diskutera en design för eventuella förbättringar. |
4.5 Examination CoursePM
4.5.1 Assignments
Assignments in the courses are:
| Course | Assignment | Moment in LADOK |
|---|---|---|
| PA1415 | 3 Week Roll Call | |
| Assignment 1: User Stories and Use Cases | ||
| Assignment 2: Object Oriented Design | ||
| Assignment 3: Implementation and Testing | ||
| Together these form the moment: | 1415 Laboration, 4.5hp, A-F | |
| PA1434 | 3 Week Roll Call | |
| Assignment 1: Use Cases | 1515 Laboration 2, 0.5hp, G-U | |
| Assignment 2: Object Oriented Design | 1505 Laboration 1, 1.5hp, A-F | |
| PA1435 | 3 Week Roll Call | |
| Assignment 1: Use Cases | 1515 Laboration 2, 0.5hp, G-U | |
| Assignment 2: Object Oriented Design | 1505 Laboration 1, 1.5hp, A-F | |
| Assignment 3: Implementation and Testing | 1535 Laboration 3, 2hp, A-F | |
| PA1443 | 3 Week Roll Call | |
| Assignment 1: Use Cases | ||
| Assignment 2: Object Oriented Design | ||
| Assignment 3: Architecture and Testing | ||
| Together these form the moment: | 1705 Laboration, 4hp, A-F |
Please see the Start Page for each course for more information about the assignments, how they map to course goals, and their respective deadlines.
<IP_ADDRESS> Grading
I use a cumulative grading scheme in this course. This means that for every assignment you submit, your final grade for the assignments is revised up or down depending on your total performance, but with extra emphasis on your most recent performance.
Let’s say that you get a E on the first assignment. The second assignment gets a C, but you have also made an effort to take care of the comments you received on your first assignment in a nice way. So at present, your cumulative grade is a C. For the third assignment, you may confirm your C or improve it by doing a really good job at taking care of past comments as well as the specific topic of the assignment. You may also make a significant error in the third assignment, which will then lower your cumulative grade proportionally. In the end your “scorecard” may look like:
| Assignment | Grade | Cumulative Grade | Comment |
|---|---|---|---|
| Assignment 1 | E | E | |
| Assignment 2 | C | C | Improved A1 along with A2 |
| Assignment 3 | E | D | Significant flaw in A3, but “rescued” by past performance |
| Final grade | D |
For the courses where you have more than one assignment “moment” in LADOK, the final cumulative grade will be reported on all assignment “moment”. For formal reasons, this also means that there is only one submission deadline for all assignments at the end of the course, and all the dates “inside” the course are called Feedback Deadline. A Feedback Deadline is a deadline for when you need to submit an assignment in order to get feedback on it, so that you understand how you can improve yourself for the next assignment.
<IP_ADDRESS> Resubmission of Assignments
IFF you write a rejoinder (see below) you can resubmit Assignment 1 together with Assignments 2 and 3, or at the resubmission dates as outlined below under “Deadlines and Re-Examination”. Similarly, Assignment 2 can be resubmitted along with Assigment 3, or at the resubmission dates outlined below. Assignment 3 can only be resubmitted at one of the resubmission dates below, and only if it had a failing grade.
A rejoinder is a separate document where you repeat the feedback you received and exactly what you have done to address that feedback, and point to where this is done in the assignment document(s). You can also make a clear argument for why you disagree with the feedback and why you take no corrective action based on the feedback. By making this document as detailed as possible you make the life of the person marking your assignment so much easier.
4.5.2 Written Exam
The written exam will be a computer-based exam.
Dates for the written exams for the next 12 months can be checked on the student portal at https://studentportal.bth.se/web/studentportal.nsf/web.xsp/prescheduled_dates .
4.5.3 Deadlines and Re-Examination
Assignments:
- Three Week Roll Call Please see the Start Page for each course for more information about the deadline for the three week roll call.
- Feedback Deadlines Please see the Start Page for each course for more information about the assignments and their respective feedback deadlines.
- Assignment Submission This deadline applies for all assignments.
- First Resubmission This deadline applies for all assignments unless otherwise agreed with the person marking the assignments and/or the examiner of the course.
- Second Resubmission This deadline applies for all assignments unless otherwise agreed with the person marking the assignments and/or the examiner of the course.
Exam:
- Dates for the written exams for the next 12 months can be checked on the student portal at https://studentportal.bth.se/web/studentportal.nsf/web.xsp/prescheduled_dates .
4.6 What should I do with the Sprint Test Plan?
The Sprint Test Plan is a way to get an overview of your expectations in the course, in relation to the provided material, and align it with my expectations as course responsible and examiner. In some sense, it is also your strategy for learning the topics. I will not mark your Sprint Test Plan – you are creating and maintaining this for your own sake.
The Sprint Test Plan will be revisited during every sprint, so that you have an updated record of what you need to learn to pass the course.
I am loosely basing my suggestion for the Sprint Test Plan document on the IEEE 829-2008 standard. Feel free to add other information to it if you think it is relevant.
4.7 What is this “Course Backlog” thing?
As you study, I expect that you will get more questions, or additional information sources (blog pages etc.) that you would like to read, and I hope you will also get ideas for places where you would like to test what you have learnt. Put these into a course backlog document (it will help if you put them in a roughly prioritised order), and then spend time during each sprint to resolve your backlog items.
At the end of the course, it is my hope that your backlog contains pointers to yourself with how you should go forward with the knowledge gained. For example, how can you use what you have learnt in upcoming courses? Are there any particularly interesting things you have found that you would like to study more? Are there any courses you are interested in taking as a consequence of taking this course? Are there any courses you would like to replace in your education as a consequence of taking this course? Are there any ideas you can use for your bachelor or master’s thesis?
The course backlog is revisited in every sprint. I will not mark it; you create it for your own benefit.
5 Experiential Learning
5.1 (Optional) Create Infrastructure
Introduction. In your future career you are going to use configuration management systems such as Subversion or Git, so why not start already now? This gives you an easy way to share work between your colleagues, and opens up for me to review your work even before you have submitted it.
If you also write your documents in for example Markdown, they are formatted for you by github. Myself, I am partial to Org-mode and Emacs, especially because of the nice integration with PlantUML for generating design diagrams and the excellent export facilities. Org-mode is also nicely supported by github.
Please note that this is currently optional. I do not require you to create a repository on github (or anywhere else, for that matter), but I strongly recommend that you start familiarising yourself with modern configuration management tools already now. Moreover, if you were to run into conflicts within your group, the commit record of a configuration management repository is an excellent starting point to figure out who has contributed what.
Things to do:
- Create an account on Github (or use your existing one)
- Create a Project for the course
OOD-<course code>-<your name>
- (optional) Invite me (mickesv) to the project
- checkout your project and create a directory structure:
/Assignments/
/SprintTestPlan/
/CourseBacklog/
- add a file to each directory, otherwise you will not be able to commit them. For example, add an empty
.gitignore
file to each directory. - commit and push
More info on Git
5.2 Sprint Test Plan
Create a document with the following sections:
- Test Items. These are the assignments you are expected to submit for marking. It will probably be a good idea if you are able to tag them with the corresponding sprint, so that you can easily find them.
- Features to be Tested. These are the user stories at the top of every sprint. Describe each of these features in terms of the object oriented modelling concepts or software development concepts that you need to master before you can satisfy the user story.
- Approach. Here, you will describe your strategy for ensuring that you have learnt the material in the sprint. How do you ensure that you are confident that the assignments you submit will pass with the grade you are aiming for?
- Item Pass/Fail Criteria. What do you have to be able to show to yourself to ensure that you have learnt the material in the sprint? What do you have to show in the submitted assignments?
- Schedule. When do you plan on passing each test item and feature?
- Planning Risks and Contingencies. Are there any foreseeable risks that may limit your ability to pass the course on time? What is your contingency plan?
- Glossary. In this section you will build up a glossary of important terms in the course that you can use when studying. I suggest you collaborate with the rest of the class in the course discussion forum (on It’s Learning) and post your terms and definitions there so that they can be discussed.
In this sprint, the following items can be added already (you may think of more items, please add them too):
- Test Items
- Exam Check Date
- Exam Re-sit Check Date
- Approach
- Outline your plan for reading the book and doing the sprints in time to be ready for the exam.
- Describe your plan for joining a group of students (for the group assignments, and for study groups) with the same ambition level as you yourself have.
- Item Pass/Fail Criteria
- Outline your ambition level; what grade are you aiming for?
- Schedule
- Dates for assignment submissions are available on It’s Learning. Copy them here.
- Add the exam dates.
- Planning Risks and Contingencies
- Do you plan on taking any vacations (e.g., skiing trip, easter, ascension day, etc.)? When will you study more to compensate for this? Are your team-mates informed and ok with that you contribute less during these vacations?
- What is the expected workload for the courses you may be taking in parallel? Does your plan for this course accomodate your plans for the other courses?
- Do you have time available if you are asked to complete your submitted assignments with more information?
- Are there any other risks you see at this stage?
- Glossary
- Scrum
- Sprint
- User Story
- Test Plan
5.3 Buy Course Books CoursePM
Main Literature (All Courses)
C. Larman, Applying UML and Patterns, Prentice Hall, 3rd Edition.
This book is a complete guide to all things UML, with plenty of examples and detailed descriptions of all diagrams and how to think when using them. The reading instructions in each sprint are based on the 3rd edition, but I recommend you to try to find an older edition since they are essentially the same but with less text.
Reference Literature (PA1415)
I. Sommerville, Software Engineering, Pearson, 8th edition, 2006.
There is also a 9th and a 10th edition (and, of course, the preceeding editions). It does not really matter which one you get. You will use this book as a reference to look up e.g. how a GANTT chart works in case the internet is down.
Reference Literature (PA1434, PA1435)
Gamma, Helm, Johnson, Vlissides, Design Patterns, Elements of Reusable Object-Oriented Software, Addison-Wesley Professional.
This book, also called the Gang of Four book is the reference work when it comes to design patterns. You will be using this book a lot in your future career. If you want to save some money, the most common design patterns are also covered in C. Larman (and these are the ones we will be focusing on in these courses).
Note to PA1415: I warmly recommend that you too get this book even if it is not oficially part of “your” course plan.
R. Nystrom, Game Programming Patterns, Genever Benning, 2014.
Also Available at: http://gameprogrammingpatterns.com/contents.html
Reference Literature (PA1443)
L. Bass, R. Kazman, P. Clements, Software Architecture in Practice, Addison-Wesley, 2012. ISBN-10:<PHONE_NUMBER>
A general-purpose software architecture book. I find this book to be less hands on with a design methodology and more shoot-from-the-hip, but there is a large section on architecture tactics, i.e. solutions and structures that address different quality concerns. These are, I find, a great inspiration for the architectural decisions.
Gamma, Helm, Johnson, Vlissides, Design Patterns, Elements of Reusable Object-Oriented Software, Addison-Wesley Professional.
This book, also called the Gang of Four book is the reference work when it comes to design patterns. You will be using this book a lot in your future career. If you want to save some money, the most common design patterns are also covered in C. Larman (and these are the ones we will be focusing on in these courses).
5.4 Form Groups
We expect all the assignments to be done in teans consisting of three to five people. Use the following (in this order) to find and/or form a team:
- Your friends
- It’s Learning
- Gitter
- First Classroom Lecture
- Course Teacher
Decide in your team how to deal with configuration management (e.g., who creates the git repository (remember to share it with me)), and decide on a schedule for when and how often you plan on working. If you know that you need to be out of touch for some reason (e.g. spring break), agree within the team how to handle this.
5.4.1 Groups for Seminars
Some seminars are done online, others are done as a full group. But for some seminars, we would like to divide you in groups, consisting of around 25-30 people per group. Use the following guidelines for an initial rough sort:
- Who is the oldest member in your team?
- What letter does their family name start with?
- Go to the seminar accordingly:
| Course | Study Programme | Start Letter | Seminar |
|---|---|---|---|
| PA1415 | (all) | A–N | Group I |
| O–Ö | Group II | ||
| (other) | Group II | ||
| PA1435 | CI Spel och Programvaruteknik | A–N | Group I |
| O–Ö | Group II | ||
| (other) | Group II | ||
| CI Industriell Ekonomi | A–Z + other | Group III | |
| PA1443 | (all) | A–Z | Group I |
| O–Ö | Group II | ||
| (other) | Group II |
It is desirable if your entire team visits the same seminar. Moreover, the above is intended as a rough sort. There may be all sorts of instances and special cases where it would be better for you (and your team) to visit another seminar session. Do so at your own discretion.
5.5 Get an Overview of the Assignments
Take a look at the Assignment Map to see which assignments are relevant for you and how they are connected to each other.
5.6 Update Course Backlog
Where do you go from here? Are there any questions already now that you want answered? Add them, along with a brief strategy for how to find an answer.
6 Sprint Acceptance Tests
You are done with this sprint when:
- You have bought the literature you want/need for the course.
- You have joined a group.
- You have read the Learning Materials
- You have reviewed the Assignment Map and are clear on what you are expected to submit, and in what order.
You may also have
- Created a github account, created a project repository, and committed/pushed the directory structure.
- Created a Sprint Test Plan
- Created a Course Backlog


public class BotLotPathFinders
extends java.lang.Object
Functions needed to find paths in the BotLot class.
Started: 11/7/15
| Modifier and Type | Field and Description |
|---|---|
private static java.lang.String |
notReadyString
The string passed to the BotLotPathFindingException when the BotLot object given is not ready.
|
private static int |
numTimesToDoRand
The number of times to do the random generation to attempt a shortest path
|
private static float |
ratioThreshHold
The minimum ratio value to do random path generation in
getShortestPath(BotLot) |
private static boolean |
readyPathChecked
Used to see if we already checked the BotLot object for correctness
|
| Constructor and Description |
|---|
BotLotPathFinders() |
| Modifier and Type | Method and Description |
|---|---|
static LotPath |
doDijkstra(BotLot lotIn)
Performs Dijkstra's algorithm to obtain a shortest path to the destination node.
|
static LotPath |
findRandomPath(BotLot lotIn)
Finds a path by randomly selecting edges on each node.
|
static LotNode |
getClosestNotCompleteNode(BotLot lotIn)
Figures out which not complete node is closest to the curNode in the BotLot object.
|
static LotPath |
getShortestPath(BotLot lotIn)
Determines which path taking algorithm is probably best to use.
|
static boolean |
hasPath(BotLot lotIn)
Determines if there is a path from the curNode to the destNode.
|
private static boolean |
readyPathCheck(BotLot lotIn)
Checks if the BotLot object given is ready, and has a path between curNode and destNode.
|
static void |
setClosestNotCompleteNode(BotLot lotIn)
Wrapper for
getClosestNotCompleteNode(BotLot) to just set that closest node to the destNode of the BotLot object. |
private static boolean readyPathChecked
private static final java.lang.String notReadyString
private static final float ratioThreshHold
getShortestPath(BotLot)
private static final int numTimesToDoRand
public static LotPath getShortestPath(BotLot lotIn) throws BotLotPathFindingException
lotIn
- The graph structure to deal with.BotLotPathFindingException
- If the LotGraph given is not ready for path finding.public static LotPath doDijkstra(BotLot lotIn) throws BotLotPathFindingException
Still needs to be implemented.
lotIn
- The LotGraph structure to deal with.BotLotPathFindingException
- If the LotGraph object isn't ready for path generation.public static LotPath findRandomPath(BotLot lotIn) throws BotLotPathFindingException
Obviously not a great way to do this. Done for testing simple things. Or directing something for the scenic route.
lotIn
- The LotGraph structure to deal with.BotLotPathFindingException
- If the BotLot object given is not ready for path generation.public static boolean hasPath(BotLot lotIn) throws BotLotPathFindingException
lotIn
- The BotLot that we are dealing with.BotLotPathFindingException
- If the BotLot object given isn't ready for path generation.private static boolean readyPathCheck(BotLot lotIn)
lotIn
- The BotLot object to test.public static LotNode getClosestNotCompleteNode(BotLot lotIn)
lotIn
- The BotLot object to deal with.public static void setClosestNotCompleteNode(BotLot lotIn)
getClosestNotCompleteNode(BotLot)
to just set that closest node to the destNode of the BotLot object.lotIn
- The BotLot object to deal with.


Bootstrap Icons
To use the Bootstrap glyphicons, add the following line inside the
head
section of your HTML Page.


PATTERN
PATTERN
Some Text!


{% extends "base.html" %} {% block content %} Civic Tech Movement Numbers Organizations {{ brigades_total }} Total Brigades {{ official_brigades_total }} Official Brigades {{ cfall_total }} Code for All Organizations People {{ member_count }} Total Meetup.com Members {{ rsvps }} Total Meetup.com RSVPs Projects {{ projects_total }} Total Projects {{ brigade_projects_total }} Total Brigade Projects {{ cfall_projects_total }} Total Code for All Projects {{ gov_projects_total }} Total Government Projects Issues {{ issues_total }} Total Issues {{ help_wanted_total }} Total Help Wanted Issues {% endblock %}
Total Brigades
Official Brigades
Code for All Organizations
Total Meetup.com Members
Total Meetup.com RSVPs
Total Projects
Total Brigade Projects
Total Code for All Projects
Total Government Projects
Total Issues
Total Help Wanted Issues


We would like to confirm that you prefer using {{new_email}} as your email.
In case you don't want to change your current email - ignore this message.
In order to confirm the email changing, you need to click the button below.
Note that this link is valid for 48 hours.
After the time limit has expired, you will have to resubmit the request for an email changing.


Demonstrate block-based inference in a 2d grid of a noisy image of an X
Based on PMTKslow
Contents
Get model and data
setSeed(0); load X.mat % binary image of an 'X' Xclean = X; X = Xclean + 0.5*randn(size(Xclean)); [nRows, nCols] = size(Xclean); figure; imagesc(Xclean); colormap('gray'); title('clean'); figure; imagesc(X); colormap('gray'); title('noisy'); blocks = mrf2ImgMkTwoBlocks(nRows, nCols);
MAP estimation
methods = {}; methodArgs = {}; methods{end+1} = 'ICM'; methodArgs{end+1} = {'nRestarts', 1}; methods{end+1} = 'Block_ICM'; methodArgs{end+1} = {'blocks', blocks}; for i=1:length(methods) method = methods{i}; args = methodArgs{i}; [model] = mrf2MkLatticeX(X, method, args); zhat = mrf2Map(model); energy = mrf2Energy(model, zhat); figure; imagesc(reshape(zhat,nRows,nCols)); colormap gray; title(sprintf('MAP estimate using %s, E=%5.3f', method, energy)); printPmtkFigure(sprintf('mrfImgEst%s', method)) end
Block Improvement! Block Improvement! Block Improvement!
Inference
methods = {}; methodArgs = {}; methods{end+1} = 'MeanField'; methodArgs{end+1} = {'maxIter', 100}; methods{end+1} = 'Block_MF'; methodArgs{end+1} = {'blocks', blocks, 'maxIter', 100}; methods{end+1} = 'Gibbs'; methodArgs{end+1} = {'burnIn', 100, 'nSamples', 100}; methods{end+1} = 'Block_Gibbs'; % slow methodArgs{end+1} = {'blocks', blocks, 'burnIn', 10, 'nSamples', 10}; for i=1:length(methods) method = methods{i}; args = methodArgs{i}; [model] = mrf2MkLatticeX(X, method, args); [nodeBel] = mrf2InferNodesAndEdges(model); p1 = nodeBel(:,2); figure; imagesc(reshape(p1,nRows,nCols)); colormap gray; title(sprintf('mean of marginals using %s', method)); printPmtkFigure(sprintf('mrfImgMeanOfMarginals%s', method)) [junk zhat] = max(nodeBel,[],2); figure; imagesc(reshape(zhat,nRows,nCols)); colormap gray; title(sprintf('max of marginals using %s', method)); printPmtkFigure(sprintf('mrfImgMaxOfMarginals%s', method)) end
Iter = 1 of 100, change = 415.550221 Iter = 2 of 100, change = 22.007279 Iter = 3 of 100, change = 6.005222 Iter = 4 of 100, change = 2.610466 Iter = 5 of 100, change = 1.021567 Iter = 6 of 100, change = 0.563337 Iter = 7 of 100, change = 0.471048 Iter = 8 of 100, change = 0.526145 Iter = 9 of 100, change = 0.686439 Iter = 10 of 100, change = 0.911439 Iter = 11 of 100, change = 1.003802 Iter = 12 of 100, change = 0.711492 Iter = 13 of 100, change = 0.295686 Iter = 14 of 100, change = 0.090059 Iter = 15 of 100, change = 0.025837 Iter = 16 of 100, change = 0.008185 Iter = 17 of 100, change = 0.003262 Iter = 18 of 100, change = 0.001716 Iter = 19 of 100, change = 0.001103 Iter = 20 of 100, change = 0.000782 Iter = 21 of 100, change = 0.000577 Iter = 22 of 100, change = 0.000432 Iter = 23 of 100, change = 0.000325 Iter = 24 of 100, change = 0.000245 Iter = 25 of 100, change = 0.000185 Iter = 26 of 100, change = 0.000140 Iter = 27 of 100, change = 0.000106 Iter = 28 of 100, change = 0.000080 Generating burnIn sample 1 of 10 Generating burnIn sample 2 of 10 Generating burnIn sample 3 of 10 Generating burnIn sample 4 of 10 Generating burnIn sample 5 of 10 Generating burnIn sample 6 of 10 Generating burnIn sample 7 of 10 Generating burnIn sample 8 of 10 Generating burnIn sample 9 of 10 Generating burnIn sample 10 of 10 Generating sample 1 of 10 Generating sample 2 of 10 Generating sample 3 of 10 Generating sample 4 of 10 Generating sample 5 of 10 Generating sample 6 of 10 Generating sample 7 of 10 Generating sample 8 of 10 Generating sample 9 of 10 Generating sample 10 of 10


Personal Blog and Portfolio
Software Engineering at Ontario Tech Univeristy
Year 2
Fall 2019
SOFE 2800 Web Programming
Assignments
Assignment 1
Assignment 2
Labs
Lab 1
Lab 2
Lab 3
Lab 4
Final Project
Collaborator: Tyler Wunderlich
Double Pendulum Simulation


Additional File []. disease agents pathogens [see viruses infectious (Figure potential human RNA species used biological virus plant Infect listed organisms {border-style important list public px;} #ffffff;} Dis animal database United emerging health DNA Figure bacterial lists phylogenetic considered pathogens. cause diseases toxins Clin Infectious [], bioterrorist high information pathogen responsible use CDC different file Click LINK [,]. data developing families names provides research shown table threat Biol Literature Microbial Press Rosetta acute agent based cases causes genomic included: including large literature organism population respiratory viruses, Diseases HHS Microbiol Sci caused developed family foodborne px; weapons {font-family DC, Health Medical Microbiol./JCM...-. Stone USDA analysis bacteria bioweapons cloned common font-size food-borne gene humans include infections microorganisms new number regulated relationships severe virus, zoonotic Acad Agents Bacterial Department Human Institute Med NIAID Natl Pathogens Select Shigella States [-]. agents. animals biocrimes created derived detection disease, diseases, double; etiological eukaryotic factors food genus illness impact major nomenclature notifiable outbreak phylogeny produced represent sequence synthesis taxonomic toxin viruses. ASM Biological Environ Haemophilus Important Salmonella U.S. Virol Virol./JVI...-. and/or associated bioengineering border-color border-width contributed death deaths described direct diverse double-stranded engineering estimated global infect influenza known nations, organisms, origin pathogenic phyla primarily properties represented significant solid; species, specific taken transmitted using virulence work {font-style {font-weight Agent Allergy Campylobacter Figures Files However, National ParasitologyFourthWashington Virus ability access according additional affect amenable antibiotic bacteria, bold case category causing chemical courier; cultures currently diarrhoeal disease. effective em; epidemics example, expression extensively figures full-length health, humans, identified influenzae links make manipulated members multiple nations paper poliovirus pt;} related relevant resistance risk small sources strains symbols technology toxins, useful vaccine viral warfare weapons. year


How long until you have internalized a route (for instance, between your dorm and the dining hall)?
1 to 7 Days
8 to 24 Days
25 to 40 Days
41 to 65 Days
More than 66 Days
Yes or No Questions
Open-ended Questions
-
If you are travelling without an aid or a seeing-eye dog, how do you map the trip in your mind?
-
If you travel with an aid or seeing-eye dog, how do you map the trip in your mind?
-
What is your experience of the University buildings inside? How do you understand the layout? What stands out to you?
-
What is your experience of the campus outside? How do you understand the layout? What stands out to you?
-
What would you find helpful for navigating the inside of campus buildings?
-
If you had an app that would give you directions from your current room to another room in the building, what would you want the directions to sound like? For example, would you like the turning directions to be in terms of Left and Right and Straight, or East and West? Or some other format? What measure of distance would be most helpful? Metric ("Go ahead 5 feet"), Relative ("Take 3 paces forward"), Constant ("Six doors ahead and arrive at an exit"), or some other method? If you feel strongly, please elaborate!


Cal Thomas: Democrats and Trump impeachment inquiry -- A surprising lesson from 'The Crown'
by Cal ThomasThere is a telling scene in Season 3 of the Netflix drama “The Crown” about the reign of Queen Elizabeth II that can instruct contemporary America about Democrats’ attempt to impeach President Trump.
The episode is titled “Coup.” Harold Wilson is prime minister of Britain. He has just devalued the British pound and a bad economy has provoked street demonstrators to call for his removal from office.
A cabal ensues, led by Cecil King, the editor of the otherwise pro-Labour Party newspaper, the Daily Mirror. The plotters select Lord Mountbatten as the one they wish to replace Wilson.
LIZ PEEK: REGRETFUL DEMOCRATS LOCKED INTO TRUMP IMPEACHMENT — AND PAYING A PRICE FOR IT
Wilson hears about the coup attempt and calls the Queen before the plotters can get to her. She then invites Mountbatten to Buckingham Palace where she admonishes her second cousin after which the following exchange takes place:
Mountbatten: “Why would you protect a man like Wilson?”
The Queen: “I am protecting the prime minister. I am protecting the Constitution. I am protecting democracy.”
Mountbatten: “But if the man at the heart of that democracy threatens to destroy it, are we supposed to just stand by and do nothing?”
CLICK HERE TO SIGN UP FOR OUR OPINION NEWSLETTER
The Queen: Yes. Doing nothing is exactly what we do and bide our time and wait for the people who voted him in to vote him out again if, indeed that is what they decide to do.”
Mountbatten decides not to proceed. Whether this scene is accurate, or not (and much of the series claims fidelity to history), it makes a point Americans should take to heart. President Trump won the 2016 election in spite of many obstacles, including united media opposition, meddling by Russia and corrupt elements in Ukraine, which sought to tilt the U.S. election in favor of Hillary Clinton.
Unlike 1968 when the economy was bad in Britain, the U.S. economy now is booming and consumer confidence is high. The impeachment hearings exposed disagreements over foreign policy, foreign policy the president has a right to make. They revealed a legitimate concern by the president that U.S. aid would go down a corruption rabbit hole, something the Obama administration had also been concerned about because it refused to send lethal aid to Ukraine “fearing that it would only escalate the bloodshed and give President Vladimir V. Putin of Russia a pretext for further incursions.”
It appears that Trump also wanted the new leadership in Ukraine to investigate the activities of former Vice President Joe Biden and his son, Hunter in Ukraine, and whether they had become tainted, something the American media and President Obama’s Justice Department failed to do.
If articles of impeachment are passed by the House, it could take the Senate at least until the beginning of the primary election season in February to hold a trial. The process might drag on even further should Majority Leader Mitch McConnell decide to do so, and Republicans call witnesses of their own, including the Bidens.
While impeachment is a constitutional process, democracy is a greater one. The phrase “We the people” in the Preamble was critical to the founders. It separated America from the notion that the state and its leader, whether kings, queens, or dictators, and testimony from unelected bureaucrats is supreme. It says the people possess ultimate power.
That is why it should be up to voters this close to the next election. Wait for the people who voted Trump in either to reelect him or vote him out. Impeaching him will likely alienate half the country and could damage faith in our electoral process.
CLICK HERE TO GET THE FOX NEWS APP
If Democrats are right in their antipathy toward the president and if they can sell their version of facts to voters, they should try to do so. That is the best way to protect both our Constitution and our democracy.
Long live the Queen!


Scatter
Jitter
Gather
Try these buttons.
No Lens
Rect Lens
Histogram Lens
Pie Lens
{{activeData}}
Download {{percentComplete}}%
Show me
-- undefined --
vs .
-- undefined --
Mark nodes with color according to
-- undefined --
Check this to make it easy to compare groups of different sizes.


--- layout: post title: Removing formats from all variables in a SAS Dataset date: 2009-08-12 20:42:48.000000000 -07:00 type: post parent_id: '0' published: true password: '' status: publish categories: [] tags: - Formats - Programming - SAS meta: _edit_last: '1' tmac_last_id: '166390240574062592' _jetpack_related_posts_cache: a:1:{s:32:"8f6677c9d6b0f903e98ad32ec61f8deb";a:2:{s:7:"expires";i:1543624310;s:7:"payload";a:3:{i:0;a:1:{s:2:"id";i:1069;}i:1;a:1:{s:2:"id";i:535;}i:2;a:1:{s:2:"id";i:170;}}}} author: login: Philihp email<EMAIL_ADDRESS>display_name: Philihp first_name: '' last_name: '' ---
In SAS, every field/variable in a table/dataset can be given a format. This format tells SAS how to display the data. The following datastep will create a table called "formatted" having 1 row containing 3 variables: x, y, and d.
data formatted; x=9000; y=42; now=16761; format x comma6.; format y dollar5.; format now date7.; put x=; put y=; put now=; run;
Additionally it prints to the log the formatted values.
x=9,000 y=$42 now=21NOV05
In SAS you can also create your own formats, and you can assign these formats to whichever datasets you like. However if that format goes away for some reason and you try to look at the data again, you will get this error:
ERROR: Informat $YOURFMT not found or couldn't be loaded for variable YOURVAR.
You can get around this by turning off this option
options nofmterr;
Then your ERROR turns into NOTE, and things work normally, except when you try to view the data you see it unformatted. This could be useful, however, if you find yourself in a situation like this:
data _null_; a=20.0000001; b=20.000001; format a dollar4.2; format b dollar4.2; put a= b=; if(a=b) then put 'matches'; else put 'no match'; run;
Runs and outputs:
a=20.0 b=20.0 no match
At any rate, there are times in SAS when you simply want to remove all the formats from a dataset. This can be done in one line in a datastep:
data unformatted; set formatted; format _all_; run;