Släng.ee · 2026
Släng.ee
Eesti slängisõnastik: sõnad, mida mujalt sõnastikust ei leia.
Eesmärk
Eesti slängisõnastik pidi kolima vanalt ja killustunud platvormilt kiirele lehele, kus sõnu on lihtne otsida ja kuhu kõik saavad sõnu lisada. Aastate jooksul kogutud sõnad ja nende ajalugu ei tohtinud kaduma minna.
Tulemus numbrites
Mis muutus
5 919
kasutajate lisatud sõna
15
aastat kasutajate sisu (alates 2011)
679 377
nime keelunimekirjas, kontrollitakse ilma kogu nimekirja mällu laadimata
0
salvestatud IP-aadressi
Olukord
Släng.ee on Eesti slängisõnastik, kuhu igaüks saab sõnu lisada. Vanimad sissekanded on aastast 2011. Aastatega oli leht kasvanud kokku lehekülgede ehitaja, vormide, hääletuse, vaatamiste loenduri, otsingu ja poe pluginatest. Iga uus plugin lisas lehele kiirust vähendavat koodi ja iga plugin hoidis oma andmeid omamoodi.
Uus kujundus pidi need asendama ühe teemaga, mis teeb kõik ise. Samal ajal tuli kolm väga erinevat allikat liita üheks sõnastikuks: EKI vana veebiarhiiv, Tartu Ülikooli 2025. aasta slängisõnastiku tabel ja käsitsi koostatud nimekirjad. Vanad kuupäevad, hääled ja vaatamiste arvud pidid alles jääma ja pood pidi töötama edasi nagu enne.
Kõige tundlikum osa oli aga see, et kasutajate lisatud sõnad võivad puudutada päris inimesi. Slängisõnastikku on lihtne kasutada klassivenna mõnitamiseks. See tuli ära hoida nii, et ühtegi kasutajat ei jälgita.
Piirangud
- Kolm väga erineva kujuga allikat (vana kodeeringuga veebileht, Google'i tabel ja käsitsi nimekirjad) tuli ühtlustada nii, et ajalugu ei kaoks.
- Kasutajate lisatud sõnad ei tohi kunagi nimetada päris inimesi ega koole, ka mitte sõna sisse peidetuna.
- Hääletamine ja vaatamiste loendamine pidid töötama ilma ühtegi IP-aadressi salvestamata.
- Pood (WooCommerce, MakeCommerce'i maksed ja Printfuli tootmine) pidi töötama täpselt nagu enne. Tellimuste andmeid ei tohtinud puutuda.
- Eesti tähed Õ, Ä, Ö, Ü, Š ja Ž ei tohtinud veebiaadressides muutuda tavalisteks tähtedeks.
Lahendus
Kuidas lahendasin
Kolimine
Kolm eri allikat tuli liita üheks sõnastikuks nii, et midagi ei kaoks ega tuleks topelt.
Andmed koliti üle väikeste osadena. Iga osa järel kontrolliti, et sisu on sama mis enne. Sama sõna mitmest allikast liideti üheks, ka siis, kui see oli veidi erinevalt kirjutatud.
Iga tööriist, mis andmeid muudab, töötab vaikimisi proovirežiimis: see näitab, mida ta teeks, aga ei muuda midagi. Päris käivitus nõuab eraldi käsku ja proovi aruanne jääb alles. Isegi sõnade eemaldamine ei kustuta midagi, vaid tõstab sõnad prügikasti, kust need saab tagasi võtta.
Vanad pluginad hoidsid hääli ja vaatamisi oma väljadel. Uus teema kasutab täpselt samu välju, nii et 15 aasta hääled ja vaatamised jäid alles ilma ühtegi arvu ümber kirjutamata. Vanad pluginad jäävad pärast vahetust mõneks ajaks paigale, lihtsalt välja lülitatuna, et vajadusel saaks kiiresti tagasi minna.
Vanad andmed
Vanade sõnade sisus olid kujunduse jäänused ja lisaja rida segamini. Otsingutulemuse kirjeldus oleks tulnud valest kohast.
Vanades sissekannetes oli definitsioon, näitelause ja lisaja nimi kirjutatud ühte tekstivälja koos kujundusega. Kui otsingumootor võtab sealt kirjelduseks esimese lõigu, pole see tihti üldse definitsioon.
Nüüd on igal sõnal eraldi väljad: sõna, tähendus, näide ja lisaja. Otsingutulemuse kirjeldus tehakse struktureeritud tähendusest ja lõigatakse terve sõna kohalt, mitte keset täpitähte. Mõnel vanal sõnal oli lisaja nime asemel kirjas hoopis veebiaadressi osa (näiteks „haavatud-polv”). Nüüd näidatakse sel juhul lisaja päris nime ja link viib tema teiste sõnadeni.
Privaatsus
Kasutajate lisatud slängisõnad ei tohi kunagi nimetada päris inimest ega kooli.
Rahvastikuregistri avalikust nimekirjast on keelunimekirjas 679 377 nime. Need on salvestatud SHA-256 räsidena, mitte loetava tekstina, kindla pikkusega kirjetena ja tähestiku järjekorras. Nii saab nime olemasolu kontrollida kahendotsinguga: umbes 20 sammuga, ilma et kogu 21,7 MB faili oleks vaja kunagi mällu laadida. Sõna lisamine ei küsi midagi välisest teenusest.
Lisaks on vana musta nimekirja 3 589 kirjet, koolide nimekiri, käsitsi lisatud keelud ja 157 lubatud erandit (tavalised sõnad, mis juhtumisi on ka kellegi nimi). Registri nimesid kontrollitakse alates kolmest tähest, sest kahetähelised võõrnimed langeksid kokku liiga paljude tavaliste sõnadega.
Mis ei töötanud: esimene versioon oli liiga range. Rahvastikuregistri nimede seas on palju tavalisi eesti sõnu, sest keegi kannab neid nimena: kass, karu, hunt, kask, hiir, kala, anna. Slängisõnastikus on selliseid sõnu palju ja filter lükkas neid tagasi. Sellest kasvaski lubatud erandite nimekiri. Haldusvaates saab kahtlase leiu ühe nupuga erandiks märkida ja otsus jääb alles.
Mitmesõnalise väljendi puhul oli sama probleem. Kaks sõna, mis kumbki on kellegi perekonnanimi, ei tee veel täisnime. Nüüd peetakse väljendit täisnimeks ainult siis, kui selles on tuntud eesnimi. Vastupidine viga tuli ka: erandite hulka olid sattunud mõned puhtad eesnimed ja nende kaudu sai nime ikka sõnastikku. Need võtsin hiljem erandite seast välja.
Petmise vastu
Kes tahab kellegi nime sõnastikku saada, proovib seda peita: numbrid, korduvad tähed, liitsõnad, tühikud tähtede vahel.
Iga trikk on kontrollis eraldi läbi mängitud. Numbrid eemaldatakse („jakob67” on ikka Jakob). Korduvad tähed tõmmatakse kokku („Joooonas” on Joonas). Liitsõnast otsitakse eesnime algusest ja lõpust („Joonaspede”). Tähtede vahele pandud tühikud ja kriipsud eemaldatakse („L ü ü s”). Mitmesõnalises väljendis kontrollitakse iga sõna eraldi ja ka seda, kas kokku moodustub ees- ja perekonnanimi.
Kui administraator sõna kustutab, lisatakse see automaatselt keelunimekirja, nii et sama sõna ei saa enam uuesti lisada. Kui sõna taastatakse, eemaldatakse keeld. Olemasolevaid sõnu saab kogu nimekirja vastu uuesti üle kontrollida: esmalt ainult aruandena, siis soovi korral prügikasti tõstes.
Mis ei töötanud: esimene versioon kontrollis sõna ainult tervikuna. Pärast avamist tulid läbi just need nipid, mida ülal kirjeldan: „julius 2.0”, „Kassspar” ja nimega algavad liitsõnad. Iga möödahiilimine sai oma kontrolli ja oma testi. Liitsõna reeglil on ka piir. Nimi peab olema vähemalt neli tähte ja sõna nimest vähemalt kolm tähte pikem, muidu jääks vahele iga tavaline sõna, mis juhtumisi algab lühikese nimega. Ühetähelisi välju enam vastu ei võeta.
Kogukond
Hääletamine ja vaatamiste loendamine ei tohi kasutajaid jälgida ega nende IP-aadresse koguda.
Hääl jääb meelde kasutaja enda brauserisse, küpsisena, mis on serveri salajase võtmega allkirjastatud (HMAC). Küpsist ei saa käsitsi võltsida ja serverisse ei salvestata ühtegi IP-aadressi. Hääle muutmine on üks andmebaasi toiming, nii et kaks samaaegset klikki ei saa arvu sassi ajada ega alla nulli viia. Päringud peavad tulema lehelt endalt, mitte mõnelt teiselt saidilt.
Vaatamisi loetakse küpsisega, mis ei lase sama inimest 24 tunni jooksul kaks korda lugeda. Avalehel on korraga palju sõnu, seega saadetakse kuni 50 sõna vaatamised ühe päringuga, et server ei peaks vastama viiekümnele eraldi päringule.
Avalehel ja tähelehtedel loetakse sõnakaardi vaatamine alles siis, kui leht on olnud lahti vähemalt kolm sekundit. Kiire kerimine läbi lehe ei tõsta ühegi sõna vaatamisi.
Turvalisus
Avatud sõnade lisamise vorm meelitab ligi rämpsu ja roboteid.
Vormis on nähtamatu lõksväli, mida täidavad ainult robotid. Vorm peab olema lahti vähemalt 2 sekundit ja kõige rohkem 2 tundi. Ühelt saatjalt võetakse vastu kuni 3 sõna 10 minuti jooksul. Saatja äratundmiseks ei salvestata IP-aadressi, vaid sellest tehtud räsi, mis kaob 10 minuti pärast. Päringu päiseid, mida saatja saab ise võltsida, ei usaldata.
Ajapiirang töötab ainult siis, kui vormi leht on iga kord värske. Kui lehe vahemälu oleks salvestanud vormi koos selle avamise ajaga, oleks kõigile näidatud sama vana aega ja vorm oleks mõne aja pärast kõik saatjad tagasi lükanud. Seepärast on lisamise leht vahemälust alati välja jäetud.
Sama sõna ei saa lisada kaks korda: võrreldakse ühtlustatud kujul, nii et tühikud, suurtähed, ülakomad ja kriipsud ei tee sama sõna „uueks”. Kui kaks inimest lisavad sama uue sõna samal hetkel, lukustab andmebaas selle sõna lühikeseks ajaks, nii et läbi läheb ainult üks.
Eesti keel
WordPress muudab Eesti tähed Õ, Ä, Ö, Ü, Š ja Ž tavalisteks tähtedeks. Õ- ja O-tähega algavate sõnade lehed oleksid läinud segamini.
Tähtede järgi sirvimise lehtedel on nüüd aadressid, mis hoiavad Eesti tähed alles. Vanadel sõnadel ei olnud tähte alati märgitud, seega võetakse algustäht otse sõnast endast. Jutumärgid ja kirjavahemärgid sõna alguses ei tohi seda segada: jutumärkides sõna, mis algab Õ-ga, kuulub ikka Õ alla. Vanad tähelehed suunatakse uutele, et otsingumootoritel ei oleks sama sisu kahe aadressi all.
„Juhuslik sõna” valib sõna eelnevalt valmis pandud nimekirjast, mida uuendatakse iga 12 tunni järel, sest suurest tabelist iga kord juhusliku rea otsimine oleks aeglane.
Otsingumootorid
Tuhanded kasutajate lisatud lehed võivad otsingumootori silmis olla ka õhukesed või kordused.
Igal sõnal on otsingumootoritele mõeldud märgistus, mis ütleb, et see on sõnastiku sissekanne (DefinedTerm). Lisaja leht avatakse otsingumootoritele alles siis, kui tal on vähemalt kolm sõna. Keelatud sõnad ja kohatäited (sõna „sõna”, tähendus „definitsioon”) jäetakse otsingust ja saidikaardist välja. Kõik reeglid on tagasipööratavad: kui sõna parandatakse, tuleb see ise otsingusse tagasi.
Avaleht näitab kogu aeg uusi sõnu. Et otsingutulemuses ei paistaks juhuslik värske sissekanne, on avalehe kirjeldus eraldi paigas. Poe abilehed (ostukorv, konto) on otsingust väljas.
E-pood
Sõnastiku kõrval on pood, aga poe kood ei tohi sõnastikku aeglasemaks teha.
Poe stiilid ja skriptid laaditakse ainult poe lehtedel. Sõnastiku lehed jäävad nendest vabaks, välja arvatud turundusallika jälgimine, et poodi jõudnud ostu saaks siduda sõnalehega, kust inimene tuli.
Ostukorv ja kassa kasutavad WooCommerce’i klassikalist lahendust, sest just sinna ühenduvad MakeCommerce’i maksed ja Printfuli tarne. Tasuta tarne kahe või enama toote puhul muudab ainult Printfuli tavatarne hinda. Kiirtarnet, maksu ega tellimuse andmeid see ei puuduta. Väljalaske kord näeb ette, et kogu ostuteekond käib enne läbi testkeskkonnas: makse õnnestumine, ebaõnnestumine ja katkestamine ning testtellimus Printfuli.
Tulemus
Släng.ee-s on nüüd 5 919 kasutajate lisatud sõna ühes kiires WordPressi teemas, vanimad aastast 2011. Lehekülgede ehitaja, vormide, hääletuse, otsingu ja ostukorvi pluginate töö teeb nüüd teema ise ning hääled, vaatamised ja pood töötavad edasi nagu enne.
Kasutajate privaatsus on kaitstud ilma ühtegi IP-aadressi salvestamata ja päris inimeste nimed ei pääse sõnastikku ka peidetult. Otsingumootorid näevad iga sõna sõnastiku sissekandena ja vähese sisuga lehti ei indekseerita.
Edasi
Järgmisena teen paremaks otsingu ja uute sõnade avastamise ning jälgin, et pood ei teeks sõnastikku aeglasemaks.