Fork me on GitHub
#clojure-greece
<
2016-06-22
>
stathissideris05:06:14

@palladin:

(time (reduce (fn [^long a ^long b] (+ a b)) (range 1 100000000)))
"Elapsed time: 2661.196246 msecs”
4999999950000000

stathissideris05:06:31

to ^long einai type hint

stathissideris05:06:05

vasika me to type hint glytwneis boxing/unboxing

greenonion07:06:46

επισης νομιζω πληρωνεις και το lazyness που δε χρησιμοποιεις εδω

greenonion07:06:49

ισως θελει reducer;

greenonion07:06:02

για να μην τα φερνει σε chunks;

greenonion07:06:46

user=> (time (r/reduce + (range 100000000)))
"Elapsed time: 3991.068929 msecs

apod07:06:32

ego pantos den eida treli diafora trexontas kai ta 3 😛

(require '[clojure.core.reducers :as r])

(time (reduce + (range 1 100000000)))
;; "Elapsed time: 2917.175936 msecs"
;;=> 4999999950000000

(time (reduce (fn [^long a ^long b] (+ a b)) (range 1 100000000)))
;; "Elapsed time: 2484.394161 msecs"
;;=> 4999999950000000

(time (r/reduce + (range 1 100000000)))
;; "Elapsed time: 2772.405715 msecs"
;;=> 4999999950000000

greenonion07:06:35

απο την αλλη δεν μπορω να κανω reproduce το speedup με τα primitives (`^long`) για καποιο λογο

greenonion07:06:03

εγω με το r/reduce ειδα μεγαλη

greenonion07:06:10

wtf ομως, παραξενο

apod07:06:43

kai me fold

(time (r/fold + (range 1 100000000)))
;; "Elapsed time: 2746.380503 msecs"
;;=> 4999999950000000

greenonion07:06:12

user=> (time (r/fold + (range 1 100000000)))
"Elapsed time: 3887.494446 msecs”
4999999950000000

greenonion07:06:28

αλλα ενταξει, και μονο για να τα χωρισει σε threads και να τα μαζεψει μαλλον εχει overhead

greenonion07:06:51

τα primitives μου κανουν εντυπωση που δεν μπορω να τα κανω να δουλεψουν

greenonion08:06:13

(με καψατε πρωινιατικο παω να κανω καμια δουλεια)

stathissideris08:06:28

Ίσως να κάνει κάποια διαφορά και το unchecked-math

greenonion08:06:36

ναι, true

apod08:06:25

(require '[clojure.core.reducers :as r])

(time (reduce + (range 1 100000000)))
;; "Elapsed time: 2917.175936 msecs"
;;=> 4999999950000000

(time (reduce (fn [^long a ^long b] (+ a b)) (range 1 100000000)))
;; "Elapsed time: 2484.394161 msecs"
;;=> 4999999950000000

(time (r/reduce + (range 1 100000000)))
;; "Elapsed time: 2772.405715 msecs"
;;=> 4999999950000000

(time (r/fold + (range 1 100000000)))
;; "Elapsed time: 2848.879237 msecs"
;;=> 4999999950000000

(set! *unchecked-math* true)
(time (reduce + (range 1 100000000)))
;; "Elapsed time: 2818.041012 msecs"
;;=> 4999999950000000

(time (reduce (fn [^long a ^long b] (+ a b)) (range 1 100000000)))
;; "Elapsed time: 1913.499944 msecs"
;;=> 4999999950000000

(time (r/reduce + (range 1 100000000)))
;; "Elapsed time: 3067.241996 msecs"
;;=> 4999999950000000


(time (r/fold + (range 1 100000000)))
;; "Elapsed time: 2736.543693 msecs"
;;=> 4999999950000000

palladin08:06:02

Ontos me ta type hints den eida megali diafora

palladin08:06:18

akoma kai xoris arithmetic to aplo range scan einai poli argo

palladin08:06:23

(time (reduce (fn [^long a ^long b] 42) (range 1 100000000)))

apod08:06:45

42 answer to everything ?

palladin08:06:58

cool constant

palladin08:06:05

(def v (vec (range 1 100000000)))

palladin08:06:29

(time (reduce (fn [^long a ^long b] 42) v)) "Elapsed time: 7419.295403 msecs" 42

greenonion08:06:42

αυτο γλυτωνει τα chunks λογικα

greenonion09:06:31

παιζει και το παλιομοδιτικο:

greenonion09:06:42

(defn total [^long num]
  (loop [t 0 n num]
    (if (> n 0)
      (recur (+ t n) (dec n))
      t)))

greenonion09:06:37

user=> (time (total 100000000))
"Elapsed time: 5553.698279 msecs”

greenonion09:06:14

χωρις το ^long κανει πανω απ’ το διπλασιο χρονο

palladin10:06:04

akoma kai etsi

palladin10:06:16

xoris lambdas ktlp

palladin10:06:28

pali mou fenete tromera poli

greenonion10:06:05

γενικα για raw speed απ’ οτι καταλαβαινω αρκετοι γραφουν Java απευθειας

palladin10:06:05

nai sure ...

palladin10:06:43

gia mena to megalo erotima panta einai "abstraction but at what cost"

greenonion10:06:08

http://peticol.as/writes-about/fast-clojure/ αυτο εχει ενδιαφερον btw

greenonion10:06:24

true, καλο ειναι να ειναι συνειδητα τα trade-offs

palladin10:06:43

i akoma kai to "scalability but at what cost?"

palladin10:06:24

px parallelism me poli kaka constant factors

palladin10:06:35

opote meta skeftese ok

palladin10:06:49

petao extra cores sto problima

palladin10:06:14

alla ean ta constants einai poli megala

palladin10:06:47

tote apla petao resources se mia tripa

stathissideris10:06:21

@palladin: h clojure den diafhmizei zero cost abstractions opws h rust 🙂

palladin10:06:01

@stathissideris: kala i rust einai thirio... "Abstraction without regret"

palladin10:06:25

kai epeidi exei tromera constants ... exei tromero scalability sto parallelism

palladin10:06:21

exo minei ligo malakas me tin rust (parolo pou exo dei kai pragmatakia se C++, Haskell, MLton ktp)

palladin10:06:59

pantos istorika oi lisp eixan kanei douleia gia na sivinoun to perf costos ton abstractions

greenonion10:06:40

δεν ξερω αν θελω να ασχοληθω με rust

greenonion10:06:50

μου θυμιζει scala, ο,τι ιδεα μας φανηκε καλη τη βαλαμε

greenonion10:06:57

πρωτη αναγνωση αυτο τωρα

greenonion10:06:02

στην πραξη μπορει να ειναι γαμω βεβαια

greenonion10:06:07

αλλα τελειως διαφορετικο use case απο clojure

palladin10:06:27

@greenonion: Sigoura i rust einai poio system oriented

palladin10:06:34

alla ean to skefteis ligo parapano

palladin10:06:51

nomizo oti i clojure exei os megalo use case

palladin10:06:55

to stream processing

palladin10:06:12

kai pipelines tou tipou map, filter, fold

palladin10:06:19

me megalo parallelism ktlp

palladin10:06:25

theoro oti i rust exei (tha mporei na exei) poli poio dinato parallel stream processing story apo alles glosses

palladin10:06:36

akrivos epeidi einai zero cost abstraction

greenonion10:06:56

απλως η clojure ειναι ηδη στο jvm

palladin10:06:19

dld palia ekrives to costos tou abstraction piso apo to argo IO

palladin10:06:48

alla simera exoume poli poio grigoro IO kai in memory sistimata

palladin11:06:08

kai to CPU einai to bottleneck

greenonion11:06:26

παντως σε διαφορα talks που παρακολουθησα τις προαλλες

greenonion11:06:39

ακομα ελεγαν οτι το μεγαλυτερο bottleneck ελεγαν οτι ηταν το network

greenonion11:06:50

στο να μεταφερεις πχ data απ’ το kafka

greenonion11:06:56

στο processing framework

greenonion11:06:06

και γι’ αυτο εξερευνουν λυσεις τυπου kafka streams

greenonion11:06:09

ή apache flink

greenonion11:06:15

που σου λεει οτι αφου τα εχεις ηδη τα data εκει

greenonion11:06:18

γιατι να τα μεταφερεις

greenonion11:06:27

δεν εχω αποψη, εχει πολυ ζουμι ομως η ιστορια

palladin11:06:40

tha deis oti einai peripou auto pou sou elega

palladin11:06:39

dld to spark kai to flink to killer feature tous

palladin11:06:52

einai to in-memory part

palladin11:06:12

opote ekei thes to poio compact representation

palladin11:06:30

opote ean ta lambdas sou pou tha doseis sto map, filter, fold

palladin11:06:25

den pezoun kala px me locality kai cache friendly data structures tote

palladin11:06:48

exeis poli megalo scalability alla me xalia performance

greenonion11:06:13

χμ οκ βγαζει νοημα αυτο που λες φανταζομαι

greenonion11:06:25

αλλα δεν εχω συγκεκριμενη αποψη για την clojure

greenonion11:06:35

στο talk που εστειλα πιο πανω ηταν χαρουμενοι

greenonion11:06:40

και θιγει το perf

greenonion11:06:42

πραγμα

greenonion11:06:43

αρκετα

palladin11:06:55

nai sigoura... alla epeidi tin eida tin omilia itan to perf

palladin11:06:10

relative clojure me clojure

palladin11:06:41

yparxei panta kai to good enough

greenonion11:06:08

ναι αυτο εννοω

greenonion11:06:47

τεσπα δεν ξερω ειναι πολυ αφηρημενα αυτα για μενα

greenonion11:06:01

εννοω το πιο «ζορικο» τασκ που κανω με data σε clj κανει 1 sec

greenonion11:06:05

χωρις perf

greenonion11:06:15

οποτε 🙂

palladin11:06:52

poio poli einai gia na deis ta oria tis glossas/libs/sistimatos

palladin11:06:58

gia mas einai poio poli

palladin11:06:04

kai oxi gia tin CPU 🙂

palladin11:06:51

na exoume mia eikona se multiple levels of abstraction

palladin11:06:47

pantos ean kapoios einai poli dinatos se clj macros

palladin11:06:07

kai psinete gia ena dinato hacking project

palladin11:06:14

as me kanei contact 😛

palladin11:06:19

@stathissideris: Prin apo kapoi kero eixame grapsei auto to paper

palladin11:06:51

pou meletagame to performance diaforon streaming libs se diafores glosses

stathissideris11:06:01

dwse mou 2 lepta na to katanohsw troll

palladin11:06:47

ena apo ta optimization frameworks pou testarame

palladin11:06:53

itan kai ena pou eixa grapsei ego

palladin11:06:25

stin Scala eixame testarei to ScalaBlitz https://scala-blitz.github.io/

palladin11:06:40

auto pou einai ftiaksei ego douleue at runtime

palladin11:06:55

kaigame codika to kaname load at runtime

palladin11:06:59

to scalablitz

palladin11:06:07

apo tin alli douleue at compile time

palladin11:06:56

to current project mou

palladin11:06:59

einai to looper

palladin11:06:12

pou tha einai ena refactoring tool gia roslyn

palladin11:06:36

dld oti ekane o LinqOptimizer alla os refactoring tool mesa sto IDE

palladin11:06:44

opote i skepsi mou

palladin11:06:53

gia kapoia genea psixi einai i eksis

palladin11:06:05

na exoume ena clj macro

palladin11:06:10

as to poume looper

palladin11:06:36

(looper (reduce + (range 1 1000000)))

palladin11:06:55

pou tha to analiei kai tha paragei efficient imperative loop codika

palladin12:06:00

me mutation kai ola ta kala

palladin12:06:16

einai stin arxi tou... kai exoume poli douleia akomi

palladin12:06:44

apla to deixno gia na exete mia idea gia to ti tipou transformation milame

palladin12:06:22

opote opoios psinete gia ena tetoio clojure macro (btw ekana mia mikri ereuna agoras kai den vrika kati antistixo)

palladin12:06:46

gia na tou doso tin kentriki idea kai tips & tricks

stathissideris12:06:15

@palladin: vasika exw dyo erwthseis (1) to motivation poio einai? exete kapoio use case h einai apla research? (2) giati na einai to target clojure kai oxi jvm bytecode gia na kanoume squeeze out olo to performance?

stathissideris12:06:57

@palladin: kati pou einai isws relevant einai oti ayton ton kairo kanw investigate tou pws ginetai na kaneis represent to clojure AST wste na mporeis na to kaneis query me datalog, pou isws na prosferetai gia static analysis

palladin12:06:26

gia to 2) den exo kapoio idietero target

palladin12:06:35

apla prepei na ginei tranform

palladin12:06:45

se kati pou den exei lambdas

palladin12:06:40

ola ta endiamesa vimate exoun svistei (loop fusion)

palladin12:06:25

kai gia tin clojure xriazete episis na apofigeis boxing sta primitives

palladin12:06:31

kai tetoia optimizations

palladin12:06:42

tora gia to 1)

palladin12:06:55

to motivation einai to idio pou exei to Spark

palladin12:06:13

in-memory performance gia stream processing

palladin12:06:34

dld exeis ena map/reduce pipeline

palladin12:06:37

pou einai argo

palladin12:06:47

ston looper

stathissideris12:06:55

nai, apla anarwtiemai giati theleis na to kaneis kai se clojure 🙂

palladin12:06:01

kai elpizoume gia to kalitero 🙂

palladin12:06:31

vasika einai proskilisi sto clj community os hacking project

palladin12:06:39

giati ego kano idi antistixa projects

palladin12:06:07

se C#/F#/Scala/MetaOcaml ktlp

palladin12:06:21

opote ean psinete kapoios gia ena tetoio project

palladin12:06:38

ego mporo na ton voithiso me idees kai pos prepei na to doulepsei

stathissideris12:06:31

ok, good to know 🙂 egw gia thn wra exw perisseia open source projects, alla mou akougetai endiaferon opote tha to exw sto myalo mou

stathissideris12:06:41

eidika an proxwrhsw ayto to code analysis tool pou sou lew

palladin12:06:31

sigoura xriazete arketo analysis

palladin12:06:38

kai epeidi ta clj macros einai to poio advanced feature tis glossas

palladin12:06:17

einai endiaferon gia opoion psinete na kanei ena oraio macro

stathissideris12:06:40

nomizw tha htan efikto, alla tha eprepe o kwdikas na exei toulaxiston type hints

stathissideris12:06:59

alliws den mporeis na apofygeis to (un)boxing

palladin12:06:06

genika to pattern matching me datalog akougete poli orea idea

palladin12:06:53

@stathissideris: tin datalog pou aneferes einai kapoio clojure dsl

palladin12:06:12

i milame gia eksoteriko datalog compiler?

stathissideris12:06:19

@palladin: sygekrimena paizw me to implementation ths datascript

greenonion12:06:22

add to pocket

stathissideris13:06:21

@greenonion: einai perisotero experiment to sygekrimeno giati profanws yparxoun pio kaloi tropoi na kaneis extract information apo HTML

palladin13:06:29

ok cool einai clojure dsl

greenonion13:06:01

btw h clojure.set εχει διαφορα utility functions για relational πραγματα

greenonion13:06:29

διαβαζα χθες παλι το joy of clojure

greenonion13:06:32

τελειωνω!

stathissideris13:06:24

@palladin: h datascript einai in-memory "clone" tou datomic

palladin13:06:10

nomizo oti eisai stin sosti kateuthinsi

palladin13:06:43

giati sta ereunitika mou endiaferonta

palladin13:06:57

exo mia epafi me ton Kathigiti Smaragdaki

greenonion13:06:22

palladin: ησουν di;

palladin13:06:24

kai autos kanei dynamikes kai statikes analysis me Datalog

greenonion13:06:34

department of informatics and telecommunications stathissideris

greenonion13:06:45

aka πληροφορικη στο πανεπιστημιο της αθηνας

greenonion13:06:58

DI για τους φιλους 😛

palladin13:06:06

nai sry gia to DI

palladin13:06:14

einai auto pou egrapse o Nikos

stathissideris13:06:40

@palladin: nai, afou arxisa na kanw dokimes me datalog, anakalypsa oti einai poly common practice gia code analysis kai provenance klp

palladin13:06:02

@greenonion: oxi den eimai apo DI alla ksereis pos pame auta ta pragmata 🙂

palladin13:06:33

einai ola code anaysis me datalog

greenonion13:06:44

ναι φανταζομαι! απλα ακουσα και το ονομα του ροντογιαννη τις προαλλες στο μηταπ

palladin13:06:46

einai world class expert se datalog

greenonion13:06:46

και ειπα μηπως

greenonion13:06:53

ελα ρε οντως;

greenonion13:06:35

α το ’10 πηγε, δεν τον προλαβα

greenonion13:06:52

austin, GIT βλεπω

palladin13:06:46

genika o Smargdakis einai terastia morfi

palladin13:06:00

kai opoios psinete gia na meletisi parapano

palladin13:06:10

sas exo fovera lectures

palladin13:06:19

doste mou 1-2 lepta na ta vro

greenonion13:06:17

ω θεε μου

stathissideris13:06:27

@palladin: to diko mou project exei na kanei pio poly me tools pou se voithane na kaneis debug kai na katanohseis to codebase

stathissideris13:06:04

apo pou proerxetai h tade timh kai pws katalhksame se ayth. “provenance” to lene

palladin13:06:50

nai me auta asxoleite o Smaragdakis

palladin13:06:54

pointer analysis

greenonion13:06:57

ασχετο

greenonion13:06:05

αλλα επειδη συζητηθηκε το SICP τις προαλλες

greenonion13:06:13

οταν το ειχα ξεκινησει κοιτουσα αυτα

greenonion13:06:17

για reference

greenonion13:06:25

καλο resource

greenonion13:06:30

τον διαβαζω αυτον γενικα

palladin13:06:27

exei kratisei kalo reference gia tis askiseis

greenonion13:06:10

ναι ρε τελειο

greenonion13:06:21

ειναι core python αυτος αν θυμαμαι καλα

greenonion13:06:29

αλλα γραφει γενικα

greenonion13:06:35

και για clojure 🙂

greenonion13:06:41

αρκετα για C++

palladin13:06:14

einai must watch

greenonion13:06:20

ναι ολο μαζι παει

greenonion13:06:22

πακετο

greenonion13:06:42

και μετα το PAIP

stathissideris13:06:46

also known as “the best way to write a stack overflow in clojure” 😄

greenonion13:06:03

χαχααχχα

palladin13:06:10

xaxaxaxaxaxa

greenonion13:06:58

https://leanpub.com/readevalprintlove001 μου θυμισε αυτο ο τιτλος!

greenonion13:06:03

το τσεκαρες σταθη;

apod14:06:12

to Read-Eval-Print-λove einai poli oraio, auto itan to teleutaio https://leanpub.com/readevalprintlove003

greenonion14:06:30

αλλα θελει το χρονο του

stathissideris14:06:00

@greenonion: einai kainourgio, den exei vgalei kapoio issue akoma!

greenonion14:06:51

ωραια, γραφτηκα

greenonion14:06:04

αναρωτιεμαι βεβαια ποσα newsletters χωραει το clj community 😛

greenonion14:06:57

αυτο διαβαζα

greenonion14:06:08

απ’ οτι καταλαβαινω ιδια λογικη

greenonion14:06:15

κανει τη δουλεια και μετα σβηνει το body

palladin15:06:24

Eida pou kanate post ena article gia tin Forth...

palladin15:06:42

kai thimithika oti i Forth einai i klassiki glossa pou opos kai me tin lisp kaneis gamatous meta-circular interpreters 🙂

palladin15:06:36

Genika ean eisai pesmenos kai den exeis ti na kaneis... grapse enan forth interpreter kai tha aisthantheis kalitera 🙂

greenonion16:06:21

εκει επρεπε να παμε

greenonion16:06:23

θα παει κανεις;

apod16:06:36

http://clojutre.org/2016/ kai auto ginete septemvri, pliroforiaka

greenonion16:06:55

πω ρε εχω ξενερωσει

greenonion16:06:59

οταν ψαχναμε συνεδρια

greenonion16:06:03

δεν το ειχα βρει το curry on

greenonion16:06:06

μου φαινεται φανταστικο

greenonion16:06:18

industry & academia

greenonion16:06:39

και data πραγματα

greenonion16:06:53

ακομα κι ο Larry Wall μιλαει, τελειο

gtsiftsis16:06:23

νικ το είχα δει

gtsiftsis16:06:26

ναι είναι γαμάτο

gtsiftsis16:06:30

είναι υβρίδιο

gtsiftsis16:06:39

παίζει πολύ fp και clojure

gtsiftsis16:06:51

δυστυχώς δεν μπορούσα να το δικαιολογήσω για την δουλειά

gtsiftsis16:06:10

αλλά ναι φαίνεται πολύ ενδιαφέρον

apod16:06:54

milaei kai o Matthias Felleisen

apod16:06:58

genika exei poli prama

palladin16:06:33

to Curry on einai co-located me to ECOOP

stathissideris16:06:37

wx kai larry wall!

palladin16:06:47

perisi eixe perasei ena paper mas sto ECOOP

palladin16:06:03

kai eixe paei o Aggelos na to parousiasei

palladin16:06:14

kai mou eipe oti itan poli kalo to Curry on

palladin16:06:30

exei pollous academics kai practitioners

greenonion16:06:38

gtsiftsis: πρακτικα περισσοτερη ουσια θα ειχε νομιζω απ’ το buzzwords

greenonion16:06:53

εννοωντας οτι computer science κλπ

greenonion16:06:09

και το κλασσικο talk της Elm απο curry-on ειναι

greenonion16:06:19

κλεινω απο τωρα curry on 2017

greenonion16:06:58

μιλαει κι ο Felleisen

palladin16:06:43

Btw prosfata eida auto to panel

palladin16:06:03

eixes kapoies orees apopseis

palladin16:06:13

eidika gia ta types

greenonion18:06:25

btw ποσταρα το κειμενο του malcolm στο r/clojure και εγραψε ο Reeves απαντηση https://www.reddit.com/r/Clojure/comments/4pb0la/concerns_with_ring/