đïž đïž đïž https://github.com/clojure/clojure/commit/dfbe09ad2e6cb7a054c040b561f7cee2c350ce62 burde jo venta med Ă„ merge i seks dager :)
Nice!
Har dere timing pÄ ytelsesforbedringen?
Ligger pÄ Jira issues. Interessante diskusjoner over i #announcements
(bench (clojure.core/select-keys {:a "b" :c "d"} [:a]))
Evaluation count : 246382440 in 60 samples of 4106374 calls.
Execution time mean : 243.245536 ns
Execution time std-deviation : 2.714803 ns
Execution time lower quantile : 238.473675 ns ( 2.5%)
Execution time upper quantile : 248.544255 ns (97.5%)
Overhead used : 1.845047 ns
bench ser ut til Ă„ vĂŠre criterium.core/bench!Artig Ă„ fĂ„ med kode i core! Men hvorfor vente seks dag? đ€
Og hvorfor er hele funksjonen flytta for sĂ„ Ă„ ende opp i en declare? đ€
Du kommer snart til Ă„ vĂŠre forfatteren av kode jeg bruker stadig vekk @slipset đ
SĂ„ Frankrikes nasjonaldag er 14. juli, etter stormingen av Bastillien samme dag i 1789. Funksjonen mĂ„tte flyttes fordi den tidligere brukte idiot versjonen av reduce, fordi den raske reduceân ennĂ„ ikke var definert. NĂ„r jeg skriver det, sĂ„ er det litt rart. Eller om den gamle versjonen brukte reduce1? Det er noen Ă„r siden nĂ„âŠ
Aha
Morn :)
Morn!
I gĂ„r skrev jeg et par tester som jeg likte sĂ„ godt at jeg putta dem i en bloggpost đ https://parenteser.mattilsynet.io/gode-abstraksjoner/
Jeg synes det er tĂžft at dette er en ekte test:
(testing "Viser skillelinje mellom hver hovedbolk"
(is (= (->> (mitt-serveringssted-ui/vis-serveringssted {} testdata)
(lookup/select-one "[data-center=lg]")
lookup/children
(map first))
[::mitt-serveringssted-ui/nĂžkkelinfo
:hr
::mitt-serveringssted-ui/besĂžksadresse
:hr
::mitt-serveringssted-ui/Äpningstider
:hr
::mitt-serveringssted-ui/kontaktpersoner
:hr
::mitt-serveringssted-ui/detaljer
:hr
::mitt-serveringssted-ui/drift])))
og siden vi ikke lager noen HTML-string, ikke viser noe i nettleser, og ikke gjÞr noe VDOM, er det bare data inn, data ut. Christian kaller det enhetstest fordi det bare er evaluering av en funksjon for Ä titte pÄ resultatet. SÄ enheten under test gjÞr hele jobben!Veldig elegant!
Ja, veldig stilig! à representere UI med en innebygd datastruktur tror jeg kanskje er det jeg savner aller mest i andre sprÄk etter at jeg fÞrst sÄ det i Clojure.
Jeg setter ogsĂ„ pris pĂ„ maktdemonstrasjonen det er Ă„ inkludere lenker til tre open-source biblioteker dere bruker uten Ă„ nevne at det er forfatteren som stĂ„r bak alle sammen đ
Haha! Jeg syns egentlig det er mer pinlig enn noe annet. "Denne fyren bruker bare sine egne greier" har en litt negativ klang til seg đ
Blir ikke morsommere enn man gjĂžr det til sjĂŠl, som vi pleier Ă„ si đ
Hvis man prÞver Ä gjÞre det samme med React, sÄ mÞter man raskt veggen fordi en hierarkiet ikke blit materialisert fÞr man sender avgÄrde til rendering:
const MySection = (props: { x: { val?: string } }) => {props.x.val} ;
const MyComponent = (props: { state: { xs: { val?: string }[] } }) => (
{props.state.xs.map((x, i, xs) => (
<>
{!x.val && xs[i - 1] && !xs[i - 1].val &&
}
>
))}
);
const result = ;
console.log(result);
---
==> {
'$$typeof': Symbol(react.element),
type: [Function: MyComponent],
key: null,
ref: null,
props: { state: { xs: [Array] } },
_owner: null,
_store: {}
}
dvs, her fÄr man ikke sett hva MyComponent faktisk rendrer. Men blir det ikke samme problem med aliaser i Replicant?Problem, eller feature, alt etter som hvordan du ser det. Det kommer ikke sÄ godt frem av eksempelet Teodor posta over, men det samme skjer der. Og jeg mener det er en fordel, for det lar meg snakke om strukturen uten Ä gÄ inn i detaljene. Hvis jeg fjerner (map first) sÄ ser du hele hiccupen:
([::mitt-serveringssted-ui/nĂžkkelinfo {}
{:db/id 4
:serveringssted/id "serveringssted-10180"}]
[:hr]
[::mitt-serveringssted-ui/besĂžksadresse {}
{:db/id 4
:serveringssted/id "serveringssted-10180"}]
[:hr]
[::mitt-serveringssted-ui/Äpningstider {}
{:db/id 4
:serveringssted/id "serveringssted-10180"}]
[:hr]
[::mitt-serveringssted-ui/kontaktpersoner {}
{:db/id 4
:serveringssted/id "serveringssted-10180"}]
[:hr]
[::mitt-serveringssted-ui/detaljer {}
{:db/id 4
:serveringssted/id "serveringssted-10180"}]
[:hr]
[::mitt-serveringssted-ui/drift {}
{:db/id 4
:serveringssted/id "serveringssted-10180"}])MEN! Replicant har replicant.alias/expand-1 for Ä ekspandere ett nivÄ med aliaser, og replicant.alias/expand for Ä ekspandere alle aliaser. SÄ du kan velge detaljnivÄet som det passer seg, uten Ä vite sÄ mye om hver enkelt konkrete instans.
Normalt sett ville jeg tenkt at en test som trenger Ä se pÄ hva ::mitt-serveringssted-ui/detaljer gjÞr, gitt en serveringsstedsentitet, burde formuleres som en test rett pÄ det aliaset i stedet.
Aliaser er for hiccup omtrent som makroer er for Clojure-kode đ
expand blir jo kjempenyttig, f.eks. ved smoke-tester e.l. Nice!
Den store store forskjellen tenker jeg ligger i hvordan vi bruker React. Hadde vi brukt rene funksjoner som produserte ui istedenfor komponenter, og komponenter unntaksvis for abstraksjoner, sÄ kunne vi hatt en lignende opplevelse ogsÄ der. Men dessverre sÄ er det ingen som er interessert i Ä skrive pÄ den mÄten (som ble tydelig omtrent samme dag som JSX ble lansert).
Ja, det er et mysterium for meg at man heller Ăžnsker seg en levende objektgraf đ€·
Men det er sÄ praktisk Ä kunne gjÞre HTTP-kall fra DetailsCard!
(đą)
SĂ„ lenge det er uttrykt som data, er jeg med âșïž
At UI-et vĂ„rt uttrykkes med data er en av tingene jeg liker godt med kodebasen vĂ„r. At HTTP-trafikk kun initieres fra to steder (les og skriv) pĂ„ klienten er en annen đ»
gir ro i sjela âșïž
ja, det er fint at man uttrykker dette i page-lifecycle metoder. men jo mer jeg tenker pÄ at ui'et er rene data, sÄ kan det ogsÄ behandles som domenelogikk som uttrykker effekter som mÄ utfÞres. Imperativt skall / funksjonell kjerne, hvor kjernen er ui'et. Det vil medfÞre mindre grad av mapping (ingen prep) og potensielt et mer konsist og kompakt kodetre, hvor aliaser representerer rent gui, mens resten er funksjoner som deklarerer ui + effekter.
Yes, det er mer eller mindre nĂžyaktig det vi har bygget đ
@christian767 har ikke du skrevet om "hva er domenesprÄket til UI-et" eller noe sÄnt fÞr? Jeg tittet over pÄ Parenteser, men fant den ikke, sÄ kanskje den ligger hos Kodemaker?
Kodemaker, ja
Jeg fant den! https://www.kodemaker.no/blogg/2023-01-domenemodell-frontend/
@gar da du sa "sÄ kan det ogsÄ behandles som domenelogikk som uttrykker effekter som mÄ utfÞres", fikk du meg til Ä tenke pÄ denne.
God morgen!
Morn!
Morn!