Desktop Anwendungen

Hier werden alle anderen GUI-Toolkits sowie Spezial-Toolkits wie Spiele-Engines behandelt.
Antworten
ete
User
Beiträge: 218
Registriert: Montag 19. Februar 2007, 13:19
Kontaktdaten:

Hallo!

Nach 2 Jahren mit wxPython und etliche kleine Programme bin ich etwas angenervt vom Verteilen meiner Tools auf etliche Betriebssysteme, vor allem für Windows. wxPython mag ich wirklich sehr aber es ist einfach zu umständlich geworden alle meine Tools, die wir sehr oft updaten (ständig neue Ideen und Wünsche) , für jeden Benutzer recht zu machen (zu mal ich das eher als Hobby mache). Das Problem ist halt, dass es sich um viele kleine Tools handelt (15-20) und nicht um ein oder zwei große.

Am Liebsten würde ich in der Zukunft auf eine Browser Lösung umsteigen, den hat jeder. Das Problem ist, das manche Tools sehr beliebt sind, weil sie gerade offline laufen (Flugzeug, Meetings ohne Internet etc.). Hinzukommt, das einige Daten der User extrem empfindlich sind (Patent etc.) und diese niemals auf einen Server sein sollten, also brauche ich auch eine offline Lösung (am Besten offline Möglichkeit aber auch Apache o.ä.).

Ich habe gesehen das manche Django in eine offline Version packen. Ist das der Weg oder gibt es da noch etwas einfacheres? Am Liebsten würde ich natürlich meine wxPython Projekte weiterverwenden aber das ist wohl mehr Träumerei.

Hat jemand einen Tip, wie ich das Handhaben kann?

Danke :D
Stefanie
http://www.snowflake-sl.info/index.html
lunar

@ete: Ich sehe irgendwie den Sinn Deines Vorhabens nicht: Eine Lösung mit einem lokalen Django-Server musst Du doch genauso auf jedes Client-System verteilen. Die eigentliche Distributionsarbeit kannst Du mithin nicht vermeiden. Das Aufbereiten der wxPython-Anwendungen für die Distribution ist dagegen nur eine Frage des Toolings und der Automatisierung. Wenn Du die Pakete bisher manuell gebaut hast, dann automatisiere diese Arbeit, beispielsweise mit einem Jenkins-System, welches Pakete automatisch bei jedem Push ins Repository baut.
ete
User
Beiträge: 218
Registriert: Montag 19. Februar 2007, 13:19
Kontaktdaten:

Es kann schon eine Server Lösung sein aber es sollte auch möglich sein eine offline Version zu erstellen, sodass ich nicht 2 Systeme gleichzeitig habe.

Eigentlich bin ich in der letzten Zeit sehr frustriert, weil viele von Windows XP auf 7 umsteigen und es damit etliche Probleme gab. Ich habe alles lösen können aber es hat mich viel Zeit gekostet. Ganz zu schweigen davon, dass ich Mac User bis jetzt elegant ignoriert habe, da ich keinen MAC besitze...
http://www.snowflake-sl.info/index.html
lunar

@ete: Mit wxPython tust Du Dich unter OS X ohnehin schwer :)
Dasix
User
Beiträge: 13
Registriert: Dienstag 8. April 2008, 07:35
Wohnort: Stuttgart

Hallo ete,

erfahrungsgemäß ist es nicht einfach eine Desktopanwendung ins Web auszulagern.

Deine Kunden müssten über einen lokalen Server verfügen um offline Zugriff auf deine Programme zu bekommen.
Natürlich könntest du einen fertig konfigurierten lokalen Server wie XAMPP oder LAMPP verwenden,
müsstest jedoch dennoch für jedes OS ein eigenes Paket binden
und derartige fertige Lösungen sind meistens auch nicht die kleinsten.

Für den Online-Zugriff benötigst du einen entsprechend konfigurierten Webserver,
der regelmäßig geupdatet werden will.
Immerwieder kann es hierbei zu Komplikationen wegen Versions unterschieden geben,
weswegen ein ausweichsserver nicht schlecht wäre um Kunden Downtimes zu ersparen.

Jeder Browser interpretiert JS/CSS unterschiedlich und auch wenn du Libraries wie Dojo oder Jquery Ui verwenden würdest,
solltest du deine Anwendungen auf den gängigen Browsern testen und diese ggf. anpassen...
Hierzu gehört auch der OSX Browser Safari.

Web applikationen unterscheiden sich in einigen Punkten signifikant von Desktop lösungen.
Du müsstest also auch das Design komplett überarbeiten und das Look and Feel neu einschätzen.

Die Probleme würden sich also nur Verlagern und nicht komplett verschwinden.
Du solltest dir eine Liste von Vor und Nachteilen anfertigen
und dir Gedanken über den Aufwand der Aktion machen.
Am Ende weißt du dann ob es sich für deine Zwecke wirklich lohnen würde die Programme
mit einem Lokalen Server neu umzusetzen.

Hoffe ich konnte dir etwas helfen, lG,
ix

Offtopic:
Ich habe erst kürzlich von einer Library gelesen
(Linux Magazin 02/12, Golem http://www.golem.de/1108/85594.html),
die GTK+ programme wie Libre Office als Webanwendungen mit Hilfe von HTML5 ausführen soll.
Das ganze ist bislang noch im Alpha stadium und wurde als "Broadway" bekannt.
lunar

@Dasix: Man braucht keinen Apache, um Python-Webanwendungen aufzuführen. Die Browser-Unterschiede sind auch nicht so dramatisch, da gute Bibliotheken und Toolkits (z.B. jQuery und Bootstrap) die Unterschiede zwischen Browsern abstrahieren.

Das größere Problem ist, dass man eine wxPython letztlich komplett neu schreiben muss, um daraus eine Webanwendung zu bauen.
BlackJack

@ete: Wie sieht denn Dein bisheriges Vorgehen aus? Hast Du das bauen von Installationspaketen/Installern für die verschiedenen Zielplattformen schon automatisiert?
ete
User
Beiträge: 218
Registriert: Montag 19. Februar 2007, 13:19
Kontaktdaten:

@Dasix & lunar

Meine Hauptprogramme würde ich glaube ich nicht umschreiben. Sie sind jetzt ziemlich gut an (leider nur) Windows angepasst und enthalten sehr viele spezifische Sachen, wie spezielle Diagramm Auswertungen etc. Ich bin mir nicht sicher, ob sich das so einfach auf ein Webframework packen ließe.

Aber ich habe relativ viele Programme in den der User nur was in ein Textfeld kopiert, einen Knopf drückt und ein Resultat bekommt. Für solche Mini-Programme wäre eine Server Lösung vielleicht nicht schlecht. Neulich habe ich erst mit einem Datenbank-Abfrage und Ausgabe-Programm angefangen und bin mir immer noch nicht sicher ob wxPython die richtige Wahl dafür war...

In jedem Fall habt ihr Recht, dass die Weblösung nicht alle meine Probleme löst, sie eher verschiebt (bin nicht so der Webexperte).

@BlackJack
Ziemlich unprofessionell, da ich klein angefangen habe. Ich programmiere unter XP. Ich habe mit Windows angefangen, 90% meiner User sind Windows User. Ich bin jetzt eigentlich unter Linux und habe Windows nur als Dualboot wegen meiner Programme. So denke ich die meisten Probleme schon vor dem veröffentlichen lösen zu können. Ich benutze Subversion um von der Arbeit und zu Hause auf denselben Code zuzugreifen. Ist eine Version fertig, packe ich sie mit py2exe in eine Exedatei. Hier kommt die erste Komplikation. Jedes Programm hat seine eigene setup.py mit seinen Wehwehchen (Matplotlib, Reportlab etc.). Läuft alles wie erwartet verteile ich die Programme. Meist funktioniert es auf meinen umliegenden Rechner, bei den Usern oft nicht (in der letzten Zeit wegen Windows 7 Umstellung). Habe ich Glück kann ich das Problem bei mir reproduzieren oder der Kollege sitzt in Reichweite. Dann Debugge ich, wieder eine Exedatei...Habe ich weniger Glück sitzt der Benutzer weit Weg und ich muss versuchen das Problem mit Try and Error zu lösen.

Wie kann ich das vereinfachen?

Ich habe auch so etwas hier gefunden (leider tot aber viele Programme sind mit meinen identisch):
http://www.dnalinux.com/

Wäre so etwas eine Lösung? Wie funktioniert das genau?

Stefanie
http://www.snowflake-sl.info/index.html
lunar

@ete: Ich würde damit anfangen, dass Dual-Boot-System durch eines zu ersetzen, auf dem ausschließlich Linux oder Windows läuft. Das andere System kommt in eine virtuelle Maschine. Das spart Dir viele Wechsel der Arbeitsumgebung.

Der nächste Schritt wäre, das Packen aller Programme zu automatisieren. Mit Jenkins beispielsweise lässt sich relativ schnell und problemlos ein Server konfigurieren, der beim Commit in das Repository automatisch mit py2exe ein Paket baut. Dann erhältst Du zumindest schon mal unmittelbar eine Rückmeldung, ob das Packen überhaupt funktioniert hat, und musst die Pakete nicht mehr selbst erstellen, sondern kannst einfach das aktuelles Paket aus dem Ausgabeverzeichnis von Jenkins kopieren.

Darauf aufbauend kannst Du Jenkins dann weiter konfigurieren, so dass automatisch versucht wird, die resultierende Exe einmal auf einem Standard-Windows-System (ohne Python-Installation, ohne zusätzliche Software, etc.) zu starten. So erhältst Du dann auch unmittelbar Rückmeldung, ob die Exe läuft.

In weiterer Ferne kannst Du auch überlegen, auf Git umzusteigen, und Deinen Kunden partiellen Zugriff auf die Jenkins-Instanz zu geben. Hat ein Kunde dann spezifische Probleme, kannst Du ihm einen eigenen Git-Zweig widmen, und diesen Kunden direkt über die Jenkins-Instanz mit aktuellen und angepassten Versionen Deines Programms versorgen.

Jeden Schritt kannst Du erst mal auch nur für ein bestimmtes Programm, am besten das mit den häufigsten Änderungen, durchführen. Funktioniert alles für ein Programm, kannst Du Dein System basierend darauf Schritt für Schritt auf alle anderen Programme ausdehnen.

Je nachdem, wie oft Du Probleme mit Deinen Programmen hast, wäre es auch sinnvoll, die Fehlerbehebung zu strukturieren (im einfachsten Fall mit öffentlich zugänglichem Issue-Tracker), und vor einer neuen Version Testversionen an ausgewählte, idealerweise technisch kompetente Nutzer zu verteilen.
BlackJack

@ete: Ergänzend zu lunar: Falls Du günstig an die Lizenzen für verschiedene Windows-Versionen kommst, kannst Du auch mehr als ein Windows in virtuellen Maschinen halten. Dann könntest Du mehr Probleme mit verschiedenen Windows-Versionen selber nachvollziehen. Im günstigsten Fall siehst Du ein Problem dann bevor ein Endbenutzer damit konfrontiert wird.
Dasix
User
Beiträge: 13
Registriert: Dienstag 8. April 2008, 07:35
Wohnort: Stuttgart

@lunar
Das liesse sich doch auch mit svn bewerkstelligen ohne auf Git umsteigen zu müssen.
Wenn auch etwas umständlicher.
ete
User
Beiträge: 218
Registriert: Montag 19. Februar 2007, 13:19
Kontaktdaten:

Vielen Dank für die ausführlichen und hilfreichen Antworten!
Ich werde mir Jenkins mal anschauen, dass hört sich nach einer Abseitserleichterung an.

Stefanie :D
http://www.snowflake-sl.info/index.html
lunar

@Dasix: Mit Subversion wäre ein solcher Arbeitsablauf wesentlich umständlicher. Das Verwalten und Zusammenführen von Entwicklungszweigen ist wesentlich aufwendiger. Der Kunde bräuchte Zugriff auf den Subversion-Server, wenn man ihm einen Entwicklungszweig widmen möchte, an dem er auch selbst mitarbeiten darf, was je nach Netzwerkkonfiguration aufwendig bis unmöglich und eigentlich auch nicht gewünscht ist. Man möchte schließlich nicht jedem Kunden Zugriff auf den zentralen Entwicklungsserver geben.

Manches geht auch gar nicht: Man kann beispielsweise nicht mal schnell eine Kopie des Repos auf einem Laptop oder zur Not auf einem USB-Stick mit zum Kunden nehmen, um direkt vor Ort ein Problem zu beheben. Bei Subversion braucht man immer Zugriff auf den zentralen Server, um zu commiten, was je nach Kundenfirewall unmöglich sein kann.
BlackJack

Nur so als Ergänzung: Neben Git gibt es auch andere verteilte Versionsverwaltungen. Mercurial zum Beispiel. :-)
Antworten