Preskoči na glavno vsebino

S-Expressions: JSON funkcijskega programiranja (ki dejansko smisli)

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

S-Expressions, JSON in funkcijska renesansa

Zakaj smo izbrali Lisp-style S-expressions namesto JSON za definicijo logike in zakaj bi tudi vi.

Vsi imamo radi JSON, ampak ko potrebujete logiko, končate z string templates ali JavaScriptom. Kaj če bi bil vaš format podatkov tudi vaš format logike?

Nedavne objave

Razvoj shema-first: Zakaj pišemo JSON pred TypeScriptom

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

Schema-First Development: Načrt, ki postane stavba

Kaj če bi definirali celotno aplikacijo v eni sami JSON datoteki, preden napisali katero koli komponento kode?

Nedavne objave

IKEA učinek za programsko opremo: Zakaj gradimo aplikacije iz flat-packov

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

IKEA je revolucionizirala pohištvo tako, da je postala sestavljiva, flat-pack in prijazna za montažo. Kaj če bi programska oprema delovala enako?

Nedavne objave

Dobrodošli v Almadar

· 1 min branja
Ekipa Almadar
Ekipa Almadar

Z veseljem predstavljamo Almadar — Fiziko programske opreme.

Almadar je deklarativni framework za gradnjo full-stack aplikacij preko state machines. Definirajte svoje entities, vedênja in UI kot sheme, ki se prevedejo v production-ready kodo.

Nedavne objave

Razumevanje State Machines v Almadar

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

State machines so v jedru Almadarja. V tem prispevku raziskujemo, zakaj smo izbrali state machines kot temelj za vedênje aplikacije.

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