Commit 923402b8214532b62bb64fa1836f6fa31428faec
1 parent
74eef960
Exists in
master
and in
2 other branches
my improvement suggestions
(several things, can't really summarize here)
Showing
7 changed files
with
441 additions
and
118 deletions
Show diff stats
OSS-2017/00-abstract.tex
1 | \begin{abstract} | 1 | \begin{abstract} |
2 | -Brazilian Public Softwares have some differences from Open Source Softwares, | ||
3 | -in particular the software is considered a public good and the Federal | ||
4 | -Government assumes some responsibilities related to its use. Anyway, the | ||
5 | -software development principles are the same: trend towards decentralization in | ||
6 | -decision-making, information and development sharing, and feedback. In this | ||
7 | -context, we have designed a platform based on the integration and evolution of | ||
8 | -existing OSS tools. Nowadays, the Brazilian Public Software Portal provides | ||
9 | -several modern features for software collaborative development. | 2 | +The Brazilian Public Software is a program by the Brazilian Federal |
3 | +Government to foster the sharing and collaboration on FOSS solutions for | ||
4 | +the public administration. In this paper, we present an integrated | ||
5 | +development platform that was developed for the program. The development | ||
6 | +of this platform used several FOSS applications, and contributed | ||
7 | +features back to them. We discuss the development methodology, platform | ||
8 | +architecture, and the user experience efforts carried out. | ||
10 | \end{abstract} | 9 | \end{abstract} |
OSS-2017/01-introduction.tex
1 | \section{Introduction} | 1 | \section{Introduction} |
2 | \label{sec:intro} | 2 | \label{sec:intro} |
3 | 3 | ||
4 | -Since last few decades, the Brazilian Federal Government has been improving its | ||
5 | -software adoption and development processes. In 2003, the recommendation to | ||
6 | -adopt Open Source Software (OSS) become a public policy. In 2007, the Brazilian | ||
7 | -Government released a Portal to share projects like OSS called Brazilian Public | ||
8 | -Software (\textit{Software Público Brasileiro} -- SPB). In short, it is a | ||
9 | -website to share softwares developed by and for the Brazilian Government. | ||
10 | - | ||
11 | -On the one hand, the Brazilian legal instrument on software contracting | ||
12 | -(\textit{Instrução Normativa} 04/2012) indicates that public managers must | ||
13 | -consult the SPB Portal to adopt a software solution, as well as, justifying the | ||
14 | -acquisition of a proprietary software if there is no a similar project | ||
15 | -available in the SPB Portal. On the other hand, since 2009, the SPB Portal had | ||
16 | -several technical problems because there was no development activities to | ||
17 | -maintenance and evolve it. Thus, the initial SPB Portal version did not have | ||
18 | -another release. | ||
19 | - | ||
20 | -From January 2014 until June 2016, a platform for the SPB Portal was designed | ||
21 | -and developed by the University of Brasília (UnB) and the University of São | ||
22 | -Paulo (USP). This new Portal was designed to be an integrated platform of | ||
23 | -software collaborative development environments with social networking, mailing | ||
24 | -list, control version system, and source code quality monitoring. In this | ||
25 | -paper, we present this new generation of the SPB Portal. | 4 | +During the last few decades, the Brazilian Federal Government has |
5 | +improved its software adoption and development processes. In 2003, the | ||
6 | +recommendation to adopt Free/Open Source Software (FOSS) become a public | ||
7 | +policy. In 2007, the Brazilian Government released a portal called | ||
8 | +Brazilian Public Software (\textit{Software Público Brasileiro} -- SPB, | ||
9 | +in Portuguese), with the goal of sharing FOSS projects developed by, or | ||
10 | +for, the Brazilian Government. | ||
11 | + | ||
12 | +The Brazilian legal instrument on software contracting | ||
13 | +(\textit{Instrução Normativa} 04/2012) mandates that public management | ||
14 | +must consult the SPB Portal to adopt a software solution. The | ||
15 | +acquisition of a proprietary solution must be explicitly justified by | ||
16 | +demonstrating that there is no suitable option in the SPB Portal. | ||
17 | + | ||
18 | +Since 2009, however, the SPB Portal was having several technical issues. | ||
19 | +The original codebase was not being developed anymore, and there as a | ||
20 | +large amount of technical debt to overcome. The system was a modified | ||
21 | +version of an existing FOSS platform that was not being developed | ||
22 | +anymore, and the portal maintenance was becoming harder and harder. | ||
23 | + | ||
24 | +From January 2014 to June 2016, a new platform for the SPB Portal was | ||
25 | +designed and developed by the University of Brasília (UnB) and the | ||
26 | +University of São Paulo (USP) in a partnership with the Brazilian | ||
27 | +Ministry of Budget, Planning, and Management. This new Portal was | ||
28 | +designed as an integrated platform for collaborative software | ||
29 | +development. It includes functionality for social networking, mailing | ||
30 | +lists, version control system, and source code quality monitoring. In | ||
31 | +this paper, we present an overview of this new generation of the SPB | ||
32 | +Portal. | ||
33 | + | ||
34 | +The project was developed by a team of 3 professors, 6 professionals, 2 | ||
35 | +masters students, and approximately 40 undergrad students (not all of | ||
36 | +them at the same time, though -- graduations and other events triggered | ||
37 | +changes in the team). | ||
38 | + | ||
39 | +Figure \ref{fig:spb} shows the home page of this integrated platform. | ||
40 | +The development tried to be as faithful as possible to FOSS development. | ||
41 | +All development was done in the open, and the changes we needed in the | ||
42 | +tools user were contributed back to their communities. | ||
43 | + | ||
44 | +\begin{figure}[hbt] | ||
45 | + \centering | ||
46 | + \includegraphics[width=.9\linewidth]{figures/home-SPB.png} | ||
47 | + \caption{The new SPB Portal.} | ||
48 | + \label{fig:spb} | ||
49 | +\end{figure} | ||
50 | + |
OSS-2017/02-platform.tex
1 | -\section{Platform for software collaborative development} | 1 | +\section{Architecture} |
2 | 2 | ||
3 | -First, according to the Brazilian Federal Government requirements, we needed an | ||
4 | -application that integrates existing OSS systems and provides a similar | ||
5 | -interface for each one, as well as, unique authentication. For that, we have a | ||
6 | -web-based integration platform called Colab that also works as a reverse proxy. | ||
7 | -We have developed its plug-in architecture to decouple already integrated | ||
8 | -tools (Trac system, GNU Mailman, and Apache Lucene Solr) and integrate other | ||
9 | -platforms such as Noosfero, GitLab, and Mezuro. Figure \ref{fig:spb} shows the | ||
10 | -home page of this integrated platform. | 3 | +The two main requirements provided by the Brazilian Federal Government |
4 | +for the new platform were: | ||
5 | +% | ||
6 | +1) \textit{Integrate existing FOSS systems}, with minimal differences | ||
7 | +from their original versions. This way, the platform can benefit from | ||
8 | +improvements done by the upstream communities that provide those | ||
9 | +systems, and the maintenance effort that is specific for the SPB Portal | ||
10 | +should be reduced; | ||
11 | +% | ||
12 | +and | ||
13 | +2) \textit{Provide a consistent user interface} across the different | ||
14 | +systems, as well as centralized authentication. | ||
11 | 15 | ||
12 | -\begin{figure}[hbt] | ||
13 | - \centering | ||
14 | - \includegraphics[width=.9\linewidth]{figures/home-SPB.png} | ||
15 | - \caption{The new SPB Portal.} | ||
16 | - \label{fig:spb} | ||
17 | -\end{figure} | 16 | +The first requirement was accomplished by dedicating specialized teams |
17 | +for each system that was being integrated. The teams would learn how to | ||
18 | +develop their assigned systems, and contribute the necessary features | ||
19 | +directly to the original communities, so that the version we used was | ||
20 | +not significantly different from the original. Of course, at times | ||
21 | +project deadlines forced us to use our own version before tho features | ||
22 | +were fully reviewed and integrated upstream to the original projects, | ||
23 | +but we managed to contribute the vast majority of the changes back. | ||
24 | + | ||
25 | +For the second requirement, we integrated a web integration platform | ||
26 | +called Colab\footnote{\url{https://github.com/colab/colab}}. Colab | ||
27 | +serves as a frontend for other web applications as a reverse proxy, | ||
28 | +manages authentication, and can apply changes to the HTML provided by | ||
29 | +the integrated applications in order to provide visual consistency. | ||
30 | +Colab had support for an initial set of applications (Trac, GNU Mailman, | ||
31 | +Apache Lucene) hard-coded; our team evolved Colab so that it can now | ||
32 | +receive plugins to add support for new applications with minimal changes | ||
33 | +to its existing core. We added support for the other applications used | ||
34 | +in the SPB platform: Noosfero, GitLab, and Mezuro. | ||
18 | 35 | ||
19 | -Noosfero is a software to build social and collaboration networks, providing a | ||
20 | -platform with blogs and CMS (Content Management System). It is the environment | ||
21 | -with most SPB user interaction providing features since the user registration | ||
22 | -until the project pages with documentation and contacts. GitLab is a web-based | ||
23 | -Git repository manager with wiki pages and issue tracking features to support | ||
24 | -the SPB software collaborative development. Mezuro is a platform to collect | ||
25 | -source code metric to monitor the internal quality of softwares written in C, | ||
26 | -C++, Java, Python, Ruby, and PHP. | 36 | +Noosfero\footnote{\url{http://noosfero.org/}} is a software for building |
37 | +social and collaboration networks. Besides tha classical social | ||
38 | +networking features, it also provides publication features such as blogs | ||
39 | +and a general-purpose CMS (Content Management System). Most of the user | ||
40 | +interactions with SPB is through Noosfero: user registration, project | ||
41 | +home pages and documentation, and contact forms. | ||
42 | +GitLab\footnote{\url{http://gitlab.com/}} is a web-based Git repository | ||
43 | +manager with wiki pages and issue tracking features. | ||
44 | +Mezuro\footnote{\url{http://mezuro.org/}} is a platform to collect source code | ||
45 | +metric to monitor the internal quality of softwares written in C, C++, | ||
46 | +Java, Python, Ruby, and PHP. GNU Mailman is used for mailing lists. | ||
47 | + | ||
48 | +The conceptual architecture of the platform is presented in Figure | ||
49 | +\ref{fig:architecture}. Colab initially handles all user interaction, | ||
50 | +directing requests to one of the integrated applications. It | ||
51 | +post-processes responses from the applications to apply a consistent | ||
52 | +visual appearance, manages authentication, and provides a unified search | ||
53 | +functionality: instead of using the redundant restricted search | ||
54 | +functionality of each application, a search in the SPB portal might | ||
55 | +return content from any of the applications, be it web pages, mailing | ||
56 | +list posts, or source code. | ||
27 | 57 | ||
28 | \begin{figure}[hbt] | 58 | \begin{figure}[hbt] |
29 | \centering | 59 | \centering |
30 | - \includegraphics[width=.8\linewidth]{figures/arquitetura.png} | 60 | + \includegraphics[width=.6\linewidth]{figures/arch.png} |
31 | \caption{SPB Portal Architecture.} | 61 | \caption{SPB Portal Architecture.} |
32 | \label{fig:architecture} | 62 | \label{fig:architecture} |
33 | \end{figure} | 63 | \end{figure} |
34 | 64 | ||
35 | -The new SPB Portal was deployed in 7 virtual machines with different functions, | ||
36 | -as we can see in Figure \ref{fig:architecture}. The \textit{reverseproxy} | ||
37 | -handles the HTTP requests and redirects them to the \textit{integration}, the | ||
38 | -\textit{email} sends and receives e-mails on behalf of the platform and the | ||
39 | -\textit{monitor} keeps the entire environment tracked. These three | ||
40 | -\textit{VMs} mentioned - \textit{reverseproxy}, \textit{email} and | ||
41 | -\textit{monitor} - are accessible via Internet and the other ones are only | ||
42 | -available in the local network created between them. | ||
43 | - | ||
44 | -\textit{Integration} works as a second layer of proxy beneath | ||
45 | -\textit{reverseproxy}, any request to the platform will be handled by it. The | ||
46 | -Colab service provides interface, authentication and search engine integration | ||
47 | -among all the services. When a request is received to a specific service, Colab | ||
48 | -authenticates the user in the target tool, sends the request and makes a visual | ||
49 | -transformation in the HTML page, which is the content of the response. Another | ||
50 | -user-oriented feature is the integrated search engine, when the user want to | ||
51 | -find something in the platform Colab will perform the search in the whole | ||
52 | -databases. Colab itself provides a web interface for GNU Mailman and we have | ||
53 | -two others integrated tools in \textit{integration}: Gitlab and Prezento (the | ||
54 | -front-end of Mezuro). | ||
55 | - | ||
56 | -The source code static analysis is performed by \textit{mezuro}. It runs some | ||
57 | -static analysis tools on source code stored in repository and provides this | ||
58 | -data to Prezento. A social networking and CMS is provided by Noosfero in | ||
59 | -\textit{social}, and the databases of all tools with a cache service are in | ||
60 | -\textit{database}. |
OSS-2017/03-ux.tex
@@ -3,34 +3,31 @@ | @@ -3,34 +3,31 @@ | ||
3 | The integration of collaborative environments goes beyond functional aspects. | 3 | The integration of collaborative environments goes beyond functional aspects. |
4 | Offering the population an unified experience across these environments has | 4 | Offering the population an unified experience across these environments has |
5 | been the key to encourage the use of the platform as it reduces the perception | 5 | been the key to encourage the use of the platform as it reduces the perception |
6 | -of the complexity. Thus, the SPB Portal information architecture was redesigned | 6 | +of complexity. Thus, the SPB Portal information architecture was redesigned |
7 | to provide a transparent navigation and to reach users with different profiles. | 7 | to provide a transparent navigation and to reach users with different profiles. |
8 | A process of harmonization has been employed on the interaction models of each | 8 | A process of harmonization has been employed on the interaction models of each |
9 | -tool to reduce the learning curve. At the same time, a new visual style was | 9 | +tool to reduce the learning curve. At the same time, a new visual style was |
10 | created to unify the navigation experience and to comply with the guidelines of | 10 | created to unify the navigation experience and to comply with the guidelines of |
11 | -the digital communication identity pattern established by the Federal | 11 | +the digital communication identity standard established by the Federal |
12 | Government. | 12 | Government. |
13 | 13 | ||
14 | -With the increase of the system features and the addition of new tools, the | 14 | +With the increase in system features and the addition of new tools, the |
15 | visual style has steadily evolved to keep the navigation unified. Moreover, | 15 | visual style has steadily evolved to keep the navigation unified. Moreover, |
16 | -tools from different backgrounds, which in many cases run functionalities with | ||
17 | -similar concepts, made us face the challenge of developing a transparent | ||
18 | -interface that unifies various context. For each required feature, we often | ||
19 | -have to conciliate data with distinct structure and information pattern from | ||
20 | -each used tool. The interface was the meeting point for this data with links | ||
21 | -that users will not notice. The most common features (i.e. search, display, | ||
22 | -and edition of profile information and content) have been brought in line with | ||
23 | -the structure and other existing features of the SPB Portal. | 16 | +tools from different backgrounds, which in many cases provide similar |
17 | +functionality, prompted the development of an unified interface. Some | ||
18 | +features, such as search and user profile editing were eliminated from | ||
19 | +the individual applications, and implemented centrally to ensure a | ||
20 | +consistent look and feel. | ||
24 | 21 | ||
25 | -The other challenge is related to responsive web design. The SPB Portal | ||
26 | -interface and each of its pages were designed following the bounds of | ||
27 | -responsiveness provided or supported by each tools. In particular, in the case | ||
28 | -of Noosfero, which do not have any official branch dedicated to improve its | ||
29 | -responsiveness, we needed to engage with the expansion of this platform, where | ||
30 | -we made a lot of contributions and dialogues with the community and | ||
31 | -maintainers. | 22 | +Another challenge was responsive web design. The integrated applications |
23 | +had varying degrees of support for responsiveness, and the common | ||
24 | +interface had to adapt for each individual scenario. In particular | ||
25 | +Noosfero did not yet have a responsive design; we engaged in its | ||
26 | +development and contributed towards that goal. | ||
32 | 27 | ||
33 | -In summary, after the release of the new SPB Portal in 2014, several | ||
34 | -validations activities were implemented in 2015 and 2016. The aim was to bring | ||
35 | -the users closer to features that they have more interest and designing a | ||
36 | -navigation which deepens in accordance with the user's depth of knowledge. | 28 | +After the initial release of the new SPB Portal in 2014, several |
29 | +validations activities were implemented in 2015 and 2016. The aim was to | ||
30 | +provide the most wanted features by casual users (such as public | ||
31 | +servants interested in downloads and documentation) immediately, while | ||
32 | +allowing more experienced users (such as developers) to easily drill down | ||
33 | +to the details. |
OSS-2017/04-finals.tex
1 | \section{Final remarks} | 1 | \section{Final remarks} |
2 | 2 | ||
3 | -The new SPB Portal was launched for approval in December 2014 and it is | ||
4 | -available at \url{softwarepublico.gov.br}. All the integrated tools are OSS and | ||
5 | -our contributions are published in open repositories, available on the SPB | ||
6 | -Portal itself. We also returned these features to the respective communities. | ||
7 | -Thus, it has reduced the costs of maintenance, which allowed us to carry out | ||
8 | -the continued evolution of the platform in synergy with other organizations | ||
9 | -that use the same tools. | ||
10 | - | ||
11 | -Providing a set of tools and improving the user experience in the portal is a | ||
12 | -technical part of the SPB evolution process. Cultural and legal aspects of | ||
13 | -network collaboration for an effective use of the new SPB Portal also was | ||
14 | -matured. A study for licensing proposals and their impacts on the SPB was | ||
15 | -conducted as a complement to what has been developed from the technological | ||
16 | -point of view, generating a new legal instrument (\textit{Portaria} 46/2016 | ||
17 | -STI/MP) on software collaborative development. | 3 | +The portal is available at \url{softwarepublico.gov.br}. All |
4 | +documentation, including detailed architecture and operation manuals are | ||
5 | +also available\footnote{\url{https://softwarepublico.gov.br/doc/} | ||
6 | +(in Portuguese only at the moment)}). | ||
7 | +% | ||
8 | +All the integrated tools are FOSS and our contributions were published | ||
9 | +in open repositories, available on the SPB Portal itself. We also | ||
10 | +contributed these features back to the respective communities: that | ||
11 | +benefits those communities, as well as us since we can share future | ||
12 | +development and maintenance effort with other organizations that | ||
13 | +participate in their projects. |
39.2 KB
@@ -0,0 +1,302 @@ | @@ -0,0 +1,302 @@ | ||
1 | +<?xml version="1.0" encoding="UTF-8" standalone="no"?> | ||
2 | +<!-- Created with Inkscape (http://www.inkscape.org/) --> | ||
3 | + | ||
4 | +<svg | ||
5 | + xmlns:dc="http://purl.org/dc/elements/1.1/" | ||
6 | + xmlns:cc="http://creativecommons.org/ns#" | ||
7 | + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" | ||
8 | + xmlns:svg="http://www.w3.org/2000/svg" | ||
9 | + xmlns="http://www.w3.org/2000/svg" | ||
10 | + xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" | ||
11 | + xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" | ||
12 | + width="1024" | ||
13 | + height="480" | ||
14 | + viewBox="0 0 270.93333 126.99987" | ||
15 | + version="1.1" | ||
16 | + id="svg8" | ||
17 | + inkscape:version="0.92.1 r15371" | ||
18 | + sodipodi:docname="arch.svg" | ||
19 | + inkscape:export-filename="/home/terceiro/research/papers/2017/spb/OSS-2017/figures/arch.png" | ||
20 | + inkscape:export-xdpi="96" | ||
21 | + inkscape:export-ydpi="96"> | ||
22 | + <defs | ||
23 | + id="defs2"> | ||
24 | + <marker | ||
25 | + inkscape:stockid="Arrow1Lend" | ||
26 | + orient="auto" | ||
27 | + refY="0" | ||
28 | + refX="0" | ||
29 | + id="marker5935" | ||
30 | + style="overflow:visible" | ||
31 | + inkscape:isstock="true"> | ||
32 | + <path | ||
33 | + id="path5933" | ||
34 | + d="M 0,0 5,-5 -12.5,0 5,5 Z" | ||
35 | + style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1" | ||
36 | + transform="matrix(-0.8,0,0,-0.8,-10,0)" | ||
37 | + inkscape:connector-curvature="0" /> | ||
38 | + </marker> | ||
39 | + <marker | ||
40 | + inkscape:isstock="true" | ||
41 | + style="overflow:visible" | ||
42 | + id="marker5359" | ||
43 | + refX="0" | ||
44 | + refY="0" | ||
45 | + orient="auto" | ||
46 | + inkscape:stockid="Arrow1Lend" | ||
47 | + inkscape:collect="always"> | ||
48 | + <path | ||
49 | + transform="matrix(-0.8,0,0,-0.8,-10,0)" | ||
50 | + style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1" | ||
51 | + d="M 0,0 5,-5 -12.5,0 5,5 Z" | ||
52 | + id="path5357" | ||
53 | + inkscape:connector-curvature="0" /> | ||
54 | + </marker> | ||
55 | + <marker | ||
56 | + inkscape:stockid="Arrow1Lend" | ||
57 | + orient="auto" | ||
58 | + refY="0" | ||
59 | + refX="0" | ||
60 | + id="marker5019" | ||
61 | + style="overflow:visible" | ||
62 | + inkscape:isstock="true"> | ||
63 | + <path | ||
64 | + id="path5017" | ||
65 | + d="M 0,0 5,-5 -12.5,0 5,5 Z" | ||
66 | + style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1" | ||
67 | + transform="matrix(-0.8,0,0,-0.8,-10,0)" | ||
68 | + inkscape:connector-curvature="0" /> | ||
69 | + </marker> | ||
70 | + <marker | ||
71 | + inkscape:stockid="Arrow1Lend" | ||
72 | + orient="auto" | ||
73 | + refY="0" | ||
74 | + refX="0" | ||
75 | + id="marker4863" | ||
76 | + style="overflow:visible" | ||
77 | + inkscape:isstock="true" | ||
78 | + inkscape:collect="always"> | ||
79 | + <path | ||
80 | + id="path4861" | ||
81 | + d="M 0,0 5,-5 -12.5,0 5,5 Z" | ||
82 | + style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1" | ||
83 | + transform="matrix(-0.8,0,0,-0.8,-10,0)" | ||
84 | + inkscape:connector-curvature="0" /> | ||
85 | + </marker> | ||
86 | + <marker | ||
87 | + inkscape:stockid="Arrow1Lend" | ||
88 | + orient="auto" | ||
89 | + refY="0" | ||
90 | + refX="0" | ||
91 | + id="Arrow1Lend" | ||
92 | + style="overflow:visible" | ||
93 | + inkscape:isstock="true"> | ||
94 | + <path | ||
95 | + id="path4580" | ||
96 | + d="M 0,0 5,-5 -12.5,0 5,5 Z" | ||
97 | + style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1" | ||
98 | + transform="matrix(-0.8,0,0,-0.8,-10,0)" | ||
99 | + inkscape:connector-curvature="0" /> | ||
100 | + </marker> | ||
101 | + </defs> | ||
102 | + <sodipodi:namedview | ||
103 | + id="base" | ||
104 | + pagecolor="#ffffff" | ||
105 | + bordercolor="#666666" | ||
106 | + borderopacity="1.0" | ||
107 | + inkscape:pageopacity="0.0" | ||
108 | + inkscape:pageshadow="2" | ||
109 | + inkscape:zoom="1.0104167" | ||
110 | + inkscape:cx="335.34021" | ||
111 | + inkscape:cy="240" | ||
112 | + inkscape:document-units="mm" | ||
113 | + inkscape:current-layer="g6086" | ||
114 | + showgrid="false" | ||
115 | + units="px" | ||
116 | + inkscape:window-width="1366" | ||
117 | + inkscape:window-height="704" | ||
118 | + inkscape:window-x="0" | ||
119 | + inkscape:window-y="27" | ||
120 | + inkscape:window-maximized="1" /> | ||
121 | + <metadata | ||
122 | + id="metadata5"> | ||
123 | + <rdf:RDF> | ||
124 | + <cc:Work | ||
125 | + rdf:about=""> | ||
126 | + <dc:format>image/svg+xml</dc:format> | ||
127 | + <dc:type | ||
128 | + rdf:resource="http://purl.org/dc/dcmitype/StillImage" /> | ||
129 | + <dc:title></dc:title> | ||
130 | + </cc:Work> | ||
131 | + </rdf:RDF> | ||
132 | + </metadata> | ||
133 | + <g | ||
134 | + inkscape:label="Layer 1" | ||
135 | + inkscape:groupmode="layer" | ||
136 | + id="layer1" | ||
137 | + transform="translate(0,-170.0001)"> | ||
138 | + <g | ||
139 | + id="g6086" | ||
140 | + transform="translate(0,79.375004)"> | ||
141 | + <g | ||
142 | + transform="matrix(0.78525619,0,0,0.78525619,-49.623926,77.658487)" | ||
143 | + id="g4513"> | ||
144 | + <rect | ||
145 | + style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;vector-effect:none;fill:#eeeeec;fill-opacity:1;fill-rule:nonzero;stroke:#555753;stroke-width:0.52916664;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate" | ||
146 | + id="rect4504" | ||
147 | + width="72.343452" | ||
148 | + height="24.587317" | ||
149 | + x="79.908783" | ||
150 | + y="145.22058" /> | ||
151 | + <text | ||
152 | + xml:space="preserve" | ||
153 | + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16.05688667px;line-height:28.67301178px;font-family:Cantarell;-inkscape-font-specification:Cantarell;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.14692044px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" | ||
154 | + x="82.755447" | ||
155 | + y="163.29472" | ||
156 | + id="text4508"><tspan | ||
157 | + sodipodi:role="line" | ||
158 | + id="tspan4506" | ||
159 | + x="82.755447" | ||
160 | + y="163.29472" | ||
161 | + style="stroke-width:1.14692044px">Noosfero</tspan></text> | ||
162 | + </g> | ||
163 | + <g | ||
164 | + id="g4521" | ||
165 | + transform="matrix(0.78525619,0,0,0.78525619,44.313728,28.743922)"> | ||
166 | + <rect | ||
167 | + y="145.22058" | ||
168 | + x="79.908783" | ||
169 | + height="24.587317" | ||
170 | + width="72.343452" | ||
171 | + id="rect4515" | ||
172 | + style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;vector-effect:none;fill:#eeeeec;fill-opacity:1;fill-rule:nonzero;stroke:#555753;stroke-width:0.52916664;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate" /> | ||
173 | + <text | ||
174 | + id="text4519" | ||
175 | + y="163.19838" | ||
176 | + x="96.076134" | ||
177 | + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16.05688667px;line-height:28.67301178px;font-family:Cantarell;-inkscape-font-specification:Cantarell;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.14692044px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" | ||
178 | + xml:space="preserve"><tspan | ||
179 | + style="stroke-width:1.14692044px" | ||
180 | + y="163.19838" | ||
181 | + x="96.076134" | ||
182 | + id="tspan4517" | ||
183 | + sodipodi:role="line">Colab</tspan></text> | ||
184 | + </g> | ||
185 | + <g | ||
186 | + transform="matrix(0.78525619,0,0,0.78525619,12.608456,78.877338)" | ||
187 | + id="g4529"> | ||
188 | + <rect | ||
189 | + style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;vector-effect:none;fill:#eeeeec;fill-opacity:1;fill-rule:nonzero;stroke:#555753;stroke-width:0.52916664;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate" | ||
190 | + id="rect4523" | ||
191 | + width="72.343452" | ||
192 | + height="24.587317" | ||
193 | + x="80.408913" | ||
194 | + y="143.66841" /> | ||
195 | + <text | ||
196 | + xml:space="preserve" | ||
197 | + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16.05688667px;line-height:28.67301178px;font-family:Cantarell;-inkscape-font-specification:Cantarell;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.14692044px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" | ||
198 | + x="95.870644" | ||
199 | + y="161.64621" | ||
200 | + id="text4527"><tspan | ||
201 | + sodipodi:role="line" | ||
202 | + id="tspan4525" | ||
203 | + x="95.870644" | ||
204 | + y="161.64621" | ||
205 | + style="stroke-width:1.14692044px">Gitlab</tspan></text> | ||
206 | + </g> | ||
207 | + <g | ||
208 | + id="g4537" | ||
209 | + transform="matrix(0.78525619,0,0,0.78525619,129.65802,78.713424)"> | ||
210 | + <rect | ||
211 | + y="143.87715" | ||
212 | + x="90.852165" | ||
213 | + height="24.587317" | ||
214 | + width="72.343452" | ||
215 | + id="rect4531" | ||
216 | + style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;vector-effect:none;fill:#eeeeec;fill-opacity:1;fill-rule:nonzero;stroke:#555753;stroke-width:0.52916664;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate" /> | ||
217 | + <text | ||
218 | + id="text4535" | ||
219 | + y="161.64621" | ||
220 | + x="99.913902" | ||
221 | + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16.05688667px;line-height:28.67301178px;font-family:Cantarell;-inkscape-font-specification:Cantarell;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.14692044px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" | ||
222 | + xml:space="preserve"><tspan | ||
223 | + style="stroke-width:1.14692044px" | ||
224 | + y="161.64621" | ||
225 | + x="99.913902" | ||
226 | + id="tspan4533" | ||
227 | + sodipodi:role="line">Mezuro</tspan></text> | ||
228 | + </g> | ||
229 | + <g | ||
230 | + id="g4545" | ||
231 | + transform="matrix(0.78525619,0,0,0.78525619,126.12242,40.111281)"> | ||
232 | + <rect | ||
233 | + y="193.03581" | ||
234 | + x="15.603492" | ||
235 | + height="24.587317" | ||
236 | + width="72.343452" | ||
237 | + id="rect4539" | ||
238 | + style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;vector-effect:none;fill:#eeeeec;fill-opacity:1;fill-rule:nonzero;stroke:#555753;stroke-width:0.52916664;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate" /> | ||
239 | + <text | ||
240 | + id="text4543" | ||
241 | + y="211.01361" | ||
242 | + x="22.292139" | ||
243 | + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16.05688667px;line-height:28.67301178px;font-family:Cantarell;-inkscape-font-specification:Cantarell;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.14692044px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" | ||
244 | + xml:space="preserve"><tspan | ||
245 | + style="stroke-width:1.14692044px" | ||
246 | + y="211.01361" | ||
247 | + x="22.292139" | ||
248 | + id="tspan4541" | ||
249 | + sodipodi:role="line">Mailman</tspan></text> | ||
250 | + </g> | ||
251 | + <g | ||
252 | + transform="translate(-17.596701,-1.6758763)" | ||
253 | + id="g4573"> | ||
254 | + <path | ||
255 | + style="color:#000000;display:inline;overflow:visible;visibility:visible;fill:#eeeeec;fill-opacity:1;fill-rule:nonzero;stroke:#888a85;stroke-width:0.26458332;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate" | ||
256 | + d="m 105.30904,123.67103 c 0,3.13366 -7.096307,5.15651 -7.096307,5.15651 0,0 -0.634831,10.34294 -4.763388,12.39652 -4.128557,2.05358 -14.837858,-1.9901 -14.837858,-1.9901 0,0 -10.290461,6.46437 -16.590428,6.46437 -6.299966,0 -16.088912,-7.96891 -16.088912,-7.96891 0,0 -8.034554,4.71236 -12.163111,2.65878 -4.128557,-2.05359 -6.435105,-10.39045 -6.435105,-10.39045 0,0 -3.752876,-3.69458 -3.752875,-6.82824 1e-6,-3.13366 5.758939,-5.49087 5.758939,-5.49087 0,0 -2.348532,-8.4531 1.754298,-10.55761 5.633102,-2.88945 17.512605,-0.51748 17.512605,-0.51748 0,0 7.114196,-6.29719 13.414161,-6.29719 6.299965,0 14.25002,6.13002 14.25002,6.13002 0,0 13.885563,-1.53611 18.01412,0.51748 4.128557,2.05358 5.097733,9.72176 5.097733,9.72176 0,0 5.926108,3.86175 5.926108,6.99541 z" | ||
257 | + id="path4549" | ||
258 | + inkscape:connector-curvature="0" | ||
259 | + sodipodi:nodetypes="scscscscscscscscs" /> | ||
260 | + <text | ||
261 | + xml:space="preserve" | ||
262 | + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:12.60877037px;line-height:22.51565933px;font-family:Cantarell;-inkscape-font-specification:Cantarell;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.90062636px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" | ||
263 | + x="43.804577" | ||
264 | + y="125.93317" | ||
265 | + id="text4519-3"><tspan | ||
266 | + sodipodi:role="line" | ||
267 | + id="tspan4517-6" | ||
268 | + x="43.804577" | ||
269 | + y="125.93317" | ||
270 | + style="stroke-width:0.90062636px">internet</tspan></text> | ||
271 | + </g> | ||
272 | + <path | ||
273 | + sodipodi:nodetypes="csc" | ||
274 | + inkscape:connector-curvature="0" | ||
275 | + id="path4575" | ||
276 | + d="m 89.299838,121.99515 c 0,0 41.636142,-2.8699 41.912782,9.30257 l 0.20948,9.21731" | ||
277 | + style="color:#000000;display:inline;overflow:visible;visibility:visible;fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.26499999;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-end:url(#Arrow1Lend);enable-background:accumulate" /> | ||
278 | + <path | ||
279 | + inkscape:connector-curvature="0" | ||
280 | + id="path4859" | ||
281 | + d="m 131.24135,164.86986 -87.987992,24.8855" | ||
282 | + style="color:#000000;display:inline;overflow:visible;visibility:visible;fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.26458332px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-end:url(#marker4863);enable-background:accumulate" /> | ||
283 | + <path | ||
284 | + inkscape:connector-curvature="0" | ||
285 | + id="path5015" | ||
286 | + d="m 143.33679,164.86986 87.98803,24.8855" | ||
287 | + style="color:#000000;display:inline;overflow:visible;visibility:visible;fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.26458332px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-end:url(#marker5019);enable-background:accumulate" /> | ||
288 | + <path | ||
289 | + sodipodi:nodetypes="cc" | ||
290 | + style="color:#000000;display:inline;overflow:visible;visibility:visible;fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.26458332px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-end:url(#marker5359);enable-background:accumulate" | ||
291 | + d="m 134.80714,164.86986 -24.36704,24.8855" | ||
292 | + id="path5355" | ||
293 | + inkscape:connector-curvature="0" /> | ||
294 | + <path | ||
295 | + inkscape:connector-curvature="0" | ||
296 | + id="path5931" | ||
297 | + d="m 138.22112,164.86986 24.36704,24.8855" | ||
298 | + style="color:#000000;display:inline;overflow:visible;visibility:visible;fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.26458332px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-end:url(#marker5935);enable-background:accumulate" | ||
299 | + sodipodi:nodetypes="cc" /> | ||
300 | + </g> | ||
301 | + </g> | ||
302 | +</svg> |