The Julia Programming Language
Enforcing topological cell evaluation and disposable module scopes guarantees notebook memory strictly mirrors visible code, eliminating the hidden variables and merge conflicts that plague legacy scientific environments.
AI-assisted summary of Interactive notebooks ~ Pluto.jl | Fons van der Plas | JuliaCon 2020 — original source. Check the original for full context.
Source published:
Key ideas
- Pluto.jl introduces a reactive programming notebook for Julia where the execution state is guaranteed to match visible code, eliminating hidden workspace bugs caused by stale execution. (9:50)
- The notebook runtime uses static code analysis to construct a directed acyclic graph (DAG) of cell dependencies, re-evaluating only downstream cells and recycling Julia modules to purge deleted symbols. (11:05)
- Pluto saves notebooks as standard Julia (.jl) files ordered by dependency topology, enabling clean Git version control, command-line script execution, and headless automated grading. (18:11)
- Interactive HTML/JavaScript controls can be bound directly to Julia variables using the @bind macro without backend boilerplate, streaming client inputs directly into numerical computations. (14:53)
Detailed notes
## Background Published by The Julia Programming Language YouTube channel on July 30, 2020, this JuliaCon 2020 presentation features Fons van der Plas introducing Pluto.jl, an interactive notebook system for Julia. The video description explains that Pluto automatically tracks global references to reactively re-evaluate downstream cells, cleans up stale workspace state, supports HTML and JavaScript widget bindings, and saves notebooks as clean, Git-friendly plain Julia files.
## TL;DR Addressing the persistent hidden state, reproducibility issues, and merge conflicts endemic to Jupyter and vintage REPL environments, Fons van der Plas and Nick present Pluto.jl, a reactive notebook system written in pure Julia. Pluto uses static code analysis of cell ASTs to construct a directed dependency graph, re-evaluating downstream logic in topological order and isolating state in disposable modules so that runtime memory strictly matches visible code. Through live demonstrations of tidal curve modeling and live webcam SVD compression, the speakers showcase reactive parameter tweaking via the `@bind` macro. Finally, they show how Pluto persists notebooks as standard, executable `.jl` scripts with clean Git diffs, closing with plans for browser-based interactive sharing and classroom education initiatives at TU Berlin and MIT.
## Atmosphere & style The presentation carries an enthusiastic, inventive, and warm energy driven by a genuine passion for educational accessibility and modern interface design. The pacing flows smoothly between Fons's conceptual storytelling and Nick's grounded live data demos, punctuated by a charming, staged phone call interruption from a user questioning reactive performance with long-running cells. It feels like an engaging, approachable tech reveal that balances serious programming language mechanics with delightful visual demonstrations like live-canvas dragging and webcam image compression.
## Bulletin - [09:50](https://www.youtube.com/watch?v=IAF8DjrQSSk&t=590s) Pluto.jl introduces a reactive programming notebook for Julia where the execution state is guaranteed to match visible code, eliminating hidden workspace bugs caused by stale execution. - [11:05](https://www.youtube.com/watch?v=IAF8DjrQSSk&t=665s) The notebook runtime uses static code analysis to construct a directed acyclic graph (DAG) of cell dependencies, re-evaluating only downstream cells and recycling Julia modules to purge deleted symbols. - [18:11](https://www.youtube.com/watch?v=IAF8DjrQSSk&t=1091s) Pluto saves notebooks as standard Julia (.jl) files ordered by dependency topology, enabling clean Git version control, command-line script execution, and headless automated grading. - [14:53](https://www.youtube.com/watch?v=IAF8DjrQSSk&t=893s) Interactive HTML/JavaScript controls can be bound directly to Julia variables using the @bind macro without backend boilerplate, streaming client inputs directly into numerical computations.
## Key takeaways - [01:06](https://www.youtube.com/watch?v=IAF8DjrQSSk&t=66s) Traditional university-level scientific computing remains constrained by 1970s-style environments despite massive leaps in language expressiveness. - [01:47](https://www.youtube.com/watch?v=IAF8DjrQSSk&t=107s) Standard notebooks like Jupyter suffer from persistent global state, non-reproducible out-of-order execution, and merge-hostile bloated file formats. - [09:50](https://www.youtube.com/watch?v=IAF8DjrQSSk&t=590s) Pluto enforces a strict reactive paradigm where session state is entirely and exclusively described by visible code at all times. - [06:00](https://www.youtube.com/watch?v=IAF8DjrQSSk&t=360s) Each Pluto cell is restricted to a single expression, ensuring one discrete output above the cell and encouraging modular code design. - [11:05](https://www.youtube.com/watch?v=IAF8DjrQSSk&t=665s) Static AST analysis maps definitions and references into a directed dependency graph without requiring code pre-execution. - [11:55](https://www.youtube.com/watch?v=IAF8DjrQSSk&t=715s) Workspace hygiene is maintained by swapping out disposable Julia module scopes to delete symbols and reclaim memory via garbage collection. - [13:17](https://www.youtube.com/watch?v=IAF8DjrQSSk&t=797s) Pluto manages heavy computational cells by evaluating strictly downstream dependencies and planning duration-based execution warnings for slow runs. - [14:53](https://www.youtube.com/watch?v=IAF8DjrQSSk&t=893s) The `@bind` macro pairs standard Julia variables with interactive HTML inputs, turning notebooks into dynamic web applications. - [16:44](https://www.youtube.com/watch?v=IAF8DjrQSSk&t=1004s) Custom JavaScript and browser APIs, such as live webcam feeds, can pipe data directly into standard Julia matrices for real-time numerical processing. - [18:11](https://www.youtube.com/watch?v=IAF8DjrQSSk&t=1091s) Notebooks are saved as pure, lightweight `.jl` scripts with cell outputs omitted, ensuring clean Git diffs and native interoperability with standard editors. - [19:40](https://www.youtube.com/watch?v=IAF8DjrQSSk&t=1180s) Saved files re-order cells topologically to ensure valid top-to-bottom script execution via `julia notebook.jl` while preserving visual UUID layout orders in comments. - [21:54](https://www.youtube.com/watch?v=IAF8DjrQSSk&t=1314s) Immediate reactive feedback empowers educational workflows, enabling real-time inline validation alerts and headless automated homework grading.
## Detailed walkthrough ### [00:03](https://www.youtube.com/watch?v=IAF8DjrQSSk&t=3s) Why Pluto Was Created: The Gap in Programming Environments
Fons van der Plas introduces himself and his collaborator Nick, setting up their presentation of Pluto.jl, a new interactive notebook system for the Julia programming language. Reflecting on his background teaching programming in elementary schools, Fons shares the surprising realization that early education tools have made learning code remarkably intuitive. Young students use tactile robots that trace drawn lines as their physical "script," or visual environments like Scratch where drag-and-drop blocks virtually eliminate syntax errors. In those settings, eight-year-olds can master fundamental programming concepts in about a week.
```mermaid flowchart TD accTitle: Evolution of Programming Environments accDescr: Contrast between elementary visual tooling and university-level scientific computing environments.
subgraph Elementary["Elementary School Tooling"] A["Line-following Robots / Scratch"] --> B["Intuitive, Visual, Zero Syntax Errors"] end
subgraph University["University & Scientific Tooling"] C["General & Expressive Scripts"] --> D["Complex Abstractions"] D --> E["50-Year-Old REPL / File Interfaces"] end
B -.->|"The Environment Gap"| E ```
By contrast, learning programming at the university level suddenly becomes arduous. The difficulty stems not from programming being inherently hard, but from the shift toward general-purpose, highly expressive languages built on complex abstractions. While the languages themselves have grown immense in power, developers are stranded using computing environments reminiscent of the 1970s. As Fons describes the disconnect: “programming itself is easy but these languages are so powerful that if you're still using these environments from 50 years ago it feels like are blindly manipulating symbols.” To match modern expressive power, developers need a genuinely friendly, supportive interface.
[01:47](https://www.youtube.com/watch?v=IAF8DjrQSSk&t=107s) The Pitfalls of Jupyter and Modern Alternatives
In scientific computing, Jupyter notebooks became the standard interface because they provide an interactive REPL with inputs, outputs, and rich formatted text combined in a single document. However, prolonged use exposes deep operational flaws: - **Persistent Global Scope**: Variables defined once linger in memory indefinitely, decoupling the actual runtime state from the visible text. - **Bloated File Formats**: Saving execution output directly into the notebook file creates messy, merge-hostile version control diffs. - **Reproducibility Failure**: A notebook authored on one machine frequently fails to run on another due to out-of-order execution and hidden state.
Cloud offerings like Google Colab address certain reproducibility concerns, but Fons laments that they do not rethink the core developer experience: “what bothers me the most is that they still make no improvement to the programmer environment it's still the same concepts.” Meanwhile, the JavaScript ecosystem developed tools like Observable, pioneering the "reactive notebook" paradigm where the editor acts as a proactive collaborator rather than an antagonist. Because JavaScript is not well suited for scientific computing, Fons and Nick set out to create Pluto—bringing reactive, state-consistent computing natively to Julia.
[03:09](https://www.youtube.com/watch?v=IAF8DjrQSSk&t=189s) Live Demo: Exploratory Data Analysis and Reactivity
Nick takes over to demonstrate Pluto in action, beginning with the browser-based interface. In Pluto, users write code inside individual cells, and each cell evaluates a Julia expression. Unlike traditional notebooks that append evaluation outputs underneath, Pluto renders output directly above the code cell. Demonstrating basic variable assignments, Nick changes the value of variable `b` in one cell, causing downstream cells that depend on it to refresh instantly.
```mermaid flowchart LR accTitle: Pluto Basic Reactivity accDescr: Changing an upstream variable triggers an immediate downstream cell re-evaluation.
CellA["Cell 1: b = 10"] -->|"Reactive propagation"| CellB["Cell 2: a = b + 5"] CellB -->|"Displays output above cell"| Out["Output: 15"] ```
To demonstrate a realistic workflow, Nick moves beyond toy arithmetic to model ocean tidal patterns using an external CSV file: - **Integrated Documentation**: Unsure whether the CSV reader accepts a raw path string, Nick relies on Pluto’s built-in live docs, which confirm that a simple filename argument is valid. - **Dataset Loading**: He loads tidal observation data from Cascais (near Lisbon, Portugal), verifying the tabular contents using Pluto's integrated data preview. - **Data Splitting**: Hours and sea-level measurements are partitioned into distinct variables, extracting the first and last columns respectively. - **Visualization**: Nick imports `Plots.jl`, plotting the raw tidal data against time to reveal an oscillating, periodic waveform.
[06:00](https://www.youtube.com/watch?v=IAF8DjrQSSk&t=360s) Single-Expression Cells and Mathematical Modeling
Attempting to overlay a sine wave onto the tidal scatter plot, Nick writes a secondary plotting command inside the same cell and hits an error. Pluto explicitly forbids multiple expressions in a single cell. This design choice guarantees that every cell has exactly one discrete output displayed directly above it, while intentionally nudging the programmer toward cleaner, modular code. Pluto provides a one-click automated action in the UI to resolve the issue.
Nick sets up a sinusoidal model:
$$\sin\left(\frac{2\pi \cdot t}{\text{period}}\right)$$
He assigns `period = 12`, guessing that tidal peaks occur approximately every 12 hours, which produces a remarkably close fit on the first try. Adding an adjustable phase offset variable initialized to zero, he observes that while 12 hours is close, a slightly longer duration like 13 hours might fit the observed peaks better.
[07:50](https://www.youtube.com/watch?v=IAF8DjrQSSk&t=470s) HTML Sliders, Markdown, and Generalizing Data
Rather than manually typing numbers to tweak the fit, Nick utilizes Pluto's HTML binding capabilities to connect variable values directly to browser input elements: - **Binding Sliders**: Using `@bind`, he links the `period` variable to an HTML `<input type="range">` spanning a range of 11 to 14 with fine step intervals, allowing the model curve to stretch and contract smoothly across the plot as the slider moves. - **Dynamic Markdown**: He creates a Markdown cell—which in Pluto is simply a standard code cell returning a Markdown string—to interpolate and display the active numerical value (e.g., `12.38 hours`). - **Phase Control**: A second slider controls the `phase` variable across an interval between -3 and 3. - **Testing Model Portability**: To test if the sinusoidal fit holds across locations, Nick replaces the `"cascais"` file reference with `"catania"`. Pluto’s reactivity cascades across the graph instantly, reloading the Sicilian sea-level data and confirming the model's validity.
[09:50](https://www.youtube.com/watch?v=IAF8DjrQSSk&t=590s) The Reactive Paradigm: State Matches Code
Fons returns to explain the foundational philosophy of reactive notebooks. In Pluto, the state of the session is strictly synchronized with the editor view: “at any instant the program state is completely described by the code you see and this is guaranteed to be true at any point during your process with your notebook.” Unlike standard REPLs or Jupyter workspaces, Pluto guarantees that stale code executed an hour earlier cannot linger in memory to pollute current calculations.
When a user edits any cell, Pluto coordinates two distinct operations under the hood: 1. **Dependency Analysis**: It determines which downstream cells rely on modified identifiers and re-evaluates them in topological order. 2. **Scope Cleanup**: It purges variables, functions, types, and modules created by previous iterations of modified or deleted code.
```mermaid flowchart TD accTitle: Pluto Cell Modification Lifecycle accDescr: How Pluto parses dependencies and cleans up workspace state upon a cell edit.
Edit["User modifies or deletes a cell"] --> Analysis["Static Code Analysis"] Analysis --> Step1["Re-evaluating Downstream Cells"] Analysis --> Step2["Clean Up Old Code"]
subgraph Step1["Step 1: Downstream Execution"] S1A["Identify Defined & Referenced Symbols"] --> S1B["Traverse Directed Acyclic Graph (DAG)"] S1B --> S1C["Re-evaluate downstream cells in order"] end
subgraph Step2["Step 2: Workspace Hygiene"] S2A["Identify deleted symbols"] --> S2B["Discard old module scope"] S2B --> S2C["Transfer active variables to new module scope"] end ```
[11:05](https://www.youtube.com/watch?v=IAF8DjrQSSk&t=665s) Topological Execution and Workspace Hygiene
To establish correct execution order across cells, Pluto uses static code analysis rather than runtime inspection. Before executing a cell, Pluto inspects its abstract syntax tree (AST) to build two lists: the variables defined within the cell and the variables referenced by it. By cross-referencing these lists across all cells, Pluto maintains a directed dependency graph. Whenever a cell changes, the runtime traverses the graph downward from that node, executing affected cells in valid topological order.
Cleaning up old code presents a unique technical hurdle because Julia does not natively support un-defining variables or removing symbols from a global module scope. If a user defines `potato = 10`, uses it downstream, and subsequently deletes the definition, Pluto ensures that downstream cells immediately throw an `UndefVarError: potato not defined`. This cleanup applies uniformly to variables, constants, user-defined functions, and package imports (`using`/`import`).
To achieve this without native un-definition primitives, Pluto isolates runtime state within disposable Julia modules. When variables must be deleted or replaced, Pluto instantiates a fresh module scope, carries forward the surviving, actively defined variables, and abandons the old scope to be reclaimed by the garbage collector.
[13:17](https://www.youtube.com/watch?v=IAF8DjrQSSk&t=797s) Performance, Dependencies, and the Long-Running Cell Dilemma
Just as the talk is transitioning to how reactivity works in practice, an incoming call interrupts the presentation. It is Luka, calling with a pressing concern that often troubles people considering reactive workflows:
> “I'm working on a model at Pluto and I have a few cells that take a really long time to run, so I'm worried that every time I change a variable it will run all those cells again and that seems really inefficient.”
Fons reassures him that Pluto handles this gracefully behind the scenes. Because Pluto computes a dependency graph for every cell, it executes strictly what is downstream of a change: “Pluto figures out the dependencies of each cell and it will only run the cells that actually need to be run.” Furthermore, if an author wants to make multiple edits without re-triggering heavy computations after each keystroke, they do not have to commit them one by one. Pluto permits batching changes together so that everything is processed cleanly in a single execution pass.
When Luka follows up to ask what happens if someone triggers a cell without realizing a massive tree of dependencies will take an enormous amount of time to execute, Fons points out that code execution can always be canceled manually. However, Pluto can also leverage its own history:
> “Pluto knows how long cells take to run, and we're working on some user interface that will also tell you how long all of the dependent cells take to run, and maybe if it takes over a minute or something it can warn you.”
Relieved, Luka thanks him and hangs up so Fons can resume the demonstration.
```mermaid flowchart TD accTitle: Pluto Dependency Analysis and Execution accDescr: Diagram illustrating how Pluto evaluates cells based on directed dependency graphs and warns against slow runs.
subgraph Analysis["Static Code Analysis"] A["Modified Cell"] --> B["Dependency Graph"] end
subgraph Decision["Execution Engine"] B --> C{"Downstream cell?"} C -- "No" --> D["Skip Execution"] C -- "Yes" --> E["Check Past Run Durations"] E --> F["Batch Run Only Affected Cells"] E -. "Long duration".-> G["UI Warning (> 1 min)"] end ```
[14:53](https://www.youtube.com/watch?v=IAF8DjrQSSk&t=893s) Reactivity and Interactivity with `@bind` and PlutoUI
Returning to interactivity, Fons highlights that reactive dependencies turn a notebook into a dynamic application without any complex architectural overhead. When an upstream variable such as `s` is defined in one cell and squared in another cell, modifying `s` immediately forces the dependent cell to re-evaluate.
> “The only thing you do is you take your parameter and define it in a different cell.”
To turn raw parameters into graphical controls, Pluto introduces the `@bind` macro. Instead of hard-coding a variable, `@bind` ties the Julia variable to the current state of a web input element:
```julia @bind s Slider(1:500) ```
Typing into an HTML text field or moving a slider updates the Julia string or numeric variable instantly, driving all downstream computations across the notebook.
- Basic controls are bundled into the companion package `PlutoUI.jl`, providing drop-in elements like range sliders without requiring custom front-end code. - Developers familiar with HTML and JavaScript can build custom input elements; Pluto transmits the emitted values directly back into Julia. - Fons demonstrates an interactive bounding-box tool where dragging a mouse on an HTML canvas instantly streams the rectangle's pixel dimensions back into the notebook environment.
[16:44](https://www.youtube.com/watch?v=IAF8DjrQSSk&t=1004s) Advanced Custom Controls: Live Webcam and SVD Image Compression
To showcase the power of custom JavaScript bindings, Fons opens an educational notebook designed to explain the Singular Value Decomposition (SVD). The notebook embeds a webcam element hooked into the browser:
> “There's my face, and when I take a picture, it actually binds the image data to this array, so it's a 2D array that for each pixel has the black and white value.”
Once the snapshot is captured, Pluto immediately exposes it as a standard two-dimensional Julia matrix. From there, standard linear algebra routines process the matrix. The notebook computes the SVD and lets the user inspect the first ten singular pairs. Fons binds the rank truncation threshold to a slider, making it possible to scrub back and forth to watch low-rank matrix approximations progressively reconstruct the camera portrait in real time.
While building bespoke components like the camera capture tool requires writing JavaScript, Fons explains that users do not need front-end development knowledge for ordinary work: the camera widget is slated for inclusion directly inside `PlutoUI.jl`, and everyday parameter exploration requires nothing more than splitting code across cells.
[18:11](https://www.youtube.com/watch?v=IAF8DjrQSSk&t=1091s) The Minimal `.jl` File Format and Git Integration
Pluto rejects bespoke, bloated JSON formats in favor of plain Julia files. Saving only raw source code—and omitting cell outputs entirely—keeps files lightweight, readable, and perfectly compatible with standard developer tooling.
Fons displays a side-by-side view featuring Pluto on the left and a plain text editor on the right: a running notebook translates into a compact 16-line `.jl` script. Edits in the notebook interface auto-save to disk instantly.
```julia ### A Pluto.jl notebook ### # v0.11.0
using Markdown using InteractiveUtils
# ╔═╡ a1b2c3d4-... potato = melon * 3
# ╔═╡ e5f6a7b8-... melon = 5
# ╔═╡ Cell order: # ╠═e5f6a7b8-... # ╠═a1b2c3d4-... ```
Because the notebook is saved as standard Julia code, it can be executed headless from the command line (`julia notebook.jl`) or brought into another session:
> “It's not just including inside REPL, it's you can include one notebook in the other notebook or if you're students you can test your students' homework one by one just by including those Julia files.”
The file format handles cell ordering gracefully. In Pluto, reactive cells can appear in any visual order on the canvas—such as defining `potato = melon * 3` above the definition of `melon = 5`. To keep the saved file valid for standard Julia linear execution, Pluto re-orders the definitions top-to-bottom according to their dependency graph, appending a list of cell UUIDs at the very end of the file so the visual layout can be reconstructed when reopened in Pluto. This approach ensures version control stays clean: Git diffs reflect only exact source-code alterations, completely free of the noisy diff churn caused by updated plot metadata or serialized base64 outputs.
[20:45](https://www.youtube.com/watch?v=IAF8DjrQSSk&t=1245s) Installation, Future Roadmap, and Web Distribution
Fons summarizes Pluto's core foundation: fully reactive execution, pure `.jl` persistence, built-in interactivity, pure Julia development with minimal dependencies, and a simple installation workflow:
```julia import Pkg; Pkg.add("Pluto") import Pluto; Pluto.run() ```
Looking ahead, Fons highlights two major milestones:
1. **Frictionless Browser Sharing:** While Pluto exports clean static HTML and PDF documents, the long-term objective is frictionless sharing of fully live, interactive notebooks without requiring end users to install Julia locally or configure complex cloud hosting: > “What you really want is to be able to export these fully interactive notebooks, so send someone a link where they can play with your notebook directly in the browser.” Because Pluto is lightweight enough to run on free hosting tiers like Heroku, the team plans to make one-click deployments standard, alongside embedding reproducible package environments directly within the notebook file itself. 2. **First-Class Interactive Education:** Making Pluto the premier tool for teachers and students.
[21:54](https://www.youtube.com/watch?v=IAF8DjrQSSk&t=1314s) Pluto in Education and Future Plans
Education is a central motivation for the project, as beginners benefit enormously from immediate, reactive visual feedback. Fons presents an automated grading exercise where a student is tasked with writing the formula for the golden ratio. When a candidate formula evaluates to a negative number, the notebook reactively triggers an inline validation alert: *“Oops, the golden ratio should be positive.”* Correcting the minus sign to a plus sign satisfies the reactive check and flips the indicator to show that the answer is correct.
- Teachers gain an intuitive environment for producing lively course material, while automated grading pipelines can evaluate student submissions simply by running their `.jl` files as automated scripts. - Pilot programs and classroom trial runs are slated for the upcoming semester at TU Berlin and MIT, with Fons attending directly to collect feedback from both instructors and students. - Insights gathered from these courses will be funneled into documentation, authoring guides, video tutorials, and dedicated education packages containing pre-built interactive components, multiple-choice widgets, and grading helpers.
Fons closes the talk by encouraging the community to reach out via GitHub to contribute, leaving the audience with an inspiring sign-off quote from Matthijs Cox.
## Notable quotes > [09:50](https://www.youtube.com/watch?v=IAF8DjrQSSk&t=590s) at any instant the program state is completely described by the code you see and this is guaranteed to be true at any point during your process with your notebook. — Fons van der Plas
> [13:17](https://www.youtube.com/watch?v=IAF8DjrQSSk&t=797s) Pluto figures out the dependencies of each cell and it will only run the cells that actually need to be run. — Fons van der Plas
> [20:45](https://www.youtube.com/watch?v=IAF8DjrQSSk&t=1245s) What you really want is to be able to export these fully interactive notebooks, so send someone a link where they can play with your notebook directly in the browser. — Fons van der Plas
## Mentioned Pluto.jl, Fons van der Plas, Nick, Julia, Scratch, Jupyter, Google Colab, Observable, Matlab, Plots.jl, Luka, PlutoUI.jl, Heroku, TU Berlin, MIT, Matthijs Cox
## Video description Introducing a fresh, new notebook system for rapid prototyping! Pluto understands global references between cells, and reactively re-evaluates cells affected by a code change. At JuliaCon, we will show how Pluto can liven up your workflow.
Whether you’re a scientist, a finance professional or an engineer, you use notebooks like Jupyter to tell a story. You fiddle a bit with your code, running cells here and there, and when you’re done - you restart the kernel and keep your fingers crossed that it’ll all work together when you press “run all”.
🙋 In Pluto, things work differently. When you change a variable, Pluto automatically re-runs the cells that refer to it. And when you delete a cell, the variables, methods and imports from the old code disappear. Unlike Jupyter or Matlab, there is no mutable workspace, but rather a one-to-one correspondence between variables and code.
🚨 Reactivity is not just fun for mathematical tricks! It guarantees that the code you see exactly matches the variables you're working with, eliminating bugs before you even knew you had them.
⚡ Your notebook becomes interactive by splitting your code into multiple cells! Changing one cell instantly shows effects on all other cells, giving you a fast and fun way to experiment with your model. And to really spice up your notebook, you can use HTML sliders, or even custom JavaScript widgets, to drive your Julia variables. Change λ = 5 to @bind λ Slider(1:10), and all cells that use λ are controlled by a slider.
💾 Notebooks are saved as pure Julia files and can be exported as rich documents with cell output to HTML or PDF. By separating source code and output, you can take full advantage of git for version control and you can import Pluto notebooks as if they are written in a regular editor.
After a live demo, the second part of the talk will unveil some of the tricks that power Pluto. The core concepts are: - static code analysis to find global definitions and references in cells; - directed graph of cells, which tells Pluto which cells to run, in which order; - managed workspace for code to live in, and cleaning the workspace in milliseconds; - responsive connection between JavaScript clients and Julia.
Pluto is written in pure Julia, which comes with two benefits: first, it’s easily installable as a package without requiring Python - you only need Julia and a web browser. Second, it is ready to be improved by Julia developers who we hope to inspire at the conference. Pluto is an exciting project to work on, and we are eager to hear your ideas!
Resources Pluto.jl home page: https://plutojl.org/ Pluto.jl repository: https://github.com/fonsp/Pluto.jl
Contents 00:00 Opening 00:19 Introduction 00:42 Why we made Pluto? 01:06 Programming is easy, programming languages are powerful, but our environments are 70s vintage 01:47 Jupyter notebooks: strong points and pain points 02:23 Alternatives to Jupyter 03:09 Enter Pluto. Live demo 06:00 Pluto doesn't allow multiple expressions in one cell, here is why 07:50 Binding value variable to slider 08:33 Markdown cells in Pluto 09:50 Reactive paradigm 10:35 Taking look behind scene on how reactivity works 11:05 I. Re-evaluating downstream cells 11:55 II. Clean up old code 13:25 Call about re-evaluating cells, which have a long evaluation time 14:53 Interactivity in Pluto 16:22 Using JavaScript you can make any interactive element you want 16:44 Example: using your picture to define matrix (two dimensional array) 17:21 Manipulation picture inside Pluto 17:47 Do you need to know JavaScript and HTML? 18:11 Pluto.jl minimalist file format 20:45 Recapitulation 21:03 What's next? 21:54 Pluto for education 23:23 Thank you!
Want to help add timestamps to our YouTube videos to help with discoverability? Find out more here: https://github.com/JuliaCommunity/YouTubeVideoTimestamps
Interested in improving the auto generated captions? Get involved here: https://github.com/JuliaCommunity/YouTubeVideoSubtitles
[Source](https://www.youtube.com/watch?v=IAF8DjrQSSk)