Straumspråket
Kvar straum i Losen er éi lita tekstfil. Fila seiar kvar innlegga kjem frå, kva som skal bort, kva som skal opp og kva som skal ned. Det er heile algoritmen, og du kan lesa han att seinare.
Språket er deklarativt. Det har ingen løkker, ingen filer og ingen nettverk, så det er trygt å køyra ein straum som nokon andre har skrive.
Slik ser ei fil ut
feed "Stille røyster"
about "Løftar folk som postar sjeldan, så dei ikkje drukna mellom dei travle."
from home
within 48h
start with recency(6h)
hide:
when post.lang not in [nb, nn, en]
when post is boost
and post.age > 24h as "gammal boost"
when post.cw has "politics"
boost:
when post.author is quiet × 2 as "stille røyst"
when post.tags has any [tog, jernbane]
× 1.5 as "tog"
when post.author is mutual
and post is reply × 1.3
lower:
when post has media
and not post has alt × 0.5
define:
quiet = author is followed
and author.rate < 1/day
mix:
max_per_author = 2 per 20
spread boostsØvst står hovudet. Under kjem blokkene, med innrykk som i Python. Blokka avgjer kva som skjer med eit innlegg, så kvar regel treng berre seia når.
Fire steg, alltid i same rekkjefølgje
- Frå. Losen samlar innlegg frå kjeldene i
from, innanfor tida iwithin. - Gøym. Reglane i
hide:blir testa ovanfrå og ned. Det fyrste som slår til, blir ståande som grunnen. - Poeng. Kvart innlegg startar med
start with. Så blir alleboost:- oglower:-reglar som slår til, ganga inn. Rekkjefølgja endrar ikkje svaret. - Mix. Lista blir gått gjennom ovanfrå, og innlegg blir flytta nedover til ingen mix-regel er broten.
Alle blokkene er valfrie. Ei fil med berre eit hovud er ein vanleg kronologisk straum.
Ord med fast tyding
| Ord | Tyding | Døme |
|---|---|---|
is, is not | Kva slags ting det er | post is boost, post.author is mutual |
has | Kva det inneheld | post has media, post.cw has "politics" |
has any, has all | Inneheld éin av, eller alle, i ei liste | post.tags has any [tog, jernbane] |
in, not in | Verdien er ein av lista | post.lang in [nb, nn] |
<, >, <=, >=, = | Samanlikn tal, tid og rate | post.age > 24h |
and, not | Kombiner og snu | and not post has alt |
Verdiar
- Tid:
30m,6h,2d. - Rate:
1/day,5/week,2/hour. - Tekst:
"politics"i hermeteikn, eller berre ord i ei liste, som[nb, nn, tog]. - Handtak: som på fediverset, alltid med tenar:
@alice@example.social. - Gongetal:
× 2,* 1.5,× 0.5.
Kommentarar
Alt etter # på ei linje er ein kommentar, til deg sjølv eller dei som les straumen din.
feed "Med kommentarar"
from home
within 48h
# Folk eg følgjer, men som postar lite, skal fram.
boost:
when post.author is followed
and post.author.rate < 1/day × 2Versjonar
Språket har sin eigen versjon, og kvar lagra straum hugsar kva versjon han blei skriven for. Endringar følgjer semantisk versjonering, så ein straum du skriv i dag, skal halda fram med å verka.