Commit 0115b8d880aac568b9b3d53e3a429e709017a03e

Authored by Paulo Meireles
1 parent 84ce26e8

Adding CBSoft industry track proposal

cbsoft2017/.gitignore 0 → 100644
... ... @@ -0,0 +1,10 @@
  1 +.DS_Store
  2 +*.sw*
  3 +guide.tex
  4 +*.bak
  5 +*.pdf
  6 +*.aux
  7 +*.log
  8 +*.bbl
  9 +*.blg
  10 +*.out
... ...
cbsoft2017/Makefile 0 → 100755
... ... @@ -0,0 +1,15 @@
  1 +TARGET=spb
  2 +
  3 +all: $(TARGET).tex
  4 + pdflatex $(TARGET).tex
  5 + bibtex $(TARGET)
  6 + pdflatex $(TARGET).tex
  7 + pdflatex $(TARGET).tex
  8 + evince $(TARGET).pdf &
  9 +
  10 +edit:
  11 + gedit Makefile *.bib *.tex &
  12 +
  13 +clean:
  14 + rm -f $(TARGET).pdf *.out *.aux *.log *.blg *.bbl *.dvi *.ps *.toc *.lot *.lof *.idx *~
  15 +
... ...
cbsoft2017/caption2.sty 0 → 100644
... ... @@ -0,0 +1,406 @@
  1 +%%
  2 +%% This is file `caption2.sty',
  3 +%% generated with the docstrip utility.
  4 +%%
  5 +%% The original source files were:
  6 +%%
  7 +%% caption2.dtx (with options: `package')
  8 +%%
  9 +%% Copyright (C) 1994-2002 Axel Sommerfeldt (caption@sommerfeldt.net)
  10 +%%
  11 +%% --------------------------------------------------------------------------
  12 +%%
  13 +%% It may be distributed and/or modified under the
  14 +%% conditions of the LaTeX Project Public License, either version 1.2
  15 +%% of this license or (at your option) any later version.
  16 +%% The latest version of this license is in
  17 +%% http://www.latex-project.org/lppl.txt
  18 +%% and version 1.2 or later is part of all distributions of LaTeX
  19 +%% version 1999/12/01 or later.
  20 +%%
  21 +\NeedsTeXFormat{LaTeX2e}[1994/12/01]
  22 +\ProvidesPackage{caption2}
  23 + [2002/08/03 v2.1 Customising captions (AS)]
  24 +\newcommand*\captionfont{}
  25 +\newcommand*\captionlabelfont{}
  26 +\newcommand*\captionlabeldelim{}
  27 +\newcommand*\captionlabelsep{}
  28 +\newcommand*\captionsize{}
  29 +\newdimen\captionmargin
  30 +\newdimen\captionwidth
  31 +\newif\ifcaptionwidth
  32 +\newdimen\captionindent
  33 +\newif\ifcaptionlabel\captionlabeltrue
  34 +\newif\ifonelinecaptions
  35 +\newif\ifignoreLTcapwidth
  36 +\newcommand*\setcaptionmargin{%
  37 + \captionwidthfalse
  38 + \setlength\captionmargin}
  39 +\newcommand*\setcaptionwidth{%
  40 + \captionwidthtrue
  41 + \setlength\captionwidth}
  42 +\newcommand*\normalcaptionparams{%
  43 + \let\captionsize\@empty
  44 + \renewcommand*\captionfont{\captionsize}%
  45 + \let\captionlabelfont\@empty%
  46 + \renewcommand*\captionlabeldelim{:}%
  47 + \renewcommand*\captionlabelsep{\space}%
  48 + \setcaptionmargin\z@\setlength\captionindent\z@
  49 + \onelinecaptionstrue}
  50 +\newcommand*\caption@eh{%
  51 + If you do not understand this error, please take a closer look\MessageBreak
  52 + at the documentation of the `caption2' package.\MessageBreak
  53 + \@ehc}
  54 +\newcommand*\defcaptionstyle[1]{%
  55 + \@namedef{caption@@#1}}
  56 +\newcommand*\newcaptionstyle[1]{%
  57 + \expandafter\ifx\csname caption@@#1\endcsname\relax
  58 + \expandafter\defcaptionstyle
  59 + \else
  60 + \PackageError{caption2}{Caption style `#1' already defined}{\caption@eh}%
  61 + \expandafter\@gobbletwo
  62 + \fi
  63 + {#1}}
  64 +\newcommand*\renewcaptionstyle[1]{%
  65 + \expandafter\ifx\csname caption@@#1\endcsname\relax
  66 + \PackageError{caption2}{Caption style `#1' undefined}{\caption@eh}%
  67 + \expandafter\@gobbletwo
  68 + \else
  69 + \expandafter\defcaptionstyle
  70 + \fi
  71 + {#1}}
  72 +\newcommand*\dummycaptionstyle[2]{%
  73 + \defcaptionstyle{#1}{%
  74 + \expandafter\ifx\csname caption@@\caption@style\expandafter\endcsname%
  75 + \csname caption@@#1\endcsname
  76 + \PackageError{caption2}{You can't use the caption style `#1' directy}{%
  77 + The caption style `#1' is only a dummy and does not really exists.%
  78 + \MessageBreak You have to redefine it (with \protect\renewcaptionstyle)
  79 + before you can select\MessageBreak it with \protect\captionstyle.
  80 + \space\caption@eh}%
  81 + \else
  82 + #2\usecaptionstyle{\caption@style}%
  83 + \fi}}
  84 +\newcaptionstyle{normal}{\caption@makecaption{normal}}
  85 +\newcaptionstyle{center}{\caption@makecaption{center}}
  86 +\newcaptionstyle{centerlast}{\caption@makecaption{centerlast}}
  87 +\newcaptionstyle{flushleft}{\caption@makecaption{flushleft}}
  88 +\newcaptionstyle{flushright}{\caption@makecaption{flushright}}
  89 +\newcaptionstyle{hang}{\caption@makecaption{hang}}
  90 +\newcaptionstyle{hang+center}{\caption@makecaption{hang@center}}
  91 +\newcaptionstyle{hang+centerlast}{\caption@makecaption{hang@centerlast}}
  92 +\newcaptionstyle{hang+flushleft}{\caption@makecaption{hang@flushleft}}
  93 +\newcaptionstyle{indent}{\caption@makecaption{indent}}
  94 +\newcommand*\captionstyle[1]{%
  95 + \expandafter\ifx\csname caption@@#1\endcsname\relax
  96 + \PackageError{caption2}{Undefined caption style `#1'}{\caption@eh}%
  97 + \else
  98 + \def\caption@style{#1}%
  99 + \fi}
  100 +\DeclareOption{normal}{\captionstyle{normal}}
  101 +\DeclareOption{center}{\captionstyle{center}}
  102 +\DeclareOption{centerlast}{\captionstyle{centerlast}}
  103 +\DeclareOption{flushleft}{\captionstyle{flushleft}}
  104 +\DeclareOption{flushright}{\captionstyle{flushright}}
  105 +\DeclareOption{anne}{\ExecuteOptions{centerlast}}
  106 +\DeclareOption{hang}{\captionstyle{hang}}
  107 +\DeclareOption{hang+center}{\captionstyle{hang+center}}
  108 +\DeclareOption{hang+centerlast}{\captionstyle{hang+centerlast}}
  109 +\DeclareOption{hang+flushleft}{\captionstyle{hang+flushleft}}
  110 +\DeclareOption{isu}{\ExecuteOptions{hang}}
  111 +\DeclareOption{indent}{\captionstyle{indent}}
  112 +\DeclareOption{scriptsize}{\g@addto@macro\captionsize\scriptsize}
  113 +\DeclareOption{footnotesize}{\g@addto@macro\captionsize\footnotesize}
  114 +\DeclareOption{small}{\g@addto@macro\captionsize\small}
  115 +\DeclareOption{normalsize}{\g@addto@macro\captionsize\normalsize}
  116 +\DeclareOption{large}{\g@addto@macro\captionsize\large}
  117 +\DeclareOption{Large}{\g@addto@macro\captionsize\Large}
  118 +\DeclareOption{up}{\g@addto@macro\captionlabelfont\upshape}
  119 +\DeclareOption{it}{\g@addto@macro\captionlabelfont\itshape}
  120 +\DeclareOption{sl}{\g@addto@macro\captionlabelfont\slshape}
  121 +\DeclareOption{sc}{\g@addto@macro\captionlabelfont\scshape}
  122 +\DeclareOption{md}{\g@addto@macro\captionlabelfont\mdseries}
  123 +\DeclareOption{bf}{\g@addto@macro\captionlabelfont\bfseries}
  124 +\DeclareOption{rm}{\g@addto@macro\captionlabelfont\rmfamily}
  125 +\DeclareOption{sf}{\g@addto@macro\captionlabelfont\sffamily}
  126 +\DeclareOption{tt}{\g@addto@macro\captionlabelfont\ttfamily}
  127 +\DeclareOption{oneline}{\onelinecaptionstrue}
  128 +\DeclareOption{nooneline}{\onelinecaptionsfalse}
  129 +\newcommand*\caption@package[1]{\@namedef{caption@pkt@#1}}
  130 +\DeclareOption{float}{\caption@twozerofalse\caption@package{float}{1}}
  131 +\DeclareOption{longtable}{\caption@twozerofalse\caption@package{longtable}{1}}
  132 +\DeclareOption{subfigure}{\caption@twozerofalse\caption@package{subfigure}{1}}
  133 +\DeclareOption{none}{\caption@twozerofalse
  134 + \caption@package{float}{0}\caption@package{longtable}{0}%
  135 + \caption@package{subfigure}{0}}
  136 +\DeclareOption{all}{\ExecuteOptions{float,longtable,subfigure}}
  137 +\DeclareOption{ruled}{}
  138 +\DeclareOption{ignoreLTcapwidth}{\ignoreLTcapwidthtrue}
  139 +\DeclareOption{debug}{\caption@debugtrue}
  140 +\newif\ifcaption@debug
  141 +\newif\ifcaption@twozero
  142 +\normalcaptionparams
  143 +\ExecuteOptions{none,normal}
  144 +\caption@twozerotrue
  145 +\ProcessOptions*
  146 +\ifcaption@twozero
  147 + \PackageInfo{caption2}{Running in caption2 v2.0 compatibility mode}
  148 +\fi
  149 +\def\captionof{\@ifstar{\caption@of{\caption*}}{\caption@of\caption}}
  150 +\newcommand*\caption@of[2]{\def\@captype{#2}#1}
  151 +\@ifundefined{abovecaptionskip}{%
  152 + \newlength\abovecaptionskip\setlength\abovecaptionskip{10\p@}}{}
  153 +\@ifundefined{belowcaptionskip}{%
  154 + \newlength\belowcaptionskip\setlength\belowcaptionskip{0\p@}}{}
  155 +\newdimen\captionlinewidth
  156 +\renewcommand\@makecaption[2]{%
  157 + \vskip\abovecaptionskip
  158 + \captionlinewidth\hsize
  159 + \def\captionlabel{#1}%
  160 + \def\captiontext{#2}%
  161 + \usecaptionstyle{\caption@style}%
  162 + \vskip\belowcaptionskip}
  163 +\newcommand*\usecaptionstyle[1]{%
  164 + \ifx\captiontext\relax
  165 + \PackageError{caption2}{You can't use \protect#1
  166 + in normal text}{The usage of \protect#1 is only
  167 + allowed inside code declared with\MessageBreak \protect\defcaptionstyle,
  168 + \protect\newcaptionstyle \space or \protect\renewcaptionstyle.
  169 + \space\caption@eh}
  170 + \else
  171 + \@ifundefined{caption@@#1}%
  172 + {\PackageError{caption2}{Caption style `#1' undefined}{\caption@eh}}%
  173 + {\@nameuse{caption@@#1}}
  174 + \fi}
  175 +\newcommand*\caption@makecaption[1]{%
  176 + \ifcaptionlabel
  177 + \def\caption@label{{\captionlabelfont\captionlabel\captionlabeldelim}\captionlabelsep}%
  178 + \else
  179 + \let\caption@label\@empty
  180 + \fi
  181 + \usecaptionmargin\captionfont
  182 + \onelinecaption{\caption@label\captiontext}%
  183 + {\@nameuse{caption@@@#1}}}
  184 +\newcommand*\caption@@@normal{%
  185 + \caption@label\captiontext\par}
  186 +\newcommand*\caption@@@center{%
  187 + \centering\caption@label\captiontext\par}%
  188 +\newcommand*\caption@centerlast{%
  189 + \advance\leftskip by 0pt plus 1fil%
  190 + \advance\rightskip by 0pt plus -1fil%
  191 + \parfillskip0pt plus 2fil\relax}
  192 +\newcommand*\caption@@@centerlast{%
  193 + \caption@centerlast\caption@label\captiontext\par}
  194 +\newcommand*\caption@@@flushleft{%
  195 + \raggedright\caption@label\captiontext\par}%
  196 +\newcommand*\caption@@@flushright{%
  197 + \raggedleft\caption@label\captiontext\par}%
  198 +\newcommand*\caption@@@hang{%
  199 + \sbox\@tempboxa{\caption@label}%
  200 + \hangindent\wd\@tempboxa\noindent
  201 + \usebox\@tempboxa\caption@hangplus\captiontext\par}
  202 +\newcommand*\caption@hangplus{}
  203 +\newcommand*\caption@@@hang@center{%
  204 + \let\caption@hangplus\centering\caption@@@hang}
  205 +\newcommand*\caption@@@hang@centerlast{%
  206 + \let\caption@hangplus\caption@centerlast\caption@@@hang}
  207 +\newcommand*\caption@@@hang@flushleft{%
  208 + \let\caption@hangplus\raggedright\caption@@@hang}
  209 +\newcommand*\caption@@@indent{%
  210 + \hangindent\captionindent\noindent
  211 + \caption@label\captiontext\par}
  212 +\newcommand\onelinecaption[1]{%
  213 + \let\next\@firstofone
  214 + \ifonelinecaptions
  215 + \sbox\@tempboxa{#1}%
  216 + \ifdim\wd\@tempboxa >\captionlinewidth
  217 + \else
  218 + \def\next{{\centering\usebox{\@tempboxa}\par}\@gobble}%
  219 + \fi
  220 + \fi\next}
  221 +\newcommand*\usecaptionmargin{%
  222 + \ifcaptionwidth
  223 + \leftskip\captionlinewidth
  224 + \advance\leftskip by -\captionwidth
  225 + \divide\leftskip by 2
  226 + \rightskip\leftskip
  227 + \captionlinewidth\captionwidth
  228 + \else
  229 + \leftskip\captionmargin
  230 + \rightskip\captionmargin
  231 + \advance\captionlinewidth by -2\captionmargin
  232 + \fi}
  233 +\renewcommand*\caption@package[3]{%
  234 + \if1\@nameuse{caption@pkt@#1}%
  235 + \@ifundefined{#2}%
  236 + {\let\next\AtBeginDocument}%
  237 + {\let\next\@firstofone}%
  238 + \else
  239 + \ifcaption@twozero
  240 + \@ifundefined{#2}{#3\let\next\@gobble}{%
  241 + \PackageWarning{caption2}{%
  242 + The `#1' package will be supported without explicit option %
  243 + (v2.0 compatibility issue)}%
  244 + \let\next\@firstofone}%
  245 + \else
  246 + #3\let\next\@gobble
  247 + \fi
  248 + \fi
  249 + \expandafter\let\csname caption@pkt@#1\endcsname\undefined
  250 + \ifcaption@debug
  251 + \ifx\next\@gobble\PackageInfo{caption2}{#1 => gobble}%
  252 + \else\ifx\next\@firstofone\PackageInfo{caption2}{#1 => firstofone}%
  253 + \else\ifx\next\AtBeginDocument\PackageInfo{caption2}{#1 => AtBeginDocument}%
  254 + \else\PackageInfo{caption2}{#1 => ???}\fi\fi\fi
  255 + \fi
  256 + \next}
  257 +\caption@package{float}{floatc@plain}{}{%
  258 + \ifx\floatc@plain\relax
  259 + \PackageWarning{caption2}{%
  260 + Option `float' was set but there is no float package loaded}
  261 + \else
  262 + \PackageInfo{caption2}{float package v1.2 (or newer) detected}
  263 + \newcommand\caption@floatc[3]{%
  264 + \ifx\captionlabelfont\@empty
  265 + \let\captionlabelfont\@fs@cfont
  266 + \fi
  267 + \captionlinewidth\hsize
  268 + \def\captionlabel{#2}%
  269 + \def\captiontext{#3}%
  270 + \usecaptionstyle{#1}}
  271 + \renewcommand*\floatc@plain{\caption@floatc{\caption@style}}
  272 + \@ifpackagewith{caption2}{ruled}{%
  273 + \dummycaptionstyle{ruled}{\onelinecaptionsfalse\setcaptionmargin{\z@}}%
  274 + }{%
  275 + \newcaptionstyle{ruled}{%
  276 + \ifcaptionlabel
  277 + {\@fs@cfont\captionlabel}\space%
  278 + \fi\captiontext\par}%
  279 + }
  280 + \renewcommand*\floatc@ruled{\caption@floatc{ruled}}
  281 + \renewcommand*\caption@of[2]{\def\@captype{#2}%
  282 + \@ifundefined{fst@#2}{}{%
  283 + \@nameuse{fst@#2}%
  284 + \@ifundefined{@float@setevery}{}{\@float@setevery{#2}}%
  285 + \let\caption@fs@capt\@fs@capt
  286 + \let\@fs@capt\caption@of@float}
  287 + #1}
  288 + \newcommand\caption@of@float[2]{\egroup
  289 + \vskip\abovecaptionskip
  290 + \normalsize\caption@fs@capt{#1}{#2}%
  291 + \vskip\belowcaptionskip
  292 + \bgroup}%
  293 + \fi}
  294 +\caption@package{longtable}{LT@makecaption}{}{%
  295 + \ifx\LT@makecaption\relax
  296 + \PackageWarning{caption2}{%
  297 + Option `longtable' was set but there is no longtable package loaded}
  298 + \else
  299 + \PackageInfo{caption2}{longtable package v3.15 (or newer) detected}
  300 + \dummycaptionstyle{longtable}{}
  301 + \renewcommand\LT@makecaption[3]{%
  302 + \LT@mcol\LT@cols c{\hbox to\z@{\hss\parbox[t]\hsize{%
  303 + \ifignoreLTcapwidth
  304 + \else
  305 + \setcaptionwidth\LTcapwidth
  306 + \fi
  307 + \captionlinewidth\hsize
  308 + \captionlabelfalse#1\captionlabeltrue
  309 + \def\captionlabel{#2}%
  310 + \def\captiontext{#3}%
  311 + \usecaptionstyle{longtable}%
  312 + \endgraf\vskip\baselineskip}%
  313 + \hss}}}
  314 + \fi}
  315 +\newcommand*\setsubcapstyle{%
  316 + \@ifundefined{subcapraggedrightfalse}{%
  317 + \newif\ifsubcapraggedright}{}%
  318 + \ifsubcaphang
  319 + \ifsubcapcenter
  320 + \subcapstyle{hang+center}%
  321 + \else\ifsubcapcenterlast
  322 + \subcapstyle{hang+centerlast}%
  323 + \else\ifsubcapraggedright
  324 + \subcapstyle{hang+flushleft}%
  325 + \else
  326 + \subcapstyle{hang}%
  327 + \fi\fi\fi
  328 + \else\ifsubcapcenter
  329 + \subcapstyle{center}%
  330 + \else\ifsubcapcenterlast
  331 + \subcapstyle{centerlast}%
  332 + \else\ifsubcapraggedright
  333 + \subcapstyle{flushleft}%
  334 + \else
  335 + \subcapstyle{normal}%
  336 + \fi\fi\fi\fi}
  337 +\newcommand\caption@makesubcaption[2]{%
  338 + \renewcommand*\captionfont{\subcapsize\subcapfont}%
  339 + \renewcommand*\captionlabelfont{\normalfont\subcapsize\subcaplabelfont}%
  340 + \let\captionlabeldelim\subcaplabeldelim
  341 + \let\captionlabelsep\subcaplabelsep
  342 + \ifsubfigcapwidth\captionwidthtrue\else\captionwidthfalse\fi
  343 + \setlength\captionmargin\subfigcapmargin
  344 + \setlength\captionwidth\subfigcapwidth
  345 + \captionindent\subcapindent
  346 + \ifsubcapnooneline\onelinecaptionsfalse\else\onelinecaptionstrue\fi
  347 + \hbox to\@tempdima{%
  348 + \caption@subfig@hss\parbox[t]{\@tempdima}{%
  349 + \captionlinewidth\@tempdima
  350 + \captionlabeltrue
  351 + \def\captionlabel{#1}%
  352 + \def\captiontext{\ignorespaces #2}%
  353 + \usecaptionstyle{\caption@substyle}}%
  354 + \caption@subfig@hss}}
  355 +\caption@package{subfigure}{@makesubfigurecaption}{%
  356 + \let\setsubcapstyle\undefined
  357 + \let\caption@makesubcaption\undefined}{%
  358 + \ifx\@makesubfigurecaption\relax
  359 + \PackageWarning{caption2}{%
  360 + Option `subfigure' was set but there is no subfigure package loaded}
  361 + \let\setsubcapstyle\undefined
  362 + \let\caption@makesubcaption\undefined
  363 + \else
  364 + \ifx\subcapfont\undefined
  365 + \PackageInfo{caption2}{subfigure package v2.0 detected}
  366 + \let\subcapfont\@empty
  367 + \newcommand*\subfigcapwidth{\z@}
  368 + \newcommand*\setsubcapmargin{%
  369 + \subfigcapwidthfalse
  370 + \renewcommand*\subfigcapmargin}
  371 + \newcommand*\setsubcapwidth{%
  372 + \subfigcapwidthtrue
  373 + \renewcommand*\subfigcapwidth}
  374 + \newcommand*\subcaplabelsep{\space}
  375 + \let\caption@subfig@hss\hfil
  376 + \else
  377 + \PackageInfo{caption2}{subfigure package v2.1 (or newer) detected}
  378 + \newdimen\subfigcapwidth
  379 + \newcommand*\setsubcapmargin{%
  380 + \subfigcapwidthfalse
  381 + \setlength\subfigcapmargin}
  382 + \newcommand*\setsubcapwidth{%
  383 + \subfigcapwidthtrue
  384 + \setlength\subfigcapwidth}
  385 + \newcommand*\subcaplabelsep{\hskip\subfiglabelskip}
  386 + \let\caption@subfig@hss\hss
  387 + \fi
  388 + \newif\ifsubfigcapwidth
  389 + \newdimen\subcapindent
  390 + \newcommand*\subcaplabeldelim{}
  391 + \newcommand*\subcapstyle[1]{%
  392 + \expandafter\ifx\csname caption@@#1\endcsname\relax
  393 + \PackageError{caption2}{Undefined caption style `#1'}{\caption@eh}%
  394 + \else
  395 + \def\caption@substyle{#1}%
  396 + \fi}
  397 + \setsubcapstyle
  398 + \renewcommand*\@thesubfigure{\thesubfigure}
  399 + \renewcommand*\@thesubtable{\thesubtable}
  400 + \let\@makesubfigurecaption\caption@makesubcaption
  401 + \let\@makesubtablecaption\caption@makesubcaption
  402 + \fi}
  403 +\let\caption@package\undefined
  404 +\endinput
  405 +%%
  406 +%% End of file `caption2.sty'.
... ...
cbsoft2017/content/01-introduction.tex 0 → 100644
... ... @@ -0,0 +1,59 @@
  1 +\section*{Introdução}
  2 +\label{sec:intro}
  3 +
  4 +O Software Público Brasileiro (SPB) é um programa do Governo Federal Brasileiro
  5 +para promover o compartilhamento e a colaboração em soluções de software
  6 +livre\footnote{Neste texto, usamos o termo software livre como referente à Free
  7 +and Open Source Software (FOSS).} para a administração pública. Um Software
  8 +Público Brasileiro é considerado um bem público e o governo federal assume
  9 +algumas responsabilidades relacionadas ao seu uso, mas tem os mesmos princípios
  10 +de desenvolvimento de software livre, tal qual a tendência à descentralização
  11 +na tomada de decisões, o compartilhamento de informações e do desenvolvimento
  12 +(código), e a interação contínua com seus usuários. Em 2007, o governo federal
  13 +lançou o portal SPB com o objetivo de compartilhar projetos de software livre
  14 +desenvolvidos pelo governo brasileiro. Adicionalmente, a Instrução Normativa
  15 +(IN 04/2012) determina que os agentes públicos devem priorizar as soluções
  16 +disponíveis no Portal SPB. Em suma, a aquisição de uma solução proprietária
  17 +deve ser explicitamente justificada ao demonstrar que não há alternativa
  18 +adequada no Portal SPB.
  19 +
  20 +Entretanto, desde 2009, o Portal SPB teve vários problemas técnicas. O código
  21 +original da plataforma não estava mais sendo desenvolvido, e havia uma grande
  22 +quantidade de dívidas técnicas para superar. Depois de alguns eventos e
  23 +encontros para coletar os requisitos via os agentes do governo federal e da
  24 +sociedade, foi desenvolvida, entre janeiro de 2014 e junho de 2016, uma nova
  25 +plataforma para o Portal SPB, pela Universidade de Brasília (UnB) e a
  26 +Universidade de São Paulo (USP) em parceria com o Ministério de Orçamento,
  27 +Planejamento e Gestão (MP). Este foi projetado como uma plataforma integrada
  28 +para desenvolvimento de software colaborativo, e inclui funcionalidades para
  29 +redes sociais, listas de discussão, sistema de controle de versão e
  30 +monitoramento de qualidade de código-fonte. Para coordenar e desenvolver esse
  31 +projeto durante 30 meses, a UnB recebeu do Governo Federal Brasileiro um total
  32 +de 2.619.965,00 reais.
  33 +
  34 +O projeto foi desenvolvido por uma equipe de 3 professores, 2 estudantes de
  35 +mestrado e cerca de 50 alunos de graduação (não todos ao mesmo tempo),
  36 +juntamente com 2 designers profissionais e 6 desenvolvedores sêniors da
  37 +comunidade software livre. Os professores e todos os estudantes de graduação
  38 +eram da UnB e os mestrandos eram da USP. Quanto aos designers e desenvolvedores
  39 +seniores, 7 dos 8 viviam fora de Brasília. Em outras palavras, nós tínhamos uma
  40 +equipe trabalhando em um ambiente virtual colaborativo e distribuído.
  41 +
  42 +Todo o desenvolvimento foi feito de forma aberta, e as mudanças que
  43 +precisávamos nas ferramentas foram devolvidas às suas respectivas comunidades.
  44 +Nosso processo foi baseado em práticas ágeis e nos mecanismos empíricos das
  45 +comunidades de software livre. Definimos ciclos de desenvolvimento e lançamos 5
  46 +versões do novo SPB Portal. A primeira versão (beta) foi disponibilizada em
  47 +setembro de 2014, apenas 9 meses desde o início do projeto. O antigo portal foi
  48 +desligado em setembro de 2015. Por fim, a última versão foi entregue em junho
  49 +de 2016.
  50 +
  51 +Neste relato temos como agenda apresentarmos uma visão geral dessa nova geração
  52 +do Portal SPB, bem como, compartilharmos nossa metodologia e processo de
  53 +desenvolvimento desse projeto ao trabalharmos com o governo federal brasileiro
  54 +para cumprir suas exigências, ao mesmo tempo ser o mais fiel possível às
  55 +comunidades de software livre envolvidas. Além disso, discutiremos várias
  56 +lições aprendidas para fornecer um ambiente virtual colaborativo e distribuído,
  57 +envolvendo uma grande equipe de estudantes de graduação e desenvolvedores
  58 +sêniors remotos.
  59 +
... ...
cbsoft2017/content/04-architecture.tex 0 → 100644
... ... @@ -0,0 +1,69 @@
  1 +\section{Visão geral do novo portal SPB}
  2 +\label{sec:architecture}
  3 +
  4 +Com base na extensa lista de requisitos funcionais definidos pelo Governo
  5 +Federal do Brasil, selecionamos alguns sistemas livres compor a solução
  6 +proposta para o novo SPB. Avaliamos os sistemas que juntos poderiam fornecer o
  7 +maior sub-conjunto possível dos requisitos. Nós também estávamos convencidos de
  8 +que seria impossível fornecer todas as funcionalidade com uma única ferramenta.
  9 +
  10 +Do ponto de vista da arquitetura, dois requisitos eram importantes para a nova
  11 +plataforma:
  12 +
  13 +\begin{enumerate}
  14 +\item \textit{Integrar sistemas livres existentes}, com diferenças mínimas de suas versões originais;
  15 +\item \textit{Fornecer uma interface de usuário unificada} entre os diferentes sistemas, bem como a autenticação centralizada.
  16 +\end{enumerate}
  17 +
  18 +A adoção de sistemas livres existentes e a minimização de mudanças feitas
  19 +localmente tiveram como objetivo ser capazes de atualizar para versões mais
  20 +recentes do software original, nos beneficiando pelas melhorias e manutenção feitas
  21 +pelas comunidades de projetos existentes. Proporcionar uma interface de usuário
  22 +consistente em cima dessas diferentes ferramentas era necessária para fazer a
  23 +transição entre os diferentes sistemas sem a percepção do ponto de vista dos
  24 +usuários, ou seja, sem confundí-lo através de interfaces completamente
  25 +diferentes ao interagir com o portal.
  26 +
  27 +Para o primeiro requisito, identificamos quatro sistemas principais que exigiam
  28 +equipes especializadas para o trabalho no processo de integração. As equipes
  29 +aprenderam a desenvolver para os sistemas designados e contribuíram para as
  30 +comunidades originais, de modo que a versão que usamos não era
  31 +significativamente diferente do original.
  32 +
  33 +Ao final do projeto, o portal SPB foi composto por mais de dez sistemas, como
  34 +Colab, Noosfero, Mezuro, Gitlab, Mailman, Postfix e Munin. A seguir
  35 +apresentamos os mais relevantes, bem como como eles foram integrados na
  36 +plataforma.
  37 +
  38 +\begin{itemize}
  39 +
  40 +\item \textbf{Colab\footnote{\url{https://github.com/colab}}:} é uma plataforma
  41 +de integração de sistemas para aplicações web. Um de seus objetivos é permitir
  42 +que diferentes aplicações sejam combinadas de tal forma que um usuário não note
  43 +a mudança entre as aplicações. Para isso, o Colab oferece autenticação
  44 +centralizada, consistência visual, retransmissão de eventos entre aplicações e
  45 +mecanismo de busca integrado.
  46 +
  47 +\item \textbf{Noosfero\footnote{\url{http://noosfero.org}}:} é um software para
  48 +redes sociais e de colaboração. Além dos recursos clássicos de redes sociais,
  49 +ele também fornece recursos de publicação de conteúdo, como blogs e CMS
  50 +(\textit{Content Management System}) de propósito geral. A maioria das
  51 +interações do usuário com o novo SPB são através do Noosfero: registro do usuário,
  52 +páginas do projeto e de documentação e formulários de contato.
  53 +
  54 +\item \textbf{Gitlab\footnote{\url{http://gitlab.com}}:} é um gerenciador web
  55 +de repositórios Git com páginas wiki e recursos de \textit{issue tracker}. O
  56 +Gitlab é uma plataforma livre e se concentra em oferecer uma solução para
  57 +desenvolvimento colaborativo em torno do repositório.
  58 +
  59 +\item \textbf{Mezuro\footnote{\url{http://mezuro.org/}}:} é uma plataforma para
  60 +coletar métricas de código-fonte com o objetivo de monitorar a qualidade
  61 +interna de projetos de software livre escrito em C, C ++, Java, Python, Ruby ou
  62 +PHP.
  63 +
  64 +\end{itemize}
  65 +
  66 +Do ponto de vista prático, a plataforma SPB foi implantada em 7 máquinas
  67 +virtuais com diferentes
  68 +funções\footnote{\url{https://softwarepublico.gov.br/doc/arquitetura.html}}.
  69 +
... ...
cbsoft2017/content/07-process.tex 0 → 100644
... ... @@ -0,0 +1,175 @@
  1 +\section{Processo e organização do desenvolvimento}
  2 +\label{sec:process}
  3 +
  4 +A nossa equipe de desenvolvimento era composta por profissionais com diferentes
  5 +níveis e habilidades, sendo a maioria deles estudantes de graduação de
  6 +engenharia de software (a partir do 4º semestre de curso). Uma vez que os
  7 +alunos não podiam dedicar muitas horas por semana ao projeto, eles sempre
  8 +tiveram a flexibilidade para negociar seus horários de trabalho durante o
  9 +semestre, a fim de não prejudicar a sua formação. Sua rotina de trabalho diária
  10 +no projeto incluiu programação e tarefas de DevOps (contabilizando 16
  11 +horas-semanais).
  12 +
  13 +O desenvolvimento do projeto SPB exigiu uma vasta experiência, que os alunos de
  14 +graduação geralmente ainda não têm. Por essa razão, alguns desenvolvedores
  15 +sênior se juntaram ao projeto para ajudar com as questões mais difíceis e
  16 +transferir conhecimento aos alunos. Sua principal tarefa era fornecer soluções
  17 +para problemas complexos. Como esses profissionais são muito hábeis e o projeto
  18 +não poderia financiar um trabalho de tempo integral, eles trabalharam
  19 +parcialmente no projeto (20 horas-semanais). Além disso, eles viviam em estados
  20 +diferentes espalhados pelo Brasil, ou até outros países, o que levou muita da
  21 +comunicação a ser on-line.
  22 +
  23 +Em resumo, nosso processo de trabalho foi baseado em práticas de
  24 +desenvolvimento de software livre e colaborativo. O processo de
  25 +desenvolvimento foi definido com base na adaptação de diferentes práticas ágeis e de software livre, destacando o alto grau de automação
  26 +resultante das práticas de DevOps. Assim, o processo de trabalho foi executado
  27 +de forma cadenciada e contínua.
  28 +
  29 +Finalmente, o último grupo de participantes desse projeto foi composto por
  30 +funcionários do Ministério
  31 +do Planejamento, Desenvolvimento e Gestão (MP). Todas as decisões do projeto,
  32 +validações e definições de escopo foram feitas com eles. Dessa forma,
  33 +desenvolvemos produtos de software de forma incremental, com lançamentos
  34 +alinhados aos objetivos estratégicos do negócio. Como se pode ver, o projeto
  35 +tinha muitos tipos diferentes de \textit{stakeholders} que tinham de ser
  36 +organizados e sincronizados.
  37 +
  38 +\subsection{Organização da equipe}
  39 +
  40 +Aproximadamente 70\% das equipes de desenvolvimento foram compostas por
  41 +estudantes de engenharia de software da UnB e que trabalharam fisicamente no mesmo
  42 +laboratório. Cada aluno tinha seu próprio horário baseado em suas aulas, o que
  43 +complicava a implementação da programação em pares. Os desenvolvedores sênior
  44 +tentavam sincronizar sua agenda com os alunos em sua sub-equipe. Para lidar com
  45 +esse ambiente, tivemos algumas regras básicas que guiaram a organização do
  46 +projeto:
  47 +
  48 +\begin{enumerate}
  49 +\item As aulas têm alta prioridade para estudantes de graduação;
  50 +\item Trabalhe em pares sempre que possível (local com os demais estudantes ou
  51 + remotamente com um sênior).
  52 +\item Deve haver uma manhã ou uma tarde por semana quando \emph{todos} deverem
  53 + estar juntos fisicamente no laboratório (exceto, é claro, os membros da
  54 + equipe remota, mas que estarão on-line).
  55 +\item A cada 2 ou 3 meses, os desenvolvedores sêniors (residentes no Brasil)
  56 + voaria e trabalharia ao lado dos alunos por uma semana.
  57 +\end{enumerate}
  58 +
  59 +Com as regras acima, dividimos todo o projeto em quatro equipes diferentes:
  60 +Colab, Noosfero, Design e DevOps. Cada equipe tinha um líder (\textit{coach})
  61 +responsável por reduzir o problema de comunicação com as outras equipes e
  62 +ajudar os membros a se organizar da melhor maneira para todos (sempre
  63 +respeitando seu tempo de trabalho). O \textit{coach} sempre foi um dos alunos
  64 +que trabalhava como desenvolvedor na equipe com o dever extra de registar as
  65 +tarefas atuais desenvolvidas na iteração (\textit{sprint}) e com a
  66 +responsabilidade de conversar com outras equipes. Uma coisa importante a
  67 +observar é a mutabilidade da equipe e do \textit{coach}, pois durante o projeto
  68 +muitos alunos mudaram de equipes para tentar ter diferentes experiências em
  69 +diversas áreas.
  70 +
  71 +Uma característica das equipes foi a presença de (pelo menos) um sênior por
  72 +equipe. Isso era essencial, porque as decisões difíceis e os problemas
  73 +complexos, geralmente, foram resolvidos ao consultá-los. Essa dinâmica
  74 +incentivamos aos demais alunos a terem o mesmo compartamento do \textit{coach}
  75 +mesmo sem serem. Por fim, os desenvolvedores sêniors trabalharam diretamente
  76 +com os alunos, e isso foi importante para dar ao graduando a oportunidade de
  77 +interagir com profissionais experientes em sua área e manter o conhecimento
  78 +fluindo no projeto.
  79 +
  80 +Por fim, tivemos ainda dois últimos elementos da organização da equipe que
  81 +foram essenciais para a harmonia do projeto: o \textit{meta-coach} e
  82 +professores. O primeiro era um engenheiro de software recentemente graduado
  83 +(nossos ex-alunos) e que queria continuar trabalhando no projeto; estes últimos
  84 +eram professores que orquestraram todas as interações entre todos os membros do
  85 +projeto, inclusive do governo federal. O \textit{meta-coach} normalmente
  86 +trabalhava em uma equipe específica e tinha a tarefa extra de conhecer o estado
  87 +atual de todas as equipes. Os professores e \textit{meta-coach} trabalharam
  88 +juntos para reduzir o problema de comunicação entre todas as equipes (o que
  89 +tornava-se mais complexo conforme a evolução do volume de trabalho). Por
  90 +último, todas as tarefas burocráticas, como a elaboração de relatórios sobre o
  91 +progresso do projeto para o Ministério, foi tratada pelos professores, mas com
  92 +o envolvimento de toda a equipe.
  93 +
  94 +\subsection{Comunicação e gestão das tarefas}
  95 +
  96 +Nossa equipe tinha muitas pessoas trabalhando em conjunto, e a maioria dos
  97 +sêniors trabalhavam remotamente. Além disso, tentamos manter nosso trabalho
  98 +completamente transparente para o governo brasileiro e os cidadãos interessados
  99 +em seguir o projeto. Para lidar com esses casos, usamos um conjunto de
  100 +ferramentas de comunicação e outras para gerenciar o projeto.
  101 +
  102 +Quando um aluno tinha que trabalhar em par com um sênior, normalmente, eles
  103 +usavam o hangout do Google para a comunicação e eles compartilhavam uma sessão
  104 +de terminal GNU/Linux com o tmate, o que lhes permitia compartilhar o mesmo
  105 +editor, com ambos digitando e vendo a tela. Para perguntas e discussão rápida,
  106 +usamos o IRC. Para a notificação geral, usamos as listas de discussão.
  107 +
  108 +Para a gestão do projeto utilizávamos o próprio portal SPB; Primeiro para
  109 +validá-lo por nós mesmos, e também porque ele tem todas as ferramentas
  110 +necessárias para o nosso projeto. Basicamente, criamos uma página Wiki, no
  111 +Gitlab integrado ao SPB, com um mapeamento entre as visões estratégica, tática
  112 +e operacional. Do ponto de vista prático, um ``milestone'' no GitLab era uma
  113 +``História de Usuário" (funcionalidade) e um ou mais ``issues'' no GitLab era
  114 +as tarefas para o desenvolvimento da funcionalidade em questão. Com essa
  115 +abordagem, conseguimos dois objetivos importantes: manter toda a gestão o mais
  116 +próximo possível do código-fonte e acompanhar cada funcionalidade desenvolvida
  117 +durante o projeto (uma vez que nós mesmo nos tornamos usuários reais da
  118 +plataforma).
  119 +
  120 +\subsection{Acompanhamento e gerenciamento de projeto de alto nível}
  121 +
  122 +O governo brasileiro costuma trabalhar com o desenvolvimento de software de uma
  123 +forma mais tradicional, diferentemente de nós com métodos ágeis e software
  124 +livre. Essa dissonância nos causou um ruído de comunicação com o governo. Foi
  125 +especialmente difícil convencê-los a aceitar a ideia de escopo aberto e
  126 +desenvolvimento ágil. Entretanto, depois de meses de trabalho e mostrando
  127 +resultados, eles deixaram de resistir aos métodos empíricos.
  128 +
  129 +Definimos algum nível de granularidade de reunião para evitar gerar demasiada
  130 +sobrecarga para os desenvolvedores. Tínhamos reuniões estratégica mensal e
  131 +reuniões planejamento e revisão a cada 15 dias. Na reunião estratégica,
  132 +geralmente, definimos as prioridades e as funcionalidades importantes para o
  133 +governo. Normalmente, os professores, os \textit{coaches} de cada equipe, os
  134 +\textit{meta-coaches} e alguns analistas do Ministério do Planejamento
  135 +participavam dessa reunião. Em geral, discutíamos o que a equipe já produziu
  136 +desde nossa última reunião e definíamos as funcionalidades para a próxima
  137 +versão. Observe que apenas parte da equipe participava dessas reuniões
  138 +estratégicas, mas todos os estudantes interessados estavam convidados a
  139 +participar (pois muitos estudantes quiseram essa experiência durante o
  140 +projeto).
  141 +
  142 +Depois dos encontros estratégicos com os principais atores envolvidos do
  143 +governo, tínhamos um turno de planejamento com todas as equipes juntas. Nessa
  144 +parte, cada equipe trabalhava junto para converter os requisitos em partes
  145 +menores (histórias de usuário) que era representadas como ``Épicos'' da
  146 +``release'' em desenvolvimento. Cada \textit{coach} era responsável pela
  147 +condução do planejamento, e depois a equipe toda a registrava na página wiki do
  148 +projeto (wiki fornecido pelo Gitlab do SPB). Baseado nos ``épicos'', a cada 15
  149 +dias a equipe gerava um o planejamento da iteração/ciclo de desenvolvimento
  150 +(com os pequenos passos dos problemas mapeados). Para manter o governo
  151 +brasileiro sempre atualizado, convidávamos-os a trabalhar conosco para validar
  152 +as funcionalidades em desenvolvimento. Para isso, tínhamos uma reunião a cada
  153 +15 dia. E para manter nosso fluxo de gestão de tarefas, usando a própria
  154 +plataforma do SPB, especialmente o Gitlab, tínhamos:
  155 +
  156 +\begin{enumerate}
  157 +
  158 +\item Temos uma organização com muitos repositórios para cada ferramenta
  159 +integrada e sub-sistema;
  160 +
  161 +\item Cada \textit{milestone} foi usado para registrar uma história de usuário;
  162 +
  163 +\item Cada \textit{release} tem uma página no wiki com a compilação da reunião
  164 +estratégica e o mapeamento sistemático das funcionalidades planejadas;
  165 +
  166 +\item Para cada \textit{milestone} (história de usuário) tem um conjunto de
  167 +\textit{issues} (tarefas) específicas, que também são mapeadas na wiki da
  168 +\textit{release}, indicando qual dupla de desenvolvedores está trabalhando na
  169 +\textit{issue} em questão.
  170 +
  171 +\end{enumerate}
  172 +
  173 +Em suma, esse fluxo de trabalho proporcionou a nós e aos participantes pelo
  174 +governo brasileiro uma rastreabilidade completa e uma visão de alto nível de
  175 +cada funcionalidade (requisito) até para o nível mais baixo (código).
... ...
cbsoft2017/content/09-lessons.tex 0 → 100644
... ... @@ -0,0 +1,116 @@
  1 +\section{Lições Aprendidas}
  2 +\label{sec:lessons}
  3 +
  4 +\textbf{Envolver alunos de graduação em projetos do mundo real, interagindo com clientes reais.}
  5 +%
  6 +Nossa equipe foi composta principalmente de estudantes de graduação em
  7 +engenharia de software, que tiveram a oportunidade de interagir com
  8 +desenvolvedores sênior e designers dentro da equipe, bem como com a equipe de
  9 +técnicos e gerentes do governo brasileiro.
  10 +%
  11 +Eles interagiram com profissionais que possuíam diversos conhecimentos e foram
  12 +capazes de participar em todos os níveis do processo de desenvolvimento de
  13 +software. Isto contribuiu para uma grande oportunidade de aprendizado, e para
  14 +a maioria deles esta foi a sua primeira experiência profissional.
  15 +
  16 +\textbf{A participação de profissionais experientes é crucial para o sucesso do projeto.}
  17 +%
  18 +Um fator importante para os alunos foi a composição das equipes com a
  19 +participação de profissionais experientes. No lado técnico, os desenvolvedores
  20 +sênior e designers lidavam com as decisões técnicas mais difíceis, criando
  21 +um ambiente de trabalho onde os alunos poderiam desenvolver suas habilidades de
  22 +forma didática e sem pressão. No lado gerencial, a participação ativa dos
  23 +professores - que são, no final, os responsáveis pelo projeto - é
  24 +crucial para garantir que a participação dos alunos seja conduzida de forma
  25 +saudável e seja um exemplo de liderar pelo exemplo.
  26 +
  27 +\textbf{Uma relação equilibrada entre academia e indústria.}
  28 +%
  29 +A experiência do projeto SPB levou o LAPPIS/UnB a desenvolver um estilo de trabalho que
  30 +demonstrou ser apropriado para um ambiente educacional que reúne academia e
  31 +indústria. A maior prioridade do ponto de vista da universidade são os alunos.
  32 +Diante disso, as atividades do projeto nunca foram priorizadas em detrimento
  33 +das aulas e outras atividades pedagógicas. Em resumo, tínhamos alunos
  34 +trabalhando em horários diferentes, a tempo parcial, localmente,
  35 +sempre respeitando suas condições individuais, mas fazendo o trabalho de
  36 +maneira coletiva, colaborativa e aberta. E mesmo sob um ambiente potencialmente
  37 +adverso, o projeto entregou a solução desejada com sucesso.
  38 +%
  39 +Ao final do projeto, notamos que as habilidades desenvolvidas pelos alunos
  40 +estavam no estado da arte da prática de engenharia de software. Depois que o
  41 +projeto terminou, tivemos membros da equipe que abraçaram com sucesso
  42 +oportunidades em organizações públicas, privadas, nacionais e internacionais,
  43 +além dos estudantes que entraram no empreendedorismo e abriram suas próprias
  44 +empresas. No início do projeto, as partes interessadas do governo brasileiro
  45 +tinham certas expectativas sobre o desenvolvimento de projetos que, digamos,
  46 +não correspondiam exatamente ao nosso trabalho baseado em práticas ágeis e de
  47 +software livre. Tivemos que desenvolver estratégias que apoiassem diferentes
  48 +culturas organizacionais. Conforme relatado na seção\ref{sec:process}, o Ministério do Planejamento é
  49 +organizado em uma estrutura organizacional hierárquica, tipicamente,
  50 +um paradigma de desenvolvimento tradicional. Portanto, tivemos que criar um
  51 +processo de ``tradução'' entre nossa equipe e os analistas do MP que gerenciaram o
  52 +projeto do lado deles.
  53 +
  54 +\textbf{Gerenciar separadamente os objetivos de nível estratégico e de nível operacional.}
  55 +%
  56 +Durante a fase inicial do projeto, a equipe de MP costumava trazer discussões
  57 +estratégicas para reuniões técnicas/operacionais, onde deveríamos discutir
  58 +decisões práticas e técnicas.
  59 +%
  60 +Isso resultou em um ambiente de comunicação e gerenciamento altamente complexo,
  61 +sobrecarregando os professores, uma vez eles eram responsáveis por
  62 +manter o alinhamento estratégico do MP sincronizado com os planejamentos de
  63 +implementação da equipe de desenvolvimento, especialmente à luz do
  64 +desmembramento cultural acima mencionado. A mistura de ambas as preocupações
  65 +nas mesmas discussões causava confusão em ambos os lados. Para o meio e fim do
  66 +projeto, conseguimos manter essas preocupações separadas, o que facilitou o
  67 +trabalho de todos os envolvidos.
  68 +
  69 +\textbf{Não aceitar más decisões técnicas por questões políticas.}
  70 +%
  71 +Nas fases iniciais do projeto, por motivação política e pessoal, os principais
  72 +atores do governo brasileiro, envolvidos na época, impuseram o uso da Colab
  73 +para orientar o desenvolvimento da nova plataforma SPB. Nossa equipe estava
  74 +totalmente contra a essa ideia, porque já sabíamos que o Colab era um projeto
  75 +muito experimental e sua adoção poderia aumentar dramaticamente a complexidade
  76 +do projeto. Mesmo nós fornecendo as razões técnicas para não utilizar Colab, MP
  77 +foi inflexível e tivemos de gerir este problema. Fizemos mudanças maciças e, ao
  78 +final do projeto, reescrevemos completamente o Colab e o tornamos estável (o
  79 +transformando em um Sistema de Sistema em camada de aplicação). É importante
  80 +notar que o MP nos obrigou a aceitar uma questão técnica baseada apenas em
  81 +interesses políticos, sem considerar todos os recursos que seriam gastos devido
  82 +a essa decisão. Ao final do projeto, verificamos que a Colab de fato consumiu a
  83 +maior quantidade do orçamento e aumentou a complexidade do projeto.
  84 +
  85 +\textbf{Considerar a sustentabilidade desde o início.}
  86 +%
  87 +No processo de implantação da plataforma SPB na estrutura do MP, tivemos que
  88 +interagir com os técnicos do MP. Fizemos vários workshops, treinamento e uma
  89 +documentação meticulosa descrevendo todos os procedimentos necessários para
  90 +atualizar a plataforma, no entanto, percebemos que os técnicos do MP
  91 +constantemente evitavam essa responsabilidade. Depois de notar essa situação,
  92 +nós organizamos uma equipe de DevOps específica que automatizou completamente
  93 +todo o procedimento de implantação. Nós simplificamos toda a implantação da
  94 +plataforma para algumas etapas: (1) configurações iniciais (apenas configuração
  95 +SSH) e (2) a execução de comandos simples para atualizar completamente a
  96 +plataforma. Ao final do projeto, observamos que os técnicos do MP sempre dependiam
  97 +do nosso apoio para atualizar a plataforma, mesmo com toda a automação
  98 +fornecida por nós. Ficamos tristemente com um sentimento de incerteza sobre o
  99 +futuro da plataforma após o término do projeto. Em retrospectiva, percebemos
  100 +que o MP dedicou analistas de sistemas e gerentes para o projeto, mas não
  101 +técnicos de operações e desenvolvedores, que deveria ter sido envolvido com o
  102 +processo para que pudessem, pelo menos, de forma confortável, fazer a manutenção
  103 +da infra-estrutura plataforma.
  104 +
  105 +Por fim, o novo portal do Software Público Brasileiro está disponível em
  106 +\url{https://softwarepublico.gov.br}. Toda a documentação, incluindo a
  107 +arquitetura detalhada e os manuais de operação, também estão disponíveis em
  108 +\url{https://softwarepublico.gov.br/doc}. Todas as ferramentas integradas são
  109 +software livre e nossas contribuições foram publicadas em repositórios abertos,
  110 +disponíveis no próprio portal SPB. Também contribuímos com funcionalidades e
  111 +melhorias para as respectivas comunidades dos projetos integrados: que
  112 +beneficiam essas comunidades, assim como nós, pois podemos compartilhar o
  113 +desenvolvimento futuro e o esforço de manutenção com outras organizações que
  114 +participam de seus projetos.
  115 +
  116 +
... ...
cbsoft2017/content/10-finals.tex 0 → 100644
... ... @@ -0,0 +1,37 @@
  1 +\section*{Audiência}
  2 +
  3 +Entendemos que lançamos uma plataforma sem precedentes para o governo
  4 +brasileiro, aplicando métodos colaborativos de desenvolvimento de software.
  5 +Este caso pode ajudar outros projetos a superar desafios similares de
  6 +engenharia de software no futuro, bem como demonstra como as universidades
  7 +podem melhorar a experiência de mundo real de seus alunos por meio desse tipo
  8 +de projeto. É um relato que atende uma ampla audiência, de estudantes à
  9 +professores, bem como, de desenvolvedores à gerentes de projetos.
  10 +
  11 +\section*{Biografia}
  12 +
  13 +{\bf Paulo Meirelles} é professor do Bacharelado em Engenharia de Software da
  14 +Universidade de Brasília. É pesquisador-colaborador do Centro de Competência em
  15 +Software Livre da Universidade de São Paulo (USP). Atualmente, está realizando
  16 +seu pós-doutorado no Departamento de Ciência da Computação no Instituto de
  17 +Matemática e Estatística da USP (IME-USP). Em 2013, concluiu seu doutorado em
  18 +Ciência da Computação no IME-USP, na área de Sistemas de Software. Foi
  19 +pesquisador visitante na Southern Illinois University Carbondale, Estados
  20 +Unidos, em 2011. Tem um amplo histórico de colaboração com a comunidade
  21 +software livre brasileira, entre outras, ministrando dezenas de palestras e
  22 +parcipando de vários paineis em eventos nacionais e internacionais nas últimas
  23 +duas décadas. Mais recentemente, coordenou a Evolução do Portal do Software
  24 +Público Brasileiro e foi consultor do projeto Participa.Br, da Secretaria-Geral
  25 +da Presidência da República, para o desenvolvimento de uma plataforma de
  26 +participação social com software livre.
  27 +\\
  28 +\\
  29 +{\bf Hilmer Neri} é professor do Bacharelado em Engenharia de Software da
  30 +Universidade de Brasília. Atualmente, está realizando
  31 +seu doutorado na COOPE-UFRJ...
  32 +
  33 +...
  34 +
  35 +...
  36 +
  37 +...
... ...
cbsoft2017/sbc-template.sty 0 → 100644
... ... @@ -0,0 +1,164 @@
  1 +% LaTeX definitions for SBC 2001 style
  2 +%
  3 +% Created by Jomi Hubner & Rafael Bordini, june 2001
  4 +% updated march 2005
  5 +
  6 +\NeedsTeXFormat{LaTeX2e}
  7 +\ProvidesPackage{sbc-template}[2001/06/09]
  8 +
  9 +% margem sup 3.5 cm: há 1,5 cm para header, + 2 cm para top
  10 +% margem inf 2.5 cm: há 1,5 cm para foot, + 1 cm para bottom
  11 +% margem esq/dir 3 cm
  12 +\RequirePackage[a4paper,top=3.5cm,left=3cm,right=3cm,bottom=2.5cm]{geometry}
  13 +
  14 +\parindent 1.27cm
  15 +\parskip 6pt
  16 +
  17 +\flushbottom
  18 +
  19 +% captions
  20 +\RequirePackage[bf,sf,footnotesize,indent]{caption2}
  21 +\setlength{\captionmargin}{0.8cm}
  22 +\renewcommand{\captionfont}{\sffamily\footnotesize\bfseries}
  23 +\renewcommand{\captionlabeldelim}{.}
  24 +
  25 +% font
  26 +\RequirePackage{times}
  27 +
  28 +\renewcommand{\normalsize}{\@setfontsize\normalsize\@xiipt\@xivpt}
  29 +\newcommand{\XIIIPT}{\@setfontsize\xiiipt{13}{17}}
  30 +\newcommand{\XVIPT}{\@setfontsize\xvipt{16}{20}}
  31 +
  32 +% new commands
  33 +\newcounter{instn}
  34 +\setcounter{instn}{1}
  35 +\newcommand{\instnum}{\arabic{instn}}
  36 +\newcommand{\inst}[1]{\ensuremath{^{#1}}}
  37 +\newcommand{\nextinstitute}{\\\mbox{}\\[-6pt] \addtocounter{instn}{1}\inst{\instnum}}
  38 +\newcommand{\email}[1]{\\\mbox{}\\[-6pt]\footnotesize\texttt{#1}}
  39 +\renewcommand{\and}{, }
  40 +
  41 +% to avoid [...] in the bibliography
  42 +% \item[] instead of \item[\@biblabel{#1}\hfill]
  43 +\def\@lbibitem[#1]#2{\item[]\if@filesw
  44 + {\let\protect\noexpand
  45 + \immediate
  46 + \write\@auxout{\string\bibcite{#2}{#1}}}\fi\ignorespaces}
  47 +\renewenvironment{thebibliography}[1]
  48 + {\section*{\refname
  49 + \@mkboth{\MakeUppercase\refname}{\MakeUppercase\refname}}%
  50 + \list{\@biblabel{\@arabic\c@enumiv}}%
  51 + {\settowidth\labelwidth{\@biblabel{#1}}%
  52 + \leftmargin\labelwidth
  53 + \advance\leftmargin\labelsep
  54 + %% changed!
  55 + \itemindent -\leftmargin
  56 + \itemsep 6pt
  57 + %%%%%%%%%%%
  58 + \@openbib@code
  59 + \usecounter{enumiv}%
  60 + \let\p@enumiv\@empty
  61 + \renewcommand\theenumiv{\@arabic\c@enumiv}}%
  62 + \sloppy
  63 + \clubpenalty4000
  64 + \@clubpenalty \clubpenalty
  65 + \widowpenalty4000%
  66 + \sfcode`\.\@m}
  67 + {\def\@noitemerr
  68 + {\@latex@warning{Empty `thebibliography' environment}}%
  69 + \endlist}
  70 +
  71 +
  72 +% itens
  73 +\setlength\leftmargini {1.27cm}
  74 +\setlength\leftmargin {\leftmargini}
  75 +\setlength\leftmarginii {\leftmargini}
  76 +\setlength\leftmarginiii {\leftmargini}
  77 +\setlength\leftmarginiv {\leftmargini}
  78 +\setlength \labelsep {.5em}
  79 +\setlength \labelwidth {\leftmargini}
  80 +\addtolength\labelwidth {-\labelsep}
  81 +\def\@listI{\leftmargin\leftmargini
  82 + \parsep 0\p@ \@plus1\p@ \@minus\p@
  83 + \topsep 0\p@ \@plus2\p@ \@minus4\p@
  84 + \itemsep0\p@}
  85 +\let\@listi\@listI
  86 +\@listi
  87 +\def\@listii {\leftmargin\leftmarginii
  88 + \labelwidth\leftmarginii
  89 + \advance\labelwidth-\labelsep
  90 + \topsep 0\p@ \@plus2\p@ \@minus\p@}
  91 +\def\@listiii{\leftmargin\leftmarginiii
  92 + \labelwidth\leftmarginiii
  93 + \advance\labelwidth-\labelsep
  94 + \topsep 0\p@ \@plus\p@\@minus\p@
  95 + \parsep \z@
  96 + \partopsep \p@ \@plus\z@ \@minus\p@}
  97 +
  98 +
  99 +% sections
  100 +\renewcommand\section{\@startsection{section}{1}{\z@}%
  101 + {-6\p@ \@plus -4\p@ \@minus -4\p@}%
  102 + {0\p@ \@plus 4\p@ \@minus 4\p@}%
  103 + {\normalfont\XIIIPT\bfseries\boldmath
  104 + \rightskip=\z@ \@plus 8em\pretolerance=10000 }}
  105 +
  106 +\renewcommand\subsection{\@startsection{subsection}{2}{\z@}%
  107 + {-6\p@ \@plus -4\p@ \@minus -4\p@}%
  108 + {0\p@ \@plus 4\p@ \@minus 4\p@}%
  109 + {\normalfont\normalsize\bfseries\boldmath
  110 + \rightskip=\z@ \@plus 8em\pretolerance=10000 }}
  111 +
  112 +%\renewcommand{\thesection}{\arabic{section}.}
  113 +%\renewcommand{\thesubsection}{\thesection\arabic{subsection}.}
  114 +%\renewcommand{\thesubsubsection}{\thesubsection\arabic{subsubsection}.}
  115 +
  116 +\RequirePackage{titlesec}
  117 +\titlelabel{\thetitle.\hspace{1ex}}
  118 +
  119 +% first page
  120 +
  121 +\pagestyle{empty}
  122 +
  123 +\newcommand{\authortag}[1]{$^{#1}$}
  124 +
  125 +\def\address#1{\gdef\@address{#1}}
  126 +
  127 +\def\@maketitle{\newpage
  128 + %\null % isso dava um espaco extra antes do title
  129 + \begin{center}
  130 + %\vglue -6pt
  131 +% \vspace*{12pt}
  132 +\vspace*{-.7cm}
  133 + {\XVIPT\bf\@title\par}
  134 + \vglue 6pt plus 3pt minus 3pt
  135 + {\normalsize
  136 + \textbf{\begin{tabular}[t]{c}\@author\end{tabular}}\par}
  137 + \vglue 6pt plus 3pt minus 3pt
  138 + {\normalsize
  139 + \begin{tabular}[t]{c}\inst{\instnum}\@address\end{tabular}\par}
  140 + \vglue 6pt plus 3pt minus 3pt
  141 + \end{center}\par
  142 +}
  143 +\let\maketitleOLD\maketitle
  144 +\renewcommand{\maketitle}{\maketitleOLD\thispagestyle{empty}}
  145 +
  146 +\renewenvironment{abstract}{%
  147 + \list{}{\advance\topsep by6pt\relax%\small
  148 + \leftmargin=0.8cm
  149 + \labelwidth=\z@
  150 + \listparindent=\z@
  151 + \itemindent\listparindent
  152 + \rightmargin\leftmargin}\item[\hskip\labelsep
  153 + \bfseries\itshape Abstract.]\itshape}%
  154 + {\endlist}
  155 +
  156 +\newenvironment{resumo}{%
  157 + \list{}{\advance\topsep by6pt\relax%\small
  158 + \leftmargin=0.8cm
  159 + \labelwidth=\z@
  160 + \listparindent=\z@
  161 + \itemindent\listparindent
  162 + \rightmargin\leftmargin}\item[\hskip\labelsep
  163 + \bfseries\itshape Resumo.]\itshape}%
  164 + {\endlist}
... ...
cbsoft2017/sbc.bst 0 → 100644
... ... @@ -0,0 +1,1103 @@
  1 +%% copy of "apalike" for SBC (no comma before year in citation label)
  2 +
  3 +% BibTeX `apalike' bibliography style (24-Jan-88 version)
  4 +% Adapted from the `alpha' style, version 0.99a; for BibTeX version 0.99a.
  5 +% Copyright (C) 1988, all rights reserved.
  6 +% Copying of this file is allowed, provided that if you make any changes at all
  7 +% you name it something other than `apalike.bst'.
  8 +% This restriction helps ensure that all copies are identical.
  9 +% Differences between this style and `alpha' are generally heralded by a `%'.
  10 +% The file btxbst.doc has the documentation for alpha.bst.
  11 +%
  12 +% This style should be used with the `apalike' LaTeX style (apalike.sty).
  13 +% \cite's come out like "(Jones, 1986)" in the text but there are no labels
  14 +% in the bibliography, and something like "(1986)" comes out immediately
  15 +% after the author. Author (and editor) names appear as last name, comma,
  16 +% initials. A `year' field is required for every entry, and so is either
  17 +% an author (or in some cases, an editor) field or a key field.
  18 +%
  19 +% Editorial note:
  20 +% Many journals require a style like `apalike', but I strongly, strongly,
  21 +% strongly recommend that you not use it if you have a choice---use something
  22 +% like `plain' instead. Mary-Claire van Leunen (A Handbook for Scholars,
  23 +% Knopf, 1979) argues convincingly that a style like `plain' encourages better
  24 +% writing than one like `apalike'. Furthermore the strongest arguments for
  25 +% using an author-date style like `apalike'---that it's "the most practical"
  26 +% (The Chicago Manual of Style, University of Chicago Press, thirteenth
  27 +% edition, 1982, pages 400--401)---fall flat on their face with the new
  28 +% computer-typesetting technology. For instance page 401 anachronistically
  29 +% states "The chief disadvantage of [a style like `plain'] is that additions
  30 +% or deletions cannot be made after the manuscript is typed without changing
  31 +% numbers in both text references and list." LaTeX sidesteps the disadvantage.
  32 +%
  33 +% History:
  34 +% 15-sep-86 (SK,OP) Original version, by Susan King and Oren Patashnik.
  35 +% 10-nov-86 (OP) Truncated the sort.key$ string to the correct length
  36 +% in bib.sort.order to eliminate error message.
  37 +% 24-jan-88 (OP) Updated for BibTeX version 0.99a, from alpha.bst 0.99a;
  38 +% apalike now sorts by author, then year, then title;
  39 +% THIS `apalike' VERSION DOES NOT WORK WITH BIBTEX 0.98i.
  40 +
  41 +ENTRY
  42 + { address
  43 + author
  44 + booktitle
  45 + chapter
  46 + edition
  47 + editor
  48 + howpublished
  49 + institution
  50 + journal
  51 + key
  52 +% month not used in apalike
  53 + note
  54 + number
  55 + organization
  56 + pages
  57 + publisher
  58 + school
  59 + series
  60 + title
  61 + type
  62 + volume
  63 + year
  64 + }
  65 + {}
  66 + { label extra.label sort.label }
  67 +
  68 +INTEGERS { output.state before.all mid.sentence after.sentence after.block }
  69 +
  70 +FUNCTION {init.state.consts}
  71 +{ #0 'before.all :=
  72 + #1 'mid.sentence :=
  73 + #2 'after.sentence :=
  74 + #3 'after.block :=
  75 +}
  76 +
  77 +STRINGS { s t }
  78 +
  79 +FUNCTION {output.nonnull}
  80 +{ 's :=
  81 + output.state mid.sentence =
  82 + { ", " * write$ }
  83 + { output.state after.block =
  84 + { add.period$ write$
  85 + newline$
  86 + "\newblock " write$
  87 + }
  88 + { output.state before.all =
  89 + 'write$
  90 + { add.period$ " " * write$ }
  91 + if$
  92 + }
  93 + if$
  94 + mid.sentence 'output.state :=
  95 + }
  96 + if$
  97 + s
  98 +}
  99 +
  100 +FUNCTION {output}
  101 +{ duplicate$ empty$
  102 + 'pop$
  103 + 'output.nonnull
  104 + if$
  105 +}
  106 +
  107 +FUNCTION {output.check}
  108 +{ 't :=
  109 + duplicate$ empty$
  110 + { pop$ "empty " t * " in " * cite$ * warning$ }
  111 + 'output.nonnull
  112 + if$
  113 +}
  114 +
  115 +% apalike needs this function because
  116 +% the year has special punctuation;
  117 +% apalike ignores the month
  118 +FUNCTION {output.year.check}
  119 +{ year empty$
  120 + { "empty year in " cite$ * warning$ }
  121 + { write$
  122 + " (" year * extra.label * ")" *
  123 + mid.sentence 'output.state :=
  124 + }
  125 + if$
  126 +}
  127 +
  128 +FUNCTION {output.bibitem}
  129 +{ newline$
  130 + "\bibitem[" write$
  131 + label write$
  132 + "]{" write$
  133 + cite$ write$
  134 + "}" write$
  135 + newline$
  136 + ""
  137 + before.all 'output.state :=
  138 +}
  139 +
  140 +FUNCTION {fin.entry}
  141 +{ add.period$
  142 + write$
  143 + newline$
  144 +}
  145 +
  146 +FUNCTION {new.block}
  147 +{ output.state before.all =
  148 + 'skip$
  149 + { after.block 'output.state := }
  150 + if$
  151 +}
  152 +
  153 +FUNCTION {new.sentence}
  154 +{ output.state after.block =
  155 + 'skip$
  156 + { output.state before.all =
  157 + 'skip$
  158 + { after.sentence 'output.state := }
  159 + if$
  160 + }
  161 + if$
  162 +}
  163 +
  164 +FUNCTION {not}
  165 +{ { #0 }
  166 + { #1 }
  167 + if$
  168 +}
  169 +
  170 +FUNCTION {and}
  171 +{ 'skip$
  172 + { pop$ #0 }
  173 + if$
  174 +}
  175 +
  176 +FUNCTION {or}
  177 +{ { pop$ #1 }
  178 + 'skip$
  179 + if$
  180 +}
  181 +
  182 +FUNCTION {new.block.checkb}
  183 +{ empty$
  184 + swap$ empty$
  185 + and
  186 + 'skip$
  187 + 'new.block
  188 + if$
  189 +}
  190 +
  191 +FUNCTION {field.or.null}
  192 +{ duplicate$ empty$
  193 + { pop$ "" }
  194 + 'skip$
  195 + if$
  196 +}
  197 +
  198 +FUNCTION {emphasize}
  199 +{ duplicate$ empty$
  200 + { pop$ "" }
  201 + { "{\em " swap$ * "}" * }
  202 + if$
  203 +}
  204 +
  205 +INTEGERS { nameptr namesleft numnames }
  206 +
  207 +FUNCTION {format.names}
  208 +{ 's :=
  209 + #1 'nameptr :=
  210 + s num.names$ 'numnames :=
  211 + numnames 'namesleft :=
  212 + { namesleft #0 > }
  213 + { s nameptr "{vv~}{ll}{, jj}{, f.}" format.name$ 't := % last name first
  214 + nameptr #1 >
  215 + { namesleft #1 >
  216 + { ", " * t * }
  217 + { numnames #2 >
  218 + { "," * }
  219 + 'skip$
  220 + if$
  221 + t "others" =
  222 + { " et~al." * }
  223 + { " and " * t * }
  224 + if$
  225 + }
  226 + if$
  227 + }
  228 + 't
  229 + if$
  230 + nameptr #1 + 'nameptr :=
  231 + namesleft #1 - 'namesleft :=
  232 + }
  233 + while$
  234 +}
  235 +
  236 +FUNCTION {format.authors}
  237 +{ author empty$
  238 + { "" }
  239 + { author format.names }
  240 + if$
  241 +}
  242 +
  243 +FUNCTION {format.key} % this function is just for apalike
  244 +{ empty$
  245 + { key field.or.null }
  246 + { "" }
  247 + if$
  248 +}
  249 +
  250 +FUNCTION {format.editors}
  251 +{ editor empty$
  252 + { "" }
  253 + { editor format.names
  254 + editor num.names$ #1 >
  255 + { ", editors" * }
  256 + { ", editor" * }
  257 + if$
  258 + }
  259 + if$
  260 +}
  261 +
  262 +FUNCTION {format.title}
  263 +{ title empty$
  264 + { "" }
  265 + { title "t" change.case$ }
  266 + if$
  267 +}
  268 +
  269 +FUNCTION {n.dashify}
  270 +{ 't :=
  271 + ""
  272 + { t empty$ not }
  273 + { t #1 #1 substring$ "-" =
  274 + { t #1 #2 substring$ "--" = not
  275 + { "--" *
  276 + t #2 global.max$ substring$ 't :=
  277 + }
  278 + { { t #1 #1 substring$ "-" = }
  279 + { "-" *
  280 + t #2 global.max$ substring$ 't :=
  281 + }
  282 + while$
  283 + }
  284 + if$
  285 + }
  286 + { t #1 #1 substring$ *
  287 + t #2 global.max$ substring$ 't :=
  288 + }
  289 + if$
  290 + }
  291 + while$
  292 +}
  293 +
  294 +FUNCTION {format.btitle}
  295 +{ title emphasize
  296 +}
  297 +
  298 +FUNCTION {tie.or.space.connect}
  299 +{ duplicate$ text.length$ #3 <
  300 + { "~" }
  301 + { " " }
  302 + if$
  303 + swap$ * *
  304 +}
  305 +
  306 +FUNCTION {either.or.check}
  307 +{ empty$
  308 + 'pop$
  309 + { "can't use both " swap$ * " fields in " * cite$ * warning$ }
  310 + if$
  311 +}
  312 +
  313 +FUNCTION {format.bvolume}
  314 +{ volume empty$
  315 + { "" }
  316 + { "volume" volume tie.or.space.connect
  317 + series empty$
  318 + 'skip$
  319 + { " of " * series emphasize * }
  320 + if$
  321 + "volume and number" number either.or.check
  322 + }
  323 + if$
  324 +}
  325 +
  326 +FUNCTION {format.number.series}
  327 +{ volume empty$
  328 + { number empty$
  329 + { series field.or.null }
  330 + { output.state mid.sentence =
  331 + { "number" }
  332 + { "Number" }
  333 + if$
  334 + number tie.or.space.connect
  335 + series empty$
  336 + { "there's a number but no series in " cite$ * warning$ }
  337 + { " in " * series * }
  338 + if$
  339 + }
  340 + if$
  341 + }
  342 + { "" }
  343 + if$
  344 +}
  345 +
  346 +FUNCTION {format.edition}
  347 +{ edition empty$
  348 + { "" }
  349 + { output.state mid.sentence =
  350 + { edition "l" change.case$ " edition" * }
  351 + { edition "t" change.case$ " edition" * }
  352 + if$
  353 + }
  354 + if$
  355 +}
  356 +
  357 +INTEGERS { multiresult }
  358 +
  359 +FUNCTION {multi.page.check}
  360 +{ 't :=
  361 + #0 'multiresult :=
  362 + { multiresult not
  363 + t empty$ not
  364 + and
  365 + }
  366 + { t #1 #1 substring$
  367 + duplicate$ "-" =
  368 + swap$ duplicate$ "," =
  369 + swap$ "+" =
  370 + or or
  371 + { #1 'multiresult := }
  372 + { t #2 global.max$ substring$ 't := }
  373 + if$
  374 + }
  375 + while$
  376 + multiresult
  377 +}
  378 +
  379 +FUNCTION {format.pages}
  380 +{ pages empty$
  381 + { "" }
  382 + { pages multi.page.check
  383 + { "pages" pages n.dashify tie.or.space.connect }
  384 + { "page" pages tie.or.space.connect }
  385 + if$
  386 + }
  387 + if$
  388 +}
  389 +
  390 +FUNCTION {format.vol.num.pages}
  391 +{ volume field.or.null
  392 + number empty$
  393 + 'skip$
  394 + { "(" number * ")" * *
  395 + volume empty$
  396 + { "there's a number but no volume in " cite$ * warning$ }
  397 + 'skip$
  398 + if$
  399 + }
  400 + if$
  401 + pages empty$
  402 + 'skip$
  403 + { duplicate$ empty$
  404 + { pop$ format.pages }
  405 + { ":" * pages n.dashify * }
  406 + if$
  407 + }
  408 + if$
  409 +}
  410 +
  411 +FUNCTION {format.chapter.pages}
  412 +{ chapter empty$
  413 + 'format.pages
  414 + { type empty$
  415 + { "chapter" }
  416 + { type "l" change.case$ }
  417 + if$
  418 + chapter tie.or.space.connect
  419 + pages empty$
  420 + 'skip$
  421 + { ", " * format.pages * }
  422 + if$
  423 + }
  424 + if$
  425 +}
  426 +
  427 +FUNCTION {format.in.ed.booktitle}
  428 +{ booktitle empty$
  429 + { "" }
  430 + { editor empty$
  431 + { "In " booktitle emphasize * }
  432 + { "In " format.editors * ", " * booktitle emphasize * }
  433 + if$
  434 + }
  435 + if$
  436 +}
  437 +
  438 +FUNCTION {format.thesis.type}
  439 +{ type empty$
  440 + 'skip$
  441 + { pop$
  442 + type "t" change.case$
  443 + }
  444 + if$
  445 +}
  446 +
  447 +FUNCTION {format.tr.number}
  448 +{ type empty$
  449 + { "Technical Report" }
  450 + 'type
  451 + if$
  452 + number empty$
  453 + { "t" change.case$ }
  454 + { number tie.or.space.connect }
  455 + if$
  456 +}
  457 +
  458 +FUNCTION {format.article.crossref}
  459 +{ "In" % this is for apalike
  460 + " \cite{" * crossref * "}" *
  461 +}
  462 +
  463 +FUNCTION {format.book.crossref}
  464 +{ volume empty$
  465 + { "empty volume in " cite$ * "'s crossref of " * crossref * warning$
  466 + "In "
  467 + }
  468 + { "Volume" volume tie.or.space.connect
  469 + " of " *
  470 + }
  471 + if$
  472 + "\cite{" * crossref * "}" * % this is for apalike
  473 +}
  474 +
  475 +FUNCTION {format.incoll.inproc.crossref}
  476 +{ "In" % this is for apalike
  477 + " \cite{" * crossref * "}" *
  478 +}
  479 +
  480 +FUNCTION {article}
  481 +{ output.bibitem
  482 + format.authors "author" output.check
  483 + author format.key output % special for
  484 + output.year.check % apalike
  485 + new.block
  486 + format.title "title" output.check
  487 + new.block
  488 + crossref missing$
  489 + { journal emphasize "journal" output.check
  490 + format.vol.num.pages output
  491 + }
  492 + { format.article.crossref output.nonnull
  493 + format.pages output
  494 + }
  495 + if$
  496 + new.block
  497 + note output
  498 + fin.entry
  499 +}
  500 +
  501 +FUNCTION {book}
  502 +{ output.bibitem
  503 + author empty$
  504 + { format.editors "author and editor" output.check
  505 + editor format.key output
  506 + }
  507 + { format.authors output.nonnull
  508 + crossref missing$
  509 + { "author and editor" editor either.or.check }
  510 + 'skip$
  511 + if$
  512 + }
  513 + if$
  514 + output.year.check % special for apalike
  515 + new.block
  516 + format.btitle "title" output.check
  517 + crossref missing$
  518 + { format.bvolume output
  519 + new.block
  520 + format.number.series output
  521 + new.sentence
  522 + publisher "publisher" output.check
  523 + address output
  524 + }
  525 + { new.block
  526 + format.book.crossref output.nonnull
  527 + }
  528 + if$
  529 + format.edition output
  530 + new.block
  531 + note output
  532 + fin.entry
  533 +}
  534 +
  535 +FUNCTION {booklet}
  536 +{ output.bibitem
  537 + format.authors output
  538 + author format.key output % special for
  539 + output.year.check % apalike
  540 + new.block
  541 + format.title "title" output.check
  542 + new.block
  543 + howpublished output
  544 + address output
  545 + new.block
  546 + note output
  547 + fin.entry
  548 +}
  549 +
  550 +FUNCTION {inbook}
  551 +{ output.bibitem
  552 + author empty$
  553 + { format.editors "author and editor" output.check
  554 + editor format.key output
  555 + }
  556 + { format.authors output.nonnull
  557 + crossref missing$
  558 + { "author and editor" editor either.or.check }
  559 + 'skip$
  560 + if$
  561 + }
  562 + if$
  563 + output.year.check % special for apalike
  564 + new.block
  565 + format.btitle "title" output.check
  566 + crossref missing$
  567 + { format.bvolume output
  568 + format.chapter.pages "chapter and pages" output.check
  569 + new.block
  570 + format.number.series output
  571 + new.sentence
  572 + publisher "publisher" output.check
  573 + address output
  574 + }
  575 + { format.chapter.pages "chapter and pages" output.check
  576 + new.block
  577 + format.book.crossref output.nonnull
  578 + }
  579 + if$
  580 + format.edition output
  581 + new.block
  582 + note output
  583 + fin.entry
  584 +}
  585 +
  586 +FUNCTION {incollection}
  587 +{ output.bibitem
  588 + format.authors "author" output.check
  589 + author format.key output % special for
  590 + output.year.check % apalike
  591 + new.block
  592 + format.title "title" output.check
  593 + new.block
  594 + crossref missing$
  595 + { format.in.ed.booktitle "booktitle" output.check
  596 + format.bvolume output
  597 + format.number.series output
  598 + format.chapter.pages output
  599 + new.sentence
  600 + publisher "publisher" output.check
  601 + address output
  602 + format.edition output
  603 + }
  604 + { format.incoll.inproc.crossref output.nonnull
  605 + format.chapter.pages output
  606 + }
  607 + if$
  608 + new.block
  609 + note output
  610 + fin.entry
  611 +}
  612 +
  613 +FUNCTION {inproceedings}
  614 +{ output.bibitem
  615 + format.authors "author" output.check
  616 + author format.key output % special for
  617 + output.year.check % apalike
  618 + new.block
  619 + format.title "title" output.check
  620 + new.block
  621 + crossref missing$
  622 + { format.in.ed.booktitle "booktitle" output.check
  623 + format.bvolume output
  624 + format.number.series output
  625 + format.pages output
  626 + address output % for apalike
  627 + new.sentence % there's no year
  628 + organization output % here so things
  629 + publisher output % are simpler
  630 + }
  631 + { format.incoll.inproc.crossref output.nonnull
  632 + format.pages output
  633 + }
  634 + if$
  635 + new.block
  636 + note output
  637 + fin.entry
  638 +}
  639 +
  640 +FUNCTION {conference} { inproceedings }
  641 +
  642 +FUNCTION {manual}
  643 +{ output.bibitem
  644 + format.authors output
  645 + author format.key output % special for
  646 + output.year.check % apalike
  647 + new.block
  648 + format.btitle "title" output.check
  649 + organization address new.block.checkb
  650 + organization output
  651 + address output
  652 + format.edition output
  653 + new.block
  654 + note output
  655 + fin.entry
  656 +}
  657 +
  658 +FUNCTION {mastersthesis}
  659 +{ output.bibitem
  660 + format.authors "author" output.check
  661 + author format.key output % special for
  662 + output.year.check % apalike
  663 + new.block
  664 + format.title "title" output.check
  665 + new.block
  666 + "Master's thesis" format.thesis.type output.nonnull
  667 + school "school" output.check
  668 + address output
  669 + new.block
  670 + note output
  671 + fin.entry
  672 +}
  673 +
  674 +FUNCTION {misc}
  675 +{ output.bibitem
  676 + format.authors output
  677 + author format.key output % special for
  678 + output.year.check % apalike
  679 + new.block
  680 + format.title output
  681 + new.block
  682 + howpublished output
  683 + new.block
  684 + note output
  685 + fin.entry
  686 +}
  687 +
  688 +FUNCTION {phdthesis}
  689 +{ output.bibitem
  690 + format.authors "author" output.check
  691 + author format.key output % special for
  692 + output.year.check % apalike
  693 + new.block
  694 + format.btitle "title" output.check
  695 + new.block
  696 + "PhD thesis" format.thesis.type output.nonnull
  697 + school "school" output.check
  698 + address output
  699 + new.block
  700 + note output
  701 + fin.entry
  702 +}
  703 +
  704 +FUNCTION {proceedings}
  705 +{ output.bibitem
  706 + format.editors output
  707 + editor format.key output % special for
  708 + output.year.check % apalike
  709 + new.block
  710 + format.btitle "title" output.check
  711 + format.bvolume output
  712 + format.number.series output
  713 + address output % for apalike
  714 + new.sentence % we always output
  715 + organization output % a nonempty organization
  716 + publisher output % here
  717 + new.block
  718 + note output
  719 + fin.entry
  720 +}
  721 +
  722 +FUNCTION {techreport}
  723 +{ output.bibitem
  724 + format.authors "author" output.check
  725 + author format.key output % special for
  726 + output.year.check % apalike
  727 + new.block
  728 + format.title "title" output.check
  729 + new.block
  730 + format.tr.number output.nonnull
  731 + institution "institution" output.check
  732 + address output
  733 + new.block
  734 + note output
  735 + fin.entry
  736 +}
  737 +
  738 +FUNCTION {unpublished}
  739 +{ output.bibitem
  740 + format.authors "author" output.check
  741 + author format.key output % special for
  742 + output.year.check % apalike
  743 + new.block
  744 + format.title "title" output.check
  745 + new.block
  746 + note "note" output.check
  747 + fin.entry
  748 +}
  749 +
  750 +FUNCTION {default.type} { misc }
  751 +
  752 +MACRO {jan} {"January"}
  753 +
  754 +MACRO {feb} {"February"}
  755 +
  756 +MACRO {mar} {"March"}
  757 +
  758 +MACRO {apr} {"April"}
  759 +
  760 +MACRO {may} {"May"}
  761 +
  762 +MACRO {jun} {"June"}
  763 +
  764 +MACRO {jul} {"July"}
  765 +
  766 +MACRO {aug} {"August"}
  767 +
  768 +MACRO {sep} {"September"}
  769 +
  770 +MACRO {oct} {"October"}
  771 +
  772 +MACRO {nov} {"November"}
  773 +
  774 +MACRO {dec} {"December"}
  775 +
  776 +MACRO {acmcs} {"ACM Computing Surveys"}
  777 +
  778 +MACRO {acta} {"Acta Informatica"}
  779 +
  780 +MACRO {cacm} {"Communications of the ACM"}
  781 +
  782 +MACRO {ibmjrd} {"IBM Journal of Research and Development"}
  783 +
  784 +MACRO {ibmsj} {"IBM Systems Journal"}
  785 +
  786 +MACRO {ieeese} {"IEEE Transactions on Software Engineering"}
  787 +
  788 +MACRO {ieeetc} {"IEEE Transactions on Computers"}
  789 +
  790 +MACRO {ieeetcad}
  791 + {"IEEE Transactions on Computer-Aided Design of Integrated Circuits"}
  792 +
  793 +MACRO {ipl} {"Information Processing Letters"}
  794 +
  795 +MACRO {jacm} {"Journal of the ACM"}
  796 +
  797 +MACRO {jcss} {"Journal of Computer and System Sciences"}
  798 +
  799 +MACRO {scp} {"Science of Computer Programming"}
  800 +
  801 +MACRO {sicomp} {"SIAM Journal on Computing"}
  802 +
  803 +MACRO {tocs} {"ACM Transactions on Computer Systems"}
  804 +
  805 +MACRO {tods} {"ACM Transactions on Database Systems"}
  806 +
  807 +MACRO {tog} {"ACM Transactions on Graphics"}
  808 +
  809 +MACRO {toms} {"ACM Transactions on Mathematical Software"}
  810 +
  811 +MACRO {toois} {"ACM Transactions on Office Information Systems"}
  812 +
  813 +MACRO {toplas} {"ACM Transactions on Programming Languages and Systems"}
  814 +
  815 +MACRO {tcs} {"Theoretical Computer Science"}
  816 +
  817 +READ
  818 +
  819 +FUNCTION {sortify}
  820 +{ purify$
  821 + "l" change.case$
  822 +}
  823 +
  824 +INTEGERS { len }
  825 +
  826 +FUNCTION {chop.word}
  827 +{ 's :=
  828 + 'len :=
  829 + s #1 len substring$ =
  830 + { s len #1 + global.max$ substring$ }
  831 + 's
  832 + if$
  833 +}
  834 +
  835 +% There are three apalike cases: one person (Jones),
  836 +% two (Jones and de~Bruijn), and more (Jones et~al.).
  837 +% This function is much like format.crossref.editors.
  838 +%
  839 +FUNCTION {format.lab.names}
  840 +{ 's :=
  841 + s #1 "{vv~}{ll}" format.name$
  842 + s num.names$ duplicate$
  843 + #2 >
  844 + { pop$ " et~al." * }
  845 + { #2 <
  846 + 'skip$
  847 + { s #2 "{ff }{vv }{ll}{ jj}" format.name$ "others" =
  848 + { " et~al." * }
  849 + { " and " * s #2 "{vv~}{ll}" format.name$ * }
  850 + if$
  851 + }
  852 + if$
  853 + }
  854 + if$
  855 +}
  856 +
  857 +FUNCTION {author.key.label}
  858 +{ author empty$
  859 + { key empty$
  860 + { cite$ #1 #3 substring$ }
  861 + 'key % apalike uses the whole key
  862 + if$
  863 + }
  864 + { author format.lab.names }
  865 + if$
  866 +}
  867 +
  868 +FUNCTION {author.editor.key.label}
  869 +{ author empty$
  870 + { editor empty$
  871 + { key empty$
  872 + { cite$ #1 #3 substring$ }
  873 + 'key % apalike uses the whole key
  874 + if$
  875 + }
  876 + { editor format.lab.names }
  877 + if$
  878 + }
  879 + { author format.lab.names }
  880 + if$
  881 +}
  882 +
  883 +FUNCTION {editor.key.label}
  884 +{ editor empty$
  885 + { key empty$
  886 + { cite$ #1 #3 substring$ }
  887 + 'key % apalike uses the whole key, no organization
  888 + if$
  889 + }
  890 + { editor format.lab.names }
  891 + if$
  892 +}
  893 +
  894 +FUNCTION {calc.label}
  895 +{ type$ "book" =
  896 + type$ "inbook" =
  897 + or
  898 + 'author.editor.key.label
  899 + { type$ "proceedings" =
  900 + 'editor.key.label % apalike ignores organization
  901 + 'author.key.label % for labeling and sorting
  902 + if$
  903 + }
  904 + if$
  905 + " " % these three lines are
  906 + * % for apalike, which
  907 + year field.or.null purify$ #-1 #4 substring$ % uses all four digits
  908 + *
  909 + 'label :=
  910 +}
  911 +
  912 +FUNCTION {sort.format.names}
  913 +{ 's :=
  914 + #1 'nameptr :=
  915 + ""
  916 + s num.names$ 'numnames :=
  917 + numnames 'namesleft :=
  918 + { namesleft #0 > }
  919 + { nameptr #1 >
  920 + { " " * }
  921 + 'skip$
  922 + if$ % apalike uses initials
  923 + s nameptr "{vv{ } }{ll{ }}{ f{ }}{ jj{ }}" format.name$ 't := % <= here
  924 + nameptr numnames = t "others" = and
  925 + { "et al" * }
  926 + { t sortify * }
  927 + if$
  928 + nameptr #1 + 'nameptr :=
  929 + namesleft #1 - 'namesleft :=
  930 + }
  931 + while$
  932 +}
  933 +
  934 +FUNCTION {sort.format.title}
  935 +{ 't :=
  936 + "A " #2
  937 + "An " #3
  938 + "The " #4 t chop.word
  939 + chop.word
  940 + chop.word
  941 + sortify
  942 + #1 global.max$ substring$
  943 +}
  944 +
  945 +FUNCTION {author.sort}
  946 +{ author empty$
  947 + { key empty$
  948 + { "to sort, need author or key in " cite$ * warning$
  949 + ""
  950 + }
  951 + { key sortify }
  952 + if$
  953 + }
  954 + { author sort.format.names }
  955 + if$
  956 +}
  957 +
  958 +FUNCTION {author.editor.sort}
  959 +{ author empty$
  960 + { editor empty$
  961 + { key empty$
  962 + { "to sort, need author, editor, or key in " cite$ * warning$
  963 + ""
  964 + }
  965 + { key sortify }
  966 + if$
  967 + }
  968 + { editor sort.format.names }
  969 + if$
  970 + }
  971 + { author sort.format.names }
  972 + if$
  973 +}
  974 +
  975 +FUNCTION {editor.sort}
  976 +{ editor empty$
  977 + { key empty$
  978 + { "to sort, need editor or key in " cite$ * warning$
  979 + ""
  980 + }
  981 + { key sortify }
  982 + if$
  983 + }
  984 + { editor sort.format.names }
  985 + if$
  986 +}
  987 +
  988 +% apalike uses two sorting passes; the first one sets the
  989 +% labels so that the `a's, `b's, etc. can be computed;
  990 +% the second pass puts the references in "correct" order.
  991 +% The presort function is for the first pass. It computes
  992 +% label, sort.label, and title, and then concatenates.
  993 +FUNCTION {presort}
  994 +{ calc.label
  995 + label sortify
  996 + " "
  997 + *
  998 + type$ "book" =
  999 + type$ "inbook" =
  1000 + or
  1001 + 'author.editor.sort
  1002 + { type$ "proceedings" =
  1003 + 'editor.sort
  1004 + 'author.sort
  1005 + if$
  1006 + }
  1007 + if$
  1008 + #1 entry.max$ substring$ % for
  1009 + 'sort.label := % apalike
  1010 + sort.label % style
  1011 + *
  1012 + " "
  1013 + *
  1014 + title field.or.null
  1015 + sort.format.title
  1016 + *
  1017 + #1 entry.max$ substring$
  1018 + 'sort.key$ :=
  1019 +}
  1020 +
  1021 +ITERATE {presort}
  1022 +
  1023 +SORT % by label, sort.label, title---for final label calculation
  1024 +
  1025 +STRINGS { last.label next.extra } % apalike labels are only for the text;
  1026 +
  1027 +INTEGERS { last.extra.num } % there are none in the bibliography
  1028 +
  1029 +FUNCTION {initialize.extra.label.stuff} % and hence there is no `longest.label'
  1030 +{ #0 int.to.chr$ 'last.label :=
  1031 + "" 'next.extra :=
  1032 + #0 'last.extra.num :=
  1033 +}
  1034 +
  1035 +FUNCTION {forward.pass}
  1036 +{ last.label label =
  1037 + { last.extra.num #1 + 'last.extra.num :=
  1038 + last.extra.num int.to.chr$ 'extra.label :=
  1039 + }
  1040 + { "a" chr.to.int$ 'last.extra.num :=
  1041 + "" 'extra.label :=
  1042 + label 'last.label :=
  1043 + }
  1044 + if$
  1045 +}
  1046 +
  1047 +FUNCTION {reverse.pass}
  1048 +{ next.extra "b" =
  1049 + { "a" 'extra.label := }
  1050 + 'skip$
  1051 + if$
  1052 + label extra.label * 'label :=
  1053 + extra.label 'next.extra :=
  1054 +}
  1055 +
  1056 +EXECUTE {initialize.extra.label.stuff}
  1057 +
  1058 +ITERATE {forward.pass}
  1059 +
  1060 +REVERSE {reverse.pass}
  1061 +
  1062 +% Now that the label is right we sort for real,
  1063 +% on sort.label then year then title. This is
  1064 +% for the second sorting pass.
  1065 +FUNCTION {bib.sort.order}
  1066 +{ sort.label
  1067 + " "
  1068 + *
  1069 + year field.or.null sortify
  1070 + *
  1071 + " "
  1072 + *
  1073 + title field.or.null
  1074 + sort.format.title
  1075 + *
  1076 + #1 entry.max$ substring$
  1077 + 'sort.key$ :=
  1078 +}
  1079 +
  1080 +ITERATE {bib.sort.order}
  1081 +
  1082 +SORT % by sort.label, year, title---giving final bibliography order
  1083 +
  1084 +FUNCTION {begin.bib}
  1085 +{ preamble$ empty$ % no \etalchar in apalike
  1086 + 'skip$
  1087 + { preamble$ write$ newline$ }
  1088 + if$
  1089 + "\begin{thebibliography}{}" write$ newline$ % no labels in apalike
  1090 +}
  1091 +
  1092 +EXECUTE {begin.bib}
  1093 +
  1094 +EXECUTE {init.state.consts}
  1095 +
  1096 +ITERATE {call.type$}
  1097 +
  1098 +FUNCTION {end.bib}
  1099 +{ newline$
  1100 + "\end{thebibliography}" write$ newline$
  1101 +}
  1102 +
  1103 +EXECUTE {end.bib}
... ...
cbsoft2017/spb.bib 0 → 100644
... ... @@ -0,0 +1,48 @@
  1 +@book{kon2012,
  2 + title={Software Livre e Propriedade Intelectual: Aspectos Jur{\'\i}dicos, Licen{\c{c}}as e Modelos de Neg{\'o}cios},
  3 + author={Kon, Fabio and Lago, Nelson and Meirelles, Paulo and Sabino, Vanessa},
  4 + journal={http://ccsl. ime. usp. br/files/slpi. pdf>. Acesso em},
  5 + volume={2},
  6 + pages={12},
  7 + year={2012}
  8 +}
  9 +
  10 +@article{hippel2003,
  11 + author = {Hippel, Eric von and Krogh, Georg von},
  12 + title = {Open Source Software and the "Private-Collective" Innovation Model: Issues for Organization Science},
  13 + journal = {Organization Science},
  14 + issue_date = {March 2003},
  15 + volume = {14},
  16 + number = {2},
  17 + month = mar,
  18 + year = {2003},
  19 + issn = {1526-5455},
  20 + pages = {209--223},
  21 + numpages = {15},
  22 + url = {http://dx.doi.org/10.1287/orsc.14.2.209.14992},
  23 + doi = {10.1287/orsc.14.2.209.14992},
  24 + acmid = {970585},
  25 + publisher = {INFORMS},
  26 + address = {Institute for Operations Research and the Management Sciences (INFORMS), Linthicum, Maryland, USA},
  27 + keywords = {Incentives, Innovation, Open source software, User innovation, users, collective action},
  28 +}
  29 +
  30 +@phdthesis{meirelles2013,
  31 + title={Monitoring Source Code Metrics in Free Software Projects},
  32 + author={Meirelles, Paulo Roberto Miranda},
  33 + year={2013},
  34 + school={Department of Computer Science -- Institute of Mathematics and Statistics of University of S{\~a}o Paulo},
  35 + note = {[in portuguese]},
  36 + url={http://www.teses.usp.br/teses/disponiveis/45/45134/tde-27082013-090242/en.php}
  37 +}
  38 +
  39 +@mastersthesis{sabino2009,
  40 + title={A systematic study on Free Software License},
  41 + author={Vanessa Sabino},
  42 + year={2009},
  43 + school={Department of Computer Science -- Institute of Mathematics and Statistics of University of S{\~a}o Paulo},
  44 + note = {[in portuguese]},
  45 + url={http://www.teses.usp.br/teses/disponiveis/45/45134/tde-14032012-003454/en.php}
  46 +
  47 +}
  48 +
... ...
cbsoft2017/spb.tex 0 → 100644
... ... @@ -0,0 +1,33 @@
  1 +\documentclass[12pt]{article}
  2 +
  3 +\usepackage{sbc-template}
  4 +\usepackage{graphicx,url}
  5 +\usepackage[brazil]{babel}
  6 +\usepackage[utf8]{inputenc}
  7 +\usepackage{float}
  8 +\usepackage{setspace}
  9 +
  10 +\usepackage{tabularx}
  11 +\usepackage{cite}
  12 +
  13 +\begin{document}
  14 +\sloppy
  15 +\title{Lições aprendidas no desenvolvimento do novo portal do Software Público Brasileiro}
  16 +
  17 +\author{Paulo Meirelles\inst{1}, Hilmer Neri\inst{1}}
  18 +
  19 +\address{Laboratório de Produção, Pesquisa e Inovação em Sofware(LAPPIS)\\
  20 + Faculdade UnB Gama (FGA) -- Universidade de Brasília (UnB)
  21 +% Área Especial de Indústria Projeção A, Setor Leste -- Gama - DF -- Brasil
  22 + \email{\{paulormm,hilmer\}@unb.br}
  23 +}
  24 +
  25 +\maketitle
  26 +
  27 +\input{content/01-introduction}
  28 +\input{content/04-architecture}
  29 +\input{content/07-process}
  30 +\input{content/09-lessons}
  31 +\input{content/10-finals}
  32 +
  33 +\end{document}
... ...