Wikifunctions:Status-Updates/2024-03-21

From Wikifunctions
This page is a translated version of the page Wikifunctions:Status updates/2024-03-21 and the translation is 100% complete.
Wikifunctions Status-Updates Translate

<translate> Abstract Wikipedia via mailing list</translate> <translate> Abstract Wikipedia on IRC</translate> <translate> Wikifunctions on Telegram</translate> <translate> Wikifunctions on Mastodon</translate> <translate> Wikifunctions on Twitter</translate> <translate> Wikifunctions on Facebook</translate> <translate> Wikifunctions on YouTube</translate> <translate> Wikifunctions website</translate> Translate

Auf dem Weg zur Internationalisierung von Zahlen

Multiplikation ohne Renderer

Wir haben nun die Möglichkeit, Zahlen in Wikifunctions zu internationalisieren, indem wir Renderer und Parser implementieren. Derzeit ist dies nur für natürliche Zahlen konfiguriert, aber es sollte für zukünftige Typen direkt funktionieren.

Es gibt jedoch einen Vorbehalt! Es wurde noch nicht im großen Maßstab getestet und es gibt derzeit einige Geschwindigkeitsprobleme. Aber beginnen wir damit, wie es funktionieren sollte.

Im ersten Bildschirmfoto sehen wir am Beispiel der Multiplikationsfunktion, wie das System früher funktionierte: Die Instanzen der natürlichen Zahlen werden expandiert und ihr Typ und ihr Wert werden als die intern verwendeten Zeichenketten-Typen angezeigt.

Das zweite Bildschirmfoto zeigt den Status, nachdem wir den Renderer (die Anzeigefunktion) und den Parser (die Lesefunktion) für natürliche Zahlen konfiguriert haben. Wenn diese beiden Funktionen konfiguriert sind, reduziert die Benutzeroberfläche die Werte in einzelne Zeilen, sowohl für die Eingabe (für die beiden Argumente der Multiplikation) als auch für die Ausgabe (für das Ergebnis).

Die Konfiguration selbst erfolgt im Wiki, beim Typ natürliche Zahl, wo wir sehen können, dass der Renderer auf natürliche Zahlen anzeigen und der Parser auf natürliche Zahlen lesen eingestellt ist. Das Recht zum Bearbeiten von Typen wird zu einem späteren Zeitpunkt an die Community übergeben, aber die konfigurierten Funktionen sind jetzt für dich bearbeitbar.

Multiplikation mit Renderer

Dies macht die Anzeige für alle Funktionen mit natürlichen Zahlen viel kompakter. Aber das ist noch nicht alles! Beide Funktionen zum Anzeigen und Lesen natürlicher Zahlen nehmen auch eine natürliche Sprache als Parameter an, mit der Idee, dass sowohl das Anzeigen als auch das Lesen der Werte basierend auf der in der Benutzeroberfläche eingestellten Sprache angepasst werden können. Zum Zeitpunkt des Versendens dieses Newsletters wird dieses Argument ignoriert, aber es ist fast alles eingerichtet.

Wenn du dich nicht für technische Details interessierst, kannst du den Rest dieses Abschnitts überspringen.

Um eine Zahl für eine bestimmte Sprache angemessen anzuzeigen, benötigen wir zunächst eine entsprechende Funktion. Auf Wikifunctions hatten wir bereits eine Funktion, die eine große natürliche Zahlenkette durch Hinzufügen von Kommas formatiert. Da sie jedoch für Zeichenketten definiert war, haben wir sie für Zahlen neu erstellt und eine kleine Änderung vorgenommen (eher um eine Diskussion anzustoßen als um eine redaktionelle Entscheidung zu treffen), indem wir in die resultierende Anzeige nur dann Kommas einfügen, wenn die Zahl mehr als vier Ziffern hat. Für die Implementierung haben wir im Wesentlichen die vorherige Implementierung kopiert.

Damit haben wir eine Funktion, mit der wir die Zahl für englische Texte formatieren können. Nun müssen wir diese Funktion irgendwie mit der oben festgelegten Renderer-Funktion verbinden. Dafür haben wir zwei neue Typen erstellt, die uns dabei helfen, zu konfigurieren, welche Sprachen welche Funktion verwenden sollen: eine Konfiguration von Funktionen für eine bestimmte Sprache, die die Funktionsoption für eine Liste von Sprachen verwendet. Damit wurden eine Konfiguration für die Anzeigefunktion und eine für die Lesefunktion erstellt.

Darüber hinaus benötigen wir eine Funktion, die die richtige Funktion für eine bestimmte Sprache auswählt, und zwar anhand dieser Konfigurationsstruktur. Dies ist erforderlich, da in verschiedenen Sprachen unterschiedliche Darstellungsweisen von Werten erwartet werden – Französisch und Deutsch verwenden Punkte statt Kommas als Trennzeichen für dreistellige Gruppen, indisches Englisch verwendet Kommas wie internationales Englisch, jedoch in einem anderen Muster als dreistellige Gruppen, einige Sprachen möchten der Vertrautheit halber möglicherweise nicht-arabische Ziffern verwenden, etc. Und schließlich müssen wir die ausgewählte Funktion anwenden, um die Zahl anzuzeigen. Wir besprechen die Anwendungsfunktion im Abschnitt Funktion der Woche weiter unten.

Aber leider kommt es derzeit häufig zu Zeitüberschreitungen. Du kannst dir die beiden Implementierungen ansehen, die mit der Anzeigefunktion verbunden sind: die einfache, die nur die unformatierte Zeichenkette zurückgibt und die Implementierung, die versucht, die passende Funktion basierend auf der Sprache anzuwenden. Da es bei letzterer zufällig, aber ziemlich häufig Zeitüberschreitungen gibt, ist sie derzeit getrennt, um Störungen der Seite zu vermeiden.

Was soll getan werden?

  1. Funktionen erstellen, die Zahlen für deine Sprache angemessen anzeigen und lesen.
  2. Diese Funktionen dem Konfigurationsobjekt zum Lesen und Anzeigen hinzufügen.
  3. Uns bei der Beschleunigung des Systems helfen.

Bei den Parsern wird Nachsicht empfohlen. Wenn es beispielsweise üblich ist, Zahlen sowohl in einer sprachspezifischen Schrift als auch mit westlichen arabischen Ziffern einzugeben, ist es völlig in Ordnung, beides zuzulassen. Der aktuelle Standardparser lässt Kommas und Punkte an jeder beliebigen Stelle zu, anstatt sicherzustellen, dass sie genau drei Zahlen trennen. Es liegt an der Community, die redaktionelle Entscheidung darüber zu treffen, was sie als Eingabe für eine bestimmte Sprache akzeptiert. Eine gute Qualitätskontrolle ist, ob die Ausgabe der Anzeigefunktion eines Typs für eine Sprache für die Lesefunktion für diese Sprache gültig ist – dass sie ohne Fehler 'hin und zurück' läuft.

Dies alles sind völlig neue, sich noch im Anfangsstadium befindliche Mechanismen, die auf Wikifunctions funktionieren. Wir sind gespannt auf deine Rückmeldung und darauf, was funktioniert und was nicht. Und auch auf die Entwicklung weiterer Funktionen und auf Hilfe bei der Einführung.

Letzte Änderungen an der Software

Diese Woche haben wir an einigen kleineren Funktionen und Fehlerbehebungen sowie an Verbesserungen der Back-End-Dienste gearbeitet. Wir haben angepasst, wie die neuen Lese- und Anzeigefunktionen für Typen (Parser und Renderer) aufgerufen werden, um verwirrende Fehlinterpretationen der Benutzereingaben je nach Klickart zu vermeiden (T359987). Der Bearbeitungslink für alte Versionen war falsch konfiguriert und verweist nun tatsächlich auf die Bearbeitungsseite für diese alte Version und nicht mehr auf die aktuelle (T343653); wir bitten um Entschuldigung!

Wir haben uns um eine fehlende Funktion in der Tabelle der Implementierungen auf Funktionsseiten gekümmert, die nur ein '–' anstelle der Anzahl der bestandenen Tests wie '3/5' anzeigte (T347536). Wir haben einen Teil des Objektumwandlungs-Codes verbessert, wodurch mysteriöse Fehler vermieden werden sollten, die in einigen Fällen die Front-End-Erfahrung beeinträchtigen (T357594). Wir erlauben jetzt die Verwendung leerer Zeichenketten in einem Funktionsselektor, wodurch die Benutzererfahrung in einigen Randfällen nicht mehr beeinträchtigt wird (T346006).

Wir haben die Zugänglichkeit verbessert, indem wir längere, erklärende Titel für die drei fehlenden Dialoge mithilfe des Attributs 'aria-title' und zwei Nur-Symbol-Schaltflächen hinzugefügt haben, eine in der Modusauswahlsteuerung und die andere im Funktions-Explorer. Wir haben neu geschrieben, wie das Abrufen des Status im Front-End gehandhabt wird, wodurch der ausstehende Status beim Laden von Ergebnissen von Tests besser gehandhabt werden sollte (T360018).

Im Rahmen unserer Migrationsarbeiten für Programmiersprachenreferenzen verfügen wir nun über ein Wartungsskript, das den Inhalt im Wiki aktualisiert; wir werden es in Kürze ausführen (T287153). Wir haben unsere Verwendung von i18n überprüft und einige Nachrichten gefunden, die nicht mehr verwendet werden; ihre Entfernung wird die Belastung der Übersetzer verringern. Schließlich haben wir begonnen, die Anzeigeaktionen auf Funktionsseiten zu verfolgen, damit wir besser verstehen, wer Wikifunctions verwendet und wo wir möglicherweise Verbesserungen vornehmen müssen (T357069).

Andauernde Diskussion zur Identität

Letzte Woche haben wir eine Frage zum Arbeiten mit der Identität gestellt. Die Diskussion ist noch im Gange und das Team wird ihr in Kürze mehr Zeit widmen.

Funktion der Woche: anwenden (Z13036)

Anwenden ist eine der grundlegendsten Funktionen in der Informatik und dennoch in vielen Programmiersprachen und -systemen nicht oder nur mit großem Aufwand verfügbar. Anwenden benötigt, so wie es in Wikifunctions definiert ist, zwei Argumente, eine Funktion und einen Wert, und wendet die gegebene Funktion auf den gegebenen Wert an, es führt also die Funktion mit dem gegebenen Wert als Argument aus.

Eine gute Möglichkeit, die Funktion zu verstehen, besteht darin, sich die vorhandenen Tests anzusehen. Tests haben immer einen dreifachen Nutzen:

  1. Sie stellen sicher, dass die Implementierungen ordnungsgemäß funktionieren.
  2. Sie erfassen Übereinstimmungen und geben an, was die Funktion tun soll. Wenn es zwei mögliche Reaktionen einer Funktion gibt, können Tests verwendet werden, um diese Mehrdeutigkeit zu beseitigen.
  3. Sie dokumentieren für den Leser anhand von Beispielen, was die Funktion macht.

In diesem Fall können wir von den Tests profitieren und sie als großartige Beispiele dafür lesen, was die Anwendungsfunktion macht:

  1. Der erste Test wendet die Funktion kehre Zeichenkette um (die unsere erste Funktion der Woche war) auf die Zeichenkette "abc" an und überprüft, ob wir "cba" erhalten. Die Verwendung von "anwenden" mit "kehre Zeichenkette um" und "abc" ist dasselbe wie der Aufruf von "kehre Zeichenkette um" selbst mit dem Argument "abc".
  2. Der zweite Test wendet eine weitere Funktion der Woche, "Verneinung", auf den Wert "wahr" an und prüft, ob wir tatsächlich "falsch" erhalten. Dies zeigt uns, dass "anwenden" über verschiedene Typen hinweg funktioniert: Es funktioniert sowohl mit Zeichenketten als auch mit booleschen Werten.
  3. Der dritte Test wendet eine unserer frühesten von Benutzern erstellten Funktionen, in Großbuchstaben, auf die Zeichenkette "hello" an und überprüft, ob das Ergebnis "HELLO" ist.
  4. Der vierte Test wendet die Quadratfunktion auf die Zahl 9 an und prüft, ob das Ergebnis 81 ist. Dies zeigt, dass es auch mit den neuen Typen funktioniert, nicht nur mit den ursprünglichen, integrierten Typen.

Diese Funktion kann derzeit nur als Komposition implementiert werden, nicht in JavaScript oder Python, da wir Codeimplementierungen das Aufrufen weiterer Funktionen noch nicht erlauben.

Die erste Implementierung wurde von 99of9 erstellt und besteht vollständig aus integrierten Funktionen: Im Mittelpunkt steht die Map-Funktion höherer Ordnung (die als erste Hälfte der MapReduce-Technologie von Google bekannt wurde), eine Funktion, die eine Liste und eine Funktion übernimmt und die Funktion auf jedes Element der Liste anwendet, wodurch eine neue Liste entsteht.

Der Rest der Funktion nimmt den Wert und fügt ihn zu einer leeren Liste hinzu, um die für die Map-Funktion erforderliche Liste zu erstellen. Map wird dann auf diese Liste mit einem Element angewendet und dann wird erstes Element verwendet, um den resultierenden Wert wieder aus der Liste zu erhalten.

Um es zusammenzufassen: Wir nehmen den Wert, setzen ihn in eine Liste, mappen die Liste und erhalten den resultierenden Wert dann wieder aus der Liste. Es gibt einen Task, um "anwenden" als integrierte Funktion hinzuzufügen, sodass ein Hinein- und Herausspringen in eine Liste nicht notwendig wäre.

Die zweite Implementierung kopiert denselben Ansatz, überspringt aber die Verwendung der Funktion, die den Wert zu einer leeren Liste hinzufügt, und erstellt stattdessen direkt eine Liste mit dem Wert. Ich habe sie erstellt, weil ich erwartete, dass sie etwas schneller sein würde, und hoffte, dass sie die Anzeigefunktion schneller ausführen würde.

Der Witz dabei ist, dass ich zuvor TomT0m und 99of9 gescholten habe, weil sie an der Anwendungsfunktion und verwandten Funktionen gearbeitet haben, und darauf hingewiesen habe, dass wir derzeit keine gute Unterstützung für Funktionen haben, die Funktionen verwenden. Ich würde es immer noch vorziehen, wenn diese Dinge im Beta-Cluster ausprobiert würden, wo ich ihre Anwendungsfunktion neu erstellt habe, aber um ganz ehrlich zu sein, ohne ihre Arbeit und ihre Erkundung wäre ich beim Versuch, die Weiterleitung zur richtigen Funktion basierend auf der Sprache zu erstellen, stecken geblieben. Vielen Dank!