This page is not created by, affiliated with, or supported by Slack Technologies, Inc.
2023-06-27
Channels
- # announcements (10)
- # aws (5)
- # babashka (91)
- # beginners (15)
- # biff (3)
- # calva (5)
- # clerk (24)
- # cljdoc (63)
- # clojure (69)
- # clojure-denver (1)
- # clojure-europe (13)
- # clojure-nl (1)
- # clojure-norway (50)
- # clojure-uk (2)
- # clojurescript (2)
- # community-development (6)
- # cursive (3)
- # datomic (4)
- # events (2)
- # fulcro (8)
- # gratitude (1)
- # hyperfiddle (19)
- # jobs-discuss (36)
- # nbb (21)
- # pathom (16)
- # portal (6)
- # re-frame (14)
- # reagent (1)
- # reitit (1)
- # releases (3)
- # remote-jobs (2)
- # shadow-cljs (56)
- # sql (15)
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)))
Det blir en slags miks av norsk og norrøn for å gjøre det passe lesbart. > ... men nei, ek minnest inga nafn.
Jeg lagde https://github.com/slipset/snake-game/blob/master/src/snake_game/norwegian.cljs på et tidspunkt
1. lag generisk kode->gammalnorskur tool 2. kjør på master branch 3. git push -F 4. ring NAV?
Litt artig forøvrig, jeg brukte det på en greie i klassen til eldste sønnen for å gå gjennom et slangespill.
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
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
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
Da ser det ut som om prosjektet ditt handler om functional core og imperative shell. Det gjør det nok ikke.
Hvordan ser selve mappe-, fil- og namespace strukturen ut på et større prosjekt som bruker FC/IS?
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.
@U07FCNURX Får vi lov til å se mappestrukturen til Adventur Delux (eller en mock av den) hvis vi spør pent? ☺️
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.
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.
her vil web
og multiplayer
være i det imperative skallet, mens engine
og content
er den funksjonelle kjernen.
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.
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.
Du kan jo kalle en fil functional core og så fylle den med MVC shit. Proof is in the pudding 😊
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.
Ja, og det er nok mer variasjon mellom kodebasene også, når man i mindre grad støtter seg på rammeverk
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