Este é um projeto inicialmente implementado para um trabalho da disciplina de Base de Dados, do ICMC/USP.
A ideia da Memewiki é ser uma plataforma brasileira 100% aberta e livre que sirva como um "hub" de memes, com foco maior em memes nacionais, aos moldes de uma wikipedia, knowyoourmeme, rottentomatos, chans e reddit. Algumas das funcionalidades são a criação de uma página tipo "wiki" sobre um meme - por hora chamado de "meme base", que serve como uma "base" para outros memes derivados. Memes derivados, ou "normais", podem ser derivados de memes base, sendo praticamentte imagens comuns, sem muita informação, em que qualquer usuário possa criar de formma fácil e rápida.
O objetivo da plataforma, além de ser uma "wiki" e um "hub" de memes, é também permitir com que novos memes sejam criados, tal como são feitos no chans, mas sem a parte do descontrole e anomia que permeiam nesses ambientes. Pra isso a Memewiki também possui um Image Board, onde qualquer usuário pode criar uma thread e comentar com texto e imagens.
Obviamente, ele está em faze de protótipo, com um layout improvisado (ninguém do grupo curtia front end ...) :v
Muitos podem se assustar quando nos referimos a "100% aberto e livre", principalmente devido à má fama que os chans tm (e com razão). Mas cabe salientar que ser 100% livre implica necessariamente em não haver conteúdo que seja de ameaça a vida e existencia de outras pessoas, tal como fake news e discurso de ódio, afinal, isso por si só estaria violando o "livre" de outras pessoas.
A Wikipedia, por exemplo, só é tão livre, acessível e confiável hoje porque possui moderação. Por isso, a moderação se faz muito necessária e estará presente na Memewiki.
- python 3
- postgresql
git clone https://github.com/gp2112/memewiki
cd memewiki
pip install .
execute:
memewiki
ou, caso possua o poetry:
cd memewiki
poetry install
poetry run memewiki
Manuel Ultra rápido e pragmático LINUX:
Basicamente, quando instalar, ele cria um user postgres. Ele vai ser usado pra acessar o client por sockets. Assim que instalar:
-
Entra no user: sudo -iu postgres
-
Inicia DB Cluster: initdb -D /var/lib/postgres/data
-
Volta pro user normal: dá um CTRL+D ou executa exit
-
Inicia o serviço do postgresql (o backend): sudo systemctl start postgresql.
- (opicional) - Se quiser que ele inicie sempre que o sistema iniciar, tb execute: sudo systemctl enable postgresql
Pronto, já tá rodando. Agora no cliente:
Se quiser entrar no client:
- Entra no user: sudo -iu postgres
- Execute: psql
Para criar um DB:
- Entra no user: sudo -iu postgres
- createdb [NOME_DB]
OBS: Crie um banco dados chamado memewiki para execução deste projeto.
Se tiver algum problema, provavelmente tem a resolução na Arch Wiki.
É importante para leitura do código entender as camadas e como elas interagem entre si.
app -> [ routes <-> controller <-> services <-> models ]
<-- VIEW ---
O arquivo app.py define, através do Framework Flask, onde estão as rotas da aplicação. Os arquivos de rota mapeam funções do controller, que por sua vez chamam serviços, que por sua vez acessam models.
É na camada de models que está o código que faz comunicação com o banco de dados, usando a biblioteca psycopg2. É essa biblioteca que lida com a comunicação com o driver do PostgreSQL e com proteção a SQL injection.
Ao voltar da cadeia de chamadas à funções de camadas cada vez mais internas, a rota retorna uma view com as informações requisitadas, utilizando HTML e CSS.
-
- Modelagem Relacional da Base de Dados
- Aplicação: backend, frontend, Implementação no PostgreSQL
- Documentação da Aplicação
-
- Modelagem Entidade-Relacionamento da Base de Dados
- Modelagem Relacional da Base de Dados
- Documentação do Modelo e Planejamento da Base de Dados
- Documentação da Aplicação
-
- Modelagem Entidade-Relacionamento da Base de Dados
- Modelagem Relacional da Base de Dados
- Documentação do Modelo e Planejamento da Base de Dados
-
- Modelagem Entidade-Relacionamento da Base de Dados
- Modelagem Relacional da Base de Dados
- Documentação do Modelo e Planejamento da Base de Dados
-
- Implementação do Modelo Relacional em SQL
- Projeto da Aplicaç