Preskoči na glavno vsebino

5 objav z oznako "State Machines"

Posts about state machine patterns and concepts

Prikaži vse oznake

Visible AI: Nova paradigma oblikovanja iger

· 5 min branja
Ekipa Almadar
Ekipa Almadar

V večini iger je AI črna skrinja. Sovražniki počnejo stvari, vi pa reagirate. Ni načina za branje njihovih namenov, napovedovanje njihovih potez ali premagovanje z misljenjem — samo hitrejši refleksi.

Kaj če bi bilo AI-jevo vedênje vidno? Kaj če bi lahko prebrali sovražnikov state machine in ga uporabili proti njim?

To smo zgradili v Trait Wars.

Nedavne objave

Guard Clauses v State Machines: Sistem dovoljenj, ki dejansko deluje

· 4 min branja
Osama Alghanmi
Soustanovitelj in tehnični vodja

Avtorizacijska logika raztresena po vaši aplikaciji? Kaj če bi bila preprosto... del definicije stanja?

Nedavne objave

Končni avtomati stanja: Najbolj podcenjeni design pattern v frontend razvoju

· 5 min branja
Osama Alghanmi
Soustanovitelj in tehnični vodja

Če uporabljate useState za kompleksen UI, verjetno delate narobe. Obstaja 50 let stara rešitev, ki jo ignorirate.

Nedavne objave

Vzorec zaprtega kroga: Zakaj se vaši uporabniki zataknejo (in kako to preprečiti)

· 5 min branja
Osama Alghanmi
Soustanovitelj in tehnični vodja

Vzorec zaprtega kroga: Zakaj se vaši uporabniki zataknejo (in kako to preprečiti)

Ste že odprli modal in ga niste mogli zapreti? To je prekinjen krog. Mi smo to naredili nemogoče za gradnjo.

Nedavne objave

Stroji s Traits: Kako bo Almadar transformiral robotiko

· 4 min branja
Ekipa Almadar
Ekipa Almadar

Vizija za prihodnost avtomatizacije


Uvod

Predstavljajte si svet, kjer ne potrebujete pisati tisočev vrstic kode, da robot inteligentno premaknete. Svet, kjer deklarirate vedênje stroja na enak način, kot opisujete planete, ki se gibljejo v svojih orbitah.

To je svet Almadar.

V tej seriji bomo raziskovali, kako jezik Almadar lahko revolucionira robotiko in industrijsko avtomatizacijo.


Problem: Zakaj je programiranje robotov težko?

Tradicionalni pristop

Ko inženirji danes programirajo robota, se soočijo z ogromnimi izzivi:

# Tradicionalni pristop - zapletena, kompleksna koda
class RobotArm:
def __init__(self):
self.position = (0, 0, 0)
self.is_holding = False
self.speed = 0
self.error_state = None

def move_to(self, target):
if self.error_state:
self.handle_error() # Kje je to definirano?
return
if self.is_holding and self.weight > MAX_WEIGHT:
self.emergency_stop() # Kaj se zgodi potem?
return
# ... še stotine vrstic

Problemi:

  1. Naraščajoča kompleksnost — Vsak nov pogoj podvoji kompleksnost
  2. Skrite napake — Kaj se zgodi, če pozabimo določeno stanje?
  3. Težavno testiranje — Kako zagotovimo, da so vse poti pokrite?
  4. Ločena dokumentacija — Koda pravi eno, dokumentacija drugo

Rešitev: Traits kot način razmišljanja

Fizika programske opreme

V fiziki opisujemo gibanje objektov z preprostimi zakoni:

  • Objekt je bodisi v mirovanju bodisi v gibanju
  • Prehod med njima zahteva silo (dogodek)
  • Zakoni nadzorujejo, kdaj se prehodi lahko zgodijo

Almadar uporablja enako logiko za programsko opremo:

FizikaAlmadar
Stanje (mirovanje/gibanje)State machine stanja
SilaDogodki
ZakoniGuardi
ReakcijaEffects

Primer: Robotska roka v Almadarju

{
"name": "RoboticArm",
"entity": {
"name": "Arm",
"persistence": "runtime",
"fields": [
{ "name": "position", "type": "object" },
{ "name": "speed", "type": "number" },
{ "name": "isHolding", "type": "boolean" },
{ "name": "weight", "type": "number" }
]
},
"traits": [{
"name": "MovementTrait",
"stateMachine": {
"states": [
{ "name": "idle", "isInitial": true },
{ "name": "moving" },
{ "name": "holding" },
{ "name": "error" }
],
"events": [
{ "key": "MOVE", "name": "Start movement" },
{ "key": "STOP", "name": "Stop" },
{ "key": "GRAB", "name": "Grab object" },
{ "key": "RELEASE", "name": "Release object" },
{ "key": "EMERGENCY", "name": "Emergency stop" }
],
"transitions": [
{
"from": "idle",
"to": "moving",
"event": "MOVE",
"guard": ["and",
["not", "@entity.isHolding"],
["<", "@payload.speed", 100]
],
"effects": [
["persist", "update", "Arm", { "speed": "@payload.speed" }],
["emit", "MOVEMENT_STARTED", { "target": "@payload.target" }]
]
},
{
"from": "moving",
"to": "idle",
"event": "STOP",
"effects": [
["persist", "update", "Arm", { "speed": 0 }]
]
},
{
"from": "idle",
"to": "holding",
"event": "GRAB",
"guard": ["<", "@payload.weight", 50],
"effects": [
["persist", "update", "Arm", {
"isHolding": true,
"weight": "@payload.weight"
}],
["notify", "info", "Object grabbed"]
]
},
{
"from": "idle",
"to": "error",
"event": "EMERGENCY",
"effects": [
["persist", "update", "Arm", { "speed": 0 }],
["emit", "EMERGENCY_STOP", { "reason": "@payload.reason" }],
["notify", "error", "Emergency stop!"]
]
},
{
"from": "moving",
"to": "error",
"event": "EMERGENCY",
"effects": [
["persist", "update", "Arm", { "speed": 0 }],
["emit", "EMERGENCY_STOP", { "reason": "@payload.reason" }],
["notify", "error", "Emergency stop!"]
]
},
{
"from": "holding",
"to": "error",
"event": "EMERGENCY",
"effects": [
["persist", "update", "Arm", { "speed": 0 }],
["emit", "EMERGENCY_STOP", { "reason": "@payload.reason" }],
["notify", "error", "Emergency stop!"]
]
}
]
}
}]
}

Kaj to pomeni?

  1. Vsa stanja so jasna — idle, moving, holding, error
  2. Vsi prehodi so definirani — Ni presenečenj
  3. Guardi varujejo — Ni mogoče zgrabiti teže večje od 50
  4. Katero koli stanje v emergency — Ekspliciten prehod na stanje zagotavlja, da vsako stanje lahko doseže error

Priložnost

Zakaj je Almadar primeren

PotrebaAlmadar Rešitev
Hitrost razvoja60% hitreje kot tradicionalno
ZanesljivostZagotovljeni state machines
VarnostGuardi preprečujejo napačno vedênje
DokumentacijaShema JE dokumentacija
UsposabljanjeDeklarativna, berljiva sintaksa

Primer: Delivery Robot

{
"name": "DeliveryRobot",
"orbitals": [
{
"name": "Navigation",
"traits": [{ "ref": "GPSTrait" }, { "ref": "ObstacleAvoidanceTrait" }]
},
{
"name": "Delivery",
"traits": [{ "ref": "PackageReceiveTrait" }, { "ref": "PackageDeliverTrait" }]
},
{
"name": "Communication",
"traits": [{ "ref": "CustomerNotificationTrait" }],
"listens": [
{ "event": "DELIVERY_COMPLETE", "triggers": "SEND_CONFIRMATION" }
]
}
]
}

Trije Orbitali, ki samodejno komunicirajo:

  1. Navigation — Nadzoruje gibanje
  2. Delivery — Upravlja pakete
  3. Communication — Obvesti stranko

Ko Delivery emitira DELIVERY_COMPLETE, Communication posluša in pošlje potrditev stranki samodejno.


Naslednji koraki

Za razvijalce

  1. Prenesite compilernpm install -g @almadar/cli
  2. Preberite dokumentacijoGetting Started Guide
  3. Poskusite primer — Zgradite svoj prvi robotski trait

Za podjetja

  1. Kontaktirajte nashello@almadar.io
  2. Rezervirajte demo — Pokazali vam bomo Almadar na vašem projektu
  3. Začnite majhno — Pilot projekt za dokaz vrednosti

Za izobraževalne ustanove

Ponujamo:

  • Gostujoča predavanja — Uvod v Almadar
  • Diplomski projekti — Supervizija in vodstvo
  • Raziskovalna partnerstva — Skupen razvoj

Zaključek

"Stroji ne potrebujejo več tisočev vrstic. Potrebujejo jasne, definirane traits."

Almadar ni samo programski jezik. Je nov način razmišljanja o vedênju strojev. Način, ki programiranje približa fiziki, razvoj pa oblikovanju.

Ste pripravljeni?


V naslednjem delu

Part 2: Gradnja industrijskega robotskega krmilnika — Skupaj bomo zgradili robotsko roko z jezikom Almadar, korak za korakom.

Nedavne objave