Clojurians
#clojure-italy
<
2018-12-19
>

This page is not created by, affiliated with, or supported by Slack Technologies, Inc.

reborg10:12:47

tornando al discorso uptime, ho alcuni REPL aperti da mesi… ci vorrebbe clojure.repl/uptime :slightly_smiling_face:

reborg10:12:00

pero’ tmux crasha purtroppo, quindi la cosa non e’ cosi’ affidabile come l’OS…

andrea.crotti10:12:42

purtroppo mi tocca di usare un mac per lavoro

andrea.crotti10:12:49

che questa settimana e' crashato tre volte

andrea.crotti10:12:03

tutto il sistema non tmux o altro :cry:

andrea.crotti10:12:11

quindi niente record qui

reborg10:12:43

ah, non ho quel problema per fortuna

reborg10:12:25

ce l’avevo prima quando, per varie ragioni, mi attaccavo/staccavo da display esterni di frequente.

reborg10:12:55

cambiando totalmente discorso… 2019 e’ l’anno in cui sottomettero’ un paper per l’italian agile day

reborg10:12:25

e’ da un bel po’ che non vengo giu’ per una conf

reborg10:12:54

(se mi pijano)

mdallastella10:12:26

tmux che crasha mi è nuova...

reborg10:12:01

tmux sul mac forse non e’ la stessa cosa

andrea.crotti11:12:57

user> (keys (array-map :id 1 :b 2))
(:b :id)
user> (keys (array-map :id 1 :b 2))
(:id :b)

andrea.crotti11:12:24

la prima volta ha sputato (:b :id) tutte le successive (:id :b)

andrea.crotti11:12:50

abbiamo solo due test rotti cambiando a clojure 1.10 e sono relativi a quello

andrea.crotti11:12:33

ma non sono sicuro se sia un bug o qualcosa su cui non si poteva fare affidamento in generale

reborg11:12:06

λ: clj -A1.9
Clojure 1.9.0
user=> (keys (array-map :id 1 :b 2))
(:id :b)
λ: clj
Clojure 1.10.0
user=> (keys (array-map :id 1 :b 2))
(:id :b)

andrea.crotti11:12:41

eh ma non e' deterministico almeno su 1.10

reborg11:12:28

Puoi postare esempio minimale che dimostra il problema? Dubito che 1.10 vs 1.9 sia causa diretta

bronsa11:12:30

array-map cosi` non dovrebbe mai cambiare l'ordine di insertion

andrea.crotti11:12:49

quei due test non erano mai falliti prima e in questo branch ho cambiato solo quello

bronsa11:12:49

quello che puo` succedere e` che l'ordine delle chiavi venga cambiato se quell'array-map diventa un hash-map

andrea.crotti11:12:59

ci sono parecchi references a array-map nel changelog

andrea.crotti11:12:04

quindi sicuro hanno cambiato qualcosa

andrea.crotti11:12:30

e provo a fare un esempio minimale adesso

bronsa11:12:36

sospetto fortemente che il bug fosse nei tuoi test piuttosto che una regressione

bronsa11:12:02

bug nei test i.e. assumere un'ordinamento di chiavi in una mappa generica

andrea.crotti11:12:17

no sono tutte array-map

andrea.crotti11:12:25

ma vabbeh ci do' un altra occhiata

bronsa11:12:30

ci dissoci/associ mai?

reborg11:12:32

vedrai che se provi a produrre un esempio minimale scopri che succede

bronsa11:12:42

beh, ottenere un ordine diverso usando solamente (array-map ..) e` impossibile per costruzione

bronsa11:12:50

quindi deve star succedendo qualcos'altro

bronsa11:12:28

array-map e` decisamente deterministico :)

andrea.crotti11:12:52

questo l'ho visto non l'ho sognato :smile:

andrea.crotti11:12:00

ma e' successo una volta sola

andrea.crotti11:12:16

e ancora non riesco a riprodurlo

reborg11:12:21

cioe’ quel snippet sopra viene da un copy paste da terminal?

bronsa11:12:51

sicuro di non star usando qualcosa diverso da clojure.core/array-map?

manuel11:12:06

misteriosissimo

mdallastella11:12:21

Una sorta di heisenbug

bronsa11:12:02

@andrea.crotti il motivo per cui ti dico che e` impossibile che tu stia vedendo quel che pensi, e` che l'implementazione di array-map funziona cosi`: - gli argomenti sono salvati in una vararg seq, che e` ordinata - viene estratto l'internal array di questa seq, che rimane ordinato - viene invocato clojure.lang.PAM/createAsIfByAssoc sull'array, che semplicemente traversa l'array linearmente per eliminare duplicati - l'array senza duplicati viene passato al costruttore di clojure.lang.PAM che lo salva as-is, quindi rimane ordinato Quando invochi keys, l'array-map viene seqato , e l'implementazione di seq di PAM semplicemente riusa lo stesso array, che rimane ancora ordinato, e wrappa la Seq in una KeySeq che traversa linearmente questa seq estraendo le chiavi, che rimangono ordinate

bronsa11:12:04

niente di tutto questo e` stato cambiato in 1.10, gli unici cambiamenti hanno a che fare con : - la quantita` di elementi necessary perche` il reader passi da PAM a PHM quando legge un literal (quindi non ti tocca in questo caso) - performance di dissoc, che non ti tocca

andrea.crotti11:12:14

ti credo @bronsa ma credo anche ai miei occhi, due volte ho visto keys (nel repl) tornare un ordine diverso adesso

andrea.crotti11:12:46

e i test falliscono sempre, ora sto cercando di vedere se ci sono altre operazioni fatte su quell hash map e per ora non sembra

andrea.crotti11:12:27

in piu' il fatto che questi test sono passati per mesi e ora falliscono sempre mi fanno pensare che qualcosa e' cambiato, anche se magari non e' un bug ma semplicemente un assunzione sbagliata

bronsa11:12:16

giusto per capire, stai vedendo letteralmente un' array-map con solo :id e :b cambiare ordinamento?

andrea.crotti11:12:31

si una volta sola e' succseso pero

andrea.crotti11:12:55

e un altra volta con un array-map piu' grosso (quello dal codice di prod)

andrea.crotti11:12:20

con cider ho fatto direttamente (keys grosso-array-map) ed ha tornato un ordine diverso

andrea.crotti11:12:30

anche quello una volta e basta sono riuscito a riprodurlo

bronsa11:12:46

e entrambe queste sono costruite letteralmente con (array-map el1 el2 ..), non con (apply array-map ..) o literal vari?

andrea.crotti11:12:05

si solo array-map

bronsa11:12:41

interessante

bronsa11:12:57

anche rileggendo l'implementazione non vedo come sia possibile, curioso di vedere un repro :)

andrea.crotti11:12:06

boh vabbeh appena riesco a riprodurlo faccio un fischio

bronsa11:12:25

assicurati di star usando clojure.core/array-map e non robe strane (tipo instrumented array-map)

bronsa11:12:55

e` possibile che se stai usando qualche libreria con specs per clojure.core, ti stia conform/`unconform` ando gli argomenti usando un'hash-map intermedia, che ti potrebbe star shufflando gli argomenti

andrea.crotti11:12:50

non sembrerebbe

andrea.crotti13:12:47

ho trovato poi il problema con il test, usava una hashmap a un certo punto quindi ok

andrea.crotti13:12:04

ancora non mi spiego quello che ho visto ma vabbeh se riesco a riprodurlo in qualche modo lo posto

andrea.crotti13:12:14

adesso abbiamo qualche altro errore tipo

(:import
    [org.flywaydb.core Flyway]
    [ MigrationInfoDumper]
    [java.sql.SQLException])
    ^^^^^^^^^^^^^^^^^^^^^^^
   (:gen-class))

should satisfy

  simple-symbol?

andrea.crotti13:12:28

ma da lein cloverage non e non da lein test

bronsa13:12:13

(:import [foo.bar]) non ha mai fatto niente

bronsa13:12:21

dovrebbe essere (:import [foo bar])

bronsa13:12:25

o (:import foo.bar)

andrea.crotti13:12:49

si ho visto che e' semplicemente sbagliato

andrea.crotti13:12:40

non ho ben capito cosa lo fa fallire, forse semplicemente perche' cloverage instrumenta tutto mentre lein test no

nilrecurring14:12:27

Si, cloverage aggiunge parecchia magia. Ho avuto anche io dei problemi con il fatto che l’instrumentation faceva cose buffe, ma non ricordo come ho risolto

andrea.crotti14:12:07

avevamo delle librerie in :provided che non dovrebbero essere la', strano che pero' funzionava con clojure 1.9 e scoppia con 1.10

andrea.crotti14:12:33

in fase di strumentazione cloverage non lo digerisce piu' con l.1.10

andrea.crotti21:12:33

il mio buon portatile linux invece va che e' un piacere 21:55:10 up 82 days, 1:25, 1 user, load average: 0.31, 0.42, 0.62

reborg21:12:33

Si va per i 100: 21:55 up 97 days

andrea.crotti21:12:14

se puoi usare linux al lavoro @reborg magari ci faccio un pensierino (se assumete of course) :smile:?

reborg22:12:31

Oh si, qui c’e’ gente che non ne vuol sapere del mac.

reborg22:12:14

Ho un collega che ha un vecchio thinkpad con sopra openBSD con solo un tiling window manager

andrea.crotti22:12:50

anche io solo i3, pero' linux arch ha supporto per tutto

andrea.crotti22:12:56

openBSD un po' te la cerchi

reborg22:12:43

si e’ una cosa un po’ fuori dagli schemi… e’ che lavora sul kernel “a cuore aperto” (per passione sua)

andrea.imparato22:12:46

@reborg nella mia università c’era un kernel dev di openbsd! non è che magari è la stessa persona? :smile:

reborg23:12:08

Mah, non penso, ma chilosa’… :slightly_smiling_face: