Académique Documents
Professionnel Documents
Culture Documents
Rio de Janeiro
Agosto de 2011
CENTRO FEDERAL DE EDUCAÇÃO TECNOLÓGICA
CELSO SUCKOW DA FONSECA - CEFET/RJ
Rio de Janeiro
Agosto de 2011
iii
CDD 004.33
iv
Resumo
Apoiar o usuário, permitindo-lhe uma experiência de compras mais amigável, com descobertas
agradáveis e satisfatórias, fazendo mais clientes felizes, gerando novos negócios e maiores lu-
cros. Estes são alguns dos objetivos que os Sistemas de Recomendações podem ajudar a tornar
realidade, indicando itens que talvez os clientes não conheçam, mas possuem grande probabili-
dade de estar de acordo com seus desejos e necessidades. Este trabalho aborda todo o processo
de gerar uma recomendação e apresenta uma implementação de um Sistema de Recomenda-
ções, aplicado sobre a base de dados NetFlix utilizando frameworks apoiando um sistema de
comércio eletrônico. Além disso explora tecnologias e métodos para aumentar a performance
do processo, apresentando testes que fazem uso de um cluster e implementação de um sistema
de recomendação executado de forma distribuída, utilizando paralelismo de dados.
v
Abstract
Support the user, allowing a more friendly shopping experience, with pleasant and satisfactory
discoveries, making more happy customers, generating new business and bigger profits. These
are some of the goals that the Recommendation Systems can help become reality, indicating
items that customers may not know, but have high probability to be in accordance with their
desires and needs. This work boards the entire process of generating a recommendation and
presents an implementation of a recommendation system, applied to the NetFlix database using
frameworks supporting an e-commerce system. Also explores technologies and methods to
increase process performance, with tests that make use of a cluster and implementation of a
recommendation system running in a distributed way, using data parallelism.
vi
Conteúdo
1 Introdução 1
1.1 Contextualização . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1
1.2 Justificativa . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2
1.3 Objetivos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
1.4 Metodologia de Desenvolvimento . . . . . . . . . . . . . . . . . . . . . . . . 3
1.5 Organização dos Capítulos Seguintes . . . . . . . . . . . . . . . . . . . . . . . 4
2 Fundamentação Teórica 5
2.1 Conceitos Relevantes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
2.2 Estratégias de Recomendação . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
2.2.1 Itens Promocionais . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
2.2.2 Características Desejadas . . . . . . . . . . . . . . . . . . . . . . . . . 7
2.2.3 Itens Mais Vendidos . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
2.2.4 Histórico de Compras . . . . . . . . . . . . . . . . . . . . . . . . . . 7
2.3 Tipos de Sistema de Recomendação . . . . . . . . . . . . . . . . . . . . . . . 8
2.3.1 Filtragem por Conteúdo . . . . . . . . . . . . . . . . . . . . . . . . . 8
2.3.2 Filtragem Colaborativa . . . . . . . . . . . . . . . . . . . . . . . . . . 9
2.3.3 Filtragem Híbrida . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
2.4 Entrada de Dados . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
2.4.1 Abordagem Explícita . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
2.4.2 Abordagem Implícita . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
2.4.3 Abordagem Híbrida . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
2.5 Passos Para Gerar a Recomendação . . . . . . . . . . . . . . . . . . . . . . . 11
2.5.1 Cálculo de Similaridade . . . . . . . . . . . . . . . . . . . . . . . . . 12
2.5.2 Gerando a Recomendação . . . . . . . . . . . . . . . . . . . . . . . . 14
2.6 Apresentação da Recomendação . . . . . . . . . . . . . . . . . . . . . . . . . 14
2.7 Algoritmos Para Gerar Recomendações . . . . . . . . . . . . . . . . . . . . . 14
2.7.1 Para Filtragem Colaborativa . . . . . . . . . . . . . . . . . . . . . . . 14
2.7.2 Para Filtragem Baseada em Conteúdo . . . . . . . . . . . . . . . . . . 15
2.8 Frameworks . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17
2.8.1 Apache Mahout . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17
2.8.2 Duine . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18
3 Especificação do Sistema 20
3.1 Descrição do Mini Mundo . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20
3.2 Planejamento . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21
3.3 Especificação dos Requisitos . . . . . . . . . . . . . . . . . . . . . . . . . . . 22
3.3.1 Especificação dos Requisitos Funcionais do Sistema . . . . . . . . . . 22
vii
4 Aspectos de Implementação 45
4.1 Estratégia de Implementação . . . . . . . . . . . . . . . . . . . . . . . . . . . 47
4.2 Descrição da Arquitetura da Aplicação . . . . . . . . . . . . . . . . . . . . . . 48
4.3 Procedimentos de Implantação . . . . . . . . . . . . . . . . . . . . . . . . . . 53
4.3.1 Hardware . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 54
4.3.2 Software . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 54
4.3.3 Servidor de Banco de Dados . . . . . . . . . . . . . . . . . . . . . . . 55
4.3.4 Servidor de E-mail . . . . . . . . . . . . . . . . . . . . . . . . . . . . 55
4.3.5 Procedimentos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 55
5 Experimentos 57
5.1 Cluster . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 57
5.2 Processamento Distribuído . . . . . . . . . . . . . . . . . . . . . . . . . . . . 60
Conclusões 65
Análise Restrospectiva . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 66
Trabalhos Futuros . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 67
Apêndices 68
A Manual do Usuário 69
A.1 Informações Relevantes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 69
A.2 Padrões Utilizados . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 69
A.3 Página Inicial . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 70
A.4 Cadastro . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 71
A.5 Carrinho de Compras . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 72
A.6 Pagamento . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 73
viii
Lista de Figuras
Lista de Tabelas
Lista de Algoritmos
Capítulo 1
Introdução
1.1 Contextualização
Os sites de compras online têm criado cada vez mais recursos para facilitar a vida do usuário
e aumentar as vendas. Fazendo comparação entre uma loja física e uma virtual, é possível
perceber com mais facilidade tais recursos.
A categorização de produtos, como o setor de laticínios de um supermercado, ou a seção
de comédia em uma vídeo locadora são os menus que detalham as categorias dos produtos do
site. E para quando um cliente não encontra a mercadoria que deseja, pode perguntar a algum
funcionário, nos sites são disponibilizados os sistemas de busca.
Aqueles produtos que ficam perto do caixa para chamar mais atenção, ou aqueles que apa-
recem nas propagandas de TV são os anúncios de produtos em destaque, que aparecem mesmo
sem o usuário ter se identificado no site, o mesmo para todos os usuários.
As promoções que são exibidas em grandes cartazes na parte externa dos supermercados
também aparecem em sites, em destaque ou ao se selecionar cada “setor” no menu.
Mas e as recomendações, as sugestões dos vendedores? Como conseguir esse mesmo su-
porte ao cliente no mundo virtual?
Uma possibilidade é a existência de um atendente que converse, através da Internet ou tele-
fone, com o cliente. Também é possível que, após a seleção de um produto para visualização,
logo abaixo apareça a informação de que existe um produto complementar ou correlato a este.
Para isto não é necessário dado algum do cliente, e todos os clientes receberão a mesma sugestão
de compra.
Observe que para o cliente receber a sugestão ele teve que fazer algum tipo de escolha
prévia. Teve de selecionar algum produto de uma lista ou através de uma busca. Como indicar
ao cliente algo específico a ele, que tenha a ver com o gosto dele?
O atendente da locadora de filmes que informa ao cliente, “... acabaram de devolver um
filme de ação do estilo que o senhor gosta...”, com certeza consegue alugar mais filmes. A
atendente da loja de produtos de beleza que diz para uma cliente, “... se seu cabelo é oleoso, este
condicionador é o ideal para seu tipo de cabelo...”, forneceu informações importantes, indicou
o produto que mais se adequa às necessidades, baseadas em uma especificidade do cliente.
A diferença entre os casos é que no primeiro o atendente baseou sua recomendação em
compras anteriores do cliente, uma informação que o atendente consegue obter sem ter de per-
guntar ao cliente, enquanto que o segundo se baseou em um dado que o cliente teve de fornecer.
Mas em ambos tal comportamento pode ser atingido através do que se chama de Sistema de
Recomendação.
Um Sistema de Recomendação utiliza dados já obtidos do cliente para recomendar-lhe um
2
produto ou serviço. Tal tipo de sistemas é muito utilizado em sites de comércio eletrônico como
Amazon1 , NetFlix2 , Submarino3 , Americanas4 , dentre outros.
Os dados a utilizar no processo de gerar recomendações podem ser fornecidos explicita-
mente pelo usuário. O cliente é questionado em algum momento sobre tais dados, o que na
Internet equivale ao preenchimento de um formulário. O exemplo fornecido anteriormente, o
condicionador a ser sugerido, depende do tipo cabelo, que é um dado que deve ser previamente
fornecido. Este tipo de dado em geral é bem apurado, detalhado, pode-se saber do que o usuário
gosta e do que não gosta. Contudo é difícil fazer com que o usuário forneça tais dados.
Outra abordagem é coletar dados implicitamente, levar em consideração compras anteriores
do cliente ou buscas já efetuadas. O exemplo da locadora se aplica como exemplo de coleta de
dados implícita. Os dados obtidos aqui nem sempre são apurados, por exemplo, a filha pode vir
a utilizar a conta do pai para comprar algum item feminino. Outro problema é que só se sabe
do que o usuário gosta não existem pistas do que ele não gosta.
É claro que uma abordagem híbrida também é possível e aplicável, em alguns produtos
ou serviços. Por exemplo, indicar um condicionador baseado na marca que a pessoa costuma
comprar e no tipo de cabelo informado.
Neste trabalho pretende-se utilizar um Sistema de Recomendações em um site de aluguel
de filmes, utilizando dados de avaliações fornecidas pelo usuário para gerar as recomendações,
ou seja, será utilizada uma abordagem explícita.
Para alcançar tal objetivo o sistema deve verificar outros usuários, registrados na base de
dados, que tenham avaliado os mesmos filmes, e atribuído notas parecidas ao usuário que está
utilizando o sistema. Para estes usuários, o sistema verifica filmes aos quais tenha atribuído
boas notas, e que o usuário atual não tenha avaliado e então o sistema sugere tais filmes para
este.
1.2 Justificativa
O conhecimento é sempre importante. Quando alguém tem dúvidas pede ajuda a pessoas mais
experientes ou especialistas no assunto. Quando um comprador tem algum tipo de dúvida pede
conselhos aos vendedores, ao garçom, a amigos, a familiares, realiza pesquisas na Internet.
É um costume comum buscar conselhos, sugestões, recomendações para decidir em relação
a tudo o que seja necessário fazer escolhas. A opinião de um amigo em relação a uma garota,
opinião de um colega de turma em relação a um trabalho, os conselhos da vovó, a sugestão do
“chef” e nas lojas os vendedores... Mas e no mundo virtual? A compra de produtos seria uma
lista imensa e tediosa, com grande diversidade de produtos na tela do computador?
A utilidade de um Sistema de Recomendação é visível quando é necessário lidar com uma
quantidade muito grande de dados. Por exemplo, o site NetFlix aluga filmes para clientes ca-
dastrados e possui uma grande quantidade de filmes registrados em seu banco de dados. Entrar
nesse site e receber uma boa sugestão de filme pode ser a diferença entre manter ou perder o
cliente. É bem mais fácil aceitar a indicação de um bom filme que ficar navegando por uma
extensa lista sem se ter idéia do que se está procurando. Isso pode acabar fazendo com que o
cliente desista de alugar.
Existem duas atividades fundamentais online, buscar e navegar. Se um consumidor sabe o
que quer, ele busca e, em geral, descarta o que não tem relação com o que buscou, ao encontrar
1
www.amazon.com
2
www.netflix.com
3
www.submarino.com.br
4
www.americanas.com.br
3
avalia se o item encontrado lhe é útil ou não. Mas se não tem certeza, ou não procura por algo
específico o consumidor navega, e é na navegação que o cliente está mais aberto a sugestões,
então se um site possui um bom sistema de recomendações, tem maior probabilidade de exibir
a tal cliente algo que esteja de acordo com seu gosto, que ele necessite, e consequentemente,
ganhar mais dinheiro.
Os sistemas de recomendação se baseiam em comportamento real do usuário para sugerir
algo a este, não são adivinhações. As recomendações são personalizadas, ou seja, não são as
mesmas para todos. Por conta disso os sistemas de recomendação têm como principal foco
sites de comércio eletrônico, facilitando o uso de clientes com pouca experiência em buscas,
personalizando o site para cada cliente e melhorando a experiência de compra, o que se traduz
em maior volume de vendas.
Para que haja realmente uma melhoria na experiência de compra para o usuário faz-se neces-
sário um tempo de resposta adequado por parte do sistema. Sabendo-se da grande quantidade
de informações que sites de comércio eletrônico tendem a armazenar, dada a diversidade de
itens e a quantidade de clientes, podemos prever que o processamento de informações de ava-
liações para gerar recomendações torne-se lento. Assim sendo, o estudo de técnicas ou meios
que tornem o processo mais ágil é de grande utilidade.
1.3 Objetivos
Neste projeto, pretende-se desenvolver um site de aluguel de filmes, que utilize um Sistema de
Recomendação, de forma que, a cada acesso, sejam sugeridos filmes, que estejam de acordo
com o perfil do usuário.
O objetivo primordial é fazer uso de um sistema de recomendação. Sendo assim, o site
de aluguel de filmes será apenas uma contextualização, que servirá de base para o sistema de
recomendação.
Outro objetivo deste trabalho é explorar tecnologias e métodos que permitam aumentar a
performance do processo, apresentando testes que fazem uso de um cluster e implementação de
um sistema de recomendação executado de forma distribuída, utilizando paralelismo de dados.
Capítulo 2
Fundamentação Teórica
“Cauda Longa” (do inglês Long Tail) é um termo cunhado por Chris Anderson para descrever o
interessante fenômeno de que produtos de pequenos nichos de mercado, tendem a vender muito
mais na Internet que em mercados de presença física.
Em [13], os autores informam que no site de comércio eletrônico Amazon, 36,7% das ven-
das de livros são referentes aos que estão abaixo da 100.000a posição em vendas. No mesmo
artigo os autores informam ainda que a tendência deverá continuar, e citam como uma das fer-
ramentas que podem ter apoiado e dirigido consumidores a este tipo de mercado os Sistemas de
Recomendação.
Existe muito mais informação na Internet que qualquer pessoa pode processar, além disso,
encontrar, em meio a tanta informação, aquela que realmente lhe interessa é uma tarefa árdua.
Pesquisadores chamam este problema de “sobrecarga de informação” (information overload),
e sistemas de recomendação são uma ferramenta que pode ajudar as pessoas a superá-lo [25].
Estes sistemas são como filtros de informação ativos, que possuem a tarefa de apresentar
ao usuário apenas itens (livros, notícias, músicas, páginas WEB) que sejam de seu interesse,
permitindo que usuários de tais sistemas sejam expostos somente a informações que lhe sejam
realmente relevantes [18].
Tais filtros são ferramentas utilizadas em sites, possuem o intuito de apoiar o processo de
escolha, indicando itens ou serviços que melhor combinem com o perfil do usuário.
Estas ferramentas expandem as possibilidades dos usuários, vão além das buscas, uma vez
que o usuário só busca algo que saiba existir. As recomendações permitem mostrar algo novo
ao usuário, algo que talvez nem soubesse da existência, mas que pode estar de acordo com suas
necessidades, gostos e desejos. Sendo assim, geram possibilidades de novos negócios.
São observadas na Seção 2.1, informações que proporcionam alguma base para que seja
possível entender o processo de funcionamento de um sistema de recomendação. Na Seção 2.2
são apresentadas as diferentes maneiras pelas quais um sistema pode efetuar uma recomenda-
ção. A Seção 2.3 classifica tais sistemas de acordo com a abordagem utilizada. As maneiras de
adquirir dados sobre o usuário, de modo a fornecer recomendações apropriadas, são apresenta-
das na Seção 2.4. Na Seção 2.5, são descritos detalhes das etapas a serem cumpridas para que
um sistema gere uma recomendação. Onde e quando é possível apresentar recomendações aos
usuários é uma pergunta que tenta-se responder na Seção 2.6. Algumas idéias e conceitos da
geração de recomendações são vistos na Seção 2.7. Alguns artefatos de software que permitem
fazer o trabalho de criar um sistema deste tipo são apresentados na Seção 2.8.
6
O objetivo destes sistemas é estimar avaliações que os usuários dariam para itens ainda não
avaliados, para que então, baseado nos itens com estimativas maiores, gerar recomendações
para o usuário [22]. Esta estimativa é baseada nas avaliações dadas pelo usuário a outros itens,
ou resultado de uma comparação do perfil do usuário a alguma característica de referência,
ou ainda nas avaliações fornecidas por usuários ao item o qual deseja-se estimar a avaliação.
Uma vez disponíveis estimativas a itens ainda não avaliados, um sistema de recomendação pode
recomendar ao usuário os itens que tiverem as estimativas mais altas [17], [10].
Implementar este tipo de recomendação é uma tarefa mais complexa, e é a partir daí que
torna-se necessário o uso de um sistema de recomendação.
• filtragem por conteúdo - com base nos itens a serem recomendados, a qual é discutida na
Seção 2.3.1;
conta aspectos estéticos (A página possui um esquema de cores agradável? É intuitiva? As in-
formações estão bem organizadas?), enquanto que em alguns domínios os itens não são sujeitos
a métodos de extração de informações pela tecnologia atualmente disponível, comidas são um
bom exemplo, é necessária a intervenção humana, fornecendo algum tipo de dado, uma crítica
ou avaliação [12].
Este problema ocorre devido à dificuldade de análise do conteúdo. Técnicas de extração de
informação funcionam para documentos textuais, alguns outros domínios apresentam grande
dificuldade. É mais fácil classificar um documento, dizer quais palavras ele possui e quantas
vezes cada ocorre, que classificar um filme (é uma comédia, um romance, um filme de terror),
dizer quais são, quantas vezes aparecem os atores do elenco e criticar a atuação de cada um
deles.
Outros problemas para a abordagem baseada em conteúdo são o do novo usuário, que por
não possuir informações suficientes acerca de seus gostos, não recebe recomendações precisas
e o de grande especialização, onde o sistema acaba não recomendando itens muito diferentes
do que o usuário já avaliou [10].
que o usuário atual forneceria ao item em questão, que é calculada como uma média ponderada
das avaliações fornecidas pelos outros usuários para aquele item, onde os pesos são os respec-
tivos coeficientes de similaridade. A intenção é que as avaliações dos usuários de gosto mais
similar ao do usuário atual sejam mais consideradas.
possui como uma matriz de m usuários por n itens, contendo as avaliações que os usuários
fornecem aos itens. Observemos que o sistema raramente terá um usuário avaliando todos os
itens, em verdade, é comum que tenha uma matriz muito esparsa, ou seja, com muitos pontos
onde os usuários não avaliaram os itens.
É claro que essa matriz muito esparsa tende a dificultar o processo de gerar recomendações,
pois tal problema possibilita a existência de usuários sem, ou com poucos similares, impossibi-
litando a geração de recomendações adequadas ou gerando recomendações pouco confiáveis.
Existem algumas técnicas que podem ser aplicadas a esta matriz para obter melhores resul-
tados no processo, reduzindo este problema:
• valor padrão - esta é a técnica mais simples, fornece, para a avaliação de itens ainda não
avaliados por algum usuário, um valor padrão;
• valor da média - o sistema fornece o valor da média das avaliações já fornecidas, para
itens ainda não avaliados por algum usuário;
• robôs avaliadores - tais devem ser considerados como usuários comuns e devem fornecer
avaliação para cada item que faça parte de seu domínio, isso elimina o problema do novo
item não avaliado que acaba não sendo indicado a ninguém [27].
Tabela 2.2: Tabela contendo avaliações de itens efetuadas por dois usuários.
item 1 item 2 item 3 item 4
usuário a 1 5 3 -
usuário b 1 5 3 2
n
X
(rai − ra )(rbi − rb ) = (1 − 3).(1 − 3) + (5 − 3).(5 − 3) + (3 − 3).(3 − 3)
i=1
= 4+4+0
= 8
Para
pPon denominador: Pn
− 2 2
p i=1 (r ai r a ) i=1 (rbi − r b ) =
2
= p[(1 − 3) + (5 − 3) + (3 √2 − 3) ].[(1 − 3)2 + (5 − 3)2 + (3 − 3)2 ] =
2
= [4 + 4 + 0].[4 + 4 + 0] = 82 = 8
Então:
ρab = 8/8 = 1 (similaridade total), como era de se esperar.
A distância euclidiana (d - distância entre dois pontos) é outra métrica que pode ser utilizada:
v
u n
uX
dab = t (xai − xbi )2 (2.2)
i=1
|D|
idfi = log (2.6)
|{d : ti ∈ d}|
Onde:
Então:
2.8 Frameworks
A utilização de frameworks permite a introdução de novas funcionalidades de uma maneira
mais rápida. Outra vantagem do uso de frameworks advém do fato de se tratar de software
estável, já testado, com uma comunidade de usuários para trocar idéias, críticas e sugestões de
desenvolvimento [11], [19], [29], [28].
Em pesquisas efetuadas foi possível encontrar dois frameworks que fornecem base para o
desenvolvimento de sistemas de recomendação, o Apache Mahout, descrito na Seção 2.8.1 e o
Duine, abordado na Seção 2.8.2.
• Mineração de itens agrupados - verifica quais itens aparecem combinados com frequência.
Dentre as bibliotecas que fazem parte deste software, a de nome Taste é utilizada para fil-
tragem colaborativa em Java. Ela utiliza as preferências do usuário por itens e retorna uma
estimativa da preferência do usuário para outros itens.
A biblioteca Taste provê uma gama de componentes a partir dos quais pode ser construído
um sistema de recomendação selecionando alguns algoritmos.
Além de já desenhada para alta performance, escalabilidade e flexibilidade, pode prover um
servidor web de forma a responder requisições de aplicações, mesmo as não Java.
A figura 2.1 mostra o relacionamento entre as partes de um sistema de recomendação gerado
com o framework Apache Mahout. A aplicação cliente acessa o framework de recomendação
que utiliza os conceitos de vizinhança (Neighborhood), correlação (Correlation) e inferências
acerca de preferências (Preference Infere), para gerar as recomendações.
O framework de recomendação utiliza um modelo de dados (DataModel) para ter acesso
aos dados de usuários, que possuem suas preferências quanto aos itens armazenadas em uma
base de dados.
1
www.apache.org
18
Figura 2.1: Partes de sistema de recomendação utilizando Apache Mahout (fonte: [6]).
2.8.2 Duine
Atualmente na versão 4.0.0, o framework Duine foi desenvolvido pelo Instituto de Telemática
da empresa Novay2 .
O Duine é uma coleção de bibliotecas que permite desenvolvedores criarem mecanismos
que efetuem estimativas, as quais podem ser utilizadas para personalizar informações aos usuá-
rios, especificamente em recomendar aos usuários qual informação lhe é importante.
Este software estima o quanto um item é interessante para determinado usuário. Também
processa e armazena avaliações que usuários fornecem a itens e o interesse do usuário em
categorias, gêneros e outras informações relativas aos itens.
O framework também possui capacidade de aprendizado, adaptando o perfil do usuário a
cada avaliação fornecida a itens.
O Duine framework pode ser extendido, com novas técnicas e estratégias, com novos mo-
delos de perfil. Pode-se também substituir o mapeamento objeto relacional efetuado pelo fra-
mework Hibernate.
Uma técnica de estimativa avalia o quão interessado um usuário estará em um item, através
do uso de algum algoritmo. Como resultado temos um valor numérico representando a quan-
tidade de interesse esperada pelo usuário, é utilizada uma faixa de -1 (menos um) a +1 (mais
um), onde o 0 (zero) é considerado neutro.
Duine combina múltiplas técnicas para gerar as estimativas. Atualmente o Duine oferece
sete técnicas distintas para gerar os resultados desejados: filtragem colaborativa, filtragem de
2
www.novay.nl/en/
19
informação, raciocínio baseado em casos (com base na quantidade de itens similares que fo-
ram classificados pelo usuário no passado), GenreLMS (raciocínio em gêneros), TopNDeviation
(popularidade), AlreadyKnown e UserAverage.
O sistema de recomendação pode ter suas capacidades estendidas com o uso de algoritmos
criados por desenvolvedores, e possui seleção dinâmica de algoritmo, de modo a melhor se
adaptar a cada situação. Conta também com uma API que fornece explicações referentes a
recomendação fornecida, informando no que se baseou para fornecer suas estimativas.
O “recommender” (recomendador), parte do framework que fornece as estimativas, possibi-
lita que sejam registradas, “plugadas”, algumas facilidades, pluggable profile models, pluggable
feedback processors, pluggable caching support, que representam modelos de perfis, processa-
dores de retorno e suporte a cache, respectivamente, possibilitando que sejam utilizadas outras
ferramentas que não as fornecidas, adicionando extensibilidade a este framework.
Tudo isso pode ser utilizado junto a ferramenta de cache que implemente JCS (Java Caching
Systen) e o framework de persistência Hibernate, contudo o uso de interfaces permite que sejam
utilizados outros frameworks.
A figura 2.2 fornece uma visão superficial das capacidades do framework Duine.
Capítulo 3
Especificação do Sistema
Neste capítulo, são observados detalhes acerca dos requisitos, planejamento que norteiam a
implementação e detalhes técnicos referentes ao projeto.
Um modelo pode ser visto como a representação abstrata e simplificada de um sistema real,
com a qual se pode explicar ou testar o seu comportamento, em seu todo ou em partes [14].
Com o uso de modelos, diagramas e descrições, pretende-se facilitar a compreensão do
sistema desenvolvido e do ambiente em que este se insere. Com isso, é possível transmitir mais
facilmente idéias, visão, a modelagem do sistema.
Desta forma, na Seção 3.1 o software a ser produzido é contextualizado, assim como objeti-
vos a serem alcançados com sua produção e alguns detalhes de como deverá funcionar, através
da descrição do contexto no qual o software se apresenta.
A Seção 3.2 informa o caminho seguido, o tempo utilizado e o esforço despendido. Na
Seção 3.3 são abordadas as necessidades a serem supridas pelo software.
Com a utilização de modelos, são apresentados objetivos e funcionalidades a serem alcan-
çados na Seção 3.4. A modelagem do problema sob uma perspectiva sistêmica, típica de um
software, é vista na Seção 3.5. Na Seção 3.6 pode-se perceber a colaboração entre os artefatos
de software no esforço de responder as requisições efetuadas pelo usuário.
A Seção 3.7 modela o problema de maneira relacional, típica de bancos de dados usados
para a persistência das informações. Finalmente, na Seção 3.8 são apresentados detalhes acerca
da interface com a qual o usuário terá de interagir com o sistema.
3.2 Planejamento
Aplicando metodologia de Processo Unificado, evolutivo e ágil, não é possível criar um crono-
grama rígido, dividindo-o em etapas onde só será efetuada uma disciplina por vez.
Não existe tarefa isolada nem momento em que não se pense no sistema como um todo, o
que existe são momentos em que são feitas diversas tarefas, como por exemplo, no início do
processo existe mais concentração, um maior esforço, em averiguar requisitos e entendê-los,
ao longo do tempo, com a maior compreensão do domínio do negócio existe a tendência a
despender menos esforço em tal tarefa.
O melhor a fazer é fornecer uma estimativa de esforço em cada disciplina que ocorre para-
lelamente a cada momento do projeto. Com este intuito, segue abaixo, na figura 3.1 um gráfico
tempo versus esforço estimado, que mostra o trabalho a cumprir. A figura mostra as disciplinas
do Processo Unificado e estimativas de esforço nelas dispendido em cada interação do processo
de desenvolvimento do software.
Em um ambiente corporativo, entende-se que a construção do projeto, em se utilizando
os mesmos frameworks utilizados no projeto construido, não deverá ser um esforço dos mais
dispendiosos. Grande parte do projeto foi desenvolvido em um curto espaço de tempo, sobrando
apenas ajustes visuais e detalhes a serem melhorados, sem os quais o sistema já funcionava
perfeitamente.
22
• Catálogo eletrônico - fornecer ao usuário uma listagem ordenada, onde o usuário encontre
os produtos comercializados pelo site.
• Carrinho de compras - possibilitar ao usuário adicionar e remover itens a uma lista dos
que serão alugados.
• Login de usuário - usuários registrados podem utilizar identificação e senha para que
tenham acesso a funcionalidades restritas (solicitar locações e avaliar filmes).
• Alugar filmes - usuários registrados, já identificados, devem ser capazes de alugar filmes.
23
Como ator secundário temos o sistema de e-mail - foi criada uma conta no Gmail1 esta é
utilizada para possibilitar que o sistema desenvolvido envie e-mail de confirmação de compras
aos clientes.
Controladores
Recebem as requisições das páginas, seus métodos são executados de acordo com as solicita-
ções.
Foram criados controladores para os principais conceitos do sistema:
• Controlador de usuário - controla as funções que envolvem o usuário, como logon, logout
e registro de novo usuário.
• Controlador de página inicial - criado para aproveitar uma facilidade do framework utili-
zado, controla apenas o acesso à página inicial.
Interceptadores
O framework utilizado na construção do sistema, permite a criação da figura de interceptadores,
estes, como o próprio nome deixa claro, interceptam as requisições feitas pelas páginas ao
sistema, permitindo que sejam efetuados alguns tratamentos antes que as requisições cheguem
aos controladores solicitados.
Foram utilizados três interceptadores:
• Interceptador para o “carrinho de compras” - inclui nas respostas às requisições o número
de itens que constam no “carrinho de compras” da sessão atual. Tal artifício foi utilizado
de forma a evitar que fosse repetido este mesmo procedimento diversas vezes.
• Interceptador de autenticação - efetua controle de acesso impedindo que funções permiti-
das apenas a usuários logados sejam acessadas em sessões onde o usuário não tenha feito
logon.
• Interceptador de verificação de usuário - verifica se a sessão atual possui um usuário
logado e, em caso afirmativo, adiciona o nome do usuário, a ser exibido nas páginas, nas
respostas às requisições, evitando repetição de código.
Repositórios
Classes que guardam a “inteligência” de manipulação e organização das informações obtidas
das bases de dados. Foram utilizados os descritos a seguir:
• Repositório de carrinho - obtém infomações e manipula dados do “carrinho de compras”.
• Repositório de aluguéis - referente aos dados dos aluguéis de filmes.
• Repositório de filmes - para a busca de filmes.
• Repositório de usuários - obtém informações dos usuários.
DAOs
Camada de acesso a dados, possui a lógica de utilização do framework Hibernate para obtenção,
armazenamento, recuperação e exclusão dos dados. Foram utilizadas as seguintes:
• DAO - classe que contém toda a lógica de acesso aos dados com a utilização do framework
Hibernate, um framework utilizado justamente para a persistência e mapeamento objeto
relacional. Posssui operações de CRUD (Create Read Update Delete). Todos as outras
classes DAO extendem esta.
• DAO de usuário.
• DAO de aluguel.
• DAO de filme.
28
Classes de Negócio
São as classes que relacionadas carregam os conceitos do sistema, algumas das classes utilizadas
efetuam mapeamento objeto relacional através das anotações do framework Hibernate.
• Carrinho - é a classe que faz o papel do “carrinho de compras” no sistema. É uma classe
cujos objetos são transientes, ou seja, não persiste suas informações, dado que estas são
úteis apenas durante a execução do sistema.
• Filme.
• Aluguel.
• Usuário.
• Classe de envio de e-mail - utiliza a API mail da linguagem Java armazena toda a lógica
de envio de e-mail.
• Classe geradora de recomendações - utiliza o framework Apache Mahout para gerar re-
comendações.
VCP 03 - Registrar-se
de diagramas, na Seção 3.6.2. A Seção 3.6.3 mostra a troca de mensagens entre as classes no
esforço de responder solicitações dos usuários.
Operação: buscar(padrão)
Responsabilidade: efetuar busca por filmes que apresentem o padrão especificado em seu nome.
Referências cruzadas: caso de uso “efetuar pesquisa”.
Pré-condições: nenhuma.
Pós-condições: nenhuma.
Operação: fecharPedido()
Responsabilidade: informar ao usuário itens constantes no “carrinho de compras” com respec-
tivos valores e total para a locação, solicitando informação de forma de pagamento.
Referências cruzadas: caso de uso “alugar filme(s)”.
Pré-condições: o usuário deverá ter sido identificado e possuir itens em seu “carrinho de
compras”.
Pós-condições: nenhuma.
Operação: efetuarPagamento(modoPagamento)
Responsabilidade: Encerrar, registrar e confirmar aluguel de filme(s) ao usuário.
Referências cruzadas: caso de uso “alugar filme(s)”
Pré-condições: o usuário, previamente identificado, deverá ter selecionado a forma de pa-
gamento.
Pós-condições: o sistema deverá ter registrado os dados do aluguel (filmes alugados e valo-
res), enviado e-mail de confirmação ao usuário e retirado os itens do “carrinho de compras”.
Efetuar pesquisa
Para a criação da tabela Cliente foi necessário pesquisar os códigos de usuários diferentes na
tabela de avaliação, e foi criado um programa que criava nomes selecionando, aleatoriamente,
um nome de um vetor e dois sobrenomes diferentes de outro vetor.
Foram criadas as chaves primárias (e seus respectivos índices), chaves estrangeiras para
garantir a integridade referencial no modo “No Action”, de modo que ao executar os comandos
Update, Delete e Insert sobre tais campos (chave estrangeira) não seja executada nenhuma ação
aos seus correlatos em outras tabelas e foi feita também a tipificação dos atributos atendendo as
necessidades do framework Mahout.
O framework Apache Mahout exige que alguns detalhes sejam observados na tabela que
contém os dados das avaliações fornecidas pelos usuários aos itens:
• A identificação do usuário e a do item devem ser não nulas e tem de ser Índices.
• Os tipos de dados para as colunas devem ser os correspondentes aos tipos long e float do
Java. No MySQL estes são o BIGINT e o FLOAT.
Com o intuito de tornar os dados mais próximos dos que são utilizados em situações reais,
foram adicionados campos senha, igual ao ID do usuário, e e-mail que consta do primeiro nome
do usuário mais as iniciais do segundo e terceiro nome + @gmail.com.
A base de dados original foi adicionada a tabela “aluguel”, destinada a armazenar as loca-
ções de filmes efetuadas.
Por fim vale citar que a base de dados ficou com as características informadas na tabela
3.1. Um ponto importante a ser observado é a quantidade de dados, que totaliza 7,5 gigabytes,
principalmente obtida da tabela de avaliações, na qual temos 100.273.038 avaliações para um
total de 480.188 clientes, uma média de mais de 208 avaliações por cliente. Com um cliente
avaliando o máximo de 17.647 filmes e o mínimo de um filme.
• Tabela ALUGUEL
Campos
Chaves Estrangeiras
36
• Tabela AVALIACAO
Campos
Chaves Estrangeiras
VALOR - Tipo DECIMAL com duas casas decimais para representação realista da subu-
nidade centavo.
DATA - Tipo DATE, que recupera somente a data sem a hora no formato “dd/mm/aaaa”
• Tabela CLIENTE
Campos
Chaves Estrangeiras
N/A
ID - Tipo BIGINT por exigência do Mahout.
NOME - Tipo VARCHAR, que armazena somente a quantidade de caracteres que forem
utilizadas, descartando espaços extras no momento do armazenamento, ganhando assim
maior dinamicidade quanto ao espaço gasto em disco.
SENHA - Tipo VARCHAR, que armazena somente a quantidade de caracteres que forem
utilizadas, descartando espaços extras no momento do armazenamento, ganhando assim
maior dinamicidade quanto ao espaço gasto em disco.
EMAIL - Tipo VARCHAR, que armazena somente a quantidade de caracteres que forem
utilizadas, descartando espaços extras no momento do armazenamento, ganhando assim
maior dinamicidade quanto ao espaço gasto em disco.
• Tabela FILME
Campos
Chaves Estrangeiras
N/A
ID - Tipo BIGINT por exigência do Mahout.
ANO - Tipo INTEGER com quatro posições para o ano.
38
FILME - Tipo VARCHAR, que armazena somente a quantidade de caracteres que forem
utilizadas, descartando espaços extras no momento do armazenamento, ganhando assim
maior dinamicidade quanto ao espaço gasto em disco.
PRECO - Tipo DECIMAL com duas casas decimais para representação realista da subu-
nidade centavo.
Projeto de Índices
Os índices foram definidos sobre a restrição PRIMARY KEY e UNIQUE especificadas na cri-
ação da tabela (comando CREATE TABLE)
39
• Leve, ou seja, sem abusar das cores, sem muitas animações, sem muitos gráficos, que
sejam transmitidas e carregadas no navegador do usuário de forma rápida, independente
da velocidade da conexão que esteja utilizando;
• Acessível, de modo a permitir que, mesmo pessoas com deficiências visuais sejam capa-
zes de efetuar suas compras, mesmo pessoas com pouca experiência no uso de compras
online consigam efetuar o processo de forma simples.
Nas seções a seguir alguns padrões utilizados no sistema são apresentados. Na Seção 3.8.1
detalhes referentes a hierarquia e organização das páginas do projeto. A Seção 3.8.2 aborda
detalhes referentes a padronização dos elementos que compõem as páginas, imagens e botões,
por exemplo.
O site está estruturado de forma simples ao ponto do usuário encontrar o que necessita em
poucos segundos, sempre com poucos cliques.
Buscou-se a primazia pela simplicidade e facilidade no acesso de todas as telas do sistema
através de seus ícones e botões auto-explicativos, mais detalhes sobre ícones e botões na Seção
3.8.2. O usuário contará ainda com o auxílio de uma barra de navegação exibida na parte
superior esquerda.
Os elementos comuns a várias telas e indispensáveis a navegação no site são descritas a
seguir:
• LogOut - No canto esquerdo, através do ícone “Sair”, após o usuário ter se identificado,
é possível, a partir de qualquer tela que o usuário encerre a sua sessão. Um fator im-
portante para segurança das informações do usuário é a utilização do botão “Sair”, com
seu uso é possível evitar que informações fiquem armazenadas na seção, tais informações
poderiam, por exemplo, ser acessadas por outras pessoas mal intencionadas que utilizem
o mesmo equipamento. Após a realização do Logout, o usuário é direcionado para a tela
Índice.
Índice
Descrição: Esta tela é de grande importância para o site, afinal é a fachada da loja e deve
identificá-la visualmente, sem comprometer a navegabilidade e a localização de todos os links
de interesse do internauta. O usuário poderá então navegar pelo site com a finalidade de escolher
quais filmes deseja alugar, mas não poderá fechar o pedido (somente usuários identificados). Por
41
isso, buscou-se simplicidade e facilidade de navegação do site para uma confortável escolha dos
filmes por parte dos usuários, no acesso de usuários já cadastrados e no acesso ao cadastro de
novos usuários do site.
Acessa: Conta, Índice (Após Login) e Carrinho.
Acessada por: Conta, Índice (Após Login), Carrinho e Pagamento.
Conta
Descrição: É a tela de cadastro de novos usuários no site, onde são solicitadas informações
básicas e obrigatórias sobre o usuário. Neste projeto não há necessidade de maiores informações
(sexo, idade, cidade, bairro, etc) sobre o usuário, visto que a recomendação se dá baseada na
avaliação que o usuário fornece aos filmes e não pelo perfil do mesmo (sexo, idade, cidade,
bairro, etc).
Acessa: Índice. Para que uma vez efetuado o cadastro, possa retornar ao índex para realizar
o Login.
Acessada por: Índice. Para que usuários não cadastrados possam realizar seu cadastro.
Carrinho
Descrição: É a tela onde constam todos os filmes previamente selecionados (para serem aluga-
dos). Nesta tela é apresentada a opção de voltar a página inicial para que se possam adicionar
novos filmes ao “Carrinho de Compras”. Após escolhidos todos os filmes desejados a alugar,
pode-se finalizar a solicitação de compra através do link “Fechar Pedido”.
Acessa: Índice, Índice (Após Login) e Pagamento.
Acessada por: Índice (Após Login) e Pagamento.
Pagamento
Descrição: É a tela na qual será realizado pagamento sobre o valor total dos filmes constantes
no “Carrinho de Compras”. Nesta tela encontram-se as formas de pagamento, selecionando-se
uma, pode-se realizar o pagamento através do botão “Pagar”. A funcionalidade do pagamento
não foi implementada, pois foge do âmbito do projeto.
Acessa: Índice, Carrinho e Índice (Após Login).
Acessada por: Carrinho.
42
• Banner AlugOnline
• Fonte: Arial
• Tamanho da Fonte: 14
Segue a descrição e o significado de cada ícone utilizado e em que tela o mesmo pode ser
encontrado.
43
Pesquisa
Imagem:
Significado: Realiza busca do filme.
Descrição: O ícone de lupa é largamente encontrado em vários sites, sempre relacionado
ao sistema de buscas, até mesmo nos sistemas operacionais, como Windows. Com isso, tal
imagem é sempre associada a função de buscas.
Tamanho: 29x26 pixels.
Tela onde é encontrado: Índice, Índice (Após o Login), Carrinho e Paymment.
Adicionar Filme
Imagem:
Significado: Adiciona o filme ao qual se refere ao Carrinho de Compras.
Descrição: O ícone do carrinho, na proximidade de um item de compra (no caso, um filme)
é largamente encontrado em vários sites de comércio eletrônico. Com isso, tal imagem é difun-
dida como um método de adicionar o item ao qual se refere ao “carrinho de compras”.
Tamanho: 16x16 pixels.
Tela onde é encontrado: Índice (Após o Login).
Remover Filme
Imagem:
Significado: Remove o filme ao qual se refere do “carrinho de compras”.
Descrição: O ícone do carrinho com um “x” em vermelho na proximidade de um item de
compra (no caso, um filme) é largamente encontrado em vários sites de comércio eletrônico.
Com isso, tal imagem é difundida como um método de remover o item ao qual se refere do
“carrinho de compras”.
Tamanho: 16x16 pixels.
Tela onde é encontrado: Carrinho.
Meu Carrinho
Imagem:
Significado: Acessa a tela Carrinho, onde encontram-se todos os filmes escolhidos pelo
usuário.
Descrição: O ícone do carrinho de compras é uma forma de acesso ao “Meu Carrinho”.
Tamanho: 48x48 pixels. O ícone do Meu Carrinho é maior que os ícones Adicionar Filme
e Remover Filme por se tratar de acesso a uma página e não estar vinculado a uma imagem,
como em Adicionar Filme está associado à imagem da capa de um filme.
Tela onde é encontrado: Índice (Após o Login).
Formas de pagamento
Imagens:
44
Botão Entrar
Imagem:
Significado: Realizar “login” do usuário.
Descrição: Este botão é acionado quando o usuário tenta realizar o “login”.
Tamanho: 103x22 pixels.
Tela onde é encontrado: Índice.
Botão Sair
Imagem:
Significado: Realizar “logout” do usuário.
Descrição: Este botão é acionado quando o usuário deseja encerrar sua sessão.
Tamanho: 103x22 pixels.
Tela onde é encontrado: Índice (Após Login), Carrinho e Pagamento.
Botão Pagar
Imagem:
Significado: Realizar pagamento dos itens constantes no carrinho.
Descrição: Este botão é acionado quando o usuário deseja encerrar o seu pedido.
Tamanho: 103x22 pixels.
Tela onde é encontrado: Pagamento.
45
Capítulo 4
Aspectos de Implementação
Após todo o processo de levantamento de requisitos a equipe começou a buscar soluções aos
problemas e respostas às questões levantadas. O primeiro problema e sua respectiva questão
foram, gerenciamento, como gerenciar um projeto de forma simples, rápida e eficiente.
Se tratando de um projeto bem grande em relação aos já criados pela equipe, imaginou-
se uma forma simples de gerenciar minimamente o projeto. A alternativa encontrada foi o
uso do programa XMind1 , em sua versão 3.2.0. Tal programa permite o gerenciamento visual
através de um “mapa mental”, exibindo as tarefas a realizar e sobre as quais podem ser aplicadas
diferentes cores.
A figura 4.1 mostra o mapa de um determinado momento do projeto, observem-se as cores:
verde, significando tarefa completa ou em estágio avançado, amarelo significando que a tarefa se
encontra em andamento mas ainda não passou por revisão do orientador, vermelho significando
tarefa não iniciada ou em estágio inicial.
O uso de tal ferramenta foi de grande valia para observar pontos a serem atacados e obje-
tivos a serem alcançados durante o projeto. Permitindo gerenciamento eficaz mas sem grande
dispêndio de tempo.
1
www.xmind.net
46
Sabendo o que fazer e como gerenciar o próximo passo foi o da descoberta de como alcançar
os objetivos da equipe, a próxima pergunta foi então, que ferramentas podem apoiar a feitura
do projeto.
A ferramenta utilizada na modelagem do sistema foi a astah*2 , versão 6.2.1 para comuni-
dade, permitindo a feitura de todos os diagramas UML constantes neste projeto, tais diagramas
são de grande importância pois permitem a transmissão do conhecimento sobre a estrutura
deste.
Como ponto inicial existia o requisito de um sistema com suporte a acesso através da In-
ternet, um sistema de comércio online. Foi decidido o uso da linguagem Java para desenvolvi-
mento do projeto, por se tratar de uma linguagem cuja API atenderia a todas as necessidades
levantadas e que possui possibilidade de desenvolvimento voltado para Web.
Para apoiar a tarefa do desenvolvimento selecionamos a IDE Eclipse3 , versão Helios SR1.
Se trata de uma IDE gratuita e leve, não exigindo computador muito potente para seu uso. Não
precisa ser instalada, basta descompactar e começar a utilizar, o que facilita seu uso mesmo em
ambientes corporativos onde o usuário é impossibilitado de instalar programas.
Como SGDB utilizamos o MySQL, contudo optamos por utilizar o programa XAMPP4 , em
sua versão 1.7.3, tal programa traz a instalação e apresenta interface de gerenciamento para os
programas Apache (Web Server) e MySQL, dentre outros, o que facilita a utilização de tais
ferramentas.
Com todo o ambiente de desenvolvimento pronto o sistema que dá suporte ao site de aluguel
de filmes foi desenvolvido paralelamente ao programa que fornece recomendações. Apesar do
primeiro ser bem maior que o segundo, seu desenvolvimento e refinamento levou mais tempo,
muito por conta da utilização de um framework que nenhum dos componentes do grupo havía
utilizado anteriormente, o Apache Mahout, mas também muito por conta da documentação
deficiente deste, assim, foram necessárias muitas pesquisas e muito esforço.
Na feitura da monografia foi utilizado o Microsoft Word 2010, com o objetivo de facilitar a
difícil tarefa de eliminar erros de escrita, contudo a edição final do trabalho foi feita utilizando
ferramentas padrão LATEX, de modo a oferecer maior qualidade visual.
Facilitando a feitura e gerenciamento das referências bibliográficas foi utilizado o ZO-
TERO5 , uma ferramenta gratuita, fácil de utilizar que ajuda a coletar, organizar, fazer citações
e compartilhar fontes de pesquisa. Funciona acoplado, como um plugin, para o navegador Fi-
reFox permitindo que sejam coletadas referências bibliográficas de sites, livros, etc. Possui
também conexão com o Microsoft Word permitindo gerenciamento e formatação automática da
Seção de Referências Bibliográficas, permite também exportação de arquivo de referências no
padrão LATEX.
O relato do processo de desenvolvimento dos artefatos de software é apresentado nas pró-
ximas seções. A Seção 4.1 relaciona a sequência de desenvolvimento do sistema, fornecendo
uma visão de análise e projeto do sistema. Já na Seção 4.2 observa-se uma visão mais técnica
do sistema, apresentando tecnologias envolvidas, frameworks, e descrição do código envolvido
na realização dos casos de uso. Finalmente a Seção 4.3 descreve de que forma todo este sistema
deve ser organizado e apoiado de forma a servir ao seu propósito.
2
astah.change-vision.com
3
www.eclipse.org
4
www.apachefriends.org
5
www.zotero.org
47
estaria correto e o provável erro se encontraria na base de dados. Tipos de dados incorretos e
restrições impostas pelo framework faziam com que as recomendações nunca fossem geradas.
Tendo ambos os sistemas em funcionamento era possível decidir por manter ambos como
serviços separados, contudo, com o intuito de reduzir complexidade, estes foram acoplados, e
o sistema de comércio eletrônico agora conta também com recomendações.
• JavaServer Faces - Uma tecnologia que provê um framework com interface para usuá-
rio para aplicações Web que permite inclusão de componentes gráficos em uma página,
dentre outras funcionalidades.
• JavaServer Pages Standard Tag Library - Uma biblioteca de marcações que encapsula
funcionalidades básicas comuns a páginas JSP.
• JavaBeans - Objetos que atuam como armazenadores de dados temporários para as pági-
nas de uma aplicação.
• Enterprise JavaBeans;
Das tecnologias citadas foram utilizadas no projeto: JavaServer Pages, Expression Lan-
guage, JavaServer Pages Standard Tag Library (JSTL) e Java Persistence API.
A proposta inicial para o conceito Model View Controller (MVC) data de 1974. No MVC
a aplicação fica subdividida em três componentes, modelo (Model), visão (View) e controle
50
(Controller). Hoje o MVC é um padrão de projeto que faz parte do catálogo PoEAA, como
pode ser visto em [16].
A ideia por trás do MVC é fazer uma divisão clara entre objetos de domínio, que modelam
nossa percepção sobre o mundo real, e objetos de apresentação, que são os elementos gráficos
que vemos na tela.
No MVC os elementos de domínio são referenciados como o modelo. Objetos de modelo
ignoram a existência da interface do usuário. Esse componente provê operações para que o
restante da aplicação possa manipulá-lo.
A camada da apresentação no MVC é feita dos dois elementos restantes, a visão e o con-
trolador. O trabalho do controlador é receber as entradas do usuário e saber o que fazer com
estas.
Uma aplicação pode possuir diferentes visões de um mesmo modelo, por exemplo uma visão
de edição, uma visão de impressão e uma visão de seleção. Adicionalmente, cada visão possui
a ela associada um controlador, que auxilia na implementação da interface gráfica associada a
visão.
Na construção do sistema foi utilizado o modelo MVC um pouco modificado, ao invés de
um controlador para cada interface do usuário, para cada conceito do sistema foi utilizado um
controlador diferente, com isso temos um controlador para o “carrinho de compras”, um para
ações relacionadas a filmes e um para ações referentes a usuários.
Como pode ser observado no trecho de código 4.1, os controladores utilizados possuem
visão sobre o modelo (linhas 3 e 13), para onde efetuam requisições no esforço de atender
solicitações dos usuários, e sobre a camada de visão (linha 14), para onde enviam dados. Atente
também para o uso da anotação @Resource (linha 1) referente ao framework VRaptor, que
permite que a classe disponibilize seus métodos a requisições de usuários.
1 @Resource
2 public class CartController {
3 private final CartRepository cartRepository;
4 private final Result result;
5 private final Sys sys;
6 public CartController(CartRepository cartRepository,
7 Result result, Sys sys) {
8 this.cartRepository = cartRepository;
9 this.result = result;
10 this.sys = sys;
11 }
12 ...
13 public void filmList() {
14 result.include("filmList", cartRepository.getFilms());
15 result.forwardTo(sys.getCartPage());
16 }
17 ...
18 }
Pode-se observar em 4.2 que a camada de visão possui dependência em relação a tipos de
dados do modelo (linha 10), os quais recebe dos controladores, sem contudo efetuar troca de
mensagens diretamente com o modelo. No trecho de código pode-se observar também o uso
de HTML (linhas 12 e 16), Expression Language (linhas 8, 10 e 13) e Standard Tag Library
(linhas 8 e 10) na feitura da página JSP.
51
1 @Component
2 public class FilmeRepository {
3 private final FilmeDAO dao;
4 public FilmeRepository(Session session) {
5 this.dao = new FilmeDAO(session, Filme.class);
6 }
7 ...
8 public Film load(Long id) {
9 return dao.load(id);
10 }
11 ...
12 }
Para a implementação das camadas de Model e Controller foi utilizado o framework VRap-
tor, em substituição ao uso de Servlets. Tal framework utiliza os conceitos de injeção de depen-
dência, inversão de controle e POJOs, sendo extremamente flexível, ao permitir o uso de outros
frameworks, sem restringir ou amarrar a nenhuma tecnologia específica. É pouco intrusivo, ao
usar anotações e o conceito de COC (Convention Over Configuration - convenção acima de
52
configuração), no qual se prega que, ao seguir as convenções do framework utilizado não é ne-
cessário efetuar configurações, em outras palavras, só é necessário efetuar alguma configuração
quando não for seguida a convenção do framework.
A injeção de dependências é efetuada através dos construtores das classes, como foi possí-
vel ver em 4.1, bastando para isso que a dependência necessária para o funcionamento da classe
seja informada no método construtor desta. O VRaptor, ao “perceber” a dependência, se en-
carrega de criar uma instância do objeto necessário e passar ao construtor da classe. As classes
referentes às dependências precisam apresentar a anotação @Component do VRaptor para que
tudo funcione corretamente, como pode-se ver em 4.3.
Na camada de visão, ou seja, na feitura das páginas, foram utilizadas as tecnologias HTML
4, JSP, JSTL 1.2, Expression Language e CSS.
Para a camada de controle foram utilizadas classes comuns Java, com a anotação @Resource
do VRaptor, isso faz com que os métodos da classe fiquem disponíveis externamente através da
URL, no formato /aplicação/classe-controller/método/.
Na camada de modelo foram criadas diversas classes que servem de fachada para seus res-
pectivos objetos de domínio e classes de persistência, aplicando, desta forma, o padrão de pro-
jeto “Repository” (repositório).
A classe fachada recebe requisições da camada de controle ou de outras classes de fachada
e as repassa para classes de domínio do negócio e para classes que efetuam a persistência de
dados. Recebem a anotação @Component do VRaptor para que possam ser utilizadas através
de injeção de dependência onde forem necessárias.
As classes de persistência de dados, classes DAO (Data Access Object - objeto de acesso a
dados) também recebem a anotação @Component do VRaptor, são utilizadas através de injeção
de dependência nas classes fachada. São utilizadas para recuperar os dados, ou coleções de
dados, de maneiras, formatos, ordem, ou com critérios específicos.
DAO é um padrão do catálogo JEE, utilizado para abstrair e encapsular todos os acessos a
fonte de dados. O DAO gerencia a conexão com a fonte de dados para obtenção e armazena-
mento de dados. Comandos e configurações podem variar para cada banco de dados, com o
uso do DAO expõe-se uma interface independente do SGDB utilizado, escondendo detalhes da
implementação de acesso aos dados aos clientes.
Em 4.4 vemos uma classe DAO utilizada no projeto. Um fato importante é a não utilização
de SQL, ao invés disso utilizam-se métodos referentes a classes do framework Hibernate.
1 @Component
2 public class FilmDAO extends DAO<Film> {
3
4 public FilmDAO(Session session,
5 Class<Film> persistentClass) {
6 super(session, persistentClass);
7 }
8 public Lis find(String searchString) {
9 Criteria criteria = session.createCriteria(Film.class);
10 criteria.add(Restrictions.ilike("name", searchString, MatchMode.
ANYWHERE));
11 return criteria.list();
12 }
13 }
1 @Entity
2 @Table(name = "filme")
3 public class Filme implements Serializable {
4 private static final long serialVersionUID = 6L;
5 @Id
6 private Long id;
7 @Column(name = "ANO")
8 private Long ano;
9 ...
10 public Long getId() {
11 return id;
12 }
13 public void setId(Long id) {
14 this.id = id;
15 }
16 ...
17 }
Hibernate é uma biblioteca de código livre de mapeamento objeto relacional (Object Relati-
onal Mapping - ORM) para a linguagem Java. Permite o desenvolvimento de classes persisten-
tes seguindo o “idioma” Java, incluindo associação, herança, polimorfismo, composição e uso
de coleções.
Mapeamento objeto relacional trata do esforço em se resolver as diferenças entre o para-
digma de orientação a objetos e o armazenamento de dados no modelo relacional, este pro-
blema também é conhecido como “descasamento de impedância” (impedance mismatch [8]).
Não existe somente uma diferença de tipos de dados, mas também em termos de tipos de rela-
cionamentos. O mundo orientado a objetos permite uma grande variedade de associações como
agregação, composição e herança, os quais não podem ser efetuados diretamente no mundo
relacional.
O Hibernate não somente efetua o mapeamento de classes Java para tabelas de um banco de
dados, mas também provê facilidades de filtragem e recuperação de dados.
Possui integração com a arquitetura JEE, inicialização tardia, dentre diversas outras vanta-
gens frente ao uso de JDBC.
O envio de e-mail foi conseguido com o uso da API Java Mail, a qual provê framework
independente de plataforma e de protocolo, para a construção de aplicações que utilizam sistema
de envio de e-mail. Com ela é possível fazer com que o sistema conecte-se a um servidor de
e-mail, autentique-se e transmita a mensagem. O Gmail é utilizado para tais fins.
O sistema de recomendação utiliza o framework Apache Mahout. Recebendo apenas uma
conexão à base de dados, busca as informações necessárias e gera as recomendações.
sistema.
Na Seção 4.3.1 é descrito, com detalhes, o hardware necessário para utilização do sistema
desenvolvido. A Seção 4.3.2 detalha o software que deve existir para dar apoio ao sistema. Já
na Seção 4.3.3 são descritos dados referentes ao ambiente necessário para gerenciamento de
banco de dados, o SGBD a ser utilizado pela aplicação. É descrito na Seção 4.3.4 o necessário
para que a aplicação envie e-mail de confirmação de aluguel. Finalmente na Seção 4.3.5 são
descritos os procedimentos de implantação do sistema.
4.3.1 Hardware
Como se trata de um sistema informatizado, é necessário um computador em funcionamento,
com sistema operacional instalado e acesso à Internet, para que o sistema possa estar disponível
nesta.
O sistema funciona mesmo em um computador extremamente modesto, foram efetuados
testes em um computador com processador Pentium III de 600MHz, placa mãe ASUS P3BF,
500MB de memória, interface de rede 100Mbps, disco rígido IDE de 20GB. O sistema respon-
deu às requisições de um outro computador, através da rede montada, sem apresentar falhas.
Apesar de funcionar mesmo em uma configuração tão modesta quanto a apresentada deve-
se utilizar o bom senso, não faz sentido utilizar apenas uma máquina com tal configuração em
uma empresa que atenda à grandes demandas.
Em caso de utilização de diversos servidores que forneçam os diferentes serviços que for-
mam a aplicação, ou seja, o servidor de banco de dados, o servidor de e-mail, torna-se necessária
uma estrutura de rede com desempenho satisfatório, de acordo com a demanda.
Deve-se dar especial atenção a questão de segurança, montar uma estrutura que forneça ser-
viços disponíveis através da Internet é uma tarefa que demanda um grau elevado de capacitação,
não apenas para que os servidores troquem dados de forma extremamente rápida, mas também
para que toda a estrutura seja confiável. Tais detalhes estão fora do escopo deste trabalho, ainda
assim a segurança é de tal importância que não poderia ser ignorada.
4.3.2 Software
Um servidor Java EE é uma aplicação servidora que implementa as APIs da plataforma Java EE
e provê os serviços Java EE. Servidores Java EE são chamados, algumas vezes, de servidores de
aplicações porque permitem que um sistema provenha aplicações para clientes, como servidores
Web proveem páginas para navegadores.
Servidores Java EE hospedam diversos tipos de componentes de aplicações que correspon-
dem as camadas em uma aplicação multi camadas. O servidor Java EE provê serviços para estes
componentes na forma de um container.
Containers Java EE são interfaces entre o componente e a funcionalidade de baixo nível
provida pela plataforma para suportar aquele componente. A funcionalidade do contêiner é
definida pela plataforma, e é diferente para cada tipo de componente. O servidor permite a tipos
diferentes de componentes trabalharem juntos para prover funcionalidades em uma aplicação.
Assim, além do sistema operacional devidamente instalado, o sistema precisa de um con-
tainer Java EE que forneça suporte a sua execução. Durante o desenvolvimento e na fase de
testes foi utilizado o Apache Tomcat9 em sua versão 6.0, por conta de sua simplicidade de
uso, não necessidade de instalação (basta descompactar para uma pasta e executar) e relação
tamanho/desempenho.
9
tomcat.apache.org
55
Servidores de aplicação, como GlassFish, JBoss, Apache Geronimo, dentre diversos outros
existentes no mercado, também podem ser utilizados para fornecer suporte ao sistema, contudo
devem ser feitas alterações nas dependências do projeto nesse caso.
4.3.5 Procedimentos
São necessários alguns procedimentos além da instalação das máquinas e configuração do ambi-
ente de produção. De forma a efetuar a união de todas as partes citadas, com o objetivo de fazer
com que o sistema funcione. Estes procedimentos são detalhados nas Seções que se seguem.
Deployment
A instalação do sistema no Servlet Container, procedimento também conhecido como “deploy-
ment”, deve ser feita somente depois de configurados todos os arquivos de propriedades. As
principais IDEs existentes geram automaticamente o arquivo utilizado para a instalação e esta
pode ser efetuada.
56
Capítulo 5
Experimentos
Este capítulo apresenta dados e resultados de experimentos práticos. Testes realizados com o
intuito de explorar diferentes tecnologias e métodos que possam vir a possibilitar o aumento de
desempenho no processo de geração de recomendações.
Foram realizados dois testes distintos, a utilização de uma implementação de banco de dados
em cluster, apresentado na Seção 5.1 e a utilização de processamento distribuído, Seção 5.2,
ambos utilizando diversos computadores no processo de apoiar a geração de recomendações.
5.1 Cluster
Foi utilizada, de forma experimental, uma implementação de banco de dados distribuído, com
o intuito de observar possíveis melhorias no tocante à eficiência do sistema de recomendações.
Inicialmente levantou-se a possibilidade de, dada a grande utilização de acesso aos dados do
banco de dados, melhorias no sentido de tornar tal acesso mais rápido poderiam gerar grandes
benefícios.
O objetivo primordial do teste utilizando banco de dados distribuído é o de verificar se com
a utilização deste as recomendações são geradas de maneira mais rápida.
O MySQL Cluster foi utilizado como opção a versão local do MySQL, utilizada durante
toda a fase de desenvolvimento e testes da aplicação. Assim como a versão local a versão
cluster é gratuita, e de código fonte aberto.
Sem a necessidade de uma infraestrutura complexa, ou computadores de alta performance -
em nossos testes conseguimos rodar um cluster utilizando até mesmo dois computadores Pen-
tium III 600MHz com 512MB de RAM. Funcionando nos principais sistemas operacionais -
Linux, Oracle Solaris e Microsoft Windows - sem a necessidade de serem servidores, são pon-
tos que fazem do MySQL Cluster uma opção barata e ainda assim confiável.
Com ótima documentação, fácil instalação, configuração simples, gerenciamento descom-
plicado, permite automatizar tarefas, é extremamente escalável - permite a adição de nós mesmo
com o cluster em funcionamento - suportando até 255 nós.
Qualquer falha é detectada instantaneamente e o controle é automaticamente passado a ou-
tros nós no cluster, sem a interrupção de serviço aos clientes. Além disso os nós do cluster
podem, automaticamente, reiniciar, recuperar e dinamicamente reconfigurar a si mesmos em
caso de falhas. A tecnologia de “auto cura” é completamente transparente para todas as aplica-
ções.
A arquitetura do MySQL Cluster, que pode ser observada na figura 5.1, é desenhada para
grande disponibilidade (99.999% - o que se traduz em menos de cinco minutos por ano de
downtime). O sistema consiste em múltiplos nós, os quais podem ser distribuídos através de
58
Para garantir performance de tempo real armazena índices na memória, permite também
armazenamento de dados na memória para uso em aplicações que necessitam de baixa latência.
Permite replicação assíncrona de dados entre clusters remotos, permitindo a “replicação
geográfica”, o que é idealmente destinado para organizações com diversos data centers, permi-
tindo alta disponibilidade através de uma WAN e reduzindo os efeitos de latência geográfica,
localizando clusters próximo aos usuários.
Utilizando uma versão simplificada do sistema, como exibido no código fonte em 5.1, a
qual simplesmente fornecia recomendações para um usuário especificado programaticamente,
exibindo o tempo gasto no processo de gerar uma lista de recomendações, foi possível comparar
os tempos de geração de uma recomendação.
No intuito de tornar mais claro o código fonte em 5.1 seguem algumas explicações sobre o
que cada parte do código faz.
Para quantificar o tempo transcorrido do início ao fim do programa cria-se a variável inicio,
linha 3, e nela é armazenado, em milissegundos o horário de início do programa.
A linha 4 constrói uma DataSource e da linha 5 a 9 são informados parâmetros de confi-
guração do servidor de banco de dados. Logo depois utiliza-se tal informação para criar um
DataModel.
Na linha 11 temos a informação da maneira pela qual será calculada a similaridade entre os
usuários. Nos testes, como pode ser visto, foi utilizada a Correlação de Pearson, uma imple-
mentação do próprio framework Apache Mahout.
Já a linha 12 informa ao framework quantos “vizinhos” serão utilizados, o tipo de simila-
ridade a ser utilizada e que DataModel deve ser utilizado para buscar os dados, para o cálculo
dos “vizinhos” mais próximos.
59
O framework cria a figura do “recomendador”, ou seja, o objeto que irá gerar as recomen-
dações, na linha 13, foi utilizada uma implementação do próprio framework Apache Mahout.
Temos, na linha 14, a criação de uma lista de itens que o framework irá preencher com itens
recomendados, no exemplo, para o usuário de identificação 7, com o máximo de 6 recomenda-
ções.
Da linha 15 a 18 o sistema exibe a lista de recomendações, em ordem de importância, e o
tempo transcorrido do início ao fim do processamento.
Os testes para os quais foram registrados os tempos foram efetuados no laboratório 4 do
pavilhão 1 do CEFET-RJ, unidade Maracanã, onde se encontram as instalações do curso Tec-
nólogo em Sistemas para Internet.
Executando o programa exibido em 5.1, para diferentes configurações - local, utilizando
quatro computadores, seis e oito computadores fazendo parte de um cluster - registrando os
tempos de geração de recomendações para três clientes, os IDs escolhidos foram: 6, 25 e 911,
escolhidos pelo grupo ao acaso.
Dos valores encontrados, para cada configuração, foi efetuada média aritimética entre os
tempos das recomendações para os diferentes IDs de usuários e os valores são apresentados na
tabela 5.1:
Com a intenção de permitir uma análise mais fácil dos dados, geramos o gráfico em 5.2,
contendo os tempos obtidos com as diferentes configurações.
Mahout, o sistema utiliza a tabela AVALIACAO buscando os dados de cada cliente e para cada
um deles verifica seus similares, utilizando a Correlação de Pearson, gerando recomendações
com os itens mais bem avaliados por estes, apresentando como resultado a identificação dos
itens recomendados. O pseudo código pode ser observado em 5.2.
Foram efetuados alguns testes com o sistema desenvolvido, o sistema realmente funciona
com perfeição, o problema é a quantidade de dados existente, com a base de dados completa
o sistema leva cerca de 20 minutos para gerar as recomendações de cada usuário, sabendo-
se que a base de dados possui 480.188 usuários registrados, o tempo estimado para gerar as
recomendações para todos seria de alguns meses.
Ficou decidido que não seria utilizada toda a base de dados para os testes, e sim uma por-
centagem desta, mas utilizando apenas 2% dos usuários registrados o sistema ainda demora
três dias e meio para gerar todas as recomendações. Como os testes seriam efetuados nos la-
boratórios do CEFET e seriam feitas várias rodadas de testes com processamento distribuído
(utilizando 6, 5, 4 até 1 computador), com 2% dos dados tais testes durariam por volta de seis
dias e meio.
Para minimizar o impacto nas aulas das turmas do CEFET que utilizam os laboratórios,
decidiu-se que o sistema utilizaria apenas 0,5% da base de dados original, o que ainda assim
permitiria testes que durariam algumas horas.
O próximo passo seria o desenvolvimento de uma versão do sistema que permitisse proces-
samento distribuído, várias máquinas dividiriam o trabalho de gerar recomendações para toda a
base de dados, cada uma para um subgrupo do total de usuários registrados.
A ideia inicial era de construir uma arquitetura onde um computador gerenciasse outros, tan-
tos quanto necessários, fazendo com que estes iniciem o processo de gerar recomendações, com
uma mensagem com ordem de inciar e a informanção de por qual subgrupo de usuários cada
um seria responsável por gerar recomendações, registrasse os tempos que levam e finalizasse
todo o processo.
62
A forma pela qual mensagens são trocadas entre os computadores pode se dar de três formas
possíveis em uma rede:
• unicast - comunicação entre duas máquinas diretamente, também conhecida como ponto
a ponto, uma mensagem é enviada em específico para um host da rede - o problema desta
abordagem é que tem de se saber de antemão o endereço de cada máquina com a qual se
pretende comunicar. O grupo utilizou esta abordagem no momento em que as máquinas
que efetuam o processo de gerar as recomendações se identificam à máquina gerente
como “clientes”, quando a máquina que gerencia o processo informa às que geram as
recomendações, que estas devem iniciar o processo e o subgrupo de usuários pelo qual ela
está responsável de gerar as recomendações e quando as máquinas “clientes” informam
que terminaram seus respectivos trabalhos à máquina “servidor”;
• multicast - os hosts que desejarem fazer parte da comunicação devem aderir à um grupo,
que utiliza um IP, todas as inscritas neste grupo recebem as mensagens destinadas ao
grupo;
• broadcast - uma mensagem enviada em broadcast através de uma rede, é recebida por
todos os hosts no mesmo domínio de broadcast - esta abordagem permite que a máquina
gerente informe para todos os hosts “eu sou a máquina gerente”, sem a necessidade de
saber quantas e quais estarão envolvidas no processo, ou melhor ainda, limitar as má-
quinas envolvidas, mesmo que uma centena de máquinas estejam disponíveis para gerar
recomendações, ela pode utilizar apenas as mais rápidas a responder sua mensagem. Esta
abordagem foi utilizada no momento em que a máquina que gerencia o processo se iden-
tifica como “servidor” para todos os hosts na rede.
• UDP - provê um modo de comunicação que permite que sejam enviados pacotes de dados,
chamados datagramas, entre máquinas. Não provê segurança, mas é mais rápido que o
TCP. Permite comunicação unicast, multicast ou broadcast. Foi a opção utilizada pelo
grupo.
Com base nos dados obtidos foi gerado o gráfico 5.4, que se segue.
Conclusões
Análise Restrospectiva
O propósito inicial deste trabalho era o de efetuar pesquisa e implementação de um sistema de
recomendação. Contudo, com o avanço da pesquisa foram descobertos dois frameworks que
possibilitam a criação de sistemas de recomendação, o Duine e o Apache Mahout.
A possibilidade do uso de frameworks, com código desenvolvido por equipes maiores, já
testado, maduro e assim menos propenso a falhas fez com que a equipe vislumbrasse a possibi-
lidade de gerar um sistema, logo de início, ultrapassando os problemas iniciais de desenvolvi-
mento - escolha do tipo de dados, arquitetura da aplicação, dentre outros - indo direto a geração
de recomendações com bons padrões de qualidade.
A escolha do grupo foi o Apache Mahout, o Duine não gera realmente recomendações,
ele analisa o valor de um dado item ao cliente, gerando uma estimativa da nota que o usuário
forneceria ao item. Já o Apache Mahout faz todo o trabalho de gerar recomendações ao usuário,
ou seja, faz o mesmo que o Duine, fornecendo, para cada item, a estimativa de avaliação que o
usuário forneceria, indo além, fornece uma lista de itens que seriam os mais bem avaliados.
Assim foi desenvolvido um sistema de comércio eletrônico, de maneira rápida e efetiva para
servir como linha de frente de um sistema de recomendação. Em paralelo foi efetuada a tenta-
tiva de desenvolver o sistema de recomendação, como um projeto em separado, infelizmente,
com todo o sistema de comércio eletrônico funcionando, ainda não havia êxito na geração de
recomendações.
A descoberta de que a implementação estaria correta e que o erro se encontrava na tipagem
dos dados na base de dados só viria vários dias depois. Com documentação precária, poucos
exemplos, e sem experiência no uso do framework, o grupo teve bastante trabalho para descobrir
que o Apache Mahout necessita que algumas regras sejam obedecidas no formato da base de
dados empregada na geração das recomendações.
Com todo o sistema funcionando houve um aumento de escopo, seria feita a tentativa de
utilizar a flexibilidade gerada pelo uso do Apache Hadoop, base do Apache Mahout, na utiliza-
ção de computação distribuída, na tentativa de dividir o trabalho de gerar recomendações entre
diversos computadores.
Com documentação péssima, pior que a do Apache Mahout, que já é ruim, pouquíssimos
exemplos, estes referentes a versões anteriores, aparentemente incompatíveis com a versão atu-
almente disponibilizada, exigência de ambiente específico, com o uso do sistema operacional
Linux e uma série de configurações, a implementação de um sistema distribuído para a geração
de recomendações se mostrou por demais complexa e, infelizmente o grupo não teve sucesso
nessa tarefa.
Cabe uma observação importante quanto ao processamento distribuído para a geração de
recomendações, distribuir a computação não a torna mais eficiente, pelo contrário, usualmente
requer muito mais recursos. Mover dados entre várias máquinas consome recursos de rede, a
computação frequentemente tem de ser estruturada de uma maneira que envolva computação
e armazenamento de diversos resultados intermediários, o que pode levar tempo de proces-
samento significativamente maior para computar. O software que “orquestra” tais operações
consome memória e poder de processamento também significativo.
De qualquer forma a computação distribuída oferece uma maneira de cálculo e geração
de recomendações em uma escala em que computação “não distribuída” não poderia se quer
começar, dada a falta de recursos necessários para tal em uma só máquina.
Com o fracasso da implementação de um algoritmo distribuído, houve nova mudança de
escopo, foi levantada a hipótese do uso de um banco de dados distribuído, acerca do qual o
grupo efetuou pesquisas e conseguiu sucesso em seu uso.
67
Trabalhos Futuros
O sistema desenvolvido para utilização em um site de aluguel de vídeos apresenta diversos
aspectos comuns a diversos sites de vendas e de aluguel de itens online. Uma possível melhoria
seria torna-lo mais genérico, possibilitando seu aproveitamento em diversos outros domínios.
A implementação de um arquivo de mensagens customizadas e algumas poucas mudanças em
alguns pontos da aplicação, a primeira vista, já parecem suficientes.
No tocante ao sistema de recomendações podem ser aplicados testes com diferentes métricas
de similaridade, de forma a encontrar a mais apropriada ao domínio do problema, o que pode
significar uma abordagem que leve menos tempo, ou uma que consiga melhor acurácia, ou ainda
uma que forneça um meio termo, ou ainda a descoberta da existência (ou a implementação) de
uma abordagem que alcance ambos os benefícios.
O número de vizinhos mais próximos é outro item que pode ser modificado de forma a trazer
melhores resultados. A utilização de um número fixo de vizinhos pode ser melhor ajustada, ou
ainda substituída por uma abordagem que leve em conta o grau de similaridade, por exemplo,
todos aqueles que apresentarem similaridade igual ou superior a oitenta por cento devem ser
levados em conta. Tal configuração pode levar a resultados mais precisos, mas por outro lado
pode levar a ausência de resultados, em casos que não existam vizinhos que atendam a tal
especificação.
Um desafio maior, e bem mais complexo é a implementação de uma abordagem distribuída
para a geração das recomendações nos moldes do Apache Hadoop, levando dados e proces-
samento exatamente para onde serão utilizados. Tal trabalho pode ser feito com o Apache
Handoop, talvez novas versões tragam melhores documentações ou possuam menos restrições
quanto ao ambiente necessário para seu funcionamento, ou talvez possa ser desenvolvido, o que
parece uma tarefa bem complexa.
Os resultados obtidos na utilização de um banco de dados distribuído reforçam a idéia de
que o uso de computação distribuída obtenha melhores resultados no processamento de grandes
quantidades de dados, com o intuito de gerar recomendações. Mesmo com computadores e uma
rede não apropriados para o intuito obteve-se bons resultados, a possibilidade, para uso empre-
sarial, de ligações em rede utilizando fibra ótica, redes extremamente velozes, e computadores
com grande capacidade de processamento mostram que o sistema desenvolvido pode sim, sob
as circunstâncias apropriadas, atender grandes demandas.
68
Apêndices
69
Apêndice A
Manual do Usuário
retornam os mesmos resultados. Espaços são considerados nas buscas, com isso uma busca por
“time ” (palavra “time” com um espaço ao fim) não retornaria o filme “Modern Times”.
As pesquisas podem ser efetuadas digitando-se o padrão a ser encontrado na caixa de texto,
teclando ENTER ou clicando na imagem ao final.
No rodapé das páginas constam os links para a página do CEFET-RJ, do curso Tecnólogo em
Sistemas para Internet e para os e-mails dos componentes do grupo e do orientador do projeto.
A.4 Cadastro
A tela de cadastro, que pode ser vista na figura A.3, permite que novos usuários efetuem registro
no sistema, para que possam fazer uso de todas as funções disponíveis neste. Para efetuar seu
cadastro o usuário deverá fornecer os dados requisitados: Nome, e-mail e senha.
Após fornecer os dados o usuário dever´s clicar no botão “Salvar”, o que fará que o sistema
registre os dados fornecidos.
72
Na tela apresentada em A.4, observe-se que, como o usuário não se identificou, não lhe é
permitido que este finalize o aluguel dos filmes.
Para usuários identificados o sistema permite que se feche o pedido de aluguel dos filmes,
como pode ser visto na figura A.5, pode-se observar a existência do botão Usuários identificados
no sistema podem fechar o pedido de compra através de clique no botão “Fechar Pedido”, pouco
abaixo da identificação do usuário que existe na página.
Observe-se que tanto para usuários identificados como os não identificados podem observar
o total de filmes constantes no carrinho de compras, logo abaixo da identificação do usuário.
A.6 Pagamento
A tela de pagamento pode ser observada na figura A.6. Esta tela permite que se observem os
filmes que serão alugados, e a escolha da forma de pagamento.
Uma vez que seja escolhida a forma de pagamento e que se clique no botão “Pagar” o sis-
tema registra o aluguel dos filmes, envia ao usuário um e-mail e esvazia o carrinho de compras.
Bibliografia
[10] A DOMAVICIUS , G., AND T UZHILIN , A. Toward the next generation of recommender
systems: A survey of the state-of-the-art and possible extensions. IEEE TRANSACTIONS
ON KNOWLEDGE AND DATA ENGINEERING 17, 6 (2005), 734—749.
[11] A ZAK , M., AND B IRTURK , A. Crossing framework - a dynamic infrastructure to develop
knowledge-based recommenders in cross domains. In WEBIST (2) (2010), pp. 125–130.
[13] B RYNJOLFSSON , E., H U , Y. J., AND S MITH , M. D. The longer tail: The changing shape
of amazons sales distribution curve. SSRN eLibrary (Sept. 2010).
[14] C OUGO , P. Modelagem conceitual e projeto de bancos de dados. Campus, Rio de Janeiro,
1997.
75