Wikifunctions:Status-Updates/2025-01-29
| ◀ | ▶ |
Mit 2000 Funktionen ins neue Jahr: Zeit für Statistiken
Vor ein paar Wochen haben wir die Marke von 2000 Funktionen überschritten! Wir werden "Lydias Regel" befolgen (benannt nach Lydia Pintscher, Portfolio Lead für Wikidata): Das Erreichen zufälliger Meilensteine sollte nicht als Grund für kontextloses Feiern gesehen werden, sondern als Gelegenheit, einen Blick auf die Statistiken zu werfen und Bilanz zu ziehen, wo wir stehen und was wir erreicht haben.
Zum Zeitpunkt des Verfassens dieses Textes (Mittwoch, 29. Januar 2025) hatten wir 2096 Funktionen. Davon haben jedoch 189 keine Implementierung und sind daher nicht verwendbar, während 380 keine Tests haben und daher unzureichend dokumentiert und von unbekannter Qualität sind. Die Anzahl der Funktionen sinkt auf 1662, wenn wir nur Funktionen mit mindestens einem verbundenen Test und einer Implementierung betrachten – immer noch solide 4/5 der Funktionen, die wir haben, aber es könnte besser sein. Wir haben jetzt eine Spezialseite, die beim Auffinden von Funktionen ohne Tests helfen kann. Wir haben ungefähr 3473 Implementierungen und 6179 Tests.
Da unsere Suche noch nicht besonders gut ist, ist der manuell kuratierte Funktionskatalog wahrscheinlich der wichtigste Einstiegspunkt, um Funktionen zu finden. Er listet insgesamt 1193 Funktionen auf (obwohl einige möglicherweise mehr als einmal aufgeführt sind). Er hat 17 Gruppen auf oberster Ebene: logisch (8), boolesch (30), Zeichen (10), Zeichenketten (164), wissenschaftliche Funktionen (13), natürliche Sprachen (328, siehe unten), Listen (72), Zeichen (12), Zahlen (354), Datum (92), Wikidata (30), generisch (8), Typen (11), funktional (10), Programmierung (1) und Farben (18).
Die Aufschlüsselung der Funktionen für natürliche Sprachen zeigt, dass es 13 globale Funktionen für natürliche Sprachen gibt. Darüber hinaus haben wir Funktionen für die folgenden natürlichen Sprachen: Arabisch (5), Bengalisch (23), Baskisch (21), Brahui (11), Bretonisch (69), Kroatisch (44), Dagbani (3), Niederländisch (1), Englisch (21), Esparanto (16), Finnisch (1), Französisch (10), Deutsch (15), Urdu (4), Igbo (14), Japanisch (3), Persisch (6), Koreanisch (3), Kurdisch (10), Malayalam (3), Marokkanisches Arabisch (3), Polnisch (1), Punjabi (3), Rohingya (8), Russisch (1), Schottisch-Gälisch (1), Serbisch (1), Sindhi (8), Spanisch (1), Schwedisch (1), Türkisch (2) und Ukrainisch (2).
Bisher wurden bei Wikifunctions fast 50.000 Bearbeitungen vorgenommen. Wir haben im letzten Jahr mehr als 43 Millionen Seitenaufrufe gezählt, aber diese Zahl ist wahrscheinlich durch Crawler, die Trainingsdaten für KI sammeln, ohne sich richtig zu identifizieren, und andere Probleme aufgebläht. Wenn diese Zahl stimmt, wäre das im Vergleich zum Vorjahr eine Steigerung um das Zehnfache. Monatlich verzeichnen wir derzeit etwa 3.000 Funktionsaufrufe, hauptsächlich von den Funktionsseiten, und weitere 400 über die externe API. Mehr als 50 Länder sind durch die Autoren vertreten und Menschen aus mehr als 200 Ländern und Gebieten – also aus fast allen Ländern – haben auf Wikifunctions zugegriffen. Zu Beginn des Jahres begannen wir mit etwa 20 aktiven Beitragenden und sind auf etwa 100 aktive Beitragende angewachsen.
Einige dieser Zahlen machen uns sehr glücklich – das gesunde Wachstum der Funktionen, der hohe Anteil von Funktionen mit verbundenen Implementierungen und Tests, die große Anzahl von Ländern, aus denen zu Wikifunctions beigetragen und darauf zugegriffen wird. Bei einigen haben wir Schwierigkeiten, sie wirklich zu verstehen: Die Seitenaufrufe scheinen fehlerhaft zu sein. Bei einigen hoffen wir schließlich auf ein signifikantes Wachstum im kommenden Jahr, insbesondere bei der Anzahl der ausgeführten Funktionsaufrufe und der Personen, die aktiv beitragen. Wir hoffen, dass die Integration von Wikifunctions in Wikipedias und andere Wikimedia-Projekte Interesse und Begeisterung weckt und so zu stabileren Zahlen führt.
Nächstes Freiwilligentreffen am 3. Februar
Nächste Woche, am Montag, 3. Februar 2025, um 19:30 MEZ, findet unser monatliches Freiwilligentreffen statt. Sofern es nicht viele Fragen gibt, werden wir unserer üblichen Agenda folgen, Neuigkeiten zu den bevorstehenden Plänen und jüngsten Aktivitäten geben, viel Zeit und Raum für deine Fragen haben und gemeinsam eine Funktion entwickeln. Wir freuen uns darauf, dich am Montag online zu sehen!
Letzte Änderungen an der Software
Diese Woche eine sehr kurze Liste, da wir uns stark auf die Ablieferung der größeren Arbeitspakete für das Quartal konzentriert haben.
Wir haben das "Bericht"-Widget so repariert, dass die Testsuite bei brandneuen Implementierungen oder Tests nicht ausgeführt wird, da noch kein Inhalt zum Testen vorhanden ist (T375242). Vielen Dank an User:GrounderUK für den Vorschlag.
Wir haben eine Änderung des Datenbankschemas vorbereitet, die, sobald sie in der Produktion angewendet wird, das Filtern von Suchen nach Funktionen ermöglicht, um die Ergebnisse auf Funktionen zu beschränken, die in Wikipedia-Artikel eingebunden werden können (T383561). Mehr dazu in Kürze.
Seit dieser Woche verwenden wir und der gesamte von Wikimedia bereitgestellte Code die neueste Version der Codex UX-Bibliothek, v1.20.0. Wir sind der Meinung, dass es keine für den Benutzer sichtbaren Änderungen an Wikifunctions geben sollte. Kommentiere daher bitte in der Projektdiskussion oder erstelle einen Phabricator-Task, wenn du ein Problem entdeckst.
Neuigkeiten zu Typen: Lese- und Anzeigefunktionen für rationale Zahlen und Gleitkommazahlen
Vor einigen Wochen haben wir die Typen rationale Zahl und Gleitkommazahl eingeführt. Die Community hat seitdem an Lese- und Anzeigefunktionen gearbeitet und jetzt haben wir einen funktionierenden Satz. Beide wurden eingeführt, wodurch die Verwendung von Funktionen mit diesen Typen viel einfacher wird. Vielen Dank an alle, die daran gearbeitet haben!
Funktion der Woche: Python-Umwandler zu Float64
Die Funktion der Woche ist eine Kolumne, die von der Community geschrieben wird. Die Planung der Kolumne und die Einreichung von Beiträgen sind hier möglich. Der Eintrag dieser Woche wurde von 99of9 geschrieben, Bearbeitungen wurden von Feeglgeef vorgenommen.
Die Funktion der Woche ist in dieser Woche keine Funktion! Diese Woche diskutieren wir: Python-Umwandler zu Float64. Es handelt sich um einen Typumwandler aus Code, der für Autoren von Funktionen fast unsichtbar ist, wenn er gut funktioniert, dessen Genauigkeit jedoch für die erfolgreiche Veröffentlichung der meisten neuen Typen von entscheidender Bedeutung ist. Diese Umwandler werden aufgerufen, wenn deine Codeimplementierung einen Wert zurückgibt, der in die interne Darstellung umgewandelt werden muss, die Wikifunctions für den Typ des zurückgegebenen Objekts verwendet.
Dieser spezielle Umwandler ist für Werte gedacht, die von Python-Implementierungen zurückgegeben werden, die eine Funktion implementieren, die einen Float64 zurückgibt, unseren Typ zur Darstellung von 64-Bit-Gleitkommazahlen, die in Python als "float" typisiert sind. Er wurde von Denny geschrieben, da verbundene Umwandler derzeit nur von Mitarbeitern bearbeitet werden können. Dies ist eine der kompliziertesten Typumwandlungen, die wir bisher haben. Die 64 Bits im nativen Float befinden sich tatsächlich in drei Gruppen, die überladen sind, um in speziellen Kontexten unterschiedliche Bedeutungen anzunehmen. Diese müssen in vier Schlüssel für einen Float64 umgewandelt werden, drei mit weitgehend paralleler Bedeutung und einen, um den Wert in speziellen Kontexten aufzuzählen.
Umwandler aus Code haben nicht die gleiche Vielfalt an Implementierungen wie Funktionen. Sie haben einfach Code, der in der Sprache geschrieben ist, aus der sie konvertieren, und der JSON zurückgibt, das die Struktur eines ZObjekts darstellt. Dieser verwendet mathematische Bibliotheksfunktionen, um nach jedem möglichen Sonderwert (keine Zahl, Unendlichkeit mit Vorzeichen, Null mit Vorzeichen) zu suchen. Wenn es sich um einen speziellen Wert handelt, wird der Schlüssel für den speziellen Wert festgelegt, und da die anderen Schlüssel jetzt irrelevant sind, werden sie mit einem Standardwert von 0 zurückgegeben. Wenn die Eingabe kein spezieller Wert ist, wird das Vorzeichen geprüft und die Größe über math.frexp in ihre Mantisse und ihren Exponenten erweitert. Die Mantisse wird dann aus einem Bereich von [0,5,1] nach [0,0,5] verschoben, da unser Mantisse genau wie die IEEE-754-Binärdarstellungen ein verstecktes führendes Bit hat, was dem Hinzufügen von 0,5 zu diesem Wert entspricht. Der zurückgegebene Exponent wird um eins dekrementiert, um den normalen binären Mantissebereich zu berücksichtigen, der Werte von [1,2] darstellt. Der Mantisse wird für den Mantisseschlüssel von Float64 in eine natürliche Zahl im Bereich von 0 bis 252-1 umgewandelt. Es ist wichtig, dass keine dieser Operationen Rundungsfehler aufweist.
Typumwandler sind nicht direkt mit Tests verbunden, aber wir können sie indirekt testen. Wenn eine Python-Implementierung einer Funktion, die Gleitkommazahlen zurückgibt, gültige Tests nicht besteht, liegt dies möglicherweise am Umwandler. Diese Woche wurde ein subtiler Fehler korrigiert, weil ein Test, der den speziellen Wert -0 zurückgab, in der Python-Implementierung von Rationale Zahl in Gleitkommazahl fehlschlug. Diese Funktion verfügt auch über Tests für einige der anderen speziellen Wert und zahlreiche Randfälle von Gleitkommazahlen. Abhängig von unserer Absicht für die ignorierten Schlüssel von speziellen Werten können wir auch Tests mit strengeren Implementierungen verwenden, um Fälle wie Gleichheit von +unendlich mit unterschiedlichen Exponentenschlüsseln zu testen.
Die Umwandlung eines numerischen Werts in die Schlüssel für eine Float64 auf Wikifunctions ist eine Aufgabe, die einige von uns derzeit auch erledigen müssen, wenn sie Tests für Float64-Funktionen entwerfen. Für Menschen ist das sogar noch schwieriger als für einen Umwandler! Um diese Aufgabe zu erleichtern, werden wir voraussichtlich bald eine Lesefunktion für Gleitkommazahlen zu Float64 hinzufügen, die jede eingegebene Zeichenkette liest, um die Zahl darzustellen (so wie es bei Ganzzahlen bereits der Fall ist).
Frage zur Diskussion:
- Sollen spezielle Werte mit ihren anderen (normalerweise nicht berücksichtigten) Schlüsseln zurückgegeben werden, die mit den Werten von Vorzeichen, Mantisse und Exponent in den IEEE-754-Binärdarstellungen übereinstimmen?
Wöchentliche neue Funktionen
Hier ist eine Liste der neuen Funktionen mit verbundenen Implementierungen und (überwiegend) bestandenen Tests, die seit letzter Woche erstellt wurden.
- string includes "na" or "nf" (Z21987)
- string includes / or % (Z21980)
- display Rational number (Z21971)
- remove arabic harakat (Z21961)
- display float64 (Z21956)
- Clamp (Z21951)
- float64 as string (multilingual default) (Z21949)
- float as string (Python conventions) (Z21939)
- rational number reader (Z21930)
- read float64 (Z21925)
- complex conjugate (integer list) (Z21917)
- Gregorian to Holocene year (Z21913)
- get cross product (Z21903)
- compound interest amount (Z21898)
- acceleration (float64) (Z21893)
- Add indefinite article to noun, Spanish (Z21886)
- is narcissistic number (Z21868)
- "[name], a [role] from [country]," in English (Z21862)
- mean arterial pressure (Z21856)
- mode of list (integer) (Z21851)
- Quadratic equation solver (float64) (Z21848)
- date string (English) to ISO 8601 (Z21842)
- rational from finite simple continued fraction (Z21835)
- generate untyped list of length (Z21821)
- scientific (e) notation String as Rational number (Z21814)
- rational as plain decimal string with sig figures (Z21796)
- "[gender] is a [country] [professional]", Spanish (Z21791)
- decimal string from Rational number (Z21787)
- negate (float64) (Z21775)
- apply rational number function to float64 (Z21770)
- English simple copular sentence (Z21765)
- read special value floating point from string (Z21750)
- an or a? (English) (Z21739)
- English indef noun phrase (Z21734)
- is non-negative rational number (Z21721)
- is negative rational number (Z21714)
- is positive rational number (Z21702)
- absolute value of rational number (Z21692)
- unformat decimal string (Z21682)
Wir sehen eine große Vielfalt an Funktionen – und es gab noch mehr, die es nicht auf die Liste geschafft haben, weil sie keine Tests oder Implementierungen haben. Eine umfassende Liste aller Funktionen, sortiert nach Erstellungsdatum, findet sich im Wiki.