Programmierprojekt ohne fundierte Fachkenntnisse

Hallo, ich bin neu hier und mein Problem besteht Grundlegend darin, dass ich eine Software programmieren will, welche ich auch schlussendlich für schmale Mark verkaufen möchte. Es handelt sich dabei um ein Programm, welches für jede Berufsgruppe interessant ist und meines momentanen Wissensstandes nicht so schwer zu realisieren sein sollte.
Das mit der Gewerbeanmeldung usw. ist meiner Meinung nach erst später zu klären, erstmal soll das Programm stehen/lauffähig sein oder sehe ich das eventuell falsch?

Nun bin ich aber kein gelernter Programmierer, ich habe lediglich mehr oder weniger grundlegenede Erfahrungen in den Programmiersprachen: Basic, VBasic, Java und Delphi.

Da ich bis jetzt, wenn ich mal etwas Programmiert habe, die meisten mehr oder weniger kleinen Projekte in VBasic geschrieben habe und da folgend in dieser Sprache die meisten „Erfahrungen“ sammeln konnte, auch mit der Entwicklungsumgebung vertrauter bin und diese mir ebenfalls mehr „zusagt“ als z.B. die von Java, denke ich daran dieses Projekt in VB.net 4.5 zu programmieren.

Zu meinen „bewegendsten“ Fragen die mir jetzt so auf die schnelle einfallen:

1 Lauffähigkeit auf anderen Systemen

Ist das .net Framework auch auf Apple-Systemen lauffähig?
Falls Ja, nur in einer VM oder gibt es auch andere Möglichkeiten ?

2 Lizenzmodell, Produktlizenz, Installationsroutine und Updates

Ich dachte mir das so, dass das gekaufte Produkt nur auf einem Rechner lauffähig sein soll.
Ich hatte mir das so gedacht, dass ich eventuell selbst einen Programmschlüssel generiert, welcher u.a. aus seiner grundlegende Hardware generiert wird. Diesen Schlüssel schickt er mir dann per E-Mail zu und bekommt einen Aktivierungsschlüssel mit dem er das Programm folgend betreiben kann. Updates gibt es wenn dann nur ein Jahr lang. (z.B. Version Jahr 2012 bis 2013 Version 2014 bis 2015 usw…)

a: Könnt Ihr mir ein Setupprogramm empfehlen oder sollte ich ein eigenes schreiben?

b: sollte oder ist es angebracht, dass ich selbst einen Algorithmus für die Produktlizenz schreibe oder gibt es da „sichere“, vorgefertigte Alternativen?
Soll ich vielleicht diese aus den Setupprogrammen verwenden (Advanced Repackager, b1g…)

c: wäre das Modell vertretbar?

d: sonstiges worauf man achten sollte ?

3 Dateihandling

Meine Gedanken schweifen da so in die Richtung… *Hust
Ich weiß und denke das man da Datenbanken nehmen kann und das diese eventuell auch angemessen wären, aber damit habe ich nicht viel Erfahrung sammeln können außer ein paar Lese- und Schreibzugriffe einer mySQL… ich will auch nicht, dass sich dann jeder Benutzer noch einen DBS und oder DBMS installieren muss usw. oder wie funktioniert das grundlegend (am Beispiel in Vb.net)?
So dachte ich mir, ich arbeite mit Arrays (statische, dynamische und temporäre), welche ihre Daten in Binärer Form verschlüsselt in dem Datenverzeichnis ablegen oder halt dann je nachdem nach jedem Programmstart beziehen und gegebenfalls beim manipulieren neu schreiben.

a: Umgang mit Benutzerbezogenen, dynamischen und Programmbezogenen, statischen Werten welche jedoch für Updateroutinen verändert werden können.
Wie wird sowas i.d.R. verwaltet ?

b: Schutz der Datensätze
Wie kann man sich am einfachsten absichern, dass Datensätze nicht zwischen den einzelenen Personen getauscht werden können ? Ich habe mir das so vorgestellt, da ich ja die Datensätze verschlüsselt Binär im Verzeichnis ablege, ich in eine Spalte des zu entschlüsselnden Arrays eine Indentifikationnummer einbaue, welche dazu dient, das entsprechende Array zu indentifizieren.

c: Sind die Programminternen Variablen sicher ? kann man diese verwenden? (my.settings.*)

d: Ist es üblich in den Ressourcenpool Bilder u.ä. hinzuzufügen?

e: Wie läuft das mit den Updateroutinen ab in Bezug auf das Datenmanagement? Muss ich da bestimmte Datensätze irgendwie auf eine bestimmte Art auslagern oder wie handhabt man das ?

PS: Ich habe unendlich viele Fragen aber diese brennen am meisten…

PSS: Rechtschreibfehler dürft Ihr behalten.

PSSS: Danke schonmal denjenigen, der mir helfen will :wink:

MfG,
Kartoffel

Hallo Kartoffel86,

ich probier mal es mal.

Wenn du mit deiner Software Geld verdienen möchtest, sollte sie bestimme Anforderungen erfüllen, dazu google mal: Was ist Software Qualität?

Nun bin ich aber kein gelernter Programmierer, ich habe
lediglich mehr oder weniger grundlegenede Erfahrungen in den
Programmiersprachen: Basic, VBasic, Java und Delphi.

VBasic ist wohl einfach nicht tot zukriegen :wink:…würde ich jetzt nicht empfehlen.

1 Lauffähigkeit auf anderen Systemen

Dann solltest du Java wählen, was mich von der Performance zwar nicht vom Hocker haut, aber eine sehr mächtige Sprache ist und Plattform unabhängig.

Ist das .net Framework auch auf Apple-Systemen lauffähig?
Falls Ja, nur in einer VM oder gibt es auch andere
Möglichkeiten ?

Jein, es gibt zwar auch ein lauffähiges net-Framework für Linux und Apple, welches sich Monoframework nennt, jedoch z.B kein WPF kann, die Anwendungslogik und darunter liegende Schichten kannst du in C# programmieren, wie das jedoch bei der View aussieht, weiss ich jetzt nicht, da die winform-Bibliothek nicht für Apple oder Linux verfügbar ist.

2 Lizenzmodell, Produktlizenz, Installationsroutine und
Updates

Ich dachte mir das so, dass das gekaufte Produkt nur auf einem
Rechner lauffähig sein soll.
Ich hatte mir das so gedacht, dass ich eventuell selbst einen
Programmschlüssel generiert, welcher u.a. aus seiner
grundlegende Hardware generiert wird.

Und wenn der Kunde sich einen neuen PC holt weil sein alter kaputt ist, funktioniert das erworbene Programm nicht mehr bei ihm, also keine so gute Idee.

Diesen Schlüssel schickt
er mir dann per E-Mail zu und bekommt einen
Aktivierungsschlüssel mit dem er das Programm folgend
betreiben kann. Updates gibt es wenn dann nur ein Jahr lang.
(z.B. Version Jahr 2012 bis 2013 Version 2014 bis 2015
usw…)

Du kannst dir mal anschauen, wie die Leute das bei Cubase gelöst haben, ich weiss jetzt nicht, ob Cubase4 mittlerweile geknackt ist, aber die sind (nach meinem Wissenstand) so mit die besten auf diesem Gebiet.

Eine einfachere Lösung wäre eventuell, du vergibst eine Schlüsseldatei bei Kauf, welche bei jedem Start deines Programms, diese auf deinen Schlüssel-Server vergleicht und nur bei Übereinstimmung, das Programm startet, der Nachteil der Kunde braucht für jeden Programmstart eine Internetverbindung (VisualParadigma hat das so gelöst)

a: Könnt Ihr mir ein Setupprogramm empfehlen oder sollte ich
ein eigenes schreiben?

Unter Windows kenn ich jetzt nur InnoSetup unter Mac liegt eins den Developer-Tools bei (PackageManager glaube ich) habe aber beide kaum getestet.

3 Dateihandling

Meine Gedanken schweifen da so in die Richtung… *Hust
Ich weiß und denke das man da Datenbanken nehmen kann und das
diese eventuell auch angemessen wären, aber damit habe ich
nicht viel Erfahrung sammeln können außer ein paar Lese- und
Schreibzugriffe einer mySQL… ich will auch nicht, dass sich
dann jeder Benutzer noch einen DBS und oder DBMS installieren
muss usw. oder wie funktioniert das grundlegend (am Beispiel
in Vb.net)?
So dachte ich mir, ich arbeite mit Arrays (statische,
dynamische und temporäre), welche ihre Daten in Binärer Form

Du meinst Serilisation (Daten werden in binärer Form gespeichert, um später wiederverwendet zu werden)? Versteh ich dich richtig und sie sollen zusätzlich:

verschlüsselt in dem Datenverzeichnis ablegen oder halt dann
je nachdem nach jedem Programmstart beziehen und gegebenfalls
beim manipulieren neu schreiben.

Wenn ja? Das mit der Verschlüsselung ist nicht so ne gute Idee (kostet Zeit, Performance usw.) Nimm Datenbanken. Sei dir bewusst das Arrays Speicher allozieren und jedes malloc kostet, abhängig wieviele Daten du später hast, kann das echt schief gehen.

a: Umgang mit Benutzerbezogenen, dynamischen und
Programmbezogenen, statischen Werten welche jedoch für
Updateroutinen verändert werden können.
Wie wird sowas i.d.R. verwaltet ?

Weiss nicht was du hiermit genau meinst.

b: Schutz der Datensätze
Wie kann man sich am einfachsten absichern, dass Datensätze
nicht zwischen den einzelenen Personen getauscht werden können
?

Weiss auch nicht was du meinst, absichern tust du deine Daten in dem Programm in dem man sie kapselt.

Ich habe mir das so vorgestellt, da ich ja die Datensätze
verschlüsselt Binär im Verzeichnis ablege, ich in eine Spalte
des zu entschlüsselnden Arrays eine Indentifikationnummer
einbaue, welche dazu dient, das entsprechende Array zu
indentifizieren.

Also eine Hashmap.

c: Sind die Programminternen Variablen sicher ? kann man diese
verwenden? (my.settings.*)

Wie meinst du das, wenn du sie als private deklarierst, und nur über setter und getter verfügbar machst schon, oder was verstehst du unter sicher?

d: Ist es üblich in den Ressourcenpool Bilder u.ä.
hinzuzufügen?

e: Wie läuft das mit den Updateroutinen ab in Bezug auf das
Datenmanagement? Muss ich da bestimmte Datensätze irgendwie
auf eine bestimmte Art auslagern oder wie handhabt man das ?

Sorry aber auch Punkt d und e versteh ich nicht ganz auf was du hinaus möchtest.

Gruß XXD

Hallo,

ich geh mal nicht auf alle Fragen ein, weil mein Vorposter schon recht gründlich war.

Darf man fragen was dein Programm macht, nur so ganz grob?

Du willst ja ganz schönen Aufwand treiben, was die Sicherheit betrifft. Warum z.B. sollen die Nutzer ihre Daten nicht untereinander tauschen dürfen? Ich würd das Lizenzmodell ein wenig anders gestalten. Vergib doch deine Solftware als Freeware und bitte nebenbei um eine Spende. Das findet man mittlerweile ziemlich oft.

So, noch kurz was technisches: Wenn du bei Winforms bleibst, ist es okay VB.Net zu verwenden du must nur aufpassen, dass du keine neueren Sachen verwendest, wie z.B. LINQ. Die Binaries sind auch einfach mit MONO auf dem anderen System ausführbar ohne Neucompilierung.
Du must nur drauf achten, dass z.Bsp. unter evtl. Linux ein breiterer Schriftsatz verwendet wird. Das ist leider von Distribution zu Distribution unterschiedlich, aber das kannst du ja aber mit einer VM leicht ausprobieren.

Wenn du schon unbedingt eine Datenbank benutzen Willst, dann nimm SQLite. Das ist Dateibasiert und der Anwender muss nicht erst ein Datenbanksystem installieren.

Hallo,

Ich dachte mir das so, dass das gekaufte Produkt nur auf einem
Rechner lauffähig sein soll.
Ich hatte mir das so gedacht, dass ich eventuell selbst einen
Programmschlüssel generiert, welcher u.a. aus seiner
grundlegende Hardware generiert wird. Diesen Schlüssel schickt
er mir dann per E-Mail zu und bekommt einen
Aktivierungsschlüssel mit dem er das Programm folgend
betreiben kann.

mit derartigen Restriktionen gewinnt man sicher keine Kunden sondern mach sich total unbeliebt. Solche Frechheiten erlauben sich nicht mal Microsoft und Adobe…

Beste Voraussetzungen für einen erfolglosen Start als Softwareanbieter.

S.J.

Zuerst möchte ich mich für die Antworten von euch bedanken!
@TechPech

Was ist Software Qualität? ...

Ist mir schon bekannt alles aus der Schule bekannt… Schnittstellen, Erweiterbarkeit, Portabilität, Modularität, Benutzerfreundlichkeit ….blablabla ^^

Dann solltest du Java wählen, was mich von der Performance zwar nicht vom Hocker haut, aber eine sehr mächtige Sprache ist und Plattform unabhängig.

Ist mir schon bewusst bezüglich der Plattform-Unabhängigkeit, ebenfalls wegen der Performance da die Suppe immer durch den Interpreter rasselt… Nur die IDE ist so Fehlerbehaftet und unausgereift, dass es für mich persönlich noch kein schönes “arbeiten“ darstellt.

Jein, es gibt zwar auch ein lauffähiges net-Framework für Linux und Apple, welches sich Monoframework nennt, jedoch z.B kein WPF kann, die Anwendungslogik und darunter liegende Schichten kannst du in C# programmieren, wie das jedoch bei der View aussieht, weiss ich jetzt nicht, da die winform-Bibliothek nicht für Apple oder Linux verfügbar ist.

AHA, danke für die in Info!

Cubase
Ist schon zerlöchert…

Eine einfachere Lösung wäre eventuell, du vergibst eine Schlüsseldatei bei Kauf, welche bei jedem Start deines Programms, diese auf deinen Schlüssel-Server vergleicht und nur bei Übereinstimmung, das Programm startet, der Nachteil der Kunde braucht für jeden Programmstart eine Internetverbindung (VisualParadigma hat das so gelöst)

Hmm… das ist nicht sonderlich Benutzerfreundlich, zudem mein Programm bis auf die Updates grundlegend keine Netzanbindung benötigt aber eine eventuelle Möglichkeit…

a: Umgang mit Benutzerbezogenen, dynamischen und
Programmbezogenen, statischen Werten welche jedoch für
Updateroutinen verändert werden können.
Wie wird sowas i.d.R. verwaltet ?
Weiss nicht was du hiermit genau meinst.

Meine Frage bezieht sich auf die Strukturierung der Daten, nach dem Motto: Benutzerbezogene Daten werden immer in einer extra Datei angelegt welche Binär vorliegt, dass Programm liest diese folgend nach Muster xy ein und verwaltet diese so und so.
z.B. soll mein Programm ein kleines Lexikon enthalten so der Benutzer bestimmtes nachlesen kann, sie wird so etwas Datentechnisch gemanagt?

b: Schutz der Datensätze
Wie kann man sich am einfachsten absichern, dass Datensätze
nicht zwischen den einzelenen Personen getauscht werden können
? 
Weiss auch nicht was du meinst, absichern tust du deine Daten in dem Programm in dem man sie kapselt. 

Ja, so würde ich das mit den Daten regeln, die während der Laufzeit der Programmes verwaltet werden, wie jedoch mit denen wo nach der Verwaltung in einem Datensatz gespeichert werden um nach einem erneuten Start des Programmes zur Verfügung zu stehen…?

c: Sind die Programminternen Variablen sicher ? kann man diese
verwenden? (my.settings.\*)
Wie meinst du das, wenn du sie als private deklarierst, und nur über setter und getter verfügbar machst schon, oder was verstehst du unter sicher? 

Ja mit z.B. Salamander kann man die exe oder librarys „“sniffen“ wenn ich jetzt in my.settings den Aktivierungscode von meiner Software habe…?

d: Ist es üblich in den Ressourcenpool Bilder u.ä.
hinzuzufügen?

e: Wie läuft das mit den Updateroutinen ab in Bezug auf das
Datenmanagement? Muss ich da bestimmte Datensätze irgendwie
auf eine bestimmte Art auslagern oder wie handhabt man das ?
Sorry aber auch Punkt d und e versteh ich nicht ganz auf was du hinaus möchtest. 

Ja in der IDE (VS) gibt es doch u.a. die Möglichkeit seinem Projekt Ressourcen hinzuzufügen, Bilder, Töne… muss man diese dem Projekt dann trotzdem noch extern hinzufügen, sprich in deinem Programmverzeichnis einen Ordner anlegen wo man diese Daten unterbringt oder werden die mit in die exe des Programmes hinzugefügt oder lagert man das in einer .dll aus wo man diese dann binär abspeichert ?

@ Mimon
Naja, so grob :wink:

Darf man fragen was dein Programm macht, nur so ganz grob?
Der Benutzer meldet sich an, muss einen Fragebogen ausfüllen, anhand dessen wählt das Programm das passende für Ihn aus, der Benutzer verfährt dann danach und wird vom Programm unterstützt.Er bekommt Tipps und zur entsprechenden Zeit oder wird auf bestimmte Sachen hingewiesen. Je nach ausgelösten Ereignis. Er hat zudem ein Logbuch, Lexikon, Statistiken und Pläne.

Du willst ja ganz schönen Aufwand treiben, was die Sicherheit betrifft. Warum z.B. sollen die Nutzer ihre Daten nicht untereinander tauschen dürfen? Ich würd das Lizenzmodell ein wenig anders gestalten. Vergib doch deine Solftware als Freeware und bitte nebenbei um eine Spende. Das findet man mittlerweile ziemlich oft.

Punkt Sicherheit:
Ja ich habe mit in dem Bereich u.a. etwas verstärkt aufgehalten…und ich möchte nicht das Mein Programm den ersten in die Finger fällt wo es Mausert und jeder bekommt es für umme.
Punkt Freeware und Spende: Ist meiner Meinung nach Unsinn da jeder “Arsch“ heute alles für um sonst haben will und nachdem er das bekommen hat, was er benötigt, nixmehr für bezahlt. Zudem ist die Software im Verhältnis günstig und erfüllt zudem einen Nutzen was bei der “Konkurrenz“ überwiegend nicht zu erwarten ist.

So, noch kurz was technisches: Wenn du bei Winforms bleibst, ist es okay VB.Net zu verwenden du must nur aufpassen, dass du keine neueren Sachen verwendest, wie z.B. LINQ. Die Binaries sind auch einfach mit MONO auf dem anderen System ausführbar ohne Neucompilierung. 
Du must nur drauf achten, dass z.Bsp. unter evtl. Linux ein breiterer Schriftsatz verwendet wird. Das ist leider von Distribution zu Distribution unterschiedlich, aber das kannst du ja aber mit einer VM leicht ausprobieren.

Danke für den Tipp!
@ESSJOTT

Hallo, Ich dachte mir das so, dass das gekaufte Produkt nur auf einem
Rechner lauffähig sein soll.
Ich hatte mir das so gedacht, dass ich eventuell selbst einen
Programmschlüssel generiert, welcher u.a. aus seiner
grundlegende Hardware generiert wird. Diesen Schlüssel schickt
er mir dann per E-Mail zu und bekommt einen
Aktivierungsschlüssel mit dem er das Programm folgend
betreiben kann. 



mit derartigen Restriktionen gewinnt man sicher keine Kunden sondern mach sich total unbeliebt. Solche Frechheiten erlauben sich nicht mal Microsoft und Adobe...

Beste Voraussetzungen für einen erfolglosen Start als Softwareanbieter. 

IE:IQ = ±60
Zudem nicht Wahrheitsgemäß, oberflächlich und voreingenommen.
Datenmüll…

MfG Kartoffel

Hallo Kartoffel86,

kann es mir jetzt doch nicht ganz verkneifen.

Ist mir schon bekannt alles aus der Schule bekannt…
Schnittstellen, Erweiterbarkeit, Portabilität, Modularität,
Benutzerfreundlichkeit ….blablabla ^^

Natürlich, wie konnte ich das übersehen, das wird ja heute im vorbeigehen in der Schule gelehrt :wink:

Nur die IDE ist so Fehlerbehaftet und
unausgereift, dass es für mich persönlich noch kein schönes
“arbeiten“ darstellt.

Meinst du Eclipse damit? Wenn ja, ein nicht vorhandenes Wissen zum Umgang damit, mag dann zu Fehlern führen und du möchtest doch nicht jetzt, das Prinzip von Eclipse gegenüber Visual Studios stellen und auf das Thema Stabilität anspielen?

Cubase
Ist schon zerlöchert…

Ich weiss ja nicht wo du deine Infos herbeziehst, und habe mal kurz GROB im Usenet geschaut, aber dort gibt es kein Cubase 4 und wenn es das dort nicht gibt, ist es bis heute nicht geknackt.

Meine Frage bezieht sich auf die Strukturierung der Daten,
nach dem Motto: Benutzerbezogene Daten werden immer in einer
extra Datei angelegt welche Binär vorliegt, dass Programm
liest diese folgend nach Muster xy ein und verwaltet diese so
und so.
z.B. soll mein Programm ein kleines Lexikon enthalten so der
Benutzer bestimmtes nachlesen kann, sie wird so etwas
Datentechnisch gemanagt?

Das habt ihr doch alles in der Schule gelernt :wink:

Ja, so würde ich das mit den Daten regeln, die während der
Laufzeit der Programmes verwaltet werden, wie jedoch mit denen
wo nach der Verwaltung in einem Datensatz gespeichert werden
um nach einem erneuten Start des Programmes zur Verfügung zu
stehen…?

Serialisation, Deserialisation!

Ja mit z.B. Salamander kann man die exe oder librarys
„“sniffen“ wenn ich jetzt in my.settings den Aktivierungscode
von meiner Software habe…?

Meinst du den Datei-Manager Altap Salamander?

Ja in der IDE (VS) gibt es doch u.a. die Möglichkeit seinem
Projekt Ressourcen hinzuzufügen, Bilder, Töne… muss man diese
dem Projekt dann trotzdem noch extern hinzufügen, sprich in
deinem Programmverzeichnis einen Ordner anlegen wo man diese
Daten unterbringt oder werden die mit in die exe des
Programmes hinzugefügt

Probier es doch einfach schnell mal aus, Bild zu Resource hinzufügen -> exe Erstellen -> starten.

oder lagert man das in einer .dll aus
wo man diese dann binär abspeichert ?

Sicherlich nicht.

Gruß XXD

Moin

Ja in der IDE (VS) gibt es doch u.a. die Möglichkeit seinem
Projekt Ressourcen hinzuzufügen, Bilder, Töne… muss man diese
dem Projekt dann trotzdem noch extern hinzufügen, sprich in
deinem Programmverzeichnis einen Ordner anlegen wo man diese
Daten unterbringt oder werden die mit in die exe des
Programmes hinzugefügt

geht beides, entweder das setup programm macht das, oder man includet die dingers in der exe . So kann man denn auch schon seine exe fett machen , auch wenn nur 1% gerade gebraucht wird von 250 zu ladenden MB :smile: Da wird der kurzstart zum marathon .