Fork me on GitHub
#clojure-uk
<
2018-10-25
>
3Jane07:10:38

Ooh that sounds promising. Where do you go off to?

yogidevbear07:10:08

I'm not on holiday, just wanted to share the feeling of relaxation ❤️

3Jane08:10:04

Ah! In that case: and a great morning coffee to you too XD

seancorfield07:10:18

I used to get told off for pointing out all the 🌴 around here...

seancorfield07:10:40

...when my Brit friends visit, they do the same! "Palm tree! Palm tree!" 🙂

😂 4
seancorfield07:10:38

So, hey, are folks using clj and deps.edn?

seancorfield07:10:48

Or are most folks still using boot or lein?

mccraigmccraig07:10:21

still on an unholy combination of lein-modules, lein and boot here

mccraigmccraig07:10:25

if the world goes that way we'll move to clj and deps.edn at some point, but i'm not sure what the benefit would be now

mccraigmccraig07:10:33

are y'all on clj and deps.edn @seancorfield? what benefits dyu see ?

seancorfield07:10:49

We've switched our entire dev/test/build pipeline over to clj / deps.edn as of this week.

seancorfield07:10:23

We're building uber JARs with (my fork of) depstar, and we've sunsetted our 2,000 line build.boot file.

seancorfield07:10:02

Even our legacy CFML apps now use clojure instead of boot to manage the startup/loading of Clojure code inside the CFML apps :rolling_on_the_floor_laughing:

mccraigmccraig07:10:16

that's a monster build.boot ! getting rid of that is probably a benefit all on its own

seancorfield07:10:29

Faster startup. Simpler tooling. Cleaner separation of concerns in the dev/test/build pipeline.

seancorfield07:10:56

Better control of dependencies too -- we have a monorepo and :local/root has been a great help.

seancorfield07:10:53

Plus, it's easier to dev/test stuff against local or git deps without having to package and deploy everything (we have an Archiva instance in-house for private deploys).

mccraigmccraig07:10:23

we don't have anything like that though - our build.boot is 400 lines without any fluff really - and shares project.clj with our lein and lein-modules stuff, so no duplicated :dependencies declarations

seancorfield07:10:34

To be fair tho', we had all our deps in external EDN files for ages with boot... so it wasn't as huge as switch as some people might see.

mccraigmccraig07:10:03

what's your approach to managing the more complex interactive developer builds for cljs @seancorfield - i.e. cljs-compile, less-compile, http-server, code-reloading? that's really the only thing we use boot for atm

seancorfield07:10:20

We do not do any cljs.

seancorfield07:10:35

We tried it about 3 1/2 years ago and decided it wasn't ready for prime time.

seancorfield07:10:47

We might revisit that next year for some projects. Maybe.

mccraigmccraig07:10:04

you do other UI stuff with live compile and reload tho ?

seancorfield07:10:33

All UI stuff is handled by our front end team in JS (React.js, Immutable.js, etc).

seancorfield07:10:46

Didn't ya read the Juxt interview? 😆

yogidevbear07:10:44

Was just about to say that 😉

seancorfield07:10:04

We do still have a couple of "traditional" HTML apps and those use Ring, Compojure, and Selmer so that all lends itself to live coding anyway (modify a template and Selmer will reload it automatically).

mccraigmccraig07:10:33

@seancorfield sadly my brain filled up a while back and details are lost in the overflow

seancorfield07:10:57

One of our main accelerators for getting off Boot has been this bug https://github.com/boot-clj/boot/issues/715

mccraigmccraig07:10:05

oh, you did that one @yogidevbear 🙂

mccraigmccraig07:10:15

huh, i've never seen that boot bug @seancorfield - it looks painful

seancorfield07:10:39

It's very painful. And very non-deterministic 😞 Some days I don't hit it at all, other days it blows up three out of every four test runs...

mccraigmccraig07:10:49

i think my principal difficulty with moving build system would be supporting our modular build - we have a monorepo with a bunch of modules in, and lein-modules works great with that setup

seancorfield07:10:21

We have a monorepo. That's why we switched from Leiningen to Boot (about three years ago!).

seancorfield07:10:41

We didn't try lein-modules (did it exist back then?).

seancorfield07:10:22

Ah, yeah, apparently it did...

seancorfield07:10:25

We were kinda burned out on lein back then. We wanted a more programmatic build pipeline and Leiningen plugins were just so painful to write and try to compose 😐

mccraigmccraig07:10:39

what do you use for modular build with clj and deps.edn ?

seancorfield07:10:26

Can you be a bit more specific about what you're asking?

seancorfield07:10:12

(we use :local/root for modules to depend on each other, we only build uber JARs)

mccraigmccraig07:10:46

i guess the two issues are - how do you manage the modular dependency tree for module build ordering, how do you manage common dependencies ?

mccraigmccraig07:10:50

how do you arrange cross-module code-reloading during development ?

mccraigmccraig07:10:32

actually, that's easily enough done with whatever the :source-paths equivalent is

mccraigmccraig07:10:03

ok, :local-root would work for my inter-module dependencies...

seancorfield07:10:34

We have versions/deps.edn for our "core" dependencies and it has an alias that uses :override-deps to specify all the "pinned" common dependencies.

seancorfield07:10:27

Then each subproject has a deps.edn with most dependencies specified as having {} coords -- overridden from the core file -- and any cross-module dependencies are in :deps with :local/root paths.

mccraigmccraig07:10:01

k, that would work for everything apart from the complex cljs builds then - we're still going to want something like boot for that

seancorfield07:10:05

So we do CLJ_CONFIG=../versions clj -A:defaults in a module and we get a REPL with everything loaded that it needs.

seancorfield07:10:10

(mostly we would do CLJ_CONFIG=../versions clj -A:defaults:test:test-deps:nrepl and get an nREPL server up with all the dependencies including test stuff, and then connect to it from our editor)

mccraigmccraig07:10:50

probably following the same path we did with lein, and using lein and lein-modules for everything apart from the things it sucks at, and boot for the rest, would also work for clj

seancorfield07:10:36

There's always boot-tools-deps to stitch the two things together...

seancorfield07:10:05

I was expecting we'd go down that path since we had so much invested in Boot. But in the end it was easier to ditch Boot than I ever imagined.

mccraigmccraig07:10:17

that's what we did with boot and lein - we load lein as a lib in boot to read a project.clj

mccraigmccraig08:10:02

it's only the cljs modules that we use boot for - everything else is simple

seancorfield08:10:37

I'm hoping to find time in 2019 to revisit ClojureScript and come back up to speed on what the state-of-the-union is there.

seancorfield08:10:55

I enjoyed using Reagent back in the day but the tooling was so painful.

mccraigmccraig08:10:49

ha, well the boot versions of the tooling are not so painful - our UI designer manages to run them without any trouble

mccraigmccraig08:10:58

and we are using the same programming model front-end and back-end, which is really nice

dominicm08:10:29

Front-end development with Leiningen is blugh, particularly if you're trying to also do server developement. Want to build sass and clojurescript? That will be two JVMs and no jack in support, thank you kindly.

otfrom08:10:58

still on lein here

otfrom08:10:04

and morning

maleghast09:10:33

morning all 🙂

keithmantell09:10:58

Still on lein - pack didn't produce an uberjar that worked for me - haven't investigated yet

maleghast09:10:35

We're using clj.tools, standing on the shoulders of JUXT with Edge, but it works really well

dominicm10:10:34

@keithmantell Feel free to reach out to me regarding the pack issue 🙂

dominicm10:10:34

Accidentally changing the topic here, what are people's expectations about asking questions on a project? I'm fine with Github issues, but I think some maintainers aren't (and that has put people off).

yogidevbear11:10:48

I've also seen resistance to questions in the form of GitHub issues on some projects. It's an interesting dilemma as sometimes that is the only way to reach out / communicate with the project authors. Feels like a gap/opportunity for a discussion feature within GitHub repositories

yogidevbear11:10:18

Not sure if this is something solved by other git hosts like gitlab, etc?

rickmoynihan11:10:43

I’m ok with it. I’d say you could argue if they have a question label, which IIRC is a github default label; they’ve implied they’re ok with questions as issues 🙂 If they’ve removed that label, then they’ve implied they’re not 🙂

yogidevbear11:10:51

Cool, I wasn't even aware of the question label. That's useful to know

rickmoynihan11:10:14

My point being, if they object and they had a label, you can say “but why do you have question label then? Maybe you should remove it.” 🙂

💯 4
otfrom12:10:53

github issues would work well for me too

dominicm14:10:53

I will update my README to make clearer how to bother me then I guess 🙂

seancorfield16:10:08

I find questions annoying if the README has taken pains to list all the ways to get support for a project. I've found that the people who tend to post questions as issues, at least on projects I've maintained over the years, seem to be a bit too lazy to either figure stuff out on their own or too lazy to read the project README/documentation 🙂

seancorfield16:10:43

But, sure, if there's no obvious channels for support listed in the README, you should accept questions as issues and be nice about it.

yogidevbear16:10:14

TBF, I think your documentation skills tend to be pretty thorough though @seancorfield 👍

seancorfield16:10:32

That's not what a lot of people say but, thank you! One company I worked for hired a technical writer after I left, to rewrite all the docs I had written for them :face_with_raised_eyebrow:

dominicm16:10:57

I'd be quite happy to field stuff on gitter, but I never have it open. I'm partially curious to know what people have available. Should I post a XMPP address?

dominicm17:10:26

I can get a free discourse

dominicm17:10:31

No I can't. I need more stars.

rickmoynihan11:10:06

We’re primarily still on lein transitioning bits to clj. We have a big lein project where we’re using clj to pull in extra clj based command line dev tooling. clj seems great for that usecase, i.e. we have a some clojure libs which also expose themselves as CLI tools, and we’re currently using clj to pull the tooling into the other project. Tooling is currently to do with generating test fixture data etc… soon will also be some data validation tooling. I also a few smaller projects that are using both clj and lein at the minute… and also lein-tools-deps 🙂. I hope to look at the various packaging options with clj but it’s not something I can prioritise just now.

rickmoynihan11:10:00

Also I think lein has some benefits in that it’s easier (not simpler)… and some of our team are new to clojure, so I’m not sure requiring a change of tooling/workflows is a good idea at the minute… if it’s opt in I don’t mind so much, as we can slowly transition.

danm12:10:57

We used boot from day 1 of our Clojure dev, so I don't know how anything else works yet 😉

keithmantell13:10:04

@dominicm Thank you sir - will do when my oauth2 alligator is slain!

grierson13:10:06

How many people have their conference attendance paid for by employer? (Looking at attending Clojure eXchange)

danm14:10:19

If I'm going to a conf it's either free or paid for by my employer 😉

danm14:10:14

By the same token, however, the only way I was able to get into Kafka Summit was by presenting and getting the fee waived due to that. The beeb don't mind paying for travel, hotels and food etc, but tend to balk at the actual conference ticket price 😉

dharrigan14:10:27

Anyone using dvlopt/milena as a kafka client?

mccraigmccraig15:10:34

we just switched to interop with the java api (for both producer and kafka-streams). it was very easy and after our second kafka wrapper (franzy this time) had gone stale it seemed like a better bet

dharrigan15:10:08

So, just invoke the java api directly, rather than a clojure wrapper?

mccraigmccraig15:10:20

well, we have our own wrapper, which puts the producer behind a protocol so we can swap in a dummy impl for test, but roughly yes

mccraigmccraig15:10:25

(we put pretty much all external dependencies behind a protocol so we can swap in dummies or have multiple impls)

thomas15:10:56

my current employer has paid for conferences in the past (and will do again for Clojure eXchange)

bananadance 4
thomas15:10:09

the previous employer didn't, so I paid for those my self.

😞 4
😁 4
Conor15:10:32

Are conferences valuable in and of themselves, or is it mainly the chance to get some time away from work to think about things?

3Jane15:10:26

Eh, depending who asks

3Jane15:10:47

(ie they present different ‘value’ to different categories of people.)

3Jane15:10:08

Given that you can watch conference talks online, what do you get if you actually go there? Answer: people who have self-selected into a pool of “people interested in X seriously enough that they’re willing to drop a significant amount of cash on the ticket”.

3Jane15:10:18

To a salesperson this is a collection of qualified leads. To a developer new to an area it’s an opportunity to hear some local gossip. To a consultant it’s an opportunity to present themselves as an authority on whatever subject.

3Jane15:10:27

You might find this interesting (it’s a meaty podcast episode, not just a product pitch): https://coachingforleaders.com/podcast/346/ - Croissants vs. Bagels is currently on my ‘to read soon’ list, because I noticed that often I was missing the actual value, ie people.

3Jane15:10:21

And re: who pays for conference attendance, I found that employers are often able to get discounts or free tickets because of owners having the right connections, or because conferences want to be associated with certain companies, or because organisers hope to sell something to your company

3Jane15:10:45

so it’s worth at least discussing your interest in a specific conference with management.

seancorfield16:10:50

I've generally had employers pay for conference attendance. I've sprung for the ticket for several local conferences myself tho' (but won't go over $300 -- which was PyCon about five years ago). When I was freelance, I considered conferences as self-improvement and usually budgeted about $10k per year for that (well, conferences and any other training I thought would be interesting).

seancorfield16:10:19

As for the benefits of attendance: being able to catch speakers in the hallway (or bar) and ask them more detailed questions about their talk is useful, on top of all the general in-person interactions. I've tended to come away with at least one new idea/technique from every conference, just based on chatting to other developers, away from work.

yogidevbear19:10:43

I bought my ticket for this year's ClojureX conference the day after last year's conference which was completely worth the money. However, having a family and a mortgage, etc, means anything expensive that requires a ticket, flights and hotels is beyond my personal means without me being extremely selfish. In these cases it would probably either mean speaking at the conference to offset ticket cost or company sponsorship.

practicalli-johnny19:10:13

I am very grateful to those who spend their own money on the ClojureX conference (and those who convince their employer to do so of course). I do all I can to make ClojureX worth a lot more than you pay for it. Always open to suggestions how we can give you more value by attending.

❤️ 16
practicalli-johnny19:10:20

I get a lot of additional value from a conference by meeting people and finding out what they are doing. There are so many interesting companies and people using Clojure in all sorts of ways, sometimes it seems we only scratch the surface of this with the conference talks. Maybe I am just good at getting people to tell me everything...

practicalli-johnny19:10:45

I also like to have some time-boxed learning, so the conference gives me that motivation to think about something and consider how I might apply it to the work I am doing. I usually find ideas stick more from a conference than watching a video (although, it depends on the topic).

seancorfield19:10:09

☝️:skin-tone-2: Yes, this! Being at a conference feels like "learning" -- you're in a "classroom" away from work and office/home distractions. Watching a conference talk after the fact doesn't have that atmosphere.

seancorfield19:10:31

That said, I'm extremely glad that many conferences post the talk videos for free -- I haven't been able to attend both Strange Loop and Clojure/conj the last several years and it was great to set aside a few hours the other day to watch the Strange Loop talks by Evan Czaplicki and Stu Halloway.

👍 4
dotemacs21:10:52

When learning/picking up things, a comment made in passing between the talks, i.e. hallway track or an angle a presenter serves some topic, might nudge you in a direction of some new approach that will make your technology choice/work easier. Sometimes you might feel like you didn’t pick up anything “revolutionary” but with time some ideas will simmer and settle and will help you down the road. And from what I remember from various sources, the claim is that you learn the best when you’re not trying to actively learn, but it should be through some informal interaction/play.

👍 4