Fork me on GitHub
#admin-announcements
<
2015-09-24
>
nblumoe05:09:08

Can anyone recommend a book to learn more about the JVM and how it works? Ideally focusing on that and not just a chapter in a Java book or relying on deep Java knowledge.

sander07:09:55

Hi, i'm wondering about common practice for composing systems. My cljs program combines multiple async data streams (sensor data, twitter stream, output log, bluetooth communication). Currently i'm implementing each component in a separate namespace, and sharing multiple input/output channels from core.async (some are (mult)ed) between them. Everything is set up in a central (run) function that initialises all the component event loops. REPL development is messy so right now i'm just restarting the whole compiled app every time. Is this typically a use-case for e.g. pub-sub, or stuart sierra's component?

sander07:09:17

In dnolen's core.async talk he says (according to a note) "Think about the abstract event types and handling, not concrete event sources", so i wonder whether this argues for having just one combined pub-sub event channel instead of multiple input and output channels

sander07:09:07

@nblumoe: no recommendation, but also got interested and found http://docs.oracle.com/javase/specs/jvms/se8/html/index.html - not really an introduction but at least it's precise and correct

nblumoe08:09:24

thanks @sander! I was hoping for something instructional, with some text book hand holding. haven't started to read this yet, but "specification" doesn't sound like the most digestible read 😉

sander08:09:32

nblumoe: what kind of things do you want to learn about the jvm? for getting familiar with registers, stacks, frames etc. i really like the SICP book

jmglov08:09:31

If there's anyone around who knows leiningen well, I've got a really strange issue that I could really use some help with.

jmglov08:09:49

Pop over to the #C0AB48493 channel if you're feeling charitable. simple_smile

colin.yates08:09:57

@sander - yes, I think that is where something like Stuart’s component system will help. Each discrete chunk defines a ‘start’ and ‘stop’ method. These chunks are wired into a single system. When that system is started all the chunks start….you can see where I am going.

colin.yates08:09:39

The nice thing is that order is preserved, so if A depends on B depends on C then C then C will start then B then A. Closing will be done A then B then C.

colin.yates08:09:10

I have seen a number of people declare their channels as a component in themselves and pass them around. Other components simply tap into them.

sander08:09:23

@colin.yates: thanks! i think i'll particularly like the order-preserving closing so that i don't need to ctrl-c the whole program each time i want to reload some code. putting channels directly in the component system sounds interesting, will try sketching out some things

colin.yates08:09:49

a google for core.async and figwheel might help

nblumoe08:09:30

@sander I could not point out specific aspects directly. However, atm everything that happens under the hood when running Clojure applications is arcane to me, as I don't have a Java/JVM background. Topics I would like to touch are JIT compilation, Garbage Collection, Bytecode. I just want to demystify the runtime. Rather concrete than abstract.

nblumoe08:09:58

Interesting that you point at SICP...

piotrek15:09:54

@mr-spock: http://symbolhound.com/ might be more user friendly for programmers searching for symbols