Hacker News new | comments | ask | show | jobs | submit login
Visualising an Asynchronous Monad (roscidus.com)
80 points by astrada on Oct 27, 2014 | hide | past | web | favorite | 12 comments

nice demos, these feel a bit like playing with an oscilloscope

It goes beyond just demos... we can apply this to a vast number of OCaml Mirage libraries and speed things up quite a lot.

One of the nice things about OPAM (the OCaml package manager) is that it can recompile upstream library dependencies if some new optional features gets inserted downstream. In this case, Thomas has put together a "lwt.profiling" library that adds profiling hooks, and then every upstream Mirage library gets systematically recompiled against this new functionality.

This way we can have profiling-free production code, and then just "opam install mirage-profiling" and have a coffee while everything gets instrumented. This is going to be incredible as we hook up more complex distributed unikernel-based systems.

Very interesting. I've been thinking about a similar feature that involves TAP-based tests. Where can I read more about this and any other similar features that OPAM has?

The homepage is at https://opam.ocaml.org, and the repository of packages at https://github.com/ocaml/opam-repository. Mailing list is opam-devel@lists.ocaml.org.

Interesting, would it make sense to store/convert the trace in the CTF format[0]? Would the viewers from LTTng[1] be useful in analyzing this trace data?

[0] https://www.efficios.com/babeltrace [1] http://lttng.org/files/lttv-doc/user_guide/c42.html#mainwind...

Thanks for the links. I haven't used these tools - are they useful? Which features are most helpful? Certainly we'll want to convert to or from some Linux trace format to combine traces that involve Linux and Mirage machines.

I've tried LTTng once, but it was quite complicated to set up, and required patching the kernel. It seems they improved that, it only needs a kernel module so I might give it another try.

I also used 'perf timechart'[0] in the past, or rather I tried to, but the traces on any realistic workload generated SVG files so large that it was too slow to open in firefox/inkscape etc. Your approach seems to be more scalable as it doesn't generate one huge image/SVG but rather generates that zoomable view via Javascript on-the-fly, right?

[0] http://web.archive.org/web/20130729151516/http://blog.fenrus...

I've used bootchart and had the same problem. You really need to generate the display dynamically to make the zooming work. Some other things my viewer does that don't work with static SVG:

- Show labels at a readable size, whatever the zoom.

- Keep labels within the screen bounds where possible rather than letting them scroll off.

- Fade out large-scale features (e.g. arrows spanning long time frames) when you get close, so they don't blot out everything in between.

- Project y values through tanh so you can see everything at once, but focus on the bit you're interested in.

Of course, there are other opportunities for adding interaction too.

Oscilloscopes are actually the best way to debug data flow (since the 50s), this looks like the future of Haskell debugging to me.

Funny how things are going back to fundamental ways of visualizing systems. Will Haskell be praised by Electric Engineer now ?

Directly coding concurrent stuff at all is highly unsafe. Haskellers prefer safety, not debuggers.

Yes, because "typed programs can't go wrong" is not really a promise, but a desperate wish.

Applications are open for YC Summer 2019

Guidelines | FAQ | Support | API | Security | Lists | Bookmarklet | Legal | Apply to YC | Contact