Fork me on GitHub
#clojure-norway
<
2023-06-07
>
augustl08:06:43

güten mörgen

cjohansen08:06:42

gluten morgen!

magnars08:06:17

Her er Dall-E sitt forsøk på å lage en svartmetall-logo som sier "God morgen"

😂 12
augustl08:06:48

🔥🔥 GTR 🔥🔥

slipset08:06:06

:airplane_departure: :wind_blowing_face: :man-surfing: 🇪🇸

🧩 2
augustl10:06:11

TIL: complement, tar en funksjon og returnerer en ny funksjon som gir motsatt truth-value. Muligens litt dårlig måte å løse dette på, men har to menyer og vil skjule den ene hvis jeg viser den andre.

(reg-event-fx
  ::toggle-brukerprofil-popup-menu
  trim-v
  (fn [{db :db}]
    (update db
            :show-brukerprofil-popup-menu not
            :show-medlem-popup-menu (complement not))))

(reg-event-fx
  ::toggle-medlem-popup-menu
  trim-v
  (fn [{db :db}]
    {:db (update db
                 :show-medlem-popup-menu not
                 :show-brukerprofil-popup-menu (complement not))}))

augustl10:06:38

yoda popup menu complement not

magnars10:06:18

complement av not er vel bare boolean?

mariuene10:06:28

eller identity gitt at det er boolske verdier

magnars10:06:30

eller identity hvis du ikke bryr deg om typen

mariuene10:06:28

ble litt interresert i hvordan vi bruker complement i kodebasen vår, og jeg tror den blir mest brukt i instanser hvor man ikke husker motsatte funksjonen feks. (complement nil?) => some? (complement empty?) => seq

oddsor10:06:20

not-empty fins også og er flotters om man bryr seg om listetypen

augustl10:06:29

hmm sant, denne koden var passe idiotisk på mange akser i grunn

augustl10:06:45

tanken i hodet mitt var at den skal bli det omvendte av den andre. Men det blir den jo ikke

teodorlu10:06:07

Tror det er mulig å fange (complement not) i lint med Kibit. Hvis man vil ha enda et verktøy! Har ikke prøvd det selv, det dukket opp i #CPABC1H61. Da skriver du "regler" som pattern-matcher på kode. https://github.com/clj-commons/kibit

cjohansen21:06:21

Dere som bruker postgres og andre SQL-databaser, bruker dere HugSQL, HoneySQL eller andre verktøyer i samme kategori? Hvorfor/hvorfor ikke? 🙂

isak21:06:58

Nei, fordi de løser ikke et stort nok problem. Det er veldig lett å lage en query builder hvis man vet the basics av SQL escaping. En annen ting er at vi har begynt å bruke mye JSON querier, og slike verktøy har ofte veldig lite støtte for det. En annen grunn er at de ofte gjør en dårlig jobb med å skille query parametere fra query text, og gjør det lett å gjøre det som er feil: å variere query text når det er unødvendig. For eksempel, bake in in-liste verdier, osv.

isak21:06:35

Men hvis jeg skulle jobbe på et lite/kortvarig prosjekt, og jeg trengte en query builder med veldig dynamisk SQL som ikke kunne vært statisk, så ville jeg sikkert brukt det.

slipset01:06:20

Bruker PG og Honey. Trokke jeg hadde vurdert en sql database hvis det ikke var for Honey. Bruker en del JSON og hadde blitt gal hvis jeg hadde måttet knote det til for hånd.

slipset01:06:35

Kult at vi er uenige!

emil0r04:06:40

Brukar ez-database som låter mig använda HoneySQL, HugSQL eller strängar

msolli05:06:45

Bruker HoneySQL med Postgres. Liker at det er Clojure-kode/EDN man skriver, ikke SQL i en streng. Paredit fungerer, f.eks. Litt som å skrive HTML med Hiccup-syntaks.

slipset06:06:35

@U08JKUHA9 honey-sql er vel en query-builder? Har du mekka din egen?

slipset06:06:27

Jeg har knota litt rundt i honey-sql koden og jeg blir fort litt lost. Men det er kanskje fordi den er superduper generell og skal funke for alt i alle databaser?

slipset06:06:51

Er veldig glad for at jeg slipper a skrive det selv, selvom

{:select :foo :from :bar :where [:= :a 2]}
i teorien er lett å transformere til
select foo from bar where a = 2

slipset06:06:27

Men plutselig, så kommer noen (jeg) og skal ta i bruk rekursive CTE’er og da er det digg at det allerede er gjort.

cjohansen07:06:28

Jeg hadde et vagt minne av å ha blitt fortalt om HugSQL, eller konseptet i den, for en tid tilbake og trodde jeg ville like det. Men da jeg fant funksjonsnavn i kommentarene på en sql-fil kjente jeg at dette nok ikke er noe for meg 😅

cjohansen07:06:01

Vi har ikke så mye SQL, og kommer langt med jdbc.next. Kan se for meg at jeg ville vurdert Honey dersom jeg skulle ha mye SQL.

slipset07:06:10

Syntes HugSQL var kult da det kom ut, men ser i ettertid at det har et relativt begrenset bruksområde, som etter mitt skjønn er hvis du har gigaschvære analytics spørringer som du ikke komponerer med noe som helst.

cjohansen07:06:46

Kanskje. Selv da er det kanskje like greit å hive spørringen i en fil og bare lage en funksjon som leser den inn?

slipset07:06:48

Det var et lite helvete å forholde seg til disse “magiske” funksjonene som dukket opp i koden.

cjohansen07:06:00

Ja, det kan jeg se for meg

msolli07:06:06

Har noe HugSQL i koden fra gammelt av. I utgangspunktet er det en vakker idé, at du bare skriver SQL i en egen fil, men det blir for mye magi, som du er inne på. Det er en makro du må kalle som leser disse .sql-filene og lager funksjoner (med navn fra kommentarene) i navnerommet den kalles i. Blir vanskelig å navigere i editoren, og i det hele tatt uoversiktlig.

slipset07:06:50

Det er litt skuffende, men sånn i ettertid så viser det seg at det enkle ofte er det aller, aller beste.

cjohansen07:06:08

Overraskende hvor ofte det er konklusjonen 😄

slipset07:06:11

Forøvrig, så tror jeg nesten at vi har bygget noe som ligner på var egen, sammensausete versjon av Korma og datomics entity api.

cjohansen07:06:25

Hva er Korma?

slipset07:06:34

Selvom jeg ser at det ikke er det vi har gjort. Det vi har endt opp med er en slags config pr entitet.

cjohansen07:06:37

Korma ser ut til å besvare spørsmålet “hva om jeg vil generere SQL med masse makroer?”

augustl09:06:05

vi bruker hugsql, helt OK, ingen store innvendinger, fint å ha SQL-en i SQL-filer, har sitt eget enkle syntaks til å ekskludere eller inkludere ting fra spørringen avhengig av parametere, osv. Og om man bruker hugsql er det jo ingenting som stopper deg fra å droppe ned til jdbc.next direkte om den ikke dekker en eller annen use case som dukker opp

augustl09:06:47

også kjekt at man kan navngi spørringene i sql-fila og annotere defaults som “her skal du bare hente ut første rad eller nil”, “her skal du hente ut en liste”, osv

augustl09:06:38

eksempel på conditionals. Litt “artig”, men i bunn og grunn er det jo bare clj i sql-fil via en kommentar. Funker helt fint til enkle ting, og som sagt er det jo bare å la være å bruke det i tilfeller hvor det blir for mye køk og det er bedre å lage sql-string fra clojure

cjohansen09:06:13

> clj i sql-fil via en kommentar 😬 😬 😬

cjohansen09:06:29

Dette er for clever for min smak

augustl09:06:31

fin tradeoff med at man får sql-kodehjelp i en .sql-fil osv egentlig, men bør bare brukes til helt helt enkle greier ja

augustl09:06:05

ellers er jo sql et språk som også har conditionals, litt avhengig av use case selvfølgelig 🙂

isak14:06:33

> honey-sql er vel en query-builder? Har du mekka din egen? @U04V5VAUN Ja. En som er kanskje ikke så langt fra Honey (bruker maps, vectors, og keywords) i et parr-hundre linjer av Clojure, og det var nok til å skrive en hel GraphQL query -> SQL translation lag. Så med query building trenger man ikke så mye Clojure kode for å løse problemet. Kunne kanksje brukt Honey for det også, men jeg er litt redd for å begynne med en library, og da finne ut senere at den ikke dekker behovet.

isak14:06:36

En annen ting - jeg synes egentlig det er feil å release en query builder hvis man ikke også releaser et SQL -> query builder syntax tool. Kanskje litt kresen 😆.