MyGowl

From Laboratório MM 5

(Difference between revisions)
Jump to: navigation, search
 
(27 intermediate revisions not shown)
Line 1: Line 1:
Página do projecto ''MyGowl.com''.
Página do projecto ''MyGowl.com''.
-
'''Introdução'''
+
 
 +
----
 +
 
 +
== Introdução ==
'''Objectivo do documento'''
'''Objectivo do documento'''
 +
 +
O presente documento tem por objectivo relatar o planeamento, concepção e desenvolvimento da plataforma MyGowl, objecto de avaliação da disciplina, clarificando as técnicas metodológicas utilizadas para a solução de problemas e correcção de erros.
'''Visão geral do projecto'''
'''Visão geral do projecto'''
-
'''Base de dados desenvolvida'''
+
O projecto MyGowl trata-se de uma plataforma online de bookmarking social, seguindo o conceito da web 2.0, desenvolvida no âmbito da disciplina de Laboratório Multimédia 5, curso de Novas Tecnologias da Comunicação, da Universidade de Aveiro. Trata-se de um projecto desenvolvido recorrendo a tecnologias ''server-side'' (PHP), e a tecnologias ''client-side'' (HTML/XHTML, CSS e JavaScript), sobre a docência de Hélder Caixinha e Licínio Mano. O projecto em questão foi realizado em conjunto com as disciplinas de Implementação e Controlo de Projectos Multimédia, docência por Margarifa Almeida, e Gestão de Empresas, disciplina leccionada por Vera Vale.
 +
 
 +
 
 +
 
 +
== Base de dados desenvolvida ==
 +
 
 +
Após discutidas as principais funcionalidades presentes na nossa plataforma, procedeu-se ao estudo da forma mais eficiente e simples para implementar a base de dados da mesma.
 +
De forma geral, podem existir diferentes alternativas de implementação da base de dados, levando à necessidade de estudar aprofundadamente as possibilidades.
 +
Tratando-se a nossa plataforma de uma aplicação web de bookmarking social, na qual cada utilizador tem a possibilidade de gerir as suas bookmarks, por diferentes categorias, ver actualizações dos amigos, comentar as suas categorias, inserir keywords, optamos pelo seguinte modelo físico:
 +
 
 +
 
 +
Link para o modelo físico da BD: [http://img64.imageshack.us/img64/746/66556301.png]
 +
 
 +
 
 +
'''Entidades'''
 +
 
 +
O modelo acima proposto é composto por um conjunto de 18 entidades (2 das quais de relação), destacando-se 6 principais:
 +
 
 +
'''''User''''' - entidade relativa ao utilizador e aos dados do seu login na plataforma. É a primeira entidade a ser alvo do utilizador, durante o seu registo. Esta entidade é composta pelos campos de "user_id", único para cada utilizador em especifico; "username", nome do utilizador na aplicação; "password", relativa ao login único do utilizador; "email", no qual o utilizador escolhe o email pessoal para conseguir efectuar a activação da conta, receber tonificações e recuperar password; "registry_date", preenchido através de timestamp (data e hora) no momento de registo e "status", por defeito com o valor 0, sendo este valor alterado para 1 quando o user activa a sua conta pessoal.
 +
 
 +
'''''Tab''''' - o utilizador poderá criar várias tabs (categorias), nas quais poderá guardar diferentes páginas de acordo com a organização que pretende. Esta entidade é composta pelos campos "tab_id", auto-incrementado consoante as criações efectuadas pelo utilizador; "nome", limitado a 12 caracteres de forma a não quebrar a linguagem gráfica; "mature", do tipo boolean, que identifica as páginas como de conteúdo adulto, através da identificação do ICRA na página; "creation_date_tipe", que regista a data e hora de criação da tab; "user_id", como chave externa que associa as diferentes tabs a um utilizador em concreto.
 +
 
 +
'''''url''''' - na barra de pesquisa o utilizador pode digitar um url e será redireccionado para o mesmo e esse url é guardado na base de dados para posterior consulta do utilizador através do histórico (ver próximo tópico). Nesta entidade existem o "url_id", que identifica o url na base de dados; "url", "title", "author", "description", "copyright", "language", que são campos do tipo ''varchar'' e são preenchidos automaticamente recorrendo a um ''cronjob''; "mature", como já referido de identificação de conteúdos adultos. 
 +
 
 +
'''''historic''''' - em cada uma das tabs existirá um histórico especifico onde serão guardados todos os url's visitados pelo utilizador. Nesta entidade existem os campos "idhistoric"; "timestamp", que identifica as horas correspondentes a cada registo efectuado na tabela historic; como chaves-estrangeiras os campos "tab_id", que relaciona o histórico com determinado id a uma determinada tab; e "url_id", que relaciona o histórico com os url's que pertencem ao mesmo.
 +
 
 +
'''''search''''' - na barra de pesquisa o utilizador também pode digitar palavras ou frases e esses caracteres são guardados na base de dados para depois estarem disponiveis num index de pesquisas efectuadas. Nesta tabela existem os campos "idsearch" que atribuiu a cada palavra/frase uma identificação única (independentemente se é a mesma palavra pesquisada 2 vezes); "phrase", campo do tipo ''varchar'' com um grande número de caracteres de forma a guardar frases mais extensas; "timestamp", que regista a data e hora em que os users fizeram as pesquisas.
 +
 
 +
'''''historic_search''''' - nesta tabela são guardadas as palavras/frases introduzidas na pesquisa. Os campos presentes nesta entidade são "idhistory_search"; "timestamp", com as mesmas funcionalidades que o campo da tabela ''historic''; como chaves-estrangeiras "tab_id" e "search_id", permitindo a identificação do histórico de palavras/frases, como histórico de determinada tab e de forma a guardar as palavras/frases nesse histórico concreto.
 +
 
 +
'''''User & Friends & Profile''''' - a partir da tabela ''user'' o utilizador pode aceder às informações do ''profile'' dos amigos. Na tabela ''friends'' estão presentes os campos ''friend_id'' e como chave estrangeira ''user_id''.
 +
 
 +
 
 +
'''''Profile''''' - no momento do registo o utilizador introduz os seguintes dados ''first_name'', ''last_name'', ''sex'', ''country'', ''privacy'', ''about_me''. Estes dados são armazenados na tabela profile e os campos ''privacy'' é do tipo boolean, sendo os restantes do tipo ''varchar''.
 +
 
 +
'''''Url & Comment & User''''' - o utilizador pode fazer comentários a outros ''users'' e aos ''urls''. Esta tabela, ''comment'', contem os campos ''comment_id''; ''content'', no qual o utilizador faz o comentário; ''insert_date'', em que o comentário foi feito; ''edit_date'', a data em que o comentário é editado, e como chaves estrangeiras o user_id e url_id que identificam o ''user'' e o ''url'' que foram comentados. 
 +
 
 +
'''''Domain''''' -  esta tabela armazena os dados relativos ao nome do domínio do url visitado, através do campo ''name'', e armazena também a data em que este foi visitado, através de um campo do tipo ''timestamp''.
 +
 
 +
'''''Websnap''''' - o websnap armazena os dados referente ao 'printscreen' dos urls visitados pelos utilizadores. Guarda a data em que é feito, nome do ficheiro, que é uma string criada através do md5 do url inserido mais a data em que é feito, e guarda o id o url para fazer a relação.
 +
 
 +
'''''Tab & Order''''' - a tabela tab é usada para a criação das tabs que o utilizador por ter, onde é guardado o nome desta, identificar se é de cariz adulto, o nível de privacidade, a data em que foi criada, o user a que pertence, e um status. A table order serve para, aquando da criação das tabs na página do utilizador, orderna-las pela ordem pretendida do utilizador. É assim usado o id da tab e um campo para a ordenação (numérico).
 +
 
 +
'''NOTA''': os ''ids'' das diferentes tabelas não respeitam as mesmas regras de nomenclatura.
 +
 
 +
== Implementação ==
-
'''Implementação'''
 
'''Descrição das principais funcionalidades da aplicação Web'''
'''Descrição das principais funcionalidades da aplicação Web'''
 +
 +
A MyGowl tem como principal funcionalidade o arquivo de bookmarks (importadas ou criadas, através da pesquisa), de forma a facilitar a consulta de páginas e organizar conteúdos. Através da nossa plataforma, os diferentes utilizadores também podem pesquisar palavras ou frases, na barra de pesquisa, que são redireccionadas para uma pesquisa do ''Google''. Nesta mesma barra, se o utilizador digitar um url, a aplicação redirecciona-lo-á para a página do respectivo url, sendo que este fica guardado na base de dados, criando um thumbnail no mesmo, através de um ''websnap'', já referenciado, e são guardadas informações relativas ao url (e.g. autores, descrição).
 +
Outra das funcionalidades da aplicação é a possibilidade de integrar uma rede de amigos com os quais se partilham comentários relativos aos seus ''urls'' guardados e ''tabs'' criadas. As ''tabs'' são criadas pelos utilizadores, que pode personalizar e organizar as mesmas cosoante as suas necessidades, sendo que cada uma possui um histórico distinto. Na ''home'' de cada um dos utilizadores aparecem as actividades recentes dos seus amigos, aumentando assim a interacção e partilha de conhecimentos e, na mesma, surgem as últimas 15 pesquisas e os últimos 15 ''urls'' visitados.
'''Mapa de páginas'''
'''Mapa de páginas'''
-
'''Server Behaviours utilizados'''
+
  '''Server Behaviours utilizados'''
 +
 
 +
  '''Queries utilizados'''
 +
 
 +
SELECT
 +
            mygowl_db.historic.url_id,
 +
            MAX(mygowl_db.websnap.file_name) as file_name,
 +
            mygowl_db.websnap.url_url_id,
 +
            mygowl_db.url.url,
 +
            count(mygowl_db.`historic`.url_id),
 +
            MAX(mygowl_db.historic.status) as status
 +
FROM
 +
            mygowl_db.historic
 +
LEFT JOIN
 +
            mygowl_db.`websnap` ON mygowl_db.historic.url_id = mygowl_db.websnap.url_url_id
 +
LEFT JOIN
 +
            mygowl_db.`url` ON mygowl_db.historic.url_id = mygowl_db.url.url_id
 +
WHERE
 +
            mygowl_db.historic.tab_id=1
 +
            AND
 +
            mygowl_db.historic.status=1
 +
GROUP BY
 +
            (mygowl_db.historic.url_id)
 +
ORDER BY
 +
            count(mygowl_db.`historic`.url_id) DESC
 +
LIMIT 30;
 +
 
 +
Este é o exemplo de um query usado. Trata-se do query feito à tabela historic, para apresentar os websnaps das 30 páginas mais visitadas pelo utilizador com a tabela com o id 1.
 +
Houve a necessidade de se agrupar todos os url_id, para serem mostradas páginas diferentes e ordernar o resultado pelo número de visitas, isto é, pelo número de entradas do respectivo url_id na tabela historic.
 +
De notar que o query para a tab home, é sensivelmente o mesmo, contudo, aquando da criação do query select, o script vai ver todos os tabs activos do respectivo utilizador e juntar tantas condições mygowl_db.historic.tab_id=X OR quantas tabs diferentes o utilizador tiver.
 +
 
 +
 
 +
----
 +
 
 +
 
 +
SELECT
 +
            MAX(mygowl_db.search.timestamp) as timestamp,
 +
            mygowl_db.search.phrase,
 +
            mygowl_db.historic_search.search_id
 +
 
 +
FROM
 +
            mygowl_db.historic_search
 +
INNER JOIN
 +
            mygowl_db.`search` On mygowl_db.historic_search.search_id = mygowl_db.search.idsearch
 +
 +
WHERE
 +
            mygowl_db.historic_search.tab_id="7"
 +
            AND
 +
            mygowl_db.search.phrase <> ""
 +
            AND
 +
            mygowl_db.historic_search.status = 1
 +
 +
GROUP BY
 +
            mygowl_db.search.phrase
 +
 +
ORDER BY
 +
            MAX(mygowl_db.`historic_search`.timestamp) DESC
 +
 +
LIMIT 15;
 +
 
 +
Este é um exemplo do query de SELECT para a visualização das últimas palavras pesquisadas pelo utilizador na tab em que se encontra. À semelhança do query anterior agrupa os resultados, neste caso o phrase, para aparecerem phrases distintas e nunca repetidas. A sua ordenação é feita pela data de entrada de forma descendente.
 +
 
 +
 
 +
----
 +
 
 +
 
 +
SELECT
 +
            mygowl_db.url.url,
 +
            mygowl_db.url.url_id,
 +
            count(mygowl_db.`historic`.url_id),
 +
            MAX(mygowl_db.websnap.file_name) as file_name
 +
 
 +
FROM
 +
            mygowl_db.`url`
 +
 
 +
LEFT JOIN
 +
            mygowl_db.`websnap` ON mygowl_db.url.url_id = mygowl_db.websnap.url_url_id
 +
 
 +
LEFT JOIN
 +
            mygowl_db.`historic` ON mygowl_db.url.url_id = mygowl_db.historic.url_id
 +
 +
WHERE
 +
            mygowl_db.url.title LIKE "% facebook %" or
 +
            mygowl_db.url.description LIKE "% facebook %"
 +
        OR
 +
            mygowl_db.url.title LIKE "% sapo %" or
 +
            mygowl_db.url.description LIKE "% sapo %"
 +
 +
GROUP BY
 +
            url
 +
 
 +
LIMIT 15;
 +
 
 +
Este é o query feito aquando da apresentação de resultados internos a uma pesquisa. Neste caso foi introduzido "facebook sapo" no formulário de pesquisa, assim, o query fez pesquisa a todos os campos title da tabela url e a todos os campos description da mesma tabela por cada palavra inserida no formulário. De notar o espaço entre o % e a palavra. Usamos isto para evitar de, por exemplo o utilizador pesquisar "face" aparecer resultados onde o titulo de uma página fosse por exemplo "facebook" e também "Pretty face on web".
 +
Esta pesquisa requer muitos melhoramentos.
 +
 
 +
 
 +
----
 +
 
 +
 
 +
'''Parâmetros passados entre páginas'''
 +
 
 +
Os parâmetros são passados tanto pelo método POST como pelo método GET. É usado o mod_rewrite do apache para simularmos directorias, assim, por exemplo, no url http://dev.mygowl.com/icpm/ icpm é um valor lido através de GET, não sendo uma pasta no servidor, o que torna os URLs user e google-friendly.
 +
 
 +
'''Integração (e.g. Flash, AJAX Frameworks, etc)'''
 +
 
 +
É usada a API do google para mostrarmos, aquando da realização de uma pesquisa por parte do utilizador. Aquando da chamada desta, no respectivo campo é inserida o texto inserido na pesquisa por parte do utilizador. Além disso foram usadas outras funcionalidades na página, nomeadamente a em que, quando passamos o rato por cima de uma websnap é mostrada uma websnap maior, afim de dar um maior feedback ao utilizador.
 +
 
 +
 
 +
== Desenvolvimentos Futuros ==
 +
 
 +
Os desenvolvimento futuros da nossa plataforma recai sobre as funcionalidades que inicialmente se pertendiam, mas que não se conseguiram implementar.
 +
A criação de novas tabs por parte do utilizador, o registo de novos utilizadores sem recorrer à inserção manual na base de dados, a implementação de um ''youtube player'' na aplicação (quando se efectua uma pesquisa) entre outros pontos.
 +
 
 +
== Conclusões ==
 +
 
 +
A realização deste projecto permitiu-nos ter presente de que é necessário executar uma grande quantidade de trabalho para implementar uma ''simples'' plataforma web 2.0. no âmbito de um projecto universitário. Assim sendo, torna-se imprescindivél uma grande dedicação e constante procura de novos conhecimentos de forma a atingir e alcançar metas pre-definidas.
 +
O universo web é extremamente vasto e é dificíl implementar ideias e conceitos originais e, mesmo que se seja dotado do dom da inovação, há que ter presente aquilo que se pode ou não fazer, consoante os conhecimentos técnicos existentes e novidades tecnologicas.
 +
Por conseguinte, a interligação equilibrada e consistente de tecnologias server-side e cliente-side é extremamente importante para atingir sucesso num mercado cada vez mais saturado.
 +
 
 +
== Glossário ==
 +
 
 +
'''''cron job''' - is an automated program developed for Unix and Linux systems. It allows the user to execute several commands at a specific time on a precise date. A cron job is an important tool that can be used for anything from running scripts and re-indexing a web page to providing backup for a database.''
 +
 
 +
''A '''varchar''' or '''Variable Character Field''' is a set of character data of indeterminate length. The term varchar refers to a data type of a field (or column) in a database management system. Varchar fields can be of any size up to the limit. The limit differs from types of databases: an Oracle 9i Database has a limit of 4000 bytes, aMySQL Database has a limit of 65,535 bytes (for the entire row) and Microsoft SQL Server 2005 8000 bytes (unless varchar(max) is used, which has a maximum storage capacity of 2 gigabytes).''
 +
 
 +
'''''ICRA (Internet Content Rating Association)''' -  is part of the Family Online Safety Institute, an international, non-profit organization of internet leaders working to develop a safer internet.''
 +
 
 +
'''''Social bookmarking''' is a method for Internet users to organize, store, manage and search for bookmarks of resources online. Unlike file sharing, the resourcesthemselves aren't shared, merely bookmarks that reference them.''
 +
 
 +
''A '''URL (Uniform Resource Locator, previously Universal Resource Locator)''' - usually pronounced by sounding out each letter but, in some quarters, pronounced "Earl" - is the unique address for a file that is accessible on the Internet. A common way to get to a Web site is to enter the URL of its home page file in your Web browser's address line. However, any file within that Web site can also be specified with a URL. Such a file might be any Web (HTML) page other than the home page, an image file, or a program such as a common gateway interface application or Java applet. The URL contains the name of the protocol to be used to access the file resource, a domain name that identifies a specific computer on the Internet, and a pathname, a hierarchical description that specifies the location of a file in that computer.''
 +
 
 +
''A '''domain''' name is an identification label that defines a realm of administrative autonomy, authority, or control in the Internet. Domain names are also hostnames that identify Internet Protocol (IP) resources such as web sites. Domain names are formed by the rules and procedures of the Domain Name System (DNS).''
 +
 
 +
 +
 
 +
== Referências bibliográficas ==
 +
 
 +
http://www.wisegeek.com/what-is-a-cron-job.htm
 +
 
 +
http://en.wikipedia.org/wiki/Varchar
 +
 
 +
http://www.w3schools.com/php/php_mysql_insert.asp
-
'''Recordsets/Queries utilizados'''
+
http://programmingbulls.com/php-mysql-how-create-comment-section-your-website
-
'''Parâmetros passados entre páginas'''
+
http://searchnetworking.techtarget.com/definition/URL
-
'''Integração (e.g. Flash, AJAX Frameworks, etc)'''
+
http://www.fosi.org/icra/
-
'''Desenvolvimentos Futuros'''
+
http://en.wikipedia.org/wiki/Social_bookmarking
-
'''Conclusões'''
+
http://www.w3schools.com/Css/css_image_transparency.asp
-
'''Referências bibliográficas'''
+

Latest revision as of 17:38, 18 January 2011

Página do projecto MyGowl.com.



Contents

Introdução

Objectivo do documento

O presente documento tem por objectivo relatar o planeamento, concepção e desenvolvimento da plataforma MyGowl, objecto de avaliação da disciplina, clarificando as técnicas metodológicas utilizadas para a solução de problemas e correcção de erros.

Visão geral do projecto

O projecto MyGowl trata-se de uma plataforma online de bookmarking social, seguindo o conceito da web 2.0, desenvolvida no âmbito da disciplina de Laboratório Multimédia 5, curso de Novas Tecnologias da Comunicação, da Universidade de Aveiro. Trata-se de um projecto desenvolvido recorrendo a tecnologias server-side (PHP), e a tecnologias client-side (HTML/XHTML, CSS e JavaScript), sobre a docência de Hélder Caixinha e Licínio Mano. O projecto em questão foi realizado em conjunto com as disciplinas de Implementação e Controlo de Projectos Multimédia, docência por Margarifa Almeida, e Gestão de Empresas, disciplina leccionada por Vera Vale.


Base de dados desenvolvida

Após discutidas as principais funcionalidades presentes na nossa plataforma, procedeu-se ao estudo da forma mais eficiente e simples para implementar a base de dados da mesma. De forma geral, podem existir diferentes alternativas de implementação da base de dados, levando à necessidade de estudar aprofundadamente as possibilidades. Tratando-se a nossa plataforma de uma aplicação web de bookmarking social, na qual cada utilizador tem a possibilidade de gerir as suas bookmarks, por diferentes categorias, ver actualizações dos amigos, comentar as suas categorias, inserir keywords, optamos pelo seguinte modelo físico:


Link para o modelo físico da BD: [1]


Entidades

O modelo acima proposto é composto por um conjunto de 18 entidades (2 das quais de relação), destacando-se 6 principais:

User - entidade relativa ao utilizador e aos dados do seu login na plataforma. É a primeira entidade a ser alvo do utilizador, durante o seu registo. Esta entidade é composta pelos campos de "user_id", único para cada utilizador em especifico; "username", nome do utilizador na aplicação; "password", relativa ao login único do utilizador; "email", no qual o utilizador escolhe o email pessoal para conseguir efectuar a activação da conta, receber tonificações e recuperar password; "registry_date", preenchido através de timestamp (data e hora) no momento de registo e "status", por defeito com o valor 0, sendo este valor alterado para 1 quando o user activa a sua conta pessoal.

Tab - o utilizador poderá criar várias tabs (categorias), nas quais poderá guardar diferentes páginas de acordo com a organização que pretende. Esta entidade é composta pelos campos "tab_id", auto-incrementado consoante as criações efectuadas pelo utilizador; "nome", limitado a 12 caracteres de forma a não quebrar a linguagem gráfica; "mature", do tipo boolean, que identifica as páginas como de conteúdo adulto, através da identificação do ICRA na página; "creation_date_tipe", que regista a data e hora de criação da tab; "user_id", como chave externa que associa as diferentes tabs a um utilizador em concreto.

url - na barra de pesquisa o utilizador pode digitar um url e será redireccionado para o mesmo e esse url é guardado na base de dados para posterior consulta do utilizador através do histórico (ver próximo tópico). Nesta entidade existem o "url_id", que identifica o url na base de dados; "url", "title", "author", "description", "copyright", "language", que são campos do tipo varchar e são preenchidos automaticamente recorrendo a um cronjob; "mature", como já referido de identificação de conteúdos adultos.

historic - em cada uma das tabs existirá um histórico especifico onde serão guardados todos os url's visitados pelo utilizador. Nesta entidade existem os campos "idhistoric"; "timestamp", que identifica as horas correspondentes a cada registo efectuado na tabela historic; como chaves-estrangeiras os campos "tab_id", que relaciona o histórico com determinado id a uma determinada tab; e "url_id", que relaciona o histórico com os url's que pertencem ao mesmo.

search - na barra de pesquisa o utilizador também pode digitar palavras ou frases e esses caracteres são guardados na base de dados para depois estarem disponiveis num index de pesquisas efectuadas. Nesta tabela existem os campos "idsearch" que atribuiu a cada palavra/frase uma identificação única (independentemente se é a mesma palavra pesquisada 2 vezes); "phrase", campo do tipo varchar com um grande número de caracteres de forma a guardar frases mais extensas; "timestamp", que regista a data e hora em que os users fizeram as pesquisas.

historic_search - nesta tabela são guardadas as palavras/frases introduzidas na pesquisa. Os campos presentes nesta entidade são "idhistory_search"; "timestamp", com as mesmas funcionalidades que o campo da tabela historic; como chaves-estrangeiras "tab_id" e "search_id", permitindo a identificação do histórico de palavras/frases, como histórico de determinada tab e de forma a guardar as palavras/frases nesse histórico concreto.

User & Friends & Profile - a partir da tabela user o utilizador pode aceder às informações do profile dos amigos. Na tabela friends estão presentes os campos friend_id e como chave estrangeira user_id.


Profile - no momento do registo o utilizador introduz os seguintes dados first_name, last_name, sex, country, privacy, about_me. Estes dados são armazenados na tabela profile e os campos privacy é do tipo boolean, sendo os restantes do tipo varchar.

Url & Comment & User - o utilizador pode fazer comentários a outros users e aos urls. Esta tabela, comment, contem os campos comment_id; content, no qual o utilizador faz o comentário; insert_date, em que o comentário foi feito; edit_date, a data em que o comentário é editado, e como chaves estrangeiras o user_id e url_id que identificam o user e o url que foram comentados.

Domain - esta tabela armazena os dados relativos ao nome do domínio do url visitado, através do campo name, e armazena também a data em que este foi visitado, através de um campo do tipo timestamp.

Websnap - o websnap armazena os dados referente ao 'printscreen' dos urls visitados pelos utilizadores. Guarda a data em que é feito, nome do ficheiro, que é uma string criada através do md5 do url inserido mais a data em que é feito, e guarda o id o url para fazer a relação.

Tab & Order - a tabela tab é usada para a criação das tabs que o utilizador por ter, onde é guardado o nome desta, identificar se é de cariz adulto, o nível de privacidade, a data em que foi criada, o user a que pertence, e um status. A table order serve para, aquando da criação das tabs na página do utilizador, orderna-las pela ordem pretendida do utilizador. É assim usado o id da tab e um campo para a ordenação (numérico).

NOTA: os ids das diferentes tabelas não respeitam as mesmas regras de nomenclatura.

Implementação

Descrição das principais funcionalidades da aplicação Web

A MyGowl tem como principal funcionalidade o arquivo de bookmarks (importadas ou criadas, através da pesquisa), de forma a facilitar a consulta de páginas e organizar conteúdos. Através da nossa plataforma, os diferentes utilizadores também podem pesquisar palavras ou frases, na barra de pesquisa, que são redireccionadas para uma pesquisa do Google. Nesta mesma barra, se o utilizador digitar um url, a aplicação redirecciona-lo-á para a página do respectivo url, sendo que este fica guardado na base de dados, criando um thumbnail no mesmo, através de um websnap, já referenciado, e são guardadas informações relativas ao url (e.g. autores, descrição). Outra das funcionalidades da aplicação é a possibilidade de integrar uma rede de amigos com os quais se partilham comentários relativos aos seus urls guardados e tabs criadas. As tabs são criadas pelos utilizadores, que pode personalizar e organizar as mesmas cosoante as suas necessidades, sendo que cada uma possui um histórico distinto. Na home de cada um dos utilizadores aparecem as actividades recentes dos seus amigos, aumentando assim a interacção e partilha de conhecimentos e, na mesma, surgem as últimas 15 pesquisas e os últimos 15 urls visitados.

Mapa de páginas

  Server Behaviours utilizados
  Queries utilizados

SELECT

            mygowl_db.historic.url_id,
            MAX(mygowl_db.websnap.file_name) as file_name,
            mygowl_db.websnap.url_url_id,
            mygowl_db.url.url,
            count(mygowl_db.`historic`.url_id),
            MAX(mygowl_db.historic.status) as status

FROM

            mygowl_db.historic

LEFT JOIN

            mygowl_db.`websnap` ON mygowl_db.historic.url_id = mygowl_db.websnap.url_url_id

LEFT JOIN

            mygowl_db.`url` ON mygowl_db.historic.url_id = mygowl_db.url.url_id

WHERE

            mygowl_db.historic.tab_id=1
            AND
            mygowl_db.historic.status=1

GROUP BY

            (mygowl_db.historic.url_id)

ORDER BY

            count(mygowl_db.`historic`.url_id) DESC 

LIMIT 30;

Este é o exemplo de um query usado. Trata-se do query feito à tabela historic, para apresentar os websnaps das 30 páginas mais visitadas pelo utilizador com a tabela com o id 1. Houve a necessidade de se agrupar todos os url_id, para serem mostradas páginas diferentes e ordernar o resultado pelo número de visitas, isto é, pelo número de entradas do respectivo url_id na tabela historic. De notar que o query para a tab home, é sensivelmente o mesmo, contudo, aquando da criação do query select, o script vai ver todos os tabs activos do respectivo utilizador e juntar tantas condições mygowl_db.historic.tab_id=X OR quantas tabs diferentes o utilizador tiver.




SELECT

            MAX(mygowl_db.search.timestamp) as timestamp,
            mygowl_db.search.phrase,
            mygowl_db.historic_search.search_id

FROM

            mygowl_db.historic_search

INNER JOIN

            mygowl_db.`search` On mygowl_db.historic_search.search_id = mygowl_db.search.idsearch

WHERE

            mygowl_db.historic_search.tab_id="7"
            AND
            mygowl_db.search.phrase <> ""
            AND
            mygowl_db.historic_search.status = 1

GROUP BY

            mygowl_db.search.phrase

ORDER BY

            MAX(mygowl_db.`historic_search`.timestamp) DESC

LIMIT 15;

Este é um exemplo do query de SELECT para a visualização das últimas palavras pesquisadas pelo utilizador na tab em que se encontra. À semelhança do query anterior agrupa os resultados, neste caso o phrase, para aparecerem phrases distintas e nunca repetidas. A sua ordenação é feita pela data de entrada de forma descendente.




SELECT

            mygowl_db.url.url,
            mygowl_db.url.url_id,
            count(mygowl_db.`historic`.url_id),
            MAX(mygowl_db.websnap.file_name) as file_name

FROM

            mygowl_db.`url`

LEFT JOIN

            mygowl_db.`websnap` ON mygowl_db.url.url_id = mygowl_db.websnap.url_url_id

LEFT JOIN

            mygowl_db.`historic` ON mygowl_db.url.url_id = mygowl_db.historic.url_id

WHERE

            mygowl_db.url.title LIKE "% facebook %" or 
            mygowl_db.url.description LIKE "% facebook %" 
       OR 
            mygowl_db.url.title LIKE "% sapo %" or 
            mygowl_db.url.description LIKE "% sapo %" 

GROUP BY

            url

LIMIT 15;

Este é o query feito aquando da apresentação de resultados internos a uma pesquisa. Neste caso foi introduzido "facebook sapo" no formulário de pesquisa, assim, o query fez pesquisa a todos os campos title da tabela url e a todos os campos description da mesma tabela por cada palavra inserida no formulário. De notar o espaço entre o % e a palavra. Usamos isto para evitar de, por exemplo o utilizador pesquisar "face" aparecer resultados onde o titulo de uma página fosse por exemplo "facebook" e também "Pretty face on web". Esta pesquisa requer muitos melhoramentos.




Parâmetros passados entre páginas

Os parâmetros são passados tanto pelo método POST como pelo método GET. É usado o mod_rewrite do apache para simularmos directorias, assim, por exemplo, no url http://dev.mygowl.com/icpm/ icpm é um valor lido através de GET, não sendo uma pasta no servidor, o que torna os URLs user e google-friendly.

Integração (e.g. Flash, AJAX Frameworks, etc)

É usada a API do google para mostrarmos, aquando da realização de uma pesquisa por parte do utilizador. Aquando da chamada desta, no respectivo campo é inserida o texto inserido na pesquisa por parte do utilizador. Além disso foram usadas outras funcionalidades na página, nomeadamente a em que, quando passamos o rato por cima de uma websnap é mostrada uma websnap maior, afim de dar um maior feedback ao utilizador.


Desenvolvimentos Futuros

Os desenvolvimento futuros da nossa plataforma recai sobre as funcionalidades que inicialmente se pertendiam, mas que não se conseguiram implementar. A criação de novas tabs por parte do utilizador, o registo de novos utilizadores sem recorrer à inserção manual na base de dados, a implementação de um youtube player na aplicação (quando se efectua uma pesquisa) entre outros pontos.

Conclusões

A realização deste projecto permitiu-nos ter presente de que é necessário executar uma grande quantidade de trabalho para implementar uma simples plataforma web 2.0. no âmbito de um projecto universitário. Assim sendo, torna-se imprescindivél uma grande dedicação e constante procura de novos conhecimentos de forma a atingir e alcançar metas pre-definidas. O universo web é extremamente vasto e é dificíl implementar ideias e conceitos originais e, mesmo que se seja dotado do dom da inovação, há que ter presente aquilo que se pode ou não fazer, consoante os conhecimentos técnicos existentes e novidades tecnologicas. Por conseguinte, a interligação equilibrada e consistente de tecnologias server-side e cliente-side é extremamente importante para atingir sucesso num mercado cada vez mais saturado.

Glossário

cron job - is an automated program developed for Unix and Linux systems. It allows the user to execute several commands at a specific time on a precise date. A cron job is an important tool that can be used for anything from running scripts and re-indexing a web page to providing backup for a database.

A varchar or Variable Character Field is a set of character data of indeterminate length. The term varchar refers to a data type of a field (or column) in a database management system. Varchar fields can be of any size up to the limit. The limit differs from types of databases: an Oracle 9i Database has a limit of 4000 bytes, aMySQL Database has a limit of 65,535 bytes (for the entire row) and Microsoft SQL Server 2005 8000 bytes (unless varchar(max) is used, which has a maximum storage capacity of 2 gigabytes).

ICRA (Internet Content Rating Association) - is part of the Family Online Safety Institute, an international, non-profit organization of internet leaders working to develop a safer internet.

Social bookmarking is a method for Internet users to organize, store, manage and search for bookmarks of resources online. Unlike file sharing, the resourcesthemselves aren't shared, merely bookmarks that reference them.

A URL (Uniform Resource Locator, previously Universal Resource Locator) - usually pronounced by sounding out each letter but, in some quarters, pronounced "Earl" - is the unique address for a file that is accessible on the Internet. A common way to get to a Web site is to enter the URL of its home page file in your Web browser's address line. However, any file within that Web site can also be specified with a URL. Such a file might be any Web (HTML) page other than the home page, an image file, or a program such as a common gateway interface application or Java applet. The URL contains the name of the protocol to be used to access the file resource, a domain name that identifies a specific computer on the Internet, and a pathname, a hierarchical description that specifies the location of a file in that computer.

A domain name is an identification label that defines a realm of administrative autonomy, authority, or control in the Internet. Domain names are also hostnames that identify Internet Protocol (IP) resources such as web sites. Domain names are formed by the rules and procedures of the Domain Name System (DNS).


Referências bibliográficas

http://www.wisegeek.com/what-is-a-cron-job.htm

http://en.wikipedia.org/wiki/Varchar

http://www.w3schools.com/php/php_mysql_insert.asp

http://programmingbulls.com/php-mysql-how-create-comment-section-your-website

http://searchnetworking.techtarget.com/definition/URL

http://www.fosi.org/icra/

http://en.wikipedia.org/wiki/Social_bookmarking

http://www.w3schools.com/Css/css_image_transparency.asp

Personal tools
Namespaces
Variants
Actions
Navigation
Toolbox