do you understand the error message ?
the java.security.SecureRandom kryo serialization issue is probably separate from clj-http/request var serialization
maybe I do things wrong, but do I need to upload my #‘var everytime it changes ?
It slow down my feedback loop, it’s okay but I am just asking ^^
mount! has :live true
but haven’t gotten to putting that into mount-ring!
thinking about lifting common pieces from mount!
for use in mount-ring
ultimately these things are related, mount! is just a special case of proxy
does it upload everything ? * :live true
yes, but only on change of the mounted var, not on change in dependencies
ok, nice
one can “batch” changes that way 🙂
have you looked at my keep
stuff, totally wrong ?
haven’t yet have time
ok ok
I have few mini-websites that are going to massively use portkey
at least I am going to try hard
this tool can be life changing for prototyping
🙂
yes
it’s even better than lambda with regular java/node
repl makes a difference
indeed
we will have to get rid of carbonite at some point
why that ? it’s just a kryo wrapper for clojure datastructures right ?
because for some clojure stuff we need our own custom serializer and in such cases we clash with carb
ok ok
@baptiste-from-paris I’m rather bad at faces, have we ever met at the paris clojure group?
so the issue with clj-http.core/request
is a kryo one, and trying to fix it (by working around carb) I trigger another one...
nope, I discovered clojure 1 year ago
but i am part of the clojure paris group
we just had a brainstorming to 3 weeks ago
trying to make Clojure just a little more popular in france !
by the way if one of you want to come to paris to talk about portkey it would be awesome
I am sure we can make it all inclusive with the Clojure user group
back in july (iirc) I chatted with @hmadelaine about “monter à la capitale” (going to the big town) to talk about either portkey or unrepl
when ever you want, we plan to make 6 events this year
monthly was too much of a strain?
which is quite hard, there are not a lot of people willing to talk ^^
yes, not enough speakers
and lot’s of people who are really new to the language
I bet there are less than 5 companies using clojure in France
I really want to increase this number
we need to put parens in tap water like they do in Finland 😉
parens means ^^ ?
parenthesis
oh
lol
the uptake of Clojure there is phenomenal
sometimes it’s only a matter of few people/companies that make other people choose a tech
it really amaze me how tech companies choose their stack
I worked for Meetic (Match group); we always did what competition were doing
and vice/verca
Imitation and belief in magic bullet/pixie dust.
However we (collectively as devs) don’t always make rational choices
Offcourse! We are humains ^^
But I think it can be great to have more clojure enthousiast in France
At least just to inject more money in the clojure ecosystem
So that a 28/30 young dev can work on a project like portkey because he already "master" clojure
do you often come to paris @cgrand?
no — for 1.5 year I contracted for SACEM and was in Paris 2 days a week, this ended 2 years ago and since then I didn’t have the opportunity to go to Paris. It has been too long of a time, I should plan a visit to the user group.
nice 🙂
but currently I’m looking into going further in the country side, maybe I should open a (clojure) hackers retreat 🙂
lol
saint etienne right ?
the uptake on Clojure in Finland is probably most visible in ClojuTre, this year and last year attendees in the ~300 range
And how many from Finland itself ?
350 this year, 2/3 Finns I guess
to put it in perspective: same size as EuroClojure
it’s a free conference
this year there was a voluntary 50e patron fee
but there are quite many sponsors
which tells the story of Clojure being commercially in use
and we have sauna 🙂
we have great wine 😉 🍷
UCInterpreter
transform clj to .class right ?
I don’t understand also why use vars
& classes
in here =>
(defn freeze [x]
(let [classes (atom #{})
vars (atom #{})
kryo (mk-kryo)
baos (java.io.ByteArrayOutputStream.)]
(with-open [out (com.esotericsoftware.kryo.io.Output. baos)]
(.writeClassAndObject kryo out x))
(.toByteArray baos)))
and from what I understand, it might cause problem according to kryo
doc
[com.esotericsoftware/kryo "4.0.0"]
[com.twitter/carbonite "1.4.0"
:exclusions [com.esotericsoftware.kryo/kryo]]
because carbonite use kryo 3.*https://github.com/EsotericSoftware/kryo#versioning-semantics-upgrading
carbonite will be gone by the end of the week
thx
Deps tracing/tree-shaking
One starts from a value (a closure), we serialize it with kryo.
To serialize, Kryo performs a traversal of the object graph rooted at our initial value.
As kryo walks the graph we log all classes and vars found. (that’s what you see in freeze
)
so now with have bytes (the frozen value) and some deps (classes and vars)
log-dep
?
we add the classes to the package (and we add also deps of deps, that’s UCInterpreter/analysis job, vars and resources may be found too)
then we add resources
then we deref all vars encountered, and we serialize their values
(with kryo)
serialization produces more classes and vars
etc. etc. until nothing new is found
FIN
how did you come with this strategy ^^ ?
and in which phase asm generates .class
?
never
when you eval code at the repl clojure does generate classes (in memory)
we use ouroboros to retrieve them (or any other) from the JVM
let me summarize the problem(s) portkey is trying to solve 1) bring clojure repl to lambda 2) minify/deploy clojure code -> bytecode -> package -> aws lambda
that’s correct but 2) is somehow necessary to make 1) useful
and I guess the hard part is serialization and handling clojure’s data structure ?
not that much, the hard part is class inspection
ok