\documentclass{article}

\title{Trabalho de Formatura Supervisionado}
\author{\textbf{Por}\\Mauricio Silva de Moura\\ \\
        \textbf{Professor Supervisor de Est\'{a}gio}\\Prof. Dr. Jos\'{e} Coelho de Pina \\ \\
	\textbf{Professor Respons\'{a}vel pela Disciplina}\\Prof. Dr. Carlos Eduardo Ferreira \\\\ }
\date{10 Dezembro 2001}
\usepackage[brazil]{babel}

\begin{document}
\maketitle
\pagebreak
\tableofcontents
\pagebreak

\section{Introdu\c{c}\~{a}o}

	Esta monografia foi elaborada com base nas atividades executadas durante o curso de Trabalho de Formatura Supervisionado (MAC 499) ministrado pelo professor doutor Carlos Eduardo Ferreira.

	O professor doutor Jos\'{e} Coelho de Pina supervisionou o est\'{a}gio que foi a modalidade escolhida para este trabalho.

\section{Objetivos}

	Os objetivos deste trabalho s\~{a}o descrever as atividades realizadas no est\'{a}gio, apresentar as principais ferramentas e t\'{e}cnicas utilizadas e comparar as caracter\'{\i}sticas do est\'{a}gio com as do curso de ci\^{e}ncia da computa\c{c}\~{a}o ministrado no IME.

\section{A Empresa}
 
\subsection{\'{A}rea de Atua\c{c}\~{a}o}

	Aberium Systems\footnote{Mais detalhes sobra a Aberium Systems podem ser conseguidas no site www.aberium.com.}, empresa onde se realizou o est\'{a}gio, \'{e} uma empresa voltada para o desenvolvimento, implementa\c{c}\~{a}o e suporte profissional de solu\c{c}\~{o}es baseadas em tecnologias Open Source.

	A Aberium Systems oferece servi\c{c}os de consultoria na elabora\c{c}\~{a}o de planos para estrutura e servi\c{c}os de rede, presta suporte a diversos produtos open source auxiliando na solu\c{c}\~{a}o de problemas com produtos j\'{a} utilizados pelos clientes ou indicando produtos mais apropriados para cada situa\c{c}\~{a}o, tamb\'{e}m atuando no desenvolvimento de software personalizado de acordo com necessidades especificas de cada cliente.


\subsection{Organiza\c{c}\~{a}o interna}

	A Aberium Systems \'{e} uma empresa de pequeno porte contando com 17 funcion\'{a}rios divididos em tr\^{e}s \'{a}reas: Administra\c{c}\~{a}o, Contatos Comerciais e Equipe de Desenvolvimento.

	Foi na equipe de desenvolvimento, que \'{e} composta na sua maioria por profissionais com forma\c{c}\~{a}o superior em ci\^{e}ncia da computa\c{c}\~{a}o, que se realizou este est\'{a}gio.

\section{O projeto}

\subsection{Introdu\c{c}\~{a}o}

	O projeto no qual est\'{a} centrado este trabalho \'{e} o desenvolvimento de uma ferramenta para facilitar a administra\c{c}\~{a}o de servidores LINUX.

\subsection{Objetivo}
	  
	O objetivo do projeto era prover uma interface amig\'{a}vel para administra\c{c}\~{a}o de um gateway linux o qual deveria disponibilizar diversos servi\c{c}os, tais como firewall e servidores proxy, de e-mail, de p\'{a}ginas web e de arquivos, tanto para a rede interna quanto para a externa (internet).

\subsection{Desenvolvimento}

\subsection{Requisitos}

	A primeira etapa do desenvolvimento foi o trabalho de estudo e defini\c{c}\~{a}o das caracter\'{\i}sticas do projeto. 

	Tendo em mente que o objetivo era uma interface amig\'{a}vel foi determinado que esta seria feita atrav\'{e}s de p\'{a}ginas web. Isso al\'{e}m de tornar a administra\c{c}\~{a}o da maquina mais intuitiva reduziria os custos com treinamento e acrescentaria a possibilidade de administra\c{c}\~{a}o remota, o que certamente agregaria valor ao produto.

	Uma outra preocupa\c{c}\~{a}o era a possibilidade de altera\c{c}\~{a}o e expans\~{a}o futura do produto por uma altera\c{c}\~{a}o na lista de servi\c{c}os que deveriam ser administrados, o sistema deveria ser capaz de assimilar essas altera\c{c}\~{o}es sem que houvesse a necessidade de se reescrever a aplica\c{c}\~{a}o.

     Para dar conta desta necessidade foi escolhida uma modelagem na qual a um sistema central seriam acoplados diversos m\'{o}dulos, cada um controlando de forma independente cada servi\c{c}os, de forma a ser poss\'{\i}vel que novos m\'{o}dulos fossem acrescentados ao sistema de maneira simples.

	 Havia tamb\'{e}m a necessidade de flexibilidade para suportar altera\c{c}\~{o}es nos programas que forneciam os servi\c{c}os administrados, o que levou a ado\c{c}\~{a}o para os diversos m\'{o}dulos de uma arquitetura em camadas separando a camada de interface (UI) da camada que efetivamente era dependente dos programas sob administra\c{c}\~{a}o (backend).

        A arquitetura em camadas tamb\'{e}m contribui para um terceiro fator que foi considerado durante a defini\c{c}\~{a}o do projeto, a seguran\c{c}a. Com essa arquitetura se evitou que a interface fizesse acesso direto aos arquivos de configura\c{c}\~{a}o e aos programas do sistema.

	Com essas caracter\'{\i}sticas definidas come\c{c}amos a definir quais ferramentas e tecnologias seriam usadas.

\subsection{Tecnologia}

	Para programa\c{c}\~{a}o do n\'{u}cleo do sistema, que teria que fazer acesso a arquivos do sistema e executar outros programas, foi escolhida a linguagem de programa\c{c}\~{a}o C, pois ela propicia uma intera\c{c}\~{a}o bastante flex\'{\i}vel com o sistema e com outros programas.

	A programa\c{c}\~{a}o das p\'{a}ginas web que comporiam a interface final com o usu\'{a}rio foi escolhida a linguagem PHP, pela facilidade com que se daria a intera\c{c}\~{a}o com o n\'{u}cleo escrito em C.

	Para armazenagem de dados inicialmente foi proposto um sistema simples de banco de dados, mas isso traria o inconveniente de se carregar o sistema com um gerenciador de banco de dados (SGBD) apenas para guardar algumas configura\c{c}\~{o}es. Assim foi feita a op\c{c}\~{a}o por arquivos XML contendo as configura\c{c}\~{o}es do sistema, alem da independ\^{e}ncia de um SGBD essa op\c{c}\~{a}o trouxe um grande beneficio que foi a possibilidade de se utilizar XSLT para se gerar os arquivos de configura\c{c}\~{a}o para o sistema. Por exemplo, um arquivo XML de algumas poucas linhas pode conter as configura\c{c}\~{o}es mais importantes para o funcionamento do Apache Web Server, e com um programa de poucas linhas aplicamos uma XSLT sobre esse arquivo e assim geramos o arquivo de configura\c{c}\~{a}o do Apache.

	Para a distribui\c{c}\~{a}o do software, de suas poss\'{\i}veis atualiza\c{c}\~{o}es e de seus eventuais novos m\'{o}dulos foi escolhido o empacotamento RPM.

\subsection{Implementa\c{c}\~{a}o}

	A implementa\c{c}\~{a}o do sistema se deu em duas etapas, na primeira foi implementada a parte central (core) do sistema a qual coordena os m\'{o}dulos e a intera\c{c}\~{a}o entre eles, durante essa etapa tamb\'{e}m foram implementados m\'{o}dulos "DUMMY" que visavam auxiliar nos testes do core e tamb\'{e}m servir de exemplo para a implementa\c{c}\~{a}o dos m\'{o}dulos.

       Na Segunda etapa foram implementados cada um dos m\'{o}dulos individuais.

       A principal dificuldade durante a implementa\c{c}\~{a}o foi o meu pouco conhecimento dos servi\c{c}os que o sistema deveria administrar. Tive que aprender sobre o funcionamento de cada servi\c{c}o a medida em que era necess\'{a}rio para a programa\c{c}\~{a}o dos m\'{o}dulos.

	    Outro problema foi que apesar da inicial divis\~{a}o em duas fazes muito do n\'{u}cleo do sistema teve que ser remodelado para atender a necessidades n\~{a}o previstas na administra\c{c}\~{a}o dos m\'{o}dulos.

\subsection{Funcionamento}

	 Cada m\'{o}dulo consiste de duas camadas, uma interface e um backend. A interface \'{e} composta por um conjunto de p\'{a}ginas HTML geradas dinamicamente por um servidor PHP, que apresentam as informa\c{c}\~{o}es atuais da configura\c{c}\~{a}o do servi\c{c}o que o m\'{o}dulo controla, essas configura\c{c}\~{o}es s\~{a}o armazenadas em arquivos XML e a camada de interface faz apenas acessos de leitura a eles.
	 O backend de um m\'{o}dulo escrito em C recebe altera\c{c}\~{o}es nas configura\c{c}\~{o}es grava essas altera\c{c}\~{o}es nos arquivos XML apropriados e executa, caso necess\'{a}rio, os programas respons\'{a}veis pelos servi\c{c}os controlados por esse m\'{o}dulo.
	A comunica\c{c}\~{a}o entre a interface e o backend se da atrav\'{e}s do n\'{u}cleo do sistema que recebe mensagens da interface atrav\'{e}s de um socket e executa o backend correspondente com os par�metros necess\'{a}rios. O n\'{u}cleo tamb\'{e}m \'{e} respons\'{a}vel por gerar para o sistema uma interface de menu da qual \'{e} poss\'{\i}vel ter acesso as interfaces de cada m\'{o}dulo.

\section{Experi\^{e}ncia adquirida em novas tecnologias}

	   Para a execu\c{c}\~{a}o do projeto foi necess\'{a}rio que eu adquirisse ou aprofundasse meus conhecimentos em diversas tecnologias com linux, PHP e XML.

\subsection{Linux}
	   
	   Meus conhecimentos do Sistema Operacional Linux eram apenas os de um usu\'{a}rio b\'{a}sico. Para poder implementar o sistema tive que aprofundar meus conhecimentos na \'{a}rea de administra\c{c}\~{a}o de usu\'{a}rios e sobre o sistema de arquivos. Alem disso estudei o funcionamento e as configura\c{c}\~{o}es dos servi\c{c}os de e-mail (SMTP/sendmail, POP), SSH, Proxy Server (squid), webserver (apache).

\subsection{Linguagem PHP e C}

	  Das linguagens utilizadas no desenvolvimento do sistema aquela sobre a qual eu tinha menos conhecimento era PHP, mas mesmo com a linguagem C minha pratica era reduzida.

\subsection{XML e XSLT}

	  Por serem ferramentas relativamente novas foi necess\'{a}ria muita pesquisa sobre XML e XSLT ainda durante a defini\c{c}\~{a}o do sistema para se determinar a viabilidade dessas ferramentas serem utilizadas.

\section{O IME e o Est\'{a}gio}

	   Alguns aspectos interessantes da rela\c{c}\~{a}o entre o curso de computa\c{c}\~{a}o e o est\'{a}gio realizado durante este trabalho s\~{a}o as disciplinas ministradas no IME, os aspectos do trabalho em grupo e do controle de progresso.

\subsection{As disciplinas}

	   Diversas disciplinas do curso de computa\c{c}\~{a}o se mostram importantes durante o meu est\'{a}gio, algumas merecem destaque especial.

	  MAC433 - Administra\c{c}\~{a}o de Sistemas UNIX, a administra\c{c}\~{a}o de um sistema linux foi o ponto central do projeto em que estive envolvido.
	  MAC448 - Redes de Computadores, nesta disciplina obtive bastante experi\^{e}ncia com a arquitetura de software em camadas.
	  MAC438 - Programa\c{c}\~{a}o Concorrente, uma vez que o sistema \'{e} baseado numa interface web, na qual o acesso simult�neo de diversos usu\'{a}rios \'{e} permitido, foram necess\'{a}rias diversas t\'{e}cnicas de computa\c{c}\~{a}o concorrente para evitar que o sistema pudesse chegar a um estado inconsistente. 
	  MAC441 - Programa\c{c}\~{a}o Orientada a Objeto, mesmo que o sistema n\~{a}o tenha sido desenvolvido utilizando uma linguagem orientada a objeto, t\'{e}cnicas de orienta\c{c}\~{a}o a objeto foram utilizadas durante a modelagem.

\subsection{O trabalho em grupo}

	  A principal diferen\c{c}a entre o trabalho em grupo realizado durante a faculdade e o realizado numa empresa \'{e} o grau de comprometimento e de interdepend\^{e}ncia dos envolvidos. 
	  Num trabalho em grupo da maioria dos cursos da computa\c{c}\~{a}o, geralmente \'{e} poss\'{\i}vel que apenas um integrante de conta de fazer tudo, de forma que geralmente ningu\'{e}m esta muito preocupado em cobrar dos outros mais participa\c{c}\~{a}o ou mais empenho. 
	  Entretanto em um projeto profissional n\~{a}o \'{e} poss\'{\i}vel que algu\'{e}m consiga dar conta de tudo sozinho e disso surge naturalmente um maior comprometimento entre os envolvidos, j\'{a} que todos dependem uns dos outros.

\subsection{Controle de progresso}

	   Outra caracter\'{\i}stica importante de se trabalhar num ambiente empresarial \'{e} o acompanhamento mais rigoroso que se deve fazer quanto ao progresso do trabalho. \'{E} importante saber com tanta rapidez quanto poss\'{\i}vel se as metas previstas no cronograma de desenvolvimento v\~{a}o ou n\~{a}o ser cumpridas, para que em caso negativo providencias possam ser tomadas em tempo.
	   
\section{Conclus\~{a}o}

	   Durante esse per\'{\i}odo de est\'{a}gio pude fazer uso de muitos conhecimentos adquiridos durante o per\'{\i}odo de faculdade, n\~{a}o s\'{o} com as disciplinas mas tamb\'{e}m em conversas com os professores fora das aulas e mesmo com colegas de curso. 
	  Agora com o termino deste trabalho e com a proximidade do fim da faculdade considero minhas possibilidades para o futuro. Pude observar durante este est\'{a}gio o valor dado no mercado de trabalho a profissionais formados pelo IME e com certeza poderei seguir numa carreira profissional bastante gratificante. Outra possibilidade que considero \'{e} seguir a carreira acad\^{e}mica com um curso de mestrado.
          Independente de que caminho eu venha a escolher estou certo que tanto o aprendizado que tive no IME quanto a pratica vivida na Aberium ir\~{a}o contribuir positivamente para a constru\c{c}\~{a}o do meu futuro.



\end{document}
