Skip to content

Commit

Permalink
Add: more files.
Browse files Browse the repository at this point in the history
  • Loading branch information
JoaoCostaIFG committed Jun 20, 2021
1 parent 0bfac69 commit ce8e058
Show file tree
Hide file tree
Showing 16 changed files with 221 additions and 0 deletions.
25 changes: 25 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
# FEUP LBAW 2021

This repository includes the project my group made (including the wiki), the
theoretical classes' slides, and some questions from the previous years' exams.

## Project

The project is a webpage themed around "Collaborative Q&A". We borrowed many
ideas from [Stack Overflow](https://stackoverflow.com/).

**Grade:** don't know yet

## Collaboration

We 4 collaborated in the making of the project.

- Ana Inês Oliveira de Barros, [email protected]
- João de Jesus Costa, [email protected]
- João Lucas Silva Martins, [email protected]
- Ricardo Jorge Cruz Fontão, [email protected]

## License

Unless stated otherwise, the source code files in this repository are licensed
under an MIT license.
Binary file added Slides/01-intro.pdf
Binary file not shown.
Binary file added Slides/02-interactiondesign.pdf
Binary file not shown.
Binary file added Slides/03-designvisual.pdf
Binary file not shown.
Binary file added Slides/04-modeling.pdf
Binary file not shown.
Binary file added Slides/05-tuningphysical.pdf
Binary file not shown.
Binary file added Slides/06-integrity.pdf
Binary file not shown.
Binary file added Slides/07-webdev.pdf
Binary file not shown.
Binary file added Slides/08-web-frameworks.pdf
Binary file not shown.
Binary file added Slides/09-ir.pdf
Binary file not shown.
Binary file added Slides/10-frontend.pdf
Binary file not shown.
Binary file added Slides/10-performance.pdf
Binary file not shown.
Binary file added Slides/10-ux.pdf
Binary file not shown.
147 changes: 147 additions & 0 deletions exame_lbaw.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,147 @@
# Exame LBAW

Por quem são identificadas as User stories? Stakeholders do projeto.

Qual das seguintes opções é uma desvantagem decorrente da utilização de stored
procedures? A incapacidade de reutilização noutros SGBD do código desenvolvido.

Qual dos seguintes representa um cenário ideal para um índice do tipo Hash? Num
campo de username, usado para encontrar um utilizador específico.

O que garante a propriedade da consistência na execução de uma transação numa
base de dados? A transação transforma a base de dados de um estado válido para
outro estado válido.

Uma FOREIGN KEY faz referência a atributos de uma segunda tabela. O que têm de
ser os atributos? UNIQUE.

Qual é o efeito da otimização da base de dados por desnormalização da terceira
forma normal? Acelera o desempenho do sistema.

O que se entende por sinais (critérios) independentes da interrogação de
pesquisa? Sinais que são calculados aquando da indexação dos documentos.

Na arquitetura da framework web do projeto de LBAW, o que deve acontecer no caso
de erro num recurso web de ação? Deve haver um redirecionamento para outro
recurso web.

Para que são usados os Wireflows? Descrever as interações principais com o
sistema.

O que inclui o estudo da carga do sistema usado no desenho do Esquema Físico? As
alterações SQL (UPDATE, DELETE) importantes e qual a sua frequência.

Para especificar o recurso web de resposta a um pedido AJAX, é imprescindível: A
especificação dos códigos de retorno ("Returns").

Do ponto de vista semântico, quais os elementos HTML que devem ser usados na
estruturação de um menu horizontal ou vertical? ul e li.

Composição quer dizer que se pai desaparecer, filhos tmb desaparecem. Agregação
não.

Em interações AJAX, que formato deve ser usado nas respostas enviadas pelo
servidor? As respostas a pedidos AJAX podem ser formatadas em HTML, XML ou JSON,
entre outros.

## Random

- **Business rules** - é ideias de como funciona: "A data de devolução tem de
ser superior a uma data de empréstimo que ainda não tenha devolução registada"
- **Technical requirement** - é coisas como "sistema deve ser seguro"

## Design

- **Wireframes** - show page-level layout ideas (not good at describing
interaction).
- **Flowcharts** - document complex workflows and user tasks (interactions).

## Indexes

B+ Tree index: É uma tree like data structure onde cada nó da árvore tem
pointers para outro nó e valores. Use partially full blocks to speed insertions
and deletions.
Automaticamente reorganiza-se com small local changes. Não é necessário
reorganizar o file completo. Extra insertion, deletion, and space overhead.

Hash index: recebe key e dá hash (bucket). A hash function deve ser uniforme e
aleatoria. Bucket tem vários items diferentes e tem de ser searched
sequentially. Overflow buckets são chained together com linked lists. No sorting
ou range searches. Always secondary indexes.

Unique indexes: são criados automaticamente para UNIQUE e PK entries. Servem
para dar enforce a constraint.

GiST: pode dar falsos positivos. Best for dynamic data. Faster to update (3
times faster).
GIN: faster querries e dá handle a large ammounts of data better (3 times
faster). Best for static data. Slower to update. These are good to make
full-text search (FTS) faster by indexing the pre-calculated ts_vector column.

### Choosing indexes

Workload:

- Querries mais importants (SELECT) e sua frequência.
- Updates mais importants (UPDATE, DELETE) e a sua frequência.
- Performance desejada para estas querries e updates.
- Estimativa do numero de tuplos em cada relacao (order of magnitude + estimated
growth).

Quando é preciso ser fast:

- B+ tree index: allows searching, sorting, range search.
- Hash index: não dá range search nem sorting, mas searchs são muito fast.

### When to cluster

#### Cardinality

Cardinality: **uniqueness** of data values in a column. Usado para estimar
numero de rows retornadas por WHERE clauses

- High cardinality - primary key.
- Medium cardinality - last name in a customer table.
- Low cardinality - boolean column

#### Cluster

CLUSTER pode ser usado para ordenar uma tabela com base num index (só 1)

- Reduce the number of block reads:
- numero de tuplos e alto e há muitos tuplos por bloco.
- cardinalidade média.
- Permitir leitura sequencial de blocos:
- normalmente em range searchs de colunas com baixa cardinalidade.
- Nao interessa muito em SSDs.

## Denormalization

Aumentar performance de uma base de dados adicionando copias (redundantes) de
data. Pode ser feito usando formas normais alternativas (mais baixas).
É importante manter a data redundante consistent, por exemplo, usando triggers.

IMP: materialized views são uma alternativa à desnormalização. Dão store ao
result de uma querry numa tabela e podem ser refreshed as needed.

## Transactions

PostgreSQL é **Read committed** por default.

```txt
| Isolation Level | Dirty Read | Nonrepeatable Read | Phantom Read |
|==================|==============|====================|==============|
| Read uncommitted | Possible | Possible | Possible |
|------------------|--------------|--------------------|--------------|
| Read committed | Not possible | Possible | Possible |
|------------------|--------------|--------------------|--------------|
| Repeatable read | Not possible | Not possible | Possible |
|------------------|--------------|--------------------|--------------|
| Serializable | Not possible | Not possible | Not possible |
|------------------|--------------|--------------------|--------------|
```

## Information retrieval - Signals

- Static - can be computed during the indexing process.
- Query-dependent - are only available at query time.
Binary file added lbaw2113.mp4
Binary file not shown.
49 changes: 49 additions & 0 deletions lbaw_presentation.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,49 @@
# LBAW Presentation

- Começar no about
- Motivation enquanto fontao vai para a Home
- Fazer register do Carlos e falar sobre Input validation
- Editar profile do Carlos (nome, foto, about) - referir que vamos fazer do
account deletion depois
- Ir a ask question
- Sugerir topico laravel
- Login no admin para aceitar o topico
- Dar F5 no ask question e escrever questao com o editor (nao esquecer do typo)
- Dar tag como laravel
- Editar questao para corrigir tipo
- Inserir bounty e referir "tag" do bounty

- Clicar na notificacao de achievement: referir o que esta a verde
- Ir a tab de activity: referir hot topics do user e top questions
- Ir para search tab total e mostrar paginacao (mostrar users tab tmb)
- Mostrar sort: by latest
- Mostrar filtrar por data: 09/06/2021 (referir que as opcoes de pesquisa se
mantêm)
- Procurar por "construction": full text search do constructs
- Procurar por "operator condition ternary": full text search do titulo+corpo e
titulo tem mais prioridade
- Procurar por "tjerrom0": users e questoes
- Mostrar responsividade da pagina: extra small-, small, medium+
- Procurar por construction e ir para a do glehrian8
- Dar downvote a questao, upvote a accepted
- Inserir comentario na questao a dizer "Your question doesn't make any sense"
- Editar comentario
- Votes + inserir/editar comentario é tudo AJAX

- Sugerir edit para questao: "Are python lists arrays?"
- Ir admin e aceitar edit
- Dar F5 para mostrar que a questao foi updated
- Procurar user: "set clear"
- Reportar comment e answer
- No admin ir ao comment e editar: don't forget de dar hover nas tooltips
- No admin aceitar ban do comment só
- Voltar ao user e dar F5: falar da politica de eliminacao de contas
- Tentar report na answer again e mostrar que não dá

- No admin responder à questão
- No user aceitar a answer: mostrar que a bounty foi crossed-off em cima e
reputation do admin subiu
- Mostrar leaderboard

- Dar log out
- Ir a login recuperar password

0 comments on commit ce8e058

Please sign in to comment.