This page is not created by, affiliated with, or supported by Slack Technologies, Inc.
2016-12-08
Channels
- # adventofcode (31)
- # beginners (97)
- # bigdata (2)
- # boot (276)
- # cider (17)
- # cljsrn (5)
- # clojure (150)
- # clojure-china (3)
- # clojure-conj (8)
- # clojure-greece (1)
- # clojure-india (1)
- # clojure-korea (1)
- # clojure-new-zealand (4)
- # clojure-russia (40)
- # clojure-spec (119)
- # clojure-uk (116)
- # clojurescript (87)
- # code-reviews (110)
- # core-async (4)
- # cursive (11)
- # datomic (26)
- # garden (4)
- # gorilla (7)
- # hoplon (82)
- # humor (1)
- # jobs (2)
- # jobs-discuss (10)
- # luminus (17)
- # onyx (60)
- # planck (2)
- # play-clj (2)
- # protorepl (70)
- # re-frame (121)
- # reagent (7)
- # ring-swagger (3)
- # rum (16)
- # test-check (16)
- # untangled (12)
- # yada (20)
Morning
Morning.
A day of two halves for me yesterday. A morning of sorrow; pint of water 1, brand new Macbook Pro 0. Gutted I’ve £££££££ paperweight, but equally gutted that I’d lost my Clojure spec playground which was the basis for my company internal hackathon in the afternoon. The afternoon was a little better, and I got to play with Clojure for the afternoon / evening which was nice. Obviously didn’t achieve what I wanted to (who does in a hackathon?) but I’ve got a better mental model of Clojure Spec now.
@agile_geek I didn’t use that word.
I spilled a small amount of coffee on my old MBP and it died but I unplugged it quick, took the back off and let it dry. Then I had to very carefully scrape dried milk/coffee off a tiny bit of the circuit board, switched it back on and crossed my finger...and fortunately for me it worked! Do you have Apple Care (I have had to use it twice in past but can't remember if it cover accidental damage but think it does)
@agile_geek doesn’t cover accidental damage. Taken it to Western Computers around the corner (authorised repairer) and they’re looking at it.
Reminds me I spent over £200 on after sales support for my Lenovo X1 Carbon when I bought it this year...need to check I'm covered for accidental damage!
@paulspencerwilliams none of this is making you feel better I know! However, glad you have a better understanding of Spec...you can explain it to me someday!
@agile_geek I’ll try. I hope to expand my hackathon project to gain more ‘leverage’. What I wanted to achieve is to apply a spec around a query object populated by a conversation style (think NLP) UI. The spec would first prevent invalid queries from being passed to the end repo, but also, the conversation would use
s/explain-data
to drive subsequent questions until s/valid?
Hmm, interesting.
I'd like to follow your progress on that
@agile_geek yeah, suppose the equivalent in Java would be to use reflection to assertion the validity of a bean and perform actions thereof.
@agile_geek I’ll try and keep working on it, and maybe run it as a session at BirminghamFP etc.
Share the code in github?
@agile_geek I will. It’ll be in the company Bitbucket too 🙂
@paulspencerwilliams thanks for the reminder to check my backups 🙂
I have most things on DropBox, but I have a separate task to encrypt client-confidential stuff and move it to DropBox, which I have to kick off manually
@korny haha, happy to help 🙂 Annoyance is losing ‘working data’ like bash_history etc.
I've been using syncthing instead of Dropbox and am largely happy with it. Use it to "backup" camera pictures to my desktop and laptop. Also contains my shared files, wallpapers etc. It uses an encrypted p2p system, so I don't have to worry about encrypting the contents
hmm - looks nice - where do you sync your data to for backups? Also, is there a mobile client? One of the things I like about DropBox is there are clients everywhere.
I use duplicity to encrypt private stuff that I then dump on DropBox. I also use TrueCrypt, but I’m trying to use that less as it seems to be abandonware
DON'T USE TRUECRYPT8. The signing key didn't align, I think there were other issues. There is a mobile client. I call it a backup because it's on my phone, laptop and desktop.
If you don't mind something proprietary, there's resilio sync by BitTorrent company. Slightly more polished UX. I prefer open source cryptography.
fair enough. It’d be pretty easy to set up a sync to your own AWS storage too, for longer-term backups.
Well, AWS pricing is beyond what I'd probably be willing to pay, given the cost of a buyvm storage vps. But yep.
and yeah, the TrueCrypt8 stuff is one of the reasons I want to stop using it. It’s annoying that there doesn’t seem to be an open source alternative.
I'd probably look at, there's this great backup service. Run by a BSD guy. I mostly use PGP for encrypted files now.
I'm also not sure if I can use AWS, last time I did I got a huge bill. I've never paid it. Not sure what would happen Tbh. I shut down all my servers, but apparently that's not enough to stop paying.
re: buyvm and the like - I’m willing to pay a premium for not having to change anything very often 🙂 That’s the other reason I use DropBox - it’s a big commercial company, I can be lazy and just use it, it’s not going anywhere fast. I’ve used the same web host for 15 years, it’s great to not have to change very often!
Duplicity uses GPG - it’s very nice for incremental encryption: http://duplicity.nongnu.org/
BuyVM are small VPS, so you probably wouldn't hear about them because most people want big and cheap (so oversold)
Open question: I've used core.async dozens of times but I always struggle with this so...help!
If I have a non-blocking take <!
in a go
block, how can I return the value from the take?
I can think of two ways:
1. If I need to process the value in a separate chain of fn's simply call the fn with the value from within the go
block i.e. (go (my-fn (<! channel)))
2. Use an atom to store the returned value an access it from outside the go
i.e. (go (swap my-atom (<! channel)))
;; this feels wrong!
FYI my use case is I need to test some code that has a blocking put >!!
and inside the deftest
I have passed a dummy channel to the code under test but I need to set up a non-blocking take or my test blocks and never returns. This is fine as I just call (go (<! test-channel))
before invoking the code under test. However, I wanted to check the value put on the test-channel
in an is
. I tried calling the is
within the go
but it didn't work (I suspect cos it's a macro?). I ended up storing the result of the <!
in an atom and testing that but it felt wrong.
Any better approaches?
@agile_geek can you not return the value as the result of the go block and then do a blocking take on that ?
@mccraigmccraig hmmm, maybe? LEt me try
it’s pretty good for CSP, but I rarely model things as communicating sequential processes
my approach to avoiding callback hell has mostly been to stop doing so many damn async things in sequence
@mccraigmccraig that worked but talking to my teammate here he came up with simply making my test-channel
a buffered channel by supplying a size of 1 let [test-channel (chan 1)]...
and then doing a blocking take on the test-channel
in the test after the call the the code under test.
@otfrom yes, i've much preferred manifold - the error handling built in to the abstractions makes them much easier to work with
@glenjamin that's probably my gripe - i have rarely (ever?) come across a problem which is well modelled by a stream of values with no error-states
@glenjamin i've got hundreds of async things in sequence - promise-monad to the rescue, there is no callback hell
well, callback-hell examples IME are mostly lots of async actions in sequence without any abstraction, naming or grouping
everything is async - composed chains of operations can get very long
not hundreds of things in sequence with no structure
but is it actually all async, or is it forced to be async because a non-zero number of things in the chain are?
almost everything is async - i think there is one example of local tempfs access which isn't, all network i/o is async
webserver is async, db client is async, http client is async etc
where in most cases i aim to reduce the async chain to one action - by pushing all of that onto the server
ah, yeah, client side is different
The example I was testing was server side but almost all the core.async here is client side.
What services would peeps recommend for allowing an external service to perform http requests to your local development machine behind NAT / firewall?
I once wrote a query with 15 deep nested sub queries!
I once had to refactor a 2000 line SQL statement that someone else had written.
@glenjamin ngrok was the one I was thinking of...
@peterwestmacott that one was just a fraction under 5000 lines (the upper limit for DB2 at the time!)
I wrote about 10 of similar complexity (required due to a ridiculously abstract data model!) and each took about 1.5 weeks to write and test!
Grr… I hate being on tech support for something I know needs level 3 support. Wading through all the hoops to get to a technical person...
@korny "shibboleet"
@otfrom I know... but I don't really know any SQL beyond select * from table_name where xxx = 'yyyy'
I’m not sure line count is much of a proxy for complexity when it comes to SQL. Certainly a better heuristic than for minified JS though.
I must say that bounded contexts / duplication in schemas has helped greatly on projects we’ve employed it in to minimise massive queries.
https://www.terraform.io/docs/providers/github/index.html I'm struggling to get a grasp on the purpose of this provider in terraform. Any use cases spring to mind?
basically for the same reason clicking around the web UI of your firewall isn’t great
@glenjamin A declarative version of your github team & their permissions then?
Might be interesting to see a slack provider & google apps. You could declaratively add a new team member and have them get an email, slack, etc. all together.
Another question google doesn't seem to have much answer for: How does the local version of DynamoDB differ from that in the cloud? Could someone use it to build a dynamodb hosting service? Vendor lock-in is something I try to not permit.
@otfrom except it's a dead project, and systemd is here and pallet is going to die
and jeez pallet is inscrutable in my altogether too extensive experience