Fork me on GitHub
#clojure-italy
<
2018-09-12
>
Andrea Imparato09:09:53

non mi ricordo, c'è qualcuno qua che vive a berlino?

reborg11:09:52

Problemino del giorno. Scrivere un XSD schema to core.spec translator…

reborg11:09:03

Idea di base: parse XML, match su XSD nodes, multimethod dispatch, output specs…

nilrecurring11:09:16

Mi sembra l’approccio giusto

reborg11:09:26

sono sicuro che ci saranno problemini vari da risolvere…. 😨

nilrecurring11:09:30

Dipende da quanto è matto il tuo schema. Noi facciamo XSD -> Haskell types, e ci bastano ~100 linee di js

nilrecurring11:09:05

Nel nostro caso lo schema è semplice

reborg11:09:24

pensavo piu’ al problema generale… qualunque schema to core.spec

reborg11:09:41

ma partire col caso particolare e’ opportuno

nilrecurring11:09:15

Dipende quanto è one-off la questione, noi abbiamo bisogno di eseguire/sistemare lo script ogni 2-3 mesi, quindi ha senso farlo sul caso particolare

nilrecurring11:09:36

Se devi farlo ogni giorno su cose diverse allora generalizzare è opportuno

mpenet11:09:46

ho bisogino di qualcosa di simile

reborg11:09:15

e infatti @mpenet e’ un problema generale quello di convertire vecchi xsd->spec

mpenet11:09:41

anche l opposito, in caso mio

reborg11:09:13

ah, allora speculate e’ estensibile credo (aggiungerci spec->xsd)

mpenet11:09:20

sto pensando a fare un lib typo goog/protobuf che usa spec

mpenet11:09:24

with optimisations that stuff like nippy just doesn't/can't do (varints, key cache, etc)

reborg11:09:09

I thought protobuf was about RPC multi-language stuff, why do you need xsd there?

mpenet11:09:33

I don't, I need the opposite of what you're doing, going from spec to another format.

reborg11:09:30

alright, spec to whatever another language is using to describe their endpoints I guess?

mpenet11:09:00

but it becomes hairy fast, parsing spec forms is not always trivial

nilrecurring11:09:09

@mpenet I’m working on spec->Dhall, and Dhall is a typed language with super efficient binary encoding

nilrecurring11:09:28

Specs are “types”, so I think the problem is manageable

nilrecurring11:09:32

But we’ll see

reborg11:09:11

Also have a look at https://github.com/uswitch/speculate where the “parsing spec forms” is part of the lib

👍 4
mpenet11:09:52

oh interesting

mpenet11:09:56

I know about speculate

reborg11:09:33

it only outputs json spec and swagger currently, but it’s extensible

nilrecurring11:09:47

Oh wow this is cool

manuel11:09:35

molto interessante speculate, grazie @reborg

reborg11:09:52

:thumbsup: spero sia utile (non e’ prj mio, ma di un ex-collega)

mpenet11:09:13

spec-tools has also something similar (I think they call this a spec walker) but I am not a fan of that library

mpenet11:09:43

I ll (re)check both speculate and dhall. thanks

nilrecurring11:09:09

I’ll cut a release of dhall-clj later today, I’ll ping you then

Andrea Imparato14:09:39

domanda niubba, esiste un take-while che si "stoppa" quando la condizione è soddisfatta? thistle

mpenet14:09:00

si po fare con halt-when + transduce

Andrea Imparato14:09:27

uuuh quante funzioni che non conosco 😄

Andrea Imparato14:09:53

mmmh Unable to resolve symbol: halt-when in this context

reborg14:09:09

In che senso @andrea.imparato ?

(take-while #(< % 5) (range 10)) => (0 1 2 3 4)

Andrea Imparato14:09:10

dovrebbe essere in core no?

mpenet14:09:54

sarebe tipo take-until

Andrea Imparato14:09:24

esatto, take-while continua a "loopare" sulla lista

mpenet14:09:26

halt-when vienne con clj 1.9+

Andrea Imparato14:09:33

io voglio che si ferma

reborg14:09:08

esempio se non ti dispiace?

Andrea Imparato14:09:46

una lista infinita di caratteri e voglio fermarmi quando trovo un punto

Andrea Imparato14:09:53

(defn generate-message[]
  (take-while #(clojure.string/includes? "." %) (filter #(re-find #"^[a-zA-Z]+" %)
          (take 1000 (markov-chains.core/generate (markov-chains.core/collate data 3))))))

Andrea Imparato14:09:01

mi sto divertendo con le markov chains 🙂

reborg14:09:33

(drop-while #(not= \. %) "vabene.questa?") => (\. \q \u \e \s \t \a \?)

Andrea Imparato15:09:15

mmmh la lista è tipo ("ciao" "mi" "piace" "clojure." "Ed" "altro")

Andrea Imparato15:09:29

io voglio tornare la lista fino alla parola con il punto

Andrea Imparato15:09:41

("ciao" "mi" "piace" "clojure.")

Andrea Imparato15:09:48

e togliere tutto quello che viene dopo

alan16:09:42

@andrea.imparato un for con :while non va bene?

andrea.crotti16:09:43

il punto non dovrebbe stare insieme a nessuna parola @andrea.imparato imho

andrea.crotti16:09:29

se migliori la tokenizzazione iniziale e' poi piu' semplice fare il resto

andrea.crotti17:09:52

@nilrecurring "He really likes writing open source code, writing music, and writing pizza"

andrea.crotti17:09:00

dalla tua bio su small fp conf 😄

andrea.crotti17:09:21

o pizza e' un linguaggio di programmazione nuovo 😮?

nilrecurring17:09:49

Effettivamente sarebbe un ottimo nome! Totalmente ingooglabile 😄

nilrecurring17:09:56

> Pizza also added function pointers and algebraic types with case classes and pattern matching. Pizza è molto meglio di Java a quanto pare

reborg17:09:51

@andrea.imparato questo sembra funzionare (non elegantissimo… ma non mi viene altro…)

(reduce 
  #(let [r (conj %1 %2)] 
       (if (re-find #"\." %2) (reduced r) r)) [] coll)

andrea.crotti17:09:33

o qualcosa di folle tipo (non testato) (reverse (takewhile #(not (.endsWith "." %)) (reverse s)))

andrea.crotti21:09:08

(come non detto non puo' funzionare cosi)

andrea.crotti21:09:48

cmq si se tokenizzi meglio diventa piu semplice

andrea.crotti21:09:03

il . non dovrebbe stare con la parola