Witam wszystkich, społeczność JavaRush! Trochę o sobie: Od wiosny 2016 roku pracuję jako Inżynier Oprogramowania Java. Uwielbiam tu przychodzić i rozwiązywać problemy, których nie rozwiązałem na studiach. Dzisiaj opowiem Wam o bibliotece - Porównanie obrazów . Jest to biblioteka typu open source, która jest publicznie dostępna w serwisie GitHub . Celem tego artykułu jest przekazanie, że tworzenie produktu typu open source to nie tylko strata czasu, nie! To bogate doświadczenie, które czerpie się z różnych stron, kiedy masz kontrolę nad całym procesem tworzenia, kiedy trzeba zagłębić się w każdy szczegół. Open Source to świat wokół Ciebie. Nie żartuję, w czasie istnienia tej biblioteki kontaktowałem się z ludźmi z różnych krajów, takich jak USA, Indie, Chiny, Egipt, Rosja, Niemcy, Ukraina, Szwecja, Nowa Zelandia, Norwegia. Oznacza to, że jest to prawdziwe doświadczenie we wspólnym rozwoju, znajdowaniu kompromisów, sprawdzaniu kodu i tak dalej. To był wstęp, teraz zacznijmy po kolei:
Jest drugie zdjęcie:
Należało znaleźć różnice i zakreślić je tak, jak pokazano poniżej:
Jak widać, istnieje różnica w polu Nazwa użytkownika , które jest otoczone czerwonym trójkątem. Bardziej szczegółowy opis zadania . Postanowiłam, że chcę to zrobić nie tylko poprawnie z funkcjonalnego punktu widzenia, ale i pięknie, tak aby nie było wstydu. Aby to zrobić, zdecydowałem, że opublikuję to jako projekt na GitHub . Od dawna chciałem poznać GitHuba i zdobyć doświadczenie w pracy z nim. Po szybkim przejrzeniu stwierdziłem, że dobrze byłoby dodać usługi stron trzecich do analizy jakości kodu, generowania pokrycia kodu testami itp. Dodano następujące narzędzia:
Byłem wtedy jeszcze młody i nieobeznany ze społecznością open source, a sam fakt takiej oferty był dla mnie szalony i zapytałem, dlaczego on to robi? Na co on odpowiedział: "Lolz, och, tylko dlatego, że uwielbiam brać udział w projektach open source. Coś w rodzaju celów życiowych..." ( sam problem jest tutaj ). Wtedy po raz pierwszy poczułem, jak wspaniale jest, gdy różni ludzie znajdują Cię poprzez projekty open source i oferują tak ciekawe rzeczy!
Test. Początek sierpnia 2017 r
Wszystko zaczęło się od tego, że odbyłem rozmowę kwalifikacyjną w jednej z firm, gdzie pierwszym krokiem było napisanie zadania testowego. Zadanie polegało na napisaniu kodu, który porówna dwa obrazki tej samej wielkości, znajdzie różnice między nimi, pogrupuje je i narysuje wokół nich prostokąt. Jest pierwsze zdjęcie:-
Codacy - jakość kodu. Naprawdę warto zwrócić na to uwagę.
-
Travis CI to narzędzie CI (ciągłej integracji), które buduje projekt, uruchamia testy i informuje, czy projekt został pomyślnie zbudowany. Na przykład, jeśli jeden z testów nie przeszedł pomyślnie w wyniku nowych zmian, pojawi się informacja, że kompilacja projektu nie powiodła się i pokoloruje go na czerwono.
-
Kombinezony to narzędzie, które pokazuje, jaki procent Twojego kodu objęty jest testami.
-
BetterCode Hub to kolejne narzędzie do analizy jakości kodu. Bardzo przydatna rzecz, która nie tylko powie co jest źle, ale też opisze dlaczego i poda link do książki, gdzie można zdobyć wiedzę na ten temat.
Ścieżka biblioteczna. Lipiec 2018
Logo
W pewnym momencie odkryłem, że ludzie często odwiedzają mój projekt i dzieje się to codziennie. Byłem tym zdumiony, a jeszcze bardziej zdumiony faktem, że jakiś rok później powstał NUMER, w którym napisano, że pewien grafik zaproponował mi wykonanie logo do mojego projektu. Mówią, że uwielbia to robić w przypadku produktów Opensource i zrobi to całkowicie za darmo. Rozpoczęliśmy współpracę. Zaproponowano kilka opcji, ale ostatecznie zdecydowaliśmy się na tę:Wada pierwsza
Zauważyłem, że pewien programista z Chin stworzył dla mnie problem , w którym opisał, że znalazł defekt w działaniu biblioteki, że jeśli użyjesz dużych obrazów, wyskakuje StackOverflowError . Mężczyzna postanowił to wykorzystać i znalazł błąd. I nie tylko ja to znalazłem. i też o niej pisałem. To nowy krok w rozwoju biblioteki. Co więcej, tak naprawdę nie miałem rozwiązania. W pewnym momencie jeden z testerów z Rosji zaproponował rozwiązanie. Ale było surowe i niewłaściwie zrobione, więc tego nie zaakceptowałem. A kiedy przyszedł czas na publikację biblioteki w Maven Central, trzeba było coś z tą wadą rozwiązać, a nie chciałem publikować jej razem z nią. Poza tym pojawił się jeszcze jeden defekt, którego nigdy nie naprawiłem i który również przyniósł sporo niedogodności.Użycie wiersza poleceń. Jesień 2018
Kolejnym etapem rozwoju była komunikacja ze Szwedem (Renato Athaydes), który chciał korzystać z biblioteki poprzez linię poleceń i do tego konieczne było wprowadzenie pewnych zmian i uzupełnień. Po raz kolejny byłem tym zdumiony i zaskoczony. Po tym jak grafik do mnie napisał, moje zdziwienie było nieco mniejsze, ale nadal bardzo duże. Myśl, że ktoś naprawdę potrzebował mojego kodu, napełniła mnie niesamowitymi uczuciami. Dokonał niezbędnych zmian i przygotował kod. Przeprowadziłem przegląd kodu, czyli przyjrzałem się zmianom, były komentarze, które zostały zmienione i zmiany były już w bibliotece. Zmiany te oznaczyłem jako wersję v2.0. Kolejnym krokiem było dodanie biblioteki do Maven Central – centralnego repozytorium, skąd można ją pobrać do dowolnego projektu i wykorzystać jako zależność. Nie miałem wtedy pojęcia jak to zrobić, nawet zdalnie, więc powiedziałem, że jestem zajęty i poprosiłem go o wykonanie wszystkich kroków niezbędnych do założenia projektu. To jednak okazało się zupełnie za mało i najciekawsze było nawiązanie połączenia z Maven Central. To ogromny ból, którego nie udało mi się zrobić za pierwszym razem i dopiero 15 kwietnia udało mi się opublikować projekt na Maven Central. Nie było to łatwe, ale jak mówią inni, „każdy, kto chce opublikować swój kod Java, przechodzi przez to”. Zanim opublikowałem bibliotekę w końcu znalazłem co i jak zrobić z defektami które pojawiały się już od dłuższego czasu i wypuściłem nową wersję v2.0.2 w której podziękowałem wszystkim którzy mi pomogli, opisali co i jak zrobiłem .Publikowanie w Maven Central. Wiosna 2019
Aby poprawnie opublikować bibliotekę, musisz dobrze rozumieć wersjonowanie i prawidłowe ustawianie wersji. Będę się trzymał tego schematu:- XX.YY.BBBB , gdzie XX to aktualizacja wersji głównej, która pociąga za sobą zmiany niezgodne z poprzednią (np. zmiana zwracanego wyniku w metodach);
- YY to drobna aktualizacja - wewnętrzna zmiana lub rozszerzenie, które nie zmienia tego, czym jest BBBB - są to wady, które zostały naprawione.
- Na przykład wersja 2.0.2 oznacza, że wersja główna to 2, nie było żadnych mniejszych aktualizacji i istnieją dwie aktualizacje dotyczące defektów.
Komunikacja ze Szwedami. Maj 2019
Po opublikowaniu biblioteki inny Szwed (Mika Kytöläinen) wysłał mi e-mail i poprosił swojego przyjaciela o wprowadzenie zmian w mojej bibliotece. Mówi, że bardzo tego potrzebuje i będzie bardzo szczęśliwy, jeśli to zrobimy i to szybko. Oczywiście nie byłem przeciwny koniecznym zmianom. Zasugerował dodanie konfiguracji grubości linii, która rysuje prostokąt. Na przykład dla tych, którzy mają słaby wzrok, będzie to przydatna zmiana. Przygotowano kod . Po dodaniu jeszcze kilku zmian wydałem wersję v2.2.0Komunikacja z Niemcem. Maj 2019
Następnie jeden Niemiec stworzył problem , w którym twierdzi, że chce go użyć do testów, ale brakuje mu funkcjonalności. Poczynił wiele bardzo interesujących propozycji, sugerował, aby zamiast zwracać jedynie wynikowy obraz z wynikiem porównania, zwrócić zbiór danych: co porównywano, wynik (jeśli to konieczne) i stan, w jakim się znajduje będzie MATCH, MISMATCH, SIZE_MISMATCH . Nawet wprowadził zmiany. Ale w ogóle nie uwzględniły poprzedniego kodu i zostały wykonane w pośpiechu. Odrzuciłem je i zaproponowałem, że wykonam je według własnego uznania. Mimo to odpowiedział więcej i zdecydowałem, że sam to zrobię i wypuszczę nową wersję. Jednocześnie Mika Kytöläinen zaproponował kolejną ciekawą funkcjonalność – dodanie obszarów, które nie zostaną uwzględnione w porównaniu. To jest prawdziwy przypadek. A wszystko to zostało wydane w wersji 3.0.0Użyj w prawdziwym projekcie
Pod koniec maja napisał do mnie tester automatyzujący z Kijowa, który zainteresował się biblioteką i chce ją wykorzystać w realnym projekcie, który przyniesie pieniądze. To był przełom! Użycie go gdzieś w projekcie zwierzaka to jedno, ale użycie go w prawdziwym projekcie to zupełnie inna sprawa. Omówiliśmy, co i jak to działa. Aplikacja jest bardzo ciekawa: w ich aplikacji są czeki, które są drukowane i trzeba było sprawdzić, czy czeki są tworzone według określonego szablonu i to się nie zmienia. Pojawił się jednak problem polegający na tym, że sekcje takie jak data i godzina zawsze się zmieniały i należało je zignorować. Dodaliśmy już funkcjonalność, aby zignorować niektóre obszary, ale okazała się ona nadal bardzo surowa do rzeczywistego użytku i nadal owocnie pracowaliśmy nad tym przez kilka tygodni. Rezultatem było wydanie wersji v3.1.1Znalezienie niszy
Potem zdałem sobie sprawę, że prawdziwą niszą dla mojej biblioteki jest używanie jej w testach. W tym celu postanowiłem znaleźć jakieś forum dla testerów i napisać do nich w tej sprawie, aby uzyskać informację zwrotną i zwiększyć sławę. Znalazłem rosyjskojęzyczne forum i opublikowałem tam artykuł: Organizacja obrazów testowych - porównanie dwóch podobnych . Otrzymałem w nim realną informację zwrotną na temat kodu i funkcjonalności, którą zastosowałem i wypuściłem nową wersję v3.2.0 , a następnie v.3.3.0 .Teraz
Biblioteka ma obecnie 60 gwiazdek na Githubie i 33 forki. Myślę, że to bardzo fajne, zważywszy, że nie promowałem tego w żaden sposób poza artykułem na forum dla automatów. Dziękuję wszystkim, którzy przeczytali do końca. W rzeczywistości artykuł okazał się znacznie dłuższy, niż się spodziewałem. Artykuł o tym, jak opublikować bibliotekę w Maven Central. Jeśli masz coś do dodania, napisz! Jeśli masz coś do zasugerowania ulepszenia biblioteki, napisz! Przeczytam wszystko i poświęcę temu odpowiednią ilość czasu. Każdy, komu spodobał się artykuł i uznał go za przydatny - oceń go i napisz w komentarzach. Subskrybuj także moje konto na githubie romankh3 Zobacz także inne moje artykuły:- Pytania techniczne podczas rozmowy kwalifikacyjnej
- Jak znaleźć pracę? Wskazówki dotyczące wysyłania CV
- Wypalenie zawodowe. Jak się oprzeć?
- Historia sukcesu. 20 godzin programowania tygodniowo, studia magisterskie i życie osobiste
- Tworzenie systemu monitorowania cen biletów lotniczych: przewodnik krok po kroku [Część 1]
- Przewodnik po tworzeniu klienta dla API Skyscanner i publikowaniu go w jCenter i Maven Central [Część 1]
- Rejestrowanie: co, jak, gdzie i czym?
- Debugowanie w Intellij IDEA: przewodnik dla początkujących
GO TO FULL VERSION