-
Notifications
You must be signed in to change notification settings - Fork 4
/
BME547-F18-Palmeri.tex
335 lines (268 loc) · 11.2 KB
/
BME547-F18-Palmeri.tex
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
\input{preamble}
\begin{document}
\section*{Class Syllabus}
\subsection*{Instructors}
Dr. Mark Palmeri, M.D., Ph.D.\\
\href{mailto:[email protected]}{\nolinkurl{[email protected]}}\\
Office Hours: TBD (258 Hudson Hall Annex)
Suyash Kumar, CTO \& Co-Founder of Gradient Health\\
\href{mailto:[email protected]}{\nolinkurl{[email protected]}}\\
Office Hours: Tuesday 16:20-17:20 (Teer 106 or at
\href{http://chat.suyashkumar.com}{http://chat.suyashkumar.com})
Dr. David Ward, Ph.D.\\
\href{mailto:[email protected]}{\nolinkurl{[email protected]}}\\
Office Hours: Thursday 21:00-22:00 (Google Hangouts)
\emph{Google Hangout office hours can be joined by a URL that will be
sent to the class via email.}
\subsection*{Teaching Assistants}
Ismael Perez\\
\href{mailto:[email protected]}{\nolinkurl{[email protected]}}\\
Office Hours: Tuesday 14:00-15:00 (Gross Hall 3rd Floor Cubicle 36)
Tanvi Kamat Tarcar\\
\href{mailto:[email protected]}{\nolinkurl{[email protected]}}\\
Office Hours: Wednesday 11:20-12:20 (Teer Basement)
\subsection*{Lecture}
Tues/Thur 15:05-16:20\\
Teer 106
All lecture content will be outlined in \href{Lectures/}{Lectures}.
\subsection*{Course Overview}
Software plays a critical role in almost all medical devices, spanning device
control, feedback and algorithmic processing. This course focuses on software
design skills that are ubiquitous in the medical device industry, including
software version control, unit testing, fault tolerance, continuous
integration testing and documentation. Experience will be gained in Python
and JavaScript (and potentially other languages).
The course will be structured around a project to build an Internet-connected
medical device that measures and processes a biosignal, sends it to a web
server, and makes those data accessible to a web client / mobile application.
This project will be broken into several smaller projects to develop software
design fundamentals. All project-related work will be done in groups of 3
students.
\subsection*{Prerequisites}
Basic familiarity with programming concepts (e.g., variables, loops,
conditional statements).
\subsection*{Course Objectives}
\begin{itemize}
\item
Software version control (\texttt{git}, GitHub)
\item
Device programming fundamentals
\begin{itemize}
\item
Review of data types, variables, loops, conditional statements
\item
Python (v3.6): numpy, scipy, pandas, scikit
\item
Virtual environments \& dependency management (\texttt{pip},
\texttt{requirements.txt})
\item
Use of a programming IDE
\item
Debugging (\texttt{pudb})
\end{itemize}
\item
Testing
\begin{itemize}
\item
Unit testing
\item
Functional / System testing
\item
Continuous integration (Travis CI)
\end{itemize}
\item
Fault tolerance (raising exceptions)
\item
Logging
\item
Resource profiling (\texttt{cProfile})
\item
Documentation
\begin{itemize}
\item
Docstrings
\item
Markdown
\item
Sphinx
\item
\href{https://readthedocs.org}{ReadTheDocs}
\end{itemize}
\item
Working with data
\begin{itemize}
\item
Data Storage (Text, Binary, HDF5, MongoDB)
\item
Data Wrangling
\end{itemize}
\item
Data Processing \& Display
\begin{itemize}
\item
Jupyter Notebooks
\item
Matplotlib / Seaborn
\item
Pandas (DataFrames)
\item
\href{https://scikit-image.org/}{scikit-image} \&
\href{https://scikit-learn.org/}{scikit-learn}
\end{itemize}
\item
Define software specifications and constraints (Requests for Comments,
RFC)
\item
Servers
\begin{itemize}
\item
Design \& Implementation of a biomedical web service (Python Flask)
\item
HTTP \& RESTful APIs
\item
Docker and dependency management intro
\end{itemize}
\end{itemize}
\subsection*{Attendance}
Lecture attendance and participation is important because you will be working
in small groups most of the semester. Participation in these in-class
activities will count for 15\% of your class grade. It is very understandable
that students will have to miss class for job interviews, personal reasons,
illness, etc. Absences will be considered \textbackslash{}emph\{excused\} if
they are communicated to your instructors at least 48 hours in advance
(subject to instructor discretion as an excused absence) or, for illness,
through submission of a
\href{http://www.pratt.duke.edu/undergrad/policies/3531}{Short Term Illness
Form (STIF)} \textbf{before} class. Unexcused absences will count against the
participation component of your class grade.
\subsection*{Textbooks \& Resources}
There are no required textbooks for this class. A variety of online
resources will be referenced throughout the semester.
\begin{itemize}
\item
\href{Resources/python.md}{Python Resources}
\end{itemize}
\subsection*{Project Details}
Project details will be discussed in lecture throughout the semester.
\subsection*{Grading}
The course GitHub repository will host all \href{Assignments/}{Assignments}.
Due dates--including those that change--will be announced in lecture and
by Sakai announcements that will be emailed to the class.
The following grading scheme is subject to change as the semester
progresses:
\begin{center}
\begin{tabular}{ll}
Participation & 15\% \\
Assignments & 35\% \\
Final project & 50\% \\
\end{tabular}
\end{center}
\subsection*{Class Schedule}
The course schedule is very likely to change depending on progress
throughout the semester. The updated \href{schedule.md}{schedule} will
always be available in the GitHub course repository.
\begin{longtable}[c]{|l|p{0.4\textwidth}|p{0.4\textwidth}|}
\hline
\textbf{Date} & \textbf{Lecture} & \textbf{Assignment} \\
\hline
Tues Aug 28 & Class Introduction, Objectives and Logistics & Setup Course Tools \& Git Fundamentals \\ \hline
Thurs Aug 30 & Git: Repo Setup, Cloning/Forking, Issues, Branching, Pushing/Pulling & \\ \hline
Tues Sept 04 & Git Workflow & Getting Started with git \\ \hline
Thurs Sept 06 & Python Virtual Environments & \\ \hline
Tues Sept 11 & Python Fundamentals & \\ \hline
Thurs Sept 13 & Class Cancelled (Severe Weather) & \\ \hline
Tues Sept 18 & NO LECTURE (NC State Career Fair) & \\ \hline
Thurs Sept 20 & Unit Testing: (py.test) \& Continuous Integration (Travis CI) & \\ \hline
Tues Sept 25 & Unit Testing: Comprehensive unit tests & Unit Testing \& Continuous Integration (Travis CI) \\ \hline
Thurs Sept 27 & IEC 62304 & \\ \hline
Tues Oct 02 & Unit Testing: Approximations, fixtures \& more; Docstrings &
PythonFundamentals.ipynb (Sakai) \& IEC 62304 Assessment (Sakai) \\ \hline
Thurs Oct 04 & \href{Resources/pycharm.md}{PyCharm}; Debugging; Property Decorators & \\ \hline
Tues Oct 09 & Fall Break & \\ \hline
Thurs Oct 11 & Functional Decomposition; Python: Data Structures & Heart Rate Monitor \\ \hline
Tues Oct 16 & Exceptions \& Logging & \\ \hline
Thurs Oct 18 & Dictionary Type, Classes, Property Decorators, Numpy Docs & \\ \hline
Tues Oct 23 & HRM Assignment Work & \\ \hline
Thurs Oct 25 & HRM Assignment Work & \\ \hline
Tues Oct 30 & Intro to Web Services \& Cloud-connected Devices & \\ \hline
Thurs Nov 01 & Python Flask, API design, virtual machines (Duke OIT VMs) &
Call web services (SendGrid, Twilio, etc) \\ \hline
Tues Nov 06 & Flask continued, deployment, production considerations & \\ \hline
Thurs Nov 08 & Introduction to Databases & Heart Rate Sentinel Server \\ \hline
Tues Nov 13 & Introduction to Security + Assignment Work & TBD \\ \hline
Thurs Nov 15 & Working Project Code & \\ \hline
Tues Nov 20 & Final project assignment & \\ \hline
Thurs Nov 22 & Thanksgiving & Refactor Project Code \\ \hline
Tues Nov 27 & Final project work \\ \hline
Thurs Nov 29 & LDOC! \\ \hline
Tues Dec 04 & Final project work & \\ \hline
Thurs Dec 13 & Final project due & \\
\hline
\end{longtable}
\subsection*{Distributed Version Control Software (git)}
Software management is a ubiquitous tool in any engineering project, and this
task becomes increasingly difficult during group development. Version control
software has many benefits and uses in software development, including
preservation of versions during the development process, the ability for
multiple contributors and reviewers on a project, the ability to tag
\emph{Releases} of code, and the ability to branch code into different
functional branches. We will be using \href{https://github.com}{GitHub} to
centrally host our git repositories. Specifically, we will be creating
student teams in the \href{https://github.com/Duke-BME-Design}{Duke BME
Design} group. Some guidelines for using your git repositories:
\begin{itemize}
\item
\emph{All} software additions, modifications, bug-fixes, etc. need to
be done in your repository.
\item
The \emph{Issues} feature of your repository should be used as a "to
do" list of software-related items, including feature enhancements,
and bugs that are discovered.
\item
There are several repository management models that we will review in
class, including branch-development models that need to be used
throughout the semester.
\item
Instructors and teaching assistants will only review code that is
committed to your repository (no emailed code!).
\item
All of the commits associated with your repository are logged with
your name and a timestamp, and these cannot be modified. Use
descriptive commit messages so that your group members, instructors,
and teaching assistants can figure out what you have done!! You should
not need to email group members when you have performed a commit; your
commit message(s) should speak for themselves.
\item
Code milestones should be properly tagged.
\item
Write software testing routines early in the development process so
that anyone in your group or an outsider reviewing your code can be
convinced that it is working as intended.
\item
Modular, modular, modular.
\item
Document!
\item
Make commits small and logical; do them often!
\end{itemize}
We will review working with git repositories in lecture, and feedback on
your software repository will be provided on a regular basis.
\subsection*{Online Slack Channels}
We have online help through the \href{https://dukecolab.slack.com/}{Duke
Co-Lab Slack} team. We have started three specific channels for this
class: \texttt{\#linux}, \texttt{\#git} \& \texttt{\#python}. Please add
yourselves to these channels to get help from your instructors, your TAs
and the Duke community!
\subsection*{Duke Community Standard \& Academic Honor}
Engineering is inherently a collaborative field, and in this class, you
are encouraged to work collaboratively on your projects. The work that
you submit must be the product of your and your group's effort and
understanding. All resources developed by another person or company, and
used in your project, must be properly recognized.
All students are expected to adhere to all principles of the
\href{http://www.integrity.duke.edu/standard.html}{Duke Community
Standard}. Violations of the Duke Community Standard will be referred
immediately to the Office of Student Conduct. Please do not hesitate to
talk with your instructors about any situations involving academic
honor, especially if it is ambiguous what should be done.
\end{document}