Harlequin: Überlegungen zu (Übungs-)Projekt

Yerf!

Aufgrund der aktuellen Arbeitssituation kommt bei mir mal wieder der Gedanke auf mich zu Übungs- und Weiterbildungszwecken auch privat wieder mehr mit Softwareentwicklung zu beschäftigen...

Allerdings steh ich nun vor der Frage, wie ich das am besten aufziehe, damit ich den meisten Lerneffekt habe und auch zu einem guten Ergebniss komme, das ich auch verwenden kann.

Ziel wäre ein CMS / Communityportal mit Erweiterung zum Online-Browsergame. Ohne großen Anspruch auf große Nutzerzahlen, aber zumidnest einer sauberen und erweitrbaren Softwarebasis dafür. Mir geht es vor allem darum Erfahrngen mit einem größeren Projekt und der internen Struktur und den zugehörigen Designpatterns zu sammeln.

Aber wie fange ich am besten an? Mir fallen spontan 3 Möglichkeiten ein:

1.) Von Null an alles selber aufbauen. Dabei auf theoretische Werke zum Softwaredesign zurückgreifen und das Wissen umsetzen.

Ist das alleine schaffbar? Welche Bücher, Webseiten, etc. sind empfehlenswert für den Einstieg?

2.) Auf ein Framework aufsetzen, das einen schon einiges abnimmt und die Grobstruktur vorgibt. Würde einiges an Arbeit ersparen legt aber auch das Design schon teilweise fest.

Welches Framework könnte man nehmen und welche Literatur ist zum lernen empfehlenswert?

3.) Ein fertiges CMS/Portal mit offener Schnittstelle und Code nehmen und abschauen wie die das aufgebaut haben wärend ich es Erweitere und an meine Bedürfnisse anpasse.

Aber auch hier weider die Frage: Welches wäre geeignet und hat eine gute Dokumentation? Taugt der Weg zum lernen, sprich kann man aus einem fertigen Programm sich etwas vom Design abschauen?

Es bleibt auch noch der Punkt der Programmiersprache die das ganze einschränkt... mit C# / ASP.NET kann ich am besten umgehen, aber dafür einen Hoster zu finden wird schwierig (wenns günstig sein soll) und Mono soll wohl nicht ganz unproblematisch sein, oder?

Mit PHP werd ich nicht so recht warm, auch wenn es recht verbreitet ist... mir wäre Python eigentlich lieber.

Mit Java hatte ich auch schon einigen Kontakt, auch das wäre eine vorstellbare Alternative.

Habt ihr ein paar Ideen und Vorschläge für mich? Welchen Weg würdet ihr gehen?

Gruß,

Harlequin

--
RIP --- XHTML 2
nur die Besten sterben jung
  1. hi,

    Habt ihr ein paar Ideen und Vorschläge für mich? Welchen Weg würdet ihr gehen?

    Eigenbau. Zuhause im stillen Kämmerlein kannste alles machen. Ich habe vor Jahren damit begonnen, meine Website auf OOP umzustellen und setze dabei Stück für Stück immer wieder neue Ideen um, was das Management von Content betrifft.

    Ein Design Patterns war nicht vorgegeben, im Nachhinein kann ich jedoch feststellen, dass ich das MVC-Model gut umgesetzt habe, kombiniert mit einem Singleton/Factory.

    Serverseitig gibt es ersteinmal den Objektmanager. Der prüft bei jedem Request, ob es dazu einen im CMS konfigurierten Eintrag gibt, damit wird dann die Response erstellt. Vieles wird über die Attribute geregelt, u.a. auch der Content-Type; Charset und die Berechtigungen.

    Dann hat jedes URL-Response-Objekt, sofern Parameter erlaubt sind (über die Benutzergruppe) einen eigenen Controler (als Method). Jedes Objekt hat Attribute mit denen feststeht, wo beim Publizieren (Lokal->upload->Server) die Source liegt für den Body. Ein weiteres Attribut legt die Methode zur Darstellung der Response fest, z.B. ob dazu ein Template geladen wird oder native HTML oder Text oder... je nach Content-Type. Alle Bodies einschließlich der Templates liegen serverseitig im ORM mit allen zugehörigen Attributen. Darauf sitzt ein Fulltext-Index.

    Multi-Userfähig ist das Publizieren, die Berechtigungen sind gruppenweise an URLs bzw. virtuelle Verzeichnisse gekoppelt, das steht in der Konfiguration, letztere ist vollständig von der Programmlogik getrennt.

    Der Objektmanager läuft über einen Loader, das kann ein CGI-Script sein (isses z.Z.) oder ein FastCGI-Script. Anstelle eines CGI-Loader ist auch ein Response-Handler als mod_perl möglich.

    Das ORM ist derzeit MySQL, die Objekte liegen jedoch auch redundant in einer Binärdatei auf dem Server.

    Alles Eigenbau. Ist schön geworden ;)

    Viel Spaß weiterhin.
    Hotti

    1. Hörst du auf uns das immer und immer wieder zu erzählen (obwohl es nur ganz entfernt was mit der Frage zu tun hat), wenn wir dir sagen wie unglaublich toll du das alles gemacht und entwickelt hast? Wenn ja: einfach spitze, wie du das gemacht hast! Ich komme aus dem Staunen nicht mehr raus und huldige dir!

      Hot

      1. Hallo,

        Kekse scheinen zumindest nicht zu wirken.

        Grusz,
        Christopher

    2. Yerf!

      Eigenbau. Zuhause im stillen Kämmerlein kannste alles machen. Ich habe vor Jahren damit begonnen, meine Website auf OOP umzustellen und setze dabei Stück für Stück immer wieder neue Ideen um, was das Management von Content betrifft.

      Ist schon eine verlockende Idee. ich befürchte aber, das ich dabei zu lange brauch um irgendwie vorwärts zu kommen... und die Gefahr sich komplett zu verrennen ist irgendwo auch gegeben (zugegebener Maßen auch bei den anderen Vorgehensweisen...)

      Gruß,

      Harlequin

      --
      RIP --- XHTML 2
      nur die Besten sterben jung
      1. moin,

        Eigenbau. Zuhause im stillen Kämmerlein kannste alles machen. Ich habe vor Jahren damit begonnen, meine Website auf OOP umzustellen und setze dabei Stück für Stück immer wieder neue Ideen um, was das Management von Content betrifft.

        Ist schon eine verlockende Idee. ich befürchte aber, das ich dabei zu lange brauch um irgendwie vorwärts zu kommen...

        Wieso? Ich habe doch geschrieben, wie ich das gemacht habe. Überlegt habe ich auch lange, aber auf der Tastatur ist das zügig umgesetzt.

        Hotti

  2. Hi!

    Allerdings steh ich nun vor der Frage, wie ich das am besten aufziehe, damit ich den meisten Lerneffekt habe und auch zu einem guten Ergebniss komme, das ich auch verwenden kann.

    Da gibt es kein Patentrezept. Einige studieren Informatik und könenn hinterher keine Zeile programmieren, andere erarbeiten sich alles im Selbststudium. Und dazwischen als auch außerhalb gibt es jede Menge weitere Wege.

    Ziel wäre ein CMS / Communityportal mit Erweiterung zum Online-Browsergame. Ohne großen Anspruch auf große Nutzerzahlen, aber zumidnest einer sauberen und erweitrbaren Softwarebasis dafür. Mir geht es vor allem darum Erfahrngen mit einem größeren Projekt und der internen Struktur und den zugehörigen Designpatterns zu sammeln.

    Sowohl mit Eigenentwicklung als auch mit der Verwendung von einem sehr gut durchdachten Framework sind die Chancen hoch, als Anfänger ohne Erfahrung reichlich Mist zu produzieren. Das Tutorial kann sehr gut sein und dich ordentlich in das Framewokr einführen, aber es liefert dir nur generelle Beispiele im Umgang mit den Komponenten. Es nimmt dir nciht die Entscheidung ab, welche Komponenten am besten zu nehmen sind und mit welchen sie perfekt zusammenspielen um das Ziel im Ganzen oder auch nur eine Teilaufgabe davon zu implementieren.

    1.) Von Null an alles selber aufbauen. Dabei auf theoretische Werke zum Softwaredesign zurückgreifen und das Wissen umsetzen.
    2.) Auf ein Framework aufsetzen, das einen schon einiges abnimmt und die Grobstruktur vorgibt. Würde einiges an Arbeit ersparen legt aber auch das Design schon teilweise fest.
    3.) Ein fertiges CMS/Portal mit offener Schnittstelle und Code nehmen und abschauen wie die das aufgebaut haben wärend ich es Erweitere und an meine Bedürfnisse anpasse.

    Wie gesagt, alle drei Ansätze bringen die besten Ergebnisse mit ausreichend Erfahrung. Mit einem fertigen CMS kann man das Verfahren abkürzen, wenn man es nach seinen Wünschen einrichten kann und passende Komponenten für seine Extrawünsche findet. Selbst das Kennenlernen eines fertigen Systems ist nicht an einem Nachmittag erledigt. Denn auch hier muss man herausfinden, welche Komponenten für die eigenen Zwecke verwendet werden können oder wie man seine eigenen Ideen so umformen kann, dass sie ins Konzept des Systems passen.

    Es bleibt auch noch der Punkt der Programmiersprache die das ganze einschränkt... mit C# / ASP.NET kann ich am besten umgehen, aber dafür einen Hoster zu finden wird schwierig (wenns günstig sein soll) und Mono soll wohl nicht ganz unproblematisch sein, oder?

    Windows V-Server gibt es zum Beispiel für 9,90€. Aber nach meiner Erfahrung mit einem Linux-V-Server der gleichen Preisklasse sollte man diesem und sich erst einmal eine Probezeit gönnen, bevor man live geht. Bei Windows habe ich noch mehr Bedenken, muss doch zu dem Preis nicht nur die die gleiche oder gar leistungsfähigere Hardware sondern auch noch eine Betriebssystem-Lizenz bezahlt werden. Zu dem Preis sind die V-Server doch üblicherweise ziemlich beschnitten. Nicht unbedingt in den Werten, mit denen Werbung gemacht wird - die lesen sich oft recht vernünftig. Doch der Teufel steckt zum Beispiel in der Anzahl der File-Handles, die dann selbst bei ganz normalen Server-Aufgaben schon erreicht oder überschritten werden.

    Mit PHP werd ich nicht so recht warm, auch wenn es recht verbreitet ist... mir wäre Python eigentlich lieber.

    Nach PHP ist die Nachfrage hoch, also kann man damit bei vielen Kunden punkten, wenn das reibungslos läuft. Man kann manchmal nur hoffen, dass Python nicht nur zum Beeindrucken in der Feature-Liste da ist.

    Habt ihr ein paar Ideen und Vorschläge für mich? Welchen Weg würdet ihr gehen?

    Software-Entwicklung zu erlernen und Erfahrungen zu sammeln ist langwierig, und besonders, wenn du ein umfangreiches System planst, brauchst du eine Menge Durchhaltevermögen, je nach deinem eigenen Perfektionismusgrad. Schnellere Erfolge, besonders da du schon ein Ziel vor Augen hast, erzielst du sicher mit dem Konfigurieren eines fertigen Systems.

    Konkrete Empfehlungen gebe ich keine, du musst sowieso selbst die Systeme mit deinen Anforderungen und Ansprüchen vergleichen. Listen von Systemen findest du unter anderem in der Wikipedia. Wenn du für deine nähere Auswahl nach dem Beliebtheits- oder auch nur Verbreitungsgrad gehen willst, schau nach der Anzahl der verfügbaren Erweiterungen/Plugins.

    Lo!

    1. Yerf!

      Sowohl mit Eigenentwicklung als auch mit der Verwendung von einem sehr gut durchdachten Framework sind die Chancen hoch, als Anfänger ohne Erfahrung reichlich Mist zu produzieren.

      Hehe, jo. Allerdings bin ich kein direkter Anfänger, ich hab schon an einiger Software mitgearbeitet. Das neue ist, das ich die komplette Planung von Grund auf vor mir hab. Ansonsten hab ich bisher nur in fertigen Strukturen mitgearbeitet und erweitert.

      Das Tutorial kann sehr gut sein und dich ordentlich in das Framewokr einführen, aber es liefert dir nur generelle Beispiele im Umgang mit den Komponenten. Es nimmt dir nciht die Entscheidung ab, welche Komponenten am besten zu nehmen sind und mit welchen sie perfekt zusammenspielen um das Ziel im Ganzen oder auch nur eine Teilaufgabe davon zu implementieren.

      Das mir ein Framework nicht alles abnimmt ist klar... deshalb ist das momentan meine favorisierte Richtung. Ich komm etwas schneller zum Ergebnis, hab aber mehr Freiheiten.

      Windows V-Server gibt es zum Beispiel für 9,90€. Aber nach meiner Erfahrung mit einem Linux-V-Server der gleichen Preisklasse sollte man diesem und sich erst einmal eine Probezeit gönnen, bevor man live geht.

      Eigener Server heißt auch Verantwortung für das System... vor allem Einrichtung und Sicherheit. Ein Linuxsystem könnte ich so nebenbei bekommen, das wird von einem Bekannten betreut und ich könnte dort mit rauf.

      Nach PHP ist die Nachfrage hoch, also kann man damit bei vielen Kunden punkten, wenn das reibungslos läuft. Man kann manchmal nur hoffen, dass Python nicht nur zum Beeindrucken in der Feature-Liste da ist.

      Jo, aber wie gesagt könnt ich das Python selber auf besagtem Server einrichten und müsste mich dann nur um den Punkt kümmern. (Ein Tomcat wäre genauso "einfach")

      Software-Entwicklung zu erlernen und Erfahrungen zu sammeln ist langwierig, und besonders, wenn du ein umfangreiches System planst, brauchst du eine Menge Durchhaltevermögen, je nach deinem eigenen Perfektionismusgrad. Schnellere Erfolge, besonders da du schon ein Ziel vor Augen hast, erzielst du sicher mit dem Konfigurieren eines fertigen Systems.

      Dass das System nicht von heut auf morgen sofort alles kann ist klar. Ich muss da Schritt für Schritt vorgehen und die Features priorisieren. Es geht auch nicht unbedingt um ein schnelles Ergebnis. Zum Teil ist ja auch der Weg das Ziel, sprich: Erfahrung sammeln.

      Konkrete Empfehlungen gebe ich keine, du musst sowieso selbst die Systeme mit deinen Anforderungen und Ansprüchen vergleichen.

      Jo, ist schon irgendwie klar, aber irgendwie hoff ich doch ein paar konkrete Beispiele zu bekommen, die eine nähere Betrachtung wert sind. Einfach um in dem Jungel eine Vorauswahl zu bekommen...

      Gruß,

      Harlequin

      --
      RIP --- XHTML 2
      nur die Besten sterben jung
      1. Hi!

        Konkrete Empfehlungen gebe ich keine, du musst sowieso selbst die Systeme mit deinen Anforderungen und Ansprüchen vergleichen.
        Jo, ist schon irgendwie klar, aber irgendwie hoff ich doch ein paar konkrete Beispiele zu bekommen, die eine nähere Betrachtung wert sind. Einfach um in dem Jungel eine Vorauswahl zu bekommen...

        Die Herausragenden erkennst du an der Zahl der Erweiterungen. Und sie stehen in eigentlich jeder Liste. Wenn du auf Empfehlungen kleinerer Systeme aus bist, so können die Empfehlenden zufällig deine Bedingungen treffen oder auch meilenweit entfernt sein. Bei den großen besteht zumindest die Hoffnung, das es Plugins für deine Wünsche gibt. Wie auch immer, wenn du nicht nur hören willst, was "alle" verwenden oder was einzelne verwenden, das aber nicht zu dir passt, oder so allgemeine Aussagen wie in meiner ersten Antwort bekommen möchtest, dann solltest du die Liste deine Wunsch-Features angeben.

        Lo!

        1. Yerf!

          Die Herausragenden erkennst du an der Zahl der Erweiterungen. Und sie stehen in eigentlich jeder Liste. Wenn du auf Empfehlungen kleinerer Systeme aus bist, so können die Empfehlenden zufällig deine Bedingungen treffen oder auch meilenweit entfernt sein. Bei den großen besteht zumindest die Hoffnung, das es Plugins für deine Wünsche gibt.

          Für alle meiner Wünsche wird es sicher kein PlugIn geben. Von daher ist der wichtigste Punkt Quelloffen und gut dokumentierte API. Aber wenn ich mir die rausfilter, die sehr viele Erweiterungen von Drittanbietern haben sollte ich eigentlich welche mit guter API finden... die anderen haben es ja auch geschafft Erweiterungen zu schreiben ;-)

          Gruß,

          Harlequin

          --
          RIP --- XHTML 2
          nur die Besten sterben jung
  3. Yerf!

    Wenn ich mich jetzt mal auf Python festlege und mich so umschaue läufts wohl fast auf Django oder Plone raus... wobei ich mir bei letzterem noch nicht sicher bin, was die GPL v2 für mein Projekt bedeutet.

    Aber wenn ich mir das ganze nochmal so durch den Kopf gehen lasse ist es glaub ich für den gewünschten Lerneffekt besser wenn ich selber was aufbaue. Damit fällt die Wahl wohl automatisch auf Django (alles selber machen wird mir zu viel Zeit kosten... ich will mich ja auch auf das Projekt konzentrieren können...)

    Gibts neben der offiziellen Doku noch gute Empfehlungen für den Einstieg in Django?

    Gruß,

    Harlequin

    --
    RIP --- XHTML 2
    nur die Besten sterben jung