3 \setmainfont{FreeSerif}
9 \usepackage[bf]{caption}
14 % \usepackage{multirow}
17 \usepackage[backend=biber,natbib=true,hyperref=true,style=nature]{biblatex}
18 \addbibresource{references.bib}
19 % \usepackage[nomargin,inline,draft]{fixme}
20 % \newcommand{\DLA}[1]{\textcolor{red}{\fxnote{DLA: #1}}}
21 % \usepackage[hyperfigures,bookmarks,colorlinks,citecolor=black,filecolor=black,linkcolor=black,urlcolor=black]{hyperref}
25 \usepackage{zref-xr,zref-user}
26 \renewcommand*{\bibfont}{\tiny}
27 \usepackage[absolute,overlay]{textpos}
31 \usetheme{Montpellier}
32 %\useoutertheme[hideallsubsections]{debiansidebar}
33 % \setbeamercovered{transparent}
37 \usepackage[nomargin,inline,draft]{fixme}
41 \logo{\begin{tikzpicture}% Pale figure
42 {\node[opacity=0.3] {\includegraphics[width=2cm,keepaspectratio]{figures/openlogo-crop.pdf}};}%
44 \author{Don Armstrong}
46 \subtitle{22 Years of Bugs}
47 \date{August 10th, 2017}
48 \titlegraphic{\includegraphics[height=0.2\textheight,keepaspectratio]{figures/openlogo-crop.pdf}}
51 % State of the BTS: new features, changes and tips
53 % The bug tracking system is where all bugs that affect Debian are
54 % filed. New features, including the affects, summary, and local debbugs
55 % mirror will be presented and demonstrated. Some of the underlying
56 % architectural changes to the codebase in debbugs to make it more
57 % maintainable and deployable are also outlined. Finally, a set of tips
58 % and tricks that can be used to make the BTS easier to use are
64 % - local debbugs mirror for offline work
68 % - multi-distribution/arch status
69 % - control changes at submit@ time
70 % - Code Architecture Changes
72 % - Control abstraction
73 % - release to experimental
76 <<load.libraries,echo=FALSE,results="hide",error=FALSE,message=FALSE>>=
83 opts_chunk$set(dev="cairo_pdf",out.width="\\textwidth",out.height="0.8\\textheight",out.extra="keepaspectratio",fig.width=6,fig.height=4)
84 opts_chunk$set(cache=TRUE, autodep=TRUE)
85 options(device = function(file, width = 6, height = 4, ...) {
86 cairo_pdf(tempfile(), width = width, height = height, ...)
91 <<scientific_format,echo=FALSE>>=
92 scientific_10 <- function(x) {
93 parse(text=gsub("e", " %*% 10^", scientific_format()(x)))
99 %\setbeamercolor{frametitle}[bg=-red!90!green!10,fg=black]
101 \frame[plain]{\titlepage
102 Code and slides are here:
103 \qrcode[padding]{https://dla2.us/p/debbugs2017}
104 \url{https://dla2.us/p/debbugs2017}
108 % \begin{frame}{Debbugs}
109 % \tableofcontents[subsectionstyle=hide]
112 \section{Introduction to Debbugs}
114 \subsection{Introduction}
115 \begin{frame}{Goals of this talk}
117 \column{0.5\textwidth}
120 \item Introduction to Debbugs
122 \item Planned features
123 \item Places you can help
125 \column{0.5\textwidth}
126 \includegraphics[width=\textwidth,keepaspectratio]{images/rc_buggy}
129 \begin{frame}{Goals of the BTS}
131 \column{0.4\textwidth}
132 \includegraphics[width=\textwidth,keepaspectratio]{images/not_a_bug}
133 \column{0.6\textwidth}
135 \item Reporting of \only<1>{Features}\only<2>{Bugs}
136 \item Evolution of \only<1>{Features}\only<2>{Bugs}
137 \item Fixing of \only<1>{Features}\only<2>{Bugs}
138 \item Reducing impact of \only<1>{Features}\only<2>{Bugs}
143 \section{Bugs in Debian}
144 \subsection{Bug Reporting Rate}
145 \begin{frame}{How many bugs do we have?}
147 <<bug.growth,fig=TRUE,echo=FALSE,cache.extra=file.info("data/sorted_bug_growth_for_r_every_500.txt")[,"mtime"]>>=
148 bug.growth <- fread("data/sorted_bug_growth_for_r_every_500.txt")
149 colnames(bug.growth) <- c("time","bugs")
150 bug.growth <- bug.growth[pmax(bugs) <= as.numeric(bugs),]
152 as.POSIXct(ISOdatetime(1970,1,1,0,0,0)+
153 as.numeric(bug.growth$time))]
154 print(ggplot(bug.growth[date > as.POSIXct(ISOdatetime(2005,1,1,0,0,0)),],
156 xlab("Time")+ylab("Bugs filed in Debian")+
157 scale_y_continuous(labels = scientific_10)+
158 geom_point()+stat_smooth(method="lm"))
165 \column{0.5\textwidth}
167 <<bugs.filed,fig=TRUE,echo=FALSE,warning=FALSE,fig.width=3,fig.height=3>>=
168 print(ggplot(bug.growth[date > as.POSIXct(ISOdatetime(2015,1,1,0,0,0)),],
170 xlab("Time")+ylab("Bugs filed in Debian")+
171 scale_y_continuous(labels = scientific_10)+
172 geom_point()+stat_smooth(method="lm"))
173 bugs.filed.per.day <-
174 lm(bugs~date,bug.growth)$coeff[2]*3600*24
175 temp.lm <- lm(date~bugs,bug.growth[date > as.POSIXct(ISOdatetime(2015,1,1,0,0,0)),])
177 as.POSIXct(ISOdatetime(1970,1,1,0,0,0)+as.numeric(predict(temp.lm,data.frame(bugs=880000,date=NA))))
179 as.POSIXct(ISOdatetime(1970,1,1,0,0,0)+as.numeric(predict(temp.lm,data.frame(bugs=900000,date=NA))))
181 as.POSIXct(ISOdatetime(1970,1,1,0,0,0)+as.numeric(predict(temp.lm,data.frame(bugs=1000000,date=NA))))
184 \column{0.5\textwidth}
185 Roughly \Sexpr{format(bugs.filed.per.day,digits=1)} bugs are filed per
186 day. The 880000th bug will be filed at \Sexpr{bug.880000}, the
187 900000th bug will be filed at \Sexpr{bug.900000}, and bug one million will be filled
193 \subsection{Bug Fixing Rate}
196 <<bugs.closed,fig=TRUE,echo=FALSE,width=7,height=5,warning=FALSE,error=FALSE,cache.extra=file.info("data/bug_closed_time_series.txt")[,"mtime"]>>=
197 bug.closed.series <- fread(file="data/bug_closed_time_series.txt")
198 colnames(bug.closed.series) <- c("archived.bugs","year.week")
199 bug.closed.series[,week:=
200 gsub("(\\d+)-(\\d+)","\\2",year.week)]
201 bug.closed.series[,year:=
202 gsub("(\\d+)-(\\d+)","\\1",year.week)]
203 bug.closed.series[,doy:= as.numeric(week)*7]
204 bug.closed.series[,year.doy:=
205 paste(sep="-",year,doy)]
206 bug.closed.series[,date:=
207 as.POSIXct(strptime(year.doy,
210 # bug.closed.ts <- ts(bug.closed.series[,1],start=1,frequency=7)
212 print(ggplot(bug.closed.series[date > as.POSIXct(ISOdatetime(2008,1,1,0,0,0)),],
213 aes(x=date,y=archived.bugs/7))+geom_line()+stat_smooth(method="lm")+
214 ylab("Bugs archived Per Day")+xlab("Time"))
215 bugs.closed.per.day <-
216 bug.closed.series[,sum(archived.bugs)]/
217 as.numeric(bug.closed.series[nrow(bug.closed.series),date]-
218 bug.closed.series[1,date])
221 Roughly \Sexpr{format(bugs.closed.per.day,digits=1)} bugs are closed per day.
225 \begin{frame}{RC Bugs in the Past Year}
227 <<rc.bugs,fig=TRUE,echo=FALSE,warning=FALSE,cache.extra=file.info("data/rc_bugs.txt")[,"mtime"]>>=
229 data.table(read.table(file="data/rc_bugs.txt",
230 header=TRUE,fill=TRUE))
232 as.POSIXct(strptime(date,
233 format="%Y%m%d%H%M"))]
234 rc.bugs[,unknown:=NULL]
235 rc.bugs[,unknown.1:=NULL]
237 rc.bugs <- rc.bugs[c(0,diff(total)) > -1000,]
240 data.table(melt(rc.bugs,id="date"))
241 print(ggplot(rc.bugs.long[date >
242 as.POSIXct(ISOdatetime(2016,08,1,0,0,0)),]
243 ,aes(x=date,y=value,color=variable))+
245 ylab("# of Release Critical Bugs")+xlab("Time")+
246 theme(legend.position="top")+
247 scale_color_discrete("Measure"))
250 \setbeamercolor{postit}{fg=black,bg=yellow}
251 \begin{textblock}{4}(6,4)
253 \begin{beamercolorbox}[sep=1em,wd=5cm]{postit}
254 \centering \huge Too many RC bugs!
261 \section{Debbugs Structure and Infrastructure}
263 \subsection{BTS System Diagram}
264 \begin{frame}{BTS system Diagram}
266 \includegraphics[width=\textwidth,height=\textheight,keepaspectratio]{figures/bug_global_layout}
270 \subsection{Debbugs Box Diagram}
271 \begin{frame}{Debbugs Box Diagram}
273 \input{debbugs_layout}
277 \section{Database Ho!}
279 \subsection{Overall Database Design}
281 \begin{frame}{Overall Database Design}
283 \input{debbugs_layout_db}
287 \subsection{Perl Database Infrastucture}
288 \begin{frame}{Perl Database Infrastructure}
291 \item DBIx::Class::Schema::Loader -- SQL schema to DBIx::Class
292 \item DBIx::Class::DeploymentHandler -- Upgrades of Schema
293 \item Debbugs::DB -- Debbugs SQL Module
298 \subsection{SQL Design}
299 \begin{frame}{SQL Schema}
300 \includegraphics[width=\textwidth,keepaspectratio]{figures/schema.png}
302 \item Current Debbugs SQL Schema
306 \subsubsection{dak SQL Design}
307 \begin{frame}{dak SQL Schema}
308 \includegraphics[width=\textwidth,keepaspectratio]{figures/dak_schema.png}
310 \item Inspiration taken from dak SQL Schema where appropriate
314 \subsection{SQL Loading}
315 \begin{frame}[fragile]{SQL Loading}
319 \begin{lstlisting}[language=sh]
320 debbugs-loadsql bugs;
321 debbugs-loadsql bugs archive;
323 \item Load Versioning information
324 \begin{lstlisting}[language=sh]
325 debbugs-loadsql versions;
326 debbugs-loadsql debinfo;
331 \subsection{SQL Working}
332 \begin{frame}[fragile]{SQL Working}
334 \begin{lstlisting}[language=SQL]
335 SELECT count(*) FROM bug
336 WHERE last_modified > '2014-07-01'
338 AND owner IS NOT NULL;
340 \begin{visibleenv}<2>
349 \subsection{Work still needed for SQL}
350 \begin{frame}{Work Still needed for SQL}
352 \item Logfile loading (for full text searching)
353 \item Status Caching (for faster page loading)
359 \section{New(ish) Features}
361 \subsection{New Changes}
362 \begin{frame}{New Changes}
364 \column{0.5\textwidth}
366 \item mailto links (demo)
367 \item forcemerge does the right thing
368 \item control at submit time
370 \column{0.5\textwidth}
371 \includegraphics[width=\textwidth,keepaspectratio]{images/telegraph_bug}
375 \section{Future features}
377 \subsection{Status Caching}
378 \begin{frame}{Status Caching}
380 \item Cache status of bugs (presence/absence at all distributions)
381 \item Speed up display of \url{http://bugs.debian.org/src:linux-2.6}
382 \item Allows for reverse status lookup
384 \item Enables finding bugs which are present in testing or unstable
389 \subsection{Statistics}
390 \begin{frame}{Statistics}
392 \column{0.5\textwidth}
394 \item Track status changes over time
395 \item Bugs found/fixed/absent in stable/testing/unstable over time
396 \item Bug submission times
397 \item Bug closure times
399 \item Per package, severity, maintainer tracking of the above
401 \column{0.5\textwidth}
403 \includegraphics[width=\textwidth,height=0.35\textheight,keepaspectratio]{images/bug}
409 \subsection{Additional Planned Features}
410 \begin{frame}{More planned features}
412 \column{0.5\textwidth}
414 \item HTTP based reporting system with e-mail roundtrip
415 \item Release Debbugs again
416 \item Bug mailing lists in Debbugs
418 \item Avoid duplicate mail
419 \item Opt in/out of mail
421 \item Merging of merged bug reports
422 \item Threading in report
424 \column{0.5\textwidth}
425 \includegraphics[width=\textwidth,keepaspectratio]{images/fixed_bug}
429 \begin{frame}{Even More planned features}
431 \column{0.5\textwidth}
433 \item Usercategory duplication and replay
434 \item Remote Attachments
435 \item New Spool Storage Format
436 \item Usertags visibility
437 \item Smarter CGI options
439 \column{0.5\textwidth}
440 \includegraphics[width=\textwidth,keepaspectratio]{images/fixed_bug}
448 \section{Places you can help}
450 \begin{frame}{7 tasks seeking contributors}
452 \item Documentation of Usercategories
453 \item Implementation of rss feeds for packages and bugs
454 \item CGI options on pkgreport.cgi for usertags et al. \#536378)
455 \item Documentation of multipe-package reassign and when it or
456 affects should be used
457 \item Mailto link with subject, references, etc. all filled in
458 \item Documentation for local-debbugs configuration file (behaves
463 \begin{frame}{Getting started on these tasks}
465 \item Upstream branches: \url{http://bugs.debian.org/debbugs-source/}
467 \item master (upstream debbugs): git clone \url{http://bugs.debian.org/debbugs-source/debbugs.git}
468 \item debian (debian branch): git clone -b debian \url{http://bugs.debian.org/debbugs-source/debbugs.git}
469 \item Checked out branches are also available at
470 \url{http://bugs.debian.org/debbugs-source/master} and
471 \url{http://bugs.debian.org/debbugs-source/debian}
473 \item My branches: \url{http://git.donarmstrong.com/debbugs.git}
474 \item Mailing list debian-debbugs@lists.debian.org
475 \item IRC \#debbugs or \#debian-bugs on irc.debian.org; I'm dondelelcaro
479 \begin{frame}{The Debbugs Team}
487 \item Emeritus Developers
489 \item Steiner Gunderson
498 \begin{frame}{Questions?}
499 \includegraphics[width=0.8\textwidth,height=0.8\textheight,keepaspectratio]{images/don_at_burning_man.jpg}