Osiem miesięcy po wydaniu Czkawki/Krokieta 7.0, nadszedł czas na wydanie wersji 8.0.

Dla ludzi niekojarzących programu, to jest to aplikacja do czyszczenia plików z duplikatów i jest dostępna na windowsa, linuxa, macos.

Lista Zmian(po angielsku, bo tłumaczenie niezbyt wiele ma sensu)

### Breaking changes

- Due to the removal image_type from image struct, old cache files are incompatible with new version and should be regenerated from scratch(it uses new name)
- Some CLI arguments could change short name, due fixing ambiguous names

### Known regressions

- Slint 1.8 which Krokiet uses requires femtovg 0.9.2 which broke font rendering - https://github.com/slint-ui/slint/issues/6298

### CI

- Providing nightly builds
- Added finding duplicated options in CLI

### Core

- Removed some unnecessary panics
- Simplified usage of structures when sending/receiving progress information
- Added Median hash algorithm
- Fixed compilation with Rust >=1.80
- Extracted tool input parameters, that helped to find not used parameters
- Added new mod to find similar music only in groups with similar title tag
- Printing to file/console no longer uses two backslashes in windows paths
- Fixed panic when failed to decode raw picture
- Remove useless saving/loading cache when there is no files to check
- Filtering hard links on windows
- Added jxl support
- Added avif support(via external C library, not enabled by default)
- Integer overflow are enabled by default(prepare for reporting bugs, slower performance and general unstability)
- Fixed crash when loading invalid image cache

### Krokiet

- Fixed invalid default hash size in similar images
- Fixed and added more input parameters to the application
- Fixed problem with loading invalid preset
- Fixed crash when using 8 hash size with small similarity
- Disabling buttons when no files were found
- Changed way to close/open panel at bottom
- Modify logo a little
- Avoid errors when trying to load preview of not supported file
- Added ability to show preview of referenced folders
- Enable selecting with space and jumping over entries with arrows and opening with enter
- Added button to rename files with invalid extension

### GTK GUI

- Fixed and added more input parameters to the application
- Added option to use external libraries instead gtk pixbuf loader for previews
- Using static runtime with zstd compression in appimage
- Restoring flatpak builds
- [External] Mac homebrew version of app - https://formulae.brew.sh/formula/czkawka

### CLI

- Added options to find/remove images by size
- Fixed and added more input parameters to the application
- Fixed crash when stopping scan multiple times
- Print results also in debug build
- Added support for selecting reference directories

Przyszłość

Przez blisko pół roku nie stworzyłem ani jednego commita, bo musiałem nieco odpocząć od projektu, bo nieco się wypaliłem.
W pracy zaczynam coraz więcej programować w rust, więc widzę że sam projekt nie jest najwyższej jakości i architektura aplikacji wymaga masy zmian(na które niekiedy za późno, bo wymaga to przepisania całej aplikacji) choć częściowo staram się refaktorować to co możliwe.
Jednak jednocześnie mam coraz mniej chęci, zajmować się poza pracą tym, co robię w czasie pracy, czyli głównie programowaniem - rozpoczynając projekt pracowałem w nieco innej branży, więc rozwijanie aplikacji było fajną odskocznią od zwyczajnych zadań.

Istnieje wiele głosów o konieczności przeprojektowania UI by było ono przystępniejsze jak i zaimplementowania nowych ważnych funkcji tj. pauza/wznawianie czy rozszerzenia opcji wyszukiwania duplikatów.
W teorii brzmią one sensownie, jednak są one problematyczne z pewnych powodów:
- główny ciężar implementacji zmian spada na mnie. Każdą funkcję trzeba najpierw przemyśleć, zaimplementować, przetestować, powalczyć z błędami związanymi z zewnętrznymi bibliotekami a następnie wspierać i modyfikować gdy to konieczne. Już teraz jestem autorem niemal 90% zmian i nie wygląda by cokolwiek się zmieniło lub by ktoś inny przejął na siebie w znaczącym stopniu ten ciężar.
- jestem słaby z tworzenia interfejsów - mimo chęci, zaproponowane mi różne koncepcje nowego wyglądu aplikacji nie wydawały mi się zbyt wydajne. Interfejs powinno się stosunkowo łatwo używać i powinien być płynny nawet przy dziesiątkach tysiącach wyników. Myślę, że częściowo mi się to udało zrobić, ale jeśli uważacie że można zrobić to lepiej, to polecam użyć core, tak jak to robi cli, czkawka i krokiet i stworzyć swoją własną wariację gui
- aplikacja obecnie jest wypełniona trybami(11 jeśli się nie mylę) a każdy tryb ma nawet po kilka opcji do konfiguracji. Dość łatwo dodając zbyt dużo opcji jest w stanie się stworzyć nieczytelne gui i kod, który później będzie problematyczny w obsłudze(z takimi problemami głównie mierzyłem się na początku istnienia projektu, gdzie wesoło dodawałem nowe tryby) - nie mówię że to koniec i że nic nowego nie będzie dodawane, tylko że trzeba to robić z rozwagą.

Mimo tych wszystkich problemów, jak wskazuje wydanie nowej wersji, ciągle jeszcze mam siły na pokonywanie przeciwności i zapewne aplikacja będzie się rozwijała swoim spokojnym tempem.

Cena — za darmo to i ocet słodki - licencja MIT/GPL

Repozytorium z kodem - https://github.com/qarmin/czkawka
Pliki do pobrania — https://github.com/qarmin/czkawka/releases

#programowanie
#tworczoscwlasna
51d5d042-f4fc-42fd-8dc0-5a54f417b50d
bojowonastawionaowca

@qarmin poproszę tagi dodać

qarmin

@bojowonastawionaowca Na własną obronę muszę powiedzieć że je na początku wpisałem, ale przy kopiowaniu treści przypadkowo usunąłem

bojowonastawionaowca

@qarmin luzik arbuzik, od tego jestem, żeby przypominać

koszotorobur

@qarmin - super kolego - widzę, że program stabilnie rozwijasz


Widzę też, że aplikacja ma Appimage dla Linuksa - możesz mi napisać jak łatwo/trudno się go generuje z praktycznego punku widzenia bundlując wszystkie dependencies i czy wszystko musi być statycznie skompilowane?

qarmin

@koszotorobur Zazwyczaj robi się to dość trudno, bo trzeba samemu się bawić w znajdowanie zależności.

Gdybym miał to robić ręcznie, to nigdy bym appimage nie dodał, ale całe szczęście jest plugin do gtk4 robiący to w miarę automatycznie.


https://github.com/qarmin/czkawka/blob/db164d3698198dd46653b1c3bb0384f8a9e38fab/.github/workflows/linux_gui.yml#L141-L156


Jest też generowany "minimalny" obraz appimage, który nie ma wbudowanego gtk4 i wciąga zależności z związane z tym z systemu


https://github.com/qarmin/czkawka/blob/db164d3698198dd46653b1c3bb0384f8a9e38fab/.github/workflows/linux_gui.yml#L170-L179


całe szczęście przy nowej aplikacji wszystko co potrzebne jest wbudowane w binarkę i nie trzeba się bawić w to

koszotorobur

@qarmin - ok, super - dzięki za wyjaśnienie i linki

Sam piszę małą aplikację CLI i będę ją dystrybuował w kontenerze OCI (do uruchamianie Dockerem lub Podmanem) - ale jak się rozwinie to może zrobię GUI - dlatego pytam bo się zastanawiam jak dystrybucję aplikacji z GUI ugryźć.

dzek

Najlepsza appka tego typu, choć faktycznie UI ciężkie.


Wyszukiwanie duplikatów obrazów to dla mnie niezła zagadka. Nieraz kompletnie nie jest w stanie złapać, że dwa obrazki są takie same, kombinuje z algorytmami, rozmiarem, tą "tolerancja" czy co tam było, i nieraz pokazuje mi kompletnie już różne obrazki jako to samo, ale to co jest ewidentnie to samo - już nie.


Dałoby się tutaj coś ulepszyć?

qarmin

@dzek Z opisu strzelam, że to może być wina danych exif, które powodują przekręcanie się obrazu a aplikacja ich nie odczytuje, już było to zgłaszane

https://github.com/qarmin/czkawka/issues/586

https://github.com/qarmin/czkawka/issues/1039


Wstępnie mam nawet koncepcję jak to zrobić i ostatnio nawet jedna biblioteka do odczytu tych danych poprawiła błędy które im zgłaszałem, które powinny w tym pomóc.


Oczywiście to by pomogło, jeśli rzeczywiście problemem byłaby rotacja.


Inną problematyczną sprawą są pliki z kanałem alpha, bo obecne algorytmy mają z tym problem.


Jeśli to żaden z powyższych tematów, to bez próbek nie jestem w stanie zgadnąć.

dzek

@qarmin ok, jak wrócę do tematu ogarniania duplikatów i będzie coś ewidetnie nie tak, zgłoszę issue albo napiszę, dzięki za zainteresowanie

Zaloguj się aby komentować