This page is not created by, affiliated with, or supported by Slack Technologies, Inc.
2019-07-29
Channels
- # aleph (3)
- # announcements (16)
- # beginners (85)
- # calva (2)
- # cider (13)
- # clj-kondo (84)
- # cljdoc (3)
- # clojure (109)
- # clojure-belgium (1)
- # clojure-china (39)
- # clojure-europe (4)
- # clojure-france (1)
- # clojure-italy (70)
- # clojure-nl (8)
- # clojure-spec (8)
- # clojure-uk (53)
- # clojuredesign-podcast (14)
- # clojurescript (43)
- # cursive (25)
- # data-science (1)
- # datomic (4)
- # emacs (10)
- # figwheel (4)
- # garden (4)
- # graphql (5)
- # jackdaw (10)
- # jobs (5)
- # jobs-discuss (5)
- # lambdaisland (2)
- # leiningen (3)
- # luminus (7)
- # off-topic (32)
- # pathom (11)
- # pedestal (2)
- # planck (15)
- # re-frame (12)
- # reagent (4)
- # remote-jobs (2)
- # shadow-cljs (51)
- # sql (29)
- # tools-deps (47)
Namaste
vero… che fa bene al lavoro, meno alla vacanza. Per entrare in acqua da queste parti c’e’ una finestra di 2 settimane in cui non ti congeli completamente.
@justalanm tu fai anche python code giusto?
e uno dei problemi che ho in questo momento in un codebase python, la gente mette oggetti dappertutto, quando uno in python puo usare dizionari
@darioszr se vuoi puoi fare il male assoluto con questo https://github.com/cnuernber/libpython-clj 😁
Puoi letteralmente "spaccare" sia classi che oggetti (che in realtà sotto sotto sono dizionari) e ti ritrovi con delle mappe Clojure. Ad ogni modo non si può fare molto se non un po' di evangelizzazione, traduci parte della codebase e poi mostra quanto è più semplice ed intuitiva in quel modo. Piccolo problema, i dizionari Python sono mutable e non ci sono tutte le facilities che ci sono in Clojure per gestirli, io di solito mi faccio una serie di generatori specifici per simulare alcuni di questi, ma in quel caso addio semplicità e chiarezza per i non adepti 😅
In realtà, se non ricordo male anche le NamedTuple sono immutabili
Certo. Ho visto un talk qualche settimana fa, "Solving Problems the Clojure Way" (https://www.youtube.com/watch?v=vK1DazRK_a0) i cui esempi erano in Javascript
non dico che uno possa raggiungere il livello di clojure, ma sicuramente puo aiutare e rendere le cose semplici. Dipende per me dal livello tecnico della gente
purtroppo anche la FP e soggetto a critiche e luoghi comuni che e veramente difficile
smentire alle volte. soprattuto se uno fa un PR del genere in un python codebase, dove la gente pensa che non e pythonic/javascriptonic/whatevertonic/gin-tonic
I decoratori sono considerati pythonic, ma spesso mi è capitato di dover spiegare a cosa servano e perché un wrapper è utile in quella situazione
E' solo zucchero, un po' come le threading macro ->
in Clojure, e piuttosto che ritrovarsi a scrivere ed estendere 8 classi per fare la stessa cosa, meglio il decoratore 😄
nel senso x me , se devi estendere 8 classi mi sa che hai un problema, poi anche filosoficamente non capisco
cosa vuol dire estendere una cosa con un decorator? xke uno non fa un altra funzione allora?
la stessa cosa, per i list-comprehension in python, mi sono chiesto xke gli hanno inventati , se esiste map/filter/reduce
reduce non esiste nelle librerie core (a Guido non è mai andato giù), le list comprehension ci sono anche in Clojure (for [a b] a)
e i 'wrapper' (leggi high order functions) li usiamo estensivamente in Clojure, i decoratori sono solo zucchero per evitare di scrivere myfunc = wrapper(wrapped)
. Ad ogni modo Python è quello che è, ovvero un linguaggio di scripting e al massimo di prototyping
a parte quello, quando introduco una map e ho chiesto anche ad un mio amico, la gente vuole list_comprhension in python 😁
ma bom, a parte i trolls, quello che mi preoccupa molto in python e parlo da dev che fa codice su linux in legacy code
quindi se lancio la mia app, la devo mantenere magari per 10 anni, non solo io ma chi verra dopo anche
quello che mi preoccupa in python e la totale assenza di riguardi dell'ecosystems. pip, virtualenv
etc, sono gioccattolini e python2 python3 in produzione, e forse il dramma piu grande del IT
non sai quante cose ho visto in giro per risolvere sistemi che usano python2 e poi hai codice in python3
x me, uno dei motivi x cui amo clojure e la sua community xke non sono dei kiddy o accademics che vivono nella loro ricerca
il problema del'ecosystems e differenti piattaforme/etc , longterm support e preso molto seriamente x me in clojure. (
oggi parlavo con un pythonic guy di questo, e mi ha detto che non parlavo di programmazione. x me 60% dei bugs che abbiamo sono dovuti al ecosystem oggi giorno e saranno ancora piu importanti in futuro
(ecosystem come jvm, pkg manager, sono cose molto importanti, che x me uno se ne rende conto se fa codice in prod e deve mantenere cose)
se fai lavoro in universita o magari in aziende piccole poco eterogenee, ma su linux e python potrei scrivere una favola horror
x una tool di ricerca una codice 100 line per una poc va bene python anche se sinceramente io non lo userei lo stesso. Se facessi ricerca userei forse haskell
o forse racketlisp (https://racket-lang.org/)
in clojure, se dovessi proporre una nuova app per un sistema non mi farei troppi problem sul punto di vista del ecosystem
Lavoro sulle performance. Idee? Senza passare al lato oscuro se possibile.
(defn powerset [coll]
(let [bits (Math/pow 2 (count coll))]
(for [i (range bits)]
(for [j (range i)
:while (< j cnt)
:when (bit-test i j)]
(nth coll j)))))
(powerset [1 2 3])
;; (() (1) (2) (1 2) (3) (1 3) (2 3) (1 2 3))