This page is not created by, affiliated with, or supported by Slack Technologies, Inc.
- # announcements (1)
- # aws (2)
- # beginners (43)
- # calva (7)
- # cider (5)
- # cljs-dev (1)
- # cljsrn (2)
- # clojure (68)
- # clojure-android (10)
- # clojure-conj (2)
- # clojure-italy (10)
- # clojure-nl (3)
- # clojure-spec (3)
- # clojure-uk (128)
- # clojurescript (10)
- # core-async (47)
- # cursive (32)
- # datomic (35)
- # events (1)
- # fulcro (24)
- # funcool (2)
- # graphql (2)
- # jobs (3)
- # juxt (2)
- # leiningen (3)
- # luminus (1)
- # off-topic (7)
- # om (1)
- # onyx (2)
- # pedestal (32)
- # perun (2)
- # portkey (2)
- # re-frame (4)
- # ring-swagger (2)
- # rum (3)
- # shadow-cljs (137)
- # spacemacs (4)
- # testing (3)
- # tools-deps (101)
- # uncomplicate (2)
- # unrepl (5)
- # vim (2)
That's an unusual manifestation of synaesthesia, @mccraigmccraig! Is the smell of a monad reminiscent of anything else?
@rhinocratic it's a heady blend of the excitement of possibility, the verve of comprehension realised and a dash of confusion!
we've used a promise-monad for ages to make promise-based async computations easy to read and write... but i've had an idea brewing that i could use a different monad which combines reader, writer, state and promise monads, which would have some nice properties  thread application context to fns without any explicit parameters  tracing of async control flow for debugging (since stack context is lost in async world)  passing a coarse operation-id around to use as a log-context-id to enable straightforward filtering of aggregated logging
it's a little twist on https://github.com/bwo/monads/blob/master/src/monads/rws.clj
That sounds really useful. Interacting with promise-based stuff (particularly Node) has been a pain-point for me.
Sorry for the delay @mccraigmccraig - on a lengthy call. Thankfully, I'm not making much use of promises at present, but that wasn't the case 6 months ago when using a bespoke test driver that needed to make Node calls.
yeah I'm currently looking at ways to make my cljs stuff easier. Got tabs open on manifold/deferred - your recommend I think @mccraigmccraig?
could be @alex.lynham - we use manifold on our backend - but manifold is clj only atm
manifold does have solutions to the immediate promise problems of composition, short-circuiting and error-propagation - (`manifold.deferred/chain` and
but manifold won't help with cljs - we settled on using
funcool/cats promise monads (clj-only : https://github.com/funcool/cats/blob/master/src/cats/labs/manifold.clj, clj+cljs : https://github.com/funcool/cats/blob/master/src/cats/labs/promise.cljc ) along with
cats.core/alet which provide similar composition, short-circuiting and error-propagation to manifold, but cross-platform
my frustration with cljs backends has been growing of late. I kinda feel like the heavily async nature of node is a hard boundary to writing easily comprehensible code
@alex.lynham our (clj) backend is fully non-blocking/async - the code is generally straightforward
Good Mornin' everyone - loving the morning's topic so far, though I do feel a little out of my depth...
a (possibly theistic) fervour that soft threads are for mapping to hardware threads, not for use as application constructs
it's worked out well - and being able to do things like control the concurrency of bulk operations by simply setting a buffer size is amazing
> soft threads are for mapping to hardware threads I will happily expose my ignorance here - care to explain? 🙂
Creating more threads just produces complexity for no benefit unless there are hardware resources they're mapping to that can actually be used in parallel (e.g. heavy network I/O can often be massively parallelised, but if you're CPU bound then there's no point having code threads much > CPU cores [+ hyperthreading])?
I mean, that's the way we've generally done it. We only use async in places where we're going to be waiting on a lot of requests to external systems like REST APIs, dynamodb, etc, so we can fire a load off in parallel. We very occasionally pmap the actual local data munging, but anything more complex than changing a map to a pmap for entirely pure operations often brings more confusion and complexity than benefits
additionally things like promises (core.async too) reify operations as values which makes controlling execution very easy - it's just buffer size
a (slightly semantically different) alternative to pmapping which we use quite a lot @carr0t is to put a bunch of ops on a (manifold) stream, with a buffer-size determining concurrency, and map over the stream
@otfrom give me that in 15", with 32GB, 1TB SSD, a retina screen resolution and good linux compatibility and i'd jump from macosx
I think I'm on mac for the forseeable because I also heavily use logic pro for tracking audio
@mccraigmccraig 15" is bigger than I want. 32GB would be nice. I can get away w/16GB. I do like that it can have a 1TB SSD
it works well for async ops too - so we can easily control the concurrency of requests to an api, or how hard we are hitting the db with a bulk update
https://www.theregister.co.uk/2018/01/02/lenovo_ftc_superfish_settlement/ Ah it was America only, nvm then.
(I’m looking for a new laptop for own use, so it’s interesting to hear about other people’s setups)
(Incidentally, thank you everyone who pitched in for my Noise Cancelling Headphones Research, it helped a lot and I’m happy with the result 😄 )
@guy the malware was on their non-thinkpad stuff too. I wouldn't buy anything from Lenovo that wasn't X- or T-
@guy installing Ubuntu on a Lenovo is easy and automatically removes any dubious software for you
@mccraigmccraig take a look at the Lenovo X1 Extreme and I think you will see much of what you want
FYI Ubuntu 18.10 is out next Thursday. Already running it on my old x201T laptop (with Emacs 27, self compiled). Ubuntu looks nicer and desktop is very responsive.
Time to start my own company again so I can reclaim the VAT on such a laptop
It is a company expense and so pre-tax, VAT can also be reclaimed if over £2000 on the flat rate scheme (or just in general if not flat rate)
so you're effectively getting it free (for some definition of free) plus the VAT back?
@otfrom my X1 extreme would be half the price, £2,059 for 16Gb, i7, 256Gb SSD, and FullHD screen, or £2,262 with 4k screen
If you do buy direct from http://Lenovo.co.uk and you only intend to run Linux upon it, make sure you get the Windows Home version. If it's Windows Pro you will pay an additional £48. Windows Home is effectively free as manufacturers offset the price with sponsored software. Best approach is to choose cheapest laptop option and then customise to bump all the hardware specs up.
> umm.... as long as you don't think your company's money is real, then yeah, free yes good point
I guess I'm used to freelancing as a gear journalist where I pay my tax lump sum at the end of the year... unless I buy deductible things with it in which case I have a smaller tax bill - more efficient to buy things that way than use other income
obviously it's all the same pool, more of a psychological/accounting thing. I've been using the same MBP since 2013 so I need to psych myself up before dropping that kind of 💵
I have two lovely fluffy masters of my own and having noise cancelling headphones are a wonderful invention when the cats come in too early for feeding time... Meow... Meow... Meow...
Our cats are indoor-only. Well, they have a fully-enclosed 12'x6'x6' outdoor run during the day (which I can watch from my home office), but everyone is in at dusk.
Here is a picture of my feline overlords from when they were kittens and a lot less demanding https://hacktogetherldn.github.io/images/kittens-snuggled.png
A relative has a house in the country (not as glamorous as it sounds) and several cats, apparently I’ve been remotely adopted
(Every time I stay over, one of the cats sleeps in the guest room. It’s like she wants to move in… but I’m resisting)
@mccraigmccraig - I am going to go out on a limb here... Are you asking about a Clojure library, or perhaps some emerging tech I've not heard of yet..?
I mean you're not asking if anyone on here has a tame Clojure Dev Pool made up of felines, right?
i just want a sense check of some code i wrote - https://github.com/employeerepublic/promisespromises/blob/drws-monad/src/prpr/cats/drws.cljc
Yeah, I just skimmed the first bit of the documentation and I had to stop and scoop my brain back up where it came spilling out of my ears...
you probably do understand most of it, it's just presented in a way which makes you think that you don't...
@mccraigmccraig I think that's the first time I've seen someone make type/record constructors private (via