In diesem Text möchte ich (ausnahmsweise!) über etwas anderes als Physik oder Mathematik schreiben. Diesmal geht es um etwas aus eigener Hand. Der Beitrag ist also ein ganz kleines bisschen persönlicher als die bisherigen.
Ich weiß, das Wort „buchwärts“ gibt es im Deutschen nicht. Aber genau das ist ja der Punkt.
Warum schreibe ich es dann?
Gute Frage. Genau darum geht es in diesem Post. Willkommen!
Sommer 2016. Südholland. Am Strand. Ohne Groupies. Ohne Corona. Ein Buch in der Hand haltend, oder auf dem Schoß, oder auf dem Kopf, ich weiß es nicht mehr so genau.
Jedenfalls habe ich irgendwann vor Jahren mir gedacht, dass es doch schön sein könnte, genau zu wissen, welche Wörter ich in der Fremdsprache – in diesem Fall eben Niederländisch – eigentlich schon kenne und welche nicht. Oder noch genauer: Ich habe mir eine beliebige Seite aus irgendeinem Buch vorgestellt mit farbig hervorgehobenen Wörtern. Dabei sollte die Farbe der Markierung den zu einem bestimmten Zeitpunkt geschätzten Wissensstand darstellen, sodass man beim Lesen direkt sehen kann, woran man ist. Ich wollte also buchstäblich sehen, dass ich etwas kenne, erkenne bzw. wiedererkenne (oder auch nicht). „Das klingt nach einem coolen (kleinen) Softwareprojekt!“, dachte ich.
Die Idee schlummerte ein paar Jahre im Unterbewusstsein, bis ich mich letztes Jahr (#Corona) daran gemacht habe, mit dem blöden – sorry, praktischen – Ding endlich anzufangen.
Bevor ich weiter erzähle, sollte ich vielleicht sagen, dass es solch eine Software eigentlich schon gibt (und zwar mehrmals: ReadLang, LWT, LingQ, FLTR, VocabHunter). Ich wusste es nur nicht, und selbst wenn, hätte ich immer noch mein eigenes Ding daraus gemacht. Meine Anforderungen an das Programm werden nämlich nicht von den üblichen Produkten erfüllt (um ehrlich zu sein: von keinem). Vor allem möchte ich etwas mit folgenden Eigenschaften:
- Einfach zu bedienen
- Einfach zu programmieren
- Einfach zu erweitern
- Modular aufgebaut
- Die vom Programm verwendeten und erstellten Daten gehören dem Benutzer
- Das Programm muss offline funktionieren können
- Das Programm muss sowohl am Rechner (Linux) als auch (irgendwie) auf dem Handy (Android) laufen können
- Das Lesen eines Buches steht im Vordergrund (Grundfunktionalität)
- Einfache Abfrage bzw. Eingabe des Wissensstands der einzelnen Wörter
- Alle Informationen kommen direkt vom Benutzer (Keine Automatismen)
- Alle Informationen werden im Klartext gespeichert und sollten auch ohne das Programm nützlich sein (Trennung von Daten und Software)
Für mich als Linux-Nerd und beruflichen Softwareentwickler bedeutet „einfach“ etwas für die meisten Computernutzer Abstoßendes: eine Konsolenanwendung.
Eine was?
Ein Programm ohne grafische Benutzeroberfläche, meine ich. Eins ohne Menüs, Schaltflächen, usw.
Sowas gibt es?!
Ja, gibt es. Und ich mag sie, so bin ich nun mal.
Mittlerweile sieht das Programm bei der Ausführung ungefähr so aus:
https://asciinema.org/a/Tp2jsx6RcLj1BN335xtzkIDJy (Linux-Rechner, Katalanisch)
https://asciinema.org/a/cxIplsjYUkxUwuIekcmrhZj1c (Deutsch VS. Niederländisch)
https://asciinema.org/a/Q6LULfxjaKYDzVPmOEqlLtpdy (Android + Termux, Deutsch)
Warum schreibe ich eigentlich darüber? Nun, weil ich dieses kleine Programm verwende, um – Überraschung!– Bücher zu lesen. Konkret lese ich aktuell (noch sehr sporadisch) damit „Der Schatten des Windes“ auf Deutsch und vor allem auf Niederländisch.
Meine Herangehensweise ist die eines „extensiven Lesens“, ich schlage also während einer Lektüre grundsätzlich nichts im Wörterbuch nach, denn das stört mich einfach nur. Ich finde viel wichtiger, tief in die Geschichte einzutauchen und das Buch zu genießen. Das erfordert Übung, denn vor Jahren war meine Tendenz zum Nachschlagen wirklich sehr groß (ich wollte ja immer alles genau wissen). Das möchte ich immer noch, aber alles hat seine Zeit. Außerdem finde ich es mittlerweile um Größenordnungen (auch wenn dies kein Physiktext ist, finde ich immer wieder Möglichkeiten, das Wort hineinzuschmuggeln) wichtiger, zufällige Wörter beim Lesen im passenden Kontext zu lernen. Aus diesem Grund halte ich auch nichts (mehr) von Programmen wie Anki oder Mnemosyne (Software mit einem Algorithmus zur verteilten Wiederholung, also elektronische Karteikartensysteme).
Zurück zum Programm.
Da es ein Programm zum Lesen unter Berücksichtigung des eigenen Vokabulars ist, nenne ich es (liebevoll) „BookWords“. Eigentlich war der Arbeitsname „EdWords“, aber das fand ich sehr schnell zu blöd. Daraus wurde später „Bookwards“ (zu Deutsch „buchwärts“), um zu verdeutlichen, dass es damit und mit einem Buch einfach (sprachlich) vorwärts geht. Ich fand das Wortspiel schön, nur leider ist der Name schon besetzt.
Das Programm ist noch in einem sehr prototypischen Stadium, jedoch möchte ich es in naher Zukunft als Open-Source-Software freigeben. Ich habe nämlich nie die Absicht gehabt, damit Geld zu verdienen. Es ist lediglich ein persönliches Projekt, um zu sehen, ob ich damit meinen Wortschatz abbilden und aufrechterhalten oder sogar verbessern kann.
Ein paar Zahlen zum Abschluss: Auf Deutsch habe ich bis jetzt ca. 22.700 Wörter damit erfasst. Daraus sind 10.047 aktiv bekannt, 5.477 passiv bekannt, 4.958 mehr oder weniger geraten, 2.185 wurden ignoriert (meistens sind das erfundene Wörter, Personennamen oder Orte) und 1545 sind wohl noch unbekannt.
Ich wollte noch mehr über technische Details, Struktur, Bestandteile, Funktionalität usw. schreiben, aber ich denke, das reicht im Moment :).
Ich bin gespannt auf eure Meinungen dazu!
Gratuliere, der Text ist sehr gut geschrieben. Dein Deutsch ist echt super! Auch dein Programm finde ich echt genial! Das ist eine tolle Idee und ich hoffe, dass ich das Programm auch irgendwann einmal nutzen kann.
@Eduard, zur sprachlichen Form brauche ich nichts mehr zu sagen außer: perfekt. Zum Inhalt: ich finde deine Idee spannend. Nur zwei Anmerkungen. Erstens ist meine Erfahrung, dass "Kennen" von Wörtern nicht mit zwei oder drei Optionen erschöpft ist, sondern eine weite Bandbreite von "noch nie gehört und keine Ahnung, was es bedeutet" über "schon mal gehört und gelesen, vage Idee der Bedeutung", "gut bekannt und auch manchmal verwendet" bis hin zu "in allen Schattierungen sicher gebraucht" umfasst. Es scheint mir eine Herausforderung zu sein, dieses Spektrum abzubilden. Zweitens bin ich persönlich ein Freund von echten Büchern. Ich sitze den ganzen Arbeitstag vor dem Bildschirm und verbringe zusätzlich Freizeit mit Aktivitäten wie dieser hier 😨 Von daher wäre dein Programm wahrscheinlich nichts für mich, so interessant es sich andererseits auch anhört. Anschauen werde ich es mir aber auf jeden Fall, wenn du es einmal veröffentlichst. Dann habe ich immer noch Zeit, meine Meinung zu ändern.
Das Projekt hört sich sehr spannend an! Ich bin sehr gespannt, wie man es nutzen kann. Gibt es auch eine Möglichkeit es in Windoof auszuführen oder funktioniert es nur auf Linux?
Guten Morgen! Das Projekt klingt sehr interessant und ich hab ziemlich viele Fragen zur Funktionsweise, die ich mir aber bis nach dem nächsten Post aufhebe =D eine kann ich mir aber nicht verkneifen: Kann das Programm mir eine Liste mit Wörtern ausspucken, die ich markiert habe? (sowohl alle Markierungen, als auch einzelne Kategorien) Und wenn ja, für bestimmte Textabschnitte oder nur für das ganze Werk?
Guten Morgen. Diesmal antworte ich von unten nach oben (verrückt!). Caro: Danke schön! Oh, du möchtest mehr darüber wissen? Super! Du kannst gerne deine Fragen direkt stellen, jetzt bin ich eh neugierig! Ich denke, "Markierungen" und "Kategorien" gibt es in der Form nicht (aber was meinst du genau damit?). Du kannst aber nicht nur die Kenntnis abbilden (ignored, unknown, guessed, comprehended, known, well-known und mastered sind aktuell die Optionen), sondern auch Verbindungen zwischen Begriffpaaren erstellen und abfragen, also z. B. "EN/cat - EN/means - DE/Katze" (Sprache und Wort schreibe ich hier als EN/cat, usw.). Damit kann ich deine "Kategorien" abbilden, glaube ich. Ich benutze das, wenn ich besondere Wörter mit anderen verbinden möchte, jenseits von der einfachen "Übersetzung". Ansonsten öffnest du das Programm im Lesemodus mit einem Textdokument als Eingabe (dem Dateipfad dazu). Du kannst von Satz zu Satz springen oder abschnittsweise. Was du als "ganze Abfragen" bezeichnest mache ich händisch, glaube ich, also mit Konsolenbefehlen, um den Inhalt der Dateien zu lesen, wenn ich dich richtig verstehe.
Oh, ich merke mal wieder, ich spreche zu wenig Informatiker. Mit "Markierungen"/ "Kategorien" meine ich die Wörter, die ich markiert habe um die Kenntnis abzubilden. Also: kann das Programm mir automatisch eine Liste erstellen mit allen Wörten, die ich z.B. als "unknown" markiert habe? (natürlich ohne Übersetzung etc) Und wenn ja, kann es das nur für das ganze Dokument oder kann ich auch sagen, aus welchem Textabschnitt ich Wörter haben möchte (z.B. Zeile 1-10)? Was das öffnen angeht: welche Ebook Formate öffnet es denn? So, über meine andere(n) Frage(n) denke ich jetzt noch nach, ich habe keine Ahnung, wie ich sie in Worte fassen soll.
Warum tust du das Eduard? Ein Tag hat doch nur 24 Stunden. Wie soll man denn da noch ein normales Leben neben Journaly führen können, wenn einem ständig solche Schätze an Wissen präsentiert werden und man dadurch immer wieder neugierig wird?
Ist das ein Kompliment oder ein Vorwurf, Lynn? Oder beides? Ein Vorwument (d. h. ein Komplurf), vielleicht.
Ganz klar ein Kompliwurf, Eduard!
Das klingt ein bisschen zu sehr nach 🐶🦴💨, Lynn 😅.
Ich glaube, Journaly ist gerade ziemlich am Ende. Ich bekomme ständig solche Fehlermeldungen wie "Error in connector: Error querying the database: db error: FATAL: remaining connection slots are reserved for non-replication superuser connections". Gerade ist mein Kommentar eben verschwunden (habe ihn neu geschrieben). Vielleicht sind "wir alle" jetzt einfach zu viele xD.
Eduard, das wäre dann ein Kompliwuff 😄 und ich krieg auch Fehlermeldungen. Vielleicht wird auch einfach dran gearbeitet :)
Ah, natürlich. (Mist, ich habe bei der umgekehrten Reihenfolge nicht daran gedacht, dass ihr auch dazwischen antworten könnt :D).
Tjaaa, du wirst nie beim ersten Kommentar ankommen 😈
Jetzt hör auf :D.
Caro: Jetzt verstehe ich, was du meinst, danke. Ich habe ja schon geahnt, was du meinst, aber ich wollte nur sichergehen. Die kurze Antwort ist: noch nicht. Etwas ausführlicher: So etwas (ok, genau das!) wollte ich eigentlich irgendwann einbauen. Die Information ist jedenfalls da, denn die einzelnen Wörter (was ich den Zustand nenne, also die Kenntnis eines Worts in einer bestimmten Sprache) werden (als Dateien) gespeichert. Der Inhalt der Datei "Katze.tsv" ist also zum Beispiel "Katze KNOWN 20200510184310000" (Name, Zustand, Zeitstempel). Solche Daten werden in einem getrennten Projekt (Verzeichnis) gespeichert, haben also nichts direkt mit den Büchern zu tun, sondern befinden sich in einem eigenen Verzeichnis. Die Bücher an sich sind aktuell einfache Textdateien (.txt), die ich im Voraus mit einem EBook-Programm wie Calibre umgewandelt habe. Das heißt, das Programm an sich ist kein EBook-Reader, welches mit verschiedenen EBook-Formaten (.epub, .mobi, usw.) umgehen kann. Die Lesefunktion ist einfach eine stupide Ausgabe Zeile-pro-Zeile oder Satz-pro-Satz. Bis jetzt ist das Tool vor allem etwas wirklich sehr einfaches und minimales, was für mich eigentlich für den Wortschatz meiner Fremdsprachen (und sogar meiner Muttersprache) ausreicht. Irgendwie habe ich bis jetzt eher Spaß an der Bedienung als an der Programmierung gehabt :), denn ich sehe ja den zeitlichen Fortschritt und das ist ziemlich motivierend. Grundsätzlich muss man zwischen "Programm(code)", "Buch" und "Wortschatz" unterscheiden. Es gibt also entsprechend drei verschiedene Verzeichnisse. Der Zustand (die Kenntnis) der einzelnen Wörter wird also global (nicht kontextbezogen) gespeichert. ABER: Es gibt eine andere Komponente des Projektes, welche dir aus einem Buch (Textdokument) die einzelnen Sätze liefert und auch die einzelnen Wörter. Pro Wort gibt es also eine Datei mit allen Sätzen, in denen das Wort auftaucht. So kann ich mit einer anderen Komponente (Questionner, nenne ich's) abfragen, welche Wörter ich kenne und welche nicht (also den Zustand abfragen). Konkret macht der Questionner Folgendes: Du übst damit den Wortschatz eines bestimmten Buches (das ist also sehr wohl kontextbezogen). Du siehst also das zu schätzende Wort, einen Beispielsatz und musst urteilen, ob du es verstehst oder nicht (also einen Zustand dafür auswählen/eingeben). Du kannst dir also vorstellen, dass es eine kleine Sammlung an verschiedenen Komponenten/Modulen ist, die sehr spezialisiert (und minimal) sind. Und du hast recht: Es wäre sinnvoll, noch eine Komponente zu schreiben, die dir alle Wörter mit einem bestimmten Zustand innerhalb eines Buches (oder eines Abschnitts) liefert. Solch eine Filterung mache ich, wie gesagt, bis jetzt einfach mit Befehlen, so habe ich z. B. gestern gezählt (zählen lassen), wie viele Wörter insgesamt die einzelnen Zustände haben (bspw. Zauberschnippschnapp IGNORED 20201209083641000, aus Harry Potter :P). Kurze Antwort: Es wäre also schön, diese Filterungsmöglichkeit einzubauen. Gute Idee! Ich bin gespannt, was für andere Fragen/Vorschläge du noch hast. Und Mist: Das hätte ich lieber in einem anderen Beitrag (besser!) schreiben sollen, sorry für die ellenlange Antwort.
@Maria: Ich glaube, nach Lindas Kommentar gestern noch einen von dir gelesen zu haben. Vielleicht habe ich es nur geträumt :D. Jedenfalls: Danke. Und ja, die Offline-Funktionalität ist mir auch sehr wichtig. Ich benutze das Programm ja nicht immer auf dem Rechner, also ist es ziemlich praktisch, eine mobile Variante (mit demselben Code und der App "Termux" als Ausführungsumgebung) zu haben. Jedenfalls: Danke für die Korrekturen und deine Anmerkungen! Ich werde den Text (später) noch anpassen.
Linda: Danke! Du hast ja direkt den Nerv getroffen. Die Antwort ist: Jein. Direkt unter Windows geht es aus zwei Gründen nicht, ich habe das Programm aber innerhalb der WSL-Umgebung unter Windows regelmäßig verwendet; es ist also grundsätzlich möglich. Da du ja ein Technik-Freak bist, kann ich ruhig erzählen, was das ist (oder du kennst es sogar schon): WSL ist das "Windows Subsystem for Linux", was eigentlich nur bedeutet, dass du unter Windows die Möglichkeit hast, Linux-Programme (Konsolenprogramme wie meins) auszuführen. Damit geht es. Die "nativere" Variante funktioniert leider nicht, wie ich zu spät erkannt habe. Das Programm an sich ist in Java geschrieben, was betriebssystemunabhängig sein sollte (ist), aber die Bibliothek für die "Text-GUI" (TUI: text-based user interface) hat damit wohl ein Problem. Dann gibt es auch noch ein grundsätzlicheres Problem mit der Art und Weise, wie ich die Wörter (die Kenntnis) speichere, und zwar als Dateien. Ich wollte eigentlich auf Datenbanken verzichten, um es einfach zu halten (Punkt mit "Klartext" auf der Liste) und weil ich es eigentlich so bevorzuge. Das Problem dabei ist aber, dass die Dateinamen so heißen wie die Wörter selbst, sind also in Unicode (UTF-8) gespeichert. Das ist unter Windows ein Tabu (obwohl Windows an sich mittlerweise Unicode-fähig ist oder sein sollte). Damit gibt es auch noch Probleme, weil Windows bestimmte Dateinamen nicht erlaubt (manche Wörter sind reserviert, was SEHR blöd ist!). Eine Überlegung wäre, entweder eine ZIP-Datei als Grundlage zu nehmen (anstatt das Verzeichnis mit den Wörtern drin), oder eben auf eine Datenbank komplett umzusteigen, wie die meisten Client-Programme sowieso arbeiten (wie Anki oder LWT). Aber für mich als Programmierer finde ich den Ansatz eines Verzeichnisses wirklich gut, denn so kann ich das ganze mit einem Versionsverwaltungssystem wie "git" ... nun, verwalten. Das hat Vorteile, welche Datenbanken nicht bieten können. Ich bin mit der Lösung jedoch noch nicht ganz zufrieden, denn ich möchte ja, dass es überall läuft.
Harald: Perfekt ist es nicht, aber danke trotzdem! Zu deinen Anmerkungen: Ich kann sie alle nachvollziehen und sogar teilweise teilen. Über die zwei Punkte, die du ansprichst (diskrete VS. kontinuierliche Abbildung der Wortkenntnisse, Elektronik VS. Papier), habe ich am Anfang (zu) lange gegrübelt. Eigentlich wollte ich zuerst dem Benutzer ermöglichen, die Kenntnis als kontinuierliche Größe zwischen 0 und 1 (100%) auswählen zu können. Mittlerweile finde ich es gut, dass es nur bestimmte Bereiche gibt mit Namen (um die kombinatorische Explosion zu vermeiden; du änderst ja den Zustand regelmäßig). Das könnte man aber noch verfeinern, indem man beide Ansätze kombiniert (d. h. die Bereiche sind einfach die Quantile, sozusagen). Vielleicht hast du ja eine Idee für eine bessere Darstellungsart.
Kristina: Vielen Dank! Dein Kommentar hat mich gestern schon motiviert!
Marias Beitrag habe ich auch gesehen und mich gewundert, dass er verschwunden ist. Vielleicht hat ein abstürzender Journaly-Server eine Datenbank geschreddert und es musste ein Backup eingespielt werden, das Marias Post gerade noch nicht enthielt? Wer weiß. Die sieben Optionen, die du weiter oben genannt hast, sind deutlich mehr als ich erwartet hätte, das sollte für den Anfang reichen. Cool wäre es natürlich, wenn der Benutzer zusätzliche Kategorien selber definieren könnte. Aber klar, technische Ideen kann man en masse produzieren - die Frage ist nur, was jeweils sinnvoll ist (d.h. den Arbeitsaufwand lohnt).
Zusätzliche Kategorien? Kannst du konkrete Namen als Beispiel angeben? Ich frage, weil ich wahrscheinlich was anderes im Kopf habe. Ich meine, die sieben Kategorien sind ja gewissermaßen eine Aufteilung der Werte 0 bis 100, ohne konkrete Zahlen festzulegen. Oder besser gesagt: Die Aufzählung hat eine natürliche Reihenfolge. Sind deine Kategorien begrifflich gesehen orthogonal dazu oder wie? Ansonsten passt das nicht ganz. Ich möchte auch, dass dies eine universellere Skala ist, also nicht nur für einen bestimmten Benutzer, sondern alle.
Jetzt bist du ja doch noch bis zum ersten Kommentar gekommen! Danke für die ausführliche Antwort =) die meisten anderen Dinge hast du in den anderen ausführlichen Antworten schon angesprochen. Eine (vielleicht doofe) Frage hab ich aber noch: Wenn ich das richtig erkannt hab, tippst du am Anfang in den Videos Befehle ein, die dann irgendwann dazu führen, dass der Text des Buchs geöffnet wird. Angenommen, ich speicher alle meine Bücher im selben Ordner. Dann muss ich den besagten Text doch nur einmal daran anpassen und als .txt abspeichern. Wenn ich dann bei jedem neuen Buch nur den Dateinamen ändere, kann ich die Vorlage einfach immer wieder benutzen, oder? Oder muss der Benutzer das grundsätzlich am Ende nicht? Ich hab keinerlei Erfahrung mit Linux =D
Das ist ein sehr guter Punkt, Caro. Was meinst du genau mit "Vorlage"? Kurze Antwort (zu dem, was ich verstehe): Die Verzeichnisstruktur ist aktuell nicht so schön. Lange Antwort: Ja, am Anfang wird zum Verzeichnis eines Buches navigiert (cd - change directory) und dann das eigene Programm gestartet. Dafür habe ich ein Skript (ein Befehl in einer Datei), um den eigentlichen Befehl auszuführen. Der Befehl lautet konkret so: "${EDWORDS}/Words/bin/Words" ./"book.txt" "${WORDSFILES}/src/main/resources/status/DE". Hier sind $EDWORDS und $WORDSFILES nur Umgebungsvariablen (d. h. ich habe den konkreten Pfad woanders hinterlegt). Wie du siehst, gibt es drei Teile: Zuerst steht der Pfad zum Programm ("Words" hieß es zuerst einfach), danach gibt es das Buch (book.txt) und danach den Pfad zum Verzeichnis mit den deutschen Wörtern. Also (1) Programm, (2) Buch und (3) Deutschkenntnisse, sozusagen. Ich habe die Bücher jeweils in einem Verzeichnis. Also z. B. "EBooks/DE/HP1" und "EBooks/DE/HP2". Innerhalb jedes Verzeichnisses gibt es die Dateien (Plural!), welche das Programm braucht, um das Buch zu öffnen. Es sind mehrere Dateien, und zwar diese: (1) book, (2) book.txt, (3) book_words.txt, (4) book_sentences.txt, (5) book_words_in_order.txt, (6) reader.sh, (7) questioner.sh und (8) reviewer.sh. Wichtig ist eigentlich nur die "book.txt"; das ist das Buch an sich. Alle anderen Dateien werden vom Programm erstellt (dafür ist ein anderer Befehl nötig, der nicht in den 'Videos' zu sehen ist). Also zuerst habe ich aus dem Buch mit dem Programm die Sätze und die Wörter daraus extrahiert (das erstellt die Dateien "book_words.txt", "book_words_in_oder.txt", "book_sentences.txt" und das Verzeichnis "books"). Diese ganze Verzeichnisstruktur hat sich einfach so ergeben und funktioniert für mich, ist aber zugegeben etwas merkwürdig und sollte wahrscheinlich angepasst werden. Die Idee ist dabei nur, dass das Programm alles, was es braucht, in Dateien speichert. Das Buch "HP1" in "HP1/book.txt" enthält die einzelnen Sätze also im Pfad "HP1/book" (gleicher Name, ohne Dateiendung, also ein Verzeichnis). Die Komponente zum Üben vom Wortschatz eines Buches benutzt diese Information, um zu einem bestimmten Wort die passenden Sätze zu finden: Der Befehl dazu ist (für mich als Komfortfunktion) in der Datei "questioner.sh" und "reviewer.sh" in jedem Buchverzeichnis. Ist das jetzt etwas klarer geworden? Oh, und das alles hat nicht so sehr mit Linux zu tun, sondern mit mir. Ich habe ja (spontan?) entschieden, wie die Verzeichnisstruktur aussieht. Aber das zu ändern sollte ja kein Problem sein. Das "Problem" (oder vielmehr die Frage) ist: Wie sieht dann die Verzeichnisstruktur aus, wenn du auf einem gemeinsamen Verzeichnis direkt die Bücher (hp1.txt, hp2.txt) hast. Das Programm braucht ja auch die anderen Dateien dazu. Es wäre doch etwas hässlich, alles zusammenzumischen, oder?
Vielleicht könnte man es so lösen: Die Bücher (die .txt-Dinger) werden "wo auch immer" gespeichert. Das Programm benutzt (woanders!) alles, was es braucht. Also: Es sollte ja nicht so sein, dass das Buch an sich zusammen mit den Dateien des Programms "lebt". Wie gesagt, dass ist aber nur meine aktuelle Lösung. Das Buch im TXT-Format ist ja auch nicht direkt das Buch, was ich habe (.epub), sondern nur eine Umwandung davon. Calibre arbeitet übrigens auch so, wie ich hier gesagt habe: Es macht am Anfang eine Kopie des Buches und fertig. Vielleicht sollte ich es auch so lösen. Wie gesagt: Das ist ein sehr guter Punkt. Ich fasse es für mich zusammen (damit ich weiß, was ich zu tun habe :D): Es fehlt eine 'Importfunktion', welche anhand einer einzelnen Text-Datei (Buch) in einem eigenen internen Verzeichnis alles erstellt, was das Programm für die richtige Arbeitsweise braucht. [Benutzerdaten VS Programmdaten]. Danke Caro!
Ok, mir war nicht bewusst, dass das Programm selbst noch zugehörige Dateien erstellt, die mit in den Ordner kommen. Klingt aber logisch. Zu der "Vorlage": du hast ja angekündigt, dass man das Programm nicht über Buttons steuert. Das heißt ich kann nicht einfach auf "Öffnen" klicken und eine Datei auswählen, sondern muss dem Programm anders klarmachen, was ich grade vorhabe. Habe es mir ein bisschen so vorgestellt wie in LaTeX, da muss ich über die verschiedenen usepackages ja auch erstmal sagen, welche Sprache, welchen Zitierstil etc ich verwenden möchte. Das hab ich als Template einfach in einer .txt-Datei gespeichert, damit ich es nicht immer wieder neu tippen muss (und meine Informatikerfreunde noch mehr in den Wahnsinn treibe). Die Frage war also eigentlich: wie kompliziert ist es für mich, ein Buch zu öffnen?
Da haben sich unsere Kommentare wohl überschnitten. Ich bin immer gerne unbeabsichtigt hilfreich =D
Du kennst LaTeX, cool. Nein, du solltest nicht den Inhalt der .tex-Datei mit dem eigentlichen Befehl zum Kompilieren (zum Erstellen des DVI- oder PDF-Dokumentes) verwechseln. Die LaTeX-Pakete (das, was du mit \usepackage{} ansprichst bzw. importierst) kommen aus einem Repository wie CTAN und werden irgendwo auf der Festplatte gespeichert. Das LaTeX-Programm (der Befehl pdflatex, zum Beispiel) ist aber was anderes. Mein Programm, wie jedes Konsolenprogramm auch, wird mit einem Befehl ausgeführt. Das Programm bekommt aber nicht nur den Pfad des Buchs als Parameter (weitere Information), sondern auch den Pfad zum Wortschatz. Der Befehl ist also einfach die dreiteilige Zeichenkette "Pfad-zum-Programm [Leerzeichen] Pfad-zum-Buch [Leerzeichen] Pfad-zum-Wortschatz". Das setzt aber schon voraus, dass man zuerst den Befehl "Pfad-zum-Programm [Leerzeichen] Pfad-zum-Buch" ausgeführt hat, um die internen Dateien zu erstellen. [Ja, das sollte einfacher sein. Eigentlich sollte ein Befehl reichen, um (a) importieren falls nötig und (b) lesen].
Eigentlich öffne ich die Bücher immer so: Ich navigiere zum Verzeichnis und dann schreibe "bash reader.sh" oder "./reader.sh" (Jacke wie Hose). Das war's. Jetzt müsste ich nur dafür sorgen, dass das alles automatisch erstellt wird.
Nachdem Word mit 60 Seiten Masterarbeit überfordert war, musste ich mir für das nächste Projekt was besseres suchen. Hab mich bequatschen lassen, mal sehen wie es wird =D Ok, das öffnen klingt einfach, hatte mir das umständlicher vorgestellt.
Ich überlege gerade, ob ich doch Docker einsetze, um für den Benutzer einfach alles leichter zu machen (also, um einen einfachen Weg zu haben, das Programm herunterzuladen, zu konfigurieren und auszuführen). Das würde auch unter Windows funktionieren. Wenn du Lust hast, kannst du mir ja vielleicht sagen, ob es für dich einfach ist, https://docs.docker.com/docker-for-windows/install/ zu installieren (wie dort beschrieben). Das würde mir enorm weiterhelfen.
Hm ... aber selbst das ist wieder zu technisch, wahrscheinlich. Leider ist das blöde Docker unter Windows etwas kompliziert einzurichten, als es nötig sein sollte. Unter Linux ist es wirklich nur EIN Befehl. 🪟🐧 ... Und selbst dann, bleibt ja die Frage, wie man auf einfacher Art und Weise die Bücher importiert. Ich glaube, ich muss es einfach anders angehen und langsam eine GUI einbauen (obwohl ich das eigentlich nicht mag xD) und das Problem mit der Datenpersistierung engültig sinnvoll lösen. Was meint ihr?
Mal sehen, was mein PC dazu sagt. Er fristet seine letzten Tage =D Edit: läuft leider auf meinem Betriebssystem nicht, da machen sich die fehlenden Updates bemerkbar. Und was GUI und Datenpersistierung angeht: ich habe keine Ahnung, wovon du redest 😅
Eigentlich kannst du Docker zuerst vergessen, und stattdessen versuchen (wie gesagt, wenn du möchtest und dein PC dich lässt), die WSL einzurichten: https://docs.microsoft.com/de-de/windows/wsl/install-win10. Denn das ist auch eine Voraussetzung für Docker. Damit (mit dieser WSL2) würde mein Programm eigentlich schon laufen. Dass ist auch, was ich unter Windows persönlich verwende. Die Einrichtung ist immer noch nicht GANZ einfach, aber insgesamt einfacher, hoffe ich. [Hast du überhaupt ein aktuelles Windows 10? :D]
Ja, ich habe Windows 10, aber ein defekter Akku hat dazu geführt, dass mein PC keine Updates mehr machen wollte, daraus resultieren inzwischen einige "Folgeerkrankungen". Hab ihn die letzten zwei Jahre nicht wirklich gebraucht, deshalb wars egal. Mittwoch gibts nen neuen =) Soll ich die vereinfachte oder die manuelle Intallation wählen?
Caro: Sorry, ich meine nur, ein Desktop-Programm daraus zu machen. Aber dann muss ich wirklich viel umbauen und neues schreiben. Worauf ich eigentlich keine Lust habe :D.
Achso, dann lass es doch so. Wenn du es kostenlos zur Verfügung stellst, können wir uns auch das WSL-Dings installieren.
Oh, dann ist ja vielleicht noch Hoffnung für dieses WSL-Zeugs ;). Ich glaube, das wäre (für mich :D :D) erstmal das Beste. Dann wärest du sowas wie ein Alpha-User :D. Vielleicht machen Linda und Lynn und Harald dann auch mit :P. 🤔💭 🥺
Ich wäre gerne ein Alpha-User, aber nicht mehr mit diesem PC, befürchte ich. Mein Betriebssystem ist auch für das WSL-Ding zu alt. Mal schauen, was ab Mittwoch geht (ist ein Dienst-PC, es ist gut möglich, dass ich erst die IT bestechen muss, um ein Admin Passwort zu bekommen)
Falls du ein Android-Handy (oder Tablet) hast, könntest du es auch damit ausführen, wenn du https://termux.com/ installierst. So benutze ich es unterwegs auch. (Siehe Titelbild oder das dritte 'Video')
Ich mag mein iPhone sehr 🙃 Android Tablet ist im Moment noch in Planung, muss mich mal umhören was gut ist.
🤣🤣 Ich sehe schon, es wäre vielleicht doch angebracht, ein Desktop-Programm und eine Android-App selbst zu schreiben... (Ich will aber nicht xD)
Für deine potentiellen Alpha-Nutzer wäre es vermutlich leichter =D aber wie gesagt, mit einem funktionierenden Gerät hab ich auch kein Problem damit, mir extra Kram zu installieren. So lange du mir erklärst wie es geht ;)
Oh, ich wollte schon irgendwann eine Desktopanwendung daraus machen, aber dann habe ich ein neues Hobby entdeckt: Journaly-Texte schreiben.
Ja, ich dachte, dass der eine oder andere Benutzer deines Tools einzelne Wörter vielleicht als "Fremdwort", "Slang", "veraltet", "Jugendsprache", "Dialekt" oder ähnliches kennzeichnen können möchte. In meinem eigenen Lernsystem habe ich für englische Wörter die optionalen Markierungen "britisch" und "amerikanisch", analog für Spanisch. Das ist tatsächlich unabhängig von deiner Kenntnis-Skala.
Ja, sowas gibt es auch schon, in allgemeiner Form. Es gibt nicht nur die Wörter (den Zustand der Kenntnis), sondern auch beliebige Verbindungsmöglichkeiten zwischen 2 Wörtern. Eigentlich sind die drei Bestandteile homogen: Die "Verbindung" an sich ist auch ein "Begriff". Du hast also z. B. die Tupel (DE/Knacki, DE/ist, DE/umgangssprachlich). Oder wie ich es verwende: (DE/App, DE/Artikel, DE/das) und (DE/App, DE/Artikel, DE/die) :P. Oder mein Favorit: (DE/Artikel, DE/Artikel, DE/der) :D. Das ist etwas umständlich (aber allgemein). Vielleicht wären direkte "Tags" wie du meinst (meinst du wie in Anki?) sinnvoll, aber ich möchte ja, dass die "Verbindung" an sich auch genauso dargestellt wird, wie die Wörter auch (sie sind Teil einer Sprache und haben einen Kenntnisstand). Ich habe also sowohl "status" als auch "connections" drin.
Für diejenigen von euch, die noch Interesse an das kleine Programm haben sollten: Ich habe es gerade bei Docker Hub hochgeladen: https://hub.docker.com/r/edufuga/edwords. Ich werde bald eine Anleitung bzw. einen Text mit mehr Details hier auf Journaly schreiben. Achtung: Das Docker Image sollte (noch) nicht als fertiges Programm eingesetzt werden, sondern dient lediglich als Vorschau bzw. Demo.
(Konkret enthält das Docker-Image das Programm, mein Wortschatz und meine Journaly-Texte.)
Die Voraussetzung dafür ist Docker. Unter Linux und macOS ist die Installation sehr einfach. Für Windows ist es etwas komplizierter; die Schritte zur Installation befinden sich hier: https://docs.docker.com/desktop/windows/install/. Viel Erfolg und Spaß. P. S.: Um das Programm zu demonstieren, habe ich ebendiesen Text genommen :)
Der Befehl, um das Programm zu starten, lautet:
docker run --rm -it edufuga/edwords:latest