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 | 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 | 9 | \end{abstract} | ... | ... |
OSS-2017/01-introduction.tex
1 | 1 | \section{Introduction} |
2 | 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 | 58 | \begin{figure}[hbt] |
29 | 59 | \centering |
30 | - \includegraphics[width=.8\linewidth]{figures/arquitetura.png} | |
60 | + \includegraphics[width=.6\linewidth]{figures/arch.png} | |
31 | 61 | \caption{SPB Portal Architecture.} |
32 | 62 | \label{fig:architecture} |
33 | 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 | 3 | The integration of collaborative environments goes beyond functional aspects. |
4 | 4 | Offering the population an unified experience across these environments has |
5 | 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 | 7 | to provide a transparent navigation and to reach users with different profiles. |
8 | 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 | 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 | 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 | 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 | 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 @@ |
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> | ... | ... |