Fork me on GitHub
#clojure-uk
<
2016-12-02
>
paulspencerwilliams07:12:28

Does anyone know when / which ClojureX sessions will be made available online later? I've a 18:15 train from Marylebone so possibly won't catch all of Simon Belak's not @jonpither 's talks which are two highlights.

paulspencerwilliams07:12:53

I'm thinking 45 minutes to Marylebone's cutting it fine...

thomas08:12:40

no idea... but you can see on twitter when they are up

korny09:12:29

at least I am getting to play with cassandra - for all the wrong reasons. I think our client wants to use it because itā€™s shiny...

glenjamin09:12:05

A bit more agile-focused than the usual discussion here, but I thought Iā€™d share this as I really enjoyed reading it just now https://www.linkedin.com/pulse/scaling-agility-julian-browne

mccraigmccraig09:12:23

i've been using c* for a while now @korny - i really like it

korny09:12:23

So far it looks good, though the docs on the datastax site are full of ā€œto be completedā€ bits, which is annoying. And the training videos feel like a long advertorial.

korny09:12:57

also, having spent a few months breaking distributed systems with Jepsen, Iā€™m a bit skeptical about how easy they make it sound šŸ™‚

korny09:12:03

However, I do instantly like the fact that they at lest tackle async replication across data centers, which most databases just hand-wave away

mccraigmccraig09:12:33

if you do any jepsen on c* i would be interested to see the results - aphyr did one a while back and found a bunch of stuff - datastax's response was good iirc

korny09:12:16

yeah, I read that - and the c* folks run jepsen themselves these days. Iā€™m unlikely to, because Iā€™ll be off the project before we get to that sort of testing šŸ™‚

mccraigmccraig09:12:45

i've been using it fully async and it works really nicely - there's a serializable page-state for queries which means you can stream big queries sensibly, and the spark integration is great for analytics

korny09:12:51

cool - weā€™re all async coding at this client (using vert.x) so itā€™ll be async drivers for us too. (wish we could use core.async)

mccraigmccraig09:12:16

i don't like core.async for many such uses - it's ok for stream representations, but it doesn't have in-built error handling and it's not very good for promise-like things

mccraigmccraig09:12:24

i've been having a much nicer time with manifold

benedek09:12:21

@glenjamin still referring to your ligtning talk last year cljx, you might be interested in this: https://www.youtube.com/watch?v=oyLBGkS5ICk&amp;index=1&amp;list=PLZdCLR02grLofiMKo0bCeLHZC0_2rpqsz

glenjamin09:12:47

If hickeyā€™s ripped me off!

benedek09:12:06

haha, kinda

glenjamin09:12:08

will watch it now

benedek09:12:24

i so much want to do something (more) in this spaceā€¦ šŸ˜„

glenjamin09:12:13

although to be fair, I did reference language of the system slightly - as thatā€™s secretly a talk about dependencies

benedek09:12:46

donā€™t know if you have started already but that first diagram on dependencies redux is really revealing. almost like a feature list for some tool, trimming your pulled in deps

glenjamin09:12:27

Hopefully the fact that Rich has mentioned this means people will start caring

benedek09:12:09

[spoiler] he is also bashing semantic versioning big time.

benedek09:12:57

it seems that this is the naturally next step after spec, so core team might invest in this too

glenjamin09:12:17

thereā€™s a talk from strangeloop a few years ago called ā€œAnnexā€ which presents a better alternative to semver

benedek09:12:33

i think [spoiler] (again) rich is hinting that git is the right direction insteadā€¦ anywaysā€¦ have fun watching it. I literally could not stop šŸ˜‰

mccraigmccraig09:12:50

what was the alternative scheme @glenjamin ?

mccraigmccraig09:12:02

(i hate videos šŸ™‚ )

glenjamin09:12:06

itā€™s based around resolving facts against an immutable database

mccraigmccraig09:12:49

what did a version look like ? was it opaque or informative ?

glenjamin10:12:58

I have suggested in the past that sometimes instead of changing a major version number, you should rename your software

glenjamin10:12:27

Oh, I actually did make someone do that for an internal framework once, because they hadnā€™t thought about a migration path

glenjamin10:12:33

Thereā€™s definitely a lot of overlap with stuff iā€™ve been saying here. I wonder if I can put this on my CV somehow...

benedek10:12:03

šŸ˜„ stop looking back @glenjamin, look ahead šŸ˜‰

benedek10:12:07

you suggested node/npm style stuff tho, right? šŸ˜œ

glenjamin10:12:01

My claim was that Node stuff works better than people think it would

glenjamin10:12:25

Still only 33/76 minutes into this, Iā€™m intrigued to see where heā€™s going

benedek10:12:11

there is no big bang solution part really...

glenjamin10:12:16

thinking about names at various levels seems powerful

benedek10:12:20

sry canā€™t stop spoilering

glenjamin10:12:38

iā€™ve had this idea that I want to write a programming language where the import statement includes a version

benedek10:12:48

re node: canā€™t argue there with mranderson behind my back

glenjamin10:12:49

Rich says versions are rubbish, we should make new names. Then suggests ā€œfoo-2ā€ as the new name šŸ˜„

benedek10:12:21

also we are all waiting clojure 1.9.0 to be released, right? šŸ˜œ

paulspencerwilliams10:12:09

Interesting session from Luke about Arachne at ClojureX. I was a little worried with the similarities to Spring in terms of IOC / DI etc, but that final answer about how to address magic indirection, and inability to reason about what code executes and where / when started to address my concerns.

glenjamin10:12:38

the fact that thereā€™s no mapping from artifact to namespaces in java is really odd too

mccraigmccraig10:12:35

also java & clojure's global namespaces both suck mightily

benedek10:12:06

yeah there a few things here that really suck for a long time, I think there is Joe Armstrong talk on this too which is obv not clojure specific. canā€™t find it atm

glenjamin10:12:27

I did also talk to someone once about a single-function package manager for clojure

glenjamin10:12:38

where youā€™d use some metadata to build up a utils.clj

glenjamin10:12:07

and I thought if you had a cannonical form, you could use content hashing to resolve duplicates

benedek10:12:20

would function hashing make sense? (thinking out loud, sorry if talking utter rubish)

benedek10:12:43

possibly function fully qualified name/signiture hashing?!

benedek10:12:17

well that is spec really i guess...

glenjamin10:12:35

the rough idea was youā€™d only be able to use core fns or other content hashed fns, and then if you rename all locals to a, b, c etc

glenjamin10:12:41

you might get close

glenjamin10:12:23

That was a great keynote. I would have liked to see a bit of discussion on artifact granularity and how that affects the need to change/rename - but a call to arms for people to start caring about how broken dependencies are is great šŸ‘

korny11:12:55

I seem to recall some discussion about Leiningen having plans to let you load dependencies in multiple classpaths, to avoid the current way dependencies are merged...

korny11:12:02

It strikes me that itā€™s fundamentally risky the way we do dependency resolution. If Iā€™m using library foo that depends on bar-1.1.5 and also Iā€™m using baz that depends on bar-1.2.1 - why is it ok to force one of foo or baz to use an unexpected version of bar? Surely a sensible language would let you use both - the only reason we share them is that we have that global namespace.

bronsa11:12:37

@korny using multiple versions of a library only works if you can assume that the library won't keep internal state (like an internal global registry)

korny11:12:12

Yeah - but that feels like a special case, not a default. If bar has internal state, Iā€™d prefer it to default to having one copy of that state when called by foo and one when called by baz - otherwise side effects from one affect the other

mccraigmccraig11:12:24

@bronsa though if there was no global namespace and multiple versions were a possibility then libs would likely have sensible approaches to that problem

korny11:12:39

In the (hopefully rare) case where I really want to share state between them, Iā€™d want that to be explicit.

glenjamin11:12:10

almost all clojure libs and/or sensible libs donā€™t hold internal state

bronsa11:12:19

really? would you really want to know about all the different versions of a lib your dependencies are pulling, in order to share state?

bronsa11:12:56

@glenjamin shrug, see spec

glenjamin11:12:05

the trickier issue is when you have nominal types and type checking that you expect to work - but that doesnā€™t come up as often

glenjamin11:12:29

well, it does with protocols, it doesnā€™t with maps

bronsa11:12:34

there are legitimate cases for holding internal state, we can't just say "well, if you're a library that does hold state, sucks to be you"

glenjamin11:12:59

right, but make that the exception, not the rule

bronsa11:12:06

+ what about open dispatch, what if I want to register a multimethod or a protocol fn

glenjamin11:12:45

then perhaps there should be a small standalone lib which wonā€™t change containing only the protocol definition

glenjamin11:12:07

a similar idea was suggested by Rich in language of the system - but he was talking about standard interfaces for S3 et al

glenjamin11:12:33

there are definitely cases where being a singleton dependency is useful / powerful

glenjamin11:12:40

but theyā€™re a minority of dependencies

glenjamin11:12:09

but most systems only allow singleton deps

paulspencerwilliams13:12:33

Has anyone written a slack bot using Clojurescript yet? I've a company hackathon next Wednesday and wondered whether their are any good jumping in points?

jonpither13:12:29

afternoon peeps

otfrom14:12:26

paulspencerwilliams using clojure, but not cljs

paulspencerwilliams15:12:03

haha, that looks like a good one @jonpither

jonpither15:12:22

hi @paulspencerwilliams are you at ClojureX still?

paulspencerwilliams15:12:45

@jonpither I am, at the back of the main room. I'll be off either before or after Simon's session dependant on how courageous I am with travel back to Marylebone šŸ˜‰

jonpither15:12:42

also at the back, I'm the skinhead occupying a sofa šŸ™‚

Rachel Westmacott16:12:04

thereā€™s a another Clojure slackbot here: https://github.com/plumbee/plumbot takes a slightly unusual approach of having one Slack integration, but hosting multiple bots

glenjamin16:12:13

Iā€™ve done one is JS before using slackā€™s npm package which connects to the websocket backend via node

paulspencerwilliams18:12:27

Having a look through the Slack API docs, I'm probably going to work with their events api.