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.