Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Cada eixo deve definir uma "imagem padrão" para seus cards sem imagem #8

Open
laurybueno opened this issue Oct 2, 2017 · 10 comments
Assignees

Comments

@laurybueno
Copy link
Member

Essa imagem será subida para a plataforma via Django Admin.

A API deve, no caso de um card não ter imagem alguma, retornar no JSON o endereço da imagem padrão do eixo correspondente.

@tiagofassoni
Copy link
Collaborator

Minha sugestão para isso: Criar um campo "imagem padrão" no eixo e mandar a URL dessa imagem de todo jeito.

Outra sugestão, que não sei se vale a pena fazer: colocar o campo "imagem padrão" no eixo e colocar toda a lógica no backend de cards para, se não tiver imagens, mandar uma "imagem" que é a imagem padrão do eixo.

@leopiccionia
Copy link
Member

@tiagofassoni Se a serialização do eixo em /cards/api/cards retornar um campo de imagem, acho que ficará bom para mim e para você.

@laurybueno
Copy link
Member Author

@leopiccionia esse método é ruim, pq retorna um monte de informações repetidas (cada card tem um eixo e cada eixo vai dar sua imagem padrão e isso vai se repetir pra todos os cards na lista). Se for pra fazer assim, melhor deixar o endpoint de cards como está e o front ler o endpoint de eixos, pegar as imagens de lá e ficar responsável por colocar a padrão qdo for o caso.

Mas a gente já bateu o martelo em deixar a complexidade da questão pro backend (mesmo pq o front do timtec vai ser refeito em algum momento). Valeus

@leopiccionia
Copy link
Member

Nós já repetimos o ID e o nome do eixo para cada card da lista. Não entendi a diferença.

@laurybueno
Copy link
Member Author

a diferença é piorar uma coisa ruim

@laurybueno
Copy link
Member Author

por outro lado, trabalhando em cima da sua fala, @leopiccionia, uma alternativa é inverter de vez essa lógica: a listagem de cards só dar o id de eixo/público dela e caber ao front pegar infos detalhadas do back e mapeá-las para os cards adequados.

Não acho legal justamente por termos que refazer isso qdo mudarmos o front pro último angular, mas é uma opção sólida

@leopiccionia
Copy link
Member

Não necessariamente é uma piora: é o clássico trade-off CPU-memória. No nosso caso em específico, ou aumentamos a memória ou aumentamos o tempo de processamento.

@leopiccionia
Copy link
Member

Agora pensando, dá para fazer o programa economizar tanto espaço quanto tempo, utilizando programação dinâmica. Vai aumentar a inicialização do programa em alguns nanossegundos (ou seja, desprezível), e é um excelente compromisso.

@laurybueno
Copy link
Member Author

Não sei se esta discussão está mesmo em cima do trade-off CPU/memória.

No meu entendimento, a questão maior é pensar quem vai gastar CPU e memória: cliente ou servidor.

Na minha proposta inicial, quem gasta mais é servidor. Na minha proposta alternativa, quem gasta é o cliente. Na sua, existe uma divisão dos trabalhos entre os dois, se eu entendi bem.

(explica o que vc pensou com programação dinâmica pra gente)

@leopiccionia
Copy link
Member

leopiccionia commented Oct 4, 2017

Estou discutindo apenas em termos do cliente.

(Sejam n o número de cards e E o número de eixos.)

Temos que pensar que a operação de achar a imagem correspondente eixo do card é executada dentro de um loop de tamanho proporcional ao tamanho da lista de cards (portanto, O(n)). Dessa forma, se a busca pela imagem tomar tempo constante, o loop será O(n); se a busca for linear, ele será O(n × E). Eu não tenho conhecimento aprofundado do funcionamento do Angular, mas meu temor é esse loop rodar muitas vezes por segundo.

Buscar por um campo dentro de um objeto leva tempo constante (O(1)), mas o consumo de memória aumenta. Buscar o eixo corresponde numa array de eixos para, daí, buscar o campo dentro do objeto encontrado toma tempo O(E), mas há economia de memória.

A solução por programação dinâmica é construir um índice (pode ser um objeto ou array) em que a chave seja o ID do eixo e o valor seja o objeto que representa o eixo, retornado pela API /cards/api/axis -- você deve se lembrar de algo parecido das aulas de Desafios de Programação. Esse índice terá tamanho proporcional ao número de eixos (assumidamente menor que o número de cards) -- ou proporcional ao maior ID, no caso da array --, e o acesso a um eixo voltará a tomar O(1), portanto, será eficiente tanto em memória quando em processamento.

Obviamente, não precisamos nos preocupar com nada disso se a API /cards/api/cards retornar a imagem do card para o front-end.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

3 participants