conf-proposals

https://github.com/clojureconj/clojureconj2016/wiki/Suggested-Topics
2016-08-11T01:31:22.000042Z

good feedback, thanks seancorfield

2016-08-11T01:31:38.000043Z

working title is "Rigorous Testing of Time-Sensitive Systems"

2016-08-11T01:32:30.000044Z

while testing is the broad focus, the testing of the scheduler is what the talk'll be about, so the abstract deserves a rewrite to focus on that.

seancorfield 2016-08-11T01:32:53.000045Z

Sounds interesting!

2016-08-11T01:33:41.000046Z

thanks!

2016-08-11T01:37:54.000047Z

maybe something like "testing in clojure 334: mocking, dependency injection, and a deep dive on rigorous testing of a reentrant scheduler"

alexmiller 2016-08-11T02:18:38.000048Z

Too long :)

alexmiller 2016-08-11T02:19:05.000049Z

My theory is that any title with a : or a - in it should be cut in half :)

lvh 2016-08-11T03:17:56.000051Z

I have just submitted my proposal to the conj šŸ™‚ Iā€™m pretty excited; itā€™s a new venue for me

lvh 2016-08-11T03:18:32.000052Z

(My proposal is about calling C code, so I donā€™t know how many people care ā€” but I think itā€™s an excellent example of how Clojureā€™s strengths are really quite general and it turns out to do well in corners where you might not expect it)

2016-08-11T03:26:14.000053Z

whoa c code?

alexmiller 2016-08-11T03:36:33.000055Z

@lvh thx for submitting!

lvh 2016-08-11T03:52:23.000056Z

@alexmiller: alas I comically missed the SL CFP; my mom is visiting so I won't be able to make that :(

lvh 2016-08-11T03:53:11.000057Z

@bvulpes glad to hear; my main concern is audience; it doesn't seem very popular right now

lvh 2016-08-11T03:53:26.000058Z

Could be a chicken-egg problem :)

seancorfield 2016-08-11T05:05:19.000059Z

Feedback on this: "Specifying the World (Singles) World Singles runs around 100 Internet dating sites, with over 40,000 lines of Clojure at the core. As part of a massive refactoring to support a new API-based version of our platform, we're focusing on our data model and the associated validation and data transformation rules. Find out how we're using clojure.spec across multiple application layers to engage our business team and clarify our rules, improve robustness and confidence, and simplify our code. I'll show how we use clojure.spec to support three different data models (input, domain, and persistence), to automate validation and testing, and to ease the transition between them."

šŸ‘ 4
ericnormand 2016-08-11T15:59:25.000063Z

@seancorfield: I'm especially interested in testing using clojure.spec

ericnormand 2016-08-11T16:00:07.000065Z

have you come up with good ways of tying clojure.spec into clojure.test?

eggsyntax 2016-08-11T16:01:48.000066Z

@ericnormand: so far folks seem to mostly be treating it as a distinct test architecture, ie different lifecycle from clojure.test testing, because it may take much longer if you're pushing lots of generated data through your code.

eggsyntax 2016-08-11T16:02:27.000067Z

That's just based on anecdotes, though, mostly in #C1B1BB2Q3

ericnormand 2016-08-11T16:03:51.000068Z

interesting

eggsyntax 2016-08-11T16:04:07.000069Z

We're thinking about primarily having our CI server do it.

ericnormand 2016-08-11T16:04:08.000070Z

I definitely used test.check with clojure.test

ericnormand 2016-08-11T16:04:15.000071Z

it makes some sense, though

ericnormand 2016-08-11T16:04:27.000072Z

with a CI server, you could have it continuously run the tests

ericnormand 2016-08-11T16:05:22.000073Z

and log any failing cases somewhere

eggsyntax 2016-08-11T16:05:41.000074Z

Yep, or just announce them in build notifications.

ericnormand 2016-08-11T16:06:02.000075Z

well, the problem is you might find some after the build has been deployed

eggsyntax 2016-08-11T16:06:22.000076Z

(but yeah, with drillable detail of course -- especially useful with shrinking šŸ˜„ )

eggsyntax 2016-08-11T16:06:55.000077Z

Sure, yeah, depends on your branch/deployment choices I guess.

eggsyntax 2016-08-11T16:08:54.000078Z

But I'd expect to have regular unit tests to catch common or critical failures, with the generated stuff primarily catching edge cases. You could also have separate configs such that some amount of generated data is pushed through your code pre-deployment, and then lots more on a less frequent basis to catch rare edge cases before users do.

eggsyntax 2016-08-11T16:09:16.000079Z

I feel like best practices around spec are still very much in flux, though.

ericnormand 2016-08-11T16:19:04.000080Z

yeah

ericnormand 2016-08-11T16:19:20.000081Z

that's why I was asking about how they do testing

ericnormand 2016-08-11T16:20:09.000082Z

I think you're right about pushing a small # of generated data through before is a good idea

ericnormand 2016-08-11T16:20:25.000083Z

and I had good experiences doing that with test.check

eggsyntax 2016-08-11T16:20:29.000084Z

And I'd trust Sean's opinion way more than my own here, since he's been using it in prod for an extended amount of time, whereas our usage is still pretty experimental.

ericnormand 2016-08-11T16:23:56.000085Z

for sure

ericnormand 2016-08-11T16:24:04.000086Z

so far, my testing with clojure.spec has been limited

ericnormand 2016-08-11T16:24:22.000087Z

it has usually taken too long to run the tests

ericnormand 2016-08-11T16:24:36.000088Z

I did not experience that with test.check

ericnormand 2016-08-11T16:24:43.000089Z

usually because I was writing custom generators

seancorfield 2016-08-11T16:28:27.000090Z

@ericnormand: we already use test.check with Expectations for property-based testing so this isnā€™t terribly different for us: we expect certain things of the summarized result of running check...

ericnormand 2016-08-11T16:29:09.000091Z

I see

ericnormand 2016-08-11T16:29:19.000092Z

and how do you print out the results of failures?

seancorfield 2016-08-11T16:30:22.000093Z

Weā€™re currently rebuilding our CI environments and planning to have a suite of generative tests that run there and run longer (bigger test size) that either donā€™t run as part of the DEV tests or only use small test sizes.

seancorfield 2016-08-11T16:44:12.000094Z

@ericnormand: We use expect more-of and run the output of stest/check thru stest/abbrev-result ā€” Expectations does a good job of pretty printing the :failures key if there are any.

seancorfield 2016-08-11T16:45:58.000095Z

I may look at enhancing Expectations so that it can do it more clearly, but itā€™s pretty good already

ericnormand 2016-08-11T16:49:14.000096Z

cool

seancorfield 2016-08-11T16:53:02.000098Z

Soā€¦ not much feedback in terms of changes to my title / abstract? Doesnā€™t look like @alexmiller is around for feedback...

ericnormand 2016-08-11T17:26:16.000099Z

@seancorfield: maybe I'd put clojure.spec in the title

seancorfield 2016-08-11T17:40:03.000100Z

"Specifying the World (Singles) with clojure.spec"?

seancorfield 2016-08-11T17:41:21.000101Z

I think that loses some snappiness ā€” and @alexmiller already hinted that titles with : and - are often too long and should be split / shortened. I think that applies to with a bit as well.

ericnormand 2016-08-11T17:45:51.000102Z

> (clojure.)Specifying the World (Singles)

2016-08-11T17:46:29.000103Z

@ericnormand: That might contain too many parens, even for lispers šŸ™‚

alexmiller 2016-08-11T18:05:57.000104Z

@seancorfield: abstract looks good

alexmiller 2016-08-11T18:06:51.000105Z

Your last title is ok although it seems like you have a more specific focus on your abstract re layered data models that maybe could be the focus of the title

seancorfield 2016-08-11T18:07:40.000106Z

"Specifying Layered Data Models with clojure.spec"?

alexmiller 2016-08-11T18:15:11.000107Z

Sure

ericnormand 2016-08-11T18:19:43.000108Z

comments welcome: Testing stateful, concurrent, and async systems using test.check Generative testing is great for testing pure functions. But it is also used to test the behavior of stateful systems that change over time. Theyā€™re often designed for highly concurrent usage, such as databases and web services. And then sometimes your code is also asynchronous, such as in JavaScript. Learn several patterns for testing these more interesting situations. These find race conditions, corner cases, and inconsistencies across platforms.

šŸ‘ 2
ericnormand 2016-08-11T18:30:18.000109Z

actually, please rip it apart

ericnormand 2016-08-11T18:30:32.000110Z

would love to put it through the gauntlet

alexmiller 2016-08-11T18:35:11.000111Z

so this is a good hook. the part people often donā€™t do as well is to tell the reviewers in the private comments what the ā€œseveral patternsā€ are explicitly - that is, what are you actually going to talk about.

alexmiller 2016-08-11T18:35:53.000112Z

you donā€™t need to do so here, but thatā€™s what I (as a reviewer) want/need to see - because thatā€™s actually more useful to us in understanding the talk

alexmiller 2016-08-11T18:36:08.000113Z

(and believing you actually have specific things and didnā€™t just write the abstract :)

ericnormand 2016-08-11T18:36:13.000114Z

šŸ™‚

alexmiller 2016-08-11T18:37:18.000115Z

if a proposal comes in early enough that I can ask that question, I will often go back to the submitter and do so, but most proposals come in in the last few days and itā€™s not possible to read and respond to them. In that case, reviewers have to make their best guess. And I guess conservatively. :)

ericnormand 2016-08-11T18:37:56.000116Z

how much introduction to test.check will I need?

alexmiller 2016-08-11T18:38:08.000117Z

in the abstract or in the actual talk?

ericnormand 2016-08-11T18:38:43.000118Z

in the talk

ericnormand 2016-08-11T18:40:00.000119Z

and is it still earlier enough in the cfp for the back and forth you just mentioned?

alexmiller 2016-08-11T18:50:19.000120Z

yes re back and forth :)

alexmiller 2016-08-11T18:50:49.000121Z

I think in the talk it depends what expectation you want to set for the attendees

alexmiller 2016-08-11T18:51:05.000122Z

your abstract should make that clear

alexmiller 2016-08-11T18:51:25.000123Z

the #1 cause of an attendee not liking a talk is because it was different than their expectation

alexmiller 2016-08-11T18:51:58.000124Z

if you donā€™t state some level of assumed knowledge in the abstract then itā€™s on you to explain it (or not meet some peopleā€™s expectations)

alexmiller 2016-08-11T18:52:24.000125Z

itā€™s totally fine though to say ā€œassumes basic knowledge of generative testing or test.checkā€ or something like that

alexmiller 2016-08-11T18:52:38.000126Z

assuming we are multi-track for the conj, which I think we are (donā€™t remember)

alexmiller 2016-08-11T18:52:46.000127Z

then itā€™s on me to schedule it right :)

alexmiller 2016-08-11T18:53:13.000128Z

if itā€™s single track then I think a certain amount of explanation is required

ericnormand 2016-08-11T18:54:05.000129Z

ok, thanks for this

ericnormand 2016-08-11T18:54:07.000130Z

very helpful

ericnormand 2016-08-11T18:55:03.000131Z

would you recommend putting in a link to some place where they can get the basic knowledge?

ericnormand 2016-08-11T18:55:12.000132Z

like a prior clojure/west talk?

ericnormand 2016-08-11T18:56:24.000133Z

oh, and now I'm filling out the form and it says maximum 5 sentences for the abstract

ericnormand 2016-08-11T18:56:46.000134Z

would you rather me cut it down or do some runons? šŸ™‚

seancorfield 2016-08-11T19:06:50.000135Z

Once weā€™ve submitted a talk, do we get a chance to update it if we think of new stuff?

seancorfield 2016-08-11T19:07:43.000136Z

Like expanding on the main points or whatever (your response to Eric above made me wonder if I needed to be more expansive in that section).

alexmiller 2016-08-11T19:20:36.000137Z

@ericnormand: link/reference is fine. Iā€™d treat what the form says as general guidance re length - yours looks fine.

alexmiller 2016-08-11T19:21:12.000138Z

@seancorfield: if you want to send me a replacement I can update your entry, or you can also just resubmit. I usually run a pass before we do anything and delete old revs of a talk

alexmiller 2016-08-11T19:21:33.000139Z

in either case, a heads up would be helpful

ericnormand 2016-08-11T19:33:25.000140Z

ok, submitted!

lvh 2016-08-11T23:58:47.000142Z

@ericnormand: Mostly just positive feedback: I have used test.check for exactly that purpose and it was pretty great šŸ™‚