From 0115b8d880aac568b9b3d53e3a429e709017a03e Mon Sep 17 00:00:00 2001 From: Paulo Meirelles Date: Mon, 3 Jul 2017 21:28:47 -0300 Subject: [PATCH] Adding CBSoft industry track proposal --- cbsoft2017/.gitignore | 10 ++++++++++ cbsoft2017/Makefile | 15 +++++++++++++++ cbsoft2017/caption2.sty | 406 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ cbsoft2017/content/01-introduction.tex | 59 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ cbsoft2017/content/04-architecture.tex | 69 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ cbsoft2017/content/07-process.tex | 175 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ cbsoft2017/content/09-lessons.tex | 116 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ cbsoft2017/content/10-finals.tex | 37 +++++++++++++++++++++++++++++++++++++ cbsoft2017/sbc-template.sty | 164 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ cbsoft2017/sbc.bst | 1103 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ cbsoft2017/spb.bib | 48 ++++++++++++++++++++++++++++++++++++++++++++++++ cbsoft2017/spb.tex | 33 +++++++++++++++++++++++++++++++++ 12 files changed, 2235 insertions(+), 0 deletions(-) create mode 100644 cbsoft2017/.gitignore create mode 100755 cbsoft2017/Makefile create mode 100644 cbsoft2017/caption2.sty create mode 100644 cbsoft2017/content/01-introduction.tex create mode 100644 cbsoft2017/content/04-architecture.tex create mode 100644 cbsoft2017/content/07-process.tex create mode 100644 cbsoft2017/content/09-lessons.tex create mode 100644 cbsoft2017/content/10-finals.tex create mode 100644 cbsoft2017/sbc-template.sty create mode 100644 cbsoft2017/sbc.bst create mode 100644 cbsoft2017/spb.bib create mode 100644 cbsoft2017/spb.tex diff --git a/cbsoft2017/.gitignore b/cbsoft2017/.gitignore new file mode 100644 index 0000000..346254f --- /dev/null +++ b/cbsoft2017/.gitignore @@ -0,0 +1,10 @@ +.DS_Store +*.sw* +guide.tex +*.bak +*.pdf +*.aux +*.log +*.bbl +*.blg +*.out diff --git a/cbsoft2017/Makefile b/cbsoft2017/Makefile new file mode 100755 index 0000000..0db455c --- /dev/null +++ b/cbsoft2017/Makefile @@ -0,0 +1,15 @@ +TARGET=spb + +all: $(TARGET).tex + pdflatex $(TARGET).tex + bibtex $(TARGET) + pdflatex $(TARGET).tex + pdflatex $(TARGET).tex + evince $(TARGET).pdf & + +edit: + gedit Makefile *.bib *.tex & + +clean: + rm -f $(TARGET).pdf *.out *.aux *.log *.blg *.bbl *.dvi *.ps *.toc *.lot *.lof *.idx *~ + diff --git a/cbsoft2017/caption2.sty b/cbsoft2017/caption2.sty new file mode 100644 index 0000000..3b7c2ab --- /dev/null +++ b/cbsoft2017/caption2.sty @@ -0,0 +1,406 @@ +%% +%% This is file `caption2.sty', +%% generated with the docstrip utility. +%% +%% The original source files were: +%% +%% caption2.dtx (with options: `package') +%% +%% Copyright (C) 1994-2002 Axel Sommerfeldt (caption@sommerfeldt.net) +%% +%% -------------------------------------------------------------------------- +%% +%% It may be distributed and/or modified under the +%% conditions of the LaTeX Project Public License, either version 1.2 +%% of this license or (at your option) any later version. +%% The latest version of this license is in +%% http://www.latex-project.org/lppl.txt +%% and version 1.2 or later is part of all distributions of LaTeX +%% version 1999/12/01 or later. +%% +\NeedsTeXFormat{LaTeX2e}[1994/12/01] +\ProvidesPackage{caption2} + [2002/08/03 v2.1 Customising captions (AS)] +\newcommand*\captionfont{} +\newcommand*\captionlabelfont{} +\newcommand*\captionlabeldelim{} +\newcommand*\captionlabelsep{} +\newcommand*\captionsize{} +\newdimen\captionmargin +\newdimen\captionwidth +\newif\ifcaptionwidth +\newdimen\captionindent +\newif\ifcaptionlabel\captionlabeltrue +\newif\ifonelinecaptions +\newif\ifignoreLTcapwidth +\newcommand*\setcaptionmargin{% + \captionwidthfalse + \setlength\captionmargin} +\newcommand*\setcaptionwidth{% + \captionwidthtrue + \setlength\captionwidth} +\newcommand*\normalcaptionparams{% + \let\captionsize\@empty + \renewcommand*\captionfont{\captionsize}% + \let\captionlabelfont\@empty% + \renewcommand*\captionlabeldelim{:}% + \renewcommand*\captionlabelsep{\space}% + \setcaptionmargin\z@\setlength\captionindent\z@ + \onelinecaptionstrue} +\newcommand*\caption@eh{% + If you do not understand this error, please take a closer look\MessageBreak + at the documentation of the `caption2' package.\MessageBreak + \@ehc} +\newcommand*\defcaptionstyle[1]{% + \@namedef{caption@@#1}} +\newcommand*\newcaptionstyle[1]{% + \expandafter\ifx\csname caption@@#1\endcsname\relax + \expandafter\defcaptionstyle + \else + \PackageError{caption2}{Caption style `#1' already defined}{\caption@eh}% + \expandafter\@gobbletwo + \fi + {#1}} +\newcommand*\renewcaptionstyle[1]{% + \expandafter\ifx\csname caption@@#1\endcsname\relax + \PackageError{caption2}{Caption style `#1' undefined}{\caption@eh}% + \expandafter\@gobbletwo + \else + \expandafter\defcaptionstyle + \fi + {#1}} +\newcommand*\dummycaptionstyle[2]{% + \defcaptionstyle{#1}{% + \expandafter\ifx\csname caption@@\caption@style\expandafter\endcsname% + \csname caption@@#1\endcsname + \PackageError{caption2}{You can't use the caption style `#1' directy}{% + The caption style `#1' is only a dummy and does not really exists.% + \MessageBreak You have to redefine it (with \protect\renewcaptionstyle) + before you can select\MessageBreak it with \protect\captionstyle. + \space\caption@eh}% + \else + #2\usecaptionstyle{\caption@style}% + \fi}} +\newcaptionstyle{normal}{\caption@makecaption{normal}} +\newcaptionstyle{center}{\caption@makecaption{center}} +\newcaptionstyle{centerlast}{\caption@makecaption{centerlast}} +\newcaptionstyle{flushleft}{\caption@makecaption{flushleft}} +\newcaptionstyle{flushright}{\caption@makecaption{flushright}} +\newcaptionstyle{hang}{\caption@makecaption{hang}} +\newcaptionstyle{hang+center}{\caption@makecaption{hang@center}} +\newcaptionstyle{hang+centerlast}{\caption@makecaption{hang@centerlast}} +\newcaptionstyle{hang+flushleft}{\caption@makecaption{hang@flushleft}} +\newcaptionstyle{indent}{\caption@makecaption{indent}} +\newcommand*\captionstyle[1]{% + \expandafter\ifx\csname caption@@#1\endcsname\relax + \PackageError{caption2}{Undefined caption style `#1'}{\caption@eh}% + \else + \def\caption@style{#1}% + \fi} +\DeclareOption{normal}{\captionstyle{normal}} +\DeclareOption{center}{\captionstyle{center}} +\DeclareOption{centerlast}{\captionstyle{centerlast}} +\DeclareOption{flushleft}{\captionstyle{flushleft}} +\DeclareOption{flushright}{\captionstyle{flushright}} +\DeclareOption{anne}{\ExecuteOptions{centerlast}} +\DeclareOption{hang}{\captionstyle{hang}} +\DeclareOption{hang+center}{\captionstyle{hang+center}} +\DeclareOption{hang+centerlast}{\captionstyle{hang+centerlast}} +\DeclareOption{hang+flushleft}{\captionstyle{hang+flushleft}} +\DeclareOption{isu}{\ExecuteOptions{hang}} +\DeclareOption{indent}{\captionstyle{indent}} +\DeclareOption{scriptsize}{\g@addto@macro\captionsize\scriptsize} +\DeclareOption{footnotesize}{\g@addto@macro\captionsize\footnotesize} +\DeclareOption{small}{\g@addto@macro\captionsize\small} +\DeclareOption{normalsize}{\g@addto@macro\captionsize\normalsize} +\DeclareOption{large}{\g@addto@macro\captionsize\large} +\DeclareOption{Large}{\g@addto@macro\captionsize\Large} +\DeclareOption{up}{\g@addto@macro\captionlabelfont\upshape} +\DeclareOption{it}{\g@addto@macro\captionlabelfont\itshape} +\DeclareOption{sl}{\g@addto@macro\captionlabelfont\slshape} +\DeclareOption{sc}{\g@addto@macro\captionlabelfont\scshape} +\DeclareOption{md}{\g@addto@macro\captionlabelfont\mdseries} +\DeclareOption{bf}{\g@addto@macro\captionlabelfont\bfseries} +\DeclareOption{rm}{\g@addto@macro\captionlabelfont\rmfamily} +\DeclareOption{sf}{\g@addto@macro\captionlabelfont\sffamily} +\DeclareOption{tt}{\g@addto@macro\captionlabelfont\ttfamily} +\DeclareOption{oneline}{\onelinecaptionstrue} +\DeclareOption{nooneline}{\onelinecaptionsfalse} +\newcommand*\caption@package[1]{\@namedef{caption@pkt@#1}} +\DeclareOption{float}{\caption@twozerofalse\caption@package{float}{1}} +\DeclareOption{longtable}{\caption@twozerofalse\caption@package{longtable}{1}} +\DeclareOption{subfigure}{\caption@twozerofalse\caption@package{subfigure}{1}} +\DeclareOption{none}{\caption@twozerofalse + \caption@package{float}{0}\caption@package{longtable}{0}% + \caption@package{subfigure}{0}} +\DeclareOption{all}{\ExecuteOptions{float,longtable,subfigure}} +\DeclareOption{ruled}{} +\DeclareOption{ignoreLTcapwidth}{\ignoreLTcapwidthtrue} +\DeclareOption{debug}{\caption@debugtrue} +\newif\ifcaption@debug +\newif\ifcaption@twozero +\normalcaptionparams +\ExecuteOptions{none,normal} +\caption@twozerotrue +\ProcessOptions* +\ifcaption@twozero + \PackageInfo{caption2}{Running in caption2 v2.0 compatibility mode} +\fi +\def\captionof{\@ifstar{\caption@of{\caption*}}{\caption@of\caption}} +\newcommand*\caption@of[2]{\def\@captype{#2}#1} +\@ifundefined{abovecaptionskip}{% + \newlength\abovecaptionskip\setlength\abovecaptionskip{10\p@}}{} +\@ifundefined{belowcaptionskip}{% + \newlength\belowcaptionskip\setlength\belowcaptionskip{0\p@}}{} +\newdimen\captionlinewidth +\renewcommand\@makecaption[2]{% + \vskip\abovecaptionskip + \captionlinewidth\hsize + \def\captionlabel{#1}% + \def\captiontext{#2}% + \usecaptionstyle{\caption@style}% + \vskip\belowcaptionskip} +\newcommand*\usecaptionstyle[1]{% + \ifx\captiontext\relax + \PackageError{caption2}{You can't use \protect#1 + in normal text}{The usage of \protect#1 is only + allowed inside code declared with\MessageBreak \protect\defcaptionstyle, + \protect\newcaptionstyle \space or \protect\renewcaptionstyle. + \space\caption@eh} + \else + \@ifundefined{caption@@#1}% + {\PackageError{caption2}{Caption style `#1' undefined}{\caption@eh}}% + {\@nameuse{caption@@#1}} + \fi} +\newcommand*\caption@makecaption[1]{% + \ifcaptionlabel + \def\caption@label{{\captionlabelfont\captionlabel\captionlabeldelim}\captionlabelsep}% + \else + \let\caption@label\@empty + \fi + \usecaptionmargin\captionfont + \onelinecaption{\caption@label\captiontext}% + {\@nameuse{caption@@@#1}}} +\newcommand*\caption@@@normal{% + \caption@label\captiontext\par} +\newcommand*\caption@@@center{% + \centering\caption@label\captiontext\par}% +\newcommand*\caption@centerlast{% + \advance\leftskip by 0pt plus 1fil% + \advance\rightskip by 0pt plus -1fil% + \parfillskip0pt plus 2fil\relax} +\newcommand*\caption@@@centerlast{% + \caption@centerlast\caption@label\captiontext\par} +\newcommand*\caption@@@flushleft{% + \raggedright\caption@label\captiontext\par}% +\newcommand*\caption@@@flushright{% + \raggedleft\caption@label\captiontext\par}% +\newcommand*\caption@@@hang{% + \sbox\@tempboxa{\caption@label}% + \hangindent\wd\@tempboxa\noindent + \usebox\@tempboxa\caption@hangplus\captiontext\par} +\newcommand*\caption@hangplus{} +\newcommand*\caption@@@hang@center{% + \let\caption@hangplus\centering\caption@@@hang} +\newcommand*\caption@@@hang@centerlast{% + \let\caption@hangplus\caption@centerlast\caption@@@hang} +\newcommand*\caption@@@hang@flushleft{% + \let\caption@hangplus\raggedright\caption@@@hang} +\newcommand*\caption@@@indent{% + \hangindent\captionindent\noindent + \caption@label\captiontext\par} +\newcommand\onelinecaption[1]{% + \let\next\@firstofone + \ifonelinecaptions + \sbox\@tempboxa{#1}% + \ifdim\wd\@tempboxa >\captionlinewidth + \else + \def\next{{\centering\usebox{\@tempboxa}\par}\@gobble}% + \fi + \fi\next} +\newcommand*\usecaptionmargin{% + \ifcaptionwidth + \leftskip\captionlinewidth + \advance\leftskip by -\captionwidth + \divide\leftskip by 2 + \rightskip\leftskip + \captionlinewidth\captionwidth + \else + \leftskip\captionmargin + \rightskip\captionmargin + \advance\captionlinewidth by -2\captionmargin + \fi} +\renewcommand*\caption@package[3]{% + \if1\@nameuse{caption@pkt@#1}% + \@ifundefined{#2}% + {\let\next\AtBeginDocument}% + {\let\next\@firstofone}% + \else + \ifcaption@twozero + \@ifundefined{#2}{#3\let\next\@gobble}{% + \PackageWarning{caption2}{% + The `#1' package will be supported without explicit option % + (v2.0 compatibility issue)}% + \let\next\@firstofone}% + \else + #3\let\next\@gobble + \fi + \fi + \expandafter\let\csname caption@pkt@#1\endcsname\undefined + \ifcaption@debug + \ifx\next\@gobble\PackageInfo{caption2}{#1 => gobble}% + \else\ifx\next\@firstofone\PackageInfo{caption2}{#1 => firstofone}% + \else\ifx\next\AtBeginDocument\PackageInfo{caption2}{#1 => AtBeginDocument}% + \else\PackageInfo{caption2}{#1 => ???}\fi\fi\fi + \fi + \next} +\caption@package{float}{floatc@plain}{}{% + \ifx\floatc@plain\relax + \PackageWarning{caption2}{% + Option `float' was set but there is no float package loaded} + \else + \PackageInfo{caption2}{float package v1.2 (or newer) detected} + \newcommand\caption@floatc[3]{% + \ifx\captionlabelfont\@empty + \let\captionlabelfont\@fs@cfont + \fi + \captionlinewidth\hsize + \def\captionlabel{#2}% + \def\captiontext{#3}% + \usecaptionstyle{#1}} + \renewcommand*\floatc@plain{\caption@floatc{\caption@style}} + \@ifpackagewith{caption2}{ruled}{% + \dummycaptionstyle{ruled}{\onelinecaptionsfalse\setcaptionmargin{\z@}}% + }{% + \newcaptionstyle{ruled}{% + \ifcaptionlabel + {\@fs@cfont\captionlabel}\space% + \fi\captiontext\par}% + } + \renewcommand*\floatc@ruled{\caption@floatc{ruled}} + \renewcommand*\caption@of[2]{\def\@captype{#2}% + \@ifundefined{fst@#2}{}{% + \@nameuse{fst@#2}% + \@ifundefined{@float@setevery}{}{\@float@setevery{#2}}% + \let\caption@fs@capt\@fs@capt + \let\@fs@capt\caption@of@float} + #1} + \newcommand\caption@of@float[2]{\egroup + \vskip\abovecaptionskip + \normalsize\caption@fs@capt{#1}{#2}% + \vskip\belowcaptionskip + \bgroup}% + \fi} +\caption@package{longtable}{LT@makecaption}{}{% + \ifx\LT@makecaption\relax + \PackageWarning{caption2}{% + Option `longtable' was set but there is no longtable package loaded} + \else + \PackageInfo{caption2}{longtable package v3.15 (or newer) detected} + \dummycaptionstyle{longtable}{} + \renewcommand\LT@makecaption[3]{% + \LT@mcol\LT@cols c{\hbox to\z@{\hss\parbox[t]\hsize{% + \ifignoreLTcapwidth + \else + \setcaptionwidth\LTcapwidth + \fi + \captionlinewidth\hsize + \captionlabelfalse#1\captionlabeltrue + \def\captionlabel{#2}% + \def\captiontext{#3}% + \usecaptionstyle{longtable}% + \endgraf\vskip\baselineskip}% + \hss}}} + \fi} +\newcommand*\setsubcapstyle{% + \@ifundefined{subcapraggedrightfalse}{% + \newif\ifsubcapraggedright}{}% + \ifsubcaphang + \ifsubcapcenter + \subcapstyle{hang+center}% + \else\ifsubcapcenterlast + \subcapstyle{hang+centerlast}% + \else\ifsubcapraggedright + \subcapstyle{hang+flushleft}% + \else + \subcapstyle{hang}% + \fi\fi\fi + \else\ifsubcapcenter + \subcapstyle{center}% + \else\ifsubcapcenterlast + \subcapstyle{centerlast}% + \else\ifsubcapraggedright + \subcapstyle{flushleft}% + \else + \subcapstyle{normal}% + \fi\fi\fi\fi} +\newcommand\caption@makesubcaption[2]{% + \renewcommand*\captionfont{\subcapsize\subcapfont}% + \renewcommand*\captionlabelfont{\normalfont\subcapsize\subcaplabelfont}% + \let\captionlabeldelim\subcaplabeldelim + \let\captionlabelsep\subcaplabelsep + \ifsubfigcapwidth\captionwidthtrue\else\captionwidthfalse\fi + \setlength\captionmargin\subfigcapmargin + \setlength\captionwidth\subfigcapwidth + \captionindent\subcapindent + \ifsubcapnooneline\onelinecaptionsfalse\else\onelinecaptionstrue\fi + \hbox to\@tempdima{% + \caption@subfig@hss\parbox[t]{\@tempdima}{% + \captionlinewidth\@tempdima + \captionlabeltrue + \def\captionlabel{#1}% + \def\captiontext{\ignorespaces #2}% + \usecaptionstyle{\caption@substyle}}% + \caption@subfig@hss}} +\caption@package{subfigure}{@makesubfigurecaption}{% + \let\setsubcapstyle\undefined + \let\caption@makesubcaption\undefined}{% + \ifx\@makesubfigurecaption\relax + \PackageWarning{caption2}{% + Option `subfigure' was set but there is no subfigure package loaded} + \let\setsubcapstyle\undefined + \let\caption@makesubcaption\undefined + \else + \ifx\subcapfont\undefined + \PackageInfo{caption2}{subfigure package v2.0 detected} + \let\subcapfont\@empty + \newcommand*\subfigcapwidth{\z@} + \newcommand*\setsubcapmargin{% + \subfigcapwidthfalse + \renewcommand*\subfigcapmargin} + \newcommand*\setsubcapwidth{% + \subfigcapwidthtrue + \renewcommand*\subfigcapwidth} + \newcommand*\subcaplabelsep{\space} + \let\caption@subfig@hss\hfil + \else + \PackageInfo{caption2}{subfigure package v2.1 (or newer) detected} + \newdimen\subfigcapwidth + \newcommand*\setsubcapmargin{% + \subfigcapwidthfalse + \setlength\subfigcapmargin} + \newcommand*\setsubcapwidth{% + \subfigcapwidthtrue + \setlength\subfigcapwidth} + \newcommand*\subcaplabelsep{\hskip\subfiglabelskip} + \let\caption@subfig@hss\hss + \fi + \newif\ifsubfigcapwidth + \newdimen\subcapindent + \newcommand*\subcaplabeldelim{} + \newcommand*\subcapstyle[1]{% + \expandafter\ifx\csname caption@@#1\endcsname\relax + \PackageError{caption2}{Undefined caption style `#1'}{\caption@eh}% + \else + \def\caption@substyle{#1}% + \fi} + \setsubcapstyle + \renewcommand*\@thesubfigure{\thesubfigure} + \renewcommand*\@thesubtable{\thesubtable} + \let\@makesubfigurecaption\caption@makesubcaption + \let\@makesubtablecaption\caption@makesubcaption + \fi} +\let\caption@package\undefined +\endinput +%% +%% End of file `caption2.sty'. diff --git a/cbsoft2017/content/01-introduction.tex b/cbsoft2017/content/01-introduction.tex new file mode 100644 index 0000000..9de141b --- /dev/null +++ b/cbsoft2017/content/01-introduction.tex @@ -0,0 +1,59 @@ +\section*{Introdução} +\label{sec:intro} + +O Software Público Brasileiro (SPB) é um programa do Governo Federal Brasileiro +para promover o compartilhamento e a colaboração em soluções de software +livre\footnote{Neste texto, usamos o termo software livre como referente à Free +and Open Source Software (FOSS).} para a administração pública. Um Software +Público Brasileiro é considerado um bem público e o governo federal assume +algumas responsabilidades relacionadas ao seu uso, mas tem os mesmos princípios +de desenvolvimento de software livre, tal qual a tendência à descentralização +na tomada de decisões, o compartilhamento de informações e do desenvolvimento +(código), e a interação contínua com seus usuários. Em 2007, o governo federal +lançou o portal SPB com o objetivo de compartilhar projetos de software livre +desenvolvidos pelo governo brasileiro. Adicionalmente, a Instrução Normativa +(IN 04/2012) determina que os agentes públicos devem priorizar as soluções +disponíveis no Portal SPB. Em suma, a aquisição de uma solução proprietária +deve ser explicitamente justificada ao demonstrar que não há alternativa +adequada no Portal SPB. + +Entretanto, desde 2009, o Portal SPB teve vários problemas técnicas. O código +original da plataforma não estava mais sendo desenvolvido, e havia uma grande +quantidade de dívidas técnicas para superar. Depois de alguns eventos e +encontros para coletar os requisitos via os agentes do governo federal e da +sociedade, foi desenvolvida, entre janeiro de 2014 e junho de 2016, uma nova +plataforma para o Portal SPB, pela Universidade de Brasília (UnB) e a +Universidade de São Paulo (USP) em parceria com o Ministério de Orçamento, +Planejamento e Gestão (MP). Este foi projetado como uma plataforma integrada +para desenvolvimento de software colaborativo, e inclui funcionalidades para +redes sociais, listas de discussão, sistema de controle de versão e +monitoramento de qualidade de código-fonte. Para coordenar e desenvolver esse +projeto durante 30 meses, a UnB recebeu do Governo Federal Brasileiro um total +de 2.619.965,00 reais. + +O projeto foi desenvolvido por uma equipe de 3 professores, 2 estudantes de +mestrado e cerca de 50 alunos de graduação (não todos ao mesmo tempo), +juntamente com 2 designers profissionais e 6 desenvolvedores sêniors da +comunidade software livre. Os professores e todos os estudantes de graduação +eram da UnB e os mestrandos eram da USP. Quanto aos designers e desenvolvedores +seniores, 7 dos 8 viviam fora de Brasília. Em outras palavras, nós tínhamos uma +equipe trabalhando em um ambiente virtual colaborativo e distribuído. + +Todo o desenvolvimento foi feito de forma aberta, e as mudanças que +precisávamos nas ferramentas foram devolvidas às suas respectivas comunidades. +Nosso processo foi baseado em práticas ágeis e nos mecanismos empíricos das +comunidades de software livre. Definimos ciclos de desenvolvimento e lançamos 5 +versões do novo SPB Portal. A primeira versão (beta) foi disponibilizada em +setembro de 2014, apenas 9 meses desde o início do projeto. O antigo portal foi +desligado em setembro de 2015. Por fim, a última versão foi entregue em junho +de 2016. + +Neste relato temos como agenda apresentarmos uma visão geral dessa nova geração +do Portal SPB, bem como, compartilharmos nossa metodologia e processo de +desenvolvimento desse projeto ao trabalharmos com o governo federal brasileiro +para cumprir suas exigências, ao mesmo tempo ser o mais fiel possível às +comunidades de software livre envolvidas. Além disso, discutiremos várias +lições aprendidas para fornecer um ambiente virtual colaborativo e distribuído, +envolvendo uma grande equipe de estudantes de graduação e desenvolvedores +sêniors remotos. + diff --git a/cbsoft2017/content/04-architecture.tex b/cbsoft2017/content/04-architecture.tex new file mode 100644 index 0000000..5723985 --- /dev/null +++ b/cbsoft2017/content/04-architecture.tex @@ -0,0 +1,69 @@ +\section{Visão geral do novo portal SPB} +\label{sec:architecture} + +Com base na extensa lista de requisitos funcionais definidos pelo Governo +Federal do Brasil, selecionamos alguns sistemas livres compor a solução +proposta para o novo SPB. Avaliamos os sistemas que juntos poderiam fornecer o +maior sub-conjunto possível dos requisitos. Nós também estávamos convencidos de +que seria impossível fornecer todas as funcionalidade com uma única ferramenta. + +Do ponto de vista da arquitetura, dois requisitos eram importantes para a nova +plataforma: + +\begin{enumerate} +\item \textit{Integrar sistemas livres existentes}, com diferenças mínimas de suas versões originais; +\item \textit{Fornecer uma interface de usuário unificada} entre os diferentes sistemas, bem como a autenticação centralizada. +\end{enumerate} + +A adoção de sistemas livres existentes e a minimização de mudanças feitas +localmente tiveram como objetivo ser capazes de atualizar para versões mais +recentes do software original, nos beneficiando pelas melhorias e manutenção feitas +pelas comunidades de projetos existentes. Proporcionar uma interface de usuário +consistente em cima dessas diferentes ferramentas era necessária para fazer a +transição entre os diferentes sistemas sem a percepção do ponto de vista dos +usuários, ou seja, sem confundí-lo através de interfaces completamente +diferentes ao interagir com o portal. + +Para o primeiro requisito, identificamos quatro sistemas principais que exigiam +equipes especializadas para o trabalho no processo de integração. As equipes +aprenderam a desenvolver para os sistemas designados e contribuíram para as +comunidades originais, de modo que a versão que usamos não era +significativamente diferente do original. + +Ao final do projeto, o portal SPB foi composto por mais de dez sistemas, como +Colab, Noosfero, Mezuro, Gitlab, Mailman, Postfix e Munin. A seguir +apresentamos os mais relevantes, bem como como eles foram integrados na +plataforma. + +\begin{itemize} + +\item \textbf{Colab\footnote{\url{https://github.com/colab}}:} é uma plataforma +de integração de sistemas para aplicações web. Um de seus objetivos é permitir +que diferentes aplicações sejam combinadas de tal forma que um usuário não note +a mudança entre as aplicações. Para isso, o Colab oferece autenticação +centralizada, consistência visual, retransmissão de eventos entre aplicações e +mecanismo de busca integrado. + +\item \textbf{Noosfero\footnote{\url{http://noosfero.org}}:} é um software para +redes sociais e de colaboração. Além dos recursos clássicos de redes sociais, +ele também fornece recursos de publicação de conteúdo, como blogs e CMS +(\textit{Content Management System}) de propósito geral. A maioria das +interações do usuário com o novo SPB são através do Noosfero: registro do usuário, +páginas do projeto e de documentação e formulários de contato. + +\item \textbf{Gitlab\footnote{\url{http://gitlab.com}}:} é um gerenciador web +de repositórios Git com páginas wiki e recursos de \textit{issue tracker}. O +Gitlab é uma plataforma livre e se concentra em oferecer uma solução para +desenvolvimento colaborativo em torno do repositório. + +\item \textbf{Mezuro\footnote{\url{http://mezuro.org/}}:} é uma plataforma para +coletar métricas de código-fonte com o objetivo de monitorar a qualidade +interna de projetos de software livre escrito em C, C ++, Java, Python, Ruby ou +PHP. + +\end{itemize} + +Do ponto de vista prático, a plataforma SPB foi implantada em 7 máquinas +virtuais com diferentes +funções\footnote{\url{https://softwarepublico.gov.br/doc/arquitetura.html}}. + diff --git a/cbsoft2017/content/07-process.tex b/cbsoft2017/content/07-process.tex new file mode 100644 index 0000000..0496aa9 --- /dev/null +++ b/cbsoft2017/content/07-process.tex @@ -0,0 +1,175 @@ +\section{Processo e organização do desenvolvimento} +\label{sec:process} + +A nossa equipe de desenvolvimento era composta por profissionais com diferentes +níveis e habilidades, sendo a maioria deles estudantes de graduação de +engenharia de software (a partir do 4º semestre de curso). Uma vez que os +alunos não podiam dedicar muitas horas por semana ao projeto, eles sempre +tiveram a flexibilidade para negociar seus horários de trabalho durante o +semestre, a fim de não prejudicar a sua formação. Sua rotina de trabalho diária +no projeto incluiu programação e tarefas de DevOps (contabilizando 16 +horas-semanais). + +O desenvolvimento do projeto SPB exigiu uma vasta experiência, que os alunos de +graduação geralmente ainda não têm. Por essa razão, alguns desenvolvedores +sênior se juntaram ao projeto para ajudar com as questões mais difíceis e +transferir conhecimento aos alunos. Sua principal tarefa era fornecer soluções +para problemas complexos. Como esses profissionais são muito hábeis e o projeto +não poderia financiar um trabalho de tempo integral, eles trabalharam +parcialmente no projeto (20 horas-semanais). Além disso, eles viviam em estados +diferentes espalhados pelo Brasil, ou até outros países, o que levou muita da +comunicação a ser on-line. + +Em resumo, nosso processo de trabalho foi baseado em práticas de +desenvolvimento de software livre e colaborativo. O processo de +desenvolvimento foi definido com base na adaptação de diferentes práticas ágeis e de software livre, destacando o alto grau de automação +resultante das práticas de DevOps. Assim, o processo de trabalho foi executado +de forma cadenciada e contínua. + +Finalmente, o último grupo de participantes desse projeto foi composto por +funcionários do Ministério +do Planejamento, Desenvolvimento e Gestão (MP). Todas as decisões do projeto, +validações e definições de escopo foram feitas com eles. Dessa forma, +desenvolvemos produtos de software de forma incremental, com lançamentos +alinhados aos objetivos estratégicos do negócio. Como se pode ver, o projeto +tinha muitos tipos diferentes de \textit{stakeholders} que tinham de ser +organizados e sincronizados. + +\subsection{Organização da equipe} + +Aproximadamente 70\% das equipes de desenvolvimento foram compostas por +estudantes de engenharia de software da UnB e que trabalharam fisicamente no mesmo +laboratório. Cada aluno tinha seu próprio horário baseado em suas aulas, o que +complicava a implementação da programação em pares. Os desenvolvedores sênior +tentavam sincronizar sua agenda com os alunos em sua sub-equipe. Para lidar com +esse ambiente, tivemos algumas regras básicas que guiaram a organização do +projeto: + +\begin{enumerate} +\item As aulas têm alta prioridade para estudantes de graduação; +\item Trabalhe em pares sempre que possível (local com os demais estudantes ou + remotamente com um sênior). +\item Deve haver uma manhã ou uma tarde por semana quando \emph{todos} deverem + estar juntos fisicamente no laboratório (exceto, é claro, os membros da + equipe remota, mas que estarão on-line). +\item A cada 2 ou 3 meses, os desenvolvedores sêniors (residentes no Brasil) + voaria e trabalharia ao lado dos alunos por uma semana. +\end{enumerate} + +Com as regras acima, dividimos todo o projeto em quatro equipes diferentes: +Colab, Noosfero, Design e DevOps. Cada equipe tinha um líder (\textit{coach}) +responsável por reduzir o problema de comunicação com as outras equipes e +ajudar os membros a se organizar da melhor maneira para todos (sempre +respeitando seu tempo de trabalho). O \textit{coach} sempre foi um dos alunos +que trabalhava como desenvolvedor na equipe com o dever extra de registar as +tarefas atuais desenvolvidas na iteração (\textit{sprint}) e com a +responsabilidade de conversar com outras equipes. Uma coisa importante a +observar é a mutabilidade da equipe e do \textit{coach}, pois durante o projeto +muitos alunos mudaram de equipes para tentar ter diferentes experiências em +diversas áreas. + +Uma característica das equipes foi a presença de (pelo menos) um sênior por +equipe. Isso era essencial, porque as decisões difíceis e os problemas +complexos, geralmente, foram resolvidos ao consultá-los. Essa dinâmica +incentivamos aos demais alunos a terem o mesmo compartamento do \textit{coach} +mesmo sem serem. Por fim, os desenvolvedores sêniors trabalharam diretamente +com os alunos, e isso foi importante para dar ao graduando a oportunidade de +interagir com profissionais experientes em sua área e manter o conhecimento +fluindo no projeto. + +Por fim, tivemos ainda dois últimos elementos da organização da equipe que +foram essenciais para a harmonia do projeto: o \textit{meta-coach} e +professores. O primeiro era um engenheiro de software recentemente graduado +(nossos ex-alunos) e que queria continuar trabalhando no projeto; estes últimos +eram professores que orquestraram todas as interações entre todos os membros do +projeto, inclusive do governo federal. O \textit{meta-coach} normalmente +trabalhava em uma equipe específica e tinha a tarefa extra de conhecer o estado +atual de todas as equipes. Os professores e \textit{meta-coach} trabalharam +juntos para reduzir o problema de comunicação entre todas as equipes (o que +tornava-se mais complexo conforme a evolução do volume de trabalho). Por +último, todas as tarefas burocráticas, como a elaboração de relatórios sobre o +progresso do projeto para o Ministério, foi tratada pelos professores, mas com +o envolvimento de toda a equipe. + +\subsection{Comunicação e gestão das tarefas} + +Nossa equipe tinha muitas pessoas trabalhando em conjunto, e a maioria dos +sêniors trabalhavam remotamente. Além disso, tentamos manter nosso trabalho +completamente transparente para o governo brasileiro e os cidadãos interessados +em seguir o projeto. Para lidar com esses casos, usamos um conjunto de +ferramentas de comunicação e outras para gerenciar o projeto. + +Quando um aluno tinha que trabalhar em par com um sênior, normalmente, eles +usavam o hangout do Google para a comunicação e eles compartilhavam uma sessão +de terminal GNU/Linux com o tmate, o que lhes permitia compartilhar o mesmo +editor, com ambos digitando e vendo a tela. Para perguntas e discussão rápida, +usamos o IRC. Para a notificação geral, usamos as listas de discussão. + +Para a gestão do projeto utilizávamos o próprio portal SPB; Primeiro para +validá-lo por nós mesmos, e também porque ele tem todas as ferramentas +necessárias para o nosso projeto. Basicamente, criamos uma página Wiki, no +Gitlab integrado ao SPB, com um mapeamento entre as visões estratégica, tática +e operacional. Do ponto de vista prático, um ``milestone'' no GitLab era uma +``História de Usuário" (funcionalidade) e um ou mais ``issues'' no GitLab era +as tarefas para o desenvolvimento da funcionalidade em questão. Com essa +abordagem, conseguimos dois objetivos importantes: manter toda a gestão o mais +próximo possível do código-fonte e acompanhar cada funcionalidade desenvolvida +durante o projeto (uma vez que nós mesmo nos tornamos usuários reais da +plataforma). + +\subsection{Acompanhamento e gerenciamento de projeto de alto nível} + +O governo brasileiro costuma trabalhar com o desenvolvimento de software de uma +forma mais tradicional, diferentemente de nós com métodos ágeis e software +livre. Essa dissonância nos causou um ruído de comunicação com o governo. Foi +especialmente difícil convencê-los a aceitar a ideia de escopo aberto e +desenvolvimento ágil. Entretanto, depois de meses de trabalho e mostrando +resultados, eles deixaram de resistir aos métodos empíricos. + +Definimos algum nível de granularidade de reunião para evitar gerar demasiada +sobrecarga para os desenvolvedores. Tínhamos reuniões estratégica mensal e +reuniões planejamento e revisão a cada 15 dias. Na reunião estratégica, +geralmente, definimos as prioridades e as funcionalidades importantes para o +governo. Normalmente, os professores, os \textit{coaches} de cada equipe, os +\textit{meta-coaches} e alguns analistas do Ministério do Planejamento +participavam dessa reunião. Em geral, discutíamos o que a equipe já produziu +desde nossa última reunião e definíamos as funcionalidades para a próxima +versão. Observe que apenas parte da equipe participava dessas reuniões +estratégicas, mas todos os estudantes interessados estavam convidados a +participar (pois muitos estudantes quiseram essa experiência durante o +projeto). + +Depois dos encontros estratégicos com os principais atores envolvidos do +governo, tínhamos um turno de planejamento com todas as equipes juntas. Nessa +parte, cada equipe trabalhava junto para converter os requisitos em partes +menores (histórias de usuário) que era representadas como ``Épicos'' da +``release'' em desenvolvimento. Cada \textit{coach} era responsável pela +condução do planejamento, e depois a equipe toda a registrava na página wiki do +projeto (wiki fornecido pelo Gitlab do SPB). Baseado nos ``épicos'', a cada 15 +dias a equipe gerava um o planejamento da iteração/ciclo de desenvolvimento +(com os pequenos passos dos problemas mapeados). Para manter o governo +brasileiro sempre atualizado, convidávamos-os a trabalhar conosco para validar +as funcionalidades em desenvolvimento. Para isso, tínhamos uma reunião a cada +15 dia. E para manter nosso fluxo de gestão de tarefas, usando a própria +plataforma do SPB, especialmente o Gitlab, tínhamos: + +\begin{enumerate} + +\item Temos uma organização com muitos repositórios para cada ferramenta +integrada e sub-sistema; + +\item Cada \textit{milestone} foi usado para registrar uma história de usuário; + +\item Cada \textit{release} tem uma página no wiki com a compilação da reunião +estratégica e o mapeamento sistemático das funcionalidades planejadas; + +\item Para cada \textit{milestone} (história de usuário) tem um conjunto de +\textit{issues} (tarefas) específicas, que também são mapeadas na wiki da +\textit{release}, indicando qual dupla de desenvolvedores está trabalhando na +\textit{issue} em questão. + +\end{enumerate} + +Em suma, esse fluxo de trabalho proporcionou a nós e aos participantes pelo +governo brasileiro uma rastreabilidade completa e uma visão de alto nível de +cada funcionalidade (requisito) até para o nível mais baixo (código). diff --git a/cbsoft2017/content/09-lessons.tex b/cbsoft2017/content/09-lessons.tex new file mode 100644 index 0000000..237de66 --- /dev/null +++ b/cbsoft2017/content/09-lessons.tex @@ -0,0 +1,116 @@ +\section{Lições Aprendidas} +\label{sec:lessons} + +\textbf{Envolver alunos de graduação em projetos do mundo real, interagindo com clientes reais.} +% +Nossa equipe foi composta principalmente de estudantes de graduação em +engenharia de software, que tiveram a oportunidade de interagir com +desenvolvedores sênior e designers dentro da equipe, bem como com a equipe de +técnicos e gerentes do governo brasileiro. +% +Eles interagiram com profissionais que possuíam diversos conhecimentos e foram +capazes de participar em todos os níveis do processo de desenvolvimento de +software. Isto contribuiu para uma grande oportunidade de aprendizado, e para +a maioria deles esta foi a sua primeira experiência profissional. + +\textbf{A participação de profissionais experientes é crucial para o sucesso do projeto.} +% +Um fator importante para os alunos foi a composição das equipes com a +participação de profissionais experientes. No lado técnico, os desenvolvedores +sênior e designers lidavam com as decisões técnicas mais difíceis, criando +um ambiente de trabalho onde os alunos poderiam desenvolver suas habilidades de +forma didática e sem pressão. No lado gerencial, a participação ativa dos +professores - que são, no final, os responsáveis pelo projeto - é +crucial para garantir que a participação dos alunos seja conduzida de forma +saudável e seja um exemplo de liderar pelo exemplo. + +\textbf{Uma relação equilibrada entre academia e indústria.} +% +A experiência do projeto SPB levou o LAPPIS/UnB a desenvolver um estilo de trabalho que +demonstrou ser apropriado para um ambiente educacional que reúne academia e +indústria. A maior prioridade do ponto de vista da universidade são os alunos. +Diante disso, as atividades do projeto nunca foram priorizadas em detrimento +das aulas e outras atividades pedagógicas. Em resumo, tínhamos alunos +trabalhando em horários diferentes, a tempo parcial, localmente, +sempre respeitando suas condições individuais, mas fazendo o trabalho de +maneira coletiva, colaborativa e aberta. E mesmo sob um ambiente potencialmente +adverso, o projeto entregou a solução desejada com sucesso. +% +Ao final do projeto, notamos que as habilidades desenvolvidas pelos alunos +estavam no estado da arte da prática de engenharia de software. Depois que o +projeto terminou, tivemos membros da equipe que abraçaram com sucesso +oportunidades em organizações públicas, privadas, nacionais e internacionais, +além dos estudantes que entraram no empreendedorismo e abriram suas próprias +empresas. No início do projeto, as partes interessadas do governo brasileiro +tinham certas expectativas sobre o desenvolvimento de projetos que, digamos, +não correspondiam exatamente ao nosso trabalho baseado em práticas ágeis e de +software livre. Tivemos que desenvolver estratégias que apoiassem diferentes +culturas organizacionais. Conforme relatado na seção\ref{sec:process}, o Ministério do Planejamento é +organizado em uma estrutura organizacional hierárquica, tipicamente, +um paradigma de desenvolvimento tradicional. Portanto, tivemos que criar um +processo de ``tradução'' entre nossa equipe e os analistas do MP que gerenciaram o +projeto do lado deles. + +\textbf{Gerenciar separadamente os objetivos de nível estratégico e de nível operacional.} +% +Durante a fase inicial do projeto, a equipe de MP costumava trazer discussões +estratégicas para reuniões técnicas/operacionais, onde deveríamos discutir +decisões práticas e técnicas. +% +Isso resultou em um ambiente de comunicação e gerenciamento altamente complexo, +sobrecarregando os professores, uma vez eles eram responsáveis por +manter o alinhamento estratégico do MP sincronizado com os planejamentos de +implementação da equipe de desenvolvimento, especialmente à luz do +desmembramento cultural acima mencionado. A mistura de ambas as preocupações +nas mesmas discussões causava confusão em ambos os lados. Para o meio e fim do +projeto, conseguimos manter essas preocupações separadas, o que facilitou o +trabalho de todos os envolvidos. + +\textbf{Não aceitar más decisões técnicas por questões políticas.} +% +Nas fases iniciais do projeto, por motivação política e pessoal, os principais +atores do governo brasileiro, envolvidos na época, impuseram o uso da Colab +para orientar o desenvolvimento da nova plataforma SPB. Nossa equipe estava +totalmente contra a essa ideia, porque já sabíamos que o Colab era um projeto +muito experimental e sua adoção poderia aumentar dramaticamente a complexidade +do projeto. Mesmo nós fornecendo as razões técnicas para não utilizar Colab, MP +foi inflexível e tivemos de gerir este problema. Fizemos mudanças maciças e, ao +final do projeto, reescrevemos completamente o Colab e o tornamos estável (o +transformando em um Sistema de Sistema em camada de aplicação). É importante +notar que o MP nos obrigou a aceitar uma questão técnica baseada apenas em +interesses políticos, sem considerar todos os recursos que seriam gastos devido +a essa decisão. Ao final do projeto, verificamos que a Colab de fato consumiu a +maior quantidade do orçamento e aumentou a complexidade do projeto. + +\textbf{Considerar a sustentabilidade desde o início.} +% +No processo de implantação da plataforma SPB na estrutura do MP, tivemos que +interagir com os técnicos do MP. Fizemos vários workshops, treinamento e uma +documentação meticulosa descrevendo todos os procedimentos necessários para +atualizar a plataforma, no entanto, percebemos que os técnicos do MP +constantemente evitavam essa responsabilidade. Depois de notar essa situação, +nós organizamos uma equipe de DevOps específica que automatizou completamente +todo o procedimento de implantação. Nós simplificamos toda a implantação da +plataforma para algumas etapas: (1) configurações iniciais (apenas configuração +SSH) e (2) a execução de comandos simples para atualizar completamente a +plataforma. Ao final do projeto, observamos que os técnicos do MP sempre dependiam +do nosso apoio para atualizar a plataforma, mesmo com toda a automação +fornecida por nós. Ficamos tristemente com um sentimento de incerteza sobre o +futuro da plataforma após o término do projeto. Em retrospectiva, percebemos +que o MP dedicou analistas de sistemas e gerentes para o projeto, mas não +técnicos de operações e desenvolvedores, que deveria ter sido envolvido com o +processo para que pudessem, pelo menos, de forma confortável, fazer a manutenção +da infra-estrutura plataforma. + +Por fim, o novo portal do Software Público Brasileiro está disponível em +\url{https://softwarepublico.gov.br}. Toda a documentação, incluindo a +arquitetura detalhada e os manuais de operação, também estão disponíveis em +\url{https://softwarepublico.gov.br/doc}. Todas as ferramentas integradas são +software livre e nossas contribuições foram publicadas em repositórios abertos, +disponíveis no próprio portal SPB. Também contribuímos com funcionalidades e +melhorias para as respectivas comunidades dos projetos integrados: que +beneficiam essas comunidades, assim como nós, pois podemos compartilhar o +desenvolvimento futuro e o esforço de manutenção com outras organizações que +participam de seus projetos. + + diff --git a/cbsoft2017/content/10-finals.tex b/cbsoft2017/content/10-finals.tex new file mode 100644 index 0000000..f61b0e2 --- /dev/null +++ b/cbsoft2017/content/10-finals.tex @@ -0,0 +1,37 @@ +\section*{Audiência} + +Entendemos que lançamos uma plataforma sem precedentes para o governo +brasileiro, aplicando métodos colaborativos de desenvolvimento de software. +Este caso pode ajudar outros projetos a superar desafios similares de +engenharia de software no futuro, bem como demonstra como as universidades +podem melhorar a experiência de mundo real de seus alunos por meio desse tipo +de projeto. É um relato que atende uma ampla audiência, de estudantes à +professores, bem como, de desenvolvedores à gerentes de projetos. + +\section*{Biografia} + +{\bf Paulo Meirelles} é professor do Bacharelado em Engenharia de Software da +Universidade de Brasília. É pesquisador-colaborador do Centro de Competência em +Software Livre da Universidade de São Paulo (USP). Atualmente, está realizando +seu pós-doutorado no Departamento de Ciência da Computação no Instituto de +Matemática e Estatística da USP (IME-USP). Em 2013, concluiu seu doutorado em +Ciência da Computação no IME-USP, na área de Sistemas de Software. Foi +pesquisador visitante na Southern Illinois University Carbondale, Estados +Unidos, em 2011. Tem um amplo histórico de colaboração com a comunidade +software livre brasileira, entre outras, ministrando dezenas de palestras e +parcipando de vários paineis em eventos nacionais e internacionais nas últimas +duas décadas. Mais recentemente, coordenou a Evolução do Portal do Software +Público Brasileiro e foi consultor do projeto Participa.Br, da Secretaria-Geral +da Presidência da República, para o desenvolvimento de uma plataforma de +participação social com software livre. +\\ +\\ +{\bf Hilmer Neri} é professor do Bacharelado em Engenharia de Software da +Universidade de Brasília. Atualmente, está realizando +seu doutorado na COOPE-UFRJ... + +... + +... + +... diff --git a/cbsoft2017/sbc-template.sty b/cbsoft2017/sbc-template.sty new file mode 100644 index 0000000..6701423 --- /dev/null +++ b/cbsoft2017/sbc-template.sty @@ -0,0 +1,164 @@ +% LaTeX definitions for SBC 2001 style +% +% Created by Jomi Hubner & Rafael Bordini, june 2001 +% updated march 2005 + +\NeedsTeXFormat{LaTeX2e} +\ProvidesPackage{sbc-template}[2001/06/09] + +% margem sup 3.5 cm: h 1,5 cm para header, + 2 cm para top +% margem inf 2.5 cm: h 1,5 cm para foot, + 1 cm para bottom +% margem esq/dir 3 cm +\RequirePackage[a4paper,top=3.5cm,left=3cm,right=3cm,bottom=2.5cm]{geometry} + +\parindent 1.27cm +\parskip 6pt + +\flushbottom + +% captions +\RequirePackage[bf,sf,footnotesize,indent]{caption2} +\setlength{\captionmargin}{0.8cm} +\renewcommand{\captionfont}{\sffamily\footnotesize\bfseries} +\renewcommand{\captionlabeldelim}{.} + +% font +\RequirePackage{times} + +\renewcommand{\normalsize}{\@setfontsize\normalsize\@xiipt\@xivpt} +\newcommand{\XIIIPT}{\@setfontsize\xiiipt{13}{17}} +\newcommand{\XVIPT}{\@setfontsize\xvipt{16}{20}} + +% new commands +\newcounter{instn} +\setcounter{instn}{1} +\newcommand{\instnum}{\arabic{instn}} +\newcommand{\inst}[1]{\ensuremath{^{#1}}} +\newcommand{\nextinstitute}{\\\mbox{}\\[-6pt] \addtocounter{instn}{1}\inst{\instnum}} +\newcommand{\email}[1]{\\\mbox{}\\[-6pt]\footnotesize\texttt{#1}} +\renewcommand{\and}{, } + +% to avoid [...] in the bibliography +% \item[] instead of \item[\@biblabel{#1}\hfill] +\def\@lbibitem[#1]#2{\item[]\if@filesw + {\let\protect\noexpand + \immediate + \write\@auxout{\string\bibcite{#2}{#1}}}\fi\ignorespaces} +\renewenvironment{thebibliography}[1] + {\section*{\refname + \@mkboth{\MakeUppercase\refname}{\MakeUppercase\refname}}% + \list{\@biblabel{\@arabic\c@enumiv}}% + {\settowidth\labelwidth{\@biblabel{#1}}% + \leftmargin\labelwidth + \advance\leftmargin\labelsep + %% changed! + \itemindent -\leftmargin + \itemsep 6pt + %%%%%%%%%%% + \@openbib@code + \usecounter{enumiv}% + \let\p@enumiv\@empty + \renewcommand\theenumiv{\@arabic\c@enumiv}}% + \sloppy + \clubpenalty4000 + \@clubpenalty \clubpenalty + \widowpenalty4000% + \sfcode`\.\@m} + {\def\@noitemerr + {\@latex@warning{Empty `thebibliography' environment}}% + \endlist} + + +% itens +\setlength\leftmargini {1.27cm} +\setlength\leftmargin {\leftmargini} +\setlength\leftmarginii {\leftmargini} +\setlength\leftmarginiii {\leftmargini} +\setlength\leftmarginiv {\leftmargini} +\setlength \labelsep {.5em} +\setlength \labelwidth {\leftmargini} +\addtolength\labelwidth {-\labelsep} +\def\@listI{\leftmargin\leftmargini + \parsep 0\p@ \@plus1\p@ \@minus\p@ + \topsep 0\p@ \@plus2\p@ \@minus4\p@ + \itemsep0\p@} +\let\@listi\@listI +\@listi +\def\@listii {\leftmargin\leftmarginii + \labelwidth\leftmarginii + \advance\labelwidth-\labelsep + \topsep 0\p@ \@plus2\p@ \@minus\p@} +\def\@listiii{\leftmargin\leftmarginiii + \labelwidth\leftmarginiii + \advance\labelwidth-\labelsep + \topsep 0\p@ \@plus\p@\@minus\p@ + \parsep \z@ + \partopsep \p@ \@plus\z@ \@minus\p@} + + +% sections +\renewcommand\section{\@startsection{section}{1}{\z@}% + {-6\p@ \@plus -4\p@ \@minus -4\p@}% + {0\p@ \@plus 4\p@ \@minus 4\p@}% + {\normalfont\XIIIPT\bfseries\boldmath + \rightskip=\z@ \@plus 8em\pretolerance=10000 }} + +\renewcommand\subsection{\@startsection{subsection}{2}{\z@}% + {-6\p@ \@plus -4\p@ \@minus -4\p@}% + {0\p@ \@plus 4\p@ \@minus 4\p@}% + {\normalfont\normalsize\bfseries\boldmath + \rightskip=\z@ \@plus 8em\pretolerance=10000 }} + +%\renewcommand{\thesection}{\arabic{section}.} +%\renewcommand{\thesubsection}{\thesection\arabic{subsection}.} +%\renewcommand{\thesubsubsection}{\thesubsection\arabic{subsubsection}.} + +\RequirePackage{titlesec} +\titlelabel{\thetitle.\hspace{1ex}} + +% first page + +\pagestyle{empty} + +\newcommand{\authortag}[1]{$^{#1}$} + +\def\address#1{\gdef\@address{#1}} + +\def\@maketitle{\newpage + %\null % isso dava um espaco extra antes do title + \begin{center} + %\vglue -6pt +% \vspace*{12pt} +\vspace*{-.7cm} + {\XVIPT\bf\@title\par} + \vglue 6pt plus 3pt minus 3pt + {\normalsize + \textbf{\begin{tabular}[t]{c}\@author\end{tabular}}\par} + \vglue 6pt plus 3pt minus 3pt + {\normalsize + \begin{tabular}[t]{c}\inst{\instnum}\@address\end{tabular}\par} + \vglue 6pt plus 3pt minus 3pt + \end{center}\par +} +\let\maketitleOLD\maketitle +\renewcommand{\maketitle}{\maketitleOLD\thispagestyle{empty}} + +\renewenvironment{abstract}{% + \list{}{\advance\topsep by6pt\relax%\small + \leftmargin=0.8cm + \labelwidth=\z@ + \listparindent=\z@ + \itemindent\listparindent + \rightmargin\leftmargin}\item[\hskip\labelsep + \bfseries\itshape Abstract.]\itshape}% + {\endlist} + +\newenvironment{resumo}{% + \list{}{\advance\topsep by6pt\relax%\small + \leftmargin=0.8cm + \labelwidth=\z@ + \listparindent=\z@ + \itemindent\listparindent + \rightmargin\leftmargin}\item[\hskip\labelsep + \bfseries\itshape Resumo.]\itshape}% + {\endlist} diff --git a/cbsoft2017/sbc.bst b/cbsoft2017/sbc.bst new file mode 100644 index 0000000..f745087 --- /dev/null +++ b/cbsoft2017/sbc.bst @@ -0,0 +1,1103 @@ +%% copy of "apalike" for SBC (no comma before year in citation label) + +% BibTeX `apalike' bibliography style (24-Jan-88 version) +% Adapted from the `alpha' style, version 0.99a; for BibTeX version 0.99a. +% Copyright (C) 1988, all rights reserved. +% Copying of this file is allowed, provided that if you make any changes at all +% you name it something other than `apalike.bst'. +% This restriction helps ensure that all copies are identical. +% Differences between this style and `alpha' are generally heralded by a `%'. +% The file btxbst.doc has the documentation for alpha.bst. +% +% This style should be used with the `apalike' LaTeX style (apalike.sty). +% \cite's come out like "(Jones, 1986)" in the text but there are no labels +% in the bibliography, and something like "(1986)" comes out immediately +% after the author. Author (and editor) names appear as last name, comma, +% initials. A `year' field is required for every entry, and so is either +% an author (or in some cases, an editor) field or a key field. +% +% Editorial note: +% Many journals require a style like `apalike', but I strongly, strongly, +% strongly recommend that you not use it if you have a choice---use something +% like `plain' instead. Mary-Claire van Leunen (A Handbook for Scholars, +% Knopf, 1979) argues convincingly that a style like `plain' encourages better +% writing than one like `apalike'. Furthermore the strongest arguments for +% using an author-date style like `apalike'---that it's "the most practical" +% (The Chicago Manual of Style, University of Chicago Press, thirteenth +% edition, 1982, pages 400--401)---fall flat on their face with the new +% computer-typesetting technology. For instance page 401 anachronistically +% states "The chief disadvantage of [a style like `plain'] is that additions +% or deletions cannot be made after the manuscript is typed without changing +% numbers in both text references and list." LaTeX sidesteps the disadvantage. +% +% History: +% 15-sep-86 (SK,OP) Original version, by Susan King and Oren Patashnik. +% 10-nov-86 (OP) Truncated the sort.key$ string to the correct length +% in bib.sort.order to eliminate error message. +% 24-jan-88 (OP) Updated for BibTeX version 0.99a, from alpha.bst 0.99a; +% apalike now sorts by author, then year, then title; +% THIS `apalike' VERSION DOES NOT WORK WITH BIBTEX 0.98i. + +ENTRY + { address + author + booktitle + chapter + edition + editor + howpublished + institution + journal + key +% month not used in apalike + note + number + organization + pages + publisher + school + series + title + type + volume + year + } + {} + { label extra.label sort.label } + +INTEGERS { output.state before.all mid.sentence after.sentence after.block } + +FUNCTION {init.state.consts} +{ #0 'before.all := + #1 'mid.sentence := + #2 'after.sentence := + #3 'after.block := +} + +STRINGS { s t } + +FUNCTION {output.nonnull} +{ 's := + output.state mid.sentence = + { ", " * write$ } + { output.state after.block = + { add.period$ write$ + newline$ + "\newblock " write$ + } + { output.state before.all = + 'write$ + { add.period$ " " * write$ } + if$ + } + if$ + mid.sentence 'output.state := + } + if$ + s +} + +FUNCTION {output} +{ duplicate$ empty$ + 'pop$ + 'output.nonnull + if$ +} + +FUNCTION {output.check} +{ 't := + duplicate$ empty$ + { pop$ "empty " t * " in " * cite$ * warning$ } + 'output.nonnull + if$ +} + +% apalike needs this function because +% the year has special punctuation; +% apalike ignores the month +FUNCTION {output.year.check} +{ year empty$ + { "empty year in " cite$ * warning$ } + { write$ + " (" year * extra.label * ")" * + mid.sentence 'output.state := + } + if$ +} + +FUNCTION {output.bibitem} +{ newline$ + "\bibitem[" write$ + label write$ + "]{" write$ + cite$ write$ + "}" write$ + newline$ + "" + before.all 'output.state := +} + +FUNCTION {fin.entry} +{ add.period$ + write$ + newline$ +} + +FUNCTION {new.block} +{ output.state before.all = + 'skip$ + { after.block 'output.state := } + if$ +} + +FUNCTION {new.sentence} +{ output.state after.block = + 'skip$ + { output.state before.all = + 'skip$ + { after.sentence 'output.state := } + if$ + } + if$ +} + +FUNCTION {not} +{ { #0 } + { #1 } + if$ +} + +FUNCTION {and} +{ 'skip$ + { pop$ #0 } + if$ +} + +FUNCTION {or} +{ { pop$ #1 } + 'skip$ + if$ +} + +FUNCTION {new.block.checkb} +{ empty$ + swap$ empty$ + and + 'skip$ + 'new.block + if$ +} + +FUNCTION {field.or.null} +{ duplicate$ empty$ + { pop$ "" } + 'skip$ + if$ +} + +FUNCTION {emphasize} +{ duplicate$ empty$ + { pop$ "" } + { "{\em " swap$ * "}" * } + if$ +} + +INTEGERS { nameptr namesleft numnames } + +FUNCTION {format.names} +{ 's := + #1 'nameptr := + s num.names$ 'numnames := + numnames 'namesleft := + { namesleft #0 > } + { s nameptr "{vv~}{ll}{, jj}{, f.}" format.name$ 't := % last name first + nameptr #1 > + { namesleft #1 > + { ", " * t * } + { numnames #2 > + { "," * } + 'skip$ + if$ + t "others" = + { " et~al." * } + { " and " * t * } + if$ + } + if$ + } + 't + if$ + nameptr #1 + 'nameptr := + namesleft #1 - 'namesleft := + } + while$ +} + +FUNCTION {format.authors} +{ author empty$ + { "" } + { author format.names } + if$ +} + +FUNCTION {format.key} % this function is just for apalike +{ empty$ + { key field.or.null } + { "" } + if$ +} + +FUNCTION {format.editors} +{ editor empty$ + { "" } + { editor format.names + editor num.names$ #1 > + { ", editors" * } + { ", editor" * } + if$ + } + if$ +} + +FUNCTION {format.title} +{ title empty$ + { "" } + { title "t" change.case$ } + if$ +} + +FUNCTION {n.dashify} +{ 't := + "" + { t empty$ not } + { t #1 #1 substring$ "-" = + { t #1 #2 substring$ "--" = not + { "--" * + t #2 global.max$ substring$ 't := + } + { { t #1 #1 substring$ "-" = } + { "-" * + t #2 global.max$ substring$ 't := + } + while$ + } + if$ + } + { t #1 #1 substring$ * + t #2 global.max$ substring$ 't := + } + if$ + } + while$ +} + +FUNCTION {format.btitle} +{ title emphasize +} + +FUNCTION {tie.or.space.connect} +{ duplicate$ text.length$ #3 < + { "~" } + { " " } + if$ + swap$ * * +} + +FUNCTION {either.or.check} +{ empty$ + 'pop$ + { "can't use both " swap$ * " fields in " * cite$ * warning$ } + if$ +} + +FUNCTION {format.bvolume} +{ volume empty$ + { "" } + { "volume" volume tie.or.space.connect + series empty$ + 'skip$ + { " of " * series emphasize * } + if$ + "volume and number" number either.or.check + } + if$ +} + +FUNCTION {format.number.series} +{ volume empty$ + { number empty$ + { series field.or.null } + { output.state mid.sentence = + { "number" } + { "Number" } + if$ + number tie.or.space.connect + series empty$ + { "there's a number but no series in " cite$ * warning$ } + { " in " * series * } + if$ + } + if$ + } + { "" } + if$ +} + +FUNCTION {format.edition} +{ edition empty$ + { "" } + { output.state mid.sentence = + { edition "l" change.case$ " edition" * } + { edition "t" change.case$ " edition" * } + if$ + } + if$ +} + +INTEGERS { multiresult } + +FUNCTION {multi.page.check} +{ 't := + #0 'multiresult := + { multiresult not + t empty$ not + and + } + { t #1 #1 substring$ + duplicate$ "-" = + swap$ duplicate$ "," = + swap$ "+" = + or or + { #1 'multiresult := } + { t #2 global.max$ substring$ 't := } + if$ + } + while$ + multiresult +} + +FUNCTION {format.pages} +{ pages empty$ + { "" } + { pages multi.page.check + { "pages" pages n.dashify tie.or.space.connect } + { "page" pages tie.or.space.connect } + if$ + } + if$ +} + +FUNCTION {format.vol.num.pages} +{ volume field.or.null + number empty$ + 'skip$ + { "(" number * ")" * * + volume empty$ + { "there's a number but no volume in " cite$ * warning$ } + 'skip$ + if$ + } + if$ + pages empty$ + 'skip$ + { duplicate$ empty$ + { pop$ format.pages } + { ":" * pages n.dashify * } + if$ + } + if$ +} + +FUNCTION {format.chapter.pages} +{ chapter empty$ + 'format.pages + { type empty$ + { "chapter" } + { type "l" change.case$ } + if$ + chapter tie.or.space.connect + pages empty$ + 'skip$ + { ", " * format.pages * } + if$ + } + if$ +} + +FUNCTION {format.in.ed.booktitle} +{ booktitle empty$ + { "" } + { editor empty$ + { "In " booktitle emphasize * } + { "In " format.editors * ", " * booktitle emphasize * } + if$ + } + if$ +} + +FUNCTION {format.thesis.type} +{ type empty$ + 'skip$ + { pop$ + type "t" change.case$ + } + if$ +} + +FUNCTION {format.tr.number} +{ type empty$ + { "Technical Report" } + 'type + if$ + number empty$ + { "t" change.case$ } + { number tie.or.space.connect } + if$ +} + +FUNCTION {format.article.crossref} +{ "In" % this is for apalike + " \cite{" * crossref * "}" * +} + +FUNCTION {format.book.crossref} +{ volume empty$ + { "empty volume in " cite$ * "'s crossref of " * crossref * warning$ + "In " + } + { "Volume" volume tie.or.space.connect + " of " * + } + if$ + "\cite{" * crossref * "}" * % this is for apalike +} + +FUNCTION {format.incoll.inproc.crossref} +{ "In" % this is for apalike + " \cite{" * crossref * "}" * +} + +FUNCTION {article} +{ output.bibitem + format.authors "author" output.check + author format.key output % special for + output.year.check % apalike + new.block + format.title "title" output.check + new.block + crossref missing$ + { journal emphasize "journal" output.check + format.vol.num.pages output + } + { format.article.crossref output.nonnull + format.pages output + } + if$ + new.block + note output + fin.entry +} + +FUNCTION {book} +{ output.bibitem + author empty$ + { format.editors "author and editor" output.check + editor format.key output + } + { format.authors output.nonnull + crossref missing$ + { "author and editor" editor either.or.check } + 'skip$ + if$ + } + if$ + output.year.check % special for apalike + new.block + format.btitle "title" output.check + crossref missing$ + { format.bvolume output + new.block + format.number.series output + new.sentence + publisher "publisher" output.check + address output + } + { new.block + format.book.crossref output.nonnull + } + if$ + format.edition output + new.block + note output + fin.entry +} + +FUNCTION {booklet} +{ output.bibitem + format.authors output + author format.key output % special for + output.year.check % apalike + new.block + format.title "title" output.check + new.block + howpublished output + address output + new.block + note output + fin.entry +} + +FUNCTION {inbook} +{ output.bibitem + author empty$ + { format.editors "author and editor" output.check + editor format.key output + } + { format.authors output.nonnull + crossref missing$ + { "author and editor" editor either.or.check } + 'skip$ + if$ + } + if$ + output.year.check % special for apalike + new.block + format.btitle "title" output.check + crossref missing$ + { format.bvolume output + format.chapter.pages "chapter and pages" output.check + new.block + format.number.series output + new.sentence + publisher "publisher" output.check + address output + } + { format.chapter.pages "chapter and pages" output.check + new.block + format.book.crossref output.nonnull + } + if$ + format.edition output + new.block + note output + fin.entry +} + +FUNCTION {incollection} +{ output.bibitem + format.authors "author" output.check + author format.key output % special for + output.year.check % apalike + new.block + format.title "title" output.check + new.block + crossref missing$ + { format.in.ed.booktitle "booktitle" output.check + format.bvolume output + format.number.series output + format.chapter.pages output + new.sentence + publisher "publisher" output.check + address output + format.edition output + } + { format.incoll.inproc.crossref output.nonnull + format.chapter.pages output + } + if$ + new.block + note output + fin.entry +} + +FUNCTION {inproceedings} +{ output.bibitem + format.authors "author" output.check + author format.key output % special for + output.year.check % apalike + new.block + format.title "title" output.check + new.block + crossref missing$ + { format.in.ed.booktitle "booktitle" output.check + format.bvolume output + format.number.series output + format.pages output + address output % for apalike + new.sentence % there's no year + organization output % here so things + publisher output % are simpler + } + { format.incoll.inproc.crossref output.nonnull + format.pages output + } + if$ + new.block + note output + fin.entry +} + +FUNCTION {conference} { inproceedings } + +FUNCTION {manual} +{ output.bibitem + format.authors output + author format.key output % special for + output.year.check % apalike + new.block + format.btitle "title" output.check + organization address new.block.checkb + organization output + address output + format.edition output + new.block + note output + fin.entry +} + +FUNCTION {mastersthesis} +{ output.bibitem + format.authors "author" output.check + author format.key output % special for + output.year.check % apalike + new.block + format.title "title" output.check + new.block + "Master's thesis" format.thesis.type output.nonnull + school "school" output.check + address output + new.block + note output + fin.entry +} + +FUNCTION {misc} +{ output.bibitem + format.authors output + author format.key output % special for + output.year.check % apalike + new.block + format.title output + new.block + howpublished output + new.block + note output + fin.entry +} + +FUNCTION {phdthesis} +{ output.bibitem + format.authors "author" output.check + author format.key output % special for + output.year.check % apalike + new.block + format.btitle "title" output.check + new.block + "PhD thesis" format.thesis.type output.nonnull + school "school" output.check + address output + new.block + note output + fin.entry +} + +FUNCTION {proceedings} +{ output.bibitem + format.editors output + editor format.key output % special for + output.year.check % apalike + new.block + format.btitle "title" output.check + format.bvolume output + format.number.series output + address output % for apalike + new.sentence % we always output + organization output % a nonempty organization + publisher output % here + new.block + note output + fin.entry +} + +FUNCTION {techreport} +{ output.bibitem + format.authors "author" output.check + author format.key output % special for + output.year.check % apalike + new.block + format.title "title" output.check + new.block + format.tr.number output.nonnull + institution "institution" output.check + address output + new.block + note output + fin.entry +} + +FUNCTION {unpublished} +{ output.bibitem + format.authors "author" output.check + author format.key output % special for + output.year.check % apalike + new.block + format.title "title" output.check + new.block + note "note" output.check + fin.entry +} + +FUNCTION {default.type} { misc } + +MACRO {jan} {"January"} + +MACRO {feb} {"February"} + +MACRO {mar} {"March"} + +MACRO {apr} {"April"} + +MACRO {may} {"May"} + +MACRO {jun} {"June"} + +MACRO {jul} {"July"} + +MACRO {aug} {"August"} + +MACRO {sep} {"September"} + +MACRO {oct} {"October"} + +MACRO {nov} {"November"} + +MACRO {dec} {"December"} + +MACRO {acmcs} {"ACM Computing Surveys"} + +MACRO {acta} {"Acta Informatica"} + +MACRO {cacm} {"Communications of the ACM"} + +MACRO {ibmjrd} {"IBM Journal of Research and Development"} + +MACRO {ibmsj} {"IBM Systems Journal"} + +MACRO {ieeese} {"IEEE Transactions on Software Engineering"} + +MACRO {ieeetc} {"IEEE Transactions on Computers"} + +MACRO {ieeetcad} + {"IEEE Transactions on Computer-Aided Design of Integrated Circuits"} + +MACRO {ipl} {"Information Processing Letters"} + +MACRO {jacm} {"Journal of the ACM"} + +MACRO {jcss} {"Journal of Computer and System Sciences"} + +MACRO {scp} {"Science of Computer Programming"} + +MACRO {sicomp} {"SIAM Journal on Computing"} + +MACRO {tocs} {"ACM Transactions on Computer Systems"} + +MACRO {tods} {"ACM Transactions on Database Systems"} + +MACRO {tog} {"ACM Transactions on Graphics"} + +MACRO {toms} {"ACM Transactions on Mathematical Software"} + +MACRO {toois} {"ACM Transactions on Office Information Systems"} + +MACRO {toplas} {"ACM Transactions on Programming Languages and Systems"} + +MACRO {tcs} {"Theoretical Computer Science"} + +READ + +FUNCTION {sortify} +{ purify$ + "l" change.case$ +} + +INTEGERS { len } + +FUNCTION {chop.word} +{ 's := + 'len := + s #1 len substring$ = + { s len #1 + global.max$ substring$ } + 's + if$ +} + +% There are three apalike cases: one person (Jones), +% two (Jones and de~Bruijn), and more (Jones et~al.). +% This function is much like format.crossref.editors. +% +FUNCTION {format.lab.names} +{ 's := + s #1 "{vv~}{ll}" format.name$ + s num.names$ duplicate$ + #2 > + { pop$ " et~al." * } + { #2 < + 'skip$ + { s #2 "{ff }{vv }{ll}{ jj}" format.name$ "others" = + { " et~al." * } + { " and " * s #2 "{vv~}{ll}" format.name$ * } + if$ + } + if$ + } + if$ +} + +FUNCTION {author.key.label} +{ author empty$ + { key empty$ + { cite$ #1 #3 substring$ } + 'key % apalike uses the whole key + if$ + } + { author format.lab.names } + if$ +} + +FUNCTION {author.editor.key.label} +{ author empty$ + { editor empty$ + { key empty$ + { cite$ #1 #3 substring$ } + 'key % apalike uses the whole key + if$ + } + { editor format.lab.names } + if$ + } + { author format.lab.names } + if$ +} + +FUNCTION {editor.key.label} +{ editor empty$ + { key empty$ + { cite$ #1 #3 substring$ } + 'key % apalike uses the whole key, no organization + if$ + } + { editor format.lab.names } + if$ +} + +FUNCTION {calc.label} +{ type$ "book" = + type$ "inbook" = + or + 'author.editor.key.label + { type$ "proceedings" = + 'editor.key.label % apalike ignores organization + 'author.key.label % for labeling and sorting + if$ + } + if$ + " " % these three lines are + * % for apalike, which + year field.or.null purify$ #-1 #4 substring$ % uses all four digits + * + 'label := +} + +FUNCTION {sort.format.names} +{ 's := + #1 'nameptr := + "" + s num.names$ 'numnames := + numnames 'namesleft := + { namesleft #0 > } + { nameptr #1 > + { " " * } + 'skip$ + if$ % apalike uses initials + s nameptr "{vv{ } }{ll{ }}{ f{ }}{ jj{ }}" format.name$ 't := % <= here + nameptr numnames = t "others" = and + { "et al" * } + { t sortify * } + if$ + nameptr #1 + 'nameptr := + namesleft #1 - 'namesleft := + } + while$ +} + +FUNCTION {sort.format.title} +{ 't := + "A " #2 + "An " #3 + "The " #4 t chop.word + chop.word + chop.word + sortify + #1 global.max$ substring$ +} + +FUNCTION {author.sort} +{ author empty$ + { key empty$ + { "to sort, need author or key in " cite$ * warning$ + "" + } + { key sortify } + if$ + } + { author sort.format.names } + if$ +} + +FUNCTION {author.editor.sort} +{ author empty$ + { editor empty$ + { key empty$ + { "to sort, need author, editor, or key in " cite$ * warning$ + "" + } + { key sortify } + if$ + } + { editor sort.format.names } + if$ + } + { author sort.format.names } + if$ +} + +FUNCTION {editor.sort} +{ editor empty$ + { key empty$ + { "to sort, need editor or key in " cite$ * warning$ + "" + } + { key sortify } + if$ + } + { editor sort.format.names } + if$ +} + +% apalike uses two sorting passes; the first one sets the +% labels so that the `a's, `b's, etc. can be computed; +% the second pass puts the references in "correct" order. +% The presort function is for the first pass. It computes +% label, sort.label, and title, and then concatenates. +FUNCTION {presort} +{ calc.label + label sortify + " " + * + type$ "book" = + type$ "inbook" = + or + 'author.editor.sort + { type$ "proceedings" = + 'editor.sort + 'author.sort + if$ + } + if$ + #1 entry.max$ substring$ % for + 'sort.label := % apalike + sort.label % style + * + " " + * + title field.or.null + sort.format.title + * + #1 entry.max$ substring$ + 'sort.key$ := +} + +ITERATE {presort} + +SORT % by label, sort.label, title---for final label calculation + +STRINGS { last.label next.extra } % apalike labels are only for the text; + +INTEGERS { last.extra.num } % there are none in the bibliography + +FUNCTION {initialize.extra.label.stuff} % and hence there is no `longest.label' +{ #0 int.to.chr$ 'last.label := + "" 'next.extra := + #0 'last.extra.num := +} + +FUNCTION {forward.pass} +{ last.label label = + { last.extra.num #1 + 'last.extra.num := + last.extra.num int.to.chr$ 'extra.label := + } + { "a" chr.to.int$ 'last.extra.num := + "" 'extra.label := + label 'last.label := + } + if$ +} + +FUNCTION {reverse.pass} +{ next.extra "b" = + { "a" 'extra.label := } + 'skip$ + if$ + label extra.label * 'label := + extra.label 'next.extra := +} + +EXECUTE {initialize.extra.label.stuff} + +ITERATE {forward.pass} + +REVERSE {reverse.pass} + +% Now that the label is right we sort for real, +% on sort.label then year then title. This is +% for the second sorting pass. +FUNCTION {bib.sort.order} +{ sort.label + " " + * + year field.or.null sortify + * + " " + * + title field.or.null + sort.format.title + * + #1 entry.max$ substring$ + 'sort.key$ := +} + +ITERATE {bib.sort.order} + +SORT % by sort.label, year, title---giving final bibliography order + +FUNCTION {begin.bib} +{ preamble$ empty$ % no \etalchar in apalike + 'skip$ + { preamble$ write$ newline$ } + if$ + "\begin{thebibliography}{}" write$ newline$ % no labels in apalike +} + +EXECUTE {begin.bib} + +EXECUTE {init.state.consts} + +ITERATE {call.type$} + +FUNCTION {end.bib} +{ newline$ + "\end{thebibliography}" write$ newline$ +} + +EXECUTE {end.bib} diff --git a/cbsoft2017/spb.bib b/cbsoft2017/spb.bib new file mode 100644 index 0000000..2e73c4f --- /dev/null +++ b/cbsoft2017/spb.bib @@ -0,0 +1,48 @@ +@book{kon2012, + title={Software Livre e Propriedade Intelectual: Aspectos Jur{\'\i}dicos, Licen{\c{c}}as e Modelos de Neg{\'o}cios}, + author={Kon, Fabio and Lago, Nelson and Meirelles, Paulo and Sabino, Vanessa}, + journal={http://ccsl. ime. usp. br/files/slpi. pdf>. Acesso em}, + volume={2}, + pages={12}, + year={2012} +} + +@article{hippel2003, + author = {Hippel, Eric von and Krogh, Georg von}, + title = {Open Source Software and the "Private-Collective" Innovation Model: Issues for Organization Science}, + journal = {Organization Science}, + issue_date = {March 2003}, + volume = {14}, + number = {2}, + month = mar, + year = {2003}, + issn = {1526-5455}, + pages = {209--223}, + numpages = {15}, + url = {http://dx.doi.org/10.1287/orsc.14.2.209.14992}, + doi = {10.1287/orsc.14.2.209.14992}, + acmid = {970585}, + publisher = {INFORMS}, + address = {Institute for Operations Research and the Management Sciences (INFORMS), Linthicum, Maryland, USA}, + keywords = {Incentives, Innovation, Open source software, User innovation, users, collective action}, +} + +@phdthesis{meirelles2013, + title={Monitoring Source Code Metrics in Free Software Projects}, + author={Meirelles, Paulo Roberto Miranda}, + year={2013}, + school={Department of Computer Science -- Institute of Mathematics and Statistics of University of S{\~a}o Paulo}, + note = {[in portuguese]}, + url={http://www.teses.usp.br/teses/disponiveis/45/45134/tde-27082013-090242/en.php} +} + +@mastersthesis{sabino2009, + title={A systematic study on Free Software License}, + author={Vanessa Sabino}, + year={2009}, + school={Department of Computer Science -- Institute of Mathematics and Statistics of University of S{\~a}o Paulo}, + note = {[in portuguese]}, + url={http://www.teses.usp.br/teses/disponiveis/45/45134/tde-14032012-003454/en.php} + +} + diff --git a/cbsoft2017/spb.tex b/cbsoft2017/spb.tex new file mode 100644 index 0000000..984ac23 --- /dev/null +++ b/cbsoft2017/spb.tex @@ -0,0 +1,33 @@ +\documentclass[12pt]{article} + +\usepackage{sbc-template} +\usepackage{graphicx,url} +\usepackage[brazil]{babel} +\usepackage[utf8]{inputenc} +\usepackage{float} +\usepackage{setspace} + +\usepackage{tabularx} +\usepackage{cite} + +\begin{document} +\sloppy +\title{Lições aprendidas no desenvolvimento do novo portal do Software Público Brasileiro} + +\author{Paulo Meirelles\inst{1}, Hilmer Neri\inst{1}} + +\address{Laboratório de Produção, Pesquisa e Inovação em Sofware(LAPPIS)\\ + Faculdade UnB Gama (FGA) -- Universidade de Brasília (UnB) +% Área Especial de Indústria Projeção A, Setor Leste -- Gama - DF -- Brasil + \email{\{paulormm,hilmer\}@unb.br} +} + +\maketitle + +\input{content/01-introduction} +\input{content/04-architecture} +\input{content/07-process} +\input{content/09-lessons} +\input{content/10-finals} + +\end{document} -- libgit2 0.21.2