Hackathon DevDays'19 (parte 1): um diário com recomendações, um gerador de percursos pedestres e democracia líquida

Recentemente, conversamos sobre o programa de mestrado corporativo da JetBrains e a “Engenharia de Software / Engenharia de Software” da ITMO University. Convidamos todos os interessados ​​no Open Day na segunda-feira, 29 de abril. Falaremos sobre as vantagens de nossa escola de pós-graduação, sobre quais bônus oferecemos aos alunos e o que exigimos em troca. Além disso, com certeza responderemos às perguntas de nossos hóspedes.

Um dia aberto será realizado no escritório JetBrains no Times Business Center, onde nossos alunos de pós-graduação estudam. A partir das 17:00. Você pode descobrir todos os detalhes e se registrar no evento em mse.itmo.ru. Venha e não se arrependa!

Um dos principais componentes do treinamento no programa é a prática. Os alunos têm muito disso: trabalhos de casa semanais, projetos semestrais e hackathons. Graças a uma imersão completa nas modernas metodologias e tecnologias de desenvolvimento durante o estudo, os graduados se juntam rapidamente aos processos de trabalho das grandes empresas de TI.

Neste post, queremos falar mais sobre os hackathons do DevDays, que ocorrem a cada seis meses. As regras são simples: equipes de 3 a 4 pessoas se reúnem e, em três dias, os alunos dão vida às suas próprias idéias. O que pode vir disso? Leia a primeira parte das histórias sobre os projetos hackathon deste semestre dos próprios alunos :)

Diário de Recomendações de Filmes




O autor da ideia
Ivan Ilchuk
Composição da equipe
Ivan Ilchuk - análise de filme, servidor
Vladislav Korablinov - desenvolvimento de modelos para comparar a proximidade do diário e a trama do filme
Dmitry Valchuk - Interface do usuário
Nikita Vinokurov - UI, design

O objetivo do nosso projeto era escrever um aplicativo de desktop - um diário que recomendasse filmes ao usuário de acordo com as entradas nele.

Essa ideia me veio à mente quando fui para a universidade e pensei nos meus problemas. "Qualquer que seja o problema que uma pessoa enfrente, algum clássico já escreveu sobre isso", pensei. "E como alguém escreveu, isso significa que alguém já filmou." Assim, o desejo de assistir a um filme sobre um homem com o mesmo tormento mental apareceu por si só.

Obviamente, há uma grande variedade de diários separados e serviços de recomendação separados (mas geralmente as recomendações são baseadas no que uma pessoa gostava anteriormente). Em princípio, este projeto tem algo em comum com a busca de um filme por pontos-chave, mas ainda assim, primeiro, nosso aplicativo fornece a funcionalidade do diário.

Como implementamos isso? Quando o botão mágico é pressionado, o diário envia uma entrada para o servidor, onde o filme é selecionado com base na descrição retirada da Wikipedia. Nossa interface foi feita no Electron (nós o usamos, não no site, porque inicialmente decidimos armazenar os dados do usuário não no servidor, mas localmente no computador), e o servidor e o próprio sistema de recomendação estavam em Python: TFs foram obtidos a partir das descrições Vetores -IDF que foram comparados por proximidade com o vetor de entrada do diário.

Um membro da equipe estava envolvido apenas no modelo, o outro em todo o front-end (inicialmente emparelhado com o terceiro membro, que posteriormente mudou para o teste). Eu estava envolvido na análise das tramas do filme da Wikipedia e do servidor.

Passo a passo, abordamos o resultado, superando uma série de problemas, começando com o fato de que inicialmente o modelo exigia muita RAM, terminando com a dificuldade de transferir dados para o servidor.

Agora, para encontrar um filme para a noite, você não precisa de muito esforço: o resultado do nosso trabalho de três dias foi um aplicativo de desktop e um servidor que o usuário acessa via https, recebendo em resposta uma seleção de 5 filmes com uma breve descrição e pôster.

Minhas impressões do projeto são muito positivas: o trabalho foi empolgante do início da manhã até tarde da noite, e o aplicativo resultante periodicamente fornece resultados extremamente engraçados no estilo de “Sleepless Night” para uma entrada do diário sobre trabalhos de casa na universidade ou um filme sobre o primeiro dia escolar na história do primeiro dia no departamento.

Links relevantes, instaladores e muito mais podem ser encontrados aqui .

Gerador de rotas


O autor da ideia
Artemyeva Irina
Composição da equipe
Artemyeva Irina - líder da equipe, loop principal
Gordeeva Lyudmila - música
Platonov Vladislav - rotas

Eu realmente gosto de andar pela cidade: olhar para edifícios, pessoas, pensar em história. Mas, mesmo mudando meu local de residência, mais cedo ou mais tarde me deparo com o problema de escolher uma rota: tudo o que eu poderia inventar já passou. Então surgiu a idéia de automatizar a geração de rotas: você especifica o ponto de partida e o comprimento da rota, e o programa oferece uma opção. A caminhada pode ser longa, portanto o desenvolvimento lógico da idéia parece adicionar a capacidade de indicar pontos intermediários para a "parada", onde você pode dar uma mordida e relaxar. Outro ramo de desenvolvimento foi a música. Ir à música é sempre mais divertido, por isso seria ótimo adicionar a capacidade de selecionar uma lista de reprodução para a rota gerada.

Entre os aplicativos existentes, essas soluções não foram encontradas. Os análogos mais próximos são os planejadores de rotas: Google Maps, 2GIS etc.

Esse aplicativo é mais conveniente ter no telefone; portanto, o uso do Telegram se tornou uma boa opção. Permite exibir mapas e tocar música, e você pode gerenciar tudo isso escrevendo um bot. O principal trabalho com mapas foi realizado usando a API do Google Map. O Python facilita fazer amigos das duas tecnologias.

Havia três pessoas na equipe, então a tarefa foi dividida em duas subtarefas separadas (trabalhando com mapas e trabalhando com música), para que os caras pudessem trabalhar de forma independente, e eu cuidei dos resultados.

Nenhum de nós jamais trabalhou com a API do Google Map e escreveu bots do Telegram, então o principal problema foi a quantidade de tempo alocada para o projeto: descobrir algo sempre leva mais tempo do que fazer o que você conhece bem. Também foi difícil escolher a API bot do Telegram: por causa do bloqueio, nem todos trabalham e tiveram que sofrer para configurar tudo.

Vale mencionar separadamente como foi resolvida a tarefa de gerar rotas. É fácil criar uma rota entre dois locais, mas o que oferecer ao usuário se apenas a extensão da rota for conhecida? Deixe o usuário querer andar 10 quilômetros. Em uma direção arbitrária, é selecionado um ponto cuja distância em uma linha reta é de 10 quilômetros, após o qual uma rota é construída para pontos reais ao longo de estradas reais. Provavelmente, não será direto, então reduzimos para os 10 quilômetros especificados. Existem muitas opções para essas rotas - temos um gerador de rotas real!

Inicialmente, queria segmentar o mapa em seções correspondentes a áreas verdes: aterros, pátios, ruas, a fim de obter a rota mais agradável para uma caminhada e também gerar música de acordo com essas seções. Mas acabou sendo difícil fazer isso usando a API do Google Map (eles não conseguiram resolver esse problema). No entanto, descobriu-se realizar a construção da rota através de tipos específicos de locais (loja, parque, biblioteca): se a rota passou por todos os locais especificados, mas a distância desejada ainda não foi percorrida, ela se estende a uma distância especificada pelo usuário em uma direção aleatória. Além disso, a API do Google Map permite calcular o tempo estimado de viagem, o que ajuda a escolher uma lista de reprodução para a duração exata da viagem.

Como resultado, acabou gerando rotas por ponto de partida, distância e pontos intermediários; Tudo estava preparado para classificar as músicas de acordo com as seções da rota, mas, devido à falta de tempo, decidiu-se deixar a possibilidade de selecionar uma lista de reprodução simplesmente como um ramo adicional da interface do usuário. Assim, o usuário pôde escolher independentemente a música para ouvir.

O principal problema com o trabalho com música foi a falta de conhecimento de onde obter arquivos mp3 para não exigir que o usuário tenha uma conta em qualquer serviço. Foi decidido solicitar música ao usuário (modo UserMusic). Isso apresenta um novo problema: nem todo mundo tem a capacidade de baixar faixas. Uma solução é criar um repositório com músicas dos usuários (modo BotMusic) - você pode gerar músicas a partir dele, independentemente dos serviços.

Embora não seja perfeito, mas lidamos com a tarefa: acabou sendo um aplicativo que eu gostaria de usar. Em geral, isso é muito legal: três dias atrás, você tinha apenas uma idéia e nem um único pensamento de como implementá-la, e agora existe uma solução funcional. Para mim foram três dias muito importantes. Não tenho mais medo de inventar algo que falta de conhecimento, ser um líder de equipe era incrivelmente interessante, e eu reconheci melhor os caras maravilhosos que foram para o meu time!

Democracia líquida




O autor da ideia
Stanislav Sychev
Composição da equipe
Stanislav Sychev - líder da equipe, banco de dados
Nikolay Izyumov - interface de bot
Anton Ryabushev - back-end

Dentro de diferentes grupos, muitas vezes é necessário tomar uma decisão ou votar. Geralmente, nesses casos, eles recorrem à democracia direta ; no entanto, quando o grupo se torna grande, podem surgir problemas. Por exemplo, uma pessoa de um grupo pode não ter o desejo de responder perguntas com frequência ou de tópicos específicos. Em grandes grupos, para evitar problemas, eles recorrem à democracia representativa , quando selecionam um grupo separado de "deputados" de todas as pessoas que libertam o restante do ônus da escolha. Mas este sistema tem suas desvantagens.

Para resolver os problemas de ambos os sistemas, Brian Ford propôs o conceito de democracia líquida . Nesse sistema, todos são livres para escolher o papel de um usuário ou delegado comum, simplesmente expressando um desejo. Qualquer pessoa pode votar independentemente ou votar em um delegado em um ou mais assuntos. Um delegado também pode votar. Além disso, se o delegado deixar de organizar um eleitor, o voto poderá ser retirado a qualquer momento.

Exemplos de uso da democracia líquida são encontrados na política, e queríamos implementar uma idéia semelhante para o uso diário em vários grupos de pessoas. No próximo hackathon do DevDays, decidimos escrever um bot do Telegram para votar nos princípios da democracia líquida. Ao mesmo tempo, eu queria evitar o problema frequente de tais bots - entupir o bate-papo geral com mensagens do bot. A solução é colocar o máximo de funcionalidade possível em uma conversa pessoal.

Para criar esse bot, usamos a API do Telegram . Para armazenar o histórico de votação e delegações, foi escolhido o banco de dados PostgreSQL. Para se comunicar com o banco de dados bot bot foi criado Flask-server. Nós escolhemos essas tecnologias porque já tínhamos experiência em interagir com eles enquanto estudávamos na magistratura. O trabalho nas três partes constituintes do projeto - banco de dados, servidor e bot - foi distribuído com sucesso entre os membros da equipe.

É claro que três dias são pouco, então durante o hackathon percebemos a ideia ao nível de um protótipo. Como resultado, criamos um bot que grava no bate-papo geral apenas informações sobre a abertura da votação e seus resultados anônimos. Oportunidades para votar e criar um voto são realizadas através de correspondência pessoal com o bot. Para votar, é apresentada uma equipe que exibe uma lista de questões que requerem atenção direta. Em correspondência pessoal, você pode ver a lista de delegados e seus votos anteriores, bem como dar a eles seu voto em um dos tópicos.

Vídeo com um exemplo de trabalho .

Foi interessante trabalhar no projeto, ficamos na universidade até meia-noite. Parece-nos que essa é uma ótima maneira de distrair-se do estudo, embora seja muito desgastante. Houve uma experiência agradável em uma equipe unida.

PS: A admissão à magistratura para o próximo ano acadêmico já está aberta . Inscreva-se agora!

Source: https://habr.com/ru/post/pt449042/


All Articles