🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Article View: pl.comp.lang.c
Article #291882

7. Raport Totaliztyczny: Sprawa Qt Group wer. 424

#291882
From: =?UTF-8?B?8J+Htf
Date: Sun, 17 Nov 2024 18:11
991 lines
41336 bytes
               7. Raport Totaliztyczny: Sprawa Qt Group

          1 Metadane
    autor: [1]Jacek Marcin Jaworski
    pseudonim: [2]Energo Koder Atlant
    pomocnicy autora: BRAK
    miejsce: Pruszcz Gd.
    utworzono: 2023-08-20 (org. przed ustaleniem standardu Rap. Tot.)
    wersja: 424 z dnia: 2024-11-17
    program składu: Libre Office Writer
    sys. op.: Kubuntu

    Spis treści

    [3]1 Metadane 1

    [4]2 Wstęp 2

    [5]2.1 Teza 2

    [6]2.2 Streszczenie 2

    [7]2.3 Słownik Pojęć 2

    [8]3 Mój oryginalny wkład 3

    [9]4 Metoda badawcza 3

    [10]5 Fakty 3

    [11]5.1 Czym jest bibl. Qt? 3

    [12]5.2 Obecny stan prac nad Qt: 4

    [13]5.3 Czym jest QML? 4

    [14]5.4 Obecny model biznesowy Qt Group 4

    [15]5.5 Rozwiązania celowo popsute w bibl. Qt (mowa tu o tym co
    można używać z poziomu C++) 5

    [16]5.6  Brak  reakcji  na  raportowane  błędy  i na pomysły
    racjonalizatorskie 7

    [17]5.7 Jakie wsk. moralnej poprawności "są na tak" a jakie "są
    na nie" wzg. firmy Qt Group 8

    [18]6   Analiza   proj.  Qt  Group  w  świetle  wsk.  moralnej
    poprawności zwanym Kultura ekonomiczna i własne utrzymanie 12

    [19]7 Podsumowanie 12

    [20]7.1 Rewelacje, zalety, wady i partactwa w proj. Qt Group 13

    [21]7.1.1 Rewelacje 13

    [22]7.1.2 Zalety 13

    [23]7.1.3 Wady 13

    [24]7.1.4 Partactwa 13

    [25]7.2 Wnioski 14

    [26]7.2.1 Wątpliwy jest sens przepisywania Qt od zera wynika to
    z wad C++ 14

    [27]7.2.2 Wątpliwy jest też sens przepisywania Qt od zera w j.
    D wynika to z wady j. D 14

    [28]7.3 Przewidywania na przyszłość 15

    [29]7.4 Zalecenia na teraz 15

    [30]7.5 Zalecenia na przyszłość 15

    [31]8 Bibliografia 16

                                 2 Wstęp

    Qt Group dostarcza wieloplatformową bibliotekę programistyczną
    Qt  dla  języka  C++.  W  latach  1991-2008  bibl. Qt w j. C++
    zakodowała norweska firma Quasar, później zwana Trolltech. W
    2008r.  została  ona sprzedana fińskiej firmie Nokia. W marcu
    2011r. Nokia sprzedała dział Qt innej fińskiej firmie Digia. W
    paź.  2014r.  z  firmy  Digia wydzielono Qt Company. Rzekomo w
    2016r. Digia i Qt Group całkowicie się rozdzieliły, ale jest to
    nonsens,  bo przecież wtedy ktoś musiałby nabyć udziały Qt
    Company, jednak nabywcy nie ujawniono.

    Z  [Haavard  Nord - s. WWW] wiadomo, że Quasar/Trolltech nigdy
    nie  przynosił  zysków. Jednak po opublikowaniu Rap. Tot. pt.
    „Sprawa Qt Group” Haavard Nord usunął to zdanie. Nie odpowiada
    też na listy el. z pyt. w tej sprawie.

2.1 Teza

    Bibl. Qt jest najważniejszą powszechnie dostępną bibl. dla j.
    C++. Qt Group to hamulcowy rozwoju biblioteki Qt. Qt Group robi
    programistom  wodę  z mózgu promując j. QML. Dlatego należy
    rozwidlić bibliotekę Qt by ją oczyścić i naprawić by dalej
    można było z niej normalnie korzystać w normalnych programach
    kodowanych w C++.

2.2 Streszczenie

    Bibl.  Qt  zawiera  niezbędne  kl.  do  tworzenia prog. w C++.
    Zawiera też bezużyteczne moduły. W bibl. Qt kl. dostępne z j.
    C++ są zaniedbane: błędy nie są naprawiane, wygląd i zachowanie
    kontrolek  nie  odpowiada  dzisiejszym standardom. W Qt prog. i
    kl. są celowo popsute, tak by nękać i odganiać programistów od
    C++.  Na  [Qt Group - s. w Wiki] Qt Group wykazuje spore zyski,
    jest to zaskakujące, bo aktualny model biznesowy jest b. dziwny
    i sprzeczny z moją logiką i dostępną mi wiedzą. Qt. Analiza w
    świetle wsk. moralnej popr. daje jednoznacznie negatywny wynik.

2.3 Słownik Pojęć

    dok.

    dokument

    SZAP

    w j. ang. USONA

    j.

    język

    bibl.

    biblioteka

    kl.

    klasa

    f.

    funkcja

    graf.

    grafika

    wyśw.

    wyświetlanie

    dom.

    domyślnie

    zach.

    zachowanie

    konf.

    konfiguracja

    rozw.

    rozwiązania

    podst.

    podstawowe

                         3 Mój oryginalny wkład

    Postanowiłem  poznać  bibl.  Qt po jej publikacji na licencji
    LGPL. Nastąpiło to wkrótce po przejęciu firmy Trolltech przez
    Nokię w 2008r. Programowanie z użyciem bibl. Qt wymaga używania
    narzędzi dostarczanych razem z nią: Qt Assistant, Qt Linguistic
    i  Qt Creator. Może nie robię jakichś wielkich sys., ale mam
    komercyjne wdrożenia do tego moje prywatne prog. też działają
    całkiem przyzwoicie. Mogę się pochwalić, że pracując w gdyńskim
    Posbit.pl nasz produkt Posnet Pospay Online dostał 1. nagrodę i
    tytuł  „Innowacja  Handlu 2019” na ogólnopolskich targach
    Retailshow [RetailShow - s. WWW].

                            4 Metoda badawcza

    Opieram  się  przede  wszystkim  na  swoim ponad 25 letnim (od
    1997r.) doświadczeniu w programowaniu w j. C++. W dalszej kol.
    opieram się na archiwum własnym i na art. w sieci Internet.

                                 5 Fakty

5.1 Czym jest bibl. Qt?

    Qt  to wieloplatformowa bibl. zakodowana w C++. Jest podzielona
    na kilka mniejszych bibliotek:
      * podst. kontrolki graf.;
      * kontrolka OpenGL: można wyświetlić w oknie Qt scenę OpenGL;
      * bazy  SQL:  łączenie z bazami SQL i wykonywanie zapytań,
        jednak   bez   żadnych  mechanizmów  serializacji  danych
        (kl.->baza i baza->kl.);
      * sieć IP;
      * port szeregowy;
      * geolokalizacja;
      * drukowanie;
      * dźwięk;
      * kl. do parsowania i zapisu plików Json i XML (do plików CSV
        jest bibl. zew. [QtCSV - s. WWW]);
      * DBus (to w sys. Linuks);
      * Przydatnym  (choć  prostym) uzupełnieniem jest QtTest: do
        tworzenia testów jednostkowych.

    Co dziwne wyodrębniono też moduł QSvg (moim zdaniem powinna to
    być zwykła wtyczka do renderowania obrazków).

    Oprócz tego jest sporo w Qt bibliotek "robiących tłum":
      * QtConcurrent:   jakiś  dziwny  potworek  do  programowania
        równoległego;
      * QtRemote:  tajemnicza  bibl.  do  prog. systemów obiektów
        rozproszonych  - z dok. nie można nawet się dowiedzieć w
        jakim   modelu   to   działa:   czy   w  modelu  wywołań
        synchronicznych czy asynchronicznych;
      * QtScript:  stary  potworek  skryptowy  z  czasów Trolltech
        zastąpiony  w czasach Noki przez potwora QML – od tamtej
        pory wmawia się nam że do prog. interfejsów dotykowych jest
        QML i że C++ „się nie nadaje”;
      * QWebView: stary silnik wyświetlania plików HTML. Cechował
        się on dużymi możliwościami i wygodnym API;
      * QWebEngine: nowy silnik wyśw. plików HTML. Mimo że powinien
        on  mieć  API  w  100%  kompatybilne  z QWebView, to ma on
        zupełnie inne API – dosłownie wygląda to tak jakby ktoś
        stwierdził, że QWebView jest zbyt prosty w użyciu.

    W  przeciwieństwie  do  QWebView  QWebEngine nigdy nie został
    podczepiony   do  listy  kontrolek  Qt  Designer.  Zrobiono  to
    prawdopodobnie z powodu niestabilności QWebEngine.

5.2 Obecny stan prac nad Qt:

    Od  2008r,  czyli od sprzedaży Trolltech firmie Nokia bibl. Qt
    praktycznie  nie  jest  rozwijana  (innymi  słowy  proj.  jest
    mrożony). Nie chodzi mi o to że nie dają nam za darmo nowych
    kl. w C++, chodzi mi o to, że:
      * Jest  b.  mało  dostępnych gotowych stylów QSS[32]^1 dla
        „normalnych” kontrolek dostępnych z C++;
      * Nie ma wcale dostępnych gotowych stylów QSS dla twórców
        prog. w C++ dla ekranów dotykowych;
      * Nie wiadomo jak do własnych, nowych kontrolek tworzyć nowe
        style QSS;
      * Zarządzanie   oknami   w  kl.  QMdiArea  oraz  QDockWidget
        (dostępnych z C++) jest od lat popsute. Należy uznać to za
        sabotaż   Qt   Group  mający  zniechęcać  do  tworzenia
        „normalnych” prog.;
      * Dom.   zach.   kontrolek  (dostępnych  z  C++)  jest  już
        przestarzałe  (niezgodne  z  intuicją),  przez  co zawsze
        wymagają one dodatkowej pracy. Np. kl. QTreeWidget mimo że
        węzły  i  liście  w  tej  kontrolce  oparte  są  o  kl.
        QTreeWidgetItem  i  ma ona 3 stany zaznaczania, to dom. nie
        są one używane. Podczas gdy normalne było by zaznaczanie
        węzłów jako Qt::PartiallyChecked gdy część liści jest
        zaznaczona a część nie.

    Zamiast  tego  wszystkiego  od 2009r. wśród programistów C++
    używających bibl. Qt promuje się potwora QML opartego o język
    skryptowy Jawa Skrypt.

5.3 Czym jest QML?

    QML  jest  to  zdegenerowany j. skryptowy oparty na Jawa Srypt.
    QML reklamuje się, jako j. szybkiego tworzenia aplikacji które
    mogą   tworzyć  nie  tylko  zawodowi  programiści  ale  też
    projektanci.  Ale  to  fikcja.  Cechą  szczególną  QML  jest
    połączenie  w  jedno  deklaracji  i  implementacji  klas oraz
    tworzenia obiektu – te 3 rzeczy koduje się jednocześnie w tym
    samym miejscu. Czyli klasę definiuje się w miejscu wystąpienia
    obiektu  w  trakcie  uruchomienia.  TAKIEGO  SZALEŃSTWA NIE MA
    NIGDZIE INDZIEJ!!! Komunikacja między C++ i QML jest możliwa,
    ale  potwornie  trudna.  Kontrolki  QML nie umożliwiają nawet
    normalnej obsługi kliknięcia.

    Pomimo  3  prób  komercyjnego użycia QML dla mnie jest on tak
    nienormalny, że nie jestem w stanie go używać.

5.4 Obecny model biznesowy Qt Group

    - Tak jak wspomniałem we wstępie, Trolltech nigdy nie przynosił
    zysków właścicielom;

    - Jak podano na s. [Qt (software) - s. WWW w Wiki]:

    „In  2017,  the  Qt  Company estimated a community of about 1
    million developers worldwide[17] in over 70 industries.[18]”

    -  Wariacki  model  biznesowy Qt Group polega na udostępnianiu
    wszystkiego  za darmo, a na licencji komercyjnej nie oferowanie
    niczego  więcej  (bo kompilator Qt Quick to jakiś żart). Tak
    wygląda  oferta  Qt  Group dziś w nie. 2023-11-25 patrząc na
    tabelkę subskrypcji na s. WWW [qt.io/pricing].

    -  W sklepie [marketplace.qt.io] są bibl. i prog. jakie można
    dokupić  do  Qt.  Jest  to  b.  dobry  pomysł.  Jednak  przez
    nienormalną politykę sprzedaży nie da się tego sklepu używać:
     1. Wspierane  są  WYŁĄCZNIE  najnowsze  wer.  bibl.  Qt. Ja
        kupowałem bibl. QtPdfViewer i mogłem go używać wyłącznie z
        ost.   wer.  Qt5  czyli  Qt5.15.xx  albo  z  nie  w  pełni
        funkcjonalną,  wczesną  wer.  Qt6. Jest to kompletnie nie
        uzasadnione technicznie, bo dawniej Qt Group chwało się, że
        ma  zasadę,  że  wszystkie  wydania  Qt5 są programowo i
        binarnie  kompatybilne - API i ABI są zgodne. Więc nie ma
        powodów  by produkty sprzedawane w [marketplace.qt.io] nie
        działały  na kilkuletnich instalacjach linuksowych distro
        (które  mają  starsze wer. bibl. Qt – np. ja dziś w d.
        2024-11-17,  nie.  mam zainstalowane distro Kubuntu 20.04 z
        Qt 5.12.xx, a ostatnią wer. serii 5 była wer. 5.15.xx);
     2. Produkty   z   tego   sklepu   można  instalować  jedynie
        instalatorem od Qt Group. Tak więc nie można zintegrować
        tych   dodatków  z  sys.  Linuks  (razem  z  którym  jest
        instalowana bibl. Qt). A robi się to istotne w momencie gdy
        w  swoich  proj.  chcemy  bazować  na  Qt z systemu. Ma to
        znaczenie   w  sytuacji  gdy  prowadzimy  własne  proj.  i
        modyfikujemy źródła w prog. dostarczanych z distro. Własne
        proj. łatwo przestawić na bibl. Qt w innym kat. Natomiast
        przerabianie  skryptów  budowania  prog.  dostarczanych  w
        paczkach  z  distro  to masakra. Poza nie może być w sys.
        Linuks dwóch wer. bibl. Qt (tych samych serii gł., np. wer.
        5.12 i wer. 5.15 by się gryzły).

5.5 Rozwiązania celowo popsute w bibl. Qt (mowa tu o tym co można
używać z poziomu C++)

      * Nie  używanie  w  bibl.  Qt  wyjątków.  Zamiast  nich do
        sygnalizowania błędów używa się po prostu wart. zwracanej.

    ROBI SIĘ TO BY DOPROWADZIĆ PROGRAMISTÓW C++ DO SZALEŃSTWA PRZEZ
    CIĄGŁE WKLEPYWANIE TEGO SAMEGO KODU DO OBSŁUGI BŁĘDÓW.

    Na  to jest sposób: dziedziczenie kl. i przykrywanie f. kl. Qt
    własnymi f., które spr. kod błędu i rzucają wyjątek.

    W materiałach propagandowych Qt Group podaje, że w czasach gdy
    zaczynano prace nad Qt nie było standardu C++, a drugiej strony
    starano się by Qt działała z jak największą l. kompilatorów (a
    później dodano, że chcą by Qt pracowała na jak największej l.
    platform).   Ponad  to  argumentowano,  że  niektóre  z  tych
    kompilatorów miały problemy z prawidłową obsługą wyjątków.
    Prace  nad  Qt  zaczęto w 1991r. Wtedy już były wyjątki, bo
    wprowadzono  je  do C++ w 1990r. Wyjątki objął też pierwszy
    standard C++ jaki przyjęto w 1998r. No i teraz mamy już 2023r.,
    czyli minęło 25lat, i dalej trzeba klepać w kółko ten sam kod
    obsługi błędów zwracanych przez wart.!

    Dowodem na celowe nie używanie wyjątków w bibl. Qt jest to, że
    w  tym  samym  standardzie  C++ z 1998r. wprowadzono szablony i
    przestrzenie  nazw,  które Qt wdrożyło w kodzie bibl.! Więc
    szablony i przestrzenie nazw można było wdrożyć, a wyjątków
    nie?
    Aby  temu zaradzić należy tworzyć własne prywatne i firmowe
        bibl. separujące ogłupiający kod bibl. Qt od własnych prog.
        W tych bibl. należy standardowo przezywać wszystkie typy Qt
        (oraz  typy  proste  C  i  C++)  i  w  razie  konieczności
        dziedziczyć i rozszerzać je (np. o f. które w razie błędu,
        zamiast po prostu zwracać kod, rzucają wyjątek).
      * QSqlDatabase  nie  można awaryjnie zamknąć przez zwykłe
        wywołanie  destruktora.  W  Qt  jest zabezpieczenie by nie
        można po prostu zerwać poł. z bazą danych. A może być to
        konieczne,  np.  do przerwania długiego zapytania SQL (np.
        gdy  użytkownik  włączy  generowanie długiego raportu i
        zdecyduje się go przerwać po tym jak się wścieknie długim
        czekaniem). Blokadę tą uzyskano f. statycznymi (działają
        one w oparciu o zmienne globalne w pliku C++).

    JEST TO ROBIONE PO TO BY UTRUDNIAĆ ŻYCIE PROGRAMISTOM.
    Radykalnym  obejściem  tego  problemu  jest  wydzielenie  kodu
        wywołującego  zapytania  SQL  do  osobnego  prog.  i jego
        wywoływanie z własnej aplikacji. Wtedy gdy można po prostu
        ubić prog. by przerwać zapytanie. Wtedy nic złego z bazą
        się nie dzieje, więc jest to dowód na czysto złośliwe rozw.
        w kl. QSqlDatabase;
      * Wyliczenia w QSizePolicy są podane dokładnie odwrotnie od
        ich znaczenia.

    ROBI SIĘ TO BY DOPROWADZIĆ PROGRAMISTÓW C++ DO SZALEŃSTWA PRZEZ
    PODWÓJNE MYŚLENIE TYPU: CZARNE JEST BIAŁE, A BIAŁE JEST CZARNE.

    Mam takie obejście:
#define wMaks QSizePolicy::MinimumExpanding
#define wMin QSizePolicy::Maximum
#define wStala QsizePolicy::Fixed
      * jw.:  Zarządzanie  oknami  w kl. QMdiArea oraz QDockWidget
        jest od lat popsute.

    NALEŻY UZNAĆ TO ZA SABOTAŻ WOBEC TWÓRCÓW „NORMALNYCH” PROG.
    Aby  to  naprawić  konieczne jest rozwidlenie (w j. ang. fork)
        proj.  bibl.  Qt  i jej naprawa. Dla QDockWidget jest pewna
        alternatywa     w     postaci    kontrolki    KDDockWidgets
        [KDDockWidgets  -  s.  WWW] szwedzkiej firmy Klarälvdalens
        Datakonsult  AB,  ale  to  tylko  ciekawostka  z powodu nie
        korzystnego  licencjonowania  (za darmo jedynie na licencji
        GPLv2 lub GPLv3, a licencja komercyjna kosztuje tysiące €).
      * jw.:  Wygląd  i dom. zachowanie kontrolek jest niezgodne z
        intuicją  i  przestarzałe,  przez co zawsze wymagają one
        dodatkowej pracy;

    NALEŻY UZNAĆ TO ZA SABOTAŻ WOBEC TWÓRCÓW „NORMALNYCH” PROG.
    Aby  to  naprawić  konieczne jest rozwidlenie (w j. ang. fork)
        proj. bibl. Qt i jej naprawa.
      * Z poziomu C++ nie można używać kl. QML. Jest to sztuczne
        ograniczenie bo te kl. i tak są kodowane w C++. Te kl. QML
        mają jedną zaletę: są dostosowane do ekranów dotykowych
        (sprytne tel. i tablety).
        To  nachalne  wpychanie  QML  można  obejść: standardowe
        kontrolki Qt można ostylować definiując własne pliki QSS.
        Jednak   wymaga   to   dodatkowej  pracy  I  TO  W  DODATKU
        ARTYSTYCZNEJ!!!.   Na   100%  jest  to  wykonalne,  bo  mam
        wdrożenia takich prog. (terminale płatnicze Posnet Pospay
        Online i Posnet Netpay).

    NALEŻY UZNAĆ TO ZA SABOTAŻ WOBEC TWÓRCÓW „NORMALNYCH” PROG.
    Aby  to  naprawić  konieczne jest rozwidlenie (w j. ang. fork)
        proj. bibl. Qt i jej popr.
      * QApplication::exec()  można wywołać jedynie z f. main().
        Wywołanie  z  QApplication::exec() z innej f. kończy się
        zawieszeniem  prog.  Aby coś takiego zakodować na prawdę
        trzeba się postarać! PRAWDOPODOBNIE WYMUSZA SIĘ TO W CELU
        ANALIZY KRADZIONEGO KODU.
        Aby to naprawić konieczne jest rozwidlenie (w j. ang. fork)
        proj. bibl. Qt i jej naprawa.
      * W  okienkowym  programie  Qt  musi  istnieć obiekt z oknem
        głównym. Jak się zamknie okno główne cały program się
        zamyka.  Czyli  nawet nie można zrobić kl. LogikaProgramu
        jaka  najpierw  otwiera okno konfiguracji, zamyka je, potem
        otwiera  okno  gł.,  zamyka je i na koniec wyświetla okno
        podsumowania. PRAWDOPODOBNIE WYMUSZA SIĘ TO W CELU ANALIZY
        KRADZIONEGO KODU.
        Aby to naprawić konieczne jest rozwidlenie (w j. ang. fork)
        proj. bibl. Qt i jej naprawa.

      * Właściwości  w  kl.  dziedziczących  po kl. QObject: Te
        właściwości są tylko po to by można było udostępniać
        obiekty  kl. Qt j. skryptowym. W trakcie prog. w C++ z tych
        właściwości wcale się nie korzysta. WŁAŚCIWOŚCI W KL. QT SĄ
        TYLKO PO TO BY MOŻNA BYŁO STWORZYĆ POTWORA QML!
        Aby to naprawić konieczne jest rozwidlenie (w j. ang. fork)
        proj. bibl. Qt, bo trzeba usunąć wariackie właściwości
        przydatne jedynie dla twórców portów do j. skryptowych.

      * jw.:  Wariackie  API  kl. QWebEngine kl. do renderowania s.
        HTML;

    NALEŻY UZNAĆ TO ZA SABOTAŻ WOBEC TWÓRCÓW „NORMALNYCH” PROG.
    Aby  to  naprawić  konieczne jest rozwidlenie (w j. ang. fork)
        proj. bibl. Qt, bo trzeba usunąć wariacki moduł QWebEngine
        i zaktualizować moduł QWebKit.
      * Część  f.  wirt.  nazywa się zdarzeniami np. showEvent,
        closeEvent,  mouseEvent, keyPressEvent. Natomiast prawdziwe
        zdarzenia nazywane są sygnałami.

    ROBI SIĘ TO BY DOPROWADZIĆ PROGRAMISTÓW C++ DO SZALEŃSTWA PRZEZ
    PODWÓJNE MYŚLENIE TYPU: CZARNE JEST BIAŁE, A BIAŁE JEST CZARNE.
    Tego nie da się naprawić, można jedynie zakodować wszystko od
        nowa w nowej bibl.

5.6 Brak reakcji na raportowane błędy i na pomysły racjonalizatorskie

    Ja  osobiście  w  pocz.  okresie  prog.  z  użyciem  bibl. Qt
    raportowałem  wiele  błędów  na  jakie napotykałem. Jednak
    przestałem je zgłaszać, bo żadnego z nich nie naprawiono.

    Początkowo  brakowało IDE do programowania w C++ z Qt, ale po
    przejęciu  Trolltechu  przez Nokię stworzyła ona Qt Creator.
    Jednak miał i nadal ma wady spowalniające pracę i wymagające
    wielu zbędnych klików. Ja miałem pomysł na jego ulepszenie, by
    pod Ctrl+Tab zamiast prostej listy plików używać drzewka tak by
    pliki nagłówkowe i z definicjami f. i z plikami ui występowały
    w  jednej linii. Zrobiłem nawet prototyp by z wizualizować to
    rozwiązanie. N [Sprawa%20qt.io_html_93e21a745f5f1cf.png]
    iestety odp. nie było. Z tamtego czasu zachował mi się zrzut
    ekranu z takim oknem do przełączania plików:

5.7 Jakie wsk. moralnej poprawności "są na tak" a jakie "są na nie" wzg.
firmy Qt Group

                            Wsk. mor. popr.

                    Skrótowy opis wsk. mor. popr.

                     Skrótowa analiza zagadnienia

                                 Ocena
     1. Sprawiedliwość i karma uczuciowa!!!

    Moralne jest przestrzeganie zasady „jaka praca taka płaca”.

    Konieczne  jest  doświadczenie takich samych uczuć jakie się
    wzbudziło u innych.

    Moralne jest wzbudzanie u innych takich uczuć jakie sam chciał
    bym doświadczyć.

    To  że  Qt  Group  udostępnia  bibl.  Qt  za darmo to decyzja
    właścicieli. Tylko, że to nie uzasadnia nękania programistów z
    całego Świata. Bo oni nie pracują dla Qt Group.

    Wciskanie popsutych bibl. C++ i ogłupiającego j. QML powoduje
    negatywne  uczucia  i  silne nerwy, więc jest to łamanie wsk.
    karma uczuciowa.

    NIE!
     2. Pole moralne!!!

    Moralne jest podejmowanie wysiłku intelektualnego (wykazywanie
    się wysoką inteligencją).

    Sprzeczne z wsk. pole moralne jest psucie istniejących kl., nie
    naprawianie   zgłaszanych  błędów,  ignorowanie  pomysłów
    racjonalizatorskich   i   nie   dostosowywanie   bibl.   Qt  do
    dzisiejszych urządzeń.

    NIE!
     3. Totaliztyczne dobre uczynki i totaliztyczne grzechy!!!

    To  samo  co  wsk. Praca Moralna z uproszczeniem, że żyjemy w
    idealnym Świecie.

    Dostarczanie  popsutych  bibl.  nie  jest złym uczynkiem tylko
    niemoralną pracą.

    BRAK
     4. Praca Moralna!!!

    Moralna jest jest dobrowolna praca, najbardziej pod górę pola
    moralnego i generująca dobrą karmę (czyli nikomu nie szkodzi).

    Brak prac nad Qt w kontekście C++ to oznaka braku pracy.

    NIE!
     5. Uczucia!!!

    Uczucia moralne:
     1. Przyjemne uczucia umysłowe są moralne;
     2. Przyjemności fizyczne są niemoralne;
     3. Dobrowolne pokonywanie przeciwnych uczuć jest moralne;

    Krzywdzenie istot postępujących moralnie jest niemoralne.

    Nie wiadomo co czują pracownicy Qt Group.

    BRAK
     6. Motywacje!!!

    Moralne jest podejmowanie wysiłku i przełamywanie lenistwa.

    Brak  prac  nad Qt w kontekście C++ to oznaka lenistwa. Chęć
    zniszczenia cudzego umysłu, to z kolei szataństwo.

    NIE!
     7. Odpowiedzialność!!!

    Moralne jest branie odpowiedzialności za siebie i za innych.

    Sabotowanie  całego  proj. bibl. Qt, to zupełny brak poczucia
    odpowiedzialności    za    siebie,    oraz    brak    poczucia
    odpowiedzialności za tych którzy jej używają i brak poczucia
    odpowiedzialności  za  Cywilizację  która  ma używać prog.
    stworzonych z użyciem tej bibl.

    NIE!
     8. Sumienie!!!

    Moralne  jest  słuchanie  sumienia, bo zna ono wszystkie prawa
    moralne i wydaje nieomylne sądy na temat każdego zrealizowanego
    działania.

    Widać,  że  właściciele Qt Group chcący zniszczyć umysły
    programistom C++ nie mają wcale sumienia (zamiast niego mają „w
    sercu kamień i mózg z betonu”).

    NIE!
     9. Uczciwość!!!

    Moralna jest uczciwość.

    Moralny jest podstęp czyli iluzja przyszłości.

    Moralny jest psikus czyli żart chwilowo wprowadzający w błąd i
    nie powodujący konsekwencji.

    Cytat z [Mat7:20]:„A więc: poznacie ich po owocach”. No te
    owoce   są   popsute,   brzydkie,   przestarzałe,  popsute  i
    ogłupiające.

    NIE!
    10. Solidność!!!

    Moralne   jest   doprowadzanie  projektów  do  końca  jaki  u
    odbiorcy/klienta nie generuje negatywnych uczuć. Zaleca się by
    wynik końcowy budził podziw i zachwyt.

    Tolerowanie błędów w swoich publikacjach jest sprzeczne z wsk.
    solidność.

    NIE!
    11. Braterstwo!!!

    Moralna jest postawa koleżeńska.

    Nie moralne jest pomijanie lub szykanowanie innych ludzi.

    Moralne  przestrzeganie  zasady „Walczę o człowieka a nie z
    człowiekiem!”.

    Dążenie do denerwowania i nękania ludzi oraz próby niszczenia
    ich umysłów jest sprzeczne z wsk. braterstwo!

    NIE!
    12. Droga i wdrożenia!!!

    Moralne jest „zrobienie wszystkiego co możliwe” w celu pełnej
    realizacji proj. Wtedy mówimy, że droga do celu była moralna.

    Moralne  jest  doprowadzanie  proj.  do  fazy wdrożenia, czyli
    przekazania ich użytkownikom do normalnej eksploatacji.

    Wrogie  przejęcie  jakim  było kupienie firmy Trolltech przez
    Nokię w 2008r. i mrożenie od tamtej proj. bibl. Qt to łamanie
    wsk.  Droga. Jednak na przekór temu podbija się nr wer. bibl.
    Qt, więc są jakieś lipne wdrożenia.

    NIE!
    13. Sukcesy naukowe i kompetencje!!!

    Moralne jest zdobywanie kol. tytułów naukowo-technicznych, oraz
    naukowe   rozwiązywanie  zagadek  Naszego  Wszechświata  oraz
    inżynierskie rozwiązywanie problemów technicznych.

    Aby  legalnie  używać danej technologii trzeba na to uczciwie
    zasłużyć solidnie ucząc się obsługi i uczciwie pracując by
    legalnie tą technologię wytworzyć lub kupić.

    Z  jednej s. wklepano 30.703.306 linii kodu (do wer. Qt 5.12.12
    włącznie), a toleruje się w niej liczne błędy. Te błędy w wielu
    przypadkach  uniemożliwiają użycie danej kl., np. QMdiArea i
    QDockWidget.  Wygląda  to  tak,  jakby  kompetencje były, ale
    niewystarczające.

    NIE!
    14. Kultura osobista!!!

    Moralne jest panowanie nad swoim gniewem i nad swoimi żądzami.

    Moralne jest gonienie za legalnie uzyskiwaną wiedzą (kupowaną i
    uzyskiwaną w drodze „białego wywiadu”), bo to buduje intelekt.

    Nic  nie  wiadomo o wściekłości akcjonariuszy Qt Group wobec
    programistów używających bibl. Qt. Nie wiadomo też nic o tym
    czy gonią za wiedzą.

    BRAK
    15. Kultura techniczna!!!

    Moralne jest wdrażanie pomysłów racjonalizatorskich i tworzenie
    udoskonalonych narzędzi koniecznych do dalszej pracy.

    Zakodowanie bibl. Qt wymagało ogromnej wiedzy programistycznej.
    Jednak  tego  nie  zrobiono w Qt Group tylko w firmach Quasar i
    Trolltech.  A  wiem że wielu (najlepszych?) ludzi wygoniono po
    wrogim przejęciu w 2008r. A od tamtej pory proj. bibl. Qt jest
    mrożony.

    NIE!
    16. Kultura ekonomiczna i własne utrzymanie!!!

    Moralne     jest    przestrzeganie    w    interesach    zasady
    „wygrany-wygrany”.

    Moralna jest praca na własne utrzymanie.

    Firma Qt Group łamie ten wsk. bo dostarczając ogłupiające rozw.
    dla prog. łamie zasadę „wygrany-wygrany”. To, że wykazuje zyski
    [Qt Group - s. w Wiki] nie wiele tu zmienia.

    NIE!

    Występowanie w kol. „Ocena” 13x NIE! i 3x BRAK oznacza, że jest
    jednomyślność wsk. moralnej popr. Dlatego cały proj. Qt Group
    jest niemoralny.

  6 Analiza proj. Qt Group w świetle wsk. moralnej poprawności zwanym
                 Kultura ekonomiczna i własne utrzymanie

    Cytat z [Ideologia Geniuszy-Mocarzy]:

    „Miarą wks. Kultura ekonomiczna jest czysty zysk u wszystkich
    partnerów w danym proj. biznesowym.

    Ten wsk. mówi:

    Moralne     jest    przestrzeganie    w    interesach    zasady
    „wygrany-wygrany”.

    [...]

    Niemoralne jest łamanie praw ekonomii (tak jak to było dawniej
    w PRL i obecnie w UE).

    Wsk. pochodnym od "ekonomi" jest wsk. "własne utrzymanie":

    Moralna jest praca na własne utrzymanie.”
     1. Współpraca  z Qt Group dla firm programistycznych oznacza
        zawężanie możliwości zamiast ich rozszerzanie. Jest tak bo
        Qt  Group  wymusza  na programistach C++ przesiadkę na QML
        czyli  zmutowany  Jawa  Skrypt.  Ten QML jest zaprzeczeniem
        dobrych  praktyk  programistycznych:  w  nim  w jedno poł.
        deklarację,   definicję   i   tworzenie   obiektu.  Takie
        ogłupiające pomysły są wręcz nie do pomyślenia dla tych co
        umieją programować w normalnych j. prog.! Programistom C++
        celowo blokuje się dostęp do klas QML (które są kodowane w
        C++) tylko po to by zmuszać programistów do używania tego
        ogłupiającego j. QML.
     2. Qt  Group  postępuje tak samo jak wszystkie wielkie korpo:
        tworzy   produkty   w   C++   i   klientom  karze  używać
        własnościowego j. skryptowego.
     3. Trudno  powiedzieć  jakim cudem Qt Group wykazuje zysk. Bo
        nawet  ich  sklep  [marketplace.qt.io]  jest  zaprzeczeniem
        zdrowego rozsądku (wymusza się użycie jedynie najnowszych
        wer. bibl. Qt i instalację własnościowym instalatorem Qt
        Group).  Dlatego  nie ma mowy by czegokolwiek z tego sklepu
        używać na sys. Linuks. A sys. Linuks jest dziś (2024-11-17,
        nie.)   najlepszą   platformą  dostępną  dla  cywilnych
        programistów;
     4. Nonsensowny  marketing  (coś  jak  w  Commodore  w  latach
        1985-1994,  czyli po wygnaniu założyciela Idka Trzmiela).
        Zupełny brak obecności w mediach: likwidacja Qt Quarterly
        (z  końcem  2011r.), zero art. sponsorowanych w gazetach i
        serwisach  WWW, zero info o wdrożeniach komercyjnych, zero
        przykładów proj. wzorcowych. Jedynie na blogu zamieszczają
        komunikaty  typu:  „Wyszła nowa wer. Qt X.XX.0, nowości
        brak.”, albo „Wyszła nowa wer. Qt Creator XX.0, nowości
        brak.”.

    Pow. fakty jednoznacznie świadczą o łamaniu wsk. moralnej popr.
    Zwanego Ekonomia i własne utrzymanie w zakresie przestrzegania
    zasady  „wygrany-wygrany”.  Negatywnej oceny nie zmieniają
    wykazywane  zyski.  Dlatego w świetle tego wsk. proj. Qt Group
    jest niemoralny.

                              7 Podsumowanie

    Biblioteka  Qt od momentu przejęcia norweskiej firmy Trolltech
    przez fińską firmę Nokia praktycznie nie jest rozwijana. Jest
    tak na przekór postępów w elektronice w tym np. pojawieniu się
    sprytnych   tel.   i   tabletów   z   dotykowymi  interfejsami
    użytkownika.

    Aby  wspierać  nowe interfejsy dotykowe opracowano potwora QML
    jaki  jest  zaprzeczeniem  filozofii  Qt,  C++  i w ogóle jest
    zaprzeczeniem  zdrowego  rozsądku. Dlatego QML jest kompletnie
    nie do przyjęcia dla programistów C++.

    Model biznesowy Qt Group to fikcja: zarówno oferta subskrypcji,
    jak  zasada  działania  sklepu  [marketplace.qt.io].  Nawet mi
    nasuwają się różne pomysły jak na tej bibl. można zarabiać.
    Obecnie  już  nawet nie wiadomo do kogo należy Qt Company. Qt
    Group to trojan.

7.1 Rewelacje, zalety, wady i partactwa w proj. Qt Group

   7.1.1 Rewelacje

     1. Zakodowanie Qt w j. C++ (to zasługa fundatorów);
     2. W  bibl.  Qt  zastosowano  mechanizm  sygnał-slot oparty o
        prekompilator moc (to zasługa fundatorów).

   7.1.2 Zalety

     1. W 2023r. bibl. Qt ciągle jest dostępna.

   7.1.3 Wady

     1. Prog. takie jak Qt Creator i Qt Assistant są uciążliwe w
        użyciu[33]^2;
     2. Zbędne właściwości w kl. dziedziczonych po QObject.

   7.1.4 Partactwa

     1. Krecia robota przeciwko społeczności programistów C++ (np.
        wspomniane    QSizePolicy,    albo    QApplication::exec(),
        wymaganie wyświetlania przynajmniej jednego okna gdy prog.
        używa QApplication);
     2. Brak   naprawy   popsutych   kluczowych   kl.  (takich  jak
        wspomniane QMdiArea i QDockWidget);
     3. Nie wszystkie f. pub. są wirt.;
     4. Nie wszystkie destruktory są wirt.;
     5. Niemożność w kwestii wdrożenia w bibl. Qt wyjątków;
     6. Niemożność w kwestii udostępnienia kl. QML na poziomie C++;
     7. Brak aktualizacji zachowania kontrolek w bibl. Qt;
     8. Brak  aktualizacji  wyglądu  kontrolek  na PC (brak nowych
        stylów QSS);
     9. Brak styli QSS dla ekranów dotykowych;
    10. Brak możliwości rozszerzania sys. styli QSS (tak by można
        je było definiować od zera w nowo tworzonych kontrolkach);
    11. Niemożność  w  kwestii  integracji  zakupionych  bibl. w
        [marketplace.qt.io] z sys. Linuks.
    12. Niemożność w kwestii nonsensownego marketingu;
    13. Niemożność w kwestii nonsensownego modelu biznesowego.

7.2 Wnioski

    Na przekór braku rozwoju Qt od 2008r. do dziś nie ma dostępnego
    nic  porównywalnego  do  tej bibl. (a przynajmniej ja o niczym
    takim nie słyszałem). Czy jesteśmy skazani na Qt? W polskich
    warunkach  niestety  tak,  wynika to z faktu braku środków do
    napisania porównywalnej bibl. bez wad Qt.

   7.2.1 Wątpliwy jest sens przepisywania Qt od zera wynika to z wad C++

    - Braku ABI;

    - Brak działania f. wirt. w konstruktorach i destruktorach;

    - Brak dziedziczenia operatorów;

    -  Brak  wybierania najlepszego dopasowania typów, gdy pojawia
    się jakakolwiek niejednoznaczność (przekleństwo ambigous);

    -  Brak  w  kl.  aut.  tworzenia  f.  typu  virtual w przypadku
    wszystkich  f.  w  sekcjach  public. Jest to konieczne z powodu
    zapewnienia elastyczności kl. w bibl. Obecnie części pomysłów
    nie  można  realizować  z tego powodu, że nie wszystkie f. w
    sekcjach  public  są  typu  virtual  (np. nie można nadpisać
    QWidget::update() co oznacza, że nie można swobodnie dodawać
    kol.  el.  graf.  do istniejących kontrolek, bo w razie zmiany
    rozmiaru nie ma jak ich uporządkować przed wyświetleniem).

    Jednak zdarzają się proste kl. opakowujące takie jak QRect lub
    QSize lub QPoint w jakich z powodów wydajności nie powinno być
    pub. f. typu virtual. Dlatego w C++ zwykłe f. pub. powinny być
    jedynie w strukturach. Wtedy struktura od kl. różniła by się 2
    el.:
     1. W strukturze dom. sekcją jest public, a w kl. dom. sekcją
        jest private (to już jest w C++);
     2. W strukturze dom. f. w sekcji public nie są typu virtual, a
        w kl. dom. wszystkie f. w sekcji public są typu virtual (to
        należy dodać do C++).

    -  Brak znaków Unicode w dekl. makr ani w dekl. f. ani w dekl.
    kl.

    Moim  zdaniem  w tych 6 kluczowych postulatach niczego się nie
    traci  z obecnego C++, a zyskuje to co gdzie indziej już dawno
    jest  (np.  w j. D). Jednak należy zachować podział na pliki
    deklaracji  (*.h++)  i pliki definicji (*.c++). By naprawić te
    wady konieczne jest niewielkie zmodyfikowanie kompilatora C++ i
    zerwanie  kompatybilności  z  obecnym kodem C++. Dopiero wtedy
    należało by stworzyć następcę Qt.

   7.2.2 Wątpliwy jest też sens przepisywania Qt od zera w j. D wynika to
   z wady j. D

    - D ma format plików źródłowych w modelu Asemblera (poł. w
    jedno  deklaracji  i  definicji f.) a nie w modelu j. C (osobne
    pliki dla deklaracji i definicji f.). Programowanie w j. D jest
    procesem  odwrotnym  do  programowania  w  j.  C  i C++: w j. D
    najpierw koduje się definicje f. w kl. i dopiero później można
    wygenerować  plik  nagłówkowy z deklaracjami tych kl. Każdy
    programista C i C++ potwierdzi, że to nienormalny sposób pracy
    (nawiasem  mówiąc  tak  samo  nienormalne  jest programowanie
    sterowane przez testy). Wadą plików źródłowych w modelu j.
    C/C++ jest puchnięcie kodu o 100% w porównaniu do j. D i Pyton
    (sprawdziłem to kodując w tych j. przykładowy programik).

7.3 Przewidywania na przyszłość

    Qt  Group najprawdopodobniej dalej będzie cudakować z j. QML.
    Będą się pojawiać nowe błędy w kl. dostępnych z C++. Qt Group
    dalej będzie udawać, że marketing nie jest do niczego potrzebny
    i  dalej  będzie cudakować ze swoim modelem biznesowym, dalej
    będzie też cudakować z [marketplace.qt.io]. Wszystko to po to
    by niszczyć programistów C++ (bo my wiemy, że ten język jest
    najlepszy do programowania prog., choć nie jest idealny – jw.).

7.4 Zalecenia na teraz

    Zalecenia dla programistów indywidualnych:
      * Nie należy się pakować w QML, bo jest to sprzeczne z ustawą
        o ochronie zdrowia psychicznego;
      * Dalej kodować w C++ i Qt.
      * Izolować  własny  kod  C++  od  kodu bibl. Qt. W tym celu
        używane kl. Qt należy przezywać własnymi aliasami używając
        dyrektyw  using  i  #define.  Robimy  to  po to, by w razie
        konieczności  te  aliasy zastępować własnymi klasami (z
        dodatkowymi zmiennymi i z dodatkowymi f.).

    Zalecenia dla polskich firm, oprócz pow. dodatkowo:
      * Należy  ostylować w QSS kontrolki Qt tak by dało się je
        używać na sys. z ekranami dotykowymi. Wymaga to też pewnej
        pracy programistycznej dotyczącej obsługi kliknięć (w Qt
        kliknięcie  jest punktowe a na ekranach dotykowych powinno
        działać w określonym promieniu). To na 100% działa, bo już
        wdrożył nieistniejący Posbit.pl (jeszcze dziś, 2023-08-21,
        można to zobaczyć w terminalach płatniczych Posnet Pospay
        Online i Posnet Netpay).

7.5 Zalecenia na przyszłość

    Zalecenie dla społeczności polskich programistów C++:
      * Należy rozwidlić[34]^3 proj. Qt oraz poprawić w. wymienione
        wady Qt;

    Rozwidlenie    Qt   nie   będzie   możliwe   do   użycia   w
    mikrokontrolerach, bo w nich nie ma bibliotek współdzielonych
    jakich dystrybucji wymaga licencja LGPL.

    Jednak  użycie  Qt  w mikrokontrolerach i tak jest trochę bez
    sensu, bo Qt nie jest bibl. czasu rzeczywistego (bo jest oparta
    o pętlę zdarzeń, która nie gwarantuje kiedy zdarzenie zostanie
    obsłużone).
      * Oferta  komercyjnej subskrypcji rozwidlenia Qt powinna być
        tak atrakcyjna, że uzasadniała by ponoszone koszty. Np.: Na
        licencji  LGPL dostępne były by konieczne narzędzia, ale
        tylko   konsolowe.   Natomiast   na   licencji  komercyjnej
        udostępniane były by wygodne narzędzia[35]^4 z interfejsem
        graf.  (w  rodzaju  obecnych  Qt  Creator,  Qt Designer, Qt
        Linguist   i  Qt  Assistant).  Nie  ma  przy  tym  obawy  o
        konkurencję ze s. obecnych narzędzi graf. od Qt: one też są
        nienormalne i popsute i wystarczy parę minut poklikać i już
        jest mnóstwo pomysłów jak je można by naprawić i rozwinąć.
        Jednak  tego  typu narzędzia należy zakodować od zera (z
        powodu  zapewnienia  sobie do nich pełnych praw autorskich
        koniecznych do ich sprzedawania);
      * Należy stworzyć sklep z dodatkami dla rozwidlonego Qt, tak
        by   udostępniać   w  nim  dodatkowe  bibl.  i  prog.  na
        komercyjnych zasadach. Pomysłów jest mnóstwo: kl. do edycji
        dok.  ODT  i  ODS, kl. do wyświetlania plików HTML, PDF i
        innych, wtyczki SQL do popularnych baz danych, bazy no-sql,
        hurtownie danych, popularne protokoły: HTTP, FTP, CAN, RS.
        Tego jest i będzie coraz więcej! Tu jest miejsce na biznes!
      * Należy dbać o to by społeczność mogła też się włączyć do
        tego interesu. W tym celu należy zdefiniować proste zasady
        i jasne kryteria techniczne i biznesowe jakie pozwalają na
        opublikowanie rozszerzeń dla rozwidlonego Qt.

                              8 Bibliografia

    Bibliografia

    Haavard  Nord  -  s.  WWW:  Haavard  Nord, Painful Lessons From
    Scaling a Software Company, 2016,
    https://medium.com/21st-century-decision-making-for-teams/painf
    ul-lessons-from-scaling-a-software-company-1d14ee7f9ab3

    Qt Group - s. w Wiki: , Qt Group, 2024,
    https://en.wikipedia.org/wiki/Qt_Group

    RetailShow  - s. WWW: , Zwycięzcy w konkursie Innowacje Handlu
    2019, 2019, https://retailshow.pl/pl/laureaci-2019-2

    QtCSV - s. WWW: , GitHub - iamantony/qtcsv: Library for reading
    and writing csv-files in Qt., 2024., github.com/iamantony/qtcsv

    Qt  (software)  -  s.  WWW w Wiki: , Qt (software) - Wikipedia,
    2024, https://en.m.wikipedia.org/wiki/Qt_(software)

    qt.io/pricing:  , Pricing and Packaging | Software Stack | Tech
    Stack | Qt, 2023, qt.io/pricing

    marketplace.qt.io:  ,  All  products  Support | Qt Marketplace,
    2024, marketplace.qt.io

    KDDockWidgets    -    s.    WWW:    ,    KDDockWidgets,   2024,
    https://www.kdab.com/development-resources/qt-tools/kddockwidge
    ts

    Mat7:20: św. Mateusz, Biblia Tysiąclecia, 2002

    Ideologia  Geniuszy-Mocarzy:  Jacek  Marcin Jaworski, Ideologia
    Geniuszy-Mocarzy, 2024

    [36]1Jest to rozw. wzorowane na stylach CSS znanych ze s. HTML.
    Moim zdaniem QSS to świetny pomysł!

    [37]2Bo  nie  są  tworzone zgodnie z zasadą wygody (w j. ang.
    zero-conf).

    [38]3w j. ang. fork

    [39]4w j. ang. zero-conf

References

    Visible links:
    1. mailto:jaworski1978@adres.pl
    2. mailto:energokoder@adres.pl

Message-ID: <lpumdnFe07fU1@mid.individual.net>
Path: polish.pugleaf.net!archive.newsdeef.eu!archive!apf2.newsdeef.eu!not-for-mail