##// END OF EJS Templates
Adding moved content.
Brian E. Granger -
Show More
@@ -1,7 +1,7 b''
1 {
1 {
2 "metadata": {
2 "metadata": {
3 "name": "",
3 "name": "",
4 "signature": "sha256:84fa8b285a29d021b31d7211c6452729fb042a5c74cee6bf31e74e06fdd26b97"
4 "signature": "sha256:ee4b22b4c949fe21b3e5cda24f0916ba59d8c09443f4a897d98b96d4a73ac335"
5 },
5 },
6 "nbformat": 3,
6 "nbformat": 3,
7 "nbformat_minor": 0,
7 "nbformat_minor": 0,
@@ -39,7 +39,7 b''
39 "\n",
39 "\n",
40 " ipython notebook\n",
40 " ipython notebook\n",
41 "\n",
41 "\n",
42 "This will print some information about the notebook server in your console, including the URL of the web application (by default, `http://127.0.0.1:8888`). It will then open your default web browser to this URL.\n",
42 "This will print some information about the notebook server in your terminal, including the URL of the web application (by default, `http://127.0.0.1:8888`). It will then open your default web browser to this URL.\n",
43 "\n",
43 "\n",
44 "When the notebook opens, you will see the **notebook dashboard**, which will show a list of the notebooks and subdirectories in the directory where the notebook server was started. As of IPython 2.0, the dashboard allows you to navigate to different subdirectories. Because of this, it is no longer necessary to start a separate notebook server for each subdirectory. Most of the time, you will want to start a notebook server in the highest directory in your filesystem where notebooks can be found. Often this will be your home directory.\n",
44 "When the notebook opens, you will see the **notebook dashboard**, which will show a list of the notebooks and subdirectories in the directory where the notebook server was started. As of IPython 2.0, the dashboard allows you to navigate to different subdirectories. Because of this, it is no longer necessary to start a separate notebook server for each subdirectory. Most of the time, you will want to start a notebook server in the highest directory in your filesystem where notebooks can be found. Often this will be your home directory.\n",
45 "\n",
45 "\n",
@@ -77,12 +77,110 b''
77 "source": [
77 "source": [
78 "The notebook web server can also be configured using IPython profiles and configuration files. The Notebook web server configuration options are set in a file named `ipython_notebook_config.py` in your IPython *profile directory*. The profile directory is a subfolder of your IPython directory, which itself is usually `.ipython` in your home directory.\n",
78 "The notebook web server can also be configured using IPython profiles and configuration files. The Notebook web server configuration options are set in a file named `ipython_notebook_config.py` in your IPython *profile directory*. The profile directory is a subfolder of your IPython directory, which itself is usually `.ipython` in your home directory.\n",
79 "\n",
79 "\n",
80 "You can display the location of your default profile directory by running the command:\n",
80 "You can display the location of your default profile directory by running the command:"
81 "\n",
81 ]
82 " ipython locate\n",
82 },
83 "\n",
83 {
84 "cell_type": "code",
85 "collapsed": false,
86 "input": [
87 "!ipython profile locate default"
88 ],
89 "language": "python",
90 "metadata": {},
91 "outputs": [
92 {
93 "output_type": "stream",
94 "stream": "stdout",
95 "text": [
96 "/Users/bgranger/.ipython/profile_default\r\n"
97 ]
98 }
99 ],
100 "prompt_number": 7
101 },
102 {
103 "cell_type": "markdown",
104 "metadata": {},
105 "source": [
84 "The default version of `ipython_notebook_config.py` lists all of the options available along with documentation for each. Changes made to that file will affect all notebook servers run under that profile. Command line options always override those set in configuration files.\n",
106 "The default version of `ipython_notebook_config.py` lists all of the options available along with documentation for each. Changes made to that file will affect all notebook servers run under that profile. Command line options always override those set in configuration files.\n",
85 "\n",
107 "\n",
108 "You can create a new profile:"
109 ]
110 },
111 {
112 "cell_type": "code",
113 "collapsed": false,
114 "input": [
115 "!ipython profile create my_profile"
116 ],
117 "language": "python",
118 "metadata": {},
119 "outputs": [
120 {
121 "output_type": "stream",
122 "stream": "stdout",
123 "text": [
124 "[ProfileCreate] Generating default config file: u'/Users/bgranger/.ipython/profile_my_profile/ipython_config.py'\r\n"
125 ]
126 },
127 {
128 "output_type": "stream",
129 "stream": "stdout",
130 "text": [
131 "[ProfileCreate] Generating default config file: u'/Users/bgranger/.ipython/profile_my_profile/ipython_qtconsole_config.py'\r\n"
132 ]
133 },
134 {
135 "output_type": "stream",
136 "stream": "stdout",
137 "text": [
138 "[ProfileCreate] Generating default config file: u'/Users/bgranger/.ipython/profile_my_profile/ipython_notebook_config.py'\r\n",
139 "[ProfileCreate] Generating default config file: u'/Users/bgranger/.ipython/profile_my_profile/ipython_nbconvert_config.py'\r\n"
140 ]
141 }
142 ],
143 "prompt_number": 3
144 },
145 {
146 "cell_type": "markdown",
147 "metadata": {},
148 "source": [
149 "And then view its location:"
150 ]
151 },
152 {
153 "cell_type": "code",
154 "collapsed": false,
155 "input": [
156 "!ipython profile locate my_profile"
157 ],
158 "language": "python",
159 "metadata": {},
160 "outputs": [
161 {
162 "output_type": "stream",
163 "stream": "stdout",
164 "text": [
165 "/Users/bgranger/.ipython/profile_my_profile\r\n"
166 ]
167 }
168 ],
169 "prompt_number": 5
170 },
171 {
172 "cell_type": "markdown",
173 "metadata": {},
174 "source": [
175 "To start the notebook server using a given profile, run the following:\n",
176 "\n",
177 " ipython notebook --profile=my_profile"
178 ]
179 },
180 {
181 "cell_type": "markdown",
182 "metadata": {},
183 "source": [
86 "More details about IPython configuration files and profiles can be found [here](http://ipython.org/ipython-doc/dev/config/intro.html)."
184 "More details about IPython configuration files and profiles can be found [here](http://ipython.org/ipython-doc/dev/config/intro.html)."
87 ]
185 ]
88 },
186 },
@@ -101,140 +199,183 b''
101 "The IPython Notebook allows arbitrary code execution on the computer running it. Thus, the notebook web server should never be run on the open internet without first securing it. By default, the notebook server only listens on local network interface (`127.0.0.1`) There are two steps required to secure the notebook server:\n",
199 "The IPython Notebook allows arbitrary code execution on the computer running it. Thus, the notebook web server should never be run on the open internet without first securing it. By default, the notebook server only listens on local network interface (`127.0.0.1`) There are two steps required to secure the notebook server:\n",
102 "\n",
200 "\n",
103 "1. Setting a password\n",
201 "1. Setting a password\n",
104 "2. Encrypt network traffic using SSL\n",
202 "2. Encrypt network traffic using SSL"
105 "\n",
203 ]
106 "\n",
204 },
107 "\n",
205 {
108 "You can protect your notebook server with a simple single password by setting the `NotebookApp.password` configurable. You can prepare a hashed password using the function `IPython.lib.security.passwd`:\n",
206 "cell_type": "heading",
109 "\n",
207 "level": 3,
110 "```python\n",
208 "metadata": {},
111 "In [1]: from IPython.lib import passwd\n",
209 "source": [
112 "In [2]: passwd()\n",
210 "Setting a password"
113 "Enter password: \n",
211 ]
114 "Verify password: \n",
212 },
115 "Out[2]: 'sha1:67c9e60bb8b6:9ffede0825894254b2e042ea597d771089e11aed'\n",
213 {
116 "```\n",
214 "cell_type": "markdown",
117 "\n",
215 "metadata": {},
118 "<div class=\"alert alert-warn\">\n",
216 "source": [
119 "`IPython.lib.security.passwd` can also take the password as a string argument. **Do not** pass it as an argument inside an IPython session, as it will be saved in your input history.\n",
217 "You can protect your notebook server with a simple single password by setting the `NotebookApp.password` configurable. You can prepare a hashed password using the function `IPython.lib.passwd`:"
120 "</div>\n",
218 ]
121 "\n",
219 },
220 {
221 "cell_type": "code",
222 "collapsed": false,
223 "input": [
224 "from IPython.lib import passwd\n",
225 "password = passwd(\"secret\")\n",
226 "password"
227 ],
228 "language": "python",
229 "metadata": {},
230 "outputs": [
231 {
232 "metadata": {},
233 "output_type": "pyout",
234 "prompt_number": 1,
235 "text": [
236 "'sha1:6c2164fc2b22:ed55ecf07fc0f985ab46561483c0e888e8964ae6'"
237 ]
238 }
239 ],
240 "prompt_number": 1
241 },
242 {
243 "cell_type": "markdown",
244 "metadata": {},
245 "source": [
122 "You can then add this to your `ipython_notebook_config.py`:\n",
246 "You can then add this to your `ipython_notebook_config.py`:\n",
123 "\n",
247 "\n",
124 "```python\n",
248 "```python\n",
125 "# Password to use for web authentication\n",
249 "# Password to use for web authentication\n",
126 "c = get_config()\n",
250 "c = get_config()\n",
127 "c.NotebookApp.password = \n",
251 "c.NotebookApp.password = \n",
128 "u'sha1:67c9e60bb8b6:9ffede0825894254b2e042ea597d771089e11aed'\n",
252 "u'sha1:6c2164fc2b22:ed55ecf07fc0f985ab46561483c0e888e8964ae6'\n",
129 "```\n",
253 "```"
130 "When using a password, it is a good idea to also use SSL, so that your \n",
254 ]
131 "password is not sent unencrypted by your browser. You can start the notebook \n",
255 },
132 "to communicate via a secure protocol mode using a self-signed certificate with \n",
256 {
133 "the command::\n",
257 "cell_type": "heading",
134 "\n",
258 "level": 3,
135 " $ ipython notebook --certfile=mycert.pem\n",
259 "metadata": {},
136 "\n",
260 "source": [
137 ".. note::\n",
261 "Using SSL/HTTPS"
138 "\n",
139 " A self-signed certificate can be generated with ``openssl``. For example, \n",
140 " the following command will create a certificate valid for 365 days with \n",
141 " both the key and certificate data written to the same file::\n",
142 "\n",
143 " $ openssl req -x509 -nodes -days 365 -newkey rsa:1024 -keyout mycert.pem -out mycert.pem\n",
144 "\n",
145 "Your browser will warn you of a dangerous certificate because it is\n",
146 "self-signed. If you want to have a fully compliant certificate that will not\n",
147 "raise warnings, it is possible (but rather involved) to obtain one,\n",
148 "as explained in detail in `this tutorial`__.\n",
149 "\n",
150 ".. __: http://arstechnica.com/security/news/2009/12/how-to-get-set-with-a-secure-sertificate-for-free.ars\n",
151 "\t\n",
152 "Keep in mind that when you enable SSL support, you will need to access the\n",
153 "notebook server over ``https://``, not over plain ``http://``. The startup\n",
154 "message from the server prints this, but it is easy to overlook and think the\n",
155 "server is for some reason non-responsive."
156 ]
262 ]
157 },
263 },
158 {
264 {
159 "cell_type": "markdown",
265 "cell_type": "markdown",
160 "metadata": {},
266 "metadata": {},
161 "source": [
267 "source": [
162 "Running a public notebook server\n",
268 "When using a password, it is a good idea to also use SSL, so that your \n",
163 "--------------------------------\n",
269 "password is not sent unencrypted by your browser to the web server. When running the notebook on the public internet this is absolutely required.\n",
164 "\n",
270 "\n",
165 "If you want to access your notebook server remotely via a web browser,\n",
271 "The first step is to generate an SSL certificate. A self-signed certificate can be generated with ``openssl``. For example, the following command will create a certificate valid for 365 days with both the key and certificate data written to the same file:\n",
166 "you can do the following. \n",
167 "\n",
272 "\n",
168 "Start by creating a certificate file and a hashed password, as explained \n",
273 " openssl req -x509 -nodes -days 365 -newkey rsa:1024 -keyout mycert.pem -out mycert.pem\n",
169 "above. Then create a custom profile for the notebook, with the following \n",
170 "command line, type::\n",
171 "\n",
274 "\n",
172 " $ ipython profile create nbserver\n",
275 "In most cases, you should run this command in your profile directory, which will make it easy to use the generated key and certificate.\n",
173 "\n",
276 "\n",
174 "In the profile directory just created, edit the file \n",
277 "When you connect to a notebook server over HTTPS using a self-signed certificate, your browser will warn you of a dangerous certificate because it is self-signed. If you want to have a fully compliant certificate that will not raise warnings, it is possible (but rather involved) to obtain one,\n",
175 "``ipython_notebook_config.py``. By default, the file has all fields \n",
278 "as explained in detail in [this tutorial](http://arstechnica.com/security/news/2009/12/how-to-get-set-with-a-secure-sertificate-for-free.ars)\n",
176 "commented; the minimum set you need to uncomment and edit is the following::\n",
279 "\t\n",
280 "When you enable SSL support, you will need to access the notebook server over ``https://``, rather than plain ``http://``. The startup message from the notebook server prints the correct URL, but it is easy to overlook and think the server is for some reason non-responsive.\n",
177 "\n",
281 "\n",
178 " c = get_config()\n",
282 "Once you have generated the key and certificate, you can configure the notebook server to use them, by adding the following to `ipython_notebook_config.py`:\n",
179 "\n",
283 "\n",
180 " # Kernel config\n",
284 "```python\n",
181 " c.IPKernelApp.pylab = 'inline' # if you want plotting support always\n",
285 "# The full path to an SSL/TLS certificate file.\n",
286 "c.NotebookApp.certfile = u'/Users/bgranger/.ipython/profile_my_profile/mycert.crt'\n",
182 "\n",
287 "\n",
183 " # Notebook config\n",
288 "# The full path to a private key file for usage with SSL/TLS.\n",
184 " c.NotebookApp.certfile = u'/absolute/path/to/your/certificate/mycert.pem'\n",
289 "c.NotebookApp.keyfile = u'/Users/bgranger/.ipython/profile_my_profile/mycert.key'\n",
185 " c.NotebookApp.ip = '*'\n",
290 "```"
186 " c.NotebookApp.open_browser = False\n",
291 ]
187 " c.NotebookApp.password = u'sha1:bcd259ccf...[your hashed password here]'\n",
292 },
188 " # It is a good idea to put it on a known, fixed port\n",
293 {
189 " c.NotebookApp.port = 9999\n",
294 "cell_type": "heading",
295 "level": 2,
296 "metadata": {},
297 "source": [
298 "Running a public notebook server"
299 ]
300 },
301 {
302 "cell_type": "markdown",
303 "metadata": {},
304 "source": [
305 "<div class=\"alert alert-error\">\n",
306 "Don't run a public notebook server unless you first secure it with a password and SSL/HTTPS as described above\n",
307 "</div>\n",
190 "\n",
308 "\n",
191 "You can then start the notebook and access it later by pointing your browser \n",
309 "By default the notebook server only listens on the `localhost/127.0.0.1` network interface. If you want to connect to the notebook from another computers, or over the internet, you need to configure the notebook server to listen on all network interfaces and not open the browser. You will often also want to disable the automatic launching of the web browser.\n",
192 "to ``https://your.host.com:9999`` with ``ipython notebook \n",
193 "--profile=nbserver``.\n",
194 "\n",
310 "\n",
195 "Running with a different URL prefix\n",
311 "This can be accomplished by passing a command line options.\n",
196 "-----------------------------------\n",
197 "\n",
312 "\n",
198 "The notebook dashboard (the landing page with an overview\n",
313 " ipython notebook --ip=* --no-browser\n",
199 "of the notebooks in your working directory) typically lives at the URL\n",
200 "``http://localhost:8888/``. If you prefer that it lives, together with the \n",
201 "rest of the notebook, under a sub-directory,\n",
202 "e.g. ``http://localhost:8888/ipython/``, you can do so with\n",
203 "configuration options like the following (see above for instructions about\n",
204 "modifying ``ipython_notebook_config.py``)::\n",
205 "\n",
314 "\n",
206 " c.NotebookApp.base_url = '/ipython/'\n",
315 "You can also add the following to your`ipython_notebook_config.py` file:\n",
207 " c.NotebookApp.webapp_settings = {'static_url_prefix':'/ipython/static/'}\n",
208 "\n",
316 "\n",
209 "Using a different notebook store\n",
317 "```python\n",
210 "--------------------------------\n",
318 "c.NotebookApp.ip = '*'\n",
319 "c.NotebookApp.open_browser = False\n",
320 "```"
321 ]
322 },
323 {
324 "cell_type": "heading",
325 "level": 2,
326 "metadata": {},
327 "source": [
328 "Running with a different URL prefix"
329 ]
330 },
331 {
332 "cell_type": "markdown",
333 "metadata": {},
334 "source": [
335 "The notebook dashboard typically lives at the URL `http://localhost:8888/tree`. If you prefer that it lives, together with the \n",
336 "rest of the notebook web application, under a base URL prefix, such as `http://localhost:8888/ipython/tree`, you can do so by adding the following lines to your `ipython_notebook_config.py` file.\n",
211 "\n",
337 "\n",
212 "By default, the notebook server stores the notebook documents that it saves as \n",
338 "```python\n",
213 "files in the working directory of the notebook server, also known as the\n",
339 "c.NotebookApp.base_url = '/ipython/'\n",
214 "``notebook_dir``. This logic is implemented in the \n",
340 "c.NotebookApp.webapp_settings = {'static_url_prefix':'/ipython/static/'}\n",
215 ":class:`FileNotebookManager` class. However, the server can be configured to \n",
341 "```"
216 "use a different notebook manager class, which can \n",
342 ]
217 "store the notebooks in a different format. \n",
343 },
344 {
345 "cell_type": "heading",
346 "level": 2,
347 "metadata": {},
348 "source": [
349 "Using a different notebook store"
350 ]
351 },
352 {
353 "cell_type": "markdown",
354 "metadata": {},
355 "source": [
356 "By default, the notebook server stores the notebook documents that it saves as files in the working directory of the notebook server, also known as the\n",
357 "`notebook_dir`. This logic is implemented in the `FileNotebookManager` class. However, the server can be configured to use a different notebook manager class, which can store the notebooks in a different format. \n",
218 "\n",
358 "\n",
219 "The bookstore_ package currently allows users to store notebooks on Rackspace\n",
359 "The [bookstore](https://github.com/rgbkrk/bookstore) package currently allows users to store notebooks on Rackspace CloudFiles or OpenStack Swift based object stores.\n",
220 "CloudFiles or OpenStack Swift based object stores.\n",
221 "\n",
360 "\n",
222 "Writing a notebook manager is as simple as extending the base class\n",
361 "Writing a notebook manager is as simple as extending the base class `NotebookManager`. The [simple_notebook_manager](https://github.com/khinsen/simple_notebook_manager) provides a great example\n",
223 ":class:`NotebookManager`. The simple_notebook_manager_ provides a great example\n",
224 "of an in memory notebook manager, created solely for the purpose of\n",
362 "of an in memory notebook manager, created solely for the purpose of\n",
225 "illustrating the notebook manager API.\n",
363 "illustrating the notebook manager API."
226 "\n",
364 ]
227 ".. _bookstore: https://github.com/rgbkrk/bookstore\n",
365 },
228 "\n",
366 {
229 ".. _simple_notebook_manager: https://github.com/khinsen/simple_notebook_manager\n",
367 "cell_type": "heading",
230 "\n",
368 "level": 2,
231 "Known issues\n",
369 "metadata": {},
232 "------------\n",
370 "source": [
233 "\n",
371 "Known issues"
234 "When behind a proxy, especially if your system or browser is set to autodetect\n",
372 ]
235 "the proxy, the notebook web application might fail to connect to the server's\n",
373 },
236 "websockets, and present you with a warning at startup. In this case, you need\n",
374 {
237 "to configure your system not to use the proxy for the server's address.\n",
375 "cell_type": "markdown",
376 "metadata": {},
377 "source": [
378 "When behind a proxy, especially if your system or browser is set to autodetect the proxy, the notebook web application might fail to connect to the server's websockets, and present you with a warning at startup. In this case, you need to configure your system not to use the proxy for the server's address.\n",
238 "\n",
379 "\n",
239 "For example, in Firefox, go to the Preferences panel, Advanced section,\n",
380 "For example, in Firefox, go to the Preferences panel, Advanced section,\n",
240 "Network tab, click 'Settings...', and add the address of the notebook server\n",
381 "Network tab, click 'Settings...', and add the address of the notebook server\n",
@@ -1,7 +1,7 b''
1 {
1 {
2 "metadata": {
2 "metadata": {
3 "name": "",
3 "name": "",
4 "signature": "sha256:a52ac3735e5881fe8fe68f88d0113c3b1dca40cb809955db692fedb89b66a7fa"
4 "signature": "sha256:1cf51b66a39fb370f2fb3d08af95cfc79b8884f310509181b3b0586400e20b81"
5 },
5 },
6 "nbformat": 3,
6 "nbformat": 3,
7 "nbformat_minor": 0,
7 "nbformat_minor": 0,
@@ -20,7 +20,7 b''
20 "cell_type": "markdown",
20 "cell_type": "markdown",
21 "metadata": {},
21 "metadata": {},
22 "source": [
22 "source": [
23 "First and foremost, the IPython Notebook is an interactive environment for writing and running Python code."
23 "First and foremost, the IPython Notebook is an interactive environment for writing and running code. IPython is capable of running code in a wide range of languages. However, in IPython 2.0, the default kernel runs Python code."
24 ]
24 ]
25 },
25 },
26 {
26 {
@@ -35,18 +35,7 b''
35 "cell_type": "markdown",
35 "cell_type": "markdown",
36 "metadata": {},
36 "metadata": {},
37 "source": [
37 "source": [
38 "\n",
38 "Run a code cell using `Shift-Enter` or pressing the <button><i class=\"icon-play fa fa-play\"></i></button> button in the toolbar above:"
39 "<script type=\"text/javascript\">\n",
40 "var _toggle=false;\n",
41 "var hl = function (id, on){\n",
42 " $(id)[0].style.background = '';\n",
43 " if (on) {\n",
44 " $(id)[0].style.background = 'lightcyan';\n",
45 " }\n",
46 "};\n",
47 "</script>\n",
48 "\n",
49 "Run a code cell using `shift-enter` or pressing the <button class='btn btn-default btn-xs'><i class=\"icon-play fa fa-play\"></i></button> button in the <a href=\"#\" onMouseover=\"hl('#maintoolbar-container', 1)\" onMouseout=\"hl('#maintoolbar-container', 0)\">toolbar</a> above:"
50 ]
39 ]
51 },
40 },
52 {
41 {
@@ -80,6 +69,16 b''
80 "prompt_number": 2
69 "prompt_number": 2
81 },
70 },
82 {
71 {
72 "cell_type": "markdown",
73 "metadata": {},
74 "source": [
75 "There are two other keyboard shortcuts for running code:\n",
76 "\n",
77 "* `Alt-Enter` runs the current cell and inserts a new one below.\n",
78 "* `Ctrl-Enter` run the current cell and enters command mode."
79 ]
80 },
81 {
83 "cell_type": "heading",
82 "cell_type": "heading",
84 "level": 2,
83 "level": 2,
85 "metadata": {},
84 "metadata": {},
@@ -91,7 +90,7 b''
91 "cell_type": "markdown",
90 "cell_type": "markdown",
92 "metadata": {},
91 "metadata": {},
93 "source": [
92 "source": [
94 "Code is run in a separate process called the IPython Kernel. The Kernel can be interrupted or restarted. Try running the following cell and then hit the <button class='btn btn-default btn-xs'><i class='icon-stop fa fa-stop'></i></button> button in the <a href=\"#\" onMouseover=\"hl('#maintoolbar-container', 1)\" onMouseout=\"hl('#maintoolbar-container', 0)\">toolbar</a> above."
93 "Code is run in a separate process called the IPython Kernel. The Kernel can be interrupted or restarted. Try running the following cell and then hit the <button><i class='icon-stop fa fa-stop'></i></button> button in the toolbar above."
95 ]
94 ]
96 },
95 },
97 {
96 {
@@ -119,7 +118,8 b''
119 "input": [
118 "input": [
120 "import sys\n",
119 "import sys\n",
121 "from ctypes import CDLL\n",
120 "from ctypes import CDLL\n",
122 "# This will crash a Linux or Mac system; equivalent calls can be made on Windows\n",
121 "# This will crash a Linux or Mac system\n",
122 "# equivalent calls can be made on Windows\n",
123 "dll = 'dylib' if sys.platform == 'darwin' else 'so.6'\n",
123 "dll = 'dylib' if sys.platform == 'darwin' else 'so.6'\n",
124 "libc = CDLL(\"libc.%s\" % dll) \n",
124 "libc = CDLL(\"libc.%s\" % dll) \n",
125 "libc.time(-1) # BOOM!!"
125 "libc.time(-1) # BOOM!!"
@@ -133,332 +133,36 b''
133 "level": 2,
133 "level": 2,
134 "metadata": {},
134 "metadata": {},
135 "source": [
135 "source": [
136 "All of the goodness of IPython works"
136 "Cell menu"
137 ]
138 },
139 {
140 "cell_type": "markdown",
141 "metadata": {},
142 "source": [
143 "Here are two system aliases:"
144 ]
145 },
146 {
147 "cell_type": "code",
148 "collapsed": false,
149 "input": [
150 "pwd"
151 ],
152 "language": "python",
153 "metadata": {},
154 "outputs": [
155 {
156 "metadata": {},
157 "output_type": "pyout",
158 "prompt_number": 1,
159 "text": [
160 "u'/Users/bgranger/Documents/Computing/IPython/code/ipython/examples/Notebook/Tutorials'"
161 ]
162 }
163 ],
164 "prompt_number": 1
165 },
166 {
167 "cell_type": "code",
168 "collapsed": false,
169 "input": [
170 "ls"
171 ],
172 "language": "python",
173 "metadata": {},
174 "outputs": [
175 {
176 "output_type": "stream",
177 "stream": "stdout",
178 "text": [
179 "Basic Output.ipynb Plotting with Matplotlib.ipynb data.csv\r\n",
180 "Custom Display Logic.ipynb Running Code.ipynb \u001b[34mimages\u001b[m\u001b[m/\r\n",
181 "Display System.ipynb Typesetting Math Using MathJax.ipynb\r\n",
182 "Markdown Cells.ipynb User Interface.ipynb\r\n"
183 ]
184 }
185 ],
186 "prompt_number": 2
187 },
188 {
189 "cell_type": "markdown",
190 "metadata": {},
191 "source": [
192 "Any command line program can be run using `!` with string interpolation from Python variables:"
193 ]
194 },
195 {
196 "cell_type": "code",
197 "collapsed": false,
198 "input": [
199 "message = 'The IPython notebook is great!'\n",
200 "# note: the echo command does not run on Windows, it's a unix command.\n",
201 "!echo $message"
202 ],
203 "language": "python",
204 "metadata": {},
205 "outputs": [
206 {
207 "output_type": "stream",
208 "stream": "stdout",
209 "text": [
210 "The IPython notebook is great!\r\n"
211 ]
212 }
213 ],
214 "prompt_number": 3
215 },
216 {
217 "cell_type": "markdown",
218 "metadata": {},
219 "source": [
220 "Tab completion works:"
221 ]
137 ]
222 },
138 },
223 {
139 {
224 "cell_type": "code",
225 "collapsed": false,
226 "input": [
227 "import numpy"
228 ],
229 "language": "python",
230 "metadata": {},
231 "outputs": [],
232 "prompt_number": 5
233 },
234 {
235 "cell_type": "code",
236 "collapsed": false,
237 "input": [
238 "numpy.random."
239 ],
240 "language": "python",
241 "metadata": {},
242 "outputs": []
243 },
244 {
245 "cell_type": "markdown",
140 "cell_type": "markdown",
246 "metadata": {},
141 "metadata": {},
247 "source": [
142 "source": [
248 "Shift-Tab on selection, or after `(` brings up a tooltip with the docstring:"
143 "The \"Cell\" menu has a number of menu items for running code in different ways. These includes:\n",
249 ]
144 "\n",
250 },
145 "* Run and Select Below\n",
251 {
146 "* Run and Insert Below\n",
252 "cell_type": "code",
147 "* Run All\n",
253 "collapsed": false,
148 "* Run All Above\n",
254 "input": [
149 "* Run All Below"
255 "numpy.random.rand("
256 ],
257 "language": "python",
258 "metadata": {},
259 "outputs": []
260 },
261 {
262 "cell_type": "markdown",
263 "metadata": {},
264 "source": [
265 "Adding `?` opens the docstring in the pager below:"
266 ]
267 },
268 {
269 "cell_type": "code",
270 "collapsed": false,
271 "input": [
272 "magic?"
273 ],
274 "language": "python",
275 "metadata": {},
276 "outputs": [],
277 "prompt_number": 8
278 },
279 {
280 "cell_type": "markdown",
281 "metadata": {},
282 "source": [
283 "Exceptions are formatted nicely:"
284 ]
150 ]
285 },
151 },
286 {
152 {
287 "cell_type": "code",
288 "collapsed": false,
289 "input": [
290 "x = 1\n",
291 "y = 4\n",
292 "z = y/(1-x)"
293 ],
294 "language": "python",
295 "metadata": {},
296 "outputs": [
297 {
298 "ename": "ZeroDivisionError",
299 "evalue": "integer division or modulo by zero",
300 "output_type": "pyerr",
301 "traceback": [
302 "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m\n\u001b[0;31mZeroDivisionError\u001b[0m Traceback (most recent call last)",
303 "\u001b[0;32m<ipython-input-6-dc39888fd1d2>\u001b[0m in \u001b[0;36m<module>\u001b[0;34m()\u001b[0m\n\u001b[1;32m 1\u001b[0m \u001b[0mx\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0;36m1\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 2\u001b[0m \u001b[0my\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0;36m4\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m----> 3\u001b[0;31m \u001b[0mz\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0my\u001b[0m\u001b[0;34m/\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;36m1\u001b[0m\u001b[0;34m-\u001b[0m\u001b[0mx\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m",
304 "\u001b[0;31mZeroDivisionError\u001b[0m: integer division or modulo by zero"
305 ]
306 }
307 ],
308 "prompt_number": 6
309 },
310 {
311 "cell_type": "heading",
153 "cell_type": "heading",
312 "level": 2,
154 "level": 2,
313 "metadata": {},
155 "metadata": {},
314 "source": [
156 "source": [
315 "Working with external code"
157 "Restarting the kernels"
316 ]
158 ]
317 },
159 },
318 {
160 {
319 "cell_type": "markdown",
161 "cell_type": "markdown",
320 "metadata": {},
162 "metadata": {},
321 "source": [
163 "source": [
322 "There are a number of ways of getting external code into code cells."
164 "The kernel maintains the state of a notebook's computations. You can reset this state by restarting the kernel. This is done by clicking on the <button><i class='icon-repeat'></i></button> in the toolbar above."
323 ]
324 },
325 {
326 "cell_type": "markdown",
327 "metadata": {},
328 "source": [
329 "Pasting code with `>>>` prompts works as expected:"
330 ]
331 },
332 {
333 "cell_type": "code",
334 "collapsed": false,
335 "input": [
336 ">>> the_world_is_flat = 1\n",
337 ">>> if the_world_is_flat:\n",
338 "... print(\"Be careful not to fall off!\")"
339 ],
340 "language": "python",
341 "metadata": {},
342 "outputs": [
343 {
344 "output_type": "stream",
345 "stream": "stdout",
346 "text": [
347 "Be careful not to fall off!\n"
348 ]
349 }
350 ],
351 "prompt_number": 7
352 },
353 {
354 "cell_type": "markdown",
355 "metadata": {},
356 "source": [
357 "The `%load` magic lets you load code from URLs or local files:"
358 ]
165 ]
359 },
360 {
361 "cell_type": "code",
362 "collapsed": false,
363 "input": [
364 "%load?"
365 ],
366 "language": "python",
367 "metadata": {},
368 "outputs": [],
369 "prompt_number": 8
370 },
371 {
372 "cell_type": "code",
373 "collapsed": false,
374 "input": [
375 "%matplotlib inline"
376 ],
377 "language": "python",
378 "metadata": {},
379 "outputs": [],
380 "prompt_number": 9
381 },
382 {
383 "cell_type": "code",
384 "collapsed": false,
385 "input": [
386 "%load http://matplotlib.org/mpl_examples/showcase/integral_demo.py"
387 ],
388 "language": "python",
389 "metadata": {},
390 "outputs": [],
391 "prompt_number": 10
392 },
393 {
394 "cell_type": "code",
395 "collapsed": false,
396 "input": [
397 "\"\"\"\n",
398 "Plot demonstrating the integral as the area under a curve.\n",
399 "\n",
400 "Although this is a simple example, it demonstrates some important tweaks:\n",
401 "\n",
402 " * A simple line plot with custom color and line width.\n",
403 " * A shaded region created using a Polygon patch.\n",
404 " * A text label with mathtext rendering.\n",
405 " * figtext calls to label the x- and y-axes.\n",
406 " * Use of axis spines to hide the top and right spines.\n",
407 " * Custom tick placement and labels.\n",
408 "\"\"\"\n",
409 "import numpy as np\n",
410 "import matplotlib.pyplot as plt\n",
411 "from matplotlib.patches import Polygon\n",
412 "\n",
413 "\n",
414 "def func(x):\n",
415 " return (x - 3) * (x - 5) * (x - 7) + 85\n",
416 "\n",
417 "\n",
418 "a, b = 2, 9 # integral limits\n",
419 "x = np.linspace(0, 10)\n",
420 "y = func(x)\n",
421 "\n",
422 "fig, ax = plt.subplots()\n",
423 "plt.plot(x, y, 'r', linewidth=2)\n",
424 "plt.ylim(ymin=0)\n",
425 "\n",
426 "# Make the shaded region\n",
427 "ix = np.linspace(a, b)\n",
428 "iy = func(ix)\n",
429 "verts = [(a, 0)] + list(zip(ix, iy)) + [(b, 0)]\n",
430 "poly = Polygon(verts, facecolor='0.9', edgecolor='0.5')\n",
431 "ax.add_patch(poly)\n",
432 "\n",
433 "plt.text(0.5 * (a + b), 30, r\"$\\int_a^b f(x)\\mathrm{d}x$\",\n",
434 " horizontalalignment='center', fontsize=20)\n",
435 "\n",
436 "plt.figtext(0.9, 0.05, '$x$')\n",
437 "plt.figtext(0.1, 0.9, '$y$')\n",
438 "\n",
439 "ax.spines['right'].set_visible(False)\n",
440 "ax.spines['top'].set_visible(False)\n",
441 "ax.xaxis.set_ticks_position('bottom')\n",
442 "\n",
443 "ax.set_xticks((a, b))\n",
444 "ax.set_xticklabels(('$a$', '$b$'))\n",
445 "ax.set_yticks([])\n",
446 "\n",
447 "plt.show()\n"
448 ],
449 "language": "python",
450 "metadata": {},
451 "outputs": [
452 {
453 "metadata": {},
454 "output_type": "display_data",
455 "png": "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\niISh/weZPyRnS1m/IAAAAABJRU5ErkJggg==\n",
456 "text": [
457 "<matplotlib.figure.Figure at 0x108604e50>"
458 ]
459 }
460 ],
461 "prompt_number": 11
462 }
166 }
463 ],
167 ],
464 "metadata": {}
168 "metadata": {}
@@ -1,7 +1,7 b''
1 {
1 {
2 "metadata": {
2 "metadata": {
3 "name": "",
3 "name": "",
4 "signature": "sha256:056f083d2453c83c77ea0a659e9185084426263c9e42b4c0ccbb91c773d9503b"
4 "signature": "sha256:3b7cae0c0936f25e6ccb7acafe310c08a4162a1a7fd66fa9874a52cffa0f64f9"
5 },
5 },
6 "nbformat": 3,
6 "nbformat": 3,
7 "nbformat_minor": 0,
7 "nbformat_minor": 0,
@@ -187,6 +187,53 b''
187 "level": 2,
187 "level": 2,
188 "metadata": {},
188 "metadata": {},
189 "source": [
189 "source": [
190 "Github flavored markdown (GFM)"
191 ]
192 },
193 {
194 "cell_type": "markdown",
195 "metadata": {},
196 "source": [
197 "The Notebook webapp support Github flavored markdown meaning that you can use triple backticks for code blocks \n",
198 "<pre>\n",
199 "```python\n",
200 "print \"Hello World\"\n",
201 "```\n",
202 "\n",
203 "```javascript\n",
204 "console.log(\"Hello World\")\n",
205 "```\n",
206 "</pre>\n",
207 "\n",
208 "Gives \n",
209 "```python\n",
210 "print \"Hello World\"\n",
211 "```\n",
212 "\n",
213 "```javascript\n",
214 "console.log(\"Hello World\")\n",
215 "```\n",
216 "\n",
217 "And a table like this : \n",
218 "\n",
219 "<pre>\n",
220 "| This | is |\n",
221 "|------|------|\n",
222 "| a | table| \n",
223 "</pre>\n",
224 "\n",
225 "A nice Html Table\n",
226 "\n",
227 "| This | is |\n",
228 "|------|------|\n",
229 "| a | table| "
230 ]
231 },
232 {
233 "cell_type": "heading",
234 "level": 2,
235 "metadata": {},
236 "source": [
190 "General HTML"
237 "General HTML"
191 ]
238 ]
192 },
239 },
General Comments 0
You need to be logged in to leave comments. Login now