Daniel Haehn PRO
Hi, I am a biomedical imaging and visualization researcher who investigates how computational methods can accelerate biological and medical research.
Please stay healthy and well!
2/7
2/21
2/28
5/22
Team Selection
Client Presentations
Project Proposal
Revised Project Proposal
Final Project Documentation
No class
No class
No class
Project Presentations
5/11
No class
Implementation / Testing / Deployment
18 Days
Full-Power
Project Presentations
5/11
5/13
5/15
5/22
Everything needs to be done
Project Presentations
Be loud, be proud!
Stay High-level (nobody wants all the details)
Summarize the problem
Talk about your Plan, Ideas, and Solutions
Describe Main Challenges (1-3)
And how you solved them...
Show something in action (video or live)
Describe final steps to finish in the last weeks..
Opportunity!
Grade!
Very sorry....
Course Evaluations
Please give anonymous feedback
Due this week!
Let's Recap!
Lecture 1
Mariner 1
Destructive abort 294.5 seconds after launch
$18.5 million
1962
During implementation, a smoothing operation was left out
Control center thought that they lost control of the rocket
... and destroyed it
Panama City Radiotherapy Accident
2000
Wrong Radiation Dose Calculation
Lack of Treatment Plan Verification
Beam Blocks
Too much Radiation
At least 9 Patients died (maybe 17)
many different SDLs
highly dependent on project
Lecture 2
Dr. Grace Hopper
Pioneer of computer programming
Invented first linker
Popularized machine-independent programming languages
COBOL
1906-1992
40 Honorary Degrees, Presidential Medal of Freedom, National Medal of Technology
Grace Hopper Celebration of Women in Computing (GHC) conference series for women in computing
Why don't we just start coding?
Technical Debt / Signature of Mess / Maintenance Hell
Requirements
Design
Implementation
Verification
Maintenance
Testing and Deployment
What?
How?
Build
More Testing / Evaluate
Bugs / New Features
- allows input of 2 numbers
- calculates the sum and displays it
- HTML/CSS for UI
- JavaScript for logic
- write JS code
- comment code
- write unit tests
- deploy on github pages
- does the UI show the sum?
- do users understand the UI?
- what if numbers are too long?
- subtract? multiply?
- fix bugs, create future plan
Lecture 3
Lecture 4
Linus Torvalds
*12/28/1969 in Helsinki, Finland
Creator of Linux
Creator of Git
Opensource Software Pioneer
MS Thesis: Linux: A Portable Operating System
Net worth $150+ million
Lecture 5
Lecture 6
Lecture 7
Lecture 7
Lecture 7
Lecture 8
Kristen Laird
Lecture 9
Lecture 9
Lecture 9
Keep it simple!
Lecture 10
Jupyter Notebook ("glue"-code)
Package structure
Package structure
from .controller import *
from .view import *
from .mathengine import MathEngine
class MathEngine:
def __init__(self):
'''
A constructor.
'''
print('Really new Math Engine instance.')
def add(self, number1, number2):
'''
Takes 2 integers, and adds them.
'''
return number1 + number2
No user interaction here! Just Logic!
from .ui import UI
class UI:
def __init__(self):
'''
'''
print('New UI')
def start(self, controller):
'''
We ask the user for 2 numbers.
'''
print('Please enter number1')
number1 = input()
print('Please enter number2')
number2 = input()
result = controller.add(int(number1), int(number2))
print('Result:', result)
UI stuff here that calls the logic!
This was the VC (View and Controller) part of the MVC pattern!
Why structure the code like this?
Architecture is more important than features!
Remember this!
Divide and Conquer
Problem
Sub-Problem
Sub-Problem
Sub-Problem
Solved
Sub-Problem
Solved
Solution
Divide
Divide
Conquer
Conquer
It's a lifestyle!
Information Hiding
class MathEngine:
def __init__(self):
'''
A constructor.
'''
print('Really new Math Engine instance.')
def add(self, number1, number2):
'''
Takes 2 integers, and adds them.
'''
return number1 + number2
....
controller = MathEngine()
result = controller.add(int(number1), int(number2))
....
Project Proposal Template
Lecture 11
Lecture 12
Lecture 13
Lecture 14
class Circle:
instance = None
def __init__(self):
'''
Constructs a circle.
'''
self.__radius = 7 # this is private
self.__radius2 = 1
print('called constructor')
def setRadius(self,radius):
if radius == 7 or radius == 8:
self.__radius = radius
def getRadius(self):
return self.__radius
def getRadii(self):
'''
Returns a list of both values.
'''
return [self.__radius, self.__radius2]
def draw(self):
print('O'*self.radius)
@staticmethod
def create():
if Circle.instance == None:
Circle.instance = Circle()
return Circle.instance
public final class Circle {
private static final Circle INSTANCE =
new Circle();
private Circle() {}
public static Circle getInstance() {
return INSTANCE;
}
}
Hands-on Series!
Lecture 15
No Code Access!
Who fixes bugs?
And, how fast?
What about interfaces between our code and the bought component?
Migration and Support Team!
Super Coder
Expand Your Coding Knowledge
Know As Many Tools As Possible
Improve Your Communication Skills
Think Big Picture
Understand All Solutions Are Not Equal
Build and Break Stuff
A system generates weather maps using data collected from unattended weather stations. Each weather station collects meteorological data and produces summaries of the data. On request, it sends the summary information to an area computer. The area computer uses a database of digitized maps to generate a set of local weather maps.
Noun Identification
Prof. Kenneth Fletcher
By Daniel Haehn
Hi, I am a biomedical imaging and visualization researcher who investigates how computational methods can accelerate biological and medical research.