Fork me on GitHub
#clojure-norway
<
2024-01-27
>
augustl08:01:27

god morgen 👋

teodorlu12:01:20

Jeg har en kodesnutt som forkorter lange filnavn som "8VtNax5CtquBqm7vme3npabBNUCbaUdqypaDRY7FHcgyoZDmQySxJoWAGQpJLmEEhk7AXdqxoNkwXXVt896v1MRxNA.png" til kortere versjoner som "8VtNa[...]RxNA.png" for visning. Jeg legger kode for funksjoner og urls i tråd. Jeg synes koden ble litt krøkkete. Ville du endret på short-filename-str eller (clerk/table ,,,)?

teodorlu12:01:11

(def urls 
  (list 
   {:url "",
    :filename
    "8VtNax5CtquBqm7vme3npabBNUCbaUdqypaDRY7FHcgyoZDmQySxJoWAGQpJLmEEhk7AXdqxoNkwXXVt896v1MRxNA.png"}
   {:url "",
    :filename
    "8VtTivwwuY9r7NV4YJ3rRaC1sybkfXLgs2amzQJq5BHvFGciriUvsmkPnk3vwNEVDekrZ3ZLJdcCajzR65sfzv829h.png"}
   {:url "",
    :filename
    "8VuaUe1r8DQCnEGipsNYxLRs6pQkHWcoXGr3VJVimdAfM8gD789V3Y9RpYtU1tCWs2gncQB3FEKnVXmP8kt7XLUpT6.png"}
   {:url "",
    :filename
    "8VwCexF7bUGGQePXB4PfhUQAweLWDMLk9WgQxJcHsZrFqFGDrHxFyziRNHRevVRWasJ1rS7jeXVEyDmuLeVeXNMF9Y.png"}))

(defn short-filename-str [s]
  (let [l (.length s)]
    (str
     (subs s 0 5)
     "[...]"
     (subs s (- l 8) l))))

(clerk/table (->> urls
                  (map #(update % :filename short-filename-str))))

teodorlu13:01:26

Alternativ tabellgenerering, som også gjør URL-er klikkbare:

(let [urls-pretty
      (->> urls
           (map (fn [m]
                  (-> m
                      (update :filename short-filename-str)
                      (update :url #(clerk/html [:a {:href %} %]))))))]
  (clerk/caption "we hash the urls to get valid file names"
                 (clerk/table urls-pretty)))

cjohansen15:01:31

Ser ikke så veldig mange måter å gjøre dette bedre på

👍 1
cjohansen15:01:46

Du kan slippe den siste let-en med litt mer threading:

(->> urls
     (map (fn [m]
            (-> m
                (update :filename short-filename-str)
                (update :url #(clerk/html [:a {:href %} %])))))
     clerk/table
     (clerk/caption "we hash the urls to get valid file names"))

👍 1
cjohansen15:01:55

Evt:

(->> (for [m urls]
       (-> m
           (update :filename short-filename-str)
           (update :url #(clerk/html [:a {:href %} %]))))
     clerk/table
     (clerk/caption "we hash the urls to get valid file names"))

👍 1
cjohansen15:01:40

Av og blir for litt finere enn map men her er det litt hipp som happ syns jeg

👍 1
teodorlu15:01:16

Jeg har vært litt forsiktig med å bruke clerk/html , clerk/caption og liknende sammen med threading fordi jeg ikke har sett noe mønster i argumentrekkefølgen de tar. Ofte er første objekt “tingen” og andre objekt “options”. Med clerk/caption er det motsatt. @U5H74UNSF har sagt at det er for å få beskrivelsen over objektet når man koder det opp. Samtidig liker jeg at du får “flatet ut” dataflyten i dine to løsninger, det blir veldig tydelig at vi bruker urls én gang.

teodorlu15:01:20

Takk for feedback! 🙏

slipset07:01:25

Du kunne vel kanskje skip’et hele streng-forkortelsesgreia med litt css?

slipset07:01:14

text-overflow: ellipsis;

1
👍 1
slipset07:01:16

Pluss noe mer rusk. Ikke snakk til meg om CSS så tidlig på morgenen.

😅 1
cjohansen07:01:58

Tror ikke du får den til å gjøre akkurat det som ble gjort her (du får prikkene bakerst)

slipset07:01:41

Det er jeg nesten klar over, men jeg antok at det kanskje ikke var et krav fra @U3X7174KS sin side, mer kanskje det første han tenkte på 🙂

slipset07:01:27

Som utvikler mener jeg det er viktig og riktig å foreslå alternative løsninger som kanskje ikke følger spec’en, dersom de løsningene er vesentlig billigere.

👍 2
2
teodorlu12:01:15

i dette tilfellet ville ikke text-overflow: ellipsis; fungert. Koden kjører med Clerk, og Clerk har allerede en object-browser med https://book.clerk.vision/#elisions. Hadde dette vært produksjon av rå HTML/CSS, ville jeg nok gått for det!

teodorlu13:01:57

> Det er jeg nesten klar over, men jeg antok at det kanskje ikke var et krav fra @U3X7174KS sin side, mer kanskje det første han tenkte på 🙂 intensjonen var å få med filutvidelsen, så det står png i tabellen. Men som du er inne på, kravspek kan utfordres!