Ciao a tutti, comunità JavaRush! Un po' di me: lavoro come Java Software Engineer dalla primavera del 2016. Adoro venire qui e risolvere problemi che non ho risolto durante i miei studi. Oggi vi parlerò della libreria - Confronto immagini . Questa è una libreria open source disponibile pubblicamente su GitHub . Lo scopo di questo articolo è trasmettere che creare un prodotto open source non è solo una perdita di tempo, no! Questa è un'esperienza ricca che viene tratta da diversi lati, quando hai il controllo sull'intero processo di sviluppo, quando devi approfondire ogni dettaglio. L'Open Source è il mondo intorno a te. Non sto scherzando, durante l'esistenza di questa biblioteca, ho comunicato con persone provenienti da diversi paesi, come Stati Uniti, India, Cina, Egitto, Russia, Germania, Ucraina, Svezia, Nuova Zelanda, Norvegia. Cioè, questa è una vera esperienza nello sviluppo congiunto, nella ricerca di compromessi, nel controllo del codice e così via. Questa era l'introduzione, ora cominciamo con ordine:
C'è una seconda immagine:
È stato necessario trovare le differenze e cerchiarle come mostrato di seguito:
Come puoi vedere, c'è una differenza nel campo Nome utente , che è cerchiato da un triangolo rosso. Descrizione più dettagliata dell'attività . Ho deciso che volevo farlo non solo correttamente dal punto di vista funzionale, ma anche magnificamente, in modo che non fosse imbarazzante. Per fare ciò, ho deciso di pubblicarlo come progetto su GitHub . Desidero da tempo studiare GitHub e acquisire esperienza lavorando con esso. Dopo una rapida occhiata, ho scoperto che sarebbe stato utile aggiungere servizi di terze parti per analizzare la qualità del codice, generare copertura del codice con test, ecc. Aggiunti i seguenti strumenti:
Allora ero ancora giovane e non avevo familiarità con la comunità open source, e il fatto stesso di un'offerta del genere mi sembrava folle e gli ho chiesto, perché lo sta facendo? Al che lui ha risposto: "Lolz oh, solo perché amo contribuire a progetti open source. Una specie di obiettivo di vita..." ( il problema stesso è qui ). È stato allora che ho capito per la prima volta quanto sia bello quando persone diverse ti trovano attraverso progetti open source e ti offrono cose così interessanti!
Test. Inizio agosto 2017
Tutto è iniziato con il fatto che ho avuto un colloquio con una delle aziende, in cui il primo passo è stato scrivere un compito di prova. Il compito era scrivere un codice che confrontasse due immagini della stessa dimensione, trovasse le differenze tra loro, le raggruppasse e disegnasse un rettangolo attorno ad esse. C'è la prima immagine:-
Codacy : qualità del codice. Vale davvero la pena prestare attenzione.
-
Travis CI è uno strumento CI (integrazione continua) che crea un progetto, esegue test e indica se il progetto è stato creato con successo. Ad esempio, se uno dei test non è stato superato a causa delle nuove modifiche, dirà che la creazione del progetto non ha avuto successo e lo colorerà di rosso.
-
Coveralls è uno strumento che mostra quale percentuale del tuo codice è coperta dai test.
-
BetterCode Hub è un altro strumento per analizzare la qualità del codice. Una cosa molto utile che non solo ti dirà cosa è brutto, ma descriverà anche il perché e fornirà un collegamento a un libro dove potrai acquisire conoscenze al riguardo.
Percorso della Biblioteca. Luglio 2018
Logo
Ad un certo punto ho scoperto che le persone visitano spesso il mio progetto, e questo accade ogni giorno. Sono rimasto stupito da questo, e ancora più stupito dal fatto che circa un anno dopo hanno creato un ISSUE, in cui era scritto che un certo grafico mi stava offrendo di creare un logo per il mio progetto. Dicono che gli piace farlo per i prodotti Opensource e che lo farà in modo assolutamente gratuito. Abbiamo iniziato a collaborare. Sono state proposte diverse opzioni, ma alla fine abbiamo deciso su questa:Primo difetto laterale
Ho notato che un certo sviluppatore cinese ha creato per me un problema in cui descriveva di aver trovato un difetto nel lavoro della libreria, ovvero che se si utilizzano immagini di grandi dimensioni, si ottiene un StackOverflowError . L'uomo ha deciso di approfittarne e ha riscontrato un errore. E non l'ho semplicemente trovato. e ha anche scritto di lei. Questo è un nuovo passo nello sviluppo della biblioteca. Inoltre, non avevo davvero una soluzione. Ad un certo punto, uno dei tester russi ha proposto una soluzione. Ma era crudo e non realizzato correttamente e non l'ho accettato. E quando è arrivato il momento di pubblicare la libreria in Maven Central, era necessario risolvere qualcosa con questo difetto; non volevo pubblicarla insieme ad essa. Inoltre c'era un altro difetto che non ho mai risolto e che portava anche molti disagi.Utilizzo della riga di comando. Autunno 2018
La fase successiva dello sviluppo è stata la comunicazione con uno svedese (Renato Athaydes), che voleva utilizzare la libreria tramite riga di comando e per questo è stato necessario apportare alcune modifiche e integrazioni. Sono rimasto ancora una volta stupito e sorpreso da questo. Dopo che il grafico mi ha scritto, la mia sorpresa è stata un po' minore, ma comunque molto alta. Il pensiero che qualcuno avesse davvero bisogno del mio codice mi riempiva di sentimenti incredibili. Ha apportato le modifiche necessarie e ha preparato il codice. Ho condotto una revisione del codice, ovvero ho esaminato le modifiche, c'erano commenti che erano stati modificati e le modifiche erano già nella libreria. Ho designato queste modifiche come versione v2.0. Il passo successivo è stato aggiungere la libreria a Maven Central, un repository centrale, da dove è possibile scaricarla per qualsiasi progetto e utilizzarla come dipendenza. A quel tempo non avevo idea di come farlo, nemmeno da remoto, quindi ho detto che ero occupato e gli ho chiesto di eseguire tutti i passaggi necessari per impostare il progetto. Ma questo si è rivelato non bastare e la cosa più interessante è stata stabilire una connessione con Maven Central. È una sofferenza incredibile, cosa che non potevo fare la prima volta, e solo il 15 aprile sono riuscito a pubblicare il progetto su Maven Central. Non è stato facile, ma come dicono gli altri, "tutti coloro che vogliono pubblicare il proprio codice Java passano attraverso questo." Prima di pubblicare la libreria, ho finalmente trovato cosa e come fare con i difetti che duravano da molto tempo e ho rilasciato una nuova versione v2.0.2 , in cui ho ringraziato tutti coloro che mi hanno aiutato, ho descritto cosa e come ho fatto .Pubblicazione su Maven Central. Primavera 2019
Per pubblicare correttamente una libreria, è necessario avere una buona conoscenza del controllo delle versioni e di come impostare correttamente le versioni. Mi atterrò a questo schema:- XX.YY.BBBB , dove XX è un aggiornamento importante della versione che comporta modifiche incompatibili con la precedente (ad esempio, la modifica del risultato restituito nei metodi);
- YY è un aggiornamento minore - una modifica interna o un'espansione che non cambia ciò che è BBBB - questi sono difetti che sono stati risolti.
- Ad esempio, versione 2.0.2 significa che la versione principale è la 2, non sono presenti aggiornamenti minori e sono presenti due aggiornamenti per difetti.
Comunicazione con gli svedesi. Maggio 2019
Dopo aver pubblicato la libreria, un altro svedese (Mika Kytöläinen) mi ha inviato un'e-mail chiedendo al suo amico di apportare modifiche alla mia libreria. Dice che ne ha davvero bisogno e che sarà molto felice se lo faremo e lo faremo rapidamente. Naturalmente non ero contrario ai cambiamenti necessari. Ha suggerito di aggiungere una configurazione di spessore della linea che disegna un rettangolo. Ad esempio, per coloro che hanno problemi di vista, questo sarà un cambiamento utile. Preparato il codice . Dopo aver aggiunto qualche altra modifica, ho rilasciato la versione v2.2.0Comunicazione con un tedesco. Maggio 2019
Successivamente, un tedesco ha creato un problema in cui afferma di volerlo utilizzare per i test, ma non ha funzionalità. Ha fatto molte proposte molto interessanti, ha suggerito che invece di restituire solo l'immagine risultante con il risultato del confronto, restituire un insieme di dati: cosa è stato confrontato, il risultato (se necessario) e lo stato in cui si trova sarà CORRISPONDENZA, MISMATCH, DIMENSIONE_MISMATCH . Ho anche apportato le modifiche. Ma non hanno tenuto affatto conto del codice precedente e sono stati realizzati in tutta fretta. Li ho rifiutati e mi sono offerto di realizzarli come ritenevo opportuno. Nonostante ciò, ha risposto di più e ho deciso che lo avrei fatto da solo e avrei rilasciato una nuova versione. Allo stesso tempo, Mika Kytöläinen ha proposto un'altra funzionalità interessante: aggiungere aree che non sarebbero state incluse nel confronto. Questo è un caso reale. E tutto questo è stato rilasciato nella v3.0.0Utilizzare in un progetto reale
Alla fine di maggio mi ha scritto un tester di automazione di Kiev, che si è interessato alla biblioteca e vuole utilizzarla in un progetto reale che porti soldi. È stata una svolta! Usarlo da qualche parte in un progetto per animali domestici è una cosa, ma usarlo in un progetto reale è una questione completamente diversa. Abbiamo discusso di cosa e come funziona. L'applicazione è molto interessante: nella loro applicazione hanno degli assegni che vengono stampati ed è stato necessario verificare che gli assegni siano creati secondo un determinato modello e questo non cambi. Ma c'era il problema che sezioni come data e ora cambiavano sempre e dovevano essere ignorate. Avevamo già aggiunto funzionalità per ignorare alcune aree, ma si è rivelato ancora molto grezzo per l'uso reale e abbiamo comunque lavorato fruttuosamente insieme per diverse settimane su questo. Il risultato è stato il rilascio della versione v3.1.1Trovare una nicchia
Successivamente, mi sono reso conto che la vera nicchia per la mia libreria era utilizzarlo nei test. Per fare questo, ho deciso di trovare una sorta di forum per i tester e di scrivere loro per ottenere feedback e aumentare la fama. Ho trovato un forum in lingua russa e lì ho pubblicato un articolo: Organizzazione di immagini di test - confronto di due simili . In esso ho ricevuto un feedback reale sul codice e sulla funzionalità, che ho applicato e rilasciato una nuova versione v3.2.0 e poi v.3.3.0 .Ora
La libreria attualmente ha 60 stelle su Github e ha 33 fork. Penso che sia molto interessante, considerando che non l'ho promosso in alcun modo se non con un articolo sul forum per automatismi. Grazie a tutti coloro che hanno letto fino alla fine. In realtà si è rivelato un articolo molto più lungo di quanto mi aspettassi. Un articolo su come pubblicare una libreria su Maven Central. Se hai qualcosa da aggiungere, scrivi! Se hai qualcosa da suggerire per migliorare la libreria, scrivi! Leggerò tutto e gli dedicherò il giusto tempo. Chiunque abbia apprezzato l'articolo e lo abbia trovato utile, valutalo e scrivi nei commenti. Inoltre, iscriviti al mio account github romankh3 Vedi anche i miei altri articoli:- Domande tecniche durante un colloquio
- Come trovare lavoro? Consigli per l'invio dei curriculum
- Burnout professionale. Come resistere?
- Storia di successo. 20 ore di programmazione settimanali, laurea magistrale e vita personale
- Creare un sistema di monitoraggio dei prezzi dei biglietti aerei: una guida passo passo [Parte 1]
- Guida per creare un client per l'API di Skyscanner e pubblicarlo in jCenter e Maven Central [Parte 1]
- Logging: cosa, come, dove e con cosa?
- Debug in Intellij IDEA: una guida per principianti
GO TO FULL VERSION