Abstraktní Wikipedie/Plán

From Meta, a Wikimedia project coordination wiki
Jump to navigation Jump to search
This page is a translated version of the page Abstract Wikipedia/Plan and the translation is 100% complete.

Jedná se o jednostránkovou verzi jednotlivých částí, které jsou přeloženy. Kliknutím na nadpisy přejdete na jednotlivé stránky.

Souhrn

V Abstraktní Wikipedii je "abstraktní obsah" reprezentován ve formátu nezávislém na jazyce, který může komunita přímo upravovat. Jednotlivé lokální Wikipedie mohou přistupovat k vlastnímu lokálně spravovanému obsahu a obohacovat jej o "abstraktní obsah" (z abstraktní Wikipedie). Tímto způsobem mohou lokalizovaná vydání Wikipedie s mnohem menším úsilím poskytovat svým čtenářům mnohem více obsahu, který je obsáhlejší, aktuálnější a prověřenější než to, co může poskytnout většina místních Wikipedií.

Vzhledem k výsledkům výzkumu a prototypům v oblasti generování přirozeného jazyka je bohužel pravda, že generování přirozeného jazyka z jazykově nezávislého "abstraktního obsahu" vyžaduje "Turingův úplný" systém. Aby však bylo možné pokrýt množství jazyků, které Wikipedie potřebuje, musí být tento systém crowdsourcován. Proto představujeme Wikifunctions, projekt na vytvoření, katalogizaci a údržbu otevřené knihovny (nebo repozitáře) "funkcí", který má mnoho možných případů použití.

Hlavním případem použití je vývoj "rendererů" (tj. některé z funkcí umístěných nebo odkazovaných ve Wikifunctions), které převádějí jazykově nezávislý "abstraktní obsah" do přirozeného jazyka s využitím lingvistických a ontologických znalostí dostupných ve Wikidatech (nebo znalostí z jiných otevřených zdrojů dat s vhodnými licenčními požadavky použitelných ve Wikipedii, případně včetně dat z jiných projektů Wikimedia jako Wikislovník nebo Wikidruhy).

Projekt začne vytvořením projektu Wikifunctions, který bude následně využit k vytvoření abstraktní Wikipedie. Projekt Wikifunctions bude spuštěn během prvního roku a ve druhém roce přidáme vývoj abstraktní Wikipedie. Po dvou letech vytvoříme ekosystém, který umožní tvorbu a údržbu jazykově nezávislého "abstraktního obsahu" a integraci tohoto obsahu do Wikipedie, čímž se výrazně zvýší pokrytí, aktuálnost a přesnost mnoha jednotlivých Wikipedií. Tím se výrazně přiblížíme světu, kde se každý může podílet na souhrnu všech znalostí.


Název

Všechny názvy - Abstraktní Wikipedie a Wikilambda - jsou předběžné a jsou určeny především pro psaní tohoto návrhu a diskusi o něm.

Současné názvy jsou založeny na následující myšlence:

  • Abstraktní Wikipedie: obsah abstrahovaný z konkrétního jazyka.
  • Wikilambda: vychází z představy, že všechny funkce mohou být založeny na lambda kalkulu. Také vypadá poněkud technofilsky ("geekovsky"), s rizikem, že bude vnímána jako něco, co neodpovídá jejímu určení veřejností, a že ji budou spravovat s předsudky pouze specialisté, již jsou zvýhodněni přístupem k největším znalostem dostupným v jejich vlastní kultuře.

Uvědomte si, že název "Abstraktní Wikipedie" se ve skutečnosti neudrží. Po dokončení projektu bude Abstraktní Wikipedie pouze součástí Wikidat. Jedná se pouze o název pro vývojové práce, a proto pojmenování není tak zásadní. Naproti tomu Wikilambda by měla být novým projektem Wikimedia, a proto bude mít název poměrně velkou viditelnost. Bylo by dobré vymyslet pro něj dobrý název.

Výhrady

Proti názvu Wikilambda zatím zazněly tři dobré důvody:

  • Pro mnoho lidí je to opravdu těžké napsat (říká Effeietsanders).
  • Někteří lidé si to pletou s Wikilambadou (říká Jean-Frédéric).
  • Snadno se také čte jako WikiIambda / Wikiiambda (tedy s dalším i / I místo l / L), takže by to mělo být alespoň WikiLambda s velkým L (navrhl Fuzheado).

Navržené alternativy

Zvažované nebo navrhované alternativní názvy:

Jedná se o archiv. Nové názvy by měly být navrženy v Soutěž o pojmenování wiki funkcí.

Další návrhy jsou vítány.

Ve skutečnosti bude prvním úkolem P1.1 projektu rozhodnout společně s komunitou o názvu a logu. To mělo přednost i u předchozích projektů (logo Wikidat, název Wikivoyage).


Cíle

Projekt má ambiciózní primární a celou řadu sekundárních cílů.

Primární cíle

  • Umožnit více lidem číst více obsahu v jazyce, který si zvolí.
  • Umožnit více lidem přispívat obsahem pro více čtenářů, a tím zvýšit dosah nedostatečně zastoupených přispěvatelů.

Sekundární cíle

Mezi sekundární cíle patří mimo jiné:

  • Opakovaně použitelné a dobře otestované generování přirozeného jazyka.
  • Umožnění ostatním komunitám Wikimedia a externím stranám vytvářet obsah ve více jazycích.
  • Zlepšení komunikace a dostupnosti znalostí daleko nad rámec projektů Wikipedie.
  • Vytvoření nového, mnohem komplexnějšího přístupu k reprezentaci znalostí.
  • Vyvinutí nového přístupu k reprezentaci výsledků porozumění přirozenému jazyku.
  • Knihovna funkcí.
  • Umožnění vývoje a sdílení funkcí v rodných jazycích uživatelů, místo aby se museli nejprve naučit anglicky.
  • Umožnění všem podílet se na funkcích a provozovat je.
  • Zavedení nové formy znalostních prostředků pro správu projektu Wikimedia.
  • Zavádění nových prvků do Wikipedie a dalších projektů Wikimedia, které umožňují interaktivní funkce.
  • Vytvoření funkcí pracujících nad znalostní bází Wikidata, čímž se výrazně zvýší pokrytí dat z Wikidat.
  • Podněcování výzkumu a vývoje v oblasti demokratizace kódovacích rozhraní.
  • Umožnění vědcům a analytikům sdílet modely a pracovat na nich společně.
  • Sdílení specifikací a testů funkcí.
  • Umožnění odkazovat na sémantiku funkcí prostřednictvím přesně definovaných identifikátorů.
  • Rychlejší vývoj nových programovacích jazyků díky přístupu k širší standardní knihovně (nebo úložišti) funkcí v nové specializované wiki.
  • Definování algoritmu a přístupů pro popisy norem a technik.
  • Poskytnutí přístupu k výkonným funkcím, které lze integrovat do nových systémů strojového učení.

Seznam není úplný.


Organizace

Předpokládáme, že základní tým, zaměstnaný jednou hostující organizací, bude pracovat výhradně na Wikifunkcích a abstraktní Wikipedii. Podporovat ho budou další oddělení hostitelské organizace, jako jsou lidské zdroje, právní oddělení atd.

Tým bude výslovně nastaven tak, aby byl otevřený a vstřícný k externím příspěvkům do code base. Ti mohou být dobrovolničtí nebo placení (např. prostřednictvím grantů hnutí nebo jiných organizací či společností). Naším cílem je nabídnout dobrovolníkům přednostní zacházení, abychom zvýšili šance na vytvoření zdravých dobrovolnických komunit, které pro projekt takových ambicí potřebujeme.

Projekt se bude vyvíjet na svobodném základě. Komunikační kanály týmu budou pokud možno veřejné. Komunikační pokyny budou veřejné. To pomůže s vytvořením vývojového týmu, který bude komunikovat veřejně a který umožní integrovat externí příspěvky do kódové základny.


Požadavky

Následující přísné požadavky vycházejí ze zásad a postupů hnutí Wikimedia:

  1. Abstraktní Wikipedie a Wikifunkce budou projekty Wikimedia, které spravuje a provozuje Nadace Wikimedia. Z toho vyplývá, že Abstraktní Wikipedie a Wikifunkce se budou řídit zakladatelskými principy a pravidly hnutí Wikimedia.
  2. Software pro provoz abstraktní Wikipedie a Wikifunkcí bude vyvinut pod licencí Open Source a bude záviset pouze na softwaru, který je Open Source.
  3. Nastavení abstraktní Wikipedie a Wikifunkcí by se mělo co nejsnáze začlenit do stávající infrastruktury Wikimedia. To znamená, že bychom měli co nejvíce zapadnout do stejné infrastruktury pro nasazení, údržbu a provoz.
  4. Veškerý obsah abstraktní Wikipedie a Wikifunkcí bude zpřístupněn pod svobodnými licencemi.
  5. Úspěch abstraktní Wikipedie a Wikifunkcí se hodnotí podle toho, jak se vytvářejí zdravé komunity a kolik znalostí se zpřístupňuje v jazycích, které k nim dříve neměly přístup.
  6. Abstraktní Wikipedie se bude řídit zásadami definovanými mnoha jednotlivými wikipediemi: zejména neutrální hledisko pohledu, ověřitelnost, významnost a žádný původní výzkum (dále rozvíjené rozvojem komunitních kapacit a komunitami pro každou místní wiki).
  7. Abstrakt Wikipedie a Wikifunkce budou plně internacionalizované a dostupné a editovatelné ve všech jazycích projektů Wikimedia. Zda bude plně lokalizovaná, závisí na komunitách.
  8. Hlavním cílem je podpora místních Wikipedií, Wikidat a dalších projektů Wikimedia, a to v tomto pořadí. Sekundárním cílem je růst našich vlastních komunit. Terciárním cílem je podpora zbytku světa.
  9. Místní komunity Wikipedie musí mít kontrolu nad tím, jak moc je abstraktní Wikipedie ovlivňuje. Pokud nechtějí, aby se jich Wikipedie dotýkala, mohou ji zcela ignorovat a nic se pro ně nezmění.

Vývojáři abstraktní Wikipedie nerozhodují o obsahu abstraktní Wikipedie, stejně jako vývojáři MediaWiki nerozhodují o obsahu Wikipedie. Na rozdíl od ostatních projektů Wikimedia se vývojáři aktivně podílejí na vytváření a rozjíždění počáteční sady typů a funkcí a na vytváření potřebných funkcí ve Wikifunkcích pro Abstraktní Wikipedii a pomáhají s rozjezdem komunit jazykových rendererů. Na rozdíl od jiných projektů bude vývojový tým Abstraktní Wikipedie a Wikifunkcí z počátku více zapojen do projektu, ale klade si za cíl předat vše komunitám spíše dříve než později.

Následující požadavky slouží jako pevné vodítko, které uplatňujeme při návrhu a vývoji Abstraktní Wikipedie:

  1. Abstrakt Wikipedie a Wikifunkce jsou sociotechnickým systémem. Místo toho, abychom se snažili být příliš inteligentní, spoléháme na komunity Wikimedia.
  2. Prvním cílem Abstraktní Wikipedie a Wikifunkcí je sloužit skutečným případům použití ve Wikipedii, nikoli umožnit nějakou formu hypotetické dokonalosti v reprezentaci znalostí nebo reprezentovat celý lidský jazyk.
  3. Abstraktní Wikipedie a Wikifunkce musí vyvažovat snadnost použití a expresivitu. Uživatelské rozhraní by se nemělo komplikovat, aby pokrylo jen několik výjimečných okrajových případů.
  4. Co je výjimečný případ a co ne, se určí podle toho, jak často se objevuje ve Wikipedii. Místo anekdotických důkazů nebo hypotetických příkladů budeme analyzovat Wikipedii a zjišťovat, jak časté jsou konkrétní případy.
  5. Buďme pragmatičtí. Nasazení je lepší než dokonalost.
  6. Abstraktní Wikipedie a Wikifunkce poskytnou mnoho nových dat, která mohou podpořit externí výzkum, vývoj a případy použití. Chceme zajistit, aby byla snadno použitelná.
  7. Wikifunkce budou poskytovat rozhraní API pro volání libovolné funkce, která je v nich definována. Bude však omezeno výpočetními náklady, které bude nabízet.
  8. Abstraktní Wikipedie a Wikifunkce budou moci upravovat lidé i roboti. Lidé, kteří provozují boty, si však musí být vědomi své zvýšené odpovědnosti, aby komunitu nezahltili.


Architektura

Hlavními složkami projektu jsou následující tři:

  1. Konstruktory - definice konstruktorů a jejich slotů, včetně jejich významu a omezení typů slotů a návratového typu konstruktoru (např. definice konstruktoru rank, který přijímá položku, typ položky, pořadí jako číslo, podle čeho je hodnocena a lokální omezení).
  2. Obsah - abstraktní volání konstruktorů včetně výplní slotů (např. rank(SanFrancisco, city, 4, population, California))
  3. Renderery - funkce, které přijímají Obsah a jazyk a vracejí text, jehož výsledkem je přirozený jazyk reprezentující význam Obsahu (např. v uvedeném příkladu je výsledkem "San Francisco je čtvrté největší město podle počtu obyvatel v Kalifornii.").

Součásti vícejazyčné Wikipedie.

Existují čtyři hlavní možnosti, jak implementovat tři různé hlavní komponenty:

  1. Ve Wikidatech jsou implementovány konstruktory, obsah a renderery.
  2. Konstruktory a Renderery jsou implementovány ve Wikifunkcích a Obsah ve Wikidatech vedle příslušné položky.
  3. Konstruktory, obsah a renderery jsou implementovány ve Wikifunkcích.
  4. Konstruktory a obsah jsou implementovány ve Wikidatech a renderery v jazykových verzích Wikipedie.

Řešení 4 má tu nevýhodu, že mnoho funkcí lze sdílet mezi různými jazyky a přesunutím rendererů a funkcí do místních wikipedií se o tuto možnost připravíme. Přesunutím rendererů do lokálních Wikipedií také přicházíme o potenciál, kterého by mohl dosáhnout nezávislý katalog funkcí.

Domníváme se, že pro komunikaci a budování komunity je výhodné zavést nový projekt Wikifunkce pro novou formu znalostních aktiv, funkcí, mezi které patří i renderery. To by hovořilo pro řešení 2 a 3.

Řešení 3 vyžaduje, abychom pro každý možný článek Wikipedie vytvořili nové místo ve wiki funkcí. Vzhledem k tomu, že přirozené místo pro to již existuje u položek ve Wikizdrojích, bylo by vhodnější použít je a ukládat Obsah společně s položkami ve Wikizdrojích.

Z těchto důvodů dáváme přednost řešení 2 a předpokládáme ho i pro zbytek návrhu. Pokud přejdeme k jinému, lze plán projektu snadno přizpůsobit (kromě řešení 4, které by vyžadovalo poměrně velké přepisování). Všimněte si, že řešení 2 vyžaduje k pokračování souhlas komunity Wikidata. Pokud nesouhlasí, je řešení 3 pravděpodobně další nejbližší možností.

Navrhovaná architektura vícejazyčné Wikipedie vypadá následovně. Wikipedie získává Obsah, který je uložen ve Wikidatech vedle položek. Toto rozšíření Wikidat nazýváme Abstraktní Wikipedie. Všimněte si, že se jedná pouze o název vývojového projektu a že se neočekává, že by se tento název udržel - nový wikiprojekt s tímto názvem nevznikne. Pomocí volání rendererů ve Wikifunkcích se obsah přeloží do textu v přirozeném jazyce. Renderery se spoléhají na ostatní funkce, typy a konstruktory ve Wikifunkcích. Wikifunkce mohou také volat lexikografické znalosti v lexémech ve Wikidatech, které se použijí při překladu Obsahu do textu. Wikifunkce budou novým projektem Wikimedia na stejné úrovni jako Commons, Wikidata nebo Wikisource.

Vícejazyčná architektura Wikipedie.

(Komponenty označené kurzívou mají být tímto návrhem doplněny, složky označené tučně již existují. Rámečky nejvyšší úrovně jsou projekty Wikimedia, vnitřní rámečky jsou části daných projektů Wikimedia.) ("Wikilambda" byl pracovní název pro to, co je nyní známé jako "Wikifunkce".)


Komponenty

Potřebujeme rozšířit projekty Wikimedia na třech místech:

  1. v jazykových verzích Wikipedie a dalších klientských projektech využívajících nové možnosti,
  2. vr Wikidatech, pro vytváření obsahu (abstraktní Wikipedie), a
  3. v novém projektu Wikifunkce, jehož cílem je vytvořit knihovnu funkcí.

Rozšíření jazykových verzích Wikipedie

Každá lokální Wikipedie si může vybrat jednu z následujících tří možností:

  1. implicitní integrace s abstraktní Wikipedií;
  2. explicitní integrace s abstraktní Wikipedií;
  3. žádná integrace s abstraktní Wikipedií.

Rozšíření pro místní Wikipedie má tyto funkce: jednu novou speciální stránku, dvě nové funkce a tři nová magická slova.

F1: Nová speciální stránka: Abstract

Na každé místní Wikipedii bude k dispozici nová speciální stránka, která se používá s Q-ID nebo názvem místního článku a volitelným jazykem (který je ve výchozím nastavení jazykem místní Wikipedie). Příklady adres URL speciálních stránek vypadají následovně:

https://en.wikipedia.org/wiki/Special:Abstract/Q62
https://en.wikipedia.org/wiki/Special:Abstract/Q62/de
https://en.wikipedia.org/wiki/Special:Abstract/San_Francisco
https://en.wikipedia.org/wiki/Special:Abstract/San_Francisco/de

Pokud je speciální stránka vyvolána bez parametrů, zobrazí se formulář, který umožňuje vybrat Q-ID a jazyk (předvyplněný na místní jazyk).

Na speciální stránce se zobrazí obsah vybraného Q-ID nebo Q-ID s odkazem na příslušný článek ve vybraném jazyce.

F2: Explicitní vytvoření článku

Pokud se místní Wikipedie rozhodne pro možnost integrace s abstraktní Wikipedií prostřednictvím explicitního vytváření článků, udělá to takto.

Přispěvatel přejde na položku na Wikidatech, která ještě nemá odkaz na stránky v cílové místní Wikipedii. Přidá odkaz na stránku, která ještě neexistuje. Tímto způsobem určí název článku. Pokud by například Q62 v angličtině ještě neměl článek, a tedy ani sitelink, může přidat sitelink San_Franciscopro en.wikipedia.

V místní Wikipedii se vytvoří virtuální článek v hlavním jmenném prostoru. Tento článek má stejný obsah jako výše popsaná speciální stránka, ale najdete ho pod obvyklou adresou URL, tj.

https://en.wikipedia.org/wiki/San_Francisco

Odkazy na tento článek s nově zadaným názvem vypadají stejně jako ostatní odkazy, tj. odkaz na [[San Francisco]] bude směřovat na virtuální článek, bude modrý atd. Takové články jsou indexovány pro vyhledávání v dané Wikipedii a také pro externí vyhledávání.

Pokud uživatel klikne na úpravu článku, může si vybrat, zda chce přejít na Wikidata a upravit abstrakt Obsah (preferováno), nebo založit nový článek v místním jazyce od začátku, nebo zhmotnit aktuální překlad jako text a začít jej upravovat lokálně.

Pokud je odstraněn existující místní článek s odkazem na stránky, automaticky se vytvoří virtuální článek (protože známe jeho název a můžeme zachovat odkazy).

Chcete-li smazat virtuální článek, je třeba smazat odkaz na stránky ve Wikidatech.

Všechny změny v místní Wikipedii je třeba provést explicitně, proto tuto možnost nazýváme explicitní tvorba článků. Očekáváme, že tato možnost bude pro místní Wikipedie výchozí, pokud si nezvolí buď implicitní vytváření článků, nebo žádnou integraci.

Viz též diskuze o integraci zde.

F2: Implicitní vytvoření článku

Pokud se místní Wikipedie rozhodne pro implicitní vytváření článků z Wikidat, pak je výsledek volání speciální stránky Abstrakt na všech položkách Wikidat, které nemají odkaz na daná Wikidata, ale vykreslovaly by obsah v daném jazyce, indexován, jako by byl v hlavním jmenném prostoru, a zpřístupněn ve vyhledávání, jako by byl v hlavním jmenném prostoru.

Je zavedeno nové kouzelné slovo pro odkazování na virtuální články z normálních článků, viz F6 LINK_TO_Q. To lze neviditelně integrovat do vizuálního editoru.

To je zdaleka nejméně práce pro komunitu, aby získala mnoho článků, a může to být dobrá volba pro malé komunity.

F4: Odkazy nebo taby

Každý článek v místní Wikipedii, který je připojen k položce Wikidat, získá nový odkaz, a to buď jako záložku nahoře, nebo jako odkaz v postranním panelu. Tento odkaz zobrazí obsah připojené položky Wikidata vykreslený v místním jazyce. Virtuální články tuto záložku nemají, ale jejich tlačítko Upravit odkazuje přímo na úpravu Obsahu v abstraktní Wikipedii.

F5: Nové magické slovo: ABSTRACT_WIKIPEDIA

Magické slovo je nahrazeno wikitextem, který je výsledkem vykreslení obsahu na položce Wikidat, která je s touto stránkou propojena pomocí odkazů na stránky.

Magické slovo lze použít se dvěma volitelnými parametry, z nichž jeden je Q-ID a druhý jazyk. Pokud není zadáno žádné Q-ID, je výchozí Q-ID položka, se kterou je tato stránka propojena Sitelinkem. Pokud není zadán žádný jazyk, je výchozí jazyk jazyk dané wiki.

Příklady volání:

{{ABSTRACT_WIKIPEDIA}}
{{ABSTRACT_WIKIPEDIA:Q62}}
{{ABSTRACT_WIKIPEDIA:Q62/de}}

Pokud není zadáno žádné Q-ID nebo je zvoleno výchozí, zobrazí se chybové hlášení.

Později bude možné vybrat pojmenované sekce z Obsahu.

Wikipedie, které se rozhodnou nemít žádnou integraci s abstraktní Wikipedií, mohou toto nové kouzelné slovo používat i nadále.

Všimněte si, že zavedení nového kouzelného slova je předběžným plánem. Úkol 2.3 prozkoumá, zda můžeme dosáhnout této funkčnosti i bez toho.

F6: Nové magické slovo: LINK_TO_Q

Toto kouzelné slovo se změní na odkaz buď na místní článek, který je propojen s daným Q-ID, nebo, pokud žádný neexistuje, na stránku Abstract Special s daným Q-ID. To umožňuje psát články s odkazy na virtuální články, které se po vytvoření lokálního obsahu automaticky nahradí.

Příklady volání:

{{LINK_TO_Q:Q62}}

povede k tomu, že

[[San Francisco]]

pokud článek existuje, jinak

[[Special:Abstract/Q62|San Francisco]]

Všimněte si, že zavedení nového kouzelného slova je předběžným plánem. Úkol 2.3 prozkoumá, zda můžeme dosáhnout této funkčnosti i bez toho.

F7: Nové magické slovo: LAMBDA

Zavolá funkci zadanou ve Wikidatech spolu s jejími parametry a vykreslí výstup na stránce.

Například následující volání:

{{LAMBDA:capitalize("san francisco")}}

bude na stránce vypsáno "San Francisco" (za předpokladu, že existuje funkce s lokálním klíčem a s očekávanou definicí a implementací). K analýze volání se používá jazyk místní wiki.

Zvažte také možnost volat určitou verzi funkce, abyste omezili výskyt chyb v dalším průběhu.

Všimněte si, že zavedení nového kouzelného slova je předběžným plánem. Úkol 2.3 prozkoumá, zda můžeme dosáhnout této funkčnosti i bez toho.

Rozšíření Wikidat

K hlavnímu jmennému prostoru Wikidat přidáváme nový pomocný jmenný prostor. Tj. každá stránka položky ve tvaru www.wikidata.org/wiki/Q62 dostane také doprovodnou stránku obsahu www.wikidata.org/wiki/Content:Q62. Tato stránka obsahuje abstraktní, na jazyce nezávislý Obsah a umožňuje jeho editaci a údržbu.

Mohou být zapotřebí další speciální stránky. Ty budou rozšířeny v druhé části projektu. Vyžaduje to souhlas komunity Wikidat s tím, že bude projekt využíván pro ukládání abstraktního obsahu, a pokud s tím nebudou souhlasit, bude vybrán jiný.

F8: Nový jmenný prostor: Content

Nový jmenný prostor s mnoha složitými interaktivními editačními funkcemi. Poskytuje UX pro tvorbu a údržbu Obsahu a také funkce pro vyhodnocování Obsahu (např. zobrazení, kolik z něj se zobrazuje v jednotlivých jazycích atd.) Jedná se většinou o podmnožinu funkcí jmenného prostoru F11 Function.

F9: Nový datový typ: Content

Nový datový typ, který obsahuje (krátký) Content. Hlavní případ použití je pro Popisy v položkách a pro Glosy ve smyslech lexémů.

F10: Indexování a užití popisů v položkách a glos ve významech

Indexování a úprava linearizací polí Popis pro Položky a Glosy ve významech a také se ujistíme, že pro pole Popis v Předmětech neexistují žádné duplicitní dvojice Štítek / Popis. Obojí umožníme přepsat ručními úpravami.

Rozšíření jiných projektů Wikimedia

Ostatní projekty Wikimedia obdrží také magická slova F7 LAMBDA a F5 ABSTRACT_WIKIPEDIA, ale žádné další funkce, protože se zdá, že pro ně nejsou příliš užitečné. To se může změnit na základě požadavků daných komunit.

Rozšíření pro novou wiki funkcí

Wikifunkce budou novým projektem Wikimedia na nové doméně. Hlavním jmenným prostorem Wikifunkcí bude nový jmenný prostor Function. Zbytek Wikifunkcí bude tradiční wiki Wikimedia.

F11: Nový jmenný prostor: Function

Umožňuje ukládat funkce, typy, rozhraní, hodnoty, testy atd. Je to jediný jmenný prostor, který obsahuje konstanty (například typy nebo jednotlivé hodnoty), rozhraní funkcí, implementace funkcí, a tedy i konstruktory a renderery. Entity v tomto jmenném prostoru jsou pojmenovány pomocí Z-ID, podobně jako Q-ID položek Wikidat, ale začínají písmenem Z a za ním následuje číslo.

V oboru názvů Z existuje mnoho různých typů entit. Patří mezi ně typy a jiné konstanty (což jsou v podstatě funkce s nulovou aritou), stejně jako klasické funkce s kladnou aritou.

Přispěvatelé mohou vytvářet nové typy funkcí v rámci jmenného prostoru Function a ty pak používat.

Funkce mohou mít argumenty. Funkce se zadanými argumenty mohou být provedeny a jejich výsledkem je hodnota, jejíž typ je dán definicí funkce.

Jmenný prostor Function je komplexní a bude mít velmi odlišné zobrazení v závislosti na typu funkce, tj. pro rozhraní, implementace, testy, typy, hodnoty atd. bude nad nimi různé UX, ačkoli jsou interně všechny uloženy jako Z-objekty. Nakonec jsou všechna různá zobrazení generována funkcemi ve Wikifunkcích.

V jmenném prostoru Function bude možné zmrazovat a rozmrazovat entity. Je to podobné jako chráněná stránka, ale omezuje to pouze úpravu hodnotové části entity, nikoli popisku, popisu atd.

F12: Nové speciální stránky a moduly API

Pro podporu nového jmenného prostoru Function budou vytvořeny nové speciální stránky a moduly API. Půjde zejména o speciální stránku a modul API, které umožní vyhodnocovat funkce se zadanými parametry funkce. Kromě toho bude obsahovat řadu speciálních stránek a modulů API, které budou podporovat údržbu obsahu (například vyhledávání podle počtu a typů parametrů, stránky se statistikami četnosti volání určitých implementací, testovací stránky atd.) Cílem je implementovat co nejvíce z nich uvnitř Wikifunkcí.


Úkoly

Vývoj probíhá ve dvou hlavních částech. Část P1 se týká zprovoznění a dostatečného rozvoje funkcí Wikifunctions, aby bylo možné podporovat tvorbu obsahu potřebnou pro část P2. Část P2 se pak týká nastavení tvorby Obsahu v rámci Wikidat a umožnění přístupu Wikipedie k tomuto Obsahu. Poté bude následovat průběžný vývoj s cílem zlepšit jak Wikifunkce, tak abstraktní Wikipedii. Tento průběžný vývoj není zahrnut v tomto plánu. Všimněte si, že veškeré načasování závisí na tom, s kolika zaměstnanci budeme skutečně pracovat.

V prvním roce budeme pracovat výhradně na části P1. Část P2 začíná druhým rokem a přidává do projektu další počet pracovníků. Části P1 a P2 se pak budou vyvíjet souběžně po dobu následujících 18 měsíců. V závislosti na výsledku a úspěchu projektu je třeba kolem 24. měsíce rozhodnout o personálním obsazení dalšího vývoje a od té doby jej pravidelně přehodnocovat.

Tento plán pokrývá prvních 30 měsíců vývoje. Po uplynutí této doby budou hlavními výstupy:

  1. Wikifunkce, nový projekt WMF a wiki s vlastní komunitou a vlastním posláním, jehož cílem je poskytnout katalog funkcí a umožnit všem, aby se na tomto katalogu podíleli, a tím posílit postavení lidí demokratizací přístupu k počítačovým znalostem.
  2. Mezi-wiki úložiště pro sdílení šablon a modulů mezi projekty WMF, což je dlouhodobé přání komunit. Bude součástí Wikifunkcí.
  3. Abstraktní Wikipedie, cross-wiki projekt, který umožňuje definovat obsah ve Wikidatech nezávisle na přirozeném jazyce a který je integrován do několika lokálních Wikipedií, což výrazně zvyšuje množství znalostí, které mohou sdílet uživatelé v současnosti málo rozšířených jazyků.

Část P1: Wikifunkce

Úkol P1.1: Inicializace projektu

Zřídíme Wikistránky na Metě, komponenty pro chyby, mailing listy, chatovací místnosti, poradní sbor a další relevantní prostředky pro diskusi s širší komunitou. Zahájíme diskusi o názvech Wikifunkcí a Abstraktní Wikipedie a rozhodneme o nich, uspořádáme soutěže o loga, zorganizujeme vytvoření kodexu chování a nezbytné kroky pro zdravou komunitu.

Musíme také zahájit komunitní proces definování výběru licence pro různé části projektu: abstraktní obsah ve Wikidatech, funkce a další entity ve Wikifunkcích, jakož i právní status generovaného textu, který se má zobrazovat ve Wikipedii. To je třeba dokončit před úkolem P1.9. K tomuto rozhodnutí bude třeba získat podklady od právního poradce.

Úkol P1.2: Počáteční vývoj

Prvním krokem vývoje je vytvoření wiki Wikifunctions se jmenným prostorem Function, který umožní ukládání a editaci Z-objektů (omezenějších objektů JSON - ve skutečnosti můžeme začít s existujícími rozšířeními JSON a na nich stavět). Cílem počátečního milníku je mít:

  • Počáteční typy: unicode string, celé kladné číslo do N, boolean, list, pár, jazyk, jednojazyčný text, vícejazyčný text, typ, funkce, vestavěná implementace a chyba.
  • Počáteční sada konstant pro typy.
  • Počáteční sada funkcí: if, head, tail, is_zero, successor, predecessor, abstract, reify, equal_string, nand, konstruktory, pravděpodobně několik dalších funkcí, každá s vestavěnou implementací.

To umožňuje začít vyvíjet frontend UX pro volání funkcí a vytvořit první sadu nástrojů a rozhraní pro zobrazení různých typů objektů Z, ale také obecných objektů Z. Součástí je také první vyhodnocovací nástroj, který běží na serverech Wikimedia.

Všimněte si, že počáteční implementace pohledů, editačních rozhraní a validátorů budou po vydání verze P1.12 pravděpodobně postupně vyřazeny, jakmile budou všechny tyto prvky internalizovány. Internalizovat nějaký kód znamená přesunout jej z jádra do uživatelského prostoru, tj. reimplementovat je ve Wikifunkcích a volat je odtud.

Úkol P1.3: Nastavení testovací infrastruktury

Wikifunkce budou vyžadovat několik testovacích systémů. Jeden pro testování jádra, druhý pro testování webového uživatelského rozhraní a třetí pro testování samotného obsahu Wikifunkcí. Jedná se o trvalý úkol, který musí být integrován se správou verzí.

Úkol P1.4: Spustit veřejný testovací systém

Vytvoříme veřejně viditelný a upravitelný testovací systém, který bude pracovat s nejnovějšími verzemi kódu (alespoň jedno nasazení za pracovní den). Vyzveme komunitu, aby se zapojila a rozbíjela věci. Tento systém můžeme také používat pro kontinuální integrační testy.

Úkol P1.5: Serverový evaluátor

Zatímco v počátečním vývoji byl vytvořen jednoduchý evaluátor pracující pouze s vestavěnými moduly, a tedy s velmi předvídatelným chováním, nadcházející úloha skládání funkcí P1.6 bude vyžadovat, abychom evaluátor přehodnotili. První evaluátor bude běžet na infrastruktuře Wikimedia a potřebuje monitorovací a brzdicí schopnosti a potenciálně také možnost přidělovat uživatelům různé množství výpočetních prostředků podle toho, zda jsou přihlášeni, nebo ne.

Úkol P1.6: Složení funkcí

Umožňujeme vytvářet nová rozhraní funkcí a nový typ implementace, což jsou složená volání funkcí. Umožňuje např. implementovat

add(x, y)

jako

if(is_zero(y), x, add(successor(x), predecessor(y))

a systém je může provést. Umožňuje také více implementací.

Úkol P1.7: Zmrazování a rozmrazování entit

Úroveň ochrany, která umožňuje upravovat metadata entity (název, popis atd.), ale ne skutečnou hodnotu. Tato funkce může být užitečná i pro Wikidata. Zde je navržen propracovanější návrh verzování.

Úkol P1.8: Spuštění beta verze Wikifunkcí

V systému beta se pro účely testování spustí další iterace kódu, který bude na Wikifunkcích nasazen s dalším cyklem nasazení.

Úkol P1.9: Spuštění Wikifunkcí

Projděte kontrolou zabezpečení. Založení nového projektu Wikimedia. Přesun některých wikistránek z Meta do Wikifunkcí.

Úloha P1.10: Zkouška typu

Zavedení nového typu pro psaní testů funkcí. To se provádí zadáním vstupních hodnot a funkce, která kontroluje výstup. Kromě zavedení typu Testy musí funkce a implementace také používat testy a integrovat je do vývoje implementace a zobrazení rozhraní.

Úkol P1.11: Speciální stránka pro tvorbu volání funkcí

Potřebujeme novou speciální stránku, která umožňuje a podporuje psaní volání funkcí, se základní kontrolou syntaxe, automatickým doplňováním, dokumentací atd. Podskupina této funkce bude integrována také na stránky jednotlivých Funkcí a Implementací, aby bylo možné je spouštět se složitějšími hodnotami. Tato Speciální stránka se spoléhá na původní jednoduché API pro vyhodnocování volání Funkcí.

Úkol P1.12: Implementace v jazyce JavaScript

Umožňujeme nový typ implementací, což jsou implementace napsané v jazyce JavaScript. To vyžaduje překlad hodnot do jazyka JavaScript a zpět do Z-objektů. To také vyžaduje myslet na bezpečnost, a to prostřednictvím analýzy kódu a sandboxingu, zpočátku obohaceného o ruční revize a zmrazení P1.7. Pokud se lambda-kalkul O1 zatím nepodařil nebo byl přeskočen, můžeme se prostřednictvím tohoto úkolu dostat také k selfhostingu pro Wikifunkce, což by umožnilo internalizovat většinu kódu.

Úkol P1.13: Přístup k funkcím

Přidejte do projektů Wikimedia magické slovo F7 Lambda, které dokáže kódovat volání funkcí Wikifunkcí a integrovat výsledek do výstupu daného projektu Wikimedia. Tím vlastně vznikne centralizovaný systém šablonování, protože lidé si uvědomí, že nyní mohou šablony reimplementovat do Wikifunkcí a pak je volat z lokálních Wiki. Tomu bude předcházet analýza stávajících řešení, jako jsou TemplateData a volání v jazyce Lua.

To by mohlo vést k žádostem komunit o povolení šablonovacího jazyka MediaWiki a jazyka Lua (viz P1.15) jako programovacího jazyka v rámci Wikifunkcí. To pravděpodobně povede k žádostem o vylepšené řešení Sledovaných stránek, podobně jako to udělala Wikidata, a k implementaci šablon MediaWiki a dalším žádostem komunity. Pro splnění těchto úkolů by mohla být užitečná další osoba, která by odpovídala na požadavky komunity. Jinak by P2 mohl začít až o čtvrt roku později. Tato osoba je již uvedena ve vývojovém týmu výše.

Úkol P1.14: Vytvoření nových typů

Umožňujeme vytváření nových typů. To znamená, že bychom měli být schopni upravovat a vytvářet nové definice typů a internalizovat veškerý kód pro práci s hodnotami typu v rámci Wikifunkcí. Tj. budeme potřebovat kód pro ověřování hodnot, jejich konstrukci, vizualizaci v několika prostředích atd. Ty bychom také měli internalizovat pro všechny existující typy.

Úkol P1.15: Implementace v jazyce Lua

Přidáváme jazyk Lua jako programovací jazyk podporovaný pro implementace. Význam jazyka Lua je dán jeho širokým využitím v projektech MediaWiki. Také, pokud se tak ještě nestalo, by v tomto bodě měla být internalizována transformace hodnot z Wikifunkcí do programovacího jazyka (a také provedena pro implementace v JavaScriptu, které v tomto bodě pravděpodobně budou používat vestavěné jazyky).

Úkol P1.16: Ne-funkční rozhraní

Zatímco Wikifunkce jsou postaveny na čistě funkčních implementacích, existují některá rozhraní, která naivně funkční nejsou, například náhodná čísla, aktuální čas, automatické inkrementy nebo mnohá volání REST. Vymyslíme, jak je integrovat do Wikifunkcí.

Úkol P1.17: Volání REST

Poskytneme vestavěné moduly pro volání rozhraní REST na webu a přijímání výsledků. To by se přednostně opíralo o P1.16. Všimněte si, že volání libovolných rozhraní REST je spojeno s bezpečnostními problémy. Ty je třeba zohlednit ve správném návrhu.

Úkol P1.18: Přístup k Wikidatům a dalším projektům WMF

Poskytneme funkce pro přístup k položkám a lexémům Wikidat a také k dalšímu obsahu z projektů Wikimedia. Přednostně se to bude opírat o P1.17, ale v případě, že se to v tuto chvíli ještě nepodařilo, vestavěný modul tuto možnost odblokuje.

Úkol P1.19: Jednojazyčné generování

Vývoj těchto funkcí probíhá výhradně na wiki. Patří sem tabulky a záznamy pro reprezentaci gramatických jednotek, jako jsou podstatná jména, slovesa, větné členy atd., a také funkce pro práci s nimi. To zahrnuje implementaci kontextu, abychom mohli podle potřeby generovat anafory. To umožňuje konkrétní generování přirozeného jazyka, tedy zatím ne abstraktní.

Část P2: Abstraktní Wikipedie

Úkoly v této části budou zahájeny po roce vývoje. Neočekává se, že všechny úkoly z části P1 budou dokončeny před zahájením části P2, protože ve skutečnosti budou části P1 a P2 nadále vyvíjeny souběžně. Pouze některé úkoly z části P1 jsou nutné pro zahájení části P2.

Úkol P2.1: Konstruktory a Renderery

Zde představíme abstraktní rozhraní ke konkrétním generátorům vyvinutým v P1.19. To vede k počátečnímu vývoji konstruktorů a funkce Render. Po splnění tohoto úkolu by komunita měla být schopna vytvářet nové Konstruktory a rozšiřovat Renderery o jejich podporu.

  • Pro zápis abstraktního obsahu se používají konstruktory. Konstruktory jsou nezávislé na jazyku a neměly by obsahovat podmíněnou logiku.
  • Renderery by měly obsahovat skutečnou podmíněnou logiku (která se aplikuje na informace v konstruktorech). Renderery mohou být pro každý jazyk zvlášť (ale mohou být také sdílené napříč jazyky).
  • Oddělení mezi nimi je analogické oddělení v jiných systémech NLG, jako je Grammatical Framework.

Úkol P2.2: Podmíněné vykreslování

Zřídkakdy se stane, že by vykreslovač dokázal obsah plně vykreslit. Budeme muset podporovat postupnou degradaci: pokud se některý Obsah nepodaří vykreslit, ale jiný se stále vykresluje, měli bychom zobrazit tu část, která se vykreslila. Někdy je však nutné renderovat určitý Obsah pouze v případě, že jiný Obsah bude určitě vykreslen. V tomto úkolu implementujeme podporu takového podmíněného vykreslování, které umožní menším komunitám bezpečně rozšiřovat své Wikipedie.

Úkol P2.3: Abstraktní Wikipedie

Vytvoříme nový jmenný prostor ve Wikidatech a umožníme v něm vytvářet a spravovat obsah. Znovu použijeme prvky uživatelského rozhraní a přizpůsobíme je pro tvorbu Obsahu. Práci na uživatelském rozhraní budou předcházet výzkumné práce na designu, které mohou začít před spuštěním části P2. Několik důležitých myšlenek k tomuto návrhu najdete zde. Tento úkol také rozhodne, zda potřebujeme nová magická slova (F5, F6 a F7), nebo se jejich zavedení můžeme vyhnout.

Úkol P2.4: Mobilní uživatelské rozhraní

Tvorba a editace obsahu bude nejčastějším úkolem při vytváření vícejazyčné Wikipedie. Proto chceme zajistit, aby tento úkol byl pro uživatele příjemný a přístupný. Chceme věnovat explicitní úlohu na podporu tvorby a údržby Obsahu v mobilním rozhraní. Předpokládáme, že se nám podaří vytvořit rozhraní, které umožní lepší zážitek než editace wikitextu.

Úkol P2.5: Integrovat obsah do Wikipedie

Povolení kouzelného slova Abstraktní Wikipedie. Poté povolíme explicitní vytváření článků a nakonec implicitní vytváření článků (F1, F2, F3, F4, F5, F6).

Úkol P2.6: Pravidelné skloňování

Lexémy Wikidat obsahují skloňované formy lexému. Tyto formy jsou často pravidelné. Vytvoříme řešení, které bude generovat pravidelné skloňování prostřednictvím Wikifunkcí, a budeme s komunitou diskutovat o tom, jak jej integrovat do stávajících lexémů.

Úkol P2.7: Základní renderer pro angličtinu

Předpokládáme, že počáteční vytváření rendererů bude obtížné. Vzhledem k postavení angličtiny jako široce používaného jazyka v komunitě budeme používat angličtinu jako první jazyk pro demonstraci tvorby rendereru a dobře ji zdokumentujeme. Zapojíme pomoc komunity. To zahrnuje také funkčnost pro zobrazení referencí.

Úkol P2.8: Základní renderer pro druhý jazyk

Na základě zpětné vazby od komunity, zájmů a odborných znalostí lingvistů pracujících v týmu vybereme druhý velký jazyk, pro který společně s komunitou vytvoříme základní Renderer. Bylo by zajímavé vybrat jazyk, u kterého komunita na místní Wikipedii již potvrdila zájem o integraci Abstraktní Wikipedie.

Úkol P2.9: Renderer pro jazyk z jiné rodiny

Jelikož je pravděpodobné, že jazyk v P2.8 bude indoevropský jazyk, vytvoříme společně s komunitou základní renderer pro jazyk z jiné jazykové rodiny. Výběr tohoto jazyka bude proveden na základě odborných znalostí, které má tým k dispozici a zájmů komunity. Bylo by zajímavé vybrat jazyk, u kterého komunita na místní Wikipedii již potvrdila zájem o integraci Abstraktní Wikipedie.

Úkol P2.10: Renderer pro nedostatečně používaný jazyk

Jelikož je pravděpodobné, že jazyky v P2.8 a P2.9 budou jazyky, které jsou již dobře obslouženy aktivními a velkými komunitami Wikipedie, vybereme také jazyk, který není dostatečně obsloužen, tedy jazyk, který má v současnosti velký počet potenciálních čtenářů, ale jen malou komunitu a málo obsahu. Výběr tohoto jazyka bude proveden na základě odborných znalostí, které má tým k dispozici, a zájmů komunity. Zde je klíčové vybrat jazyk, kde se komunita na místní Wikipedii již zavázala k podpoře integrace Abstraktní Wikipedie.

Úkol P2.11: Abstraktní popisky Wikidat

Popisy Wikidat se zdají být obzvláště vhodné pro vytváření prostřednictvím funkcí Wikifunkcí. Často jsou to jen krátká podstatná jména. V tomto úkolu podporujeme ukládání a údržbu abstraktních popisů ve Wikidatech a jejich generování pro Wikidata. Měli bychom také zajistit, aby výsledkem byly jedinečné kombinace štítků a popisů.

Úkol P2.12: Abstraktní glosy

Lexémy Wikidata mají významy. Významy jsou zachyceny glosami. Glosy jsou dostupné pro jednotlivé jazyky, což znamená, že jsou obvykle dostupné pouze v několika jazycích. Pro podporu skutečně vícejazyčného slovníku navrhujeme vytvořit abstraktní glosy. Ačkoli to zní, že by to mělo být mnohem jednodušší než vytváření plnohodnotných článků Wikipedie, domníváme se, že vzhledem k povaze Glos to může být mnohem těžší úkol.

Úkol P2.13: Podpora více přirozených jazyků

Podporovat další jazykové komunity při vytváření Rendererů se zaměřením na jazyky, které nejsou dostatečně využívány.

Úkol P2.14: Obsah generovaný šablonou

Některé Wikipedie v současné době obsahují velké množství šablonovitého obsahu. Identifikujeme tento obsah a budeme diskutovat s lokální komunitou, zda jej chtějí nahradit řešením založeným na Wikifunkcích, kde je šablona ve Wikifunkcích a obsah uvedený v místní Wikipedii nebo v Abstraktní Wikipedii. To povede k udržitelnějším a udržovatelnějším řešením, která se nemusí spoléhat na jediného přispěvatele. Všimněte si, že to nemusí být vícejazyčné a může to být mnohem jednodušší než projít úplnou abstrakcí.

Úkol P2.15: Neformální komentáře

Umožnit příležitostným přispěvatelům komentovat vykreslovaný text a vytvořit mechanismy pro zachycení těchto komentářů a jejich přesměrování zpět do třídicího mechanismu, který umožní nasměrovat je buď na obsah, nebo na renderery. Je důležité, aby se neztratily připomínky příležitostných přispěvatelů. V ideálním případě bychom jim umožnili explicitně přepsat část vykresleného výstupu a považovat to za požadavek na změnu, a pak budeme mít angažovanější přispěvatele, kteří budou pracovat na převedení záměru příležitostného přispěvatele do odpovídajících změn v systému.

Úkol P2.16: Rychlé generování názvu článku

Široká veřejnost přichází na Wikipedii většinou tak, že do běžných vyhledávačů zadává názvy věcí, které hledá ve svém jazyce. To znamená, že položky Wikidat budou potřebovat popisky přeložené do daného jazyka, aby bylo možné použít implicitní tvorbu článků. Toho lze pravděpodobně dosáhnout překladem milionů štítků Wikidat. Někdy to mohou udělat roboti nebo umělá inteligence, ale to není zcela spolehlivé a škálovatelné, takže se na tom musí podílet lidé.

Současné nástroje pro masivní hromadný překlad štítků Wikidat tomuto úkolu nevyhovují. Existují dva hlavní způsoby, jak to udělat: editace štítků v samotných Wikidatech, což je dobré pro přidání třeba desítky štítků, ale rychle to omrzí, a použití programu Tabernacle, který se zdá být více zaměřen na masivní hromadné překlady, ale je příliš složitý na to, aby ho většina lidí skutečně používala.

Cílem tohoto úkolu je vyvinout masivní a integrovaný nástroj pro překlad štítků s jednoduchým a moderním frontendem, který bude moci používat mnoho lidí.

Vedlejší úkoly

Existuje celá řada dalších volitelných úkolů. V ideálním případě by se jich chopily externí komunity a vyvíjely je jako otevřený zdrojový kód mimo původní vývojový tým, ale některé z nich by možná musely být zahájeny a dokonce plně vyvinuty základním týmem.

Úkol O1: Lambda kalkul

Je možné zcela samostatně hostovat Wikifunkce, aniž by bylo nutné spoléhat na vestavěné programy nebo implementace v jiných programovacích jazycích, a to implementací lambda kalkulu ve Wikifunkcích (odtud pochází návrh názvu). To může být užitečné pro umožnění vyhodnocování bez podpory jakéhokoli jazyka, a tak snadněji nastartovat vývoj evaluatorů.

Úkol O2: CLI v terminálu

Mnoho vývojářů rádo používá rozhraní příkazového řádku pro přístup k systému, jako jsou Wikifunkce. Měli bychom ho poskytnout s obvyklými funkcemi, jako je automatické dokončování, historie, integrace se shellem atd.

Úkol O3: Uživatelské rozhraní pro vytváření, ladění a sledování funkcí

Cílem Wikifunkcí je umožnit rychlé pochopení a rozvoj funkcí ve Wikifunkcích. Vzhledem k funkčnímu přístupu by mělo být možné vytvořit uživatelské prostředí, které umožní částečné vyhodnocení, rozbalení, ladění a sledování volání funkce.

Úkol O4: Zlepšit efektivitu vyhodnocování

Existuje mnoho způsobů, jak zlepšit efektivitu evaluatorů, a tím snížit spotřebu zdrojů, zejména ukládání do cache nebo správná volba strategie evaluace. Měli bychom tomu věnovat nějaký čas a zaznamenávat výsledky, aby různé evaluatorské skupiny mohly tyto poznatky využít, ale také zajistit, aby evaluatory udržovaní základním týmem používali většinu osvědčených postupů.

Úkol O5: Implementace Web of Trust

Abychom zmírnili podmínky pro implementace v programovacích jazycích, mohli bychom zavést řešení založené na Web of Trust, které by přispěvatelům umožnilo přezkoumat existující implementace a explicitně označit jejich schválení a také označit ostatní přispěvatele za důvěryhodné. Tato schválení by pak mohla být zohledněna při výběru nebo přípravě strategie hodnocení.

Úkol O6: Implementace v jazyce Python

Python je široce používaný programovací jazyk, zejména pro studenty a v některých oblastech, jako je strojové učení. Podpora jazyka Python může Wikifunkcím otevřít bohatý ekosystém.

Úkol O7: Implementace v jiných jazycích

Budeme se snažit vyzvat ostatní komunity programovacích jazyků, aby se přidali do Wikifunkcí, a podporovat je. Kandidáty na implementaci jsou Web Assembler, PHP, Rust, C/C++, R, Swift, Go a další, ale záleží na zájmu základního týmu a externích komunit o vytvoření a podporu těchto rozhraní.

Úkol O8: Webový REPL

Webový REPL může přenést výhody rozhraní příkazového řádku O2 na web, aniž by bylo nutné instalovat CLI v místním prostředí, což někdy není možné.

Úkol O9: Rozšíření API o parser a linearizátor

Mohou existovat různé parsery a linearizátory používající Wikifunkce. API Wikifunkcí může být snadněji použitelné, pokud by je volající mohl explicitně vybrat, místo aby je ručně zabalil, což by umožnilo použití Wikifunkcí s různými povrchovými dialekty.

Úkol O10: Podpora diskusních stránek

Pro podporu diskusí na diskusních stránkách Wikifunkcí vyvinout a integrovat mechanismus, který by umožňoval (zpočátku) jednoduché diskuse a postupně zvyšoval jejich složitost podle potřeb komunit.

Úkol O11: Vytvoření právního textu

Zajímavá je aplikace Wikifunkcí pro vytváření právních textů modulárním způsobem a s různými úrovněmi (právní a lidsky čitelný text), podobně jako jsou různé úrovně popisu pro různé licence Creative Commons.

Úkol O12: Vytvoření textu týkajícího se zdraví

Zajímavé je využití Wikifunkcí při tvorbě textů týkajících se zdraví pro různé úrovně čtení. K tomu by měl přispět WikiProjekt Medicína a jeho úspěšná práce, která by se díky spolupráci s Wikifunkcemi mohla dostat k mnohem většímu počtu lidí.

Úloha O13: Knihovna NPM

Vytvoříme knihovnu Wikidata pro NPM, která umožní jednoduché použití funkcí z Wikifunkcí v programu v jazyce JavaScript. Stejná syntaxe by měla umožnit implementacím v jazyce JavaScript ve Wikifunkcích přistupovat k jiným funkcím Wikifunkcí. Všimněte si, že to lze provést na základě volání vyhodnocovače Wikifunkcí nebo kompilací požadovaných funkcí do dané báze kódu.

Úkol O14: Knihovna v Pythonu

Vytvoříme knihovnu Pythonu, která umožní jednoduché použití funkcí z Wikifunkcí ve skriptu Pythonu. Stejná syntaxe by měla umožnit implementacím Pythonu ve Wikifunkcích přístup k jiným funkcím Wikifunkcí. Všimněte si, že to lze provést na základě volání vyhodnocovače Wikifunkcí nebo kompilací požadovaných funkcí do dané báze kódu.

Úkol O15: Knihovny pro jiné programovací jazyky

Vyzveme komunity několika programovacích jazyků, aby nám pomohly s vytvořením knihoven, které umožní jednoduché volání funkcí Wikifunkcí z programů v jejich jazyce. Všimněte si, že to lze provést na základě volání evaluátoru Wikifunkcí nebo kompilací požadovaných funkcí do dané báze kódu.

Úkol O16: Evaluátor v prohlížeči

Jednou z výhod Wikidat je, že vlastní vyhodnocení volání funkce může probíhat v různých vyhodnocovacích programech. Hlavní evaluátor pro abstraktní Wikipedii bude serverový a bude ho provozovat nadace Wikimedia Foundation, ale abychom snížili výpočetní zátěž, měli bychom poskytnout také evaluátor běžící v browseru uživatele (pravděpodobně ve vlákně Worker).

Úkol O17: Evaluátor založený na Jupyteru a/nebo PAWS

Jeden ze zajímavých evaluátorů vychází ze zápisníku Jupyter nebo PAWS, a umožňuje tak obvyklé výhody těchto zápisníků, ale integruje také výhody z Wikifunkcí.

Úkol O18: Vyhodnocovací nástroj založený na aplikaci

Jeden evaluátor by měl běžet nativně na zařízeních se systémem Android nebo iOS, a umožnit tak uživateli využít značný výpočetní výkon, který má v ruce.

Úkol O19: Hodnotitel založený na P2P

Mnoho evaluátorů by se mohlo vzájemně propojit a umožnit si navzájem využívat neaktivní výpočetní zdroje ve své síti. To může, ale nemusí vyžadovat štíty mezi zúčastněnými uzly, které zajistí soukromí jednotlivých výpočtů.

Úkol O20: Cloudový evaluátor

Jedním ze zřejmých způsobů, jak získat výpočetní prostředky, je využít poskytovatele cloudu. Zatímco by bylo možné jednoduše spustit serverový vyhodnocovací nástroj na cloudové infrastruktuře, pro poskytovatele cloudu bude pravděpodobně výhodné poskytnout tenčí rozhraní pro vyhodnocovací nástroj více přizpůsobený na míru.

Úkol O21: Typ stream

Přidání podpory typu pro streamování dat, a to jak na vstupu, tak na výstupu. Typem streamu se rozumí například feed posledních změn na wiki Wikimedia.

Úkol O22: Binární typ

Přidání podpory binárních souborů na vstupu i výstupu.

Úkol O23: Integrace s mediálními soubory Commons

Povolení přímého přístupu k souborům na serveru Commons. Umožnit pracovní postupy se službou Commons, které vyžadují méně strojů pro nasazení, než je v současnosti potřeba. Vyžaduje O22.

Úkol O24: Integrace se strojovým učením

Vypracování několika příkladů integrace s řešeními strojového učení, např. pro úlohy NLP nebo pro práci s obrázky či videem, např. pomocí klasifikátorů. To vyžaduje, jak a kam ukládat modely, případně také jak je trénovat a jak k nim přistupovat.

Úkol O25: Integrace do IDE

Oslovte komunity, které vyvíjejí IDE, a podpořte je v integraci s funkcemi Wikifunctions pomocí typových nápověd, dokumentace, doplňování a mnoha dalších praktických a zásadních funkcí moderních IDE.

Úkol O26: Vytváření jednoduchých aplikací nebo webových stránek

Vyvinout systém umožňující snadné vytváření a nasazování aplikací nebo webových stránek založených na funkcích Wikifunctions.

Úkol O27: Zobrazení otevřených úkolů pro přispěvatele

Abstraktní Wikipedie bude vyžadovat jeden renderer pro každý konstruktor pro každý jazyk. Bylo by užitečné, kdyby přispěvatelé mohli dostat nějaké vodítko, který Renderer implementovat dále, protože to často není triviálně viditelné. Pouhé počítání toho, jak často se daný Konstruktor objevuje, by mohlo být první aproximací, ale pokud jsou některé Konstruktory používány častěji v čele nebo v částech textu, které blokují výskyt jiného textu, nebo v článcích, které jsou více čtené než jiné, může být tato aproximace mimo. V tomto úkolu vytvoříme formu ovládacího panelu, který umožní uživatelům zvolit jazyk (a možná i oblast, například sport, zeměpis, historie atd. a možná i filtr pro očekávanou složitost vykreslování) a poté jim poskytne seznam nevyrenderovaných Konstruktorů seřazených podle dopadu, který by implementace měla.

Mohli bychom také umožnit přispěvatelům, aby se přihlásili k odběru pravidelných zpráv, které by je informovaly o tom, jaký mají dopad (z hlediska zobrazení a vytvořeného obsahu), a to na základě stejného rámce, který je potřebný pro ovládací panel.

To je srovnatelné se zobrazením stavu překladů různých projektů na TranslateWiki.Net (pro vybraný jazyk) nebo zobrazení témat, organizací nebo autorů v Scholia. U každého projektu se zobrazuje, kolik % řetězců v něm bylo přeloženo a kolik % je třeba aktualizovat, a dobrovolný překladatel si může vybrat: získat něco z 98 % až 100 %, získat něco ze 40 % až 60 %, získat něco z 0 % až 10 % atd.

Úkol O28: Aktivní zobrazení

Zatímco výchozí zobrazení vyrenderovaného obsahu by vypadalo podobně jako statický text, mělo by existovat také aktivnější zobrazení, které vyzývá k přispění na základě existujícího obsahu, který se nepodařilo vykreslit kvůli chybějícím rendererům. V nejjednodušším případě může jít o vytvoření lexému ve Wikidatech a připojení ke správnému lexému. Ve složitějších případech to může být napsání Rendereru nebo nabídnutí příkladových vět jako textu, třeba pomocí cesty příležitostného přispívání popsané v P2.15. To by poskytlo zajímavý prostor, který by proměnil více čtenářů v přispěvatele.

Existují produktová a designová rozhodnutí o tom, jak a kde by se mělo aktivní zobrazení používat a zda by mělo být výchozím zobrazením, nebo zda by se mělo zapínat pouze po pozvání atd. Mohl by také existovat režim, ve kterém by přispěvatelé mohli přecházet z článku na článek a doplňovat chybějící části, podobně jako je tomu abstraktnějším způsobem v O27.

Pravděpodobně by bylo opravdu užitečné zajistit, aby aktivní cesta a cesta editace, ke které vede, fungovala i na mobilních zařízeních.

Úkol O29: Sestavení implementace

Kompozice funkcí použitá pro implementace by měla umožnit vytvářet vysoce výkonné kompilace poměrně vysokoúrovňových funkcí v mnoha různých cílových programovacích jazycích, zejména ve Web Assembleru a JavaScriptu. To by mělo urychlit vyhodnocování o několik řádů.

Úkol O30: Integrace s příklady kódu na Wikipedii, Wikiknihách atd.

Umožnit Wikipedii, Wikibooks a dalším projektům integrovat jejich příklady kódu přímo do wiki funkcí, aby mohly být spuštěny živě.


Implementace

Vývoj abstraktní Wikipedie bude probíhat ve dvou hlavních částech, z nichž každá se skládá z velkého počtu úkolů. Část P1 se zabývá vývojem wiki funkcí a část P2 se věnuje abstraktnímu obsahu a generování přirozeného jazyka. Na této stránce dále rozdělujeme úkoly části P1 do fází, z nichž každá pokrývá část práce v rámci daného úkolu. Níže jsou uvedeny odkazy na aplikaci Phabricator, kde jsou úkoly a fáze ještě více rozděleny.

Tato stránka wiki může být zastaralá. Kanonickým místem pro informace o úlohách je Phabricator. Podívejte se na aktuální stav na Phabricatoru.

Předpokládáme, že před spuštěním wiki funkcí proběhne přibližně deset fází.

Všechny níže uvedené fáze zahrnují práci v rámci Úkol P1.2: Počáteční vývoj, pokud není označeno jinak.


Část P1: Wiki funkcí

Fáze α (alfa): ukládání, zobrazování a úprava záhlaví — Yes check.svg Hotovo 2020-08-25

  1. Nastavení replikovatelného vývojového prostředí. — úkol T258893
    • Yes check.svg Hotovo Spuštění rozšíření. — úkol T258893
    • Yes check.svg Hotovo Konfigurace funguje, načtěte obsah bootstrapu.
    • Yes check.svg Hotovo Opětovné použití stávajícího JSON ContentHandler. — úkol T258893
    • Yes check.svg Hotovo Umožnění zadávání objektů JSON prostřednictvím rozhraní pro surové úpravy. — úkol T258893
  2. Yes check.svg Hotovo Rozšíření a hrubá kontrola objektů JSON, zda jsou správného tvaru v podobě ZObjektu. S ničím, co není dobře zformované, se nebude dále pracovat ani se nebude ukládat. Dobře zformátovaný tvar by se měl pravděpodobně kontrolovat jak v kódu PHP, tak v kódu JS (stejně by to mělo být snadné napsat).
    • Yes check.svg Hotovo v PHP. — úkol T258894
    • Správná forma: syntaxe klíče, povolené klíče, hodnoty jsou řetězce nebo proto-objekty nebo seznamy hodnot. — úkol T258894
  3. Yes check.svg Hotovo Každý uložený objekt ZObject nejvyšší úrovně musí být Z2/Persistent object (Persistentním objektem). — úkol T258897
  4. Yes check.svg Hotovo Vytvoření Z1/Object, nabízející jeden klíč, Z1K1/type (typ).
  5. Yes check.svg Hotovo Rozšíření hardcodového validátoru o kontrolu Z1K1/type (typu).
  6. Yes check.svg Hotovo Vytvoření Z2/Persistent object (Persistentního objektu). — úkol T258897
  7. Yes check.svg Hotovo Z2/Persistent object (Persistentní objekt) má klíče Z2K1/ID (ID) a Z2K2/value (hodnota) a Z2K3/Proto-Label, přičemž posledně jmenovaný je ve skutečnosti jen jeden řetězec bez jazykových informací. — úkol T258897
  8. Yes check.svg Hotovo Rozšíření dosud pevně zadaného validátoru pro Z2/Persistent object (Persistentní objekt). — úkol T258897
  9. Yes check.svg Hotovo Zajistit zobrazení natvrdo naprogramované pro Z2/Persistent object (Persistentní objekt) (tedy hlavičku) (to je docela velký úkol). — úkol T258898
  10. Yes check.svg Hotovo Poskytnutí obecného zobrazení pro objekt Z2K2/value (hodnota). — úkol T258898
  11. Yes check.svg Hotovo Změna Z2K3/proto-label na reálný Z2K3/label (štítek) pro vícejazyčný text.
  12. Yes check.svg Hotovo Rozšíření zobrazení pro Z2K3/label (štítek) s vícejazyčným textem.

Podmínka dokončení fáze: Jako uživatel [webu s nainstalovaným rozšířením MediaWiki] mohu vytvořit a uložit řetězec jako nový ZObject, např.. "Hello world!".

Fáze β (beta): vytváření typů a instancí — Yes check.svg Hotovo 2021-02-04

  1. Yes check.svg Hotovo Hardcoded validátory pro Z4/proto-types (proto-typy) a Z3/proto-keys (proto-klíče). — úkol T258900
    • Z4 má Z4K2/keys (klíče) s List (Seznamem) objektů Z3.
    • Proto-key (Proto-klíč) má Z3K1/ID (ID) a Z3K2/type (typ) a Z3K3/label (štítek) (zrcadlí vývoj label (štítku) pro Z2K3?).
  2. Yes check.svg Hotovo Vytvoření Z4/Type (Typu) a Z3/Key (Klíč) (Úkol P1.14).
  3. Yes check.svg Hotovo Vyhledávání ZObjektů podle label (štítku). — úkol T260750
  4. Yes check.svg Pro tuto fázi hotovo Použití deklarací dat typu Z4 a klíčů pro validaci objektů. — úkol T260861
  5. Yes check.svg Hotovo Použití deklarací dat typu Z4 a klíčů pro obecné zobrazení objektů. — úkol T258901
  6. Yes check.svg Hotovo Použití deklarací dat typu Z4 a klíčů pro editace a vytváření objektů. — úkol T258903 & úkol T258904
  7. Yes check.svg Hotovo Poskytnutí pevně zadaného rozhraní pro zobrazení a úpravy typu Z12. — úkol T258900

Podmínka dokončení fáze: Jako uživatel mohu vytvořit a uložit objekt implementující libovolný typ definovaný na wiki, např. kladné celé číslo.

Fáze γ (gama): funkce, implementace, chyby — Yes check.svg Hotovo 2021-04-02

  1. Yes check.svg Hotovo Zavedení jednoduchého chybového objektu. — úkol T261464
  2. Yes check.svg Hotovo Zavedení jednoduché funkce. — úkol T258957
  3. Yes check.svg Hotovo Zavedení jednoduché implementace, zatím pouze vestavěné moduly. — úkol T258958
  4. Yes check.svg Hotovo Vytvoření několika funkcí a vestavěných modulů. — úkol T261474
  5. Yes check.svg Hotovo Zavedení jednoduchého typu volání funkce. — úkol T261467
  6. Yes check.svg Hotovo Tester (Úkol P1.10). — úkol T261465

Podmínka dokončení fáze: Jako uživatel mohu uložit volání funkce, funkci a tester (pouze objekty, zatím žádné skutečné vyhodnocení), např. if(true, false, true) (čti "pokud true, pak false, jinak true", tj. negace).

Fáze δ (delta): vestavěné prvky — Yes check.svg Hotovo 2021-05-11

  1. Yes check.svg Hotovo Evaluační systém pro vestavěné moduly. — úkol T260321
  2. Yes check.svg Hotovo Umožnění uživatelům webu volat evaluaci prostřednictvím modulu API (Úkol P1.5). — úkol T261475
  3. Yes check.svg Hotovo Speciální stránka pro evaluaci volání (Úkol P1.11). — úkol T261471

Podmínka dokončení fáze: Jako uživatel mohu použít speciální stránku pro vyhodnocení vestavěné funkce s dodanými vstupy, např. pro kontrolu, zda je prázdný seznam prázdný.

Fáze ε (epsilon): volání nativních funkcí — Yes check.svg Hotovo 2021-06-30

  1. Yes check.svg Hotovo Implementace v jazyce JavaScript (Úkol P1.12). — úkol T275944
  2. Yes check.svg Hotovo Implementace v jazyce Python (Úkol O6). — úkol T273517
  3. Yes check.svg Hotovo Umožnit zařazení formulářů pro evaluaci. — úkol T261472

Podmínka dokončení fáze: Jako uživatel mohu pomocí speciální stránky provést vyhodnocení funkce napsané uživatelem v některém z podporovaných jazyků, např. např. zavolat funkci napsanou uživatelem v jazyce Python, která sečte dvě čísla.

Fáze ζ (zeta): kompozice — Yes check.svg Hotovo 2021-08-27

  1. Yes check.svg Hotovo Umožnění implementace kompozice (Úkol P1.6). — úkol T261468

Podmínka dokončení fáze:

  • Jako uživatel mohu implementovat funkci pomocí kompozice jiných funkcí, místo abych ji psal sám, např. negate(Boolean → Boolean). — Yes check.svg Hotovo
  • (Rozšířená podmínka) Jako uživatel vidím výsledky testerů na stránce implementace příslušné funkce. [Toto může být nutné přesunout do pozdější fáze, protože v tomto bodě nemusí být splněny všechny požadavky. Musí být provedeno do fáze ι.] — Yes check.svg Hotovo

Fáze η (eta): obecné typy — Yes check.svg Hotovo 2022-04-08

  1. Yes check.svg Hotovo Povolení obecných typů, zejména pro Z10/List (Seznam) a Z8/Function (Funkce), a nahrazení Z10/List (Seznam) a Z8/Function (Funkce). ― úkol T275941
  2. Yes check.svg Hotovo Chyby lze zpracovávat stejně jako ZObjekty.
  3. Yes check.svg Hotovo Uživatelsky definované typy pracují s validátory.

Podmínka dokončení fáze:

  • Umožnění implementace curryingu jako kompozice na wiki, ale bez nutnosti přísné statické analýzy. — Yes check.svg Hotovo
  • Umožnění vytvoření následujících tří "uživatelsky definovaných" typů na wiki: positive integer (kladné celé číslo), sign (znaménko) a integer (celé číslo). — Yes check.svg Hotovo
  • Umožnění vytvoření obecného typu obalu pomocí kompozice na wiki — Yes check.svg Hotovo

Viz též newsletter o této fázi.

Fáze θ (theta): rozmrazování a zmrazování

  1. Zmrazování a rozmrazování obsahu (Úkol P1.7). ― úkol T275942
  2. Úkol P1.9: Projděte bezpečnostní kontrolou. — úkol T274682, …
  3. Spuštění veřejného testovacího systému (Úkol P1.4). — úkol T261469

Podmínka dokončení fáze:

  • Jako správce mohu zmrazit a rozmrazit jakýkoli objekt napsaný uživatelem (podobně nebo možná stejně jako systém ochrany MediaWiki); všechny objekty dodané systémem jsou trvale zmrazeny.
  • Jako uživatel upravující zmrazenou stránku mohu změnit popisek, ale ne implementaci, zatímco na nezmrazené stránce je možné obojí.
  • ZObjecty jsou uloženy pomocí nového kanonického tvaru pro typed lists (typované seznamy) a všechny části jsou stále funkční.
  • Funkce zobrazení a úprav je implementována a úspěšně otestována
  • Pokud je k dispozici několik implementací, vybere se ta "nejlepší". (Určení vhodnosti může být později změněno.)
  • Měříme čas běhu a využití paměti každé spuštěné funkce a zobrazujeme je ve výsledku provádění a v implementační/testovací tabulce.
  • Úpravy systémově definovaných ZObjectů jsou omezeny na uživatele se správnými právy. Jsou zobrazeny srozumitelné rozdíly. Výsledky jsou ukládány do mezipaměti.
  • Text se zpětnými odkazy, odkazy, řetězci, seznamy je implementován a úspěšně otestován
  • Je zdokumentována společná dohoda s komunitou o tom, jak a proč bude tým přispívat do Wikifunkcí.
  • Jsou schváleny návrhy pro prohlížení a úpravy vícejazyčné dokumentace na mobilních zařízeních a počítačích. UX je instrumentováno a data jsou shromažďována.

Fáze ι (iota): dokumentace objektů

  1. Jedná se o předběžné zadání, které přesouvá dokumentační úkoly sem.
  2. Zajištění úprav záhlaví (navíc k plným hrubým úpravám) (to je docela velký úkol) - týká se to vlastně jen štítků.
  3. Rozšíření zobrazení pro Z2K3/label (štítek) s vícejazyčným textem.
  4. Rozšíření záhlaví o Z2K4/documentation (dokumentaci). — úkol T260954 & úkol T260956
  5. Rozšíření úprav o Z2K4/documentation (dokumentaci). — úkol T260955

Podmínka dokončení fáze: Jako uživatel mohu dokumentovat objekt ZObject ve všech podporovaných jazycích pomocí wikitextu.

Fáze κ (kappa): úklid

  1. Dotažení a vyčištění úkolů, uzavření všech úkolů před spuštěním.

Podmínka dokončení fáze: Jako tým abstraktní Wikipedie se cítíme připraveni na spuštění, včetně podpisu všech příslušných kolegů.

Fáze λ (lambda): spuštění

  1. Fáze λ (lambda) je určena ke startu. Pokud existují úkoly před spuštěním, které tomu brání, samozřejmě.
  2. Založení nového projektu Wikimedia.
  3. Přesunutí některých wiki stránek o projektu z Meta do Wikifunkcí.

Podmínka dokončení fáze: Jako člověk na webu mohu navštívit a používat Wikifunctions.org a psát a spouštět funkce přímo na webu.

Nefázované úkoly

Úkoly před spuštěním, které je třeba provést, ale ještě nejsou zavedeny do fáze:

Úkoly po spuštění části 1