mirror of
https://github.com/vale981/emacs-ipython-notebook
synced 2025-03-05 09:01:40 -05:00
1194 lines
24 KiB
Text
1194 lines
24 KiB
Text
![]() |
{
|
|||
|
"cells": [
|
|||
|
{
|
|||
|
"cell_type": "markdown",
|
|||
|
"metadata": {
|
|||
|
"ein.tags": "worksheet-0",
|
|||
|
"slideshow": {
|
|||
|
"slide_type": "slide"
|
|||
|
}
|
|||
|
},
|
|||
|
"source": [
|
|||
|
"# The Emacs IPython Notebook\n",
|
|||
|
"### JupyterCon 2018\n",
|
|||
|
"\n",
|
|||
|
"John Miller ([email](millejoh@mac.com) / [github](https://github.com/millejoh/) / [linkedin](www.linkedin.com/in/john-miller-3720a811\n",
|
|||
|
")) "
|
|||
|
]
|
|||
|
},
|
|||
|
{
|
|||
|
"cell_type": "markdown",
|
|||
|
"metadata": {
|
|||
|
"ein.tags": "worksheet-0",
|
|||
|
"slideshow": {
|
|||
|
"slide_type": "slide"
|
|||
|
}
|
|||
|
},
|
|||
|
"source": [
|
|||
|
"# The Plan"
|
|||
|
]
|
|||
|
},
|
|||
|
{
|
|||
|
"cell_type": "markdown",
|
|||
|
"metadata": {
|
|||
|
"ein.tags": "worksheet-0",
|
|||
|
"slideshow": {
|
|||
|
"slide_type": "-"
|
|||
|
}
|
|||
|
},
|
|||
|
"source": [
|
|||
|
"- Thanks\n",
|
|||
|
"- About me\n",
|
|||
|
"- Introducing EIN\n",
|
|||
|
"- About Emacs\n",
|
|||
|
"- A Short History\n",
|
|||
|
"- Feature dive\n",
|
|||
|
"- What's next\n",
|
|||
|
"- Demo?"
|
|||
|
]
|
|||
|
},
|
|||
|
{
|
|||
|
"cell_type": "markdown",
|
|||
|
"metadata": {
|
|||
|
"ein.tags": "worksheet-0",
|
|||
|
"slideshow": {
|
|||
|
"slide_type": "slide"
|
|||
|
}
|
|||
|
},
|
|||
|
"source": [
|
|||
|
"# Disclaimer"
|
|||
|
]
|
|||
|
},
|
|||
|
{
|
|||
|
"cell_type": "markdown",
|
|||
|
"metadata": {
|
|||
|
"ein.tags": "worksheet-0",
|
|||
|
"slideshow": {
|
|||
|
"slide_type": "-"
|
|||
|
}
|
|||
|
},
|
|||
|
"source": [
|
|||
|
"- This work is not sponsored by my employer (Honeywell UOP)\n",
|
|||
|
"- I am not representing my employer (today)\n",
|
|||
|
"- UOP does some cools things, find me later if you want to learn more!"
|
|||
|
]
|
|||
|
},
|
|||
|
{
|
|||
|
"cell_type": "markdown",
|
|||
|
"metadata": {
|
|||
|
"ein.tags": "worksheet-0",
|
|||
|
"slideshow": {
|
|||
|
"slide_type": "slide"
|
|||
|
}
|
|||
|
},
|
|||
|
"source": [
|
|||
|
"# Thanks!"
|
|||
|
]
|
|||
|
},
|
|||
|
{
|
|||
|
"cell_type": "markdown",
|
|||
|
"metadata": {
|
|||
|
"ein.tags": "worksheet-0",
|
|||
|
"slideshow": {
|
|||
|
"slide_type": "fragment"
|
|||
|
}
|
|||
|
},
|
|||
|
"source": [
|
|||
|
"- Takafumi Arakami ([@tkf](https://github.com/tkf))\n",
|
|||
|
"\n",
|
|||
|
" - EIN does not exist without tkf"
|
|||
|
]
|
|||
|
},
|
|||
|
{
|
|||
|
"cell_type": "markdown",
|
|||
|
"metadata": {
|
|||
|
"ein.tags": "worksheet-0",
|
|||
|
"slideshow": {
|
|||
|
"slide_type": "fragment"
|
|||
|
}
|
|||
|
},
|
|||
|
"source": [
|
|||
|
"- Fernando and the rest at Jupyter\n",
|
|||
|
"- O'Reilly - Andre Morrow in particular!\n",
|
|||
|
"- D.E. Shaw - supporting some work back in 2016-2017.\n",
|
|||
|
"- My kind, patient crew of Github ein [stargazers](https://github.com/millejoh/emacs-ipython-notebook/stargazers) (all 660 of you!)"
|
|||
|
]
|
|||
|
},
|
|||
|
{
|
|||
|
"cell_type": "markdown",
|
|||
|
"metadata": {
|
|||
|
"ein.tags": "worksheet-0",
|
|||
|
"slideshow": {
|
|||
|
"slide_type": "subslide"
|
|||
|
}
|
|||
|
},
|
|||
|
"source": [
|
|||
|
"# About John"
|
|||
|
]
|
|||
|
},
|
|||
|
{
|
|||
|
"cell_type": "markdown",
|
|||
|
"metadata": {
|
|||
|
"ein.tags": "worksheet-0",
|
|||
|
"slideshow": {
|
|||
|
"slide_type": "-"
|
|||
|
}
|
|||
|
},
|
|||
|
"source": [
|
|||
|
"- 1997: BS Chemical Engineering / Computer Science from CSU\n",
|
|||
|
"- Since then: [Honeywell UOP](https://www.uop.com)\n",
|
|||
|
"- Emacser since college (??)\n",
|
|||
|
"- Irregular Pythoner since 1998 (Zope to Pandas!)\n",
|
|||
|
"- EIN Maintainer since 2014/2015-ish (commit [20a7250](https://github.com/millejoh/emacs-ipython-notebook/commit/20a725012b6c8ffe9173fcfc8808dfb46fbb1824))"
|
|||
|
]
|
|||
|
},
|
|||
|
{
|
|||
|
"cell_type": "markdown",
|
|||
|
"metadata": {
|
|||
|
"ein.tags": "worksheet-0",
|
|||
|
"slideshow": {
|
|||
|
"slide_type": "slide"
|
|||
|
}
|
|||
|
},
|
|||
|
"source": [
|
|||
|
"# Introducing EIN"
|
|||
|
]
|
|||
|
},
|
|||
|
{
|
|||
|
"cell_type": "markdown",
|
|||
|
"metadata": {
|
|||
|
"ein.tags": "worksheet-0",
|
|||
|
"slideshow": {
|
|||
|
"slide_type": "-"
|
|||
|
}
|
|||
|
},
|
|||
|
"source": [
|
|||
|
"- A full-featured client for the Jupyter Notebook in the venerable Emacs editor\n",
|
|||
|
"- Tries to be a bit like [SLIME](https://common-lisp.net/project/slime/)\n",
|
|||
|
"- Work on emacs 24.5+ (but 25+ is best)\n"
|
|||
|
]
|
|||
|
},
|
|||
|
{
|
|||
|
"cell_type": "markdown",
|
|||
|
"metadata": {
|
|||
|
"ein.tags": "worksheet-0",
|
|||
|
"slideshow": {
|
|||
|
"slide_type": "subslide"
|
|||
|
}
|
|||
|
},
|
|||
|
"source": [
|
|||
|
"## Features\n",
|
|||
|
" - Written almost completely in elisp!\n",
|
|||
|
" - IDE features (syntax highlighting, jump to source, auto-completeion, popup help, help browser, etc.)\n",
|
|||
|
" - Integration with pdb via comint\n",
|
|||
|
" - Integration with [org-mode](https://orgmode.org/)\n",
|
|||
|
" - Works with non-python kernels!\n",
|
|||
|
" - Connect python buffers to running kernels."
|
|||
|
]
|
|||
|
},
|
|||
|
{
|
|||
|
"cell_type": "markdown",
|
|||
|
"metadata": {
|
|||
|
"ein.tags": "worksheet-0",
|
|||
|
"slideshow": {
|
|||
|
"slide_type": "slide"
|
|||
|
}
|
|||
|
},
|
|||
|
"source": [
|
|||
|
"# About Emacs"
|
|||
|
]
|
|||
|
},
|
|||
|
{
|
|||
|
"cell_type": "markdown",
|
|||
|
"metadata": {
|
|||
|
"ein.tags": "worksheet-0",
|
|||
|
"slideshow": {
|
|||
|
"slide_type": "-"
|
|||
|
}
|
|||
|
},
|
|||
|
"source": [
|
|||
|
"The programmable programming editor.\n",
|
|||
|
"40 years of history.\n",
|
|||
|
""
|
|||
|
]
|
|||
|
},
|
|||
|
{
|
|||
|
"cell_type": "markdown",
|
|||
|
"metadata": {
|
|||
|
"ein.tags": "worksheet-0",
|
|||
|
"slideshow": {
|
|||
|
"slide_type": "slide"
|
|||
|
}
|
|||
|
},
|
|||
|
"source": [
|
|||
|
"## Why do I use Emacs?"
|
|||
|
]
|
|||
|
},
|
|||
|
{
|
|||
|
"cell_type": "markdown",
|
|||
|
"metadata": {
|
|||
|
"ein.tags": "worksheet-0",
|
|||
|
"slideshow": {
|
|||
|
"slide_type": "subslide"
|
|||
|
}
|
|||
|
},
|
|||
|
"source": [
|
|||
|
""
|
|||
|
]
|
|||
|
},
|
|||
|
{
|
|||
|
"cell_type": "markdown",
|
|||
|
"metadata": {
|
|||
|
"ein.tags": "worksheet-0",
|
|||
|
"slideshow": {
|
|||
|
"slide_type": "subslide"
|
|||
|
}
|
|||
|
},
|
|||
|
"source": [
|
|||
|
"- Lisp Machine's scrapier cousin from the wrong side of town\n",
|
|||
|
"- See Josh Stella's excellent blog posts ([#1](https://blog.fugue.co/2015-11-11-guide-to-emacs.html) and [#2](https://blog.fugue.co/2018-08-09-two-years-with-emacs-as-a-cto.html))\n",
|
|||
|
"- Focus without distraction\n",
|
|||
|
"- Not a black box with a shiny interface\n",
|
|||
|
"- Almost complete control over your editing environment\n",
|
|||
|
"- It's a tool building tool"
|
|||
|
]
|
|||
|
},
|
|||
|
{
|
|||
|
"cell_type": "markdown",
|
|||
|
"metadata": {
|
|||
|
"ein.tags": "worksheet-0",
|
|||
|
"slideshow": {
|
|||
|
"slide_type": "subslide"
|
|||
|
}
|
|||
|
},
|
|||
|
"source": [
|
|||
|
"# The Great Editor/IDE Wars"
|
|||
|
]
|
|||
|
},
|
|||
|
{
|
|||
|
"cell_type": "markdown",
|
|||
|
"metadata": {
|
|||
|
"ein.tags": "worksheet-0",
|
|||
|
"slideshow": {
|
|||
|
"slide_type": "-"
|
|||
|
}
|
|||
|
},
|
|||
|
"source": [
|
|||
|
"Let's not, actually. Brothers and sisters, read [More than Words](http://www.nhplace.com/kent/PS/Lambda.html).\n",
|
|||
|
"\n",
|
|||
|
"> In essence, I'll suggest that Lisp is a social phenomenon, akin to a\n",
|
|||
|
"> political party, and that what unifies Lisp are the people who are its\n",
|
|||
|
"> leaders, and the ways in which they respond (or fail to respond) to the needs\n",
|
|||
|
"> of that community. --- Kent Pitman"
|
|||
|
]
|
|||
|
},
|
|||
|
{
|
|||
|
"cell_type": "markdown",
|
|||
|
"metadata": {
|
|||
|
"ein.tags": "worksheet-0",
|
|||
|
"slideshow": {
|
|||
|
"slide_type": "notes"
|
|||
|
}
|
|||
|
},
|
|||
|
"source": [
|
|||
|
"More than one political party is good! Diverse ideas are good! Extremism - not\n",
|
|||
|
"so good.\n",
|
|||
|
"\n",
|
|||
|
"The secret to peace - holding opposing thoughts in our heads?"
|
|||
|
]
|
|||
|
},
|
|||
|
{
|
|||
|
"cell_type": "markdown",
|
|||
|
"metadata": {
|
|||
|
"ein.tags": "worksheet-0",
|
|||
|
"slideshow": {
|
|||
|
"slide_type": "slide"
|
|||
|
}
|
|||
|
},
|
|||
|
"source": [
|
|||
|
"# A Brief History of EIN"
|
|||
|
]
|
|||
|
},
|
|||
|
{
|
|||
|
"cell_type": "markdown",
|
|||
|
"metadata": {
|
|||
|
"ein.tags": "worksheet-0",
|
|||
|
"slideshow": {
|
|||
|
"slide_type": "fragment"
|
|||
|
}
|
|||
|
},
|
|||
|
"source": [
|
|||
|
""
|
|||
|
]
|
|||
|
},
|
|||
|
{
|
|||
|
"cell_type": "markdown",
|
|||
|
"metadata": {
|
|||
|
"ein.tags": "worksheet-0",
|
|||
|
"slideshow": {
|
|||
|
"slide_type": "subslide"
|
|||
|
}
|
|||
|
},
|
|||
|
"source": [
|
|||
|
"- Created by [tkf](https://github.com/tkf) in 2012\n",
|
|||
|
"- First alternate client for IPython\n",
|
|||
|
"- tkf's last commit is on 17 Mar 2014 (1,795 commits later!)\n",
|
|||
|
"- I fork and push IPython 2.0 support on 14 April 2014\n",
|
|||
|
"- Supporting transition from IPython/Jupyter 1.0 -> 4.0 rough sailing!"
|
|||
|
]
|
|||
|
},
|
|||
|
{
|
|||
|
"cell_type": "markdown",
|
|||
|
"metadata": {
|
|||
|
"ein.tags": "worksheet-0",
|
|||
|
"slideshow": {
|
|||
|
"slide_type": "subslide"
|
|||
|
}
|
|||
|
},
|
|||
|
"source": [
|
|||
|
"# The Challenges"
|
|||
|
]
|
|||
|
},
|
|||
|
{
|
|||
|
"cell_type": "markdown",
|
|||
|
"metadata": {
|
|||
|
"ein.tags": "worksheet-0",
|
|||
|
"slideshow": {
|
|||
|
"slide_type": "-"
|
|||
|
}
|
|||
|
},
|
|||
|
"source": [
|
|||
|
"- Changes to the Contents API\n",
|
|||
|
"- Changes to communication protocol\n",
|
|||
|
"- Changes to the security model (I hate you _xsrf)\n",
|
|||
|
"- Changes to the notebook format\n",
|
|||
|
"- Debugging connection issues for other users\n",
|
|||
|
"- Legacy support (Emacs 24 vs 25, 26, 27...)\n"
|
|||
|
]
|
|||
|
},
|
|||
|
{
|
|||
|
"cell_type": "markdown",
|
|||
|
"metadata": {
|
|||
|
"ein.tags": "worksheet-0",
|
|||
|
"slideshow": {
|
|||
|
"slide_type": "subslide"
|
|||
|
}
|
|||
|
},
|
|||
|
"source": [
|
|||
|
"- Why?\n",
|
|||
|
" - John is agoraphobic outside of Emacs\n",
|
|||
|
" - John is allergic to javascript\n",
|
|||
|
" - EIN’s internal data structures tuned to earlier versions of notebook format\n",
|
|||
|
" - Behold the eldritch horrors of `ein:cell-to-nb4-json`\n",
|
|||
|
" - Every Emacs installation is different (advantage and disadvantage!)"
|
|||
|
]
|
|||
|
},
|
|||
|
{
|
|||
|
"cell_type": "markdown",
|
|||
|
"metadata": {
|
|||
|
"ein.tags": "worksheet-0",
|
|||
|
"slideshow": {
|
|||
|
"slide_type": "subslide"
|
|||
|
}
|
|||
|
},
|
|||
|
"source": [
|
|||
|
"# The Joys"
|
|||
|
]
|
|||
|
},
|
|||
|
{
|
|||
|
"cell_type": "markdown",
|
|||
|
"metadata": {
|
|||
|
"ein.tags": "worksheet-0",
|
|||
|
"slideshow": {
|
|||
|
"slide_type": "-"
|
|||
|
}
|
|||
|
},
|
|||
|
"source": [
|
|||
|
"- People (not just me) use it to do stuff!\n",
|
|||
|
"- Supportive community.\n",
|
|||
|
"- Solving the challenges.\n",
|
|||
|
"- I get to program in Lisp!"
|
|||
|
]
|
|||
|
},
|
|||
|
{
|
|||
|
"cell_type": "markdown",
|
|||
|
"metadata": {
|
|||
|
"ein.tags": "worksheet-0",
|
|||
|
"slideshow": {
|
|||
|
"slide_type": "slide"
|
|||
|
}
|
|||
|
},
|
|||
|
"source": [
|
|||
|
"# Feature Dive"
|
|||
|
]
|
|||
|
},
|
|||
|
{
|
|||
|
"cell_type": "markdown",
|
|||
|
"metadata": {
|
|||
|
"ein.tags": "worksheet-0",
|
|||
|
"slideshow": {
|
|||
|
"slide_type": "subslide"
|
|||
|
}
|
|||
|
},
|
|||
|
"source": [
|
|||
|
"## What is similar"
|
|||
|
]
|
|||
|
},
|
|||
|
{
|
|||
|
"cell_type": "markdown",
|
|||
|
"metadata": {
|
|||
|
"ein.tags": "worksheet-0",
|
|||
|
"slideshow": {
|
|||
|
"slide_type": "-"
|
|||
|
}
|
|||
|
},
|
|||
|
"source": [
|
|||
|
"- Visually alike, but more text-y\n",
|
|||
|
"- Cut, copy, past cells (even across notebooks!)\n",
|
|||
|
"- Inline images\n",
|
|||
|
"- Works with non-python kernels"
|
|||
|
]
|
|||
|
},
|
|||
|
{
|
|||
|
"cell_type": "markdown",
|
|||
|
"metadata": {
|
|||
|
"ein.tags": "worksheet-0",
|
|||
|
"slideshow": {
|
|||
|
"slide_type": "subslide"
|
|||
|
}
|
|||
|
},
|
|||
|
"source": [
|
|||
|
"## IDE-like Features"
|
|||
|
]
|
|||
|
},
|
|||
|
{
|
|||
|
"cell_type": "markdown",
|
|||
|
"metadata": {
|
|||
|
"ein.tags": "worksheet-0",
|
|||
|
"slideshow": {
|
|||
|
"slide_type": "-"
|
|||
|
}
|
|||
|
},
|
|||
|
"source": [
|
|||
|
"- Auto-completion\n",
|
|||
|
"- Jump to definition (local only!)\n",
|
|||
|
"- Popup (tooltip) help\n",
|
|||
|
"- Syntax highlighting (not perfect)\n",
|
|||
|
"- Help browser\n",
|
|||
|
"- Traceback view\n",
|
|||
|
"- Integration with ipdb"
|
|||
|
]
|
|||
|
},
|
|||
|
{
|
|||
|
"cell_type": "markdown",
|
|||
|
"metadata": {
|
|||
|
"ein.tags": "worksheet-0",
|
|||
|
"slideshow": {
|
|||
|
"slide_type": "subslide"
|
|||
|
}
|
|||
|
},
|
|||
|
"source": [
|
|||
|
"## Unique to Emacs?"
|
|||
|
]
|
|||
|
},
|
|||
|
{
|
|||
|
"cell_type": "markdown",
|
|||
|
"metadata": {
|
|||
|
"ein.tags": "worksheet-0",
|
|||
|
"slideshow": {
|
|||
|
"slide_type": "-"
|
|||
|
}
|
|||
|
},
|
|||
|
"source": [
|
|||
|
"- Run jupyter from inside Emacs!\n",
|
|||
|
"- Execute elisp from IPython\n",
|
|||
|
"- Integration with org-mode\n",
|
|||
|
"- Support for [hy](http://hylang.org)\n",
|
|||
|
"- Connect python buffer to a running notebook\n",
|
|||
|
"- Customizable using elisp (vs javascript)\n",
|
|||
|
"- %whos popup (`ein:pytools-whos`)\n",
|
|||
|
"- Run doctests for object at point"
|
|||
|
]
|
|||
|
},
|
|||
|
{
|
|||
|
"cell_type": "markdown",
|
|||
|
"metadata": {
|
|||
|
"ein.tags": "worksheet-0",
|
|||
|
"slideshow": {
|
|||
|
"slide_type": "slide"
|
|||
|
}
|
|||
|
},
|
|||
|
"source": [
|
|||
|
"## Needing some TLC"
|
|||
|
]
|
|||
|
},
|
|||
|
{
|
|||
|
"cell_type": "markdown",
|
|||
|
"metadata": {
|
|||
|
"ein.tags": "worksheet-0",
|
|||
|
"slideshow": {
|
|||
|
"slide_type": "-"
|
|||
|
}
|
|||
|
},
|
|||
|
"source": [
|
|||
|
"- Pandas to [SES](http://www.gnu.org/software/emacs/manual/html_node/ses/index.html)\n",
|
|||
|
"- Hierarchymagic (depends on [Hierarchymagic_ext](https://github.com/tkf/ipython-hierarchymagic))"
|
|||
|
]
|
|||
|
},
|
|||
|
{
|
|||
|
"cell_type": "markdown",
|
|||
|
"metadata": {
|
|||
|
"ein.tags": "worksheet-0",
|
|||
|
"slideshow": {
|
|||
|
"slide_type": "subslide"
|
|||
|
}
|
|||
|
},
|
|||
|
"source": [
|
|||
|
"## What EIN does not do"
|
|||
|
]
|
|||
|
},
|
|||
|
{
|
|||
|
"cell_type": "markdown",
|
|||
|
"metadata": {
|
|||
|
"ein.tags": "worksheet-0",
|
|||
|
"slideshow": {
|
|||
|
"slide_type": "-"
|
|||
|
}
|
|||
|
},
|
|||
|
"source": [
|
|||
|
"- Widgets\n",
|
|||
|
"- Extensions\n",
|
|||
|
" - Emacs doesn't quite understand javascript.\n",
|
|||
|
" - Possible with some effort (see [timestamp](https://github.com/millejoh/emacs-ipython-notebook/blob/master/lisp/ein-timestamp.el))\n",
|
|||
|
" - [Skewer](https://github.com/skeeto/skewer-mode) package allows limited execution of javascript\n",
|
|||
|
"- Jupyterhub support exists, but is wonky"
|
|||
|
]
|
|||
|
},
|
|||
|
{
|
|||
|
"cell_type": "markdown",
|
|||
|
"metadata": {
|
|||
|
"ein.tags": "worksheet-0",
|
|||
|
"slideshow": {
|
|||
|
"slide_type": "slide"
|
|||
|
}
|
|||
|
},
|
|||
|
"source": [
|
|||
|
"# What's Next for EIN?"
|
|||
|
]
|
|||
|
},
|
|||
|
{
|
|||
|
"cell_type": "markdown",
|
|||
|
"metadata": {
|
|||
|
"ein.tags": "worksheet-0",
|
|||
|
"slideshow": {
|
|||
|
"slide_type": "-"
|
|||
|
}
|
|||
|
},
|
|||
|
"source": [
|
|||
|
"- Don't fall behind (easier said than done)\n",
|
|||
|
"- More robust!\n",
|
|||
|
"- Better integration with external documentation\n",
|
|||
|
"- Seamless support for remote Jupyterhub and remote connections\n",
|
|||
|
"- Support widgets (this is going to be tough!)\n",
|
|||
|
"- Better integration with the Emacs Python ecosystem\n",
|
|||
|
"- A full inspector (ala SLIME)\n",
|
|||
|
"- And much (too much!) more...\n"
|
|||
|
]
|
|||
|
},
|
|||
|
{
|
|||
|
"cell_type": "markdown",
|
|||
|
"metadata": {
|
|||
|
"ein.tags": "worksheet-0",
|
|||
|
"slideshow": {
|
|||
|
"slide_type": "slide"
|
|||
|
}
|
|||
|
},
|
|||
|
"source": [
|
|||
|
"# A Demonstration"
|
|||
|
]
|
|||
|
},
|
|||
|
{
|
|||
|
"cell_type": "code",
|
|||
|
"execution_count": null,
|
|||
|
"metadata": {
|
|||
|
"autoscroll": false,
|
|||
|
"collapsed": false,
|
|||
|
"ein.hycell": false,
|
|||
|
"ein.tags": "worksheet-0",
|
|||
|
"slideshow": {
|
|||
|
"slide_type": "-"
|
|||
|
}
|
|||
|
},
|
|||
|
"outputs": [],
|
|||
|
"source": [
|
|||
|
"%pwd"
|
|||
|
]
|
|||
|
},
|
|||
|
{
|
|||
|
"cell_type": "code",
|
|||
|
"execution_count": null,
|
|||
|
"metadata": {
|
|||
|
"autoscroll": false,
|
|||
|
"collapsed": false,
|
|||
|
"ein.hycell": false,
|
|||
|
"ein.tags": "worksheet-0",
|
|||
|
"slideshow": {
|
|||
|
"slide_type": "-"
|
|||
|
}
|
|||
|
},
|
|||
|
"outputs": [],
|
|||
|
"source": [
|
|||
|
"import sys\n",
|
|||
|
"# Watch me autocomplete and show an informative popup!\n",
|
|||
|
"# Try this before executing import sys with `ein:completion-backend`\n",
|
|||
|
"# set to `ein:use-ac-jedi-backend`. Eat your heart out Joel Grus and\n",
|
|||
|
"# JupyterLab!\n",
|
|||
|
"sys"
|
|||
|
]
|
|||
|
},
|
|||
|
{
|
|||
|
"cell_type": "code",
|
|||
|
"execution_count": null,
|
|||
|
"metadata": {
|
|||
|
"autoscroll": false,
|
|||
|
"collapsed": false,
|
|||
|
"ein.hycell": false,
|
|||
|
"ein.tags": "worksheet-0",
|
|||
|
"slideshow": {
|
|||
|
"slide_type": "-"
|
|||
|
}
|
|||
|
},
|
|||
|
"outputs": [],
|
|||
|
"source": [
|
|||
|
"print(\"Hello World!\")"
|
|||
|
]
|
|||
|
},
|
|||
|
{
|
|||
|
"cell_type": "markdown",
|
|||
|
"metadata": {
|
|||
|
"ein.tags": "worksheet-0",
|
|||
|
"slideshow": {
|
|||
|
"slide_type": "-"
|
|||
|
}
|
|||
|
},
|
|||
|
"source": [
|
|||
|
"## Behold the glory of Python and Emacs!"
|
|||
|
]
|
|||
|
},
|
|||
|
{
|
|||
|
"cell_type": "markdown",
|
|||
|
"metadata": {
|
|||
|
"ein.tags": "worksheet-0",
|
|||
|
"slideshow": {
|
|||
|
"slide_type": "-"
|
|||
|
}
|
|||
|
},
|
|||
|
"source": [
|
|||
|
"### Syntax highlighting and inline images."
|
|||
|
]
|
|||
|
},
|
|||
|
{
|
|||
|
"cell_type": "code",
|
|||
|
"execution_count": 1,
|
|||
|
"metadata": {
|
|||
|
"autoscroll": false,
|
|||
|
"collapsed": false,
|
|||
|
"ein.hycell": false,
|
|||
|
"ein.tags": "worksheet-0",
|
|||
|
"slideshow": {
|
|||
|
"slide_type": "-"
|
|||
|
}
|
|||
|
},
|
|||
|
"outputs": [],
|
|||
|
"source": [
|
|||
|
"%matplotlib inline\n",
|
|||
|
"# Open via C-c ' and check out flycheck support\n",
|
|||
|
"import matplotlib.pyplot as plt\n",
|
|||
|
"import numpy as np"
|
|||
|
]
|
|||
|
},
|
|||
|
{
|
|||
|
"cell_type": "code",
|
|||
|
"execution_count": null,
|
|||
|
"metadata": {
|
|||
|
"autoscroll": false,
|
|||
|
"collapsed": false,
|
|||
|
"ein.hycell": false,
|
|||
|
"ein.tags": "worksheet-0",
|
|||
|
"slideshow": {
|
|||
|
"slide_type": "slide"
|
|||
|
}
|
|||
|
},
|
|||
|
"outputs": [],
|
|||
|
"source": [
|
|||
|
"plt."
|
|||
|
]
|
|||
|
},
|
|||
|
{
|
|||
|
"cell_type": "code",
|
|||
|
"execution_count": null,
|
|||
|
"metadata": {
|
|||
|
"autoscroll": false,
|
|||
|
"collapsed": false,
|
|||
|
"ein.hycell": false,
|
|||
|
"ein.tags": "worksheet-0",
|
|||
|
"slideshow": {
|
|||
|
"slide_type": "-"
|
|||
|
}
|
|||
|
},
|
|||
|
"outputs": [],
|
|||
|
"source": [
|
|||
|
"def plotnormal():\n",
|
|||
|
" return plt.plot(np.random.randn(1000), np.random.randn(1000), 'o', alpha=0.3)\n",
|
|||
|
"plotnormal()"
|
|||
|
]
|
|||
|
},
|
|||
|
{
|
|||
|
"cell_type": "markdown",
|
|||
|
"metadata": {
|
|||
|
"ein.tags": "worksheet-0",
|
|||
|
"slideshow": {
|
|||
|
"slide_type": "-"
|
|||
|
}
|
|||
|
},
|
|||
|
"source": [
|
|||
|
"### The help browser and jump to source"
|
|||
|
]
|
|||
|
},
|
|||
|
{
|
|||
|
"cell_type": "code",
|
|||
|
"execution_count": null,
|
|||
|
"metadata": {
|
|||
|
"autoscroll": false,
|
|||
|
"collapsed": false,
|
|||
|
"ein.hycell": false,
|
|||
|
"ein.tags": "worksheet-0",
|
|||
|
"slideshow": {
|
|||
|
"slide_type": "-"
|
|||
|
}
|
|||
|
},
|
|||
|
"outputs": [],
|
|||
|
"source": [
|
|||
|
"plt.plot?"
|
|||
|
]
|
|||
|
},
|
|||
|
{
|
|||
|
"cell_type": "markdown",
|
|||
|
"metadata": {
|
|||
|
"ein.tags": "worksheet-0",
|
|||
|
"slideshow": {
|
|||
|
"slide_type": "-"
|
|||
|
}
|
|||
|
},
|
|||
|
"source": [
|
|||
|
"### EIN combines python and ipython error handling with Emacs debugger support."
|
|||
|
]
|
|||
|
},
|
|||
|
{
|
|||
|
"cell_type": "code",
|
|||
|
"execution_count": null,
|
|||
|
"metadata": {
|
|||
|
"autoscroll": false,
|
|||
|
"collapsed": false,
|
|||
|
"ein.hycell": false,
|
|||
|
"ein.tags": "worksheet-0",
|
|||
|
"slideshow": {
|
|||
|
"slide_type": "-"
|
|||
|
}
|
|||
|
},
|
|||
|
"outputs": [],
|
|||
|
"source": [
|
|||
|
"%run non_existent_file"
|
|||
|
]
|
|||
|
},
|
|||
|
{
|
|||
|
"cell_type": "code",
|
|||
|
"execution_count": null,
|
|||
|
"metadata": {
|
|||
|
"autoscroll": false,
|
|||
|
"collapsed": false,
|
|||
|
"ein.hycell": false,
|
|||
|
"ein.tags": "worksheet-0",
|
|||
|
"slideshow": {
|
|||
|
"slide_type": "-"
|
|||
|
}
|
|||
|
},
|
|||
|
"outputs": [],
|
|||
|
"source": [
|
|||
|
"x = 1\n",
|
|||
|
"y = 4\n",
|
|||
|
"z = y / (1 - x)"
|
|||
|
]
|
|||
|
},
|
|||
|
{
|
|||
|
"cell_type": "code",
|
|||
|
"execution_count": null,
|
|||
|
"metadata": {
|
|||
|
"autoscroll": false,
|
|||
|
"collapsed": false,
|
|||
|
"ein.hycell": false,
|
|||
|
"ein.tags": "worksheet-0",
|
|||
|
"slideshow": {
|
|||
|
"slide_type": "-"
|
|||
|
}
|
|||
|
},
|
|||
|
"outputs": [],
|
|||
|
"source": [
|
|||
|
"%run wiener_filtering.py"
|
|||
|
]
|
|||
|
},
|
|||
|
{
|
|||
|
"cell_type": "code",
|
|||
|
"execution_count": null,
|
|||
|
"metadata": {
|
|||
|
"autoscroll": false,
|
|||
|
"collapsed": false,
|
|||
|
"ein.hycell": false,
|
|||
|
"ein.tags": "worksheet-0",
|
|||
|
"slideshow": {
|
|||
|
"slide_type": "-"
|
|||
|
}
|
|||
|
},
|
|||
|
"outputs": [],
|
|||
|
"source": [
|
|||
|
"%debug"
|
|||
|
]
|
|||
|
},
|
|||
|
{
|
|||
|
"cell_type": "markdown",
|
|||
|
"metadata": {
|
|||
|
"ein.tags": "worksheet-0",
|
|||
|
"slideshow": {
|
|||
|
"slide_type": "-"
|
|||
|
}
|
|||
|
},
|
|||
|
"source": [
|
|||
|
"### What about org files"
|
|||
|
]
|
|||
|
},
|
|||
|
{
|
|||
|
"cell_type": "markdown",
|
|||
|
"metadata": {
|
|||
|
"ein.tags": "worksheet-0",
|
|||
|
"slideshow": {
|
|||
|
"slide_type": "-"
|
|||
|
}
|
|||
|
},
|
|||
|
"source": [
|
|||
|
"Take a looksy at [this](./org_demo.org)"
|
|||
|
]
|
|||
|
},
|
|||
|
{
|
|||
|
"cell_type": "markdown",
|
|||
|
"metadata": {
|
|||
|
"ein.tags": "worksheet-0",
|
|||
|
"slideshow": {
|
|||
|
"slide_type": "-"
|
|||
|
}
|
|||
|
},
|
|||
|
"source": [
|
|||
|
"### What was that about Hy?"
|
|||
|
]
|
|||
|
},
|
|||
|
{
|
|||
|
"cell_type": "markdown",
|
|||
|
"metadata": {
|
|||
|
"ein.tags": "worksheet-0",
|
|||
|
"slideshow": {
|
|||
|
"slide_type": "skip"
|
|||
|
}
|
|||
|
},
|
|||
|
"source": [
|
|||
|
"Note - due to a bug in ein hy cell types are not saved between sessions, so you\n",
|
|||
|
"will need to manually set the cell type of the following two cells to Hy by\n",
|
|||
|
"calling `ein:worksheet-change-cell-type` then typing `h`"
|
|||
|
]
|
|||
|
},
|
|||
|
{
|
|||
|
"cell_type": "code",
|
|||
|
"execution_count": 14,
|
|||
|
"metadata": {
|
|||
|
"autoscroll": false,
|
|||
|
"collapsed": false,
|
|||
|
"ein.hycell": false,
|
|||
|
"ein.tags": "worksheet-0",
|
|||
|
"slideshow": {
|
|||
|
"slide_type": "-"
|
|||
|
}
|
|||
|
},
|
|||
|
"outputs": [
|
|||
|
{
|
|||
|
"data": {
|
|||
|
"text/plain": [
|
|||
|
"2"
|
|||
|
]
|
|||
|
},
|
|||
|
"execution_count": 14,
|
|||
|
"metadata": {},
|
|||
|
"output_type": "execute_result"
|
|||
|
}
|
|||
|
],
|
|||
|
"source": [
|
|||
|
"(+ 1 1)"
|
|||
|
]
|
|||
|
},
|
|||
|
{
|
|||
|
"cell_type": "code",
|
|||
|
"execution_count": 15,
|
|||
|
"metadata": {
|
|||
|
"autoscroll": false,
|
|||
|
"collapsed": false,
|
|||
|
"ein.hycell": false,
|
|||
|
"ein.tags": "worksheet-0",
|
|||
|
"slideshow": {
|
|||
|
"slide_type": "-"
|
|||
|
}
|
|||
|
},
|
|||
|
"outputs": [],
|
|||
|
"source": [
|
|||
|
"(setv hy-var 42)"
|
|||
|
]
|
|||
|
},
|
|||
|
{
|
|||
|
"cell_type": "code",
|
|||
|
"execution_count": null,
|
|||
|
"metadata": {
|
|||
|
"autoscroll": false,
|
|||
|
"collapsed": false,
|
|||
|
"ein.hycell": false,
|
|||
|
"ein.tags": "worksheet-0",
|
|||
|
"slideshow": {
|
|||
|
"slide_type": "-"
|
|||
|
}
|
|||
|
},
|
|||
|
"outputs": [],
|
|||
|
"source": [
|
|||
|
"hy_var"
|
|||
|
]
|
|||
|
},
|
|||
|
{
|
|||
|
"cell_type": "markdown",
|
|||
|
"metadata": {
|
|||
|
"ein.tags": "worksheet-0",
|
|||
|
"slideshow": {
|
|||
|
"slide_type": "-"
|
|||
|
}
|
|||
|
},
|
|||
|
"source": [
|
|||
|
"### What about Emacs Lisp?"
|
|||
|
]
|
|||
|
},
|
|||
|
{
|
|||
|
"cell_type": "code",
|
|||
|
"execution_count": null,
|
|||
|
"metadata": {
|
|||
|
"autoscroll": false,
|
|||
|
"collapsed": false,
|
|||
|
"ein.hycell": false,
|
|||
|
"ein.tags": "worksheet-0",
|
|||
|
"slideshow": {
|
|||
|
"slide_type": "-"
|
|||
|
}
|
|||
|
},
|
|||
|
"outputs": [],
|
|||
|
"source": [
|
|||
|
"%run tools/emacslisp.py"
|
|||
|
]
|
|||
|
},
|
|||
|
{
|
|||
|
"cell_type": "code",
|
|||
|
"execution_count": null,
|
|||
|
"metadata": {
|
|||
|
"autoscroll": false,
|
|||
|
"collapsed": false,
|
|||
|
"ein.hycell": false,
|
|||
|
"ein.tags": "worksheet-0",
|
|||
|
"slideshow": {
|
|||
|
"slide_type": "-"
|
|||
|
}
|
|||
|
},
|
|||
|
"outputs": [],
|
|||
|
"source": [
|
|||
|
"res = EmacsLisp('(ein:dev-sys-info)')\n",
|
|||
|
"res"
|
|||
|
]
|
|||
|
},
|
|||
|
{
|
|||
|
"cell_type": "code",
|
|||
|
"execution_count": null,
|
|||
|
"metadata": {
|
|||
|
"autoscroll": false,
|
|||
|
"collapsed": false,
|
|||
|
"ein.hycell": false,
|
|||
|
"ein.tags": "worksheet-0",
|
|||
|
"slideshow": {
|
|||
|
"slide_type": "-"
|
|||
|
}
|
|||
|
},
|
|||
|
"outputs": [],
|
|||
|
"source": [
|
|||
|
"type(res)"
|
|||
|
]
|
|||
|
},
|
|||
|
{
|
|||
|
"cell_type": "code",
|
|||
|
"execution_count": null,
|
|||
|
"metadata": {
|
|||
|
"autoscroll": false,
|
|||
|
"collapsed": false,
|
|||
|
"ein.hycell": false,
|
|||
|
"ein.tags": "worksheet-0",
|
|||
|
"slideshow": {
|
|||
|
"slide_type": "-"
|
|||
|
}
|
|||
|
},
|
|||
|
"outputs": [],
|
|||
|
"source": [
|
|||
|
"dir(res)"
|
|||
|
]
|
|||
|
},
|
|||
|
{
|
|||
|
"cell_type": "markdown",
|
|||
|
"metadata": {
|
|||
|
"ein.tags": "worksheet-0",
|
|||
|
"slideshow": {
|
|||
|
"slide_type": "-"
|
|||
|
}
|
|||
|
},
|
|||
|
"source": [
|
|||
|
"### We Support Magic!"
|
|||
|
]
|
|||
|
},
|
|||
|
{
|
|||
|
"cell_type": "code",
|
|||
|
"execution_count": null,
|
|||
|
"metadata": {
|
|||
|
"autoscroll": false,
|
|||
|
"collapsed": false,
|
|||
|
"ein.hycell": false,
|
|||
|
"ein.tags": "worksheet-0",
|
|||
|
"slideshow": {
|
|||
|
"slide_type": "-"
|
|||
|
}
|
|||
|
},
|
|||
|
"outputs": [],
|
|||
|
"source": [
|
|||
|
"%load tools/emacslisp.py"
|
|||
|
]
|
|||
|
},
|
|||
|
{
|
|||
|
"cell_type": "markdown",
|
|||
|
"metadata": {
|
|||
|
"ein.tags": "worksheet-0",
|
|||
|
"slideshow": {
|
|||
|
"slide_type": "-"
|
|||
|
}
|
|||
|
},
|
|||
|
"source": [
|
|||
|
"## Check out test.py"
|
|||
|
]
|
|||
|
},
|
|||
|
{
|
|||
|
"cell_type": "code",
|
|||
|
"execution_count": null,
|
|||
|
"metadata": {
|
|||
|
"autoscroll": false,
|
|||
|
"collapsed": false,
|
|||
|
"ein.hycell": false,
|
|||
|
"ein.tags": "worksheet-0",
|
|||
|
"slideshow": {
|
|||
|
"slide_type": "-"
|
|||
|
}
|
|||
|
},
|
|||
|
"outputs": [],
|
|||
|
"source": [
|
|||
|
"digits"
|
|||
|
]
|
|||
|
},
|
|||
|
{
|
|||
|
"cell_type": "markdown",
|
|||
|
"metadata": {
|
|||
|
"ein.tags": "worksheet-0",
|
|||
|
"slideshow": {
|
|||
|
"slide_type": "-"
|
|||
|
}
|
|||
|
},
|
|||
|
"source": [
|
|||
|
"# Don't look at me!"
|
|||
|
]
|
|||
|
},
|
|||
|
{
|
|||
|
"cell_type": "code",
|
|||
|
"execution_count": 1,
|
|||
|
"metadata": {
|
|||
|
"autoscroll": false,
|
|||
|
"collapsed": false,
|
|||
|
"ein.hycell": false,
|
|||
|
"ein.tags": "worksheet-0",
|
|||
|
"execute-time": [
|
|||
|
"2018-10-15T02:00:45.633797Z",
|
|||
|
"2018-10-15T02:00:46.999049Z"
|
|||
|
],
|
|||
|
"slideshow": {
|
|||
|
"slide_type": "-"
|
|||
|
}
|
|||
|
},
|
|||
|
"outputs": [],
|
|||
|
"source": [
|
|||
|
"import matplotlib.pyplot as plt\n",
|
|||
|
"import seaborn as sns\n",
|
|||
|
"sns.set(context='talk')\n",
|
|||
|
"plt.rcParams[\"figure.dpi\"] = 144\n",
|
|||
|
"plt.rcParams[\"figure.figsize\"] = 16, 10"
|
|||
|
]
|
|||
|
},
|
|||
|
{
|
|||
|
"cell_type": "code",
|
|||
|
"execution_count": null,
|
|||
|
"metadata": {
|
|||
|
"autoscroll": false,
|
|||
|
"collapsed": false,
|
|||
|
"ein.hycell": false,
|
|||
|
"ein.tags": "worksheet-0",
|
|||
|
"execute-time": [
|
|||
|
"2018-10-15T03:20:48.024857Z",
|
|||
|
"2018-10-15T03:20:48.040723Z"
|
|||
|
],
|
|||
|
"slideshow": {
|
|||
|
"slide_type": "-"
|
|||
|
}
|
|||
|
},
|
|||
|
"outputs": [],
|
|||
|
"source": [
|
|||
|
"digits"
|
|||
|
]
|
|||
|
}
|
|||
|
],
|
|||
|
"metadata": {
|
|||
|
"celltoolbar": "Slideshow",
|
|||
|
"kernelspec": {
|
|||
|
"display_name": "Data Science (py36)",
|
|||
|
"name": "datascience"
|
|||
|
},
|
|||
|
"language_info": {
|
|||
|
"codemirror_mode": {
|
|||
|
"name": "ipython",
|
|||
|
"version": 3
|
|||
|
},
|
|||
|
"file_extension": ".py",
|
|||
|
"mimetype": "text/x-python",
|
|||
|
"name": "python",
|
|||
|
"nbconvert_exporter": "python",
|
|||
|
"pygments_lexer": "ipython3",
|
|||
|
"version": "3.6.6"
|
|||
|
},
|
|||
|
"name": "The Emacs IPython Notebook.ipynb",
|
|||
|
"rise": {
|
|||
|
"controls": false,
|
|||
|
"theme": "serif"
|
|||
|
}
|
|||
|
},
|
|||
|
"nbformat": 4,
|
|||
|
"nbformat_minor": 2
|
|||
|
}
|