Maccus Plautus: Listenauswahl >> Datenbank auf Server >> Ausgabeformat?

Hallo, zusammen!

Als absolutes Greenhorn unter den Programmierern weiß ich nicht, wo ich mit meiner Idee zu suchen beginnen soll, um zu einer auch nur annähernd zufrieden stellenden Lösung zu gelangen. Deshalb probier ich es einfach mal in diesem Forum, hoffend, dass sich unter den weisen Hütern der Bücher mit den sieben Siegeln irgendein hilfsbereiter Mensch findet, der meinen Freeware-Gedanken versteht und für unterstützungswürdig hält ;o) Also, folgendes:

Latein und Altgriechisch basieren - wie jede andere Sprache auch - auf drei Grundpfeilern, die da wären: Vokabeln, Grammatik und Syntax. Für jeden dieser drei Grundpfeiler kann man heutzutage einen Haufen Geld ausgeben. Man kann aber auch im Netz recherchieren und findet dort z.T. sehr gute und vor allem kostenlose (!) Hilfen. Immerhin, was die Grammatik und die Syntax betrifft, so bietet das Internet schon einige sehr brauchbare Zusammenfassungen. Die Seiten zu den Latein- und Griechisch-Vokabeln dagegen sind überwiegend desaströs, weil sie zum einen mit völlig unzureichenden Datenmengen arbeiten, zum zweiten teilweise grottenschlecht erklärt sind und zum dritten nicht selten genug auch noch kommerziell vermarktet werden.

Als Altphilologe, der sich mit den alten Sprachen beruflich beschäftigt, hatte ich mir daher vor drei Jahren vorgenommen, diesem Unsinn ein Ende zu bereiten und die Lücke des dritten, bzw. ersten Grundpfeilers mit einer fundierten Auswahl kostenloser Vokabel-Downloads zu schließen. Ein fähiges Freewareprogramm zum Vokabeltraining liegt mir bereits vor und die Daten (12.000 Latein- und 5.000 Griechisch-Vokabeln) sind ebenfalls einsatzbereit. Dass die Idee bei den möglichen Altsprachler-Interessenten gut ankommt, zeigt die hohe Besucherzahl meiner Website und die entsprechend hohe Frequenz der Downloads.

Was ich nun für all jene, die nicht gern am Computer lernen, sondern lieber etwas in der Hand haben, zusätzlich anbieten möchte, ist ein Dateiformat zum Ausdruck von Vokabelkärtchen. Allerdings ist das bei den oben genannten Datenmengen etwas schwierig - und in der Regel so auch gar nicht notwendig, weil die Anwender viele der dort gebotenen Vokabeln bereits beherrschen. Sinnvoller wäre es daher, eine Liste aller verfügbaren Vokabeln zu liefern, aus der sich die Besucher dann einzelne Wörter herauspicken können, die nach Betätigen eines Absenden-Buttons in einem fertigen, d.h. ausdruckfähigen und für diesen Zweck speziell formatierten Datenblatt geliefert werden, das sich der Besucher nur noch an seinem Heim-Drucker ausplotten und zu den fertigen Vokabelkärtchen zurechtschneiden muss.

Soweit die Idee. Wie sich das realisieren lässt ... keine Ahnung! Ich bin mir aber sicher, dass man das irgendwie machen kann. Es müsste halt eine Liste (A) geben, hinter deren (sagen wir mal 5.000) Einträgen jeweils die entsprechende Anzahl an Datensätzen steht, bestehend aus der Originalvokabel (z.B. 1.a), einem Zusatz (z.B. 1.b), der deutschen Bedeutung (z.B. 1.c) und eventuellen historischen oder linguistischen Infos (z.B. 1.d). Und das entsprechend der Anzahl der Listeneinträge von 1.a/b/c/d bis 5.000.a/b/c/d, von denen in der Liste aber wie gesagt nur die a's auftauchen. Die vom Besucher getroffene Formular-Auswahl der Listeneinträge soll die Datensätze (Nr. a/b/c/d) dann in ein Ausgabe-Format (B) schicken, wo sie wie folgt angeordnet sind:

------ Seitenabschnitt ------

----------------
1.a   |   2.a
1.b   |   2.b
----------------
3.a   |   4.a
3.b   |   4.b
----------------
5.a   |   6.a
5.b   |   6.b
----------------
7.a   |   8.a
7.b   |   8.b
----------------
9.a   |   10.a
9.b   |   10.b
----------------

------ Seitenabschnitt ------

----------------
9.c   |   10.c
9.d   |   10.d
----------------
7.c   |   8.c
7.d   |   8.d
----------------
5.c   |   6.c
5.d   |   6.d
----------------
3.c   |   4.c
3.d   |   4.d
----------------
1.c   |   2.c
1.d   |   2.d
----------------

------ Seitenabschnitt ------

Was ich also bräuchte, ist ein Listenformat mit dem zugehörigen Skript, das so etwas kann, zum Zweiten ein Lösungsvorschlag, wie ich die Ausgabe-Seite formatieren kann (geht so was mit css?) oder - falls das ein bisschen zu viel verlangt ist, wenigstens einen Tip, in welche Richtung ich mich mit solch einem Vorhaben wenden kann.

Ich würd mich echt freuen, wenn einer von Euch weisen Programmierern mir dabei helfen könnte! Denn mir gehen die Kommerzfuzzies und halbseidenen Möchtegern-Lateiner im Netz doch zunehmend auf den Keks und ich finde, es wird Zeit, dass man dem mal eine gute Seite entgegenstellt.

Danke. ;-)

  1. Hi,

    Latein und Altgriechisch basieren - wie jede andere Sprache auch - auf drei Grundpfeilern, die da wären: Vokabeln, Grammatik und Syntax. Für jeden dieser drei Grundpfeiler kann man heutzutage einen Haufen Geld ausgeben. Man kann aber auch im Netz recherchieren und findet dort z.T. sehr gute und vor allem kostenlose (!) Hilfen.

    Das gilt für Programmiersprachen übrigens meist genauso ;-)

    Es müsste halt eine Liste (A) geben, hinter deren (sagen wir mal 5.000) Einträgen jeweils die entsprechende Anzahl an Datensätzen steht,

    Die wem oder was „entsprechende” Anzahl?

    Und das entsprechend der Anzahl der Listeneinträge von 1.a/b/c/d bis 5.000.a/b/c/d, von denen in der Liste aber wie gesagt nur die a's auftauchen. Die vom Besucher getroffene Formular-Auswahl der Listeneinträge

    *Kein* - absolut **KEIN** Benutzer möchte eine Liste mit 5000, in Worten: *Fünftausend*, Auswahlmöglichkeiten vorgesetzt bekommen.

    Selbst wenn du erst mal eine Aufsplittung nach Anfangsbuchstaben vornehmen würdest, blieben immer noch 192 und ein paar zerquetschte pro Buchstabe übrig - und selbst das dürfte der normale Nutzer bei einem Web-Formular noch als Zumutung empfinden.

    Ich würd mich echt freuen, wenn einer von Euch weisen Programmierern mir dabei helfen könnte! Denn mir gehen die Kommerzfuzzies und halbseidenen Möchtegern-Lateiner im Netz doch zunehmend auf den Keks und ich finde, es wird Zeit, dass man dem mal eine gute Seite entgegenstellt.

    Das „gut” beginnt aber beim Konzept, unbedingt.
    Rein technisch wäre das von dir geschilderte relativ simpel umsetzbar - aber wenn es keinen Spaß macht, das ganze zu benutzen, kannst du's auch gleich lassen.

    Mein (erster, spontaner) Vorschlag wäre, etwas weiter auszuholen, und eine Lernplattform zu schaffen, auf der der Nutzer sich registriert, und dann immer wieder mal vorbeischauen kann, und nach dem Zufallsprinzip ausgewählte Vokabeln „abgefragt” bekommt.
    Vokabeln, die er dann zwei oder drei mal „richtig” hatte, werden aus der Auswahlmenge herausgenommen.
    Und erst dann, wenn die Restmenge so weit dezimiert ist, dass man sie in einer Form für ein Auswahlformular aufbereiten kann, bei dessen schierem Umfang der Nutzer nicht nach ein paar Dutzend Sekunden den Schocktod erleidet (oder ihn sich zumindest herbeisehnt) - *dann* kann es an das Auswählen und Ausdrucken der Lernkärtchen für die „hartnäckigeren” Fälle gehen.

    Ob und wie man im Vorfeld schon den Umfang reduziert, in dem Vokabeln erst mal nur zum „Aussortieren” der bekannten abgefragt werden (damit nicht auch dabei schon die Lust und Motivation des Nutzers auf der Strecke bleibt), wäre noch zu überlegen. Vielleicht kann man da schon Gruppierungen nach Bereichen vornehmen und damit „Pakete” schnüren, die sich einzeln auswählen und abarbeiten lassen.

    MfG ChrisB

    --
    “Whoever best describes the problem is the person most likely to solve the problem.” [Dan Roam]
    1. Hi,

      Danke für die schnelle Antwort! Echt cool!

      Und das mit den nervenverträglichen "Dezimierungs-Paketen" ist eine Superidee. Denn genau darüber hab ich mir auch schon den Kopf zerbrochen: 5.000 Auswahlmöglichkeiten sind einfach unmöglich.

      Ich hab das eben mal durchgecheckt; wenn man die Vokabularien beispielsweise nach Substantiven, Verben, Adjektiven, Adverbien etc. aufgliedert, ergeben sich Datenmengen von "nur noch" 150-800 Vokabeln. Und wenn die dann noch durch eine Abfrage weiter dezimiert werden, müsste das am Ende zu einer Art von Listen führen, deren Umfang selbst für empfindliche Benutzer akzeptabel ist.

      Rein technisch wäre das von dir geschilderte relativ simpel umsetzbar - aber wenn es keinen Spaß macht, das ganze zu benutzen, kannst du's auch gleich lassen.

      Womit wir beim nächsten Problem wären ... ;o) Denn wenn ICH mich jetzt daran mache diese relativ simple Umsetzung in Angriff zu nehmen, wird das ganze erst recht keinen Spaß machen. Zum einen, weil ich davon absolut keine Ahnung habe und Jahre brauchen würde, in denen man noch nicht einmal keinen Spaß haben könnte, um auch nur zu verstehen, was ich da programmiere; und zum Zweiten würde das Ganze höchstwahrscheinlich so dilettantisch enden, dass die ganze liebe Müh tatsächlich umsonst wär.

      Sprich: Ich brauche nochmals Deine Hilfe. Frage 1: Wie lässt sich das mit der Registrierung umsetzen und wozu kann die gut sein?

      Frage 2: Wie kann ich ein Formular basteln - denn die von Dir erdachte Vokabelabfrage würde ja doch wohl über ein solches laufen (?) - das sich zufallsgeneriert aus einem Datenpool eine bestimmte Menge Vokabeln aussucht, dem Benutzer die Möglichkeit zum Eintragen der Antwort gibt und das ganze sozusagen im Abgleich mit dem Server auszuwerten?

      Frage 3: Wie funktioniert das mit der Verringerung der Datensätze, wenn der Benutzer eine Vokabelfrage dreimal in Folge richtig beantwortet hat? Die Vokabeln können ja nicht einfach aus dem Pool verschwinden, sonst stünden sie den anderen Usern nicht mehr zur Verfügung. Oder wird da auf dem Server für jeden neu registrierten Benutzer ein komplett neuer Datensatz angelegt?

      Frage 4 (und vermutlich noch weitere 20) bezieht sich schließlich auf die Umsetzung meines eigentlichen Problems, von dem Du meintest, dass man es relativ simpel lösen könnte. Aber ich denke, das stelle ich erst einmal hinten an, bis wir mit den ersten drei Fragen weiter sind.

      Danke, Mann! Es fühlt sich gut an mit seinem Unwissen nicht allein gelassen zu werden. ;o)

      MfG Frank

      1. Ich hab das eben mal durchgecheckt; wenn man die Vokabularien beispielsweise nach Substantiven, Verben, Adjektiven, Adverbien etc. aufgliedert, ergeben sich Datenmengen von "nur noch" 150-800 Vokabeln. Und wenn die dann noch durch eine Abfrage weiter dezimiert werden, müsste das am Ende zu einer Art von Listen führen, deren Umfang selbst für empfindliche Benutzer akzeptabel ist.

        Die Anzahl der Datensätze in einer DB Sollten zuerst mal egal sein.
        Für eine DB ist aber wichtig, dass sie so organisiert ist, dass abfragen schnell möglich sind.
        Wichtig ist hingegen, dass der User nicht durch Daten überhäuft wird.
        Bei deiner Beschreibung fehlt mir eigentlich, wie du die Userinteraktion dir vorstellst.

        Wie sollen die Schritte, weniger programmtechnisch, sondern vom logischen Ablauf, aussehen.
        Hier empfiehlt es sich, mit Papier und Bleistift zu arbeiten. Jedes Blatt präsentiert einen Zustand des Bildschirms. Je nach Useraktion erscheint ein anderes Blatt.
        Du musst dir einen Vorgang vorstellen, der vom ersten Kontakt des Users auf deiner Seite bis zum Verlassen führt.

        Womit wir beim nächsten Problem wären ... ;o) Denn wenn ICH mich jetzt daran mache diese relativ simple Umsetzung in Angriff zu nehmen, wird das ganze erst recht keinen Spaß machen. Zum einen, weil ich davon absolut keine Ahnung habe und Jahre brauchen würde, in denen man noch nicht einmal keinen Spaß haben könnte, um auch nur zu verstehen, was ich da programmiere; und zum Zweiten würde das Ganze höchstwahrscheinlich so dilettantisch enden, dass die ganze liebe Müh tatsächlich umsonst wär.

        Tatsächlich unterscheidet sich deine Aufgabe nicht darin, ob deine DB 10 oder 10000 Daten enthält. Ein wichtiges Designprinzip bei allem ist Wachstum.
        Das führt dazu, dass man jedes konkrete Ding als eine Instanz von einer Klasse behandeln sollte. Ich rede hier nicht unbedingt von objektorientierter Programmierung sondern vom objektorientiertem Denken.

        Zum Beispiel brauchst du eine Client-Server Anbindung. Du musst den Client identifizieren können, um eben die Daten für diesen Client verarbeiten zu können. Dazu beaut man eine Session auf. Dieses Konzept besteht für sehr verschiedene Arten von Webanwendungen.

        Deine erste Übung sollte also darin bestehen:

        • Schau, ob der Client eine SessionID sendet (z.B. über Cookies)
            -> Was ist eine SessionID, Welche Bedingungen muss sie erfüllen?
            -> We kann sie transportiert werden
               (via Cookie oder als Parameter in Urls oder Formularen)
        • Wenn ja, ist diese Session gültig.
            -> Wo schaue ich nach?
               Ich brauche eine Tabelle, wo Sessions gespeichert werden.
               Timestamp!
        • Wenn Session nicht xistiert oder ungültig:
            -> erstelle eine neue SessionID,
               Speichere Sie
               Sende Sie an den Client, zusammen mit Daten.
        • Letztlich identifiziert die SessionID auch Userdaten,
            die du mit speicherst.
            -> Gibt es ein Login
               - Einen Admin-Bereich, zum beispiel zur Definition von Daten
               - Hat ein normaler User Schreibrechte?
            -> Wenn es ein Login gibt.
               - muss es auch ein Logout geben,
               - oder einen Zustand, der ein Logout erzwingt.
                 - Die Lifetime der SessionID ist abgelaufen.
                 - Der User betätigt aktiv eine Logaout Funkktion.
            -> Wenn sie der Userstatus ändert
               (nicht angemeldet -> Admin oder
                nicht angemeldet -> normaler SchreibUser
                Angemeldet -> nicht angemeldet)
               - Sollte die SessionID durch eine neue ausgetauscht werden.

        Das Klingt jetzt reichlich komplex. Aber das ist der Kern einer jeder
        Userorientierten Webanwendung. Egal was deine Anwendung letztlich für Nutzdaten  bereitstellt zum Lesen oder Schreiben.

        Wenn du mit Perl schreiben willst solltest du recherchieren:

        Gibt es Module die mir bei diser Arbeit helfen?
        -> Gesendete Formulardaten auslesen
           CGI Modul
        -> Arbeiten mit Cookies
           CGI Modul
        -> Arbeite mit Session
           CGI Modul

        Dein Studium sollte sich also mit dem CGI Modul beschäftigen.

        Bei deiner Arbeit wirst aber auch andere nüzliche Module finden.
        Dinge die ich oft verwende.

        Digest (eine Gruppe von Modulen die Hashes bereitstellen, MD5, SHA1 etc).

        Tie::File
          Wann immer du über Files iterierst (also keine SQL Datenbank)
          Solltest du Tie::FIle in Erwägung ziehen.
          Nur bei statisch klein bleibenden Files kann man sich seine
          eigenes open() while() close() gönnen.

        Sobald du mit Schreibvorgängen konfrontiert bist:
        File-Locking ist ein Thema.

        Dies hat nun wenig mit deiner eigentlichen Aufgabe zu tun.
        Aber diese Anwendungsschale erlaubt dir, einen sehr flexiblen Datentransfer zwischen Server und Client zu steuern.

        mfg Beat

        --
        ><o(((°>           ><o(((°>
           <°)))o><                     ><o(((°>o
        Der Valigator leibt diese Fische