Hackathon DevDays'19 (parte 1): un diario con raccomandazioni, un generatore di percorsi pedonali e democrazia liquida

Di recente detto sul programma di master aziendale di JetBrains e dell'Università ITMO "Sviluppo software / Ingegneria del software". Invitiamo tutti gli interessati ad un open day lunedì 29 aprile. Ti parleremo dei vantaggi del nostro programma di master, quali bonus offriamo agli studenti e cosa chiediamo in cambio. Inoltre, risponderemo sicuramente alle domande dei nostri ospiti.

Hackathon DevDays'19 (parte 1): un diario con raccomandazioni, un generatore di percorsi pedonali e democrazia liquidaL'open day si terrà presso l'ufficio JetBrains nel Times Business Center, dove studiano gli studenti del nostro master. Inizia alle 17:00. Sul sito potrete scoprire tutti i dettagli e iscrivervi all'evento mse.itmo.ru. Venite e non ve ne pentirete!

Una delle componenti principali del programma è la pratica. Gli studenti ne hanno tantissimo: compiti settimanali, progetti semestrali e hackathon. Grazie alla completa immersione nelle moderne metodologie e tecnologie di sviluppo durante gli studi, i laureati si integrano rapidamente nei processi di lavoro delle grandi aziende IT.

In questo post vogliamo parlare più nel dettaglio degli hackathon dei DevDays, che si svolgono ogni sei mesi. Le regole sono semplici: si riuniscono squadre di 3-4 persone e per tre giorni gli studenti danno vita alle proprie idee. Cosa potrebbe venirne fuori? Leggi la prima parte delle storie sui progetti di hackathon di questo semestre raccontate dagli studenti stessi :)

Diario con consigli sui film

Hackathon DevDays'19 (parte 1): un diario con raccomandazioni, un generatore di percorsi pedonali e democrazia liquida

L'autore dell'idea
Ivan Ilčuk
Allineare
Ivan Ilchuk – analisi della trama del film, server
Vladislav Korablinov – sviluppo di modelli per confrontare la vicinanza di un diario e la trama di un film
Dmitry Valchuk – UI
Nikita Vinokurov – Interfaccia utente, design

L'obiettivo del nostro progetto era scrivere un'applicazione desktop, un diario che consigliasse film all'utente in base alle voci in esso contenute.

Questa idea mi è venuta mentre andavo all'università e pensavo ai miei problemi. "Qualunque sia il problema che una persona deve affrontare, qualche scrittore classico ne ha già scritto", ho pensato. “E se qualcuno l’ha scritto, vuol dire che qualcuno l’ha già filmato”. Quindi il desiderio di guardare un film su una persona con lo stesso tormento mentale è apparso naturale.

Ovviamente, esiste un'ampia varietà di diari separati e servizi di raccomandazione separati (ma di solito le raccomandazioni si basano su ciò che piaceva in precedenza alla persona). In linea di principio, questo progetto ha qualcosa in comune con la ricerca di un film in base ai punti chiave, ma, prima di tutto, la nostra applicazione fornisce la funzionalità di un diario.

Hackathon DevDays'19 (parte 1): un diario con raccomandazioni, un generatore di percorsi pedonali e democrazia liquidaCome lo abbiamo implementato? Quando si preme il pulsante magico, il diario invia una voce al server, dove il film viene selezionato in base alla descrizione tratta da Wikipedia. Il nostro frontend è stato realizzato in Electron (lo usiamo, non il sito web, perché inizialmente abbiamo deciso di archiviare i dati dell'utente non sul server, ma localmente sul computer), e il server e il sistema di raccomandazioni stesso sono stati realizzati in Python: i TF erano ottenuto dalle descrizioni -vettori IDF che sono stati confrontati per la vicinanza al vettore di registrazione del diario.

Un membro del team ha lavorato solo sul modello, l'altro ha lavorato interamente sul front-end (inizialmente insieme a un terzo membro, che poi è passato ai test). Ero impegnato nell'analisi delle trame dei film da Wikipedia e dal server.

Passo dopo passo ci siamo avvicinati al risultato, superando una serie di problemi, a cominciare dal fatto che inizialmente il modello richiedeva molta RAM, per finire con la difficoltà di trasferire i dati al server.

Adesso, per trovare un film per la serata, non serve molto impegno: il risultato dei nostri tre giorni di lavoro è un'applicazione desktop e un server, a cui l'utente accede tramite https, ricevendo in risposta una selezione di 5 film con una breve descrizione e un poster.

Le mie impressioni sul progetto sono molto positive: il lavoro è stato avvincente dalla mattina presto fino a tarda notte, e l'applicazione risultante produce periodicamente risultati estremamente divertenti nello stile di "Notte insonne" per una voce nel diario sui compiti all'università o un film sul primo giorno di scuola per un racconto sul primo giorno al dipartimento.

È possibile trovare collegamenti pertinenti, programmi di installazione, ecc qui.

Generatore di percorsi

Hackathon DevDays'19 (parte 1): un diario con raccomandazioni, un generatore di percorsi pedonali e democrazia liquidaL'autore dell'idea
Artemieva Irina
Allineare
Artemyeva Irina – caposquadra, circuito principale
Gordeeva Lyudmila – musica
Platonov Vladislav – percorsi

Mi piace molto passeggiare per la città: guardare gli edifici, le persone, pensare alla storia. Ma, anche quando cambio residenza, prima o poi mi trovo di fronte al problema della scelta di un percorso: ho completato tutti quelli che mi venivano in mente. È così che è nata l'idea di automatizzare la generazione dei percorsi: si indica il punto di partenza e la lunghezza del percorso e il programma offre un'opzione. Le passeggiate possono essere lunghe, quindi uno sviluppo logico dell’idea sembra essere quello di aggiungere la possibilità di indicare punti intermedi per una “sosta”, dove poter fare uno spuntino e riposarsi. Un altro ramo dello sviluppo è stata la musica. Camminare con la musica è sempre più divertente, quindi sarebbe fantastico aggiungere la possibilità di selezionare una playlist in base a un percorso generato.

Non è stato possibile trovare tali soluzioni tra le applicazioni esistenti. Gli analoghi più vicini sono tutti i pianificatori di percorso: Google Maps, 2GIS, ecc.

È più comodo avere un’applicazione del genere sul tuo telefono, quindi usare Telegram è stata una buona opzione. Ti consente di visualizzare mappe e riprodurre musica e puoi controllare tutto questo scrivendo un bot. Il lavoro principale con le mappe è stato svolto utilizzando l'API di Google Map. Python semplifica la combinazione di entrambe le tecnologie.

C'erano tre persone nel team, quindi il compito è stato diviso in due sottoattività non sovrapposte (lavorare con le mappe e lavorare con la musica) in modo che i ragazzi potessero lavorare in modo indipendente, e mi sono preso la responsabilità di combinare i risultati.

Hackathon DevDays'19 (parte 1): un diario con raccomandazioni, un generatore di percorsi pedonali e democrazia liquidaNessuno di noi aveva mai lavorato con le API di Google Map o scritto bot di Telegram, quindi il problema principale era la quantità di tempo dedicato alla realizzazione del progetto: capire qualcosa richiede sempre più tempo che fare qualcosa che si conosce bene. È stato difficile anche scegliere le API dei bot di Telegram: a causa del blocco non tutte funzionano e ho dovuto faticare per impostare il tutto.

Vale la pena menzionare separatamente come è stato risolto il problema della generazione dei percorsi. È facile costruire un percorso tra due località, ma cosa puoi offrire all’utente se si conosce solo la lunghezza del percorso? Lascia che l'utente voglia camminare per 10 chilometri. Un punto viene selezionato in una direzione arbitraria, la cui distanza in linea retta è di 10 chilometri, dopodiché viene costruito un percorso fino a questo punto lungo strade reali. Molto probabilmente non sarà dritto, quindi lo accorceremo ai 10 chilometri specificati. Ci sono molte opzioni per tali percorsi: abbiamo un vero generatore di percorsi!

Inizialmente volevo segmentare la mappa in aree corrispondenti ad aree verdi: argini, cortili, strade, in modo da ottenere il percorso più piacevole per una passeggiata, e anche generare musica in accordo con queste aree. Ma farlo utilizzando l'API di Google Map si è rivelato difficile (non abbiamo avuto il tempo di risolvere questo problema). È stato tuttavia possibile implementare la costruzione di un percorso attraverso specifiche tipologie di luoghi (negozio, parco, biblioteca): se il percorso aggira tutti i luoghi indicati, ma non è stata ancora percorsa la distanza desiderata, viene completato fino a distanza specificata dall'utente in una direzione casuale. L'API di Google Map ti consente anche di calcolare il tempo di viaggio stimato, il che ti aiuta a scegliere una playlist esatta per l'intera passeggiata.

Come risultato, è riuscito a creare una generazione percorsi per punto di partenza, distanza e punti intermedi; tutto era predisposto per classificare la musica in base alle sezioni del percorso, ma per mancanza di tempo si è deciso di lasciare la possibilità di selezionare una playlist semplicemente come ramo aggiuntivo dell'interfaccia utente. Pertanto, l'utente ha potuto scegliere autonomamente la musica da ascoltare.

Il problema principale nel lavorare con la musica era non sapere dove trovare i file mp3 senza richiedere all'utente di avere un account su qualsiasi servizio. Si è deciso di richiedere la musica all'utente (modalità UserMusic). Ciò crea un nuovo problema: non tutti hanno la possibilità di scaricare brani. Una soluzione è creare un archivio con la musica degli utenti (modalità BotMusic): da esso è possibile generare musica indipendentemente dai servizi.

Anche se non perfetto, abbiamo portato a termine il compito: ci siamo ritrovati con un'applicazione che vorrei utilizzare. In generale, è molto interessante: tre giorni fa avevi solo un'idea e nessun pensiero su come implementarla esattamente, ma ora esiste una soluzione funzionante. Sono stati tre giorni molto importanti per me. Non ho più paura di inventare qualcosa che non ho abbastanza conoscenze per realizzare, essere un team leader è stato incredibilmente interessante e ho conosciuto i meravigliosi ragazzi che si sono uniti al mio team Meglio!

Democrazia liquida

Hackathon DevDays'19 (parte 1): un diario con raccomandazioni, un generatore di percorsi pedonali e democrazia liquida

L'autore dell'idea
Stanislav Sychev
Allineare
Stanislav Sychev – caposquadra, database
Nikolay Izyumov – interfaccia del bot
Anton Ryabushev – backend

All’interno dei diversi gruppi spesso è necessario prendere una decisione o votare. Di solito in questi casi ricorrono a democrazia direttaTuttavia, quando il gruppo diventa numeroso, possono sorgere problemi. Ad esempio, una persona in un gruppo potrebbe non voler rispondere spesso alle domande o rispondere a domande su determinati argomenti. In gruppi numerosi, per evitare problemi a cui ricorrono democrazia rappresentativa, quando tra tutto il popolo viene scelto un gruppo separato di “deputati”, che liberano gli altri dal peso della scelta. Ma è abbastanza difficile diventare un deputato del genere, e la persona che lo diventa non sarà necessariamente onesta e rispettabile, come sembrava agli elettori.

Per risolvere i problemi di entrambi i sistemi, Brian Ford ha proposto il concetto democrazia liquida. In un sistema del genere ognuno è libero di scegliere il ruolo di utente abituale o di delegato, semplicemente esprimendo il proprio desiderio. Chiunque può votare in modo indipendente o dare un voto a un delegato su una o più questioni. Anche un delegato può esprimere il suo voto. Inoltre, se il delegato non è più adatto all'elettore, il voto può essere ritirato in qualsiasi momento.

Esempi di utilizzo della democrazia liquida si trovano in politica e noi volevamo implementare un'idea simile per l'uso quotidiano all'interno di tutti i tipi di gruppi di persone. Al prossimo hackathon di DevDays, abbiamo deciso di scrivere un bot di Telegram per votare secondo i principi della democrazia liquida. Allo stesso tempo, volevo evitare un problema comune con questi bot: intasare la chat generale con i messaggi del bot. La soluzione è portare quanta più funzionalità possibile in una conversazione personale.

Hackathon DevDays'19 (parte 1): un diario con raccomandazioni, un generatore di percorsi pedonali e democrazia liquidaPer creare questo bot abbiamo utilizzato API di Telegram. È stato scelto un database PostgreSQL per archiviare la cronologia delle votazioni e delle delegazioni. Per comunicare con il bot è stato installato un server Flask. Abbiamo scelto queste tecnologie perché... abbiamo già avuto esperienza di interazione con loro durante gli studi del nostro master. Il lavoro sui tre componenti del progetto (database, server e bot) è stato distribuito con successo tra i membri del team.

Naturalmente tre giorni sono pochi, quindi durante l'hackathon abbiamo implementato l'idea a livello di prototipo. Di conseguenza, abbiamo creato un bot che scrive nella chat generale solo le informazioni sull'apertura della votazione e sui suoi risultati anonimi. La possibilità di votare e creare un sondaggio viene implementata tramite la corrispondenza personale con il bot. Per votare, inserisci un comando che visualizzi un elenco di problemi che richiedono attenzione diretta. Nella corrispondenza personale potrete vedere l'elenco dei delegati e i loro voti precedenti, nonché dare loro il vostro voto su uno degli argomenti.

Video con un esempio di lavoro.

È stato interessante lavorare al progetto, siamo rimasti in università fino a mezzanotte, pensiamo che questo sia un ottimo modo per prendersi una pausa dallo studio, anche se è molto faticoso. È stata una piacevole esperienza lavorare in un team affiatato.

PS. Sono già aperte le iscrizioni ai master per il prossimo anno accademico è aperto... Unisciti a noi!

Fonte: www.habr.com

Aggiungi un commento