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