+%\usepackage{libertine}
\usepackage{fontspec}
-\setmainfont{FreeSerif}
-\setsansfont{FreeSans}
+\setmainfont[Ligatures=TeX]{FreeSerif}
+\setsansfont[Ligatures=TeX]{FreeSans}
\setmonofont{FreeMono}
+\usepackage[Symbols]{ucharclasses}
+\newfontfamily{\defaultfont}{FreeSerif}
+%\newfontfamily{\symbolfont}{FreeSerif}
+\newfontfamily{\sansfont}{FreeSans}
+\setDefaultTransitions{\bgroup\defaultfont}{\egroup}
\usepackage{url}
\usepackage{fancyhdr}
\usepackage{graphicx}
\usepackage{wrapfig}
\usepackage{fancybox}
\usepackage{booktabs}
+\usepackage{minted}
+\usepackage{tcolorbox}
+\usepackage{etoolbox}
+\BeforeBeginEnvironment{minted}{\begin{tcolorbox}}%
+\AfterEndEnvironment{minted}{\end{tcolorbox}}%
% \usepackage{multirow}
\usepackage{acronym}
\usepackage{qrcode}
% \setbeamercovered{transparent}
}
+\setbeamertemplate{navigation symbols}{}%remove navigation symbols
\usepackage[nomargin,inline,draft]{fixme}
\usepackage{listings}
\end{tikzpicture}}
\author{Don Armstrong}
\title{Debbugs}
-\subtitle{Database Ho!}
-%\date{August 11th, 2008}
-\titlegraphic{\includegraphics[height=0.3\textheight,keepaspectratio]{figures/openlogo-crop.pdf}}
+\subtitle{22 Years of Bugs}
+\date{August 10th, 2017}
+\titlegraphic{\includegraphics[height=0.2\textheight,keepaspectratio]{figures/openlogo-crop.pdf}}
\subject{BTS}
+\setbeamercolor{postit}{fg=black,bg=yellow}
+
% State of the BTS: new features, changes and tips
%
% The bug tracking system is where all bugs that affect Debian are
% - release to experimental
-<<load.libraries,echo=FALSE,results="hide",error=FALSE,message=FALSE>>=
+<<load.libraries,echo=FALSE,results="hide",error=FALSE,message=FALSE,cache=FALSE>>=
library(lattice)
library(xtable)
library(ggplot2)
library("scales")
library(reshape2)
library("data.table")
-opts_chunk$set(dev="cairo_pdf",out.width="\\textwidth",out.height="0.8\\textheight",out.extra="keepaspectratio",fig.width=6,fig.height=4)
+opts_chunk$set(dev="cairo_pdf",out.width="\\textwidth",out.height="0.8\\textheight",out.extra="keepaspectratio",fig.width=6/1.2,fig.height=4/1.2)
opts_chunk$set(cache=TRUE, autodep=TRUE)
-options(device = function(file, width = 6, height = 4, ...) {
+options(device = function(file, width = 6/1.2, height = 4/1.2, ...) {
cairo_pdf(tempfile(), width = width, height = height, ...)
})
%\setbeamercolor{frametitle}[bg=-red!90!green!10,fg=black]
\frame[plain]{\titlepage
- Source available at \url{http://git.donarmstrong.com/debbugs-presentations.git}
+ Code and slides are here:
+ \qrcode[padding]{https://dla2.us/p/debbugs2017}
+ \url{https://dla2.us/p/debbugs2017}
+
}
% \begin{frame}{Debbugs}
\begin{columns}
\column{0.5\textwidth}
\begin{itemize}
- \item Bug Statitics
- \item Introduction to Debbugs
+ \item Bug Statistics
\item New features
- \item Planned features
- \item Places you can help
+ \item How you can help
+ \item Answer questions/discussion
\end{itemize}
- \column{0.5\textwidth}
+ \column{0.4\textwidth}
\includegraphics[width=\textwidth,keepaspectratio]{images/rc_buggy}
\end{columns}
\end{frame}
\section{Bugs in Debian}
\subsection{Bug Reporting Rate}
-\begin{frame}{How many bugs do we have?}
+\begin{frame}{Bugs from the beginning of time}
\begin{center}
<<bug.growth,fig=TRUE,echo=FALSE,cache.extra=file.info("data/sorted_bug_growth_for_r_every_500.txt")[,"mtime"]>>=
bug.growth <- fread("data/sorted_bug_growth_for_r_every_500.txt")
colnames(bug.growth) <- c("time","bugs")
bug.growth <- bug.growth[pmax(bugs) <= as.numeric(bugs),]
+bug.growth <- bug.growth[order(time),]
+while (bug.growth[,any(c(0,diff(bugs)) < 0)]) {
+ bug.growth <-
+ bug.growth[c(0,diff(bugs))>=0,]
+}
bug.growth[,date:=
as.POSIXct(ISOdatetime(1970,1,1,0,0,0)+
as.numeric(bug.growth$time))]
-print(ggplot(bug.growth[date > as.POSIXct(ISOdatetime(2005,1,1,0,0,0)),],
+bug.growth[,`bugs per day`:=c(0,diff(bugs)/
+ as.double(diff(date),"days"))
+ ]
+print(ggplot(bug.growth,#[date > as.POSIXct(ISOdatetime(2005,1,1,0,0,0)),],
aes(x=date,y=bugs))+
xlab("Time")+ylab("Bugs filed in Debian")+
scale_y_continuous(labels = scientific_10)+
- geom_point()+stat_smooth(method="lm"))
+ geom_point())
@
\end{center}
\end{frame}
-\begin{frame}
+\begin{frame}[fragile]{Bug Growth Rate}
+<<bug_growth_rate,echo=FALSE>>=
+print(ggplot(bug.growth[date > as.POSIXct(ISOdatetime(2014,1,1,0,0,0)),],
+ aes(x=date,y=`bugs per day`))+
+ xlab("Time")+ylab("Bugs filed per day")
+ + scale_y_log10(breaks=c(60,100,200,400,800))
+ + geom_line()+stat_smooth(method="lm")
+ + geom_label(data=data.table(date=as.POSIXct(ISOdatetime(2015,04,25,0,0,0)),"bugs per day"=400),label="Jessie",color="red")
+ + geom_label(data=data.table(date=as.POSIXct(ISOdatetime(2017,06,17,0,0,0)),"bugs per day"=400),label="Stretch",color="purple")
+ )
+@
+\end{frame}
+
+\begin{frame}[fragile]{Is the bug filing rate decreasing?}
+\tiny
+<<bug_growth_rate_over_time>>=
+summary(lm(log(`bugs per day`)~date,bug.growth[date > "2014-01-01 PST",]))
+@
+\normalsize
+Not significantly decreasing.
+\end{frame}
+
+\begin{frame}{My entries into Christian's game}
\begin{columns}
\column{0.5\textwidth}
\begin{center}
scale_color_discrete("Measure"))
@
\end{center}
- \setbeamercolor{postit}{fg=black,bg=yellow}
- \begin{textblock}{4}(6,4)
- \begin{onlyenv}<2>
- \begin{beamercolorbox}[sep=1em,wd=5cm]{postit}
- \centering \huge Too many RC bugs!
- \end{beamercolorbox}
- \end{onlyenv}
- \end{textblock}
-
\end{frame}
\section{Debbugs Structure and Infrastructure}
\end{center}
\end{frame}
-\section{Database Ho!}
+\section{New Features}
-\subsection{Overall Database Design}
+\subsection{Database}
-\begin{frame}{Overall Database Design}
- \begin{center}
- \input{debbugs_layout_db}
- \end{center}
-\end{frame}
-
-\subsection{Perl Database Infrastucture}
+\subsubsection{Perl Database Infrastucture}
\begin{frame}{Perl Database Infrastructure}
\begin{itemize}
\item DBIx::Class
\end{frame}
-\subsection{SQL Design}
-\begin{frame}{SQL Schema}
- \includegraphics[width=\textwidth,keepaspectratio]{figures/schema.png}
- \begin{itemize}
- \item Current Debbugs SQL Schema
- \end{itemize}
-\end{frame}
-
-\subsubsection{dak SQL Design}
-\begin{frame}{dak SQL Schema}
- \includegraphics[width=\textwidth,keepaspectratio]{figures/dak_schema.png}
- \begin{itemize}
- \item Inspiration taken from dak SQL Schema where appropriate
- \end{itemize}
-\end{frame}
-
-\subsection{SQL Loading}
+\subsubsection{SQL Loading}
\begin{frame}[fragile]{SQL Loading}
% SQL loading
\begin{itemize}
\item Load bugs
-\begin{lstlisting}[language=sh]
+\begin{minted}{sh}
debbugs-loadsql bugs;
debbugs-loadsql bugs archive;
-\end{lstlisting}
+\end{minted}
\item Load Versioning information
-\begin{lstlisting}[language=sh]
+\begin{minted}{sh}
debbugs-loadsql versions;
debbugs-loadsql debinfo;
-\end{lstlisting}
+\end{minted}
\end{itemize}
\end{frame}
-\subsection{SQL Working}
-\begin{frame}[fragile]{SQL Working}
- % example SQL query
-\begin{lstlisting}[language=SQL]
-SELECT count(*) FROM bug
-WHERE last_modified > '2014-07-01'
-AND done IS NOT NULL
-AND owner IS NOT NULL;
-\end{lstlisting}
-\begin{visibleenv}<2>
-\begin{lstlisting}
- count
+\subsubsection{Fun Queries}
+
+\begin{frame}[fragile]{Messages to bugs}
+\small
+\begin{minted}{sql}
+SELECT count(*),c.addr FROM
+message_correspondent mc
+JOIN correspondent c ON mc.correspondent=c.id
+WHERE correspondent_type='from'
+GROUP BY mc.correspondent,c.addr
+ORDER BY count DESC LIMIT 5;
+\end{minted}
+\begin{verbatim}
+ count | addr
+-------+---------------------------------
+ 5123 | bubulle@debian.org
+ 4346 | joeyh@debian.org
+ 4214 | biebl@debian.org
+ 3875 | tbm@cyrius.com
+ 3632 | ftpmaster@ftp-master.debian.org
+\end{verbatim}
+\end{frame}
+
+\begin{frame}[fragile]{Single-message correspondents}
+\small
+\begin{minted}{sql}
+SELECT count (*) FROM
+(SELECT count(*),c.addr
+ FROM message_correspondent mc
+ JOIN correspondent c ON
+ mc.correspondent=c.id
+ WHERE correspondent_type='from'
+ GROUP BY mc.correspondent,
+ c.addr
+ HAVING count(*) = 1) AS foo;
+\end{minted}
+\begin{verbatim}
+ count
-------
- 521
-\end{lstlisting}
-\end{visibleenv}
+ 30215
+\end{verbatim}
+\end{frame}
+
+
+
+\begin{frame}[fragile]{More fun queries}
+\begin{minted}{sql}
+SELECT count(*),t.tag
+FROM bug b
+JOIN bug_tag bt ON b.id=bt.bug
+JOIN tag t on bt.tag=t.id
+GROUP by bt.tag,t.tag
+ORDER by count DESC LIMIT 5;
+\end{minted}
+\begin{verbatim}
+ count | tag
+--------+----------------
+ 141184 | patch
+ 42288 | upstream
+ 39466 | sid
+ 33640 | l10n
+ 25566 | fixed-upstream
+\end{verbatim}
+\end{frame}
+
+\subsection{Database status caching}
+\begin{frame}[fragile]{Status caching ``working''}
+\begin{minted}{sql}
+SELECT count(*),status
+FROM bug_status_cache bsc
+JOIN suite s ON bsc.suite=s.id
+WHERE s.suite_name='unstable'
+GROUP by status;
+\end{minted}
+\begin{verbatim}
+ count | status
+--------+--------
+ 514488 | fixed
+ 234155 | absent
+ 3923 | found
+\end{verbatim}
\end{frame}
\subsection{Work still needed for SQL}
\begin{frame}{Work Still needed for SQL}
\begin{itemize}
-\item Logfile loading (for full text searching)
-\item Status Caching (for faster page loading)
-\item Testing
+\item Integration into CGI (\texttt{bugreport.cgi} and
+ \texttt{pkgreport.cgi})
+\item Database loading/update is slow in some cases
+\item Some corrupted bugs have been exposed by the loading (#167851
+ and #280931); likely others
+\item Testing (Mainly of queries)
\item Deployment
\end{itemize}
\end{frame}
\begin{columns}
\column{0.5\textwidth}
\begin{itemize}
- \item mailto links (demo)
- \item forcemerge does the right thing
- \item control at submit time
+ \item Format-flowed messages are wrapped
+ \item https links everywhere
+ \item etag caching support everywhere
+ \item a11y (accessibility, ♿) tag
+ \item newcomer (⎈) tag
+ \item Usercategories now selectable (Categorize/order using)
\end{itemize}
\column{0.5\textwidth}
\includegraphics[width=\textwidth,keepaspectratio]{images/telegraph_bug}
\end{columns}
\end{frame}
-\section{Future features}
-
-\subsection{Status Caching}
-\begin{frame}{Status Caching}
- \begin{itemize}
- \item Cache status of bugs (presence/absence at all distributions)
- \item Speed up display of \url{http://bugs.debian.org/src:linux-2.6}
- \item Allows for reverse status lookup
- \begin{itemize}
- \item Enables finding bugs which are present in testing or unstable
- \end{itemize}
- \end{itemize}
-\end{frame}
-
-\subsection{Statistics}
-\begin{frame}{Statistics}
- \begin{columns}
- \column{0.5\textwidth}
- \begin{itemize}
- \item Track status changes over time
- \item Bugs found/fixed/absent in stable/testing/unstable over time
- \item Bug submission times
- \item Bug closure times
- \item Bug mail rates
- \item Per package, severity, maintainer tracking of the above
- \end{itemize}
- \column{0.5\textwidth}
- \begin{center}
- \includegraphics[width=\textwidth,height=0.35\textheight,keepaspectratio]{images/bug}
- \end{center}
- \end{columns}
-\end{frame}
-
-
-\subsection{Additional Planned Features}
-\begin{frame}{More planned features}
- \begin{columns}
- \column{0.5\textwidth}
- \begin{itemize}
- \item HTTP based reporting system with e-mail roundtrip
- \item Release Debbugs again
- \item Bug mailing lists in Debbugs
- \begin{itemize}
- \item Avoid duplicate mail
- \item Opt in/out of mail
- \end{itemize}
- \item Merging of merged bug reports
- \item Threading in report
- \end{itemize}
- \column{0.5\textwidth}
- \includegraphics[width=\textwidth,keepaspectratio]{images/fixed_bug}
- \end{columns}
-\end{frame}
-
-\begin{frame}{Even More planned features}
- \begin{columns}
- \column{0.5\textwidth}
- \begin{itemize}
- \item Usercategory duplication and replay
- \item Remote Attachments
- \item New Spool Storage Format
- \item Usertags visibility
- \item Smarter CGI options
- \end{itemize}
- \column{0.5\textwidth}
- \includegraphics[width=\textwidth,keepaspectratio]{images/fixed_bug}
- \end{columns}
-\end{frame}
-
-
-
-
-
-\section{Places you can help}
+\section{Contributing to Debbugs}
\begin{frame}{7 tasks seeking contributors}
\begin{itemize}
\item Documentation of Usercategories
\item Implementation of rss feeds for packages and bugs
\item CGI options on pkgreport.cgi for usertags et al. \#536378)
- \item Documentation of multipe-package reassign and when it or
+ \item Documentation of multiple-package reassign and when it or
affects should be used
- \item Mailto link with subject, references, etc. all filled in
\item Documentation for local-debbugs configuration file (behaves
like bts select)
\end{itemize}
\begin{frame}{Getting started on these tasks}
\begin{itemize}
- \item Upstream branches: \url{http://bugs.debian.org/debbugs-source/}
+ \item Upstream branches: \url{https://bugs.debian.org/debbugs-source/}
\begin{itemize}
- \item master (upstream debbugs): git clone \url{http://bugs.debian.org/debbugs-source/debbugs.git}
- \item debian (debian branch): git clone -b debian \url{http://bugs.debian.org/debbugs-source/debbugs.git}
+ \item master (upstream debbugs): git clone \url{https://bugs.debian.org/debbugs-source/debbugs.git}
+ \item debian (debian branch): git clone -b debian \url{https://bugs.debian.org/debbugs-source/debbugs.git}
\item Checked out branches are also available at
- \url{http://bugs.debian.org/debbugs-source/master} and
- \url{http://bugs.debian.org/debbugs-source/debian}
+ \url{https://bugs.debian.org/debbugs-source/master} and
+ \url{https://bugs.debian.org/debbugs-source/debian}
\end{itemize}
- \item My branches: \url{http://git.donarmstrong.com/debbugs.git}
+ \item My branches: \url{https://git.donarmstrong.com/debbugs.git}
\item Mailing list debian-debbugs@lists.debian.org
\item IRC \#debbugs or \#debian-bugs on irc.debian.org; I'm dondelelcaro
\end{itemize}
\end{frame}
+\begin{frame}[fragile]{Using \texttt{local-debbugs} to work on these tasks}
+\footnotesize
+\begin{minted}{sh}
+git clone \
+ https://bugs.debian.org/debbugs-source/debbugs.git
+cd debbugs
+# get some bugs
+perl -I. ./bin/local-debbugs --mirror
+# start a web daemon
+perl -I. ./bin/local-debbugs --daemon
+# show some of my bugs (use your own search here)
+perl -I. ./bin/local-debbugs --search bugs.debian.org
+# stop the daemon
+perl -I. ./bin/local-debbugs --stop
+# hack and repeat
+perl -I. ./bin/local-debbugs --daemon
+perl -I. ./bin/local-debbugs --show 614351
+\end{minted}
+\end{frame}
+
\begin{frame}{The Debbugs Team}
\begin{itemize}
\item Current team
\end{frame}
\begin{frame}{Questions?}
- \includegraphics[width=0.8\textwidth,height=0.8\textheight,keepaspectratio]{images/don_at_burning_man.jpg}
+\begin{center}
+\includegraphics[height=0.8\textheight,keepaspectratio]{images/relevant_xkcd}
+\end{center}
\end{frame}
\end{document}