\mode { \usetheme[hideallsubsections]{Hannover} %\useoutertheme[hideallsubsections]{debiansidebar} \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} \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{\includegraphics[width=2cm]{figures/openlogo.pdf}} \author{Don Armstrong} \title{Debbugs} \subtitle{Database Ho!} %\date{August 11th, 2008} \titlegraphic{\includegraphics[height=0.3\textheight,keepaspectratio]{figures/openlogo-crop.pdf}} \logo{\includegraphics[width=2cm,keepaspectratio]{figures/openlogo-crop.pdf}} \subject{BTS} % State of the BTS: new features, changes and tips % % The bug tracking system is where all bugs that affect Debian are % filed. New features, including the affects, summary, and local debbugs % mirror will be presented and demonstrated. Some of the underlying % architectural changes to the codebase in debbugs to make it more % maintainable and deployable are also outlined. Finally, a set of tips % and tricks that can be used to make the BTS easier to use are % presented. % % - New Features % - affects % - summary % - local debbugs mirror for offline work % - New SOAP % - full text search % - filtering bugs % - multi-distribution/arch status % - control changes at submit@ time % - Code Architecture Changes % - Modularization % - Control abstraction % - release to experimental <>= library(lattice) library(xtable) library(ggplot2) library(reshape2) opts_chunk$set(dev="cairo_pdf",out.width="\\textwidth",out.height="0.7\\textheight",out.extra="keepaspectratio") opts_chunk$set(cache=TRUE, autodep=TRUE) options(device = function(file, width = 8, height = 7, ...) { cairo_pdf(tempfile(), width = width, height = height, ...) }) @ \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} } % \begin{frame}{Debbugs} % \tableofcontents[subsectionstyle=hide] % \end{frame} \section{Introduction to Debbugs} \subsection{Introduction} \begin{frame}{Goals of this talk} \begin{columns} \column{0.5\textwidth} \begin{itemize} \item Introduction to Debbugs \item New features \item Tips and Tricks \item Planned features \item Places you can help \end{itemize} \column{0.5\textwidth} \includegraphics[width=\textwidth,keepaspectratio]{images/rc_buggy} \end{columns} \end{frame} \begin{frame}{Goals of the BTS} \begin{columns} \column{0.4\textwidth} \includegraphics[width=\textwidth,keepaspectratio]{images/not_a_bug} \column{0.6\textwidth} \begin{itemize} \item Reporting of \only<1>{Features}\only<2>{Bugs} \item Evolution of \only<1>{Features}\only<2>{Bugs} \item Fixing of \only<1>{Features}\only<2>{Bugs} \item Reducing impact of \only<1>{Features}\only<2>{Bugs} \end{itemize} \end{columns} \end{frame} \section{Bugs in Debian} \subsection{Bug Reporting Rate} \begin{frame}{How many bugs do we have?} \begin{center} <>= bug.growth <- read.table("data/sorted_bug_growth_for_r_every_500.txt",stringsAsFactors=FALSE); 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))+ xlab("Time")+ylab("Bugs filed in Debian")+ geom_point()+stat_smooth(method="lm")+ ggtitle("Bug growth versus time")) @ \end{center} \end{frame} \begin{frame} \begin{center} <>= print(ggplot(bug.growth[bug.growth$date > as.POSIXct(ISOdatetime(2013,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")) bugs.filed.per.day <- lm(bugs~date,bug.growth)$coeff[2]*3600*24 @ \end{center} Roughly \Sexpr{format(bugs.filed.per.day,digits=1)} bugs are filed per day. \end{frame} \subsection{Bug Fixing Rate} \begin{frame} \begin{center} <>= bug.closed.series <- read.table(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.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)),], aes(x=date,y=archived.bugs))+geom_line()+stat_smooth(method="lm")+ ylab("Archived bugs")+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]) @ \end{center} Roughly \Sexpr{format(bugs.closed.per.day,digits=1)} bugs are closed per day. \end{frame} \subsection{RC Bugs} \begin{frame} \begin{center} <>= 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")) 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))+ geom_line()+ ggtitle("RC Bugs in the past year")+ theme(legend.position=c(0.9,0.5))+ guides(color=guide_legend(title="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} \subsection{BTS System Diagram} \begin{frame}{BTS system Diagram} \begin{center} \includegraphics[width=\textwidth,height=\textheight,keepaspectratio]{figures/bug_global_layout} \end{center} \end{frame} \subsection{Debbugs Box Diagram} \begin{frame}{Debbugs Box Diagram} \begin{center} \input{debbugs_layout} \end{center} \end{frame} \section{Database Ho!} \subsection{Overall Database Design} \begin{frame}{Overall Database Design} \begin{center} \input{debbugs_layout_db} \end{center} \end{frame} \subsection{Perl Database Infrastucture} \begin{frame}{Perl Database Infrastructure} \begin{itemize} \item DBIx::Class \item DBIx::Class::Schema::Loader -- SQL schema to DBIx::Class \item DBIx::Class::DeploymentHandler -- Upgrades of Schema \item Debbugs::DB -- Debbugs SQL Module \end{itemize} \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} \begin{frame}[fragile]{SQL Loading} % SQL loading \begin{itemize} \item Load bugs \begin{lstlisting}[language=sh] debbugs-loadsql bugs; debbugs-loadsql bugs archive; \end{lstlisting} \item Load Versioning information \begin{lstlisting}[language=sh] debbugs-loadsql versions; debbugs-loadsql debinfo; \end{lstlisting} \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 ------- 521 \end{lstlisting} \end{visibleenv} \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 Deployment \end{itemize} \end{frame} \section{New(ish) Features} \subsection{New Changes} \begin{frame}{New Changes} \begin{columns} \column{0.5\textwidth} \begin{itemize} \item mailto links (demo) \item forcemerge does the right thing \item control at submit time \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 \item Eventually replace functionality of \url{bts.turmzimmer.net} \end{itemize} \end{itemize} \end{frame} \begin{frame}{More planned features} \begin{columns} \column{0.5\textwidth} \begin{itemize} \item Merging of merged bug reports \item Threading in report \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} \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} \section{Places you can help} \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 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} \end{frame} \begin{frame}{Getting started on these tasks} \begin{itemize} \item Upstream branches: \url{http://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 Checked out branches are also available at \url{http://bugs.debian.org/debbugs-source/master} and \url{http://bugs.debian.org/debbugs-source/debian} \end{itemize} \item My branches: \url{http://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}{The Debbugs Team} \begin{itemize} \item Current team \begin{itemize} \item Don Armstrong \item Blars Blarson \item Colin Watson \end{itemize} \item Emeritus Developers \begin{itemize} \item Steiner Gunderson \item Adam Heath \item Josip Rodin \item Anthony Towns \end{itemize} \item You! \end{itemize} \end{frame} \begin{frame}{Where I'm Headed Next} \includegraphics[width=0.8\textwidth,height=0.8\textheight,keepaspectratio]{images/don_at_burning_man.jpg} \end{frame} \end{document}