Fork me on GitHub
#clojure-uk
<
2016-07-18
>
paulspencerwilliams07:07:38

I’ve actually managed an hour writing Clojure this morning before I’m about to ‘get real’ back to to an incredibly verbose, boilerplate-heavy project based on Spring 😕

agile_geek07:07:55

Sounds like my life atm except I only get to review boilerplate-heavy project in Spring!

martintrojer07:07:34

this channel just turned into a monty python sketch

agile_geek07:07:03

When I were Lad I used to punch cards wit' fingernails....

paulspencerwilliams08:07:16

I honestly think I'd prefer to eat gravel than maintain a 34kloc for a 3 entity crud application.

agile_geek08:07:14

34kloc...luxury!

paulspencerwilliams08:07:36

for 3 entities....

thomas08:07:55

morning btw

agile_geek08:07:33

I'm reviewing...not writing mind, just reviewing 1.2 million LOC for app that calls onto backend services for t' business logic

agile_geek08:07:03

Aye up @otfrom. Welcome t' Yorkshire

otfrom08:07:22

agile_geek: should we change the channel name then?

agile_geek08:07:20

I think we've slipped into Monty Python sketch so clojure-and-now-for-something-completely-different?

agile_geek08:07:15

COBOL..don't get me started on COBOL...that were proper language..

mccraigmccraig08:07:47

does COBOL have lexical closures @agile_geek ?

agile_geek08:07:29

@mccraigmccraig: who needs lexical closures when you've goto's?

agile_geek08:07:18

MOVE A TO B. SUBTRACT C FROM B. GOTO PARAGRAPH-A. It's that simple. All in 72 columns on a punchcard. Now that we're real programming.

mccraigmccraig08:07:40

holy crap - "In 1997, Gartner Group estimated that there were a total of 200 billion lines of COBOL in existence, which ran 80% of all business programs"

agile_geek08:07:10

Yep. Some of my COBOL from 1988 is still running in NHS

mccraigmccraig08:07:37

with OO features landing in 2002, aren't we overdue for COBOL/FP ?

agile_geek08:07:07

The core banking systems in my current client are predominantly COBOL with a bit of C.

agile_geek08:07:25

and are pushing over 30 years old

agile_geek08:07:19

...also these rarely, if ever, go wrong. Unless someone screws up the Scheduler to run them.

mccraigmccraig08:07:30

if it ain't broke...

agile_geek08:07:04

Yep. It's the 100 layers of stuff around them that tends to have issues.

mccraigmccraig08:07:18

what about customers with non-ASCII characters in their names or addresses ?

agile_geek08:07:26

ASCII, it's all EBCDIC and who wants customers with funny names anyway?

mccraigmccraig08:07:39

serious question - what do asian banks run on ?

agile_geek08:07:21

I think most of mainframes support UTF-16 now

mccraigmccraig08:07:20

how does that get retrofitted to exiting programs though ?

agile_geek08:07:19

Haven't written any COBOL for over 20 years but think they've extended it to interop. I suspect they'd have to recompile using new compiler and job done bit not at all sure.

agile_geek08:07:05

There was a lot of small rework done around y2k for dates so may have been similar exercise

mccraigmccraig08:07:39

i suppose the advantage of COBOL over c* is that it's sufficiently managed that there is no chance of programs depending on the character width or pointer size

mccraigmccraig09:07:00

i don't think i ever had a good time with ActiveMQ

agile_geek09:07:29

@korny: 😄 for Clojure work...on MongoDB just don't read Kyle's stuff on consistency (it'll give you nightmares)

korny09:07:53

That’s exactly where I’m at - hacking with Jepsen. And yes, it’s nightmare land.

korny09:07:16

The client wants to know just how bad the nightmare is...

korny09:07:48

And whether they can put a few nice safe night-lights to sooth them when the nightmares happen.

korny09:07:35

Mind you, it’s a nightmare on almost all distributed systems if you have a network split, as far as I can tell. Kyle’s blogs are almost all “this broke like X”. You canna change the laws of physics ^H^H^H^H^H CAP theorem

agile_geek09:07:48

Yeah. Most of his objections are "the documentation said it will do X when network partitions but it did Y" rather than this works no matter what.

glenjamin09:07:16

iirc mongo with write-majority wasn’t too bad aside from some bugs that got fixed?

agile_geek09:07:16

https://aphyr.com/posts/322-jepsen-mongodb-stale-reads this was April last year so may have all been fixed but even with write-majority on a single node there could be data loss.

glenjamin09:07:58

oh right, forgot about that one

agile_geek09:07:32

That was prior to version 3 release so all may have changed.

agile_geek09:07:11

Reading his blogs has got me reading papers on Dotted Version Vectors and CAP theorem in general. You have to remember CAP theorem wasn't proposed until I'd been out of Uni for over 10 years so sometimes I have to catch up!

glenjamin09:07:53

it was never mentioned in my 4 year comp sci course

korny09:07:00

Write majority is actually OK for us, as long as you also set read majority, and make sure you handle manually the failures that can occur. And we don’t have a huge need for linearizability.

glenjamin09:07:19

which finished in 2009

korny09:07:45

Main annoyance is the dubious claims in the docs, and the lack of docs, and the guesswork around “what does this setting mean”...

korny09:07:04

Though now I’m looking at ActiveMQ, it makes MongoDB look like nirvana by comparison 🙂

agile_geek09:07:24

@korny I think you will be ok if you can relax rules on linearizability

martintrojer09:07:51

the DB / Queue authors probably new to this whole CAP thing aswell.

korny09:07:06

Yeah, in the end we have a good-enough setup. The main thing we needed to get our heads around was using Arbiters properly, so we could still get a majority if we lost an AWS availability zone.

agile_geek09:07:21

@glenjamin: the scary thing is most of the 'Architects' in large corporates are my age but stopped implementing any code 15 years ago and don't read papers or go to conferences other than the 'buy my products' variety.

korny09:07:53

My main annoyance is all these vendors (even open-source ones) who seem to see robustness and reliability as the least important thing, and speed benchmarks as their main goal. The queueing vendors also seem to start assuming you are sending non-persistent messages to a single non-replicated server, and then vaguely treat distributed persistent queues as an afterthought. 😞

agile_geek09:07:08

I mentioned CAP to the lead architect on my 'big data' POC project and he said "What's that?"

agile_geek09:07:52

@korny: because that's the easier problem to solve

maleghast09:07:58

@agile_geek: “Lead architect”, you say..?

maleghast09:07:30

I gather that the job market should be a little (read a lot) easier for me when / if I return from SE Asia if that’s the bar… 😉

korny09:07:05

@agile_geek: very true. Mind you, I remember IBM / MQSeries trying to deal with similar problems in the ‘00s - so maybe some of those architects at least have dealt with queues before 🙂

agile_geek09:07:05

@maleghast: he was Lead Architect for the entire Digital Division of Bank.

agile_geek09:07:49

about 50-60 'projects' a year but his minions didn't know what it was either

thomas09:07:08

@korny: some of the lead architects for MQ series are a mere 100 meters away from me…

thomas09:07:40

@agile_geek: you don’t need to know CAP in order to draw three boxes on a whiteboard

agile_geek09:07:43

@korny: Hey I was living it that world too

korny09:07:44

re: optimising for speed not robustness - they also do that because bloggers and the like always love pointless microbenchmarks. I’m in massive debt to Kyle, because he seems to have made an impact with tests that look at “does this actually work” rather than “how fast is it"

korny09:07:36

MQSeries was a horrible nightmare to configure, and a massive money pit. But at least it was pretty rock solid once you sold your firstborn children to the IBM consultants.

agile_geek09:07:50

Kyle's biggest impact is the number of vendors publishing their own Jepsen results.

glenjamin09:07:51

I used activeMQ a while ago, I remember it being a pain

glenjamin09:07:09

Had good results with RabbitMQ / AMQP though

glenjamin09:07:25

0.9.1 AMQP is a great queuing protocol

korny09:07:53

Yeah - still hoping to convince these people to consider RabbitMQ. They are a bit unkeen because there’s a desire for “AMQP 1.0 compatible” when Rabbit decided to stop at 0.9 compatibility

glenjamin09:07:07

it drops the best bits of 0.9.1 imo

thomas09:07:21

@korny I think you just described IBM business model 😉

glenjamin09:07:31

AIUI 1.0 removes lots of broker semantics from the spec, which ruins interop

glenjamin09:07:47

so it’s like JMS/STOMP - the messages are specified, but what they mean are up to the vendor

agile_geek09:07:57

Here's Kyle's Jepsen on RabbitMQ https://aphyr.com/posts/315-jepsen-rabbitmq not as bad as some but still food for thought

korny09:07:26

Yeah - it’s a bit mad, we were trying at one stage to talk to ActiveMQ with a QPID client, and realised that the client’s understanding of failover differed from the broker’s.

korny09:07:54

Kyle’s stuff on ActiveMQ was mostly around their dumb claims around locking

agile_geek09:07:19

@korny sounds like you've an interesting bit of consultancy there though. Wish I had something like that to get my teeth into.

maleghast09:07:16

@korny: Yeah, what @agile_geek said 🙂

korny09:07:30

It is interesting. Mostly, we’re using Jepsen to test out alternative architectures and API usage - so we’re note trying to prove linearizability or anything that mature, we’re trying to say “with our current API usage, if a server goes down / a network split occurs, what sort of errors happen, and can we monitor for them and manually fix problems”. And then making architecture decisions based on actual tests rather than documentation. It’s a good approach, evidence-based architecture… especially when tools writers make daft claims.

thomas09:07:31

@korny you are actually testing what happens when !@#$ hits the fan?

thomas09:07:44

that should get you at least some sort of Nobel prize

korny10:07:18

Yep. It’s not really that new ground - people like Netflix have been doing it for a while. But definitely hope to encourage this elsewhere...

agile_geek10:07:31

@korny do you plan to be brave enough to let lose Chaos Monkeys in live once monitoring in place?

korny10:07:55

It’s also a nice foot-in-the-door for clojure. Though Jepsen isn’t exactly a tool for people new to the language!

korny10:07:38

Anyway, I should get back to banging my head against why Java exclusive FileLocks are broken...

thomas10:07:55

good luck @korny , sounds like you need it

thomas10:07:13

anyway… our (internal) github server is down… time for tea… ttfn

thomas10:07:08

are there any meet ups this week or next week in LDN?

agile_geek10:07:13

@thomas: my ProCloDo meetup on Wed

thomas10:07:09

@agile_geek: cool, let me check if I can come to that one. thanks

otfrom10:07:40

agile_geek: what are the contra-indications for ProCloDo? Will it give me a rash?

thomas10:07:48

@otfrom: not if you apply it all day long

agile_geek11:07:44

@otfrom: potential parentheses blindness and RSI if taking with CIDER

otfrom11:07:18

always enjoy CIDER responsibly (me needs to lern2tyep)

otfrom11:07:58

thomas: I'm not sure I'd really apply anything that was from agile_geek. I'd probably want to reduce it

otfrom11:07:45

I think the reason I can't do haskell/elm/idris is that I can't type

martintrojer11:07:54

age is really limiting my ability to do clojure/ruby/python etc

martintrojer11:07:09

I just can't keep the whole codebase in my head anymore

mccraigmccraig11:07:48

whaddayamean can't type @otfrom ?

quentin11:07:21

he can’t type

agile_geek12:07:11

Oh the double edged sword that is a pun in the English language

agile_geek12:07:59

Just got back from a meeting with a client that might turn into consultancy that might then turn into building something in Clojure

quentin12:07:25

woot 🙂 good luck!

agile_geek12:07:49

Early days but we shall see

thomas12:07:01

wooohoooo @agile_geek good luck!!!

thomas12:07:06

let’s hope it works out

otfrom12:07:39

agile_geek: break a leg

agile_geek13:07:22

Oh I was in full Salesman mode. Just waiting on a short statement of probs so I can respond with a SOW for the consultancy piece.

xlevus13:07:22

MOAR EMOJIIS

xlevus14:07:03

no i mean, UTF-16. means you can cram more emojis into the address space.

glenjamin14:07:27

i thought most emoji don’t fit into the UTF-16 range?

agile_geek14:07:43

16 bits, 16 bits, when I were a lad we used t' code with a single bit....and the 1 was broken on ours. Sorry, lapsed into 4 Yorkshire men again for a second

glenjamin14:07:15

you’d be lucky to get a bit ‘round our end. We only had qubits and we were never really sure what they said

thomas14:07:28

sorry… miss understood you completely… DOH

xlevus14:07:53

but looks like @glenjamin is right, you can't get all the emojiis into UTF-16.

xlevus14:07:25

I vote we purge all non-ascii characters from UTF to make room for emojiis

thomas14:07:26

surely UTF-16 can consume 32 bits?

thomas14:07:51

same way as UTF-8 will use more than 8 bits of needed?

thomas14:07:19

or have I completely miss understood how it works?

glenjamin14:07:44

no, unlike -8 it’s fixed width

thomas14:07:19

DOH… how silly.

thomas14:07:35

so no real use case in that case?

mccraigmccraig14:07:22

UTF-16 is just dumb because it doesn't do anything that UTF-8 doesn't already do, and it's particularly dumb as an in-memory representation... i think it can extend like UTF-8 @glenjamin

glenjamin14:07:31

oh, i’m mistaken. UTF-16 is extendable

glenjamin14:07:43

UCS2 is the one which isn't