Patrząc tylko na ten przykład, wygląda to całkiem sensownie.
Nie jestem jednak przekonany, czy to będzie się dobrze skalować w przypadku bardziej złożonych aplikacji.
Wszystkie typy komunikatów są zdefiniowane w jednym złożonym enumie. Tutaj nie wygląda to jeszcze źle, ale domyślam się, że w dużych aplikacjach mogą występować tysiące typów komunikatu. To też pewnie generuje spory narzut (bo rozmiar obiektu jest determinowany przez największy wariant enuma).
Kod widgetów jak dla mnie jest niezbyt przejrzysty.
Musiałbym pewnie posiedzieć kilka godzin nad przykładami, zanim byłbym w stanie coś takiego napisać.
Generalnie wychodzą w tym projekcie typowe wady i zalety Rusta. :-)
Moim zdaniem to nie jest optymalny język do pisania UI (ani generalnie jakichkolwiek aplikacji w których model jest dynamicznym grafem obiektów).
Iced po prostu sprytnie obchodzi te ograniczenia poprzez zdefiniowanie modelu jako singletona z operacjami definiowanymi w klonowalnych komunikatach.
Dziękuję za ciężką pracę nad oceną tej biblioteki.
To co nazywasz wadami, wydaje mi się preferencją twórcy tego kodu. Niektórzy tak lubią, bo widziałem takie rzeczy w WinAPI. Nie widzę w źródłach by wielki model był jedynym wyjściem. Każdy element może mieć swój model i swój enum. Dopiero jakaś interakcja pozwala współdzielić typy. Dla niektórych ważniejsza może być łatwa komunikacja niż silny podział.
Mnie bardziej martwiła magia. Bo nie wiadomo do końca co się dzieje w view.
Dla mnie brzydszy przykład był w pick_list. Gdzie ktoś rozłożył jedną rzecz w 3 miejscach w kodzie. Więc dodanie opcji nie musi być fajnym wyzwaniem. Gdzieś widziałem podobny problem, który ktoś rozwiązywał makrami.
Nie wiem po co zastosowałeś argumenty o skalowaniu i pracy w zespole. Masz jakieś flashbacki?
Czy React się skaluje? Czy Flutter się skaluje? Czy rozwiązali problemy o których wspominał pan z Adb?
Ten przykład z listą wyboru fajnie demonstruje narzut objętościowy względem klasycznych frameworków.
Przecież to jest zwykły combobox ze statyczną listą wartości. Konwersja tych wariantów do stringów to czysty boilerplate do załatwienia makrem.
Nie jestem programistą UI. Nie wiem na ile skaluje się React czy Flutter. Domyślam się, że nie ma z tym większego problemu, bo duże firmy robią w tych technologiach złożone aplikacje.
Duże firmy nie są autorytetem. Byłyby gdyby istniała zasada, że kapitał generuje optymalne rozwiązania. Albo jeśli konsumenci by takie wybierali i konkurencyjnie takie wygrywały. A jest wręcz przeciwnie. Opłacają się dość specyficzne rozwiązania. Optymalne są tworzone raczej przez utalentowane jednostki. Oto poszlaki.
spoiler
Ktoś kiedyś napisał:
“Czasami myślę, że największą tajemnicą w tej branży jest to, że 2 osoby mogą wyprodukować więcej niż nawet największe firmy. Jedyną rzeczą, która zapewnia bezpieczeństwo pracy wszystkich, jest to, że nikt nie może dokładnie zidentyfikować, które 2 osoby.”
Odnośnie spoilera - myślę, że dużym firmom niespecjalnie zależy na retencji takich utalentowanych osób. Taniej jest stworzyć środowisko/kulturę pracy, która pozwala przeciętnym pracownikom dostarczyć akceptowalny kod.
To wymaga stworzenia szeregu procedur, które dla eksperta byłyby jak kula u nogi.
Pamiętam akcję w jednym z projektów. Przeznaczenie produktu powodowało, że kluczowym czynnikiem było szybkie uzyskanie odpowiedzi z serwera.
Połączenie musiało być jednak zabezpieczone, więc programiści wymyślili swój własny sposób szyfrowania/uwierzytelniania.
Po jakimś czasie okazało się, że projekt kiepsko się skaluje. Zacząłem analizować, jaka jest przyczyna i oczywiście okazało się, że problem jest ten mechanizm szyfrujący.
Poszedłem z tym do kierownika i spytałem, czemu nie użyć jakiejś gotowej, sprawdzonej biblioteki.
Dostałem odpowiedź, że pełna kryptografia z certyfikatami będzie jeszcze wolniejsza.
Ta teoria śmierdziała mi na kilometr, więc napisalem przez jeden weekend prototyp na najzwyklejszym TLS 1.3 z OpenSSLa i uzyskałem kilkanaście razy lepszą wydajność.
Oczywiście wiedziałem, że nie zostanie to nigdy wdrożone do projektu, ale miło było widzieć zdziwienie na twarzy kierownika, jak zobaczył wydajność nawiązywania połączeń.
Firmy oferują często przestarzałe produkty, które kompetentny 2-3 osobowy zespół mógłby w kilka miesięcy przepisać do znacznie lepszej postaci. Problem w tym, że wymagałoby to wyciągnięcia odpowiednich osób z kieratu i przekazania im sporej autonomii, co jest nie do pomyślenia dla większości kadry kierowniczej.
Odnośnie skalowalności frameworku, istotnym kryterium jest moim zdaniem to, czy kilkanaście zespołów może jednocześnie wprowadzać zmiany w tej samej aplikacji utrzymując jedynie minimalną komunikację.
Wydaje mi się, że założenia przyjęte przez Iced mogą to komplikować.
No i sam dostarczyłeś anegdoty, że kapitał nie wygenerował optymalnego rozwiązania. Ty w zaciszu stworzyłeś lepsze. Lepsze przegrało konfrontację z zastanym. Gdzie z matko popełniliśmy błąd?
Nie wiem czy chciałbym używać aplikacji w której kilkanaście zespołów dokłada coś od siebie do GUI. To przypomina raczej największe porażki FLOSS w których nie wiadomo gdzie wcisnąć kolejną opcję. Nawet pan z Adbe mówił, że zajmuje się tym jedna osoba. Potem pojawia się taki hit jak Procreate z minimalnym interfejsem, wręcz analogową obsługą i wszyscy są zachwyceni. Jego zespół to początkowo cztery, a po dziesięciu latach czterdzieści osób.
Nie zamierzam używać Iced. Raczej lubię analizować ciekawe API. Zdziwiłeś mnie tym kryterium skalowalności.
Nie wiem czy chciałbym używać aplikacji w której kilkanaście zespołów dokłada coś od siebie do GUI.
Nie używasz Windows / Office?
Nawet pan z Adbe mówił, że zajmuje się tym jedna osoba.
Zajmuje się tym jedna osoba w zespole, ale samych zespołów jest wiele. W każdym z nich jest ~20 programistów.
Podejrzewam, ze dzisiaj pracowników może być jeszcze więcej (albo było, przed falą zwolnień).
Wydaje mi się, że cała dyskusja wynika z tego jak sobie wyobrażamy takie zespoły. Nie wiem czy widziałem jakiś dobry. Zawsze to jakiś kompromis wynikający z różnych nadmiernych specjalizacji.
Zauważ, że świat odszedł od wizualnego układania GUI. Potem od jakiś specjalistycznych języków do GUI. Teraz skupia się na tym, że można robić GUI za pomocą języka w którym piszesz aplikację.
Patrząc tylko na ten przykład, wygląda to całkiem sensownie.
Nie jestem jednak przekonany, czy to będzie się dobrze skalować w przypadku bardziej złożonych aplikacji.
Popatrzyłem na kod prostego klienta IRC i wydaje się on potwierdzać moje obawy.
Generalnie wychodzą w tym projekcie typowe wady i zalety Rusta. :-)
Moim zdaniem to nie jest optymalny język do pisania UI (ani generalnie jakichkolwiek aplikacji w których model jest dynamicznym grafem obiektów).
Iced po prostu sprytnie obchodzi te ograniczenia poprzez zdefiniowanie modelu jako singletona z operacjami definiowanymi w klonowalnych komunikatach.
Dziękuję za ciężką pracę nad oceną tej biblioteki.
To co nazywasz wadami, wydaje mi się preferencją twórcy tego kodu. Niektórzy tak lubią, bo widziałem takie rzeczy w WinAPI. Nie widzę w źródłach by wielki model był jedynym wyjściem. Każdy element może mieć swój model i swój enum. Dopiero jakaś interakcja pozwala współdzielić typy. Dla niektórych ważniejsza może być łatwa komunikacja niż silny podział.
Mnie bardziej martwiła magia. Bo nie wiadomo do końca co się dzieje w view.
Dla mnie brzydszy przykład był w pick_list. Gdzie ktoś rozłożył jedną rzecz w 3 miejscach w kodzie. Więc dodanie opcji nie musi być fajnym wyzwaniem. Gdzieś widziałem podobny problem, który ktoś rozwiązywał makrami.
Nie wiem po co zastosowałeś argumenty o skalowaniu i pracy w zespole. Masz jakieś flashbacki? Czy React się skaluje? Czy Flutter się skaluje? Czy rozwiązali problemy o których wspominał pan z Adb?
Ten przykład z listą wyboru fajnie demonstruje narzut objętościowy względem klasycznych frameworków.
Przecież to jest zwykły combobox ze statyczną listą wartości. Konwersja tych wariantów do stringów to czysty boilerplate do załatwienia makrem.
Nie jestem programistą UI. Nie wiem na ile skaluje się React czy Flutter. Domyślam się, że nie ma z tym większego problemu, bo duże firmy robią w tych technologiach złożone aplikacje.
Iced opiera się na podobnych zasadach do React.
Duże firmy nie są autorytetem. Byłyby gdyby istniała zasada, że kapitał generuje optymalne rozwiązania. Albo jeśli konsumenci by takie wybierali i konkurencyjnie takie wygrywały. A jest wręcz przeciwnie. Opłacają się dość specyficzne rozwiązania. Optymalne są tworzone raczej przez utalentowane jednostki. Oto poszlaki.
spoiler
Ktoś kiedyś napisał:
Odnośnie spoilera - myślę, że dużym firmom niespecjalnie zależy na retencji takich utalentowanych osób. Taniej jest stworzyć środowisko/kulturę pracy, która pozwala przeciętnym pracownikom dostarczyć akceptowalny kod.
To wymaga stworzenia szeregu procedur, które dla eksperta byłyby jak kula u nogi.
Pamiętam akcję w jednym z projektów. Przeznaczenie produktu powodowało, że kluczowym czynnikiem było szybkie uzyskanie odpowiedzi z serwera.
Połączenie musiało być jednak zabezpieczone, więc programiści wymyślili swój własny sposób szyfrowania/uwierzytelniania.
Po jakimś czasie okazało się, że projekt kiepsko się skaluje. Zacząłem analizować, jaka jest przyczyna i oczywiście okazało się, że problem jest ten mechanizm szyfrujący.
Poszedłem z tym do kierownika i spytałem, czemu nie użyć jakiejś gotowej, sprawdzonej biblioteki.
Dostałem odpowiedź, że pełna kryptografia z certyfikatami będzie jeszcze wolniejsza.
Ta teoria śmierdziała mi na kilometr, więc napisalem przez jeden weekend prototyp na najzwyklejszym TLS 1.3 z OpenSSLa i uzyskałem kilkanaście razy lepszą wydajność.
Oczywiście wiedziałem, że nie zostanie to nigdy wdrożone do projektu, ale miło było widzieć zdziwienie na twarzy kierownika, jak zobaczył wydajność nawiązywania połączeń.
Firmy oferują często przestarzałe produkty, które kompetentny 2-3 osobowy zespół mógłby w kilka miesięcy przepisać do znacznie lepszej postaci. Problem w tym, że wymagałoby to wyciągnięcia odpowiednich osób z kieratu i przekazania im sporej autonomii, co jest nie do pomyślenia dla większości kadry kierowniczej.
Odnośnie skalowalności frameworku, istotnym kryterium jest moim zdaniem to, czy kilkanaście zespołów może jednocześnie wprowadzać zmiany w tej samej aplikacji utrzymując jedynie minimalną komunikację.
Wydaje mi się, że założenia przyjęte przez Iced mogą to komplikować.
No i sam dostarczyłeś anegdoty, że kapitał nie wygenerował optymalnego rozwiązania. Ty w zaciszu stworzyłeś lepsze. Lepsze przegrało konfrontację z zastanym. Gdzie z matko popełniliśmy błąd?
Nie wiem czy chciałbym używać aplikacji w której kilkanaście zespołów dokłada coś od siebie do GUI. To przypomina raczej największe porażki FLOSS w których nie wiadomo gdzie wcisnąć kolejną opcję. Nawet pan z Adbe mówił, że zajmuje się tym jedna osoba. Potem pojawia się taki hit jak Procreate z minimalnym interfejsem, wręcz analogową obsługą i wszyscy są zachwyceni. Jego zespół to początkowo cztery, a po dziesięciu latach czterdzieści osób.
Nie zamierzam używać Iced. Raczej lubię analizować ciekawe API. Zdziwiłeś mnie tym kryterium skalowalności.
Tu jeszcze jeden projekt w iced do analizy: https://agourlay.github.io/ruxguitar-tablature-player/
Nie używasz Windows / Office?
Zajmuje się tym jedna osoba w zespole, ale samych zespołów jest wiele. W każdym z nich jest ~20 programistów.
Podejrzewam, ze dzisiaj pracowników może być jeszcze więcej (albo było, przed falą zwolnień).
Wydaje mi się, że cała dyskusja wynika z tego jak sobie wyobrażamy takie zespoły. Nie wiem czy widziałem jakiś dobry. Zawsze to jakiś kompromis wynikający z różnych nadmiernych specjalizacji.
Zauważ, że świat odszedł od wizualnego układania GUI. Potem od jakiś specjalistycznych języków do GUI. Teraz skupia się na tym, że można robić GUI za pomocą języka w którym piszesz aplikację.
Chyba lepiej byłoby gdybyś podawał przykłady które podziwiasz. Przy których mówisz “jak dorosnę chciałbym zrobić takie coś”.