Skip to content

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
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 ​

  1. Frå. Losen samlar innlegg frå kjeldene i from, innanfor tida i within.
  2. Gøym. Reglane i hide: blir testa ovanfrå og ned. Det fyrste som slår til, blir ståande som grunnen.
  3. Poeng. Kvart innlegg startar med start with. Så blir alle boost:- og lower:-reglar som slår til, ganga inn. Rekkjefølgja endrar ikkje svaret.
  4. 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 ​

OrdTydingDøme
is, is notKva slags ting det erpost is boost, post.author is mutual
hasKva det inneheldpost has media, post.cw has "politics"
has any, has allInneheld éin av, eller alle, i ei listepost.tags has any [tog, jernbane]
in, not inVerdien er ein av listapost.lang in [nb, nn]
<, >, <=, >=, =Samanlikn tal, tid og ratepost.age > 24h
and, notKombiner og snuand 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
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   × 2

Versjonar ​

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.