Fork me on GitHub
#clojure-norway
<
2023-06-27
>
cjohansen06:06:24

Buenos dias!

slipset07:06:50

Duverden! er du i utlandet?

augustl07:06:24

god morgen!

cjohansen07:06:01

@slipset nei, her går det stadig vekk i hjemmekontor 😄

leifericf07:06:04

Mornings!

leifericf12:06:21

Dagens underholdning. Konverter koden din til gammalnorsk med ChatGPT! Fra:

(defn find-in-file [file-path pattern]
  (->> file-path
       (file/read-all-lines)
       (map-indexed #(when (str/includes? %2 pattern)
                       {:directory (str (file/parent file-path))
                        :filename (file/file-name file-path)
                        :pattern pattern
                        :line (inc %1)
                        :column (inc (.indexOf %2 pattern))}))
       (filter identity)))
Til:
(ndef finna-i-skjal [skjal-vegur forsendi]
      (->> skjal-vegur
           (skjal/lesa-øll-linur)
           (map-indexed #(when (str/inneholdur? %2 forsendi)
                           {:skrá (str (skjal/foreldur skjal-vegur))
                            :skránavn (skjal/skránavn skjal-vegur)
                            :forsendi forsendi
                            :linja (inc %1)
                            :stolpi (inc (.finna-stadur %2 forsendi))}))
           (skilja-víðari sannføring)))

😄 2
magnars12:06:45

ndef 😍 😄

magnars12:06:06

ChatGPT hjelper meg også med norrøn for tiden, til adventur.

👀 2
🎲 2
teodorlu12:06:16

Mulig å få en sniktitt?

magnars12:06:38

Det blir en slags miks av norsk og norrøn for å gjøre det passe lesbart. > ... men nei, ek minnest inga nafn.

👍 4
teodorlu12:06:17

Sant, 100 % norrønt ville jeg slitt med å lese!

teodorlu12:06:45

(måtte ta meg selv kraftig sammen og ikke skrive "sneak peek" over)

restenb12:06:59

nå lurer jeg på hva map-indexedblir på gammelnorsk

😂 4
leifericf12:06:19

Jeg tvang ChatGPT til å fullføre og fikk "með-tal-löngu-index"

restenb12:06:58

gammelnorsk har 15 ord for snø, men ingen for index!

😂 2
leifericf12:06:24

Etter cirka 10 ytterligere forsøk fikk jeg: með-tal-löngu-rekki

👌 2
slipset12:06:34

kanskje på tide med gammalnorskur.cljs ?

😂 2
slipset12:06:58

Det er forøvrig en talk om noen som gjør dette på en litt mer formalisert måte.

restenb12:06:21

1. lag generisk kode->gammalnorskur tool 2. kjør på master branch 3. git push -F 4. ring NAV?

😂 2
slipset12:06:53

Litt artig forøvrig, jeg brukte det på en greie i klassen til eldste sønnen for å gå gjennom et slangespill.

slipset12:06:23

Når jeg ser på koden nå, så er alt det interessante i det spillet (som jeg klona fra et eller annet sted) implementert i utils.cljs https://github.com/slipset/snake-game/blob/master/src/snake_game/utils.cljs

👀 2
slipset12:06:09

Sånn er det litt hos Ardoq også. alle de rene pene bivirkningsfrie funksjonene som definerer mye av forretningslogikken til Ardoq ligger i alle mulige slags utils ns’er som burde hett noe på formen foo-core

leifericf12:06:17

Er dette lurt?

project/
├── src/
│   ├── functional_core/
│   │   ├── calculations.clj
│   │   └── utils.clj
│   ├── imperative_shell/
│   │   ├── side_effects.clj
│   │   └── order_processing.clj
│   └── main.clj
└── test/
    ├── functional_core/
    │   ├── calculations_test.clj
    │   └── utils_test.clj
    └── imperative_shell/
        ├── side_effects_test.clj
        └── order_processing_test.clj

slipset12:06:39

Nei 🙂

😅 2
slipset12:06:25

Da ser det ut som om prosjektet ditt handler om functional core og imperative shell. Det gjør det nok ikke.

👍 2
leifericf12:06:06

Hvordan ser selve mappe-, fil- og namespace strukturen ut på et større prosjekt som bruker FC/IS?

restenb12:06:53

mange flere mapper, 75% av mappene har utils.clj ?

2
slipset12:06:54

Vet ikke. Hos oss er toppnivået api service persistence utils pluss litt mer, noe jeg ikke ville gjort om igjen hvis jeg hadde startet på nytt.

👍 2
leifericf12:06:07

@U07FCNURX Får vi lov til å se mappestrukturen til Adventur Delux (eller en mock av den) hvis vi spør pent? ☺️

magnars13:06:16

Adventur har content som tilgjengeliggjør innholdet i spillet, brukes av engine som er ren business-logikk for selve spillmotoren, så ligger multiplayer utenpå, som kjenner til andre spillere, rangeringslister, hedersbevis, tips og slikt. Utenpå der ligger web som vet om ruter og connections og http-statuskoder og sånt.

💡 2
magnars13:06:56

Så http-requests kommer inn til web, som kaller på multiplayer, som kaller på engine, som kaller på content - avhengigheten går strictly i den retningen.

👍 2
magnars13:06:11

I hver av disse mappene ligger det stort sett filer løst etter features.

magnars13:06:48

et utdrag fra engine her:

💡 2
magnars13:06:24

her vil web og multiplayer være i det imperative skallet, mens engine og content er den funksjonelle kjernen.

💡 2
magnars13:06:46

engine implementerer all logikken i spillet - i så stor grad at jeg hadde en Emacs-klient som gikk rett mot engine, og dermed ikke trengte bry seg om multiplayer-features.

leifericf14:06:22

Smart! Det er ingenting i selve mappestrukturen, filnavnene eller namespaces som gjør det eksplisitt at systemet er bygget på FC/IS? Annet enn å se på selve koden selvsagt. Fra C# er jeg vandt til å se f.eks. "MVC," "BlahModel," "BlehController," "BlarghView" i mappenavn, filnavn, klassenavn, etc. Men slike "arkitektoniske indikatorer" ser jeg ikke i Clojure-land.

cjohansen14:06:11

Nei, det tjener liksom ingen nytte

cjohansen14:06:40

Du kan jo kalle en fil functional core og så fylle den med MVC shit. Proof is in the pudding 😊

👍 2
cjohansen14:06:10

Kode bør i hovedsak organiseres etter domenet

👍 2
leifericf14:06:42

Disse konseptuelle, arkitektoniske og design-relaterte aspektene er kanskje det som er vanskeligst å tilegne seg når en har mental baggasje fra andre språk. Kanskje fordi disse tingene må utledes fra måten koden er organisert på i større grad i Clojure enn i C# (for eksempel) hvor koden i større grad blir "påtvunget" en viss eksplisitt struktur av rammeverk som .NET.

cjohansen16:06:15

Ja, og det er nok mer variasjon mellom kodebasene også, når man i mindre grad støtter seg på rammeverk

👍 2
cjohansen16:06:00

Jeg tenker at en ting som functional core, imperative shell hører mer hjemme i noe dokumentasjon, feks en ADR (https://adr.github.io/) enn i et filnavn

👀 2
leifericf07:06:58

Kult, jeg har ikke sett ADR før.

slipset08:06:25

ADR’r er den eneste typen dokumentasjon jeg liker, fordi den er aldri feil og blir aldri utdatert.

👍 2
cjohansen08:06:41

Ja, det er fine greier

cjohansen08:06:02

Og formen fanger opp motivasjonen, som nesten alltid ellers mangler

cjohansen08:06:31

Jeg er også glad i en utfyllende og fin README, men det er klart - de blir fort utdatert om de er for utfyllende

👍 2