Comment by spyckie2

6 years ago

What would make explorables really take off is a killer framework to make building them easier, ala Ruby on Rails.

I know ncase has built some frameworks and I applaud his work, but this space just needs a lot more investment.

Here's what I think the killer framework will do really, really well: (Note this is VERY rough, it comes from spending 20 minutes trying to create an explorable a long time ago and realizing that the tooling just isn't right)

- 1) Turn the act of coding a model into mostly verbal reasoning by having a great framework language / API. Rails actually did this, turning the entire building a website into composing english. It greatly reduced the distance between the concepts / app that you were building and how you went about building it - i.e. Model has_many :users

- 2) A standardized convention on inputs, outputs, relationships, defaults, and time (step functions).

- 2b) A standardized convention of defining one unit, populations and groups of units within populations

- 3) Automated scaffolding to display raw data, with add-on libraries to easily scaffold formatted or visual data.

- 3b) Automated scaffold to visualize a unit, a population, groups within populations, and units within groups (a scaffold of a population is like table rows)

- 3c) Language / api should also make it dead simple and intuitive to control converting from numerical data to textual data. i.e. if you are modeling stress, what does 60 points in stress mean?

I think something inspired by ActiveModel (my Rails bias is showing) would be a great way to define the above since defining a strong way to define your data is also how you would get automatic scaffolding language and high level functions on top of it.

- 4) A dead simple way to display and embed models anywhere. 1 line of javascript or a 1 line import and you can plug it into jekyll, hugo, (any static site generator, really)

- 5) A killer tutorial.

We're working on this with https://idyll-lang.org/, it does some of the things you mention already (standard conventions for how to do common tasks, standard set of widgets, handles loading data, extensible plugin system, etc).

But it is a big undertaking and there is still a lot of work to do. If anyone on HN wants to contribute or give feedback you can reach me at mconlen at cs dot washington dot edu.

Funny that your #1 requirement, for me, would be turning coding into mostly visual reasoning. Different skillsets, I suppose.

I think of code as laying out the results of a program execution (in terms of changing GUIs or lists of transformed data), and then building up an abstraction that captures all the instances.

So, a visual tool that let me paint examples, and build (named) abstractions that group them, would be my ideal development environment. Spreadsheets are the oldest somewhat supporting this desired workflow, and things like Brett Victor's Ladder of Abstraction or tools like http://aprt.us/ are the next level, but still fall short.

I haven't used it myself, but I wonder if Idyll comes close? https://idyll-lang.org/

  • unfortunately, not really. The language you have to speak is still in variables, buttons and code.

    I'd love to be able to write in a way that feels more like documenting models rather than writing code. Admittedly this is a really spoiled point of view since ideas are cheap but execution is hard.

    A quick example is as follows:

    Persons have stress level from 0-100, start with random stress, and belong in the following environment conditions:

    Normal: Stress + 0 / year

    Low Income: Stress + 5 / year

    High Income: Stress - 5 / year

    Change functions:

    Every year, 0-3% persons change from low income to normal income

    0-1% of persons change from normal income to high income

    Population has 100 persons

    Groups:

    stress level > 50 is "high risk of heart attack"

    stress level < 20 is "low risk of heart attack"

    This kind of definition should be enough to chart out # of people in the high risk group over a period time.

    What I imagine is writing more or less the above as psuedocode and then a framework to automatically scaffold a basic data view and controls for time / data manipulation.

    edit i took a further look at idyll, and this language can probably be built on top of idyll.