Weiterentwicklung

Aneamal wird aktiv weiterentwickelt. Diese Seite listet Probleme und Ideen auf, die auf Bearbeitung warten. Orientierung bieten dabei W-Fragen:

Berücksichtigt werden sollten auch die Fragen, ob es Implikationen für Sicherheit und Datenschutz hätte, ob es Kollisionen mit bestehender Syntax gibt und ob Alternativen denkbar sind.

Bekannte Probleme

Nur halb angezeigte Vorschaubilder

Es ist bei mit [j]-> generierten Vorschaubildern bei David mehr als einmal vorgekommen, dass diese nicht komplett waren. Leider konnte Martin das Problem nicht ebenfalls provozieren, um die genaue Ursache festzustellen, was ein Beheben schwierig macht. Martin hat zwar Ideen, wie man es beheben könnte, aber kann ihre Tüchtigkeit nicht testen, wenn er das Problem nicht erzeugen kann.

Diskussion

Unerwünschte Liste bei Satzende am Blockanfang

Wenn wie in dem Beispiel:

Faszinierend, dass im rechtwinkligen Dreieck die Formel

$$a^2+b^2=c^2$$

gilt.

Faszinierend, dass im rechtwinkligen Dreieck die Formel

$$a^2+b^2=c^2$$

das Ende eines Satzes am Blockanfang steht („gilt.“), dann interpretiert Aneamal das als Listenpunkt. Noch schlimmer kann es kommen, wenn das Wort vor dem Endpunkt so lang ist, dass der Browser es als zu lang für eine Listennummer ansieht und stattdessen auf die nächste noch unbenutzte Nummer (im Beispiel „a.“) zurückfällt:

Ich habe es schon zuvor gesagt: Die Formel

$$a^2+b^2=c^2$$

fasziniert.

Ich habe es schon zuvor gesagt: Die Formel

$$a^2+b^2=c^2$$

Dies lässt sich mit einem Backslash verhindern, ist aber ein überraschendes, wohl kaum erwünschtes Verhalten.

Diskussion

Code inline am Absatzanfang und Codeblock verwechselbar

Wenn man Code am Absatzanfang kennzeichnen möchte, geht das nicht einfach mit |…| wie sonst im Fließtext, weil das zur Verwechslung mit einem Codeblock führt, welcher mit | am Anfang jeder Zeile gekennzeichnet wird. Im folgenden Beispiel wird also die ganze Zeile als Codeblock interpretiert, nicht nur das erste Wort als Inline-Code:

|echo| gibt in PHP eine Zeichenkette aus

Behelfen kann man sich zum Beispiel mit Gravis, sodass kein | mehr am Absatzanfang steht:

`|echo|` gibt in PHP eine Zeichenkette aus

Diskussion

Variablendefinition und Variablennutzung am Zeilenanfang verwechselbar

Wenn man Variablen am Zeilenanfang verwenden möchte, geht das nicht einfach mit @varname wie sonst im Fließtext, weil das zur Verwechslung mit einer Meta-Variablendefinition führt. So entsteht im folgenden Beispiel ein Fehler:

% Variablendefinition
@ author: Martin

% beabsichtigt als Variablennutzung,
% wird aber als fehlerhafte Definition interpretiert
@author wurde in Potsdam geboren.
Errors in meta (/projekt/aneamal/entwicklung/index.nml > embedded file):
189: Unexpected character in metadata name: author wurde in Potsdam geboren. (more info).

Behelfen kann man sich mit Gravis, sodass die genutzte Variable nicht mehr am Zeilenanfang steht:

@ author: Martin

`@author` wurde in Potsdam geboren.

Martin wurde in Potsdam geboren.

Diskussion

Geplantes

Scoped Styles

Was
ermöglichen, dass Stylesheets aus eingebundenen Dateien auch nur den eingebundenen Bereich betreffen und nicht das komplette Dokument, wohingegen Stylesheets aus dem Hauptdokument auch auf eingebundene Bereiche wirken
Wozu
einfachere Kontrolle der Darstellung, geringeres Risiko von Nebenwirkungen
Warum
weniger zerbissene Lippen und ausgerissene Haare; Verhalten von Stylesheets wäre dann analog zum Beispiel zu Metavariablen in Aneamal, die auch an eingebundene Bereiche vererbt werden, aber nicht umgekehrt, und einheitliches Verhalten senkt die Lernkurve, was wiederum zu einer größeren Nutzerzufriedenheit führt
Woher
Martin wünscht sich das quasi seit Anbeginn von Aneamal
Wann
wenn es irgendeine annehmbare Form von Browserunterstützung gibt
Wo
html.php oder im Falle einer Lösung mittels eigenem CSS-Parser eine Extradatei
Wer
Martin?
Wie
auf Browserunterstützung warten/hinwirken oder CSS parsen und automatisch umschreiben, um das Ergebnis zu simulieren, was aber einen riesigen Aufwand oder neue Abhängigkeiten mit andauernder Update-Notwendigkeit bedeutet
Weitere

Diskussion

Automatisierte Tests

Was
Tests für Aneamal-Syntax-Elemente erstellen, die automatisiert ausgeführt und ausgewertet werden
Wozu
um Fehler beim Erweitern des Aneamal-HTML-Konverters und insbesondere unbeabsichtigte Nebenwirkungen zu erkennen; um zu erkennen, ob ein zukünftig möglicher alternativer Aneamal-HTML-Konverter zu gleichen Ergebnissen kommt
Warum
eine möglichst fehlerfreie Software erhöht die Sicherheit und Zufriedenheit von Autoren
Woher
Martin
Wann
?
Wo
Das Testsystem wird nicht in Aneamal integriert, sondern ist davon weitgehend unabhängig.
Wer
Martin?
Wie
.nml-Dokumente werden manuell erstellt, vom Konverter nach HTML übersetzt und die Ausgabe einmalig manuell auf Korrektheit überprüft. Diese Ausgabe wird als statische Datei (Soll-Wert) gespeichert. Der automatische Test besteht darin, die nml-Dokumente erneut vom Konverter übersetzen zu lassen und die Ausgabe mit dem Soll-Wert zu vergleichen. Im Fall von Abweichungen wird der Unterschied gemeldet.
Weitere

Diskussion

Mögliches

Vorschaubilder verschiedener Auflösung bei [j]-> generieren

Was
Vorschaubilder mit verschiedenen Auflösungen für ein Original generieren und Browsern als Alternativen anbieten
Wozu
Webseiten werden vom Handy bis zum Wandprojektor heute auf sehr verschiedenen Geräten mit unterschiedlicher Auflösung, Pixeldichte, Datentransfervolumen/-geschwindigkeit angezeigt. Verschiedene Vorschaubilder können den sich daraus ergebenden unterschiedlichen Anforderungen gerecht werden.
Warum
gute Darstellungsqualität verschafft Lesern einen positiven Eindruck; optimierter Datentransfer lässt Seiten ggf. schneller laden und spart so Zeit/Geld für Leser und Seitenbetreiber und hilft dem Suchmaschinenranking => mehr Leser
Woher
Martin beim Verfolgen von Webstandards
Wann
?
Wo
function file_preview in html.php (bei Nutzung von function resize_image in functions.php)
Wer
Martin
Wie
mehrere Vorschaubilder durch unterschiedliche Dateinamen unterscheiden und in HTML per <img srcset> ggf. auch mit sizes-Attribut oder mit <picture>-Element und <source>-Elementen bereitstellen – siehe https://w3c.github.io/html/semantics-embedded-content.html
Weitere
webp-Support?

Diskussion

Übersetzung der Fehlermeldungen

Was
die Fehlermeldungen, die Aneamal direkt in einer Website ausgibt, bzw. die verlinkten Erläuterungen zu den Fehlermeldungen in andere Sprachen als Englisch übersetzen
Wozu
höhere Verständlichkeit für Autoren
Warum
Gerade, wenn man etwas falsch gemacht hat, ist es hilfreich, verständliche Erläuterungen in der eigenen Sprache zu erhalten. Das beschleunigt die Behebung und erhöht damit die Autorenzufriedenheit.
Woher
Martin
Wann
?
Wo
Die Präferenz für eine Sprache für Fehlermeldungen könnte in aneamal-config.php hinterlegt werden. Ein Orientierung an der Sprache der bearbeiteten Seite (@lang) erscheint mir weniger sinnvoll, weil sie nicht der Muttersprache des technischen Autors entsprechen muss. In html.php Fehlermeldungen in mehreren Sprachen zu speichern, erscheint mir nicht sinnvoll – eher ein Verzeichnis /aneamal/lang/ mit einer Übersetzungsdatei pro Sprache, vgl. Wordpress.
Für die verlinkten Erläuterungen zu den Fehlermeldungen besteht bereits die Möglichkeit, in aneamal-config.php eine Adresse für Erläuterungen in anderer Sprache zu hinterlegen
Wer
technische Umsetzung Martin; aber Übersetzungen ?
Wie
eine Übersetzungsdatei als Vorlage erstellen und Leute einladen, Übersetzungen anzufertigen; diese auf aneamal.org zum Herunterladen anbieten – wenn eine solche Übersetzungsdatei im Verzeichnis /aneamal/lang/ liegt und der Sprachpräferenz in aneamal-config.php entspricht, die übersetzte Fehlermeldung statt der englischen Fehlermeldung anzeigen
Weitere
aneamal.org mehrsprachig machen

Diskussion

Heredoc-Kurzsyntax

Was
Heredocs bestehen aus einer Anweisung zum Einbinden einer Datei, in der Regel in eckigen Klammern [a-warnung] bzw. als Metaangabe @style, gefolgt von Zeilen die in der Regel alle mit einem | beginnen bzw. bei Metaangaben mit @|. Die wiederholten Zeichen am Zeilenanfang kann man per Sandwich-Markup automatisch setzen lassen, was einem Arbeit erspart. Allerdings erhält man dadurch einen zweizeiligen Start des Heredocs, zum Beispiel:
[a-warnung]
/|/⚠️

Eine einzeilige Lösung wäre wünschenswert.
Wozu
weniger Tipparbeit, mehr Übersichtlichkeit?
Warum
zur Tastenschonung und Freude von Autoren
Woher
David
Wann
?
Wo
html.php
Wer
Martin
Wie
vorzugsweise etwas wie […]/END, doch beachte die unten stehenden Anmerkungen – beim derzeitigen Konverteraufbau wäre etwas wie //…/END leichter umzusetzen
Weitere

Diskussion

Eine Syntax, die sich wie

[a-gedichtbox]/🐾
...
🐾

an das Gewohnte anlehnt, verkompliziert die Verarbeitung auf technischer Seite, wohingegen so etwas wie das Sandwich-Markup relativ einfach ist. Das hängt damit zusammen, dass Sandwich-Markup /…/… wie Kommentare % und Metadaten @ quasi überall am Zeilenanfang stehen kann, wohingegen eckige Klammern […] nur eine Sonderbedeutung haben, wenn sie am Blockanfang stehen. Daher kann Sandwich-Markup sehr früh bei der Interpretation eines Dokumentes verarbeitet werden. Die Zerlegung eines Dokumentes in Blöcke geschieht derzeit erst später. Das ist momentan zu spät für eine Tippsparsyntax, weil vorher schon Leerzeichen und Tabulatorzeichen von allen Zeilenanfängen getilgt werden. In Aneamal haben sie keine Bedeutung. In anderen Dateitypen wie zum Beispiel in Textdateien mit Quellcode der Programmiersprache Python spielen Leerzeichen aber eine entscheidende Rolle. In /2015/mehrdimensional-kuchen-schneiden/ zum Beispiel habe ich Python-Code eingebunden:

|def find (dimensions):
|    def findr (countdown, step, prod, cuts):
|        diff = step * (cuts[-1] - 1) + prod
|        if diff > 0:
|            cuts[-1] -= diff // step
|            diff %= step
|        if countdown == 1:
|            if diff == 0:
|                print (cuts)
|        else:
|            if diff == 0:
|                cuts[-1] += 1
|                diff += step
|            while cuts[-1] != findr (countdown - 1, diff, prod * (cuts[-1] + 1), cuts + [cuts[-1]]):
|                cuts[-1] += 1
|                diff += step
|        return cuts[-1]
|    if isinstance (dimensions, int) and dimensions > 0:
|        findr (dimensions, -1, 2, [1])

Die | am Anfang jeder Zeile verhindern auch, dass die Leerzeichen zur Einrückung der Befehle vom Aneamal-Konverter entfernt werden. Wenn ich hier Sandwich-Markup nutze

/|/🐾
def find (dimensions):
    def findr (countdown, step, prod, cuts):
        diff = step * (cuts[-1] - 1) + prod
        if diff > 0:
            cuts[-1] -= diff // step
            diff %= step
        if countdown == 1:
            if diff == 0:
                print (cuts)
        else:
            if diff == 0:
                cuts[-1] += 1
                diff += step
            while cuts[-1] != findr (countdown - 1, diff, prod * (cuts[-1] + 1), cuts + [cuts[-1]]):
                cuts[-1] += 1
                diff += step
        return cuts[-1]
    if isinstance (dimensions, int) and dimensions > 0:
        findr (dimensions, -1, 2, [1])
🐾

dann funktioniert das noch immer, denn das Sandwich-Markup wird ganz früh verarbeitet und in die Standardsyntax mit | an jedem Zeilenumfang umgewandelt, bevor Leerzeichen am Zeilenanfang entfernt werden. Aber die Zerlegung in Blöcke passiert erst später, sodass eine Verarbeitung von eckigen Klammern, die nur am Blockanfang eine besondere Bedeutung zur Dateieinbindung haben

[t-python]/🐾
def find (dimensions):
    def findr (countdown, step, prod, cuts):
        diff = step * (cuts[-1] - 1) + prod
        if diff > 0:
            cuts[-1] -= diff // step
            diff %= step
        if countdown == 1:
            if diff == 0:
                print (cuts)
        else:
            if diff == 0:
                cuts[-1] += 1
                diff += step
            while cuts[-1] != findr (countdown - 1, diff, prod * (cuts[-1] + 1), cuts + [cuts[-1]]):
                cuts[-1] += 1
                diff += step
        return cuts[-1]
    if isinstance (dimensions, int) and dimensions > 0:
        findr (dimensions, -1, 2, [1])
🐾

derzeit käme, wenn die Leerzeichen schon alle weg sind und der Python-Code also so aussieht:

def find (dimensions):
def findr (countdown, step, prod, cuts):
diff = step * (cuts[-1] - 1) + prod
if diff > 0:
cuts[-1] -= diff // step
diff %= step
if countdown == 1:
if diff == 0:
print (cuts)
else:
if diff == 0:
cuts[-1] += 1
diff += step
while cuts[-1] != findr (countdown - 1, diff, prod * (cuts[-1] + 1), cuts + [cuts[-1]]):
cuts[-1] += 1
diff += step
return cuts[-1]
if isinstance (dimensions, int) and dimensions > 0:
findr (dimensions, -1, 2, [1])

womit er kaputt wäre. Aber das sind technische Details, die sich grundsätzlich lösen lassen.
Klären muss ich allerdings, ob sich solche Details so lösen lassen, dass das Programm nicht
nennenswert langsamer oder komplexer wird. Das relativ frühe Entfernen der Leerzeichen vom
Zeilenanfang spart nämlich einiges an Verarbeitungsaufwand in der Folge ein.

Version ohne mod_rewrite

Was
der Aneamal-Konverter setzt derzeit Unterstützung von URL-Rewriting per mod_rewrite voraus – es soll auch eine Version ohne diese Abhängigkeit geben
Wozu
Einsatz auf Systemen ohne mod_rewrite
Warum
einen größeren Nutzerkreis gewinnen
Woher
Martin
Wann
?
Wo
?
Wer
Martin
Wie
Denkbar wäre, URLs statt domain/pfad/datei als domain/index.php/pfad/datei oder domain/?/pfad/datei anzunehmen. Denkbar wäre auch, die Dateien in der URL mit .nml-Endung aufzurufen und dafür zu sorgen, dass diese Endung mit dem Konverter verknüpft wird
Weitere
Alternativen zu .htaccess anbieten für Server, die mit Alternativen funktionieren

Diskussion

Autokorrekturen statt Fehlermeldungen

Was
Für Fälle, in denen ein Dokument nicht der Aneamal-Syntax entspricht, könnte man definieren, wie diese interpretiert werden sollen, ohne eine Fehlermeldung auszugeben. Beispielsweise könnte in einem Textabsatz bei einem einzigen *, welcher den Beginn eines hervorgehobenen Abschnitts markiert und wozu eigentlich ein weiterer * als Endmarke erwartet wird, definiert werden, dass das Ende des Absatzes dann das Ende des hervorgehobenen Abschnitts ist. Oder es könnte definiert werden, dass ein einziger * in einem Textabsatz gleich \* nur für sich selbst und nicht für einer Hervorhebung steht.
Wozu
dem Autor Korrekturzeit ersparen; das Risiko senken, dass Leser unansehnliche/peinliche Fehlermeldungen sehen
Warum
weniger Störungen ergeben eine höhere Zufriedenheit mit Aneamal
Woher
Martin
Wann
fortlaufend
Wo
html.php
Wer
Martin
Wie
undefinierte Fälle vermeiden, Kurzschreibweisen erlauben, …
Weitere

Diskussion

einfache Update-Funktion

Was
eine automatische Update-Funktion oder eine Hilfe beim Update
Wozu
damit Aneamal-HTML-Konverter im Einsatz leicht auf dem aktuellen Stand bleiben
Warum
sollte eine Sicherheitslücke gefunden werden, wäre es wichtig, diese schnell zu schließen, sodass kein Schaden entsteht; auch ansonsten ist ein komfortables Aktualisieren wichtig im Wettbewerb mit anderer Software
Woher
David, Martin
Wann
?
Wo
?
Wer
Martin, ?
Wie
?
Weitere
Möglichkeit, sich per E-Mail über Updates informieren zu lassen; Update-Möglichkeit für [x]- und [t]-Erweiterungen

Diskussion

Drei- und mehrdimensionale Listen

Was
Zuordnungslisten mit mehr als zwei Schlüsselwörtern pro Eintrag erlauben, siehe Beispiel am Ende von /2015/tabelle-im-texteditor/
Wozu
um entsprechende vorliegende Daten zu visualisieren
Warum
wenn es sich elegant umsetzen ließe, wäre das ein Wettbewerbsvorteil; damit würde eine willkürliche Beschränkung in Aneamal abgebaut und Freiheit ist schön
Woher
Martin
Wann
?
Wo
function relational_list in html.php
Wer
Martin + ?
Wie
In Aneamal muss nur die künstliche Beschränkung aufgehoben werden; aber die Visualisierung zum Beispiel in HTML ist unklar, wenn man von der tabellarischen Darstellung bei zwei Dimensionen ausgeht. Eventuell könnte man Tableisten einsetzen, um in andere zweidimensionale Schnitte einer mehrdimensionalen Liste zu springen.
Weitere

Diskussion

Unwahrscheinliches

Änderung der Schreibrichtung im Text

Was
explizite Markierungen für eine geänderte oder unbekannte Schreibrichtung im Text
Wozu
um im Fall einer Mischung von Text mit unterschiedlicher Schreibrichtung wie zum Beispiel in einem Arabisch-deutschen-Wörterbuch oder bei Zitaten oder Namensnennungen immer eine korrekte Darstellung zu gewährleisten
Warum
Den Bedürfnissen anderer Kulturkreise entgegenzukommen kann den Nutzerkreis erhöhen. Es wird aber auch Leuten, die hauptsächlich in europäischen Schriftsystemen schreiben, damit erleichtert, über Themen aus anderen Regionen der Welt zu schreiben.
Woher
Martin
Wann
?
Wo
html.php
Wer
Martin
Wie
Man könnte vordefinierter Platzhalter zur Angabe der Schreibrichtung einsetzen – ich dachte zunächst an &< und &>, allerdings ist problematisch, dass diese Zeichen abhängig von der Schreibrichtung der Schrift unterschiedlich herum dargestellt werden können und daher leicht verwechselt werden. Vielleicht wäre es sinnvoll, einfach auf Unicode-Kontrollzeichen zu verweisen.
Weitere

Diskussion

eine Installation für mehrere Websites

Was
Es ist möglich, eine Aneamal Installation für zwei Netzauftritte unter derselben Domain zu nutzen, die sich durch den Pfad unterscheiden, zum Beispiel https://example.org/peter/ und https://example.org/paul/. Könnte man es so einrichten, dass dieselbe Installation auch unter verschiedenen Domains liefe?
Wozu
Update-Aufwand reduzieren?
Warum
weniger Aufwand bei Updates erhöht die Bereitschaft dazu, was der Sicherheit zugute kommt; außerdem bleibt so mehrZeit für Inhalte
Woher
David
Wann
?
Wo
?
Wer
Martin
Wie
?
Weitere

Beachte die Möglichkeiten von Kollisionen bei Vorschaubildern und gecacheten Dateien. Datenschutz- und Sicherheitsimplikationen wären zu prüfen. Müsste aneamal-config.php für die in einer Installation verwalteten Websites jeweils getrennt nutzbar sein oder eine Konfiguration für alle Auftritte? Lohnt die zusätzliche Komplexität für den Gewinn an Komfortabilität?

Diskussion

Siehe auch: Verworfene Ideen zur Weiterentwicklung