Fork me on GitHub
#clojure-italy
<
2017-06-06
>
reborg08:06:55

Domanda del mattino: ma il Java jdk, runtime e hotspot, utilizzano multiple cores per internal tasks quali, compilazione, class loading and verification etc etc?

bronsa16:06:08

reborg: il JIT della JVM gira su un thread separato

reborg08:06:32

so che accade per GC sicuramente

mbarbieri08:06:24

Che sappia io no, per compilare non usa tutti i core

mbarbieri08:06:12

i vari build tool ovviano a questo compilando parti diverse in parallelo, ma javac non lo fa

manuel09:06:40

buondì a tutti. Domanda per @nilrecurring Ho visto che hai implementato un file upload con re-frame. (cercando "re-frame file upload" escono log di Slack in cui compaiono risposte tue 🙂 ) Banalmente: qualche suggerimento?

nilrecurring09:06:20

Suggerimento riguardo qualcosa di preciso? Se cerchi un working example ho del codice da qualche parte con cljs-ajax, e giusto ieri dato una mano per un’implementazione con Reagent e cljs-http, la trovi qui: https://github.com/edne/airhead-frontend/blob/master/src/airhead_frontend/components.cljs

reborg09:06:57

parlando di re-frame... sto per partire con un nuovo progettino yummy yummy

nilrecurring09:06:17

Penso che con cljs-http venga più pulito

nilrecurring09:06:27

Tra l’altro dovremmo avere @edne online se hai domande su quella codebase

reborg09:06:54

consigli ben accetti, soprattutto se ci sono dei pitfalls ben fondati da evitare

nilrecurring09:06:33

@reborg raccomandazione: usa namespaced keywords nel database e negli handler, una volta che l’applicazione diventa grossa avere il contesto dei namespace aiuta a leggere meglio

nilrecurring09:06:37

E intendo in questo formato: :user/password. Molti usano nested maps, ma se la struttura dati diventa troppo nested poi è fastidioso tirare fuori i dati, quindi preferisco questo approccio ultimamente

nilrecurring09:06:03

raccomandazione 2 (disclaimer: sentirai il bisogno di questa solo dopo aver usato reframe per un po’, quindi ho omesso molto contesto): subscription che derivano da altre subscription non sono mai abbastanza, e aiutano tanto a tenere la parte della view semplice. Ma se hai bisogno degli stessi dati anche negli handler, allora conviene separare la funzione che ricava i dati dall’effettiva subscription, altrimenti ti ritrovi a fare cose tipo (let [roba @(subscribe [:feed-di-roba])]) dentro gli handler, che non è molto carino. See https://github.com/Day8/re-frame/issues/255

manuel09:06:07

@nilrecurring grazie, sì, un working example va benissimo. Poi se hai best practices dettate dalla tua esperienza, dì pure.

nilrecurring09:06:19

Se devi caricare solo un file quello che ho linkato va benone, se ne devi caricare molti nello stesso form è più complesso

edne09:06:21

Hi! prima di tutto mi scuso per la codebase un po' sporca, devo ancora fare quache giro di refactoring...

edne09:06:29

Da quel poco che ho visto cljs-http permette di monitorare lo stato dell'upload tramite un "canale" async, mentre cljs-ajax semplicemente chiama una callback quando finisce

edne09:06:37

mentre per gli upload multipli, se @nilrecurring hai in giro qualche link, sono interessato anch'io, visto che sarebbe una delle prossime cose che mi piacerebbe implementare...

nilrecurring09:06:02

Per gli upload multipli dovrebbe bastare che tieni il FormData da qualche parte, e.g. un r/atom

nilrecurring09:06:16

E poi appendi, tipo così:

(let [form-data (doto
                  (js/FormData.)
                  (.append "filename1" file1)
                  (.append "filename2" file2))])

edne10:06:04

Thanks! rifattorizzo un poco le view poi provo...

manuel10:06:54

grazie ragazzi. A me basta un file singolo per ora, vediamo cosa tiro fuori.

reborg11:06:51

Il readme di re-frame e' un capolavoro

manuel11:06:14

sì verissimo

nilrecurring11:06:06

Tutte le loro doc sono fantastiche

mdallastella16:06:33

Domanda scema: il paradigma "reactive" proposto da re-frame avrebbe senso anche lato backend?

mdallastella16:06:51

Ragionandoci basterebbe un db a cui puoi fare dei subscribe

mdallastella16:06:24

Però fatico ad immaginare in quale scenario/architettura potrebbe essere utile al di fuori delle interfacce...

mbarbieri16:06:24

@mdallastella intendi qualcosa tipo event sourcing?

mdallastella16:06:55

@mbarbieri non sono molto ferrato sul tema, sono un po' palladiano sulle architetture backend 😅

mdallastella16:06:20

Parli di Domain Driven Design?

mdallastella16:06:14

Quindi sì, event sourcing

mbarbieri16:06:15

Non solo. Nel senso di avere uno Stream di eventi da ascoltare e agire di conseguenza.

mdallastella16:06:59

Non ho mai capito se è Fowler ad essere avanti o se è l'adozione di certe idee ad essere lenta... :thinking_face:

mbarbieri16:06:16

È venuto in ufficio da noi l'anno scorso (siamo clienti ThoughtWorks). La sua intelligenza è inversamente proporzionale al gusto nel vestirsi 😄

mbarbieri16:06:45

Comunque si fanno queste cose nel backend. Non molto spesso ma si fanno

nilrecurring17:06:09

@mdallastella entrambe! Fowler è avanti, e l'adozione delle idee è lenta 😅