##// END OF EJS Templates
Add diagram of notebook components
Thomas Kluyver -
Show More
1 NO CONTENT: new file 100644, binary diff hidden
NO CONTENT: new file 100644, binary diff hidden
@@ -0,0 +1,474 b''
1 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
2 <!-- Created with Inkscape (http://www.inkscape.org/) -->
3
4 <svg
5 xmlns:dc="http://purl.org/dc/elements/1.1/"
6 xmlns:cc="http://creativecommons.org/ns#"
7 xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
8 xmlns:svg="http://www.w3.org/2000/svg"
9 xmlns="http://www.w3.org/2000/svg"
10 xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
11 xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
12 width="711.70575"
13 height="401.44141"
14 id="svg2"
15 version="1.1"
16 inkscape:version="0.48.5 r10040"
17 sodipodi:docname="notebook_components.svg"
18 inkscape:export-filename="/home/takluyver/Code/ipython/docs/source/development/figs/notebook_components.png"
19 inkscape:export-xdpi="80"
20 inkscape:export-ydpi="80">
21 <defs
22 id="defs4">
23 <marker
24 inkscape:stockid="Arrow2Lend"
25 orient="auto"
26 refY="0"
27 refX="0"
28 id="Arrow2Lend"
29 style="overflow:visible">
30 <path
31 id="path3966"
32 style="fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round"
33 d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
34 transform="matrix(-1.1,0,0,-1.1,-1.1,0)"
35 inkscape:connector-curvature="0" />
36 </marker>
37 <marker
38 inkscape:stockid="Arrow1Lstart"
39 orient="auto"
40 refY="0"
41 refX="0"
42 id="Arrow1Lstart"
43 style="overflow:visible">
44 <path
45 id="path3945"
46 d="M 0,0 5,-5 -12.5,0 5,5 0,0 z"
47 style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt"
48 transform="matrix(0.8,0,0,0.8,10,0)"
49 inkscape:connector-curvature="0" />
50 </marker>
51 <marker
52 inkscape:stockid="Arrow1Lend"
53 orient="auto"
54 refY="0"
55 refX="0"
56 id="Arrow1Lend"
57 style="overflow:visible">
58 <path
59 id="path3948"
60 d="M 0,0 5,-5 -12.5,0 5,5 0,0 z"
61 style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt"
62 transform="matrix(-0.8,0,0,-0.8,-10,0)"
63 inkscape:connector-curvature="0" />
64 </marker>
65 <marker
66 inkscape:stockid="Arrow2Lend"
67 orient="auto"
68 refY="0"
69 refX="0"
70 id="Arrow2Lend-2"
71 style="overflow:visible">
72 <path
73 inkscape:connector-curvature="0"
74 id="path3966-2"
75 style="fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round"
76 d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
77 transform="matrix(-1.1,0,0,-1.1,-1.1,0)" />
78 </marker>
79 <marker
80 inkscape:stockid="Arrow2Lend"
81 orient="auto"
82 refY="0"
83 refX="0"
84 id="Arrow2Lend-6"
85 style="overflow:visible">
86 <path
87 inkscape:connector-curvature="0"
88 id="path3966-4"
89 style="fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round"
90 d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
91 transform="matrix(-1.1,0,0,-1.1,-1.1,0)" />
92 </marker>
93 <marker
94 inkscape:stockid="Arrow2Lend"
95 orient="auto"
96 refY="0"
97 refX="0"
98 id="marker5355"
99 style="overflow:visible">
100 <path
101 inkscape:connector-curvature="0"
102 id="path5357"
103 style="fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round"
104 d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
105 transform="matrix(-1.1,0,0,-1.1,-1.1,0)" />
106 </marker>
107 <marker
108 inkscape:stockid="Arrow2Lend"
109 orient="auto"
110 refY="0"
111 refX="0"
112 id="marker5355-3"
113 style="overflow:visible">
114 <path
115 inkscape:connector-curvature="0"
116 id="path5357-0"
117 style="fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round"
118 d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
119 transform="matrix(-1.1,0,0,-1.1,-1.1,0)" />
120 </marker>
121 <marker
122 inkscape:stockid="Arrow2Lend"
123 orient="auto"
124 refY="0"
125 refX="0"
126 id="Arrow2Lend-3"
127 style="overflow:visible">
128 <path
129 inkscape:connector-curvature="0"
130 id="path3966-1"
131 style="fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round"
132 d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
133 transform="matrix(-1.1,0,0,-1.1,-1.1,0)" />
134 </marker>
135 <marker
136 inkscape:stockid="Arrow2Lend"
137 orient="auto"
138 refY="0"
139 refX="0"
140 id="marker5355-33"
141 style="overflow:visible">
142 <path
143 inkscape:connector-curvature="0"
144 id="path5357-7"
145 style="fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round"
146 d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
147 transform="matrix(-1.1,0,0,-1.1,-1.1,0)" />
148 </marker>
149 <marker
150 inkscape:stockid="Arrow2Lend"
151 orient="auto"
152 refY="0"
153 refX="0"
154 id="Arrow2Lend-69"
155 style="overflow:visible">
156 <path
157 inkscape:connector-curvature="0"
158 id="path3966-3"
159 style="fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round"
160 d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
161 transform="matrix(-1.1,0,0,-1.1,-1.1,0)" />
162 </marker>
163 <marker
164 inkscape:stockid="Arrow2Lend"
165 orient="auto"
166 refY="0"
167 refX="0"
168 id="marker5355-0"
169 style="overflow:visible">
170 <path
171 inkscape:connector-curvature="0"
172 id="path5357-5"
173 style="fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round"
174 d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
175 transform="matrix(-1.1,0,0,-1.1,-1.1,0)" />
176 </marker>
177 <marker
178 inkscape:stockid="Arrow2Lend"
179 orient="auto"
180 refY="0"
181 refX="0"
182 id="Arrow2Lend-8"
183 style="overflow:visible">
184 <path
185 inkscape:connector-curvature="0"
186 id="path3966-32"
187 style="fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round"
188 d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
189 transform="matrix(-1.1,0,0,-1.1,-1.1,0)" />
190 </marker>
191 </defs>
192 <sodipodi:namedview
193 id="base"
194 pagecolor="#ffffff"
195 bordercolor="#666666"
196 borderopacity="1.0"
197 inkscape:pageopacity="0.0"
198 inkscape:pageshadow="2"
199 inkscape:zoom="0.98994949"
200 inkscape:cx="414.30751"
201 inkscape:cy="88.902823"
202 inkscape:document-units="px"
203 inkscape:current-layer="layer1"
204 showgrid="false"
205 inkscape:window-width="1680"
206 inkscape:window-height="1014"
207 inkscape:window-x="0"
208 inkscape:window-y="0"
209 inkscape:window-maximized="1"
210 fit-margin-top="1"
211 fit-margin-left="1"
212 fit-margin-right="1"
213 fit-margin-bottom="1"
214 units="cm" />
215 <metadata
216 id="metadata7">
217 <rdf:RDF>
218 <cc:Work
219 rdf:about="">
220 <dc:format>image/svg+xml</dc:format>
221 <dc:type
222 rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
223 <dc:title></dc:title>
224 </cc:Work>
225 </rdf:RDF>
226 </metadata>
227 <g
228 inkscape:label="Layer 1"
229 inkscape:groupmode="layer"
230 id="layer1"
231 transform="translate(16.616428,19.440029)">
232 <g
233 id="g3811"
234 transform="translate(-35.878169,-100.12183)">
235 <path
236 transform="translate(8.0812186,26.049684)"
237 d="m 98.994951,154.33656 c 0,7.2526 -5.879389,13.13199 -13.131983,13.13199 -7.252593,0 -13.131982,-5.87939 -13.131982,-13.13199 0,-7.25259 5.879389,-13.13198 13.131982,-13.13198 7.252594,0 13.131983,5.87939 13.131983,13.13198 z"
238 sodipodi:ry="13.131983"
239 sodipodi:rx="13.131983"
240 sodipodi:cy="154.33656"
241 sodipodi:cx="85.862968"
242 id="path3755"
243 style="fill:none;stroke:#000000;stroke-width:2;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
244 sodipodi:type="arc" />
245 <path
246 inkscape:connector-curvature="0"
247 id="path3757"
248 d="m 93.944187,193.73252 0,69.70052"
249 style="fill:none;stroke:#000000;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
250 <path
251 inkscape:connector-curvature="0"
252 id="path3759"
253 d="m 70.205601,211.91526 47.477169,0"
254 style="fill:none;stroke:#000000;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
255 <path
256 sodipodi:nodetypes="cc"
257 inkscape:connector-curvature="0"
258 id="path3761"
259 d="m 75.691891,294.16241 17.96658,-30.72937"
260 style="fill:none;stroke:#000000;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
261 <path
262 sodipodi:nodetypes="cc"
263 inkscape:connector-curvature="0"
264 id="path3761-3"
265 d="M 112.10981,294.16241 94.143243,263.43304"
266 style="fill:none;stroke:#000000;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
267 </g>
268 <g
269 id="g5730"
270 transform="translate(-48,-88)">
271 <rect
272 ry="17.142857"
273 y="186.6479"
274 x="198.57143"
275 height="78.571426"
276 width="130"
277 id="rect3818"
278 style="fill:#e3d7f4;stroke:#000000;stroke-width:2;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
279 <text
280 sodipodi:linespacing="125%"
281 id="text3820"
282 y="235.79105"
283 x="210.28529"
284 style="font-size:28px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:Droid Sans;-inkscape-font-specification:Droid Sans"
285 xml:space="preserve"><tspan
286 y="235.79105"
287 x="210.28529"
288 id="tspan3822"
289 sodipodi:role="line">Browser</tspan></text>
290 </g>
291 <g
292 id="g5719"
293 transform="translate(-48,-88)">
294 <rect
295 ry="17.142857"
296 y="186.6479"
297 x="387.62143"
298 height="78.571426"
299 width="130"
300 id="rect3818-6"
301 style="fill:#e3f4d7;stroke:#000000;stroke-width:2;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
302 <text
303 sodipodi:linespacing="125%"
304 id="text3820-1"
305 y="219.43362"
306 x="451.40903"
307 style="font-size:28px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:center;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;font-family:Droid Sans;-inkscape-font-specification:Droid Sans"
308 xml:space="preserve"><tspan
309 style="font-size:26px"
310 y="219.43362"
311 x="451.40903"
312 id="tspan3822-0"
313 sodipodi:role="line">Notebook</tspan><tspan
314 style="font-size:26px"
315 id="tspan3870"
316 y="251.93362"
317 x="451.40903"
318 sodipodi:role="line">server</tspan></text>
319 </g>
320 <g
321 id="g5725"
322 transform="translate(-48,-88)">
323 <rect
324 ry="17.142857"
325 y="186.6479"
326 x="576.67145"
327 height="78.571426"
328 width="130"
329 id="rect3818-3"
330 style="fill:#e3f4d7;stroke:#000000;stroke-width:2;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
331 <text
332 sodipodi:linespacing="125%"
333 id="text3820-2"
334 y="236.43361"
335 x="600.9361"
336 style="font-size:28px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:Droid Sans;-inkscape-font-specification:Droid Sans"
337 xml:space="preserve"><tspan
338 y="236.43361"
339 x="600.9361"
340 id="tspan3822-3"
341 sodipodi:role="line">Kernel</tspan></text>
342 </g>
343 <g
344 id="g3931"
345 transform="matrix(0.74285712,0,0,0.74285712,111.19287,-38.812036)">
346 <path
347 sodipodi:nodetypes="cccccc"
348 inkscape:connector-curvature="0"
349 id="rect2993"
350 d="m 346.23657,370.02731 78.76344,0 18.76344,18.76345 0,128.76344 -97.52688,0 z"
351 style="fill:#ffffff;fill-opacity:1;stroke:#000000;stroke-width:2.47311282;stroke-miterlimit:4;stroke-opacity:1" />
352 <text
353 transform="matrix(0,-1,1,0,0,0)"
354 sodipodi:linespacing="125%"
355 id="text2996"
356 y="388"
357 x="-445.09641"
358 style="font-size:28px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:center;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;font-family:Droid Sans;-inkscape-font-specification:Droid Sans"
359 xml:space="preserve"><tspan
360 y="388"
361 x="-445.09641"
362 id="tspan2998"
363 sodipodi:role="line">Notebook</tspan><tspan
364 id="tspan3929"
365 y="423"
366 x="-445.09641"
367 sodipodi:role="line">file</tspan></text>
368 </g>
369 <g
370 id="g5575"
371 transform="translate(-48,-86.605048)">
372 <path
373 inkscape:connector-curvature="0"
374 id="path3939"
375 d="m 140.51539,230.56085 55.71428,0"
376 style="fill:none;stroke:#000000;stroke-width:1.70000005;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;marker-start:none;marker-end:url(#marker5355)" />
377 <path
378 inkscape:connector-curvature="0"
379 id="path3939-1"
380 d="m 197.88571,218.51648 -55.71428,0"
381 style="fill:none;stroke:#000000;stroke-width:1.70000005;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;marker-start:none;marker-end:url(#Arrow2Lend)" />
382 </g>
383 <text
384 xml:space="preserve"
385 style="font-size:32px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:Droid Sans;-inkscape-font-specification:Droid Sans"
386 x="-178.41751"
387 y="41.691643"
388 id="text5579"
389 sodipodi:linespacing="125%"
390 transform="matrix(0,-1,1,0,0,0)"><tspan
391 sodipodi:role="line"
392 id="tspan5581"
393 x="-178.41751"
394 y="41.691643">User</tspan></text>
395 <g
396 transform="matrix(0,1,-1,0,629.1601,37.48252)"
397 id="g5575-1-4-9">
398 <path
399 inkscape:connector-curvature="0"
400 id="path3939-3-2-0"
401 d="m 140.51539,230.56085 55.71428,0"
402 style="fill:none;stroke:#000000;stroke-width:1.70000005;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;marker-start:none;marker-end:url(#marker5355)" />
403 <path
404 inkscape:connector-curvature="0"
405 id="path3939-1-4-3-6"
406 d="m 197.88571,218.51648 -55.71428,0"
407 style="fill:none;stroke:#000000;stroke-width:1.70000005;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;marker-start:none;marker-end:url(#Arrow2Lend)" />
408 </g>
409 <g
410 id="g5781"
411 transform="translate(-48,-88)">
412 <g
413 id="g5575-1-4"
414 transform="translate(377.94589,1.3949516)">
415 <path
416 style="fill:none;stroke:#000000;stroke-width:1.70000005;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;marker-start:none;marker-end:url(#marker5355)"
417 d="m 140.51539,230.56085 55.71428,0"
418 id="path3939-3-2"
419 inkscape:connector-curvature="0" />
420 <path
421 style="fill:none;stroke:#000000;stroke-width:1.70000005;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;marker-start:none;marker-end:url(#Arrow2Lend)"
422 d="m 197.88571,218.51648 -55.71428,0"
423 id="path3939-1-4-3"
424 inkscape:connector-curvature="0" />
425 </g>
426 <text
427 transform="matrix(0,-1,1,0,0,0)"
428 sodipodi:linespacing="125%"
429 id="text5735"
430 y="552.92767"
431 x="-210.12585"
432 style="font-size:20px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:Droid Sans;-inkscape-font-specification:Droid Sans"
433 xml:space="preserve"><tspan
434 y="552.92767"
435 x="-210.12585"
436 id="tspan5737"
437 sodipodi:role="line">ØMQ</tspan></text>
438 </g>
439 <g
440 id="g5788"
441 transform="translate(-48,-88)">
442 <g
443 id="g5575-1"
444 transform="translate(188.89588,1.3949516)">
445 <path
446 style="fill:none;stroke:#000000;stroke-width:1.70000005;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;marker-start:none;marker-end:url(#marker5355)"
447 d="m 140.51539,230.56085 55.71428,0"
448 id="path3939-3"
449 inkscape:connector-curvature="0" />
450 <path
451 style="fill:none;stroke:#000000;stroke-width:1.70000005;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;marker-start:none;marker-end:url(#Arrow2Lend)"
452 d="m 197.88571,218.51648 -55.71428,0"
453 id="path3939-1-4"
454 inkscape:connector-curvature="0" />
455 </g>
456 <text
457 transform="matrix(0,-1,1,0,0,0)"
458 sodipodi:linespacing="125%"
459 id="text5735-1"
460 y="352.74976"
461 x="-209.10046"
462 style="font-size:20px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:Droid Sans;-inkscape-font-specification:Droid Sans"
463 xml:space="preserve"><tspan
464 y="352.74976"
465 x="-209.10046"
466 id="tspan5737-1"
467 sodipodi:role="line">HTTP &amp;</tspan><tspan
468 id="tspan5760"
469 y="377.74976"
470 x="-209.10046"
471 sodipodi:role="line">Websockets</tspan></text>
472 </g>
473 </g>
474 </svg>
@@ -1,89 +1,89 b''
1 How IPython Works
1 How IPython Works
2 =================
2 =================
3
3
4 Terminal IPython
4 Terminal IPython
5 ----------------
5 ----------------
6
6
7 When you type ``ipython``, you get the original IPython interface, running in
7 When you type ``ipython``, you get the original IPython interface, running in
8 the terminal. It does something like this::
8 the terminal. It does something like this::
9
9
10 while True:
10 while True:
11 code = input(">>> ")
11 code = input(">>> ")
12 exec(code)
12 exec(code)
13
13
14 Of course, it's much more complicated, because it has to deal with multi-line
14 Of course, it's much more complicated, because it has to deal with multi-line
15 code, tab completion using :mod:`readline`, magic commands, and so on. But the
15 code, tab completion using :mod:`readline`, magic commands, and so on. But the
16 model is like that: prompt the user for some code, and when they've entered it,
16 model is like that: prompt the user for some code, and when they've entered it,
17 exec it in the same process.
17 exec it in the same process.
18
18
19 The IPython Kernel
19 The IPython Kernel
20 ------------------
20 ------------------
21
21
22 All the other interfaces—the Notebook, the Qt console, ``ipython console`` in
22 All the other interfaces—the Notebook, the Qt console, ``ipython console`` in
23 the terminal, and third party interfaces—use the IPython Kernel. This is a
23 the terminal, and third party interfaces—use the IPython Kernel. This is a
24 separate process which is responsible for running user code, and things like
24 separate process which is responsible for running user code, and things like
25 computing possible completions. Frontends communicate with it using JSON
25 computing possible completions. Frontends communicate with it using JSON
26 messages sent over ZeroMQ sockets; the protocol they use is described in
26 messages sent over ZeroMQ sockets; the protocol they use is described in
27 :doc:`messaging`.
27 :doc:`messaging`.
28
28
29 The core execution machinery for the kernel is shared with terminal IPython:
29 The core execution machinery for the kernel is shared with terminal IPython:
30
30
31 .. image:: figs/ipy_kernel_and_terminal.png
31 .. image:: figs/ipy_kernel_and_terminal.png
32
32
33 A kernel process can be connected to more than one frontend simultaneously. In
33 A kernel process can be connected to more than one frontend simultaneously. In
34 this case, the different frontends will have access to the same variables.
34 this case, the different frontends will have access to the same variables.
35
35
36 .. TODO: Diagram illustrating this?
36 .. TODO: Diagram illustrating this?
37
37
38 This design was intended to allow easy development of different frontends based
38 This design was intended to allow easy development of different frontends based
39 on the same kernel, but it also made it possible to support new languages in the
39 on the same kernel, but it also made it possible to support new languages in the
40 same frontends, by developing kernels in those languages, and we are refining
40 same frontends, by developing kernels in those languages, and we are refining
41 IPython to make that more practical.
41 IPython to make that more practical.
42
42
43 Today, there are two ways to develop a kernel for another language. Wrapper
43 Today, there are two ways to develop a kernel for another language. Wrapper
44 kernels reuse the communications machinery from IPython, and implement only the
44 kernels reuse the communications machinery from IPython, and implement only the
45 core execution part. Native kernels implement execution and communications in
45 core execution part. Native kernels implement execution and communications in
46 the target language:
46 the target language:
47
47
48 .. image:: figs/other_kernels.png
48 .. image:: figs/other_kernels.png
49
49
50 .. seealso::
50 .. seealso::
51
51
52 :doc:`kernels`
52 :doc:`kernels`
53
53
54 :doc:`wrapperkernels`
54 :doc:`wrapperkernels`
55
55
56 Notebooks
56 Notebooks
57 ---------
57 ---------
58
58
59 The Notebook frontend does something extra. In addition to running your code, it
59 The Notebook frontend does something extra. In addition to running your code, it
60 stores code and output, together with markdown notes, in an editable document
60 stores code and output, together with markdown notes, in an editable document
61 called a notebook. When you save it, this is sent from your browser to the
61 called a notebook. When you save it, this is sent from your browser to the
62 notebook server, which saves it on disk as a JSON file with a ``.ipynb``
62 notebook server, which saves it on disk as a JSON file with a ``.ipynb``
63 extension.
63 extension.
64
64
65 .. TODO: Diagram of how these pieces fit together.
65 .. image:: figs/notebook_components.png
66
66
67 The notebook server, not the kernel, is responsible for saving and loading
67 The notebook server, not the kernel, is responsible for saving and loading
68 notebooks, so you can edit notebooks even if you don't have the kernel for that
68 notebooks, so you can edit notebooks even if you don't have the kernel for that
69 language—you just won't be able to run code. The kernel doesn't know anything
69 language—you just won't be able to run code. The kernel doesn't know anything
70 about the notebook document: it just gets sent cells of code to execute when the
70 about the notebook document: it just gets sent cells of code to execute when the
71 user runs them.
71 user runs them.
72
72
73 Exporting to other formats
73 Exporting to other formats
74 ``````````````````````````
74 ``````````````````````````
75
75
76 The Nbconvert tool in IPython converts notebook files to other formats, such as
76 The Nbconvert tool in IPython converts notebook files to other formats, such as
77 HTML, LaTeX, or reStructuredText. This conversion goes through a series of steps:
77 HTML, LaTeX, or reStructuredText. This conversion goes through a series of steps:
78
78
79 .. image:: figs/nbconvert.png
79 .. image:: figs/nbconvert.png
80
80
81 1. Preprocessors modify the notebook in memory. E.g. ExecutePreprocessor runs
81 1. Preprocessors modify the notebook in memory. E.g. ExecutePreprocessor runs
82 the code in the notebook and updates the output.
82 the code in the notebook and updates the output.
83 2. An exporter converts the notebook to another file format. Most of the
83 2. An exporter converts the notebook to another file format. Most of the
84 exporters use templates for this.
84 exporters use templates for this.
85 3. Postprocessors work on the file produced by exporting.
85 3. Postprocessors work on the file produced by exporting.
86
86
87 The `nbviewer <http://nbviewer.ipython.org/>`_ website uses nbconvert with the
87 The `nbviewer <http://nbviewer.ipython.org/>`_ website uses nbconvert with the
88 HTML exporter. When you give it a URL, it fetches the notebook from that URL,
88 HTML exporter. When you give it a URL, it fetches the notebook from that URL,
89 converts it to HTML, and serves that HTML to you.
89 converts it to HTML, and serves that HTML to you.
General Comments 0
You need to be logged in to leave comments. Login now