Zdjęcie w tle
qarmin

qarmin

Twórca
  • 32wpisy
  • 54komentarzy
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

Zaloguj się aby komentować

Kojarzycie jakiś program offline który dałby radę naprawić problem z video "moov atom not found" ?

Przywróciłem usunięte filmiki z dysku przy użyciu photorec, jednak część jest uszkodzona/nadpisana i nie da się ich normalnie odczytać. Nie mam pojęcia jaka jest ich rozdzielczość, bitrate lub co jest na nich(dlatego też nie korzystam z programów online)

Próbowałem chyba każdego polecanego mi programu w stylu untrunc, recover_mp4 i tym podobnych, żaden nie dał sobie rady(wydaje mi się że one głównie przesuwają moov z początku/końca na inną pozycję a nie tworzą go od zera).

Z tego co widzę, to moov jest swego rodzaju tablicą zawartości pliku, która pozwala na odczyt mp4 i bez tego się nie da odpalić

#komputery

Zaloguj się aby komentować

Jeśli tak jak ja macie dużą kolekcję filmików(śmiesznych, mało śmiesznych, wcale nie śmiesznych, rodzinnych, z wojny itp.) i chcecie się pozbyć duplikatów to możecie spróbować użyć testowej wersji Czkawki, która wspiera wyszukiwanie podobnych wizualnie filmików o długości mniejszej niż 30 sekund.

Linki zapewne będą aktywne jeszcze około dwóch tygodni (trzeba się zalogować przez githuba by mieć do nich dostęp)
Windows (10+) - https://github.com/qarmin/czkawka/actions/runs/11074556466?pr=1356
Linux (Ubuntu 22.04 lub podobne +) - https://github.com/qarmin/czkawka/actions/runs/11074556469?pr=1356
Mac - https://github.com/qarmin/czkawka/actions/runs/11074659572

#programowanie
#tworczoscwlasna
88fffa99-dc79-493a-8e1a-99893513a9fc

Zaloguj się aby komentować

Zostań Patronem Hejto i odblokuj dodatkowe korzyści tylko dla Patronów

  • Włączona możliwość zarabiania na swoich treściach
  • Całkowity brak reklam na każdym urządzeniu
  • Oznaczenie w postaci rogala , który świadczy o Twoim wsparciu
  • Wcześniejszy dostęp, do wybranych funkcji na Hejto
Zostań Patronem
Jeśli wasze życie jest nudne, lubicie ciekawe i nie pudelkowe dramy to oto i jest kolejna w środowisku Linuxowym

Rozchodzi się o te dwie rzeczy:
- Odejście jednego z deweloperów projektu Rust for Linux
- Wpis Asahi Lina

Zaczynając od pierwszego, wpis o odejściu Wedson Almeida Filho(pracownik Microsoftu) opublikowany został na listach mailingowych linuxa tutaj
https://lore.kernel.org/lkml/[email protected]/

W skrócie pracował prawie 4 lata przy projekcie, ale zraziły go różne nietechniczne problemy które ciągle napotykał
Nawiązuje tam do  https://youtu.be/WiPp9YEBV0Q?t=1529
W tej prezentacji Kent Overstreet stara się przedstawić, w jaki sposób bindingi c->rust powinny generować(lub pomóc generować) kod Rusta, tak by w samym typie zawrzeć tak dużo informacji na temat tego co dana zmienna przechowuje i jak ją używać, by zmniejszyć ryzyko błędów przy jej użytkowaniu. W C te informacje nie są zapisane w kodzie, więc trzeba je ręcznie pomagać rozpoznawać i zapisywać. To zrodziło duże kontrowersje, że zmiana interfejsów w C będzie wymagała też zmian w Rust, a wielu deweloperom nie w smak uczyć się kolejnego języka. Autor kilkukrotnie wspominał, że to nic takiego, bo oni się tym zajmą(stroną rustową) i potrzebują tylko informacji jakie jest zachowanie poszczególnych elementów po stronie C. Jeden gość zaczął więc podniesionym tonem mówić, że jest tu masa deweloperów >50 lat i że ewangeliści Rusta nie zmuszą wszystkich do nauki tego języka.

Inną sytuacją jest wpis Asahi Lina, która współtworzyła kilka subsystemów w Linux używając do tego głównie Rusta, co pomogło przeportować kernel na Mac ARM
Wpis to - https://vt.social/@lina/113045455229442533

Opisuje proces rzucania kłód pod nogi, podczas próby robienia progresu w tworzeniu sterowników pisanych w Rust.
Przy tworzeniu abstrakcji dla planisty DRM znalazła masę problemów, które były spowodowane złym stanem kodu w C i odpowiedzią na to było "rób to tak samo jak w amdgpu, bo im to przecież działa"
Mimo stworzenia patchy z poprawkami, które naprawiały błędy będące również widoczne dla użytkowników C, domyśla się że z racji że pochodzi ona ze świata Rusta, maintainer nie chce ich zaakceptować.
Przez ostatni rok czekała na zmergowanie prostego wrappera dla struktury, więc nie dziwi się że progres Rust for Linux jest raczej mizerny.

Warto przypomnieć, że Linus Torvalds zgodził się kilka lat temu na użycie Rusta obok C i assemblera, by zarówno zwiększyć jakość/stabilność elementów takich jak sterowniki i przyciągnąć młodsze pokolenie, bo widzi problemy ze starzejącą się kadrą.
Ostatnio wspominał, że progres związany z Rustem jest mniejszy niż się spodziewał wyliczając jako jeden z powodów niechęć starszych deweloperów.

Smutne jest to, że istnieją ludzie którzy mają chęć, motywację i umiejętności do tworzenia przydatnych rzeczy lecz są im podcinane skrzydła.

Podsumowaniem może być ten cytat z komentarza Asahi Lina
```
But I get the feeling that some Linux kernel maintainers just don't care about future code quality, or about stability or security any more. They just want to keep their C code and wish us Rust folks would go away. And that's really sad... and isn't helping make Linux better.
```

#programowanie
#jezykc
#rustlang
#linux
197901a4-7fa8-4d7a-966f-ee5c8f3c688a
jimmy_gonzale

Mają płacone za robotę czy pro publico bono?

Zaloguj się aby komentować

Jaki polecacie laptop na domowy serwer?
Mam zamiar głównie przechowywać na nim jakieś głupoty typu domowy nextcloud i od czasu do czasu jakieś dockerowe aplikacje.
Wymagania to - działająca klawiatura, touchpad, bateria(przynajmniej pół godziny), działający ekran(rysy mi nie straszne, bo większość czasu nie będzie potrzebny), łatwość instalacji i dobre wsparcie dla linuxa
Małe wymagania, to i budżet mały - myślę że koło 500zł(szaleństwo, co nie?)

Akurat dzisiaj umarł mi dysk/laptop - Ubuntu 22.04 aktualizowany z 18.04 albo 20.04 i ciągłe błędy na dysku z partycją ext4 - często system montował partycję tylko do odczytu z powodu błędów z systemem plików. Nie chce mi się weryfikować czy to wina laptopa(wiekowego z 2011 roku), dysku czy systemu, więc wymieniam wszystko.

Drugi laptop HP Elitebook 8470p dzisiaj wyciągnąłem z szafy i wyskoczyło info że jest w trybie manufacturer mode, czyli ktoś/coś wyczyściło mu z biosu serial number i kilka innych rzeczy, przez co mogę uruchamiać rzeczy z pendrive, ale nie mogę włączyć systemu z dysku ani wejść do biosu. Próbowałem hirens bootem wgrywać jakieś zmiany prosto do biosu, ale nie pomogło to dużo. Dodatkowo ta wersja posiadała jakąś dziwną wersję uefi, która powodowała problemy z niektórymi wersjami Ubuntu i nie pozwalała ich instalować lub nawet uruchamiać.

Z powodu dziwnych problemów z laptopem della, raczej unikałbym tej firmy, no chyba że coś byłoby godne uwagi.

#laptopy
#linux
ZmiksowanaFretka

@qarmin polecam najlepszy laptop jaki dostaniesz w tej cenie, atakuj poleasingowki

fitter22

@qarmin

Poleasingowy thinkpad - szukaj serii L albo T z najlepszym procesorem jaki znajdziesz. Unikaj ultrabookow, mogą się grzać i mieć gwiżdżący wentylator. Grube = lepsze ;)

Kiedyś miałem L440 z i7-4XXX, może zmieści się w budżecie? Aczkolwiek intel 5gen byłby tu idealnym rozwiązaniem, mniej się grzeją.


Przed zakupem potwierdź, czy ma 1Gbit ethernet i oryginalna ładowarkę.

Po zakupie wyczyść mu porzadnie kiszki i wymień pastę termo. Dobrze powtarzać to co roku.


Ponieważ będzie to sprzęt ok 10 letni, na 100% jego HDD/SSD będzie w drugiej połowie swojego żywota. Może pociągnie rok, może 10 lat. Proponowałbym przemyśleć budżet i wymienić dysk dla świętego spokoju.

Have fun!

Zaloguj się aby komentować

Mija mi tydzień urlopu od programowania w pracy, a ja tymczasem tworzę programy na własny użytek - normalnie świetna metoda na odpoczynek(do pracy pewnie przyjdę bardziej zmęczony niż przed urlopem)

https://streamable.com/s0stha

Pierwszym z nich jest imager(kiedyś o nim pisałem) - https://addons.mozilla.org/en-US/firefox/addon/imager/
Dodałem tam opcję wyciągania wszystkich linków ze strony(działa to w ~90% przypadków) tj. obrazy, filmy czy inne odnośniki.

Potrzebowałem to głównie do cda, by wyszukać w źródłach plik z rozszerzeniem mp4, wgrać potem go na pendrive i podpiąć do telewizora
Dotychczas robiłem to ręcznie co było niepotrzebnie skomplikowane i coś co robiłem zazwyczaj w 10 sekund, zautomatyzowałem tak, że teraz trwa to tylko 2 sekundy a zmarnowałem gdzieś ze 2 godziny na pisanie tego

Drugi program to minimizer - https://crates.io/crates/minimizer
Przy zgłaszaniu błędów w różnych programach tj. ruff czy oxc, moje pliki zazwyczaj są dość duże, przez co autorzy mają problem znaleźć konkretną przyczynę/wyodrębnić problem.
Zrobiłem więc minimizer by w automatyczny sposób zmniejszać rozmiar plików, tak by ciągle program reagował na te pliki(np. by ciągle się wysypywał).
Ostatnio w bibliotece lofty znalazłem plik który przy wczytaniu wysypywał cały program i przy ~3 tysiącach prób, trwających około minut, plik został zmniejszony z ~100KB do 10 bajtów zachowując swoją początkową właściwość - czyli ciągle powodował wyspywanie się programu

Jak wspominałem to narzędzia na użytek wewnętrzny, więc jak chcecie używać to używajcie, ale nie bijcie jak coś nie będzie działało

#programowanie
Catharsis

@qarmin Kiedyś gdy pobierałem dużo filmów z cda i innych stron to zrobiłem coś podobnego tylko zamiast rozszerzenia do przeglądarki to napisałem skrypt do Tampermonkey który dodaje przycisk pobierz pod playerem więc w sumie jeszcze prościej i szybciej.

Btw yt-dlp potrafi pobierać też filmy z cda jak coś.

72f56121-3c19-43ee-a462-a4a9b1222d31

Zaloguj się aby komentować

Potrzebuję propozycji na technologie do stworzenia aplikacji dla backendu na serwer i frontendu na komputery i telefony zlecanej zewnętrznej firmie.

Pomagam przy realizacji koncepcji tworzenia aplikacji(mimo że akurat w powyższych tematach średnio się znam), tak by stworzona aplikacja nie kosztowała krocia, działała i by jej rozwój łatwo można było przerzucić na barki innej firmy.

Zapytania o to były wysłane do różnych firm i najczęściej polecanymi techonogiami jest nodejs na serwer, react/react native/nodejs/vue3 jako frontend dla aplikacji jak i również PWA.

Mały problem jest z tym, że akurat doświadczenie głównie mam w komputerowych aplikacjach, więc nie do końca ogarniam wszystkie plusy i minusy poszczególnych rozwiązań.

W skrócie aplikacja to powinno być kilka/kilkanaście ekranów dobijających się do serwera i tam zapisującymi/odczytującymi dane. Raczej nic zaawansowanego - przynajmniej na tę chwilę.

Co do aplikacji na serwer, to myślę że dużo lepszym pomysłem niż NodeJS jest jakaś aplikacja w rust, która zwłaszcza że z racji bycia niewielką(jedyne zadania to autentykacja i zapis/odczyt danych z bazy) nie powinna powodować problemów z długą kompilacją czy zbytnią złożonością a pozwalałaby na szybszy/prostszy deploy i inne ficzery(oczywiście jako zlecacza aplikacji mnie to niezbyt teraz obchodzi to, ale w przyszłości przy aktualizacji/migracji/problemach z wydajnością to mogłoby sprawiać problemy)

Co do aplikacji na telefony/komputer to optowałbym raczej za użyciem Tauri + ts + svelte, zwłaszcza że Tauri 2 beta umożliwia budowanie aplikacji zarówno na windowsy jak i androida.
Tutaj też zastanawiam się nad aplikacją PWA/zwykłą stroną, jednak boję się o jakieś dziwne ograniczenia typu brak możliwości odczytywania linii papilarnych, czy korzystania ze zwykłych funkcji w telefonie(nie znam się, więc to tylko przypuszczenie).
Raczej nie pchałbym się w React na windowsa i React Native na androida, bo to duplikowałoby kod a wolałbym by był on niemal wspólny na tych dwóch systemach, różniący się jedynie rozmieszczeniem elementów na ekranie, a nie technologią

Jest sens się pchać w te technologie, czy może inne byłyby lepsze?

#programowanie
Catharsis

@qarmin Skoro ogarniasz Rusta to może na front zobacz to, ostatnio mi się obiło o oczy: https://dioxuslabs.com/


A co do backendu to jeżeli to ma być coś małego i z niewielkim ruchem to imo Node.js + jakiś fajny framework (typu Fastify, Nestjs albo Hono) będzie idealny i nie sądze żeby napisanie tego w Rustcie cokolwiek ułatwiło.

lokurva

> aplikacja łatwa do outsourceowania


> rust


wybierz jedno

666

Tauri??


Chopie, kto ci to utrzyma?.


Node.js na serverze, react/next.js na apce webowej ktora bedzie zoptymalizowana na telefony.


Wszedzie JS, technologie ktore zna wiele osob + dosyc latwy stack. Rust jest spoko, ale wez znajdz ogarnietych specjalistow od reki, a w razie jak aktualni programisci zrobia "pa, pa" to szybko ich podmien.


Chociaz przy reactie sie nie upieram bo ostanie zmiany ida w zlym kierunku. Powoli mysle czym zastapic react.

Zaloguj się aby komentować

Ostatnio stworzyłem sobie fuzzer, który znalazł masę problemów w popularnych programach tj. ruff(linter do pythona), oxc(linter do js/ts), lofty(zapisywanie/odczytywanie tagów z plików muzycznych), biome(formatter dla js/ts) i wiele innych

przykłady zgłoszonych issue:


niestety wszystkie znalezione problemy albo zostały naprawione albo czekają na poprawę i nic więcej nie znajduję

Możecie podrzucić jakieś programy, które mógłbym potestować(głównie rust, choć nie tylko)?

Jest jednak kilka prostych ograniczeń.
Program musi:

  • być w miarę popularny - nie chce mi się testować czegoś co tylko 2 aktywnych użytkowników
  • pracować na pojedynczych plikach/grupach plików - np. na wejściu podawany jest plik który ma sprawdzić lub biblioteka powinna prosto umożliwiać stworzenie takiego programu.
  • pozwalać na szybkie iteracje - jedna iteracja programu np. sprawdzenie pliku nie powinno trwać dłużej niż kilka sekund
  • być open-source

#programowanie

Zaloguj się aby komentować

Mam ostatnio problemy z programem, który ubijam poleceniem timeout.

Program wykonuje setki(w zasadzie to grupowo robi 10000) operacji zapisu plików do określonego folderu z wątków rayona(rust) i wygląda na to, że bez względu czy ubijam go sygnałem TERM czy KILL, to nieco później (0-10s) po zabiciu programu, nie mogę usunąć całego folderu z plikami, bo wygląda, że program ciągle w tle tworzy nowe pliki, więc próba usunięcia takiego katalogu przez "rm -rf" wypisuje błąd "rm: cannot remove '/opt/tmp_folder/short_normal_1/16474004021118382402': Directory not empty"

Zatem by rozwiązać problem przerzucam timer końca działania do programu zamiast ubijać program z zewnątrz.

Jednak mam tutaj ponownie zagwozdkę.
Mam dwie koncepcje

Pierwsza to taka, że pierwszy wątek który złapie problem, to przerywa cały program:
fn check_for_exit() {
  if time_left < 0 {
      process::exit(127);
  }
}


files_chunks.into_par_iter().for_each(|| {
   check_for_exit();

   for file in files_chunks {
       fs::copy("file", output_dir);
   }
});

Druga to taka, że czekam aż wszystkie wątki się skończą i dopiero wtedy przerywam wykonywanie programu

fn check_for_exit() -> bool {
  return time_left < 0;
}

files_chunks.into_par_iter().map(|| {
   if check_for_exit() {
       return None;
   }

   for file in files_chunks {
       fs::copy("file", output_dir);
   }

   Some(())
}).while_some().collect<()>();

if check_for_exit() {
   process::exit(127);
}

Niby punkt drugi bezpieczniejszy, ale punkt pierwszy też przecież przecież powinien wszystkie wątki z kopiowaniem plików ubić. Dobrze kminię, czy jednak punkt pierwszy nie jest bezpieczny?

#programowanie
#rustlang
Orzech

@qarmin Nie pisałem dawno w rust, zwłaszcza na tym poziomie, ale zdecydowanie druga opcja. Wydaje mi się, że w pierwszej opcji będziesz miał proces w kolejce do ubicia/ubity, a to co zostanie to będą tzw. detached threads. Ale nie jestem (już) ekspertem, podpytaj może kogoś innego

globalbus

@qarmin a to nie jest kwestia tego, że operacje na plikach robi kernel? Ubicie procesu nie przerywa fs::copy.


Po drugie, obsługa sygnałów nie jest synchroniczna. Jak zrobisz kill PID && rm costam, to na pewno to nie zadziała. Musisz poczekać, aż proces obsłuży sygnał i się zamknie.


Jak robisz timeout na wątkach wewnątrz programu, to z pewnością da się to bardziej elegancko obsłużyć.

lexico

@qarmin Analizując obie koncepcje, które przedstawiłeś, można zauważyć kilka istotnych różnic w sposobie zarządzania zakończeniem wątków i zatrzymaniem programu.

Pierwsza koncepcja


  • Zalety:

  • Każdy wątek sprawdza warunek time_left < 0 przed rozpoczęciem kopiowania.

  • Jeśli warunek jest spełniony, natychmiast wywołuje process::exit(127), co natychmiastowo kończy cały program.

  • Wady:

  • process::exit(127) powoduje natychmiastowe zakończenie programu bez czekania na zakończenie pozostałych wątków. To może skutkować niekompletnym zakończeniem operacji IO, co może być przyczyną problemów z plikami.

  • Możliwe nieprzewidywalne zachowanie, jeśli process::exit(127) jest wywoływane z wielu wątków jednocześnie.


Druga koncepcja


  • Zalety:

  • Sprawdza warunek time_left < 0 przed rozpoczęciem kopiowania w każdym wątku, ale zamiast natychmiastowego zakończenia, wątki, które spełniają warunek, po prostu kończą swoją pracę.

  • Pozwala wszystkim aktywnym wątkom dokończyć swoje operacje kopiowania, zanim program sprawdzi, czy powinien zakończyć się process::exit(127).

  • Bezpieczniejsze podejście, ponieważ nie powoduje natychmiastowego zakończenia programu, co pozwala na bardziej przewidywalne zarządzanie zasobami.

  • Wady:

  • Może powodować krótkie opóźnienie w zakończeniu programu, jeśli trzeba czekać na zakończenie wszystkich wątków.


Wnioski

Druga koncepcja jest bardziej bezpieczna i elegancka, ponieważ pozwala na kontrolowane zakończenie programu i uniknięcie problemów związanych z nieskończonym tworzeniem plików po wywołaniu timeout.

Natychmiastowe zakończenie programu przy użyciu process::exit w pierwszej koncepcji może prowadzić do nieprzewidywalnych problemów związanych z niedokończonymi operacjami IO. W drugiej koncepcji wątki mogą bezpiecznie zakończyć swoje zadania, co zmniejsza ryzyko wystąpienia problemów z plikami i zasobami.

Zatem rekomenduję skorzystanie z drugiej koncepcji. Jeśli jednak decydujesz się na pierwszą koncepcję, warto wprowadzić mechanizm, który upewni się, że wszystkie wątki zakończyły swoją pracę przed zamknięciem programu, aby uniknąć problemów z niekompletnym przetwarzaniem plików.

Zaloguj się aby komentować

Przy dystrybucji programu zauważyliśmy w logach że czasami resty które wysyłamy od razu zwracają błąd.
Wygląda jakby był to problem z połączeniem i brakiem internetu.

Problem w tym, że komunikacja w całości odbywa się wewnątrz urządzenia.
Wcześniej nasłuchiwaliśmy na wszystkie porty(0.0.0.0), ale zmieniliśmy to później na 127.0.0.1 jednak to nie pomogło

Sytuacja czasami trwa nawet 30 sekund i dotyczy kilku różnych programów(w rust, pythonie i C++ więc to raczej nie wina konkretnych implementacji).
Po linuxowych logach systemowych można wywnioskować że może to być związane z odpinaniem/przepinaniem/ruszaniem kabla/gniazda lanu - ale nie jest to w 100% pewne

Da się przed tym jakoś systemowo zabezpieczyć?
Trochę bez sensu, że komunikacja wewnątrz urządzenia jest zależna od nieużywanych interfejsów sieciowych

#programowanie
#linux
brain

W Linux adres 127.0.0.1 i localhost nie są tym samym. Ten pierwszy korzysta z całego stacka sieciowego, więc pakiety są kierowane na kartę sieciową i wracają z powrotem. Z kolei localhost jest w pełni ogarniany przez kernel. Jeżeli jest jakiś problem z kartą to możliwe że uda się go wyeliminować przez zastosowanie localhost.

globalbus

@qarmin sprawdź limity otwartych plików. Socket to też plik

szczekoscisk

Możliwe że mimo komunikacji wewnętrznej używany jest interfejs ethernetowy. Spróbowałbym wymusić ruch lokalny przez interfejs "lo" (LOOPBACK) np. taką komenda:\

ip router add 127.0.0.0/24 dev lo

Zaloguj się aby komentować

Jak zwykle, to nie linuxowcy przekonują największą rzeszę ludzi do Linuxa, tylko sam Microsoft.

Nowa funkcja w Windowsie 11 "Recall", ma dla poprawy korzystania użytkownika z komputera, robić zrzuty ekranu co kilka sekund a następnie skanować je wytrenowanym modelem AI.

Oczywiście wszystko ma odbywać się lokalnie na komputerze bez dostępu do internetu, ale zagrożenie utraty prywatności(dostęp do internetu może być włączony jedną decyzją microsoftu w dowolnym momencie) czy wycieku wrażliwych danych stanie się coraz bardziej powszechne.

Źródło - https://arstechnica.com/gadgets/2024/05/microsofts-new-recall-feature-will-record-everything-you-do-on-your-pc/

#ai
#sztucznainteligencja
#windows
fae0e500-5f02-4be3-8e26-d25bee476a96
Sweet_acc_pr0sa

@qarmin afere krecisz pomijajac to ze


po 1, przeciez juz to robia tylko sie nie chwala

po 2, mozna to wylaczyc

po 3, nie musisz kupowac ich surface

UniCatEnjoyer

Windows 11 to jest w sumie raczysko. Korzystałem z tego systemu od początku i przy każdej większej aktualizacji sobie odpalałem, aby zobaczyć, jak jest ale ten system poza designem nie ma nic ciekawego do zaoferowania. Szkoda, że nie ma fluent design na 10tce, gdzie aplikacje systemowe mają czarny motyw i ogólnie mają poprawiony wygląd. Skalowanie jest zepsute w 11 a sam system wydaje się dziwacznie powolny względem 10, nawet na SSD. Obecnie siedzę na Ubuntu 24.04 LTS i w sumie jestem zadowolony, bo wreszcie Windows i jego nadbudowywanie systemu na systemie potrafi przyprawić o ból głowy.

zgred

Jak korporacje przetwarzające dane niejawne wykryją że Windows sam wysyła coś na zawnetrzne serwery pozwy będą w miliardy. Dlatego zapewne jak będzie to wyłączone to naprawdę nie będzie nic wysyłać.

Zaloguj się aby komentować

Prezentacja nowego środowiska Cosmic na LinuxFest NorthWest 2024

https://www.youtube.com/watch?v=JHLfsWhDvz0

Najłatwiej jest to teraz przetestować na fedorze, korzystając z https://copr.fedorainfracloud.org/coprs/ryanabx/cosmic-epoch/

#linux
#cosmic
Roark

Wygląda trochę jak nieślubne dziecko Windy i Maczka, obrzydliwe 😛

Pozostanę przy KDE.

30ohm

Ciekawe jak długo pożyje, większość takich projektów tak samo się kończy. Wow wow, jak pięknie, 2 lata i martwy albo się kończy tylko na gadaniu.

f27669be-9f9a-490b-a7e5-e7129ee6c484
Yossarian

Po co? Że tak spytam?


Nie wydaje mi się, żeby problem Linuxa była zbyt mała ilość środowisk i dystrybucji.

Zaloguj się aby komentować

Jak często korzystacie z testów jednostkowych w swoich projektach?

Języków znam kilka, ale głównie z testami jednostkowymi miałem styczność jedynie w Pythonie i Rust.

W pythonie widzę że czasami niektóre repozytoria chwalą się coverage sięgającym niemal 100%.
W przypadku Rusta, ilość testów jest powiedzmy szczerze dosć ograniczona.

Mimo że uważam testy jednostkowe ogólnie za coś bardzo dobrego, to jednak bliżej mi do ich pisania tam gdzie niezbędne a nie dopychania ich na ilość.

W Rust, widzę że głównie pisze się testy do funkcji bez skutków ubocznych, czyli wrzucamy cos do środka i oczekujemy określonego wyniku(choć oczywiście są wyjątki).

W Pythonie jednak widzę że testuje się absolutnie wszystko, a to za sprawą że można zmockować niemal wszystko.
Trzeba dodać coverage do funkcji z pobieraniem informacji z bazy danych?
Nie ma sprawy, mockujemy połączenie i testujemy zwracanie wyjątku, losowych czy pustych danych.

Niby fajnie, ale jednak z tego co widzę to wydaje mi się że czasami takie funkcje testują bardziej to czy kod jest poprawnie zamokowany a nie samą logikę funkcji i są robione jako sztuka dla sztuki(lub po to by podbić coverage).
Często widzę że też takimi testami próbuje się testować, co się stanie jeśli typy nie są poprawne, coś co niemal nie występuje w językach silnie typowanych typu Rust lub C++, bo już kompilator odrzuca sporą część niepoprawnego kodu.

Jakie są wasze opinie o dużym coverage w zależności od języka dla którego testy są pisane?

#programowanie
93e396ff-4cb9-4db2-8fb0-c72988849d72

W jakie wartości co do testów jednostkowych celujecie w swoich projektach?

123 Głosów
epsilon_eridani

@qarmin koledzy zdaję się wyczerpali temat, ja tez stoje po stronie pisania testów, od siebie jeszcze dodam, że testy naturalnie tworzą dokumentację projektu. Najłatwiej jest sprawdzić jak się zachowuje komponent za pomocą testów i najlepiej naprawić buga najpierw pisząc test do przypadku.

PanPaweuDrugi

@qarmin ja bym przede wszystkim chciał podkreślić, że testy jednostkowe to głównie narzędzie służące do projektowania, wymuszające stosowanie dobrych praktyk. W sumie czyste unit testy mają sens przede wszystkim w TDD, jeśli piszemy je później niż kod, to sens ich pisania jest dyskusyjny. Dobrze się natomiast sprawdzają w roli żywej dokumentacji. To testy integracyjne powinny służyć do wykrywania regresji, tych można stworzyć zdecydowanie mniej, za to każdy powinien mieć wielokrotnie większe pokrycie kodu. W praktyce, jeśli zespół nie stosuje TDD, to właśnie na takim rodzaju testów warto się skupić.


Pracuję przy takim projekcie w node, gdzie ktoś sprytny testuje timery bez użycia mocków, test po prostu czeka aż te timery odczekają swoje, nic mnie tak nie wkurwia jak odpalanie testów w tym projekcie xD.

Flaaj

po pracy w januszexie-startupie, gdzie nigdy nie bylo czasu na testy, nauczyłem się, jaką mają wartość. Zawsze na koniec projektu przy małej zmianie koncepcji ze strony klienta, caly kod sie zaczynał się jebać, bo choćby nie wiem co, nie jesteś w stanie zawsze mieć w głowie całego projektu.


Odkąd odszedłem z tej firmy, zacząłem robić wszystko uzywając TDD. Bez TDD twój kod = gówno. Choćby nie wiadomo jak czytelny i sprytny, bez dobrych testów nie jest niczego warty.

Zaloguj się aby komentować

Wygląda, że Rust ma swoje 5 minut, na scenie języków programowania i jest znany ze swojej wydajności bliskiej C/C++.

Zatem w jaki sposób nowy język mógłby uszczknąć nieco popularności od Rusta? Ano poprzez twierdzenie że jest on szybszy o 50% od niego w jednym z benchmarków.

Tym językiem jest Mojo
Być może się zastanawiacie, czemu dodałem tutaj tam emotkę ognia - ano bo tak się ten język nazywa - serio w nazwie takie coś mają, sprawdźcie sami.

W skrócie jest to język przeznaczony do AI, interoperacyjności z Pythonem, przy zachowaniu jego prostoty i wydajności porównywalnej lub większej niż Rusta.
Brzmi dobrze... aż za dobrze.

Zatem blog o wyczynach wydajnościowych jest widoczny tutaj - https://www.modular.com/blog/mojo-vs-rust-is-mojo-faster-than-rust

Już na samym początku pada ciekawe stwierdzenie

There are a lot of considerations surrounding any benchmark implementation, you can't use any one benchmark to say x language is faster than y language

a następnie widzimy jak to właśnie tym benchmarkiem chcą udowodnić

Widać potem opis kilku elementów, które twórcy uważają że są one powodem tej lepszej wydajności(całkiem logiczne w większości btw.) tj. pożyczanie wartości zamiast jej kopiowania, TCO czy dobre wsparcie dla simd, oraz ostatecznie owy benchmark.

Na tym ta historia mogłaby się zakończyć, gdy oczywiście nie jakiś wścibski programista, który chciał przetestować ową wydajność.

https://viralinstruction.com/posts/mojo/#matching_the_implementation_in_julia

Odkrył on, że kod w Mojo , robi mniej walidacji niż testowane programy.
Przy wybranej większej ilości optymalizacji, kod w Rust czasowo niemal zrównał się z tym z Mojo , a program napisany w języku Julia, oba mocno wyprzedził.

Wygląda, że Mojo jest ciekawym projektem, którego rozwój warto mieć na oku, ale jego zamknięty kod, masa błędów(ciągle jest w fazie alpha) czy szukanie taniej sensacji przy naginaniu reguł, pozostawia niesmak i obawy o rzeczywiste działanie w przyszłości.

#rustlang
#mojo
#programowanie
5b70296d-faa6-4d90-a582-f7a883032f12
kodyak

Żeby język mógł zaistnieć musi mieć przede wszystkich ogromną bibliotekę. Rust jest jeszcze w fazie gdzie się mnóstwo tworzy, a same staty wiosny nie czynia. Choć już czytałem że hype na ten język się trochę wypalil.

rayros

Piszę w rust pare miesięcy i uważam że to jest naprawdę dobry język w porównaniu do Java, typescript czy c lub c++

vinclav

RUST is not a dust. Bardzo lubię ten język, już wiem, że warto.

Zaloguj się aby komentować

Od prawie roku korzystam z AI(chatgpt i github copilot) do pomocy przy programowaniu i muszę przyznać że potwornie się mi te narzędzia przydają i znacznie przyspieszyło mi to niektóre czynności.

W moim przypadku działa to świetnie do:

  • Tworzenia funkcji mapujacych obiekt z jednej klasy do drugiej(np. From/TryFrom w Rust)
  • Dopisywania logiki w prostszych funkcjach - czasami wystarczy wpisać nazwę funkcji, argumenty i zwracany typ, by cała logika którą oczekiwałem była wpisana do środka
  • Podpowiadaniu w jaki sposób używać danej biblioteki - zdarza się, że mimo przeczytania dokumentacji, nie mam pomysłu w jaki sposób użyć danej funkcji i zwykle podpowiedzi nawet nie do końca trafne, kierują mnie na właściwe rozwiązanie (pomogło mi to przy bibliotece diesel, która jest trudna do opanowania)

dzięki temu, zamiast żmudnego kopiowania i wklejania czy też tworzenia mniej wymagających funkcji, mogę skupić się na bardziej wymagających zadaniach.

Jednak zauważyłem, że pod niektórymi wątkami na reddicie i innych forach, jest spora rzesza osób, które z ai wcale nie korzystają(nie dlatego że nie wiedzą, ale bo nie chcą korzystać).

Jednym z argumentów, jest kwestia etyczna, bo kod nauczony przez ai nie jest w żaden sposób sprawdzany pod kątem licencji oryginalnego kodu.

Inny argument to kwestia tego, że więcej szkodzi(lub bierze więcej czasu niż jakby pisać to wszystko ręcznie) niż pomaga - akurat w moim przypadku argument chybiony.

Jakie są wasze argumenty za/przeciw?

#programowanie
#ai
#sztucznainteligencja
588d911b-9f78-4179-b25b-9e344a333646

Czy korzystacie z AI przy programowaniu?

558 Głosów
ChilledMimosa

Obydwa nadają się do trywialnych i prostych zadań. Niech dla przykładu zaproponuje Ci rozwiązanie problemu, gdy mając jakąś starą aplikację w Javie (choćby 7 i starsze) musisz zacząć obsługiwać TLSv1.2. Skończysz na przepisywaniu aplikacji lub tysiącu propozycji, z których żadna nie zadziała.

pluszowy_zergling

Dopiero się z tym ogarniam, wiele prostych podpowiedzi jest spoko, niestety jak już trzeba coś na poważnie skonfigurować to sugestie AI są - delikatnie mówiąc - z pupy.

pepe_delfin

U mnie niestety przydatne tylko do wskazania ogólnego kierunku - w narzędziu z którym pracuję najczęściej kod napisany przez chatGPT po prostu nie działa. Za dużo halucynacji, wymyśla biblioteki które nie istnieją, wrzuca nieaktualne biblioteki albo takie które nie są wspierane w wykorzystywanej przeze mnie wersji tylko następnej, albo podaje kod który zwyczajnie nie zadziała bo korzysta ze słów kluczowych czy funkcji które nie istnieją. Często też podaje użycie funkcji w sposób w który nie da się z nich skorzystać (np totalnie złe argumenty). A czasami zapytany o stworzenie jakiejś logiki zwraca deklarację funkcji z jej nazwą i komentarzem - dopisz sobie resztę xD

Szkoda bo narzędzie jako takie bardzo przydatne, ale najwyraźniej moje środowisko pracy zbyt mało popularne żeby umiał sobie z nim poradzić.

Zaloguj się aby komentować

W pracy, udało nam się przepisać celery z Pythona na nasz własny menedżer tasków w Rust.
Wydajność jest zauważalnie lepsza, bo korzystamy ze starych komponentów i tam różnice są o wiele bardziej widoczne, niż na zwykłym komputerze, gdzie oba rozwiązania przetwarzają zadania niemal natychmiast.

Zatem mamy część z kodem w Rust, ale ciągle część z obliczeń musimy wykonać w pojedynczym procesie pythona do którego wysyłamy resty z zapytaniami.
Jednak celery miało jeden duży plus - uruchamiało się jako osobne procesy(co wydłużało o kilka sekund proces uruchamiania programu), dzięki czemu operacje numpy/scipy na CPU, były ładnie rozdzielane po stronie pythona na wszystkie wątki(na urządzeniu są 4 rdzenie i tyle samo procesów celery było uruchamianych)

Operacje obliczania statystyk(mowa o powyższym zadaniu korzystającym z numpy/scipy) są często zlecane w większej ilości na raz, dlatego ważne jest by to zrównoleglić.
Próbowałem robić to przez proste rozdzielanie tasków na wiele wątków, jednak, czasy bywały nawet czasami gorsze, niż jak robiłem to w jednym wątku - domyślam się że to wina GIL i tego że nie działa zbytnio dobrze, gdy wątki wykonują masę rzeczy na cpu.
Drugim problemem jest to że w przypadku równoległych działań wyskakują dziwne ostrzeżenia, przez co myślę że np. matplotlib, nie jest przystosowany do działania z wielu wątków(mimo że zadania które wykonuję od początku do końca działają tylko w jednym wątku), bo przechowuje globalnie jakieś parametry ze swoim stanem.

Kojarzycie, w jaki sposób, mógłbym w miarę prosto, móc wykonywać te obliczenia po stronie pythona na wielu wątkach?
#python
markxvyarov

@qarmin jest standardowy moduł w Pythonie, nazywa się multiprocessing. W nim znajdziesz Pool i metody typu starmap i map. Najczęściej z tego korzystam gdy trzeba zrównoległość obliczenia.


https://superfastpython.com/multiprocessing-pool-map/

# SuperFastPython.com

# example of parallel map() with the process pool

from random import random

from time import sleep

from multiprocessing.pool import Pool

# task executed in a worker process

def task(identifier):

    # generate a value

    value = random()

    # report a message

    print(f'Task {identifier} executing with {value}', flush=True)

    # block for a moment

    sleep(value)

    # return the generated value

    return value

# protect the entry point

if __name__ == '__main__':

    # create and configure the process pool

    with Pool() as pool:

        # execute tasks in order

        for result in pool.map(task, range(10)):

            print(f'Got result: {result}', flush=True)

    # process pool is closed automatically


Na zamieszczonym zdjęciu znajdziesz wszystkie metody z klasy Pool które możesz wykorzystać.

eaab2cd3-50c4-480c-aa4f-b776373b7c0f

Zaloguj się aby komentować

Nie tak dawno temu dokonałem czegoś niemożliwego - znalazłem błąd który był w obcej bibliotece, a nie w moim kodzie.

Na jednym ze starych armów których używamy, odkryliśmy bład w pythonowym programie, gdzie podczas testowania punktów poza okręgiem o promieniu 30, niekiedy wartości wyskakiwały poza skalę.

W okręgu r<30 mamy ~60 punktów z wartościami, które im dalej od środka, tym bardziej się powinny zmniejszać. Dla punktów spoza okręgu r>30 musimy to ekstrapolować, bo do nich danych nie mamy.

Lokalnie na komputerze wszystko mi działało, choć metoda ekstrapolacji wartości RBFInterpolator(korzystamy ze starszej wersji scipy - nie możemy jej niestety łatwo podnieść na urządzeniu, by przetestować czy została naprawiona) dawała nieco niepoprawne i zawyżone wyniki.

Dla pewności ujednoliciłem wersje wszystkich pakietów(głównie zależności pośrednich, bo główne zależności były w tej samej wersji) pomiędzy urządzeniem i komputerem, jednak nie przyniosło to żadnej poprawy.

Przełożony na wieść że nie występuje problem lokalnie, zasugerował bym upewnił się że wszystko lokalnie sprawdzam z tymi samymi parametrami co na urządzeniu. Niezbyt wziął pod uwagę moje wątpliwości co do tego, że może jest to wina biblioteki - szczerze mówiąc się mu nie dziwię, bo z jego strony nie wyglądało to zbyt dobrze - gościu tylko od roku programujacy mówi że być może to nie jego wina i problem może występować w jednej z najpopularniejszych bibliotek pythona i w issues na githubie nie było nawet jednego podobnego wątku.

Ostatecznie udało mi się zilustrować wartości w siatce w kwadracie (od -100 do 100) przy użyciu matplotlib, gdzie widoczne było że na komputerze wartości w miarę regularnie zmniejszają w miarę oddalania od środka. W przypadku urządzenia ARM, wartości promieniście odchodzące z kątów 0,90,180,270 stopni poza okręgiem(r>30), są wybite poza wszelkie granice.

Wygląda więc że w przyszłości będziemy musieli, zainstalować na produkcyjnym sprzęcie pytest, by sprawdzić czy wszystko działa tak jak powinno na armowym urządzeniu, skoro nikomu już nie można wierzyć.

#python
#programowanie
b48a7301-09cf-499d-ab8f-77e27bef38f0
ZohanTSW

Niesamowite że ktoś pomyślał że może z tym nie być problemu - zawsze powinno się budować, uruchamiać testy na docelowym sprzęcie (przecież tam będzie to wszystko działać na nie na kompie programisty lol). Dobrym pomysłem jest nawet redundancja, macie joba który uruchomi testy na x86_64 i joba na ARM, oba muszą przejść. Gdybyście kompilowali, to również im więcej kompilatorów tym lepiej. W embedded trzeba spodziewać się niespodziewanego.

A już totalną ignorancją okazali się prowadzący ten projekt jeśli uruchamiacie testy na 64 bitowej platformie, a docelową platformą jest 32 bitowy ARM

Ilirian

Najgorzej jak znajdziesz buga w Firefoxie i okazuje się że podobny błąd został zgłoszony w 2006 roku i od 18 lat toczy się pod nim dyskusja. Co jakiś czas ktoś pyta kiedy to będzie naprawione, następnie ktoś z mozilli odpowiada że nad tym pracuje by za dwa lata znowu dostać pytanie o postępy xD


Zauważyłem np że firefox na androidzie bardzo często odświeża strony po powrocie do niego, tak jakby od razu po przeskoczeniu do innej apki czyścił dane strony z pamięci. Oczywiście zgłoszony bug wisi od paru lat w backlogu bo niby ważny błąd ale jakoś tak nie umieją go odtworzyć


(sorki za offtop xD)

sadamasin

Używacie biblioteki scipy i się dziwicie… zaciągnijcie normalnie z github a nie z jakiejś cipy…

Zaloguj się aby komentować

Ostatnio pobrałem sobie kilkadziesiąt gigabajtów plików muzycznych od różnych artystów którzy w przeszłości stworzyli piosenki które mi się podobały(poprzez deezer).

Chcę teraz je przefiltrować i usunąć te które mi się nie podobają. Zwykle słucham ich podczas pracy i gdy trafię na problematyczny plik to go usuwam, jednak nie zawsze mogę się od pracy oderwać i to zrobić, więc nie jest to w 100% ani nawet 75% skuteczne.

Zatem pomyślałem czy może nie dałoby się posortować muzyki według gatunku bazując na jej zawartości, bo wtedy np. mógłbym po prostu folder z rapem po prostu usunąć, po szybkim przeglądnięciu po kolei każdego pliku.

Kojarzycie jakiś program, który lokalnie nawet w kilka/kilkanaście godzin pogrupować pliki?

#muzyka
em-te

@qarmin bez tagów ID3v1/2 ?

Zaloguj się aby komentować

Po latach stagnacji na rynku środowisk graficznych na Linuxa, wygląda że w końcu mamy szansę na powiew świeżości zarówno pod względem graficznym(tutaj bez szału) jak i technologicznym(to mnie bardziej ciekawi)

PopOS Cosmic, to napisane w całości od zera środowisko graficzne na Linuxa, w całości przy użyciu języka Rust(no w sumie nie od zera, i jak sami autorzy określili, po prostu zabrali paczki z bibliotekami, trochę je podrasowali i złożyli) i według mnie to jest najbardziej ciekawe.

Dotychczas niemal wszystkie główne środowiska korzystały z Gtk/Qt, które miało swoje gorsze(np. to że pluginy były napisane w js, więc środowisko musiało mieć wbudowany cały interpreter js) jak i lepsze np. stosunkowo dobra stabilność i wiele funkcji.

Cosmic korzysta z biblioteki graficznej iced, w której gui tworzy się przy pomocy zwykłego kodu, który wkompiowuje się w plik binarny(akurat dla mnie, ograniczenie tworzenie gui z kodu rusta, jest minusem, bo przy każdej zmianie trzeba czekać kilka sekund aż program się przekompiluje)

W pakiecie jest dostępne też kilka podstawowych programów tj. sklep, edytor tekstu, menedżer plików, ale ciągle są one w trakcie tworzenia(obecna wersja to pre-alpha, wersja alpha powinna być dostępna do testów w przeciągu kilku tygodni)

Sam już próbowałem z miesiąc temu tego na fedorze(dla ciekawych - https://copr.fedorainfracloud.org/coprs/ryanabx/cosmic-epoch/ ) i mimo że brakowało masy opcji, to całkiem normalnie mi się używało tego środowiska.

Blog z ostatniej aktualizacji - https://blog.system76.com/post/hammering-out-cosmic-features

#linux
#popos
#rustlang
df1bf4b1-2f7c-421a-808b-db3adcc64c39
VonTrupka

lata stagnacji?

z linuksem to mi się już tylko kojarzy kilkaset dystrybucji i kilkanaście menedżerów okien.

Wszystko w permanentnych wersjach rozwojowych, w których najwięcej rozwijających się rzeczy to błędy.

Żadnej stabilizacji, nic pewnego poza płatnymi dystrybucjami typu rhel.


Rok temu rozważałem odejście z windowsa, ale odpuściłem bo już wybranie właściwej dystrybucji dla mnie było twardym orzechem do zgryzienia. A w trakcie tego pojawiła się kolejna zagwozdka: jakie X?


I tak minął kolejny huczny rok linuksa (☞ ゚ ∀ ゚)☞


Aby jednak było jasne, nie mam nic przeciwko nowym inicjatywom w oprogramowaniu.

Za to mam wszystko do kolejnych odłamów oprogramowania ( ͡° ͟ʖ ͡°)

dotevo

Jestem dinozaurem. Dobre środowiska graficzne skończyly się na KDE 3.X

Zaloguj się aby komentować

Korzystał ktoś z samby(libsmbclient) z wielu wątków?

Chciałem w każdym uruchomionym wątku, stworzyć sobie klienta łączącego się z serwerem, przesyłającego jakieś kilku megabajtowe pliki a na końcu zamykający połączenie.

Jednak zauważyłem że wywoływanie smbc_new_context z wielu wątków jednocześnie, powoduje problemy z pamięcią i wysypywanie się programu a nie znalazłem innej metody na łączenie się z serwerem i przesyłanie danych.

Próbowałem grzebać w bindingach które używamy, ale nie udało mi się nic zdziałać - issue https://github.com/veeso/pavao/issues/17

Obecnie w programie dodaję globalnego locka na operacje i tylko jedna na raz może się wykonywać.

Czy samba jest ograniczona do działania tylko w jednym watku w programie, czy może to błąd nakładki której używam, czy może istnieje jakaś opcja do uruchomienia wsparcia wielu wątków?

#samba
#jezykc
#programowanie
koszotorobur

@qarmin - ale do przesyłania plików weź ty użyj czegoś normalnego jak scp, rsync, robocopy, gołe SSH, sftp a nawet ftp(s).

Zaloguj się aby komentować

Następna