]> git.donarmstrong.com Git - debbugs-presentations.git/blobdiff - debbugs.Rnw
update the commands to run local-debbugs
[debbugs-presentations.git] / debbugs.Rnw
index 1f233b095a124dbdaaa09cc5322ec533b3dd1c3e..9d8a03dcf5e5caf431b93b574cd519070c24fbf8 100644 (file)
@@ -1,3 +1,42 @@
+
+%\usepackage{libertine}
+\usepackage{fontspec}
+\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[bf]{caption}
+\usepackage{rotating}
+\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}
+\usepackage[backend=biber,natbib=true,hyperref=true,style=nature]{biblatex}
+\addbibresource{references.bib}
+% \usepackage[nomargin,inline,draft]{fixme}
+% \newcommand{\DLA}[1]{\textcolor{red}{\fxnote{DLA: #1}}}
+% \usepackage[hyperfigures,bookmarks,colorlinks,citecolor=black,filecolor=black,linkcolor=black,urlcolor=black]{hyperref}
+\usepackage{texshade}
+\usepackage{tikz}
+\usepackage{nameref}
+\usepackage{zref-xr,zref-user}
+\renewcommand*{\bibfont}{\tiny}
+\usepackage[absolute,overlay]{textpos}
+
 \mode<presentation>
 {
   \usetheme{Montpellier}
 %  \setbeamercovered{transparent}  
 }
 
-
-\usepackage[no-math]{fontspec}
-\setmainfont[ExternalLocation, 
-             Mapping=tex-text,
-             BoldFont=FreeSerifBold,
-             ItalicFont=FreeSerifItalic,
-             BoldItalicFont=FreeSerifBoldItalic]{FreeSerif}
-\setsansfont[ExternalLocation, 
-             Mapping=tex-text,
-             BoldFont=FreeSerifBold,
-             ItalicFont=FreeSerifItalic,
-             BoldItalicFont=FreeSerifBoldItalic,
-             Scale=MatchLowercase]{FreeSerif}
-\setmonofont{FreeMono}
-
-\usepackage{booktabs}
-\usepackage{multirow}
-\usepackage{setspace}
-\usepackage[backend=biber,natbib=true,hyperref=true,style=numeric-comp]{biblatex}
-\bibliography{references}
-% \usepackage[hyperfigures,bookmarks,colorlinks]{hyperref}
-
+\setbeamertemplate{navigation symbols}{}%remove navigation symbols
 
 \usepackage[nomargin,inline,draft]{fixme}
-%\usepackage[x11names,svgnames]{xcolor}
-\usepackage{texshade}
-\usepackage[absolute,overlay]{textpos}
-\usepackage{tikz}
-\usepackage{nameref}
-\usepackage{ulem}
-\usepackage{zref-xr,zref-user}
 \usepackage{listings}
 
-\newenvironment{narrow}[2]{%
-  \begin{list}{}{%
-      \setlength{\topsep}{0pt}%
-      \setlength{\leftmargin}{#1}%
-      \setlength{\rightmargin}{#2}%
-      \setlength{\listparindent}{\parindent}%
-      \setlength{\itemindent}{\parindent}%
-      \setlength{\parsep}{\parskip}}%
-  \item[]}{\end{list}}
-\def\newblock{\hskip}
-\newenvironment{paperquote}{%
-  \begin{quote}%
-     \it
-  }%
-  {\end{quote}}
-\renewcommand{\textfraction}{0.15}
-\renewcommand{\topfraction}{0.85}
-\renewcommand{\bottomfraction}{0.65}
-\renewcommand{\floatpagefraction}{0.60}
-%\renewcommand{\baselinestretch}{1.8}
-\newenvironment{enumerate*}%
-  {\begin{enumerate}%
-    \setlength{\itemsep}{0pt}%
-    \setlength{\parskip}{0pt}}%
-  {\end{enumerate}}
-\newenvironment{itemize*}%
-  {\begin{itemize}%
-    \setlength{\itemsep}{0pt}%
-    \setlength{\parskip}{0pt}}%
-  {\end{itemize}}
 
 \logo{\begin{tikzpicture}% Pale figure
     {\node[opacity=0.3] {\includegraphics[width=2cm,keepaspectratio]{figures/openlogo-crop.pdf}};}%
     \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)
-opts_chunk$set(dev="cairo_pdf",out.width="\\textwidth",out.height="0.8\\textheight",out.extra="keepaspectratio")
+library("data.table")
+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 = 8, height = 7, ...) {
+options(device = function(file, width = 6/1.2, height = 4/1.2, ...) {
   cairo_pdf(tempfile(), width = width, height = height, ...)
 })
 
 @ 
 
+<<scientific_format,echo=FALSE>>=
+scientific_10 <- function(x) {
+  parse(text=gsub("e", " %*% 10^", scientific_format()(x)))
+}
+@ 
 
 \begin{document}
 
 %\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}
@@ -137,13 +130,12 @@ options(device = function(file, width = 8, height = 7, ...) {
   \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}
@@ -163,44 +155,80 @@ options(device = function(file, width = 8, height = 7, ...) {
 
 \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>>=
-bug.growth <- read.table("data/sorted_bug_growth_for_r_every_500.txt",stringsAsFactors=FALSE);
+<<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(bug.growth$bugs) <= as.numeric(bug.growth$bugs),]
-bug.growth$date <- 
-  as.POSIXct(ISOdatetime(1970,1,1,0,0,0)+as.numeric(bug.growth$time))
-print(ggplot(bug.growth[bug.growth$date > as.POSIXct(ISOdatetime(2005,1,1,0,0,0)),],aes(x=date,y=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))]
+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")+
-      geom_point()+stat_smooth(method="lm")+
-      ggtitle("Bug growth versus time"))
+      scale_y_continuous(labels = scientific_10)+
+      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}
-<<bugs.filed,fig=TRUE,echo=FALSE,warning=FALSE>>=
-print(ggplot(bug.growth[bug.growth$date > as.POSIXct(ISOdatetime(2013,1,1,0,0,0)),],aes(x=date,y=bugs))+
+<<bugs.filed,fig=TRUE,echo=FALSE,warning=FALSE,fig.width=3,fig.height=3>>=
+print(ggplot(bug.growth[date > as.POSIXct(ISOdatetime(2015,1,1,0,0,0)),],
+             aes(x=date,y=bugs))+
       xlab("Time")+ylab("Bugs filed in Debian")+
-      geom_point()+stat_smooth(method="lm")+
-      ggtitle("Christian Perrier's Plot"))
+      scale_y_continuous(labels = scientific_10)+
+      geom_point()+stat_smooth(method="lm"))
 bugs.filed.per.day <-
   lm(bugs~date,bug.growth)$coeff[2]*3600*24
-temp.lm <- lm(date~bugs,bug.growth[bug.growth$date > as.POSIXct(ISOdatetime(2013,1,1,0,0,0)),])
-bug.760000 <- 
-    as.POSIXct(ISOdatetime(1970,1,1,0,0,0)+as.numeric(predict(temp.lm,data.frame(bugs=760000,date=NA))))
-bug.800000 <- 
-    as.POSIXct(ISOdatetime(1970,1,1,0,0,0)+as.numeric(predict(temp.lm,data.frame(bugs=800000,date=NA))))
+temp.lm <- lm(date~bugs,bug.growth[date > as.POSIXct(ISOdatetime(2015,1,1,0,0,0)),])
+bug.880000 <- 
+    as.POSIXct(ISOdatetime(1970,1,1,0,0,0)+as.numeric(predict(temp.lm,data.frame(bugs=880000,date=NA))))
+bug.900000 <- 
+    as.POSIXct(ISOdatetime(1970,1,1,0,0,0)+as.numeric(predict(temp.lm,data.frame(bugs=900000,date=NA))))
+bug.1000000 <- 
+    as.POSIXct(ISOdatetime(1970,1,1,0,0,0)+as.numeric(predict(temp.lm,data.frame(bugs=1000000,date=NA))))
 @ 
 \end{center}
 \column{0.5\textwidth}
 Roughly \Sexpr{format(bugs.filed.per.day,digits=1)} bugs are filed per
-day. The 760000th bug will be filed at \Sexpr{bug.760000}, and the
-800000th bug will be filed at \Sexpr{bug.800000}.
+day. The 880000th bug will be filed at \Sexpr{bug.880000}, the
+900000th bug will be filed at \Sexpr{bug.900000}, and bug one million will be filled 
+\Sexpr{bug.1000000}.
 \end{columns}
 \end{frame}
 
@@ -208,68 +236,60 @@ day. The 760000th bug will be filed at \Sexpr{bug.760000}, and the
 \subsection{Bug Fixing Rate}
 \begin{frame}
   \begin{center}
-<<bugs.closed,fig=TRUE,echo=FALSE,width=7,height=5,warning=FALSE,error=FALSE>>=
-bug.closed.series <- read.table(file="data/bug_closed_time_series.txt")
+<<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"]>>=
+bug.closed.series <- fread(file="data/bug_closed_time_series.txt")
 colnames(bug.closed.series) <- c("archived.bugs","year.week")
-bug.closed.series$week <-
-    gsub("(\\d+)-(\\d+)","\\2",bug.closed.series$year.week)
-bug.closed.series$year <-
-    gsub("(\\d+)-(\\d+)","\\1",bug.closed.series$year.week)
-bug.closed.series$doy <- 
-    as.numeric(bug.closed.series$week)*7
-bug.closed.series$year.doy <- 
-    paste(sep="-",bug.closed.series$year,bug.closed.series$doy)
-bug.closed.series$date <-
-  as.POSIXct(strptime(bug.closed.series$year.doy,
-                      format="%Y-%j"))
+bug.closed.series[,week:=
+    gsub("(\\d+)-(\\d+)","\\2",year.week)]
+bug.closed.series[,year:=
+    gsub("(\\d+)-(\\d+)","\\1",year.week)]
+bug.closed.series[,doy:= as.numeric(week)*7]
+bug.closed.series[,year.doy:=
+                       paste(sep="-",year,doy)]
+bug.closed.series[,date:=
+                       as.POSIXct(strptime(year.doy,
+                                           format="%Y-%j"))]
 
 # bug.closed.ts <- ts(bug.closed.series[,1],start=1,frequency=7)
 
-print(ggplot(bug.closed.series[bug.closed.series$date > as.POSIXct(ISOdatetime(2008,1,1,0,0,0)),],
+print(ggplot(bug.closed.series[date > as.POSIXct(ISOdatetime(2008,1,1,0,0,0)),],
              aes(x=date,y=archived.bugs/7))+geom_line()+stat_smooth(method="lm")+
       ylab("Bugs archived Per Day")+xlab("Time"))
-bugs.closed.per.day <- 
-    sum(bug.closed.series$archived.bugs)/
-    as.numeric(bug.closed.series$date[nrow(bug.closed.series)]-bug.closed.series$date[1])
+bugs.closed.per.day <-
+    bug.closed.series[,sum(archived.bugs)]/
+    as.numeric(bug.closed.series[nrow(bug.closed.series),date]-
+               bug.closed.series[1,date])
 @ 
   \end{center}
 Roughly \Sexpr{format(bugs.closed.per.day,digits=1)} bugs are closed per day.
 \end{frame}
 
 \subsection{RC Bugs}
-\begin{frame}
+\begin{frame}{RC Bugs in the Past Year}
   \begin{center}
-<<rc.bugs,fig=TRUE,echo=FALSE>>=
+<<rc.bugs,fig=TRUE,echo=FALSE,warning=FALSE,cache.extra=file.info("data/rc_bugs.txt")[,"mtime"]>>=
 rc.bugs <-
-  read.table(file="data/rc_bugs.txt",
-             header=TRUE,fill=TRUE)
-rc.bugs <- data.frame(rc.bugs)
-rc.bugs <- rc.bugs[,c(-5,-7)]
-rc.bugs$date <-
-  as.POSIXct(strptime(rc.bugs$date,
-                      format="%Y%m%d%H%M"))
+    data.table(read.table(file="data/rc_bugs.txt",
+                          header=TRUE,fill=TRUE))
+rc.bugs[,date:=
+             as.POSIXct(strptime(date,
+                                 format="%Y%m%d%H%M"))]
+rc.bugs[,unknown:=NULL]
+rc.bugs[,unknown.1:=NULL]
+for (i in 1:10) {
+    rc.bugs <- rc.bugs[c(0,diff(total)) > -1000,]
+}
 rc.bugs.long <-
-    melt(rc.bugs,id="date")
-print(ggplot(rc.bugs.long[rc.bugs.long$date > 
-                          as.POSIXct(ISOdatetime(2013,08,1,0,0,0)),]
-             ,aes(x=date,y=value,color=variable))+
+    data.table(melt(rc.bugs,id="date"))
+print(ggplot(rc.bugs.long[date > 
+                          as.POSIXct(ISOdatetime(2016,08,1,0,0,0)),]
+            ,aes(x=date,y=value,color=variable))+
       geom_line()+
-      ggtitle("RC Bugs in the past year")+
-      ylab("RC Bugs")+xlab("Time")+
-      theme(legend.position=c(0.9,0.5))+
-      guides(color=guide_legend(title="Measure")))
-
+      ylab("# of Release Critical Bugs")+xlab("Time")+
+      theme(legend.position="top")+
+      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}
@@ -288,17 +308,11 @@ print(ggplot(rc.bugs.long[rc.bugs.long$date >
   \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
@@ -309,63 +323,115 @@ print(ggplot(rc.bugs.long[rc.bugs.long$date >
 \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}
@@ -377,98 +443,27 @@ AND owner IS NOT NULL;
   \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}
@@ -476,20 +471,40 @@ AND owner IS NOT NULL;
 
 \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
+./bin/local-debbugs --mirror
+# start a web daemon
+./bin/local-debbugs --daemon
+# show some of my bugs (use your own search here)
+./bin/local-debbugs --search bugs.debian.org
+# stop the daemon
+./bin/local-debbugs --stop
+# hack and repeat
+./bin/local-debbugs --daemon
+./bin/local-debbugs --show 614351
+\end{minted}
+\end{frame}
+
 \begin{frame}{The Debbugs Team}
   \begin{itemize}
   \item Current team
@@ -510,7 +525,9 @@ AND owner IS NOT NULL;
 \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}