lecture 14: core.async