Szybki sposób do light-weight aplikacji desktopowej

1

Witam wszystkich.

Przymierzam się do napisania aplikacji desktopowej, którym głównym targetem będzie Windows. Jeśli da się prosto zrobić żeby nie dużym kosztem chodziła też na Unixach to spoko.

Języki w jakich posługuje się płynnie to: Java, C#, Python, JavaScript, PHP, Kotlin, Ruby, Clojure, Web (html/css); gorzej znam Haskell, C++, Pascal/Delphi, Go, i pewnie kilka innych o których nie pamiętam.

Wiem że całkiem spoko można robić apki desktopowe w XAML (c#) albo FXML (Java), ale może znacie jeszcze jakieś inne spoko technologie?

Nie chcialbym spędzić nad tą apką dłużej niż 3 tygodnie; więc chciałbym jakąś techonologię która pozwoli zrobić pół normalną desktopową apkę w pół miesiąca. Polecacie jakąś taką technologię?

3

Electron :D

A tak serio, wydaje mi się że chyba JavaFX by był dobrym podejściem, bo zerowym kosztem uzyskasz aplikację na różne systemy. Co ta aplikacja ma konkretnie robić?

0
.andy napisał(a):

Co ta aplikacja ma konkretnie robić?

A jakie to ma znaczenie?

0

Przymierzam się do napisania aplikacji desktopowej, którym głównym targetem będzie Windows

WinForms, zerowy próg wejścia przeciągasz guziki na formatkę i już, działa. Dużo darmowych kontrolek. W WPF trzeba się trochę namęczyć żeby ogarnąć stylowanie i inny crap.
JavaFX jest niedorobiona, mało kontrolek, trzeba się męczyć z modułami. Używaj tylko jeżeli ma być cross-platform lub na raspberry PI.

Elektron to wcale nie taki głupi pomysł.

No i ostatnia opcja zrób weba zamiast Desktopa...

0
0xmarcin napisał(a):

No i ostatnia opcja zrób weba zamiast Desktopa...

Nie, to musi być desktop.

2

Języki w jakich posługuje się to [...] Pascal/Delphi

Skoro kojarzysz Delphi to instalujesz Lazarusa.

da się prosto zrobić żeby niedużym kosztem chodziła też na Unixach (*)

Ten sam projekt kompilujesz na Windows/Linux/Mac. Jest to całkowicie darmowe i otwartoźródłowe środowisko, a do tego masz prawo tak stworzoną aplikację puszczać dalej w świat odpłatnie, nic Cię nie ogranicza.

Tak samo, jak @0xmarcin napisał o WinForms - WinForms, zerowy próg wejścia przeciągasz guziki na formatkę i już, działa :D

__
(*) Co do kompatybilności - zakładam, że chcesz zwykłą aplikację okienkową, czyli korzystasz z LCL - Lazarusowego odpowiednika VCL z Delphi. Bo jeśli będziesz się bawić w jakieś niskopoziomowe działania, będziesz operować bezpośrednio na komunikatach albo korzystać z wywołań WinAPI, to mogą się pojawić lekkie kłopoty podczas przenosin. Ale jeśli się ograniczysz do obiektów oferowanych przez środowisko - czyli TForm, TButton, TImage, TTimer itp. to nie powinno być żadnych problemów. Sam parę razy tworzyłem apkę, którą działała na Windows i Linux. Na swoich kompach mam głównie Linuksa, ale na wirtualkach mam Windowsy. Udostępniałem Windowsom katalog z projektem pisanym pod Linuksa i bez kłopotu ten sam kod się kompilował i odpalał na Windows. Jakby co to mamy forumowego eksperta od Lazarusa - @furious programming więc masz skąd uzyskać wsparcie ;)

1

@0xmarcin:

JavaFX jest niedorobiona, mało kontrolek, trzeba się męczyć z modułami. Używaj tylko jeżeli ma być cross-platform lub na raspberry PI.

Nie twierdzę, że jest mega dużo ale jak się wejdzie chociażby na dół tej strony i poklika, to jednak trochę tego jest.
No i dlaczego jest niedorobiona?

WinForms, zerowy próg wejścia przeciągasz guziki na formatkę i już, działa.

SceneBuilder i masz podobnie, wrzucasz kontrolki na forma, potem podpinasz pod kontroler i gotowe.

Co ta aplikacja ma konkretnie robić?
A jakie to ma znaczenie?

Pytam głównie z ciekawości ale i dlatego aby stwierdzić czy się dana technologia nada. Gdybyś jednak chciał iść w stronę Javy, to zerknij na ten tutorial http://tutorials.jenkov.com/javafx/index.html

0
cerrato napisał(a):

Języki w jakich posługuje się to [...] Pascal/Delphi

Skoro kojarzysz Delphi to instalujesz Lazarusa.

Sorry, ale mam wrażenie że Lazarus jest takim "topornym" rozwiązaniem, nie specjalnie widzę to jak mógłbym szybko zrobił w tym pełnoprawną aplikację w ciągu dwóch tygodni. Poza tym, kiedyś jak próbowałem odpalić na tym testy jednostkowe to myślałem że mnie strzeli.

(*) Co do kompatybilności - zakładam, że chcesz zwykłą aplikację okienkową, czyli korzystasz z LCL - Lazarusowego odpowiednika VCL z Delphi. Bo jeśli będziesz się bawić w jakieś niskopoziomowe działania, będziesz operować bezpośrednio na komunikatach albo korzystać z wywołań WinAPI, to mogą się pojawić lekkie kłopoty podczas przenosin. Ale jeśli się ograniczysz do obiektów oferowanych przez środowisko - czyli TForm, TButton, TImage, TTimer itp. to nie powinno być żadnych problemów. Sam parę razy tworzyłem apkę, którą działała na Windows i Linux. Na swoich kompach mam głównie Linuksa, ale na wirtualkach mam Windowsy. Udostępniałem Windowsom katalog z projektem pisanym pod Linuksa i bez kłopotu ten sam kod się kompilował i odpalał na Windows. Jakby co to mamy forumowego eksperta od Lazarusa - @furious programming więc masz skąd uzyskać wsparcie ;)

Nie, nic niskopoziomowego, bo potrzebuję to dewelopować najszybciej jak się da.

Potrzebuję tylko kilka przycisków, text fieldów, reakcji na skróty klawiszowe i to wszystko.

0

Owszem, Lazarus jest toporniejszy w obsłudze niż Delphi, przesiadka z czegoś typu AndroidStudio czy VSCode to taka trochę podróż w czasie, ale po pierwszym szoku szybko zaczniesz w tym pisać.

W ogóle - dobrze by było, jakbyś napisał coś więcej o tej apliakcji - co to ma robić, jak bardzo skomplikowana itp. W każdym razie - to co mówisz, czyli jedno okienko z kilkoma przyciskami i Editami to naprawdę obsłużysz. I nawet nie wiem, po co chcesz do czegoś takiego pisać testy, trochę to wygląda jak przysłowiowa armata na komara :P

jak mógłbym szybko zrobił w tym pełnoprawną aplikację w ciągu dwóch tygodni

No ja też tego nie widzę. Okienko z paroma elementami to jest robota na 2-3 godziny a nie 2 tygodnie :P

0
cerrato napisał(a):

Owszem, Lazarus jest toporniejszy w obsłudze niż Delphi, przesiadka z czegoś typu AndroidStudio czy VSCode to taka trochę podróż w czasie, ale po pierwszym szoku szybko zaczniesz w tym pisać.

No, właśnie nie chcę takiej podróży w czasie :D

W ogóle - dobrze by było, jakbyś napisał coś więcej o tej apliakcji - co to ma robić, jak bardzo skomplikowana itp. W każdym razie - to co mówisz, czyli jedno okienko z kilkoma przyciskami i Editami to naprawdę obsłużysz.

Ale serio, jakie to ma znaczenie co ona będzie robić? :D

I nawet nie wiem, po co chcesz do czegoś takiego pisać testy, trochę to wygląda jak przysłowiowa armata na komara :P

Eee, co?

Z TDD znacznie szybciej i lepiej się wytwarza aplikacje. Wręcz bym powiedział że wolniej by mi poszło bez testów.

cerrato napisał(a):

No ja też tego nie widzę. Okienko z paroma elementami to jest robota na 2-3 godziny a nie 2 tygodnie :P

No way

2

No, właśnie nie chcę takiej podróży w czasie

No to już Twoja decyzja - chcesz mieć śliczne IDE, czy po prostu zrobioną robotę.

Ale serio, jakie to ma znaczenie co ona będzie robić? :D

Takie, że mając więcej wiedzy o tym, co chcesz robić, jak to ma wyglądać, na ile skomplikowana będzie itp, łatwiej jest coś doradzić.

Wręcz bym powiedział że wolniej by mi poszło bez testów.

No ja jestem innego zdania, ale nie idźmy w tą stronę, bo i tak nikt nikogo nie przekona, za to temat wątku się rozmyje. W Każdym razie - trochę dajesz sprzeczne sygnały. Najpierw piszesz o czymś prostym, parę przycisków i editów, a potem chcesz wprowadzić korpo-zasady w stylu TDD czy testy. Można, ale to jest - jak pisałem - pójście z armatą na komara. Albo apka prościutka i light-weight, albo robimy korpokombajn.

Okienko z paroma elementami to jest robota na 2-3 godziny a nie 2 tygodnie :P
[...]
No way

Chyba musimy rozdzielić dwie rzeczy - stworzenie UI oraz logiki. Bo może i te 2 miesiące będziesz sobie pisać to, co ta aplikacja będzie mielić, ale samo wyklikanie okienka (czyli de facto tego, o co pytasz - stworzenie aplikacji desktopowej) to jest chwila. A same algorytmy możesz sobie napisać w totalnym oderwaniu od UI, pobierające chociażby input z konsoli albo pliku tekstowego.

0
cerrato napisał(a):

No, właśnie nie chcę takiej podróży w czasie

No to już Twoja decyzja - chcesz mieć śliczne IDE, czy po prostu zrobioną robotę.

Nie chodzi o to czy śliczne czy nie śliczne, tylko czy użyteczne.

Ale serio, jakie to ma znaczenie co ona będzie robić? :D

Takie, że mając więcej wiedzy o tym, co chcesz robić, jak to ma wyglądać, na ile skomplikowana będzie itp, łatwiej jest coś doradzić.

Mówiłem już. Od warswty użytkownika oczekuję tylko kilku przycisków, pól do wpisywania oraz skrótów klawiszowych.

Wręcz bym powiedział że wolniej by mi poszło bez testów.

No ja jestem innego zdania, ale nie idźmy w tą stronę, bo i tak nikt nikogo nie przekona, za to temat wątku się rozmyje. W Każdym razie - trochę dajesz sprzeczne sygnały. Najpierw piszesz o czymś prostym, parę przycisków i editów, a potem chcesz wprowadzić korpo-zasady w stylu TDD czy testy. Można, ale to jest - jak pisałem - pójście z armatą na komara. Albo apka prościutka i light-weight, albo robimy korpokombajn.

Ale jak korpozasady? Ja autentycznie jak piszę swoje prywatne aplikacje to zaczynam od testów, bo tak się szybciej i lepiej tworzy aplikację. Tak jest wygodniej, dla mnie przynajmniej.

Okienko z paroma elementami to jest robota na 2-3 godziny a nie 2 tygodnie :P
[...]
No way

Chyba musimy rozdzielić dwie rzeczy - stworzenie UI oraz logiki. Bo może i te 2 miesiące będziesz sobie pisać to, co ta aplikacja będzie mielić, ale samo wyklikanie okienka (czyli de facto tego, o co pytasz - stworzenie aplikacji desktopowej) to jest chwila. A same algorytmy możesz sobie napisać w totalnym oderwaniu od UI, pobierające chociażby input z konsoli albo pliku tekstowego.

No taki mam plan. Dlatego na UI nie chcę tracić dużo czasu, dlatego pytam o technologię.

0

Od warswty użytkownika oczekuję tylko kilku przycisków, pól do wpisywania oraz skrótów klawiszowych.
[...]
na UI nie chcę tracić dużo czasu, dlatego pytam o technologię

No to wydaje mi się (napiszę to po raz ostatni, bo nie ma sensu w kółko klepać tego samego), że Lazarus będzie idealną opcją w Twoim przypadku. Zresztą, skoro UI to jest sprawa trywialna i wtórna, to możesz sobie to pisać w darmowej Delphi Community, a potem przenieść to Lazarusa i wtedy budować na Linuksa i Windowsa. Jeśli zapakujesz swoją logikę do osobnego modułu, to potem wszystko sprowadzi się do dodania tego modułu do uses Twojego projektu oraz podpięcia wywołań funkcji z tego modułu w reakcji na wciśnięcia przycisków przez użytkownika.

3

Jeżeli taka aplikacja nie ma nic hardcorowego zrobić to może QT? C++ nie jest łatwy, ale jak coś umiesz z C++ to QT takie coś szybko zakodzisz.

0

Tak naprawdę szybko to chyba nadal góruje nad wszystkim WinForms, ale oczywiście siłą rzeczy target to Windows.

Jeśli chcesz wykorzystać zwinność i uniwersalność HTML/CSS to wspomniany już Electron lub podobne rozwiązania.

Warto też sprawdzić .Net MAUI, Zarówno wszystkie zalety (i wady) C# i .Net, jak i multi-platform. Dodatkowo nie jest to przestarzała technologia jak WinForms czy Java Swing/FX, a wręcz przeciwnie.

0

Parę dni temu robiłem research w jaki sposób można zrobić apkę w C#, biorąc pod uwagę Windows App SDK (WinUI3 / dawniej Project reunion), MAUI (korzysta z winappsdk), Uno (korzysta z WinUI2, da się teoretycznie pogodzić z WinAppSDK) i stare WPF / WinForms.
W nowym MAUI masz template żeby osadzić po prostu stronę blazora w aplikacji. Możesz się z nią łatwo komunikować i łączyć z natywnymi wywołaniami systemowymi. Czyli tak naprawdę masz aplikacje webową osadzoną w aplikacji, ale można to zrobić 3 kliknięciami i masz ogarnięte wszystko od maca, przez androida, iphona i na windowsie kończąc. No właśnie kończąc - bo obsługi linuksa oficjalnej nie ma, została zostawiona społeczności i trzeba się dodatkowo napracować, a obsługa windows też jest połowiczna bo zrobienie zwykłej aplikacji unpackaged jest jeszcze niemożliwe w wersji stabilnej; teoretycznie możliwe w wersji preview, ale mi się nie udało tego ze sobą pogodzić. W preview nie ma jeszcze obsługi designera (ale w sumie nie jest potrzebna bo hot reload). Nie ma obsługi trimmed ani self contained application, ogólnie wszystko jest rozkopane i w powijakach.

Moje wnioski są takie że obecnie najlepiej użyć starych technologii WPF do windowsa i osobno apkę w Uno dla reszty lub MAUI jeśli nie przeszkadza Ci pakowanie appki w msix, zmniejszone uprawnienia i duży rozmiar (minimum 100MB). Albo poczekać na kolejne releasy MAUI / Uno / Windows APP Sdk żeby mieć wszystko w jednym.
WinForms bym odpuścił bo ciężej przenieść na inne platformy.
Na bieżącą chwilę do "zwykłej" appki która nie musi być super wydajna, nie przetwarza dużej ilości danych i nie musi się jakoś specjalnie odnosić do systemowych api wybrałbym electron.
Przykładem dobrej aplikacji w electron jest visual studio code, ale każdy chyba zauważy że nie jest zbyt szybki a pliki o wadze 3 MB uznaje za ogromne i pyta czy na pewno chcemy je otworzyć.

TomRiddle napisał(a):

Ale serio, jakie to ma znaczenie co ona będzie robić? :D

ma bardzo duże. Do większości zastosowań electron jest idealnym rozwiązaniem, ale na program do obróbki grafiki / muzyki / video, klient poczty, czy komunikator się średnio nadaje. To w zasadzie kolejny odpalony google chrome. parę takich apek i po ramie

0
TomRiddle napisał(a):

Ale serio, jakie to ma znaczenie co ona będzie robić? :D

ma bardzo duże. Do większości zastosowań electron jest idealnym rozwiązaniem, ale na program do obróbki grafiki / muzyki / video, klient poczty, czy komunikator się średnio nadaje. To w zasadzie kolejny odpalony google chrome. parę takich apek i po ramie

Nie, nie wydaje mi się.

Odpowiednie zarządzanie ładowaniem zasobów i nie powinno być problemem.

Myślę że ludzie pytają co będzie robić apka albo z ciekawości, albo żeby dopasować pomysł pod technologię którą zaproponowaliśmy, a ja już pisałem kryteria na jakich mi zależy.

Szybki początkowy development, prostu UI, buttony, text fieldy i skróty klawiszowy, aplikacja na desktopa na Windows, jak się da małym kosztem to też może być na linux/unix.

To są jedyne kryteria jakie wchodzą w grę, inne, jak perofrmance, albo apka mobilna nie ma żadnego znaczenia dla mnie.

0
0xmarcin napisał(a):

Przymierzam się do napisania aplikacji desktopowej, którym głównym targetem będzie Windows

WinForms, zerowy próg wejścia przeciągasz guziki na formatkę i już, działa. Dużo darmowych kontrolek. W WPF trzeba się trochę namęczyć żeby ogarnąć stylowanie i inny crap.

No nie wiem, a jak jest z responsywnością tych kontrolek?

Czy to nie będzie tak że jak je położę, a potem zmienię rozmiar okna to się albo rozjadą albo zostaną tak jak były?

1

Polecam Python + PyQT5 / PySide2 lub nawet PySimpleGUI ;)

0
tom_tom napisał(a):

Polecam Python + PyQT5 / PySide2 lub nawet PySimpleGUI ;)

A da się pod to jakoś łądnie dobrać kolory i style? Tak żebym mógł zmienić łatwo wyglądy kontrolek?

1

+1 dla QT, czy to w Pythonie czy w C++. Jak chcesz żeby to było graficznie bardzo ładne to jeszcze obczaj QML z tej samej stajni.

Wielkich potrzeb edycji stylu nie miałem ale imho jest znośnie, obczaj: https://doc.qt.io/qt-5/stylesheet-examples.html

0
alagner napisał(a):

+1 dla QT, czy to w Pythonie czy w C++. Jak chcesz żeby to było graficznie bardzo ładne to jeszcze obczaj QML z tej samej stajni.

Wielkich potrzeb edycji stylu nie miałem ale imho jest znośnie, obczaj: https://doc.qt.io/qt-5/stylesheet-examples.html

Dzięki za pomysł, obczaję.

3

To ja polecę coś bardziej egzotycznego, ale tylko dlatego, że OP zamieścil pytanie

ale może znacie jeszcze jakieś inne spoko technologie?

Jeśli C++ Ci nie straszny to DearImgui. Leciutka binarka i ładny efekt końcowy, przykład https://github.com/dfeneyrou/palanteer. Z mniej oczywistych plusów - gotowe przykłady kompilacji do WASMa https://floooh.github.io/sokol-html5/imgui-highdpi-sapp.html

Minusy

  • C++
  • Żadnego WYSIWYG - cały wygląd trzeba skodzić w C/C++
  • Inny paradygmat tworzenia GUI - immediate mode
0
several napisał(a):

To ja polecę coś bardziej egzotycznego, ale tylko dlatego, że OP zamieścil pytanie
ale może znacie jeszcze jakieś inne spoko technologie?

Jeśli C++ Ci nie straszny to DearImgui. Leciutka binarka i ładny efekt końcowy, przykład https://github.com/dfeneyrou/palanteer. Z mniej oczywistych plusów - gotowe przykłady kompilacji do WASMa https://floooh.github.io/sokol-html5/imgui-highdpi-sapp.html

Minusy

  • C++
  • Żadnego WYSIWYG - cały wygląd trzeba skodzić w C/C++
  • Inny paradygmat tworzenia GUI - immediate mode

No, dzieki za pomysł, ale raczej nie sądzę żeby C++ się wpisywał w schemat "rapid development", a na tym mi zależy jednak.

1

Progressive Web App.

Zasada działania jest identyczna jak Electron z pewnymi dużymi zaletami, np. zamiast pakowania całego runtime NodeJS i headless chrome używasz runtime przeglądarki.

Do dyspozycji masz wszystkie dostępne frameworki JSowe typu Vue, React, Angular czyli cały Virtual DOM. Skalowanie aplikacji w zależności od rozmiaru monitora, stylowanie w SCSS lub każdym dowolnym innym supersecie CSS. Ogromne zasoby pakietów NPMa.
Możesz dorzucić TypeScript a przy użyciu Web Assembly masz dostęp do niskopoziomowych funkcjonalności i renderu grafiki. Daje to też możliwość napisania strony w połowie w Golangu, inną w C++ a jeszcze inną w C# - tak długo jak dany język wspiera kompilację do modułu WASM.
Apka może działać zarówno w trybie desktopowym - instalowana z web, być wyświetlana jako strona WWW oraz na systemie mobilnym - iOS/Android gdzie działa Chrome.

1

Taki mały update - wczoraj po południu premierę miała stabilna wersja WindowsAppSDK (dawniej project reunion - UWP + Win32) 1.0 gotowa na używanie na produkcji. Główną zmianą było skupienie się na apkach unpackaged czyli natywnych (nie UWP) z dostępem do pełnego api windowsa.

Jeszcze są małe zgrzyty, ale udało mi się to pogodzić z Uno i w kilkanaście minut sklecić hello world ze wspólnym kodem działające na android, linux, windows (unpackaged), windows (uwp), webassembly i teoretycznie na mac i iphone (nie sprawdzę bo trzeba mieć maca i chyba konto deweloperskie).
Jedyny minus jaki obecnie widzę - nie ma jeszcze obsługi trimmingu - aplikacja hello world zajmuje 98MB + oprócz tego wymaga zainstalowania 50MB windowsapp runtime redist = 150MB! Trimming będzie na początku przyszłego roku więc jest szansa że zanim ukończysz aplikację będzie można go użyć, ale runtime się raczej nie zmniejszy.
Drugi minus - zajęło mi to kilkanaście minut tylko dlatego że przy ostatnim researchu już trochę ogarnąłem co z czym się je - uruchomienie tego od zera w trybie unpackaged nie ma jeszcze gotowej templatki i można natrafić po drodze na sporo nic nie mówiących błędów

2

Jeśli aplikacja nie jest jakaś skomplikowana i nie potrzebuje API do jakiś zasobów typu usb/wifi/bl czy jakieś inne rzeczy to tez bym ci radził electron choć sam w nim nigdy nic nie robiłem ale skoro znasz web-owe technologie powinno być szybko jeśli chodzi o prototypowanie a finalny produkt tez nie powinien być zły.

Jeśli jest to coś bardziej wymagającego to mogę ci polecić https://wails.io sam robię w tym aplikacje i pracuje się dobrze.

0
marcio napisał(a):

Jeśli jest to coś bardziej wymagającego to mogę ci polecić https://wails.io sam robię w tym aplikacje i pracuje się dobrze.

Opowiesz coś więcej o tym, wrażenia, problemy, etc?

1

Póki co wrażenia ok, jeśli chodzi o jakieś problemy to mialem problem z performance z wails v1 bo używał starych wersji Webview + słaby support dla różnych api których mi brakowało (nie pamietam dokładnie czego).
Więc praktycznie od razu przepisałem wszystko tak żeby działało z v2-alpha bo interesował mnie na samym poczatku osx. Od wersji v2-beta jest support dla windows/osx jednak brakuje mu kilku rzeczy w tym momencie które były w v2-alpha np: system tray.
Więc czekam aż wszystkie features z alpha-73 będę dostępne w becie dla windows i osx-a żeby zrobić upgrade jeśli da radę.
Jak masz jakieś bardziej precyzyjne pytania postaram ci odpowiedziec jeśli jestes ciekawy to dodam cię do repo na GitHub póki co jest prywatne.

0
marcio napisał(a):

Jak masz jakieś bardziej precyzyjne pytania postaram ci odpowiedziec

No, jestem ciekaw np czy łatwo się pisze testy pod takie aplikacje, czy API jest w miare proste, czy łatwo można dodawać proste rzeczy. Typu czy dodam przycisk/pole do wpisywania w kilka sekund, czy raczję trzeba robić całą biurokrację dookoła? Również eventy.

Noi czy łatwo się załatwia zmianę ułożenia i rozmiarów elementów dla zmiennych szerokości okna.

jeśli jestes ciekawy to dodam cię do repo na GitHub póki co jest prywatne.

No, to byłoby super

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.