]> git.donarmstrong.com Git - debbugs-presentations.git/blob - debbugs.Rnw
move debconf14 presentation
[debbugs-presentations.git] / debbugs.Rnw
1 \mode<presentation>
2 {
3   \usetheme{Montpellier}
4   %\useoutertheme[hideallsubsections]{debiansidebar}
5 %  \setbeamercovered{transparent}  
6 }
7
8
9 \usepackage[no-math]{fontspec}
10 \setmainfont[ExternalLocation, 
11              Mapping=tex-text,
12              BoldFont=FreeSerifBold,
13              ItalicFont=FreeSerifItalic,
14              BoldItalicFont=FreeSerifBoldItalic]{FreeSerif}
15 \setsansfont[ExternalLocation, 
16              Mapping=tex-text,
17              BoldFont=FreeSerifBold,
18              ItalicFont=FreeSerifItalic,
19              BoldItalicFont=FreeSerifBoldItalic,
20              Scale=MatchLowercase]{FreeSerif}
21 \setmonofont{FreeMono}
22
23 \usepackage{booktabs}
24 \usepackage{multirow}
25 \usepackage{setspace}
26 \usepackage[backend=biber,natbib=true,hyperref=true,style=numeric-comp]{biblatex}
27 \bibliography{references}
28 % \usepackage[hyperfigures,bookmarks,colorlinks]{hyperref}
29
30
31 \usepackage[nomargin,inline,draft]{fixme}
32 %\usepackage[x11names,svgnames]{xcolor}
33 \usepackage{texshade}
34 \usepackage[absolute,overlay]{textpos}
35 \usepackage{tikz}
36 \usepackage{nameref}
37 \usepackage{ulem}
38 \usepackage{zref-xr,zref-user}
39 \usepackage{listings}
40
41 \newenvironment{narrow}[2]{%
42   \begin{list}{}{%
43       \setlength{\topsep}{0pt}%
44       \setlength{\leftmargin}{#1}%
45       \setlength{\rightmargin}{#2}%
46       \setlength{\listparindent}{\parindent}%
47       \setlength{\itemindent}{\parindent}%
48       \setlength{\parsep}{\parskip}}%
49   \item[]}{\end{list}}
50 \def\newblock{\hskip}
51 \newenvironment{paperquote}{%
52   \begin{quote}%
53      \it
54   }%
55   {\end{quote}}
56 \renewcommand{\textfraction}{0.15}
57 \renewcommand{\topfraction}{0.85}
58 \renewcommand{\bottomfraction}{0.65}
59 \renewcommand{\floatpagefraction}{0.60}
60 %\renewcommand{\baselinestretch}{1.8}
61 \newenvironment{enumerate*}%
62   {\begin{enumerate}%
63     \setlength{\itemsep}{0pt}%
64     \setlength{\parskip}{0pt}}%
65   {\end{enumerate}}
66 \newenvironment{itemize*}%
67   {\begin{itemize}%
68     \setlength{\itemsep}{0pt}%
69     \setlength{\parskip}{0pt}}%
70   {\end{itemize}}
71
72 \logo{\begin{tikzpicture}% Pale figure
73     {\node[opacity=0.3] {\includegraphics[width=2cm,keepaspectratio]{figures/openlogo-crop.pdf}};}%
74     \end{tikzpicture}}
75 \author{Don Armstrong}
76 \title{Debbugs}
77 \subtitle{Database Ho!}
78 %\date{August 11th, 2008}
79 \titlegraphic{\includegraphics[height=0.3\textheight,keepaspectratio]{figures/openlogo-crop.pdf}}
80 \subject{BTS}
81
82 % State of the BTS: new features, changes and tips
83
84 % The bug tracking system is where all bugs that affect Debian are
85 % filed. New features, including the affects, summary, and local debbugs
86 % mirror will be presented and demonstrated. Some of the underlying
87 % architectural changes to the codebase in debbugs to make it more
88 % maintainable and deployable are also outlined. Finally, a set of tips
89 % and tricks that can be used to make the BTS easier to use are
90 % presented.
91
92 %  - New Features
93 %    - affects
94 %    - summary
95 %    - local debbugs mirror for offline work
96 %    - New SOAP
97 %      - full text search
98 %      - filtering bugs
99 %    - multi-distribution/arch status
100 %    - control changes at submit@ time
101 %  - Code Architecture Changes
102 %    - Modularization
103 %    - Control abstraction
104 %    - release to experimental
105
106
107 <<load.libraries,echo=FALSE,results="hide",error=FALSE,message=FALSE>>=
108 library(lattice)
109 library(xtable)
110 library(ggplot2)
111 library(reshape2)
112 opts_chunk$set(dev="cairo_pdf",out.width="\\textwidth",out.height="0.8\\textheight",out.extra="keepaspectratio")
113 opts_chunk$set(cache=TRUE, autodep=TRUE)
114 options(device = function(file, width = 8, height = 7, ...) {
115   cairo_pdf(tempfile(), width = width, height = height, ...)
116 })
117
118
119
120
121 \begin{document}
122
123 %\setbeamercolor{frametitle}[bg=-red!90!green!10,fg=black]
124
125 \frame[plain]{\titlepage
126   Source available at \url{http://git.donarmstrong.com/debbugs-presentations.git}
127 }
128
129 % \begin{frame}{Debbugs}
130 %   \tableofcontents[subsectionstyle=hide]
131 % \end{frame}
132
133 \section{Introduction to Debbugs}
134
135 \subsection{Introduction}
136 \begin{frame}{Goals of this talk}
137   \begin{columns}
138     \column{0.5\textwidth}
139     \begin{itemize}
140     \item Bug Statitics
141     \item Introduction to Debbugs
142     \item New features
143     \item Planned features
144     \item Places you can help
145     \end{itemize}
146     \column{0.5\textwidth}
147     \includegraphics[width=\textwidth,keepaspectratio]{images/rc_buggy}
148   \end{columns}
149 \end{frame}
150 \begin{frame}{Goals of the BTS}
151   \begin{columns}
152   \column{0.4\textwidth}
153     \includegraphics[width=\textwidth,keepaspectratio]{images/not_a_bug}
154   \column{0.6\textwidth}
155   \begin{itemize}
156   \item Reporting of \only<1>{Features}\only<2>{Bugs}
157   \item Evolution of \only<1>{Features}\only<2>{Bugs}
158   \item Fixing of \only<1>{Features}\only<2>{Bugs}
159   \item Reducing impact of \only<1>{Features}\only<2>{Bugs}
160   \end{itemize}
161 \end{columns}
162 \end{frame}
163
164 \section{Bugs in Debian}
165 \subsection{Bug Reporting Rate}
166 \begin{frame}{How many bugs do we have?}
167   \begin{center}
168 <<bug.growth,fig=TRUE,echo=FALSE>>=
169 bug.growth <- read.table("data/sorted_bug_growth_for_r_every_500.txt",stringsAsFactors=FALSE);
170 colnames(bug.growth) <- c("time","bugs")
171 bug.growth <- bug.growth[pmax(bug.growth$bugs) <= as.numeric(bug.growth$bugs),]
172 bug.growth$date <- 
173   as.POSIXct(ISOdatetime(1970,1,1,0,0,0)+as.numeric(bug.growth$time))
174 print(ggplot(bug.growth[bug.growth$date > as.POSIXct(ISOdatetime(2005,1,1,0,0,0)),],aes(x=date,y=bugs))+
175       xlab("Time")+ylab("Bugs filed in Debian")+
176       geom_point()+stat_smooth(method="lm")+
177       ggtitle("Bug growth versus time"))
178
179 \end{center}
180 \end{frame}
181
182 \begin{frame}
183   \begin{columns}
184     \column{0.5\textwidth}
185   \begin{center}
186 <<bugs.filed,fig=TRUE,echo=FALSE,warning=FALSE>>=
187 print(ggplot(bug.growth[bug.growth$date > as.POSIXct(ISOdatetime(2013,1,1,0,0,0)),],aes(x=date,y=bugs))+
188       xlab("Time")+ylab("Bugs filed in Debian")+
189       geom_point()+stat_smooth(method="lm")+
190       ggtitle("Christian Perrier's Plot"))
191 bugs.filed.per.day <-
192   lm(bugs~date,bug.growth)$coeff[2]*3600*24
193 temp.lm <- lm(date~bugs,bug.growth[bug.growth$date > as.POSIXct(ISOdatetime(2013,1,1,0,0,0)),])
194 bug.760000 <- 
195     as.POSIXct(ISOdatetime(1970,1,1,0,0,0)+as.numeric(predict(temp.lm,data.frame(bugs=760000,date=NA))))
196 bug.800000 <- 
197     as.POSIXct(ISOdatetime(1970,1,1,0,0,0)+as.numeric(predict(temp.lm,data.frame(bugs=800000,date=NA))))
198
199 \end{center}
200 \column{0.5\textwidth}
201 Roughly \Sexpr{format(bugs.filed.per.day,digits=1)} bugs are filed per
202 day. The 760000th bug will be filed at \Sexpr{bug.760000}, and the
203 800000th bug will be filed at \Sexpr{bug.800000}.
204 \end{columns}
205 \end{frame}
206
207
208 \subsection{Bug Fixing Rate}
209 \begin{frame}
210   \begin{center}
211 <<bugs.closed,fig=TRUE,echo=FALSE,width=7,height=5,warning=FALSE,error=FALSE>>=
212 bug.closed.series <- read.table(file="data/bug_closed_time_series.txt")
213 colnames(bug.closed.series) <- c("archived.bugs","year.week")
214 bug.closed.series$week <-
215     gsub("(\\d+)-(\\d+)","\\2",bug.closed.series$year.week)
216 bug.closed.series$year <-
217     gsub("(\\d+)-(\\d+)","\\1",bug.closed.series$year.week)
218 bug.closed.series$doy <- 
219     as.numeric(bug.closed.series$week)*7
220 bug.closed.series$year.doy <- 
221     paste(sep="-",bug.closed.series$year,bug.closed.series$doy)
222 bug.closed.series$date <-
223   as.POSIXct(strptime(bug.closed.series$year.doy,
224                       format="%Y-%j"))
225
226 # bug.closed.ts <- ts(bug.closed.series[,1],start=1,frequency=7)
227
228 print(ggplot(bug.closed.series[bug.closed.series$date > as.POSIXct(ISOdatetime(2008,1,1,0,0,0)),],
229              aes(x=date,y=archived.bugs/7))+geom_line()+stat_smooth(method="lm")+
230       ylab("Bugs archived Per Day")+xlab("Time"))
231 bugs.closed.per.day <- 
232     sum(bug.closed.series$archived.bugs)/
233     as.numeric(bug.closed.series$date[nrow(bug.closed.series)]-bug.closed.series$date[1])
234
235   \end{center}
236 Roughly \Sexpr{format(bugs.closed.per.day,digits=1)} bugs are closed per day.
237 \end{frame}
238
239 \subsection{RC Bugs}
240 \begin{frame}
241   \begin{center}
242 <<rc.bugs,fig=TRUE,echo=FALSE>>=
243 rc.bugs <-
244   read.table(file="data/rc_bugs.txt",
245              header=TRUE,fill=TRUE)
246 rc.bugs <- data.frame(rc.bugs)
247 rc.bugs <- rc.bugs[,c(-5,-7)]
248 rc.bugs$date <-
249   as.POSIXct(strptime(rc.bugs$date,
250                       format="%Y%m%d%H%M"))
251 rc.bugs.long <-
252     melt(rc.bugs,id="date")
253 print(ggplot(rc.bugs.long[rc.bugs.long$date > 
254                           as.POSIXct(ISOdatetime(2013,08,1,0,0,0)),]
255              ,aes(x=date,y=value,color=variable))+
256       geom_line()+
257       ggtitle("RC Bugs in the past year")+
258       ylab("RC Bugs")+xlab("Time")+
259       theme(legend.position=c(0.9,0.5))+
260       guides(color=guide_legend(title="Measure")))
261
262
263 \end{center}
264   \setbeamercolor{postit}{fg=black,bg=yellow}
265   \begin{textblock}{4}(6,4)
266     \begin{onlyenv}<2>
267       \begin{beamercolorbox}[sep=1em,wd=5cm]{postit}
268         \centering \huge Too many RC bugs!
269       \end{beamercolorbox}
270     \end{onlyenv}
271   \end{textblock}
272
273 \end{frame}
274
275 \section{Debbugs Structure and Infrastructure}
276
277 \subsection{BTS System Diagram}
278 \begin{frame}{BTS system Diagram}
279   \begin{center}
280     \includegraphics[width=\textwidth,height=\textheight,keepaspectratio]{figures/bug_global_layout}
281   \end{center}
282 \end{frame}
283
284 \subsection{Debbugs Box Diagram}
285 \begin{frame}{Debbugs Box Diagram}
286   \begin{center}
287     \input{debbugs_layout}
288   \end{center}
289 \end{frame}
290
291 \section{Database Ho!}
292
293 \subsection{Overall Database Design}
294
295 \begin{frame}{Overall Database Design}
296   \begin{center}
297     \input{debbugs_layout_db}
298   \end{center}
299 \end{frame}
300
301 \subsection{Perl Database Infrastucture}
302 \begin{frame}{Perl Database Infrastructure}
303   \begin{itemize}
304   \item DBIx::Class
305   \item DBIx::Class::Schema::Loader -- SQL schema to DBIx::Class
306   \item DBIx::Class::DeploymentHandler -- Upgrades of Schema
307   \item Debbugs::DB -- Debbugs SQL Module
308   \end{itemize}
309 \end{frame}
310
311
312 \subsection{SQL Design}
313 \begin{frame}{SQL Schema}
314   \includegraphics[width=\textwidth,keepaspectratio]{figures/schema.png}
315   \begin{itemize}
316   \item Current Debbugs SQL Schema
317   \end{itemize}
318 \end{frame}
319
320 \subsubsection{dak SQL Design}
321 \begin{frame}{dak SQL Schema}
322   \includegraphics[width=\textwidth,keepaspectratio]{figures/dak_schema.png}
323   \begin{itemize}
324   \item Inspiration taken from dak SQL Schema where appropriate
325   \end{itemize}
326 \end{frame}
327
328 \subsection{SQL Loading}
329 \begin{frame}[fragile]{SQL Loading}
330   % SQL loading
331   \begin{itemize}
332   \item Load bugs
333 \begin{lstlisting}[language=sh]
334 debbugs-loadsql bugs;
335 debbugs-loadsql bugs archive;
336 \end{lstlisting}
337   \item Load Versioning information
338 \begin{lstlisting}[language=sh]
339 debbugs-loadsql versions;
340 debbugs-loadsql debinfo;
341 \end{lstlisting}
342   \end{itemize}
343 \end{frame}
344
345 \subsection{SQL Working}
346 \begin{frame}[fragile]{SQL Working}
347   % example SQL query
348 \begin{lstlisting}[language=SQL]
349 SELECT count(*) FROM bug
350 WHERE last_modified > '2014-07-01'
351 AND done IS NOT NULL
352 AND owner IS NOT NULL;
353 \end{lstlisting}
354 \begin{visibleenv}<2>
355 \begin{lstlisting}
356  count 
357 -------
358    521
359 \end{lstlisting}
360 \end{visibleenv}
361 \end{frame}
362
363 \subsection{Work still needed for SQL}
364 \begin{frame}{Work Still needed for SQL}
365 \begin{itemize}
366 \item Logfile loading (for full text searching)
367 \item Status Caching (for faster page loading)
368 \item Testing
369 \item Deployment
370 \end{itemize}
371 \end{frame}
372
373 \section{New(ish) Features}
374
375 \subsection{New Changes}
376 \begin{frame}{New Changes}
377   \begin{columns}
378     \column{0.5\textwidth}
379     \begin{itemize}
380   \item mailto links (demo)
381   \item forcemerge does the right thing
382   \item control at submit time
383   \end{itemize}
384     \column{0.5\textwidth}
385     \includegraphics[width=\textwidth,keepaspectratio]{images/telegraph_bug}
386 \end{columns}
387 \end{frame}
388
389 \section{Future features}
390
391 \subsection{Status Caching}
392 \begin{frame}{Status Caching}
393   \begin{itemize}
394   \item Cache status of bugs (presence/absence at all distributions)
395   \item Speed up display of \url{http://bugs.debian.org/src:linux-2.6}
396   \item Allows for reverse status lookup
397     \begin{itemize}
398     \item Enables finding bugs which are present in testing or unstable
399     \end{itemize}
400   \end{itemize}
401 \end{frame}
402
403 \subsection{Statistics}
404 \begin{frame}{Statistics}
405   \begin{columns}
406     \column{0.5\textwidth}
407     \begin{itemize}
408     \item Track status changes over time
409     \item Bugs found/fixed/absent in stable/testing/unstable over time
410     \item Bug submission times
411     \item Bug closure times
412     \item Bug mail rates
413     \item Per package, severity, maintainer tracking of the above
414     \end{itemize}
415     \column{0.5\textwidth}
416     \begin{center}
417       \includegraphics[width=\textwidth,height=0.35\textheight,keepaspectratio]{images/bug}
418     \end{center}
419   \end{columns}
420 \end{frame}
421
422
423 \subsection{Additional Planned Features}
424 \begin{frame}{More planned features}
425   \begin{columns}
426     \column{0.5\textwidth}
427     \begin{itemize}
428     \item HTTP based reporting system with e-mail roundtrip
429     \item Release Debbugs again
430     \item Bug mailing lists in Debbugs
431       \begin{itemize}
432       \item Avoid duplicate mail
433       \item Opt in/out of mail
434       \end{itemize}
435     \item Merging of merged bug reports
436     \item Threading in report
437     \end{itemize}
438     \column{0.5\textwidth}
439     \includegraphics[width=\textwidth,keepaspectratio]{images/fixed_bug}
440   \end{columns}
441 \end{frame}
442
443 \begin{frame}{Even More planned features}
444   \begin{columns}
445     \column{0.5\textwidth}
446     \begin{itemize}
447     \item Usercategory duplication and replay
448     \item Remote Attachments
449     \item New Spool Storage Format
450     \item Usertags visibility
451     \item Smarter CGI options
452     \end{itemize}
453     \column{0.5\textwidth}
454     \includegraphics[width=\textwidth,keepaspectratio]{images/fixed_bug}
455   \end{columns}
456 \end{frame}
457
458
459
460
461
462 \section{Places you can help}
463
464 \begin{frame}{7 tasks seeking contributors}
465   \begin{itemize}
466   \item Documentation of Usercategories
467   \item Implementation of rss feeds for packages and bugs
468   \item CGI options on pkgreport.cgi for usertags et al. \#536378)
469   \item Documentation of multipe-package reassign and when it or
470     affects should be used
471   \item Mailto link with subject, references, etc. all filled in
472   \item Documentation for local-debbugs configuration file (behaves
473     like bts select)
474   \end{itemize}
475 \end{frame}
476
477 \begin{frame}{Getting started on these tasks}
478   \begin{itemize}
479   \item Upstream branches: \url{http://bugs.debian.org/debbugs-source/}
480     \begin{itemize}
481     \item master (upstream debbugs): git clone \url{http://bugs.debian.org/debbugs-source/debbugs.git}
482     \item debian (debian branch): git clone -b debian \url{http://bugs.debian.org/debbugs-source/debbugs.git}
483     \item Checked out branches are also available at
484       \url{http://bugs.debian.org/debbugs-source/master} and
485       \url{http://bugs.debian.org/debbugs-source/debian}
486     \end{itemize}
487   \item My branches: \url{http://git.donarmstrong.com/debbugs.git}
488   \item Mailing list debian-debbugs@lists.debian.org
489   \item IRC \#debbugs or \#debian-bugs on irc.debian.org; I'm dondelelcaro
490   \end{itemize}
491 \end{frame}
492
493 \begin{frame}{The Debbugs Team}
494   \begin{itemize}
495   \item Current team
496     \begin{itemize}
497     \item Don Armstrong
498     \item Blars Blarson
499     \item Colin Watson
500     \end{itemize}
501   \item Emeritus Developers
502     \begin{itemize}
503     \item Steiner Gunderson
504     \item Adam Heath
505     \item Josip Rodin
506     \item Anthony Towns
507     \end{itemize}
508   \item You!
509   \end{itemize}
510 \end{frame}
511
512 \begin{frame}{Questions?}
513   \includegraphics[width=0.8\textwidth,height=0.8\textheight,keepaspectratio]{images/don_at_burning_man.jpg}
514 \end{frame}
515
516 \end{document}
517
518