Codex: Welche Programmiertechnik / Sprache würdet ihr anwenden

Hi.

Ich möchte ein Webprojekt machen, für dass ich im Linux System bei verschiedenen Diensten Accounts anlegen muss, und Userverzeichnisse anlegen muss.

Ich habe 2 Konzepte.
1. Frontend mit einfacher Plausibilitätsprüfung der Daten. Dazu ein Backgroundscript, was vom Frontend aus gestartet wird und die Daten übergeben bekommt. Im Backgroundscript nochmal genaue Datenprüfung und Ausführung der Systembefehle.
Dieses Script sollte in Python geschrieben werden.

2. Datenprüfung + Verarbeitung komplett im PHP Webscript, Ausführung der Systembefehle über einzelne, kleine Shellscripts oder sogar direkt (z.B. Backtick Operatoren)

Außerdem habe ich mich noch nicht entschieden, welche Programmiersprache ich (vor Allem für das Frontend) einsetzen soll.

Python oder PHP?

Python:
-Trennung Background-Script und Frontend und trotzdem einheitliche Spache
-Steilere Lernkurve in Python, wenn ich beides damit mache
-Was neues
Nachteil: Komplizierter.

PHP
-Mehr Erfahrung
-Bessere Unterstützung bei Hostern und mehr Auswahl an bestehenden Lösungen.
Nachteil: Keine klare Trennung zwischen Frontend und Systemteil (s.o.), oder ich müsste mich zusätzlich zu PHP noch mit Python für das Systemscript befassen.

Was würdet ihr machen?

  1. Hi!

    PHP
    Nachteil: Keine klare Trennung zwischen Frontend und Systemteil (s.o.), oder ich müsste mich zusätzlich zu PHP noch mit Python für das Systemscript befassen.

    Wie du was trennst ist nicht abhängig von der Programmiersprache. Jedenfalls kann PHP genauso wie Python auch außerhalb eines Webservers arbeiten.

    PHP
    -Mehr Erfahrung

    Na dann das, wenn Zeit nicht unbegrenzt zur Verfügung steht. Eine neue Sprache zu lernen, ist ja ganz nett, aber die würde ich nicht gleich ohne Erfahrung auf ein größeres Projekt loslassen. Nachher gefällt dir daran was nicht und du musst dich entscheiden zwischen "bis zum Ende durchquälen" oder "mit PHP komplett neu beginnen".

    Lo!

    1. Hi

      Hi!

      PHP
      Nachteil: Keine klare Trennung zwischen Frontend und Systemteil (s.o.), oder ich müsste mich zusätzlich zu PHP noch mit Python für das Systemscript befassen.

      Wie du was trennst ist nicht abhängig von der Programmiersprache. Jedenfalls kann PHP genauso wie Python auch außerhalb eines Webservers arbeiten.

      Ich weiß, dass das geht. Das gefällt mir aber nicht so wirklich.
      Genauso wie ich Perl oder hochkomplexe Shellscripte mit Pipes usw nicht mag.
      Wenn ich ein größeres Background Script mache, dann in Python. So wäre es mir zumindest am liebsten.
      Bei einer Trennung würde ich im Webscript einfach nur eine einfache Plausibilitätsprüfung machen und den Rest in einem Background Script.

      Wenn ich nicht trenne, mache ich die Logik und Datenprüfung mit im Frontend. Wenn die Formulardaten von der anmeldung reinkommen, kann ich sie ja soweit verarbeiten und absichern, bis ich sie in backtick operatoren einsetzen kann, die dann die Systembefehle direkt (oder einzelne Mini Shellscripts) aufrufen.

      Trennen sollte eine bessere Sicherheit bieten, oder?

      Achja: Es geht darum, ein Userverzeichnis anzulegen, und dieses im FTP freizuschalten, so dass man sowohl per HTTP als auch FTP hoch/runterladen kann.
      Es muss ein Quota und Trafficlimit angelegt werden.
      Es muss eine .htaccess für den HTTP Passwortschutz gemacht werden, sofern gewünscht.
      PHP usw ist in dem Ordner nicht erlaubt.

      Direkt-zugriff per HTTP / Deep Link auf die Originalbilder ist nur eine gewisse Zeit möglich. Die Originalbilder haben ein Quota (Bzw der Ordner). Langfristig bleiben nur die vom System herunterskalierten Bilder (Thumbnail, LowRes, HiRes) im Fotoalbum.

      PHP
      -Mehr Erfahrung

      Na dann das, wenn Zeit nicht unbegrenzt zur Verfügung steht. Eine neue Sprache zu lernen, ist ja ganz nett, aber die würde ich nicht gleich ohne Erfahrung auf ein größeres Projekt loslassen. Nachher gefällt dir daran was nicht und du musst dich entscheiden zwischen "bis zum Ende durchquälen" oder "mit PHP komplett neu beginnen".

      Ein PHP Profi bin ich nicht.
      Neben "Übungen" habe ich ein selber gemachtes Minimal Webseitenfrontend. Es ist eigentlich nicht mehr als ein PHP "Frames" Ersatz + dynamisches Menü. Die Seiten werden aus einzelnen HTML Files zusammengesetzt. Die Seiten sind einzeln jeweils standardkonformes HTML, für den zusammengesetzten Output werden aber nur die jeweils benötigten Elemente genommen. Dazu kommen ein paar dynamische Sachen. Das Menü ist komplett dynamisch erstellt (Nachbau eines Java Script "aufklappmenü" in PHP)

      Mit Python habe ich noch viel weniger Erfahrung. Da bin ich noch ganz am Anfang, da habe ich erst einfache Übungen gemacht.

      Im Grunde hätte ich also 2 Sprachen zu lernen (Webteil PHP, Systemteil Python), wenn ich mein Konzept nicht so mache, dass es mit einer Spache geht.

      Viele Grüße

      1. Moin!

        Im Grunde hätte ich also 2 Sprachen zu lernen (Webteil PHP, Systemteil Python), wenn ich mein Konzept nicht so mache, dass es mit einer Spache geht.

        Dann mach dein Konzept so, dass es mit einer Sprache geht.

        Nur mal angenommen, du bastelst dir mit PHP eine Klasse, die ein Array von Werten validieren kann. Wenn du Validierung von Eingabeparametern auch nochmal für die Kommandozeile lösen musst, schreibst du dieselbe Klasse für Python komplett neu - oder bindest die existierende Klasse in PHP einfach auch in deinem Kommandozeilenskript ein - was nur die halbe Arbeit ist.

        Das CLI-Interface von PHP ist wirklich gut, ich würde nicht davor zurückschrecken, es einzusetzen - habe es sogar schon intensiv getan.

        - Sven Rautenberg

      2. Hi!

        Bei einer Trennung würde ich im Webscript einfach nur eine einfache Plausibilitätsprüfung machen und den Rest in einem Background Script.

        Was versprichst du dir konkret davon? Zum Transportieren packst du die Daten ein und wieder aus und die Antwort ein und wieder aus. Hinzu kommt noch der Prozesswechsel, der im ungünstigen Fall Programme neu starten muss.

        Wenn ich nicht trenne, mache ich die Logik und Datenprüfung mit im Frontend.

        Muss man nicht. Es gibt Entwurfsmuster wie MVC, das eine Trennung von Frontend und Geschäftslogik beschreibt.

        Wenn die Formulardaten von der anmeldung reinkommen, kann ich sie ja soweit verarbeiten und absichern, bis ich sie in backtick operatoren einsetzen kann, die dann die Systembefehle direkt (oder einzelne Mini Shellscripts) aufrufen.

        Dafür gibt es vorgefertigte Funktionen.

        Trennen sollte eine bessere Sicherheit bieten, oder?

        Wofür, wogegen?

        Achja: Es geht darum, ein Userverzeichnis anzulegen, und dieses im FTP freizuschalten, so dass man sowohl per HTTP als auch FTP hoch/runterladen kann.
        Es muss ein Quota und Trafficlimit angelegt werden.
        Es muss eine .htaccess für den HTTP Passwortschutz gemacht werden, sofern gewünscht.

        Wenn der Request reinkommt, wird er unter der Kennung des Webservers oder eines speziellen Nutzers für die Anwendung ausgeführt. Genau diese Kennung startet auch die Shell-Scripte. Sie kann dann auch gleich alles aus einer Hand machen. Oder du lässt dein Backend als Daemon unter eigener Kennung laufen, dann musst du dem Frontend die zum Anmelden erforderlichen Benutzerdaten bekanntgeben, weil du das Backend sicher nicht ungeschützt laufen lassen willst. Das Frontend kann dann alle Aktionen anstoßen, die es sowieso mit dem Backend machen kann. Am Ende sieht das nach außen hin wieder nur wie ein System aus. In der komplexen und damit auch potentiell mehr fehleranfälligen Trennung sehe ich keinen Vorteil.

        PHP usw ist in dem Ordner nicht erlaubt.

        Macht nichts. Auch anderswo liegende Scripte können auf beliebige Verzeichnisse zugreifen, wenn sie dafür berechtigt sind.

        Im Grunde hätte ich also 2 Sprachen zu lernen (Webteil PHP, Systemteil Python), wenn ich mein Konzept nicht so mache, dass es mit einer Spache geht.

        Das Projekt scheint mir bereits jetzt so groß, dass du dich selbst mit einer Sprache, in der du wenig Erfahrung hast, schon genug <del>Problemen</del><ins>Herausforderungen</ins> begegnen wirst. Mir scheint ebenso, dass dir noch eine Menge Wissen um generelle Möglichkeiten und Lösungswege fehlt.

        Lo!

  2. Hi,

    ich halte Svens Vorschlag für sinnvoll.

    Allerdings habe ich mit Phyton keine Erfahrung, habe aber ein ganz ähnliches Projekt bearbeitet wie Du, nur in größerem Umfang, und kann deshalb vielleicht Gedankenanstösse geben. Viele verschiedene Parameter mussten über (bei mir mehrere unterschiedliche) Frontends konfiguriert werden, eins davon Webseiten. In der ersten Version wurde ein Webserver ohne PHP geplant, deshalb konnte ich dies zunächst nicht benutzen. Das Webfrontend wurde in html mit Selfmade-SSI realisiert, die Lese- und Änderskripte zunächst komplett in Bash (da hing natürlich noch mehr dran, u.a. Kompabilitätsbelange zu anderen Systemen).

    Letzteres stellte sich als ungünstig heraus. Auf manchen Prozessoren waren die Skripte viel zu langsam, zudem sind Nutzereingaben über Bash-Skripte sehr ungünstig und unsicher zu verarbeiten (u.a. zu viele unterschiedliche Meta-Character zu beachten). Das Ende vom Lied war, dass ich nachträglich viele der Skripte in C umgesetzt habe.

    Trenne Frontend und Verarbeitung sinnvoll mit klaren Schnittstellen. Das ist auch in der gleichen Programmiersprache unumgänglich und selbstverstänlich auch möglich. Dadurch bekommst Du bessere Wartbarbeit, Austauschbarkeit und Testmöglichkeiten. Ein Frontend führt eigentlich noch keine Plausibilitätsprüfungen aus; welche Werte für die Verarbeitung nötig sind, wissen letztlich nur die Verarbeitenden Routinen. Ich benutze mittlerweile für's Frontend auch PHP. Ich bin damit sehr zufrieden, es lassen sich damit Belange, die sich nur auf das Webfrontend beziehen, gut verarbeiten (z.B. spezielle Arten der Darstellung), die ganze Verarbeitung ist davon aber strikt getrennt.

    Warum möchtest Du kein PHP ausserhalb eines Webservers? Deine Belange dürften ja nicht zeitkritisch sein o.ä.?

    Gruß
    Stefanie

    1. Hi Stefanie.

      Hört sich interessant an. C ist mir jedoch zu kompliziert für mein Projekt.

      Der Grund, warum ich kein PHP für CLI Scripte nutzen möchte, ist einfach:
      Ich möchte es möglichst "allgemein" lernen, so dass ich das Wissen auch auf Servern ohne PHP verwenden kann. Für allgemeine Administrationsaufgaben.
      PHP ist oft nur auf Webservern installiert.

      Richtige Adminscripte/Tools werden meißtens in Bash, Perl oder Python, manchmal auch in einer Hochsprache geschrieben. So machen es jedenfalls die meißten, die sich damit befassen.

      Wenn ich dieses Projekt in PHP mache, ist das Thema Python erst mal aufgeschoben aber nicht aufgehoben.

      Mit Python muss ich mich früher oder später auf jeden Fall befassen. Komplexe Bash Scripte oder Perl kommt nicht in Frage.
      Ich weiß, es gibt auch Ruby, aber das ist mir zu exotisch.
      Ich habe mir dafür also Python ausgesucht.
      Pascal usw kommt auch nicht in Frage, wenn dann gehe ich gleich auf C oder dessen Ablegern.

      Viele Grüße

      1. hu codey;

        Mit Python muss ich mich früher oder später auf jeden Fall befassen. Komplexe Bash Scripte oder Perl kommt nicht in Frage.

        Es spricht alles für Perl: Die Systemnähe: use System;, use Shell.  Komplex wird es natürlich auch mit Perl, aber natürlich hast Du auch mit Perl Möglichkeiten, infolge Klassenerstellung klare Schnittstellen (Abstraction Layer) zu schaffen. Ein Blick in die Geschchte: Perl wurde auf UNIX-Systemen entwickelt, u.a. zum Rationalisieren administrativer Aufgaben.

        Perl und Webserver: Es gibt verschiedene Möglichkeiten, CGI, FastCGI, mod_perl, embperl und freilich auch ajax.

        Perl und Datenbanken: DBI, das I steht für Unabhängigkeit von der Engine, nicht proprietäre SQL-Statements laufen ohne Code-Änderung auf mysql, postgresql, sybase... es wird nur der Layer ausgetauscht.

        CPAN, CPAN, CPAN.

        Perltie: Verstecke ein Objekt in einer Variablen oder einer komplexten Datenstruktur.

          
        tie, my %objects, 'ORM';  
        $objects{URL}{BODY} = $body_en;  
        tied(%objects)->store; # commit  
        
        

        Mächtig gewaltig. Warum nicht in Perl???

        Hotti