Hvorfor det tog lang tid at opbygge den lille linkeksempel på Wikipedia

I går afsluttede mit team lanceringen af ​​“side previews” - en funktion, der nu er implementeret til hundreder af sprogudgaver af Wikipedia. Vi ser op til en halv million hits hvert minut til vores API for at tjene de kort, der vises, når du hover over et link.

Eksempelkort vises nu, når du holder musepekeren over et link ohhh yeeehh (og ja, jeg bruger Wikipedia's mobile hud til min desktop-browsing). Tekst fra Wikipedia-artikler om isbjerge og vand, CC BY-SA 3.0. Billeder fra venstre til højre, øverst til bund: # 1 af Kim Hansen, CC BY-SA 3.0; # 2 af Andreas Weith, CC BY-SA 4.0; # 3 via Nationalbiblioteket i New Zealand, CC0.

På overfladen ser det ganske enkelt ud. Det er noget, mange websteder allerede har. Det har et billede og noget tekst og viser, når du holder musepekeren over et link. Næppe banebrydende ting ... eller sådan kan det se ud.

Den originale idé blev udtænkt for fire år siden, baseret på en idé fra en frivillig / redaktør mange år før det.

Det har således taget et par år for os at få dette ud til alle. Det kan virke mærkeligt, men som et isbjerge, når du først begynder at kigge under det, giver det hele mening.

Vi var nødt til at vælge et miniaturebillede

Vi har flere millioner sider, alle gemt som rå wikitext. Vi kunne ikke forvente, at hver enkelt artikel redigeres for at udpege en miniature.

Længe tilbage i 2012 byggede Max Semenik, en softwareingeniør i vores Community Tech-team, en udvidelse, der algoritmisk ville finde ud af det mest passende billede til en artikel.

Som med alle algoritmer var den ikke perfekt, og da den ikke var designet til brug af tilfælde af sideeksempler, krævede den også finjustering.

Vi var nødt til at foretage opdateringer for at begrænse billedet til den første del af artiklen. At arbejde med algoritmer er hårdt, men til dette formål af afgørende betydning.

Vi var nødt til at generere et resume

Vi har flere millioner sider, alle gemt som rå wikitext. Hvordan opsummeres det uden at bede vores redaktører om at gå ind og omhyggeligt gøre det for hver artikel?

Den travle Max Semenik, der hjalp os med miniaturebillederne, skrev også en udvidelse til at generere uddrag af artikler. Det blev oprindeligt skrevet primært til oversigt over almindelig tekst. Vores oprindelige versioner af sideeksempler brugte dette, men vi indså, at det ikke var den bedst egnede til det, vi forsøgte at gøre.

Så vi stoppede med at bruge dette.

Vi indså, at HTML var meget vigtigt. F.eks. Indeholdt kemiartikler kemiske formler, der kræver en underskrift, der kræver HTML.

Overvej hvordan HTML er nødvendigt for at generere resume til indhold, hvor abonnement er vigtigt, såsom den kemiske formel for vand, der er vist her. Tekst fra den engelske Wikipedia-artikel om vand, CC BY-SA 3.0; billede af Kim Hansen, CC BY-SA 3.0.

Mange af vores artikler begynder med information om placering og udtale. Meget af dette indhold hørte ikke hjemme i vores resume, og for andet indhold var det mindre tydeligt, hvad der hørte til. Resuméerne havde en masse designinput, og vi identificerede, hvilket indhold der ikke skulle vises i et eksempel. Vi skrev en specifikation, der fanger den krævede opførsel.

Placeringsoplysningsfunktioner i begyndelsen af ​​mange artikler, der viser sig at være problematiske at sammenfatte Wikipedia-artikler ...... ligesom udtaleoplysninger gør. Tekst via den engelske Wikipedia's artikel om Inle Lake, CC BY-SA 3.0.

I sidste ende besluttede vi at bygge oven på et API, der oprindeligt blev bygget til vores oprindelige Android- og iOS-apps. Vi oprettede en ny API specielt til dette formål.

Vi genererer nu resuméet fra hele HTML-artiklen. Vi analyserer det ligesom en browser og identificerer i henhold til specifikationen det første "ikke-tomme" hovedafsnit i hver artikel.

En af de store udfordringer her var beslutningen om at stribe indhold inden i parentes. Da vi understøtter over 300 sprog, måtte dette lokaliseres (ikke alle bruger det samme tegnsæt!).

Ikke kun det, men selvfølgelig er nogle parenteser vigtige ... kanttilfælde er overalt. Vi var nødt til at tænke på al deres potentielle brug og hvordan vi bedst kunne gøre dem.

Undertiden er indhold inden i parenteser vigtigt, som dette eksempel antyder. Det er svært at identificere, hvornår de er vigtige. Tekst fra den engelske Wikipedia-artikel på det periodiske system, CC BY-SA 3.0; billede af Offnfopt, public domain.

At strippe parentetiske elementer fra brugergenereret HTML viste sig også at være ret vanskeligt. Mens det kræver et simpelt regelmæssigt udtryk at gøre det i almindelig tekst, bliver tingene mere komplicerede, når du overvejer indlejret HTML.

Det var vigtigt at sikre, at indholdet fortsatte med at være fornuftigt med indholdet inden i parenteser, der var fjernet, og at vi, at vi ikke tilføjede nogen sikkerhedssårbarheder.

Tak til vores infrastrukturteam for at hjælpe os med at opbygge denne API.

Vi arbejder med vores samfund

Vores redigeringsfællesskab er meget interesseret i vores produkt. Derfor skriver de artikler til dig på fritiden uden økonomisk gevinst.

Vi inkluderer dem i alle dele af processen, og vi arbejder utrætteligt med dem for at løse alle kanter (uanset om det er ødelagte resuméer eller upassende billeder) og for at berolige dem ved vi, hvad vi laver, virkningen af ​​hvorfor vi gør, og hvorfor vi fortsætter med at gøre det.

Vores oprindelige version var ikke god nok. Vores samfund bad os om ikke at gå videre med det. Vi svarede ved at lytte til dem og gøre det bedre.

Tak samfund og vores samfundsforbindelser, der var med til at lette disse samtaler!

Design design design

Vi gjorde meget af det. Vores designer, Nirzar, skrev godt, så jeg gider ikke dele mere her, men design var på hvert trin i processen, om det var de oprindelige prototyper (tak Prateek Saxena!); diskutere ydelsen af ​​funktionen med vores performance-team; perfektionering af miniaturebilleder og resume; eller tale med vores samfund.

Tak designteam!

Vi var nødt til at instrumentere det

Dette var en stor ændring af, hvordan folk interagerer med vores indhold. Vi interesserer os meget for privatlivets fred i Wikimedia. Vi er sandsynligvis et af de få (kun ?!) store websteder, der ikke installerer scripts fra tredjepart til at spore dig.

Vores privatlivspolitik forbyder os at give væk data om dig.

Vi bruger ikke leverandører til A / B-test eller analyserer vores brugers opførsel.

På trods af alt dette skærer vi ikke hjørner.

Vi ønsker ikke at foretage dumme risikable ændringer.

Hver gang vi bygger noget større, er vi nødt til at bygge infrastrukturen for at evaluere den. Vi konstruerer hypoteser og test for at teste disse hypoteser. Vi bygger det. Vi tester det. Vi lytter til dataene. Vi tilpasser os. Vi tester igen.

Det betyder, at vi jonglerer med at være et produktteam og et analyseteam. Vores udviklingsteam bærer flere hatte. I betragtning af den skala, vi arbejder på, skal vi håndtere fejl. Lejlighedsvis finder vi store fejl i browserudbydere.

Vores sidste A / B-test af Tilman Bayer gav os mange svar. Det er en god læsning!

I betragtning af konklusionerne fra denne A / B-test besluttede vi også at begynde at måle “side preview-visninger” som en ekstra metrisk til sidevisninger. Den metriek skyder 1000 begivenheder pr. Sekund, og vores analyseteam sparker røv, der beskæftiger sig med den slags skala.

Tak analytikere, tak analytikerteam!

Vi var nødt til at skalere vores API for at støtte dig

Vi ser 0,5 millioner hits til vores API et minut.

Vi ser 0,5 millioner hits til vores API et minut.

Det siger jeg to gange, fordi det er en stor mængde trafik.

Vores traditionelle API'er blev oprindeligt bygget til bots for at hjælpe med at rydde op i dine redigeringer. De var ikke designet til læsere.

Wikimedia-serviceteamet har været afgørende for succes med dette projekt ved at levere infrastrukturen til at håndtere, håndtere en masse cache (vi er meget afhængige af Varnish) og sørger for, når indholdet redigeres, nye sammendrag bliver genereret. Det er velkendt, at ugyldiggørelse af cache er et af de sværere computervidenskabelige problemer.

Tak service team !!

Tak tak tak tak

Forsendelse af noget føles altid godt. Jeg håber, at den "enkle" forhåndsvisning af mit team ved hjælp af mange hold på tværs af Wikimedia Foundation har sendt dig, som beriger din oplevelse.

Mye af os har tydeligvis været involveret, og vi er stolte af, hvad vi har lagt ud.

Vi er ikke færdige. Software er aldrig gjort.

Vi har kode til oprydning og nye ideer til, hvordan man vokser denne lille lille funktion.

Nogle kan sige, at vi kun ser toppen af ​​isbjerget.

Wikimedia Foundation er en non-profit og er afhængig af donationer fra folk som dig for at holde websitet ope og køre på en sådan måde, at det lever op til vores værdier. For at hjælpe os med at fortsætte med at opbygge funktioner som denne, skal du overveje at donere til os.

Jon Robson, senior softwareingeniør, desktop og mobilweb
Wikimedia Foundation

Du kan også læse dette indlæg på vores WordPress-blog. Begge indlæg er redigeret for at ordne en skrivefejl - vores API modtager en halv million hits pr. Minut, ikke fem tusind.

Vil du lære mere? Se vores originale meddelelse.