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

Nós recentemente contado sobre o programa de mestrado corporativo da JetBrains e da ITMO University “Desenvolvimento de Software / Engenharia de Software”. Convidamos todos os interessados ​​para um dia aberto na segunda-feira, 29 de abril. Contaremos a você as vantagens do nosso programa de mestrado, quais bônus oferecemos aos alunos e o que exigimos em troca. Além disso, com certeza responderemos às perguntas dos nossos hóspedes.

Hackathon DevDays'19 (parte 1): um diário com recomendações, um gerador de percursos pedestres e democracia líquidaO open day será realizado no escritório da JetBrains no Times Business Center, onde estudam nossos alunos de mestrado. Começa às 17:00. Você pode saber todos os detalhes e se inscrever no evento no site mse.itmo.ru. Venha e você não vai se arrepender!

Um dos principais componentes do programa é a prática. Os alunos têm muito disso: trabalhos de casa semanais, projetos semestrais e hackathons. Graças à imersão total em modernas metodologias e tecnologias de desenvolvimento durante seus estudos, os graduados se integram rapidamente aos processos de trabalho de grandes empresas de TI.

Neste post queremos falar mais detalhadamente sobre os hackathons DevDays, que acontecem semestralmente. As regras são simples: equipes de 3 a 4 pessoas se reúnem e durante três dias os alunos dão vida às suas próprias ideias. O que pode resultar disso? Leia a primeira parte das histórias sobre os projetos de hackathon deste semestre contadas pelos próprios alunos :)

Diário com recomendações de filmes

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

O autor da ideia
Ivan Ilchuk
Alinhar
Ivan Ilchuk – análise do enredo do filme, servidor
Vladislav Korablinov – desenvolvimento de modelos para comparar a proximidade de uma entrada de diário e o enredo de um filme
Dmitry Valchuk – IU
Nikita Vinokurov – UI, design

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

Essa ideia me ocorreu quando eu estava indo para a universidade e pensando nos meus problemas. “Qualquer problema que uma pessoa enfrente, algum escritor clássico já escreveu sobre isso”, pensei. “E como alguém escreveu, significa que alguém já filmou.” Assim, a vontade de assistir a um filme sobre uma pessoa com o mesmo tormento mental apareceu naturalmente.

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 a pessoa gostou anteriormente). Em princípio, este projeto tem algo em comum com a busca de um filme por pontos-chave, mas ainda assim, antes de mais nada, nosso aplicativo oferece a funcionalidade de um diário.

Hackathon DevDays'19 (parte 1): um diário com recomendações, um gerador de percursos pedestres e democracia líquidaComo implementamos isso? Ao pressionar o botão mágico, o diário envia uma entrada para o servidor, onde o filme é selecionado com base na descrição retirada da Wikipedia. Nosso frontend foi feito em Electron (usamos ele, não o site, pois 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 foram feitos em Python: TFs foram obtidos a partir das descrições -vetores IDF que foram comparados quanto à proximidade com o vetor de entrada do diário.

Um membro da equipe trabalhou apenas no modelo, o outro trabalhou inteiramente no front-end (inicialmente junto com um terceiro membro, que posteriormente passou para os testes). Eu estava empenhado em analisar enredos de filmes da Wikipedia e do servidor.

Passo a passo fomos nos aproximando do resultado, superando uma série de problemas, começando pelo fato do modelo inicialmente exigir muita memória RAM, terminando com a dificuldade de transferência de dados para o servidor.

Agora, para encontrar um filme para a noite, não é preciso muito esforço: o resultado dos nossos três dias de trabalho é um aplicativo 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 um pôster.

Minhas impressões sobre o projeto são muito positivas: o trabalho foi cativante desde o início da manhã até tarde da noite, e a aplicação resultante produz periodicamente resultados extremamente engraçados no estilo “Noite sem dormir” para um diário sobre o dever de casa na universidade ou um filme sobre o primeiro dia de aula para uma história sobre o primeiro dia no departamento.

Links relevantes, instaladores, etc. podem ser encontrados aqui.

Gerador de rota

Hackathon DevDays'19 (parte 1): um diário com recomendações, um gerador de percursos pedestres e democracia líquidaO autor da ideia
Artemyeva Irina
Alinhar
Artemyeva Irina – líder da equipe, circuito principal
Gordeeva Lyudmila – música
Platonov Vladislav – rotas

Gosto muito de passear pela cidade: olhar os prédios, as pessoas, pensar na história. Mas, mesmo mudando de residência, mais cedo ou mais tarde me deparo com o problema de escolher um percurso: completei todos os que pude imaginar. Foi assim que surgiu a ideia de automatizar a geração de rotas: você indica o ponto de partida e a extensão do percurso, e o programa lhe dá uma opção. As caminhadas podem ser longas, pelo que um desenvolvimento lógico da ideia parece ser acrescentar a possibilidade de indicar pontos intermédios para uma “paragem”, onde se poderia fazer um lanche e descansar. Outro ramo de desenvolvimento foi a música. Caminhar ao som da música é sempre mais divertido, por isso seria ótimo adicionar a capacidade de selecionar uma lista de reprodução com base em uma rota gerada.

Não foi possível encontrar tais soluções entre as aplicações existentes. Os análogos mais próximos são quaisquer planejadores de rotas: Google Maps, 2GIS, etc.

É mais conveniente ter esse aplicativo no seu telefone, então usar o Telegram foi uma boa opção. Ele permite exibir mapas e tocar música, e você pode controlar tudo isso escrevendo um bot. O principal trabalho com mapas foi feito utilizando a API do Google Map. Python facilita a combinação de ambas as tecnologias.

Havia três pessoas na equipe, então a tarefa foi dividida em duas subtarefas não sobrepostas (trabalhar com mapas e trabalhar com música) para que a galera pudesse trabalhar de forma independente, e eu me encarreguei de combinar os resultados.

Hackathon DevDays'19 (parte 1): um diário com recomendações, um gerador de percursos pedestres e democracia líquidaNenhum de nós jamais trabalhou com a API do Google Map ou escreveu bots do Telegram, então o principal problema foi a quantidade de tempo alocado para implementar o projeto: entender algo sempre leva mais tempo do que fazer algo que você conhece bem. Também foi difícil escolher a API do bot do Telegram: devido ao bloqueio, nem todos funcionam e tive que me esforçar para configurar tudo.

Vale mencionar separadamente como foi resolvido o problema de geração de rotas. É fácil construir uma rota entre dois locais, mas o que você pode oferecer ao usuário se apenas a extensão da rota for conhecida? Deixe o usuário querer caminhar 10 quilômetros. Um ponto é selecionado em uma direção arbitrária, cuja distância em linha reta é de 10 quilômetros, após o qual uma rota é construída até esse ponto ao longo de estradas reais. Muito provavelmente não será reto, então vamos encurtá-lo para os 10 quilômetros especificados. Existem muitas opções para essas rotas - temos um gerador de rotas real!

Inicialmente pretendia segmentar o mapa em zonas correspondentes a zonas verdes: aterros, pátios, ruas, de forma a obter o percurso mais agradável para um passeio, e também gerar música de acordo com estas zonas. Mas fazer isso usando a API do Google Map acabou sendo difícil (não tivemos tempo de resolver esse problema). No entanto, foi possível implementar a construção de um percurso através de tipos específicos de locais (loja, parque, biblioteca): se o percurso contornou todos os locais especificados, mas a distância desejada ainda não foi percorrida, é completado até um distância especificada pelo usuário em uma direção aleatória. A API do Google Map também permite calcular o tempo estimado de viagem, o que ajuda a escolher uma playlist exatamente para toda a caminhada.

Como resultado, conseguiu fazer uma geração rotas por ponto de partida, distância e pontos intermediários; tudo foi preparado para classificar as músicas de acordo com os trechos do percurso, mas por falta de tempo, optou-se por deixar a opção de selecionar uma playlist simplesmente como um ramo adicional da UI. Assim, o usuário pôde escolher de forma independente a música que deseja ouvir.

O principal problema de trabalhar com música era não saber de onde tirar os arquivos mp3 sem exigir que o usuário tivesse uma conta em algum serviço. Decidiu-se solicitar música ao usuário (modo UserMusic). Isso cria 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) – a partir dele você pode gerar músicas independente dos serviços.

Embora não seja perfeito, concluímos a tarefa: acabamos com um aplicativo que gostaria de usar. No geral, isso é muito legal: há três dias você só tinha uma ideia e nem pensava em como exatamente implementá-la, mas agora existe uma solução funcional. Foram três dias muito importantes para mim, não tenho mais medo de inventar algo que não tenho conhecimento suficiente para implementar, ser líder de equipe foi incrivelmente interessante e pude conhecer os caras maravilhosos que se juntaram à minha equipe. melhorar!

Democracia Líquida

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

O autor da ideia
Stanislav Sychev
Alinhar
Stanislav Sychev – líder de equipe, banco de dados
Nikolay Izyumov – interface do bot
Anton Ryabushev – back-end

Dentro de diferentes grupos, muitas vezes é necessário tomar uma decisão ou votar. Normalmente, nesses casos, eles recorrem a democracia direta, porém, quando o grupo fica grande, podem surgir problemas. Por exemplo, uma pessoa em um grupo pode não querer responder perguntas com frequência ou sobre determinados tópicos. Em grandes grupos, para evitar problemas recorrem a democracia representativa, quando um grupo separado de “deputados” é escolhido entre todo o povo, que liberta os restantes do peso da escolha. Mas é muito difícil tornar-se tal deputado, e quem o tornar não será necessariamente honesto e respeitável, como parecia aos eleitores.

Para resolver os problemas de ambos os sistemas, Brian Ford propôs o conceito democracia líquida. Nesse sistema, todos são livres para escolher a função de usuário regular ou delegado, simplesmente expressando seu desejo. Qualquer pessoa pode votar de forma independente ou dar voto a um delegado em uma ou mais questões. Um delegado também pode votar. Além disso, caso o delegado não convém mais ao eleitor, o voto pode ser retirado a qualquer momento.

Exemplos do uso da democracia líquida são encontrados na política, e queríamos implementar uma ideia semelhante para uso diário em todos os tipos de grupos de pessoas. No próximo hackathon DevDays, decidimos escrever um bot do Telegram para votar de acordo com os princípios da democracia líquida. Ao mesmo tempo, eu queria evitar um problema comum com esses bots - obstruir o bate-papo geral com mensagens do bot. A solução é trazer o máximo de funcionalidade possível para uma conversa pessoal.

Hackathon DevDays'19 (parte 1): um diário com recomendações, um gerador de percursos pedestres e democracia líquidaPara criar este bot usamos API do Telegram. Foi escolhido um banco de dados PostgreSQL para armazenar o histórico de votações e delegações. Para se comunicar com o bot, um servidor Flask foi instalado. Escolhemos essas tecnologias porque... já tivemos experiência de interação com eles durante nosso mestrado. O trabalho nos três componentes do projeto – banco de dados, servidor e bot – foi distribuído com sucesso entre os membros da equipe.

É claro que três dias é pouco tempo, então durante o hackathon implementamos a ideia no nível do protótipo. Como resultado, criamos um bot que escreve no chat geral apenas informações sobre a abertura da votação e seus resultados anônimos. A capacidade de votar e criar uma enquete é implementada por meio de correspondência pessoal com o bot. Para votar, digite um comando que exibe uma lista de questões que requerem atenção direta. Na correspondência pessoal, você poderá ver a lista dos delegados e seus votos anteriores, além de dar-lhes o seu voto em um dos temas.

Vídeo com exemplo de trabalho.

Foi interessante trabalhar no projeto, ficamos na universidade até meia-noite. Achamos que é uma ótima maneira de dar uma pausa nos estudos, embora seja muito cansativo. Foi uma experiência agradável trabalhar em uma equipe unida.

PS. As inscrições para programas de mestrado para o próximo ano letivo já estão está aberto. Entrar!

Fonte: www.habr.com

Adicionar um comentário