OrderedCollection [
	GrafoscopioNode {
		#header : 'Introduction',
		#body : 'This is a companion notebook for the *Entreprise  Pharo: A web perspective* book available at the
[Pharo Books][pharo-books] web page.
As usual, it follows the same structure of the book, as I\'m advancing on it, and sometimes it presents
complementary material that was not available in the book originally.

This companion notebook is intended to be read with the Enterprise Pharo Book, to execute the code 
here, but adding the context and more explanations of the book. 

The nodes marked as "Extra" were not part of the original material, but were added to deal 
with other related matters explored by ourselves.',
		#children : OrderedCollection [ ],
		#parent : GrafoscopioNode {
			#header : 'Arbol principal',
			#body : '',
			#children : @1,
			#level : 0,
			#nodesInPreorder : OrderedCollection [
				@4,
				@2,
				GrafoscopioNode {
					#header : '%idea links',
					#body : '[pharo-books]: http://files.pharo.org/books/
[tealight]: https://github.com/astares/Tealight',
					#children : OrderedCollection [ ],
					#parent : @4,
					#level : 1,
					#links : OrderedCollection [
						''
					]
				},
				GrafoscopioNode {
					#header : 'Simple Web applications',
					#body : '',
					#children : OrderedCollection [
						GrafoscopioNode {
							#header : 'Teapot',
							#body : '',
							#children : OrderedCollection [
								GrafoscopioNode {
									#header : 'Getting Started',
									#body : '',
									#children : OrderedCollection [
										GrafoscopioNode {
											#header : 'Install',
											#body : 'Gofer it
\tsmalltalkhubUser: \'zeroflag\' project: \'Teapot\'; configuration;
loadStable.',
											#tags : 'código',
											#children : OrderedCollection [ ],
											#parent : @13,
											#level : 4,
											#links : OrderedCollection [
												''
											]
										},
										GrafoscopioNode {
											#header : 'Launch',
											#body : 'Teapot on
\tGET: \'/welcome\' -> \'Hello World!\'; start.
\t
',
											#tags : 'código',
											#children : OrderedCollection [ ],
											#parent : @13,
											#level : 4,
											#links : OrderedCollection [
												''
											]
										}
									],
									#parent : @11,
									#level : 3,
									#links : OrderedCollection [
										''
									]
								},
								GrafoscopioNode {
									#header : 'A REST Example, Showing some CRUD Operations',
									#body : '',
									#children : OrderedCollection [
										GrafoscopioNode {
											#header : 'Defining the data structure',
											#body : '| books teapot |
books := Dictionary new.
teapot := Teapot configure: {
\t#defaultOutput -> #json. #port -> 8080. #debugMode -> true }.
teapot
\tGET: \'/books\' -> books;
\tPUT: \'/books/<id>\' -> [ :req | | book |
\t\tbook := {\'author\' -> (req at: #author).
\t\t\'title\' -> (req at: #title)} asDictionary.
\t\tbooks at: (req at: #id) put: book ];
\tDELETE: \'/books/<id>\' -> [ :req | books removeKey: (req at: #id)];
\texception:
\t\tKeyNotFound -> (TeaResponse notFound body: \'No such book\');
\tstart.
\t
',
											#tags : 'código',
											#children : OrderedCollection [ ],
											#parent : @22,
											#level : 4,
											#links : OrderedCollection [
												''
											]
										},
										GrafoscopioNode {
											#header : 'Adding new data with ZnClient',
											#body : 'ZnClient new
\turl: \'http://localhost:8080/books/1\';
\tformAt: \'author\' put: \'SquareBracketAssociates\';
\tformAt: \'title\' put: \'Pharo For The Enterprise\'; put
',
											#tags : 'código',
											#children : OrderedCollection [ ],
											#parent : @22,
											#level : 4,
											#links : OrderedCollection [
												''
											]
										}
									],
									#parent : @11,
									#level : 3,
									#links : OrderedCollection [
										''
									]
								},
								GrafoscopioNode {
									#header : 'Route',
									#body : '',
									#children : OrderedCollection [ ],
									#parent : @11,
									#level : 3,
									#links : OrderedCollection [
										''
									]
								},
								GrafoscopioNode {
									#header : 'Tealight',
									#body : '[Tealight][tealight] is a tool that provides some additions to make easier using and managing
Teapot.',
									#children : OrderedCollection [
										GrafoscopioNode {
											#header : 'Installation',
											#key : '',
											#body : 'Metacello new 
    repository: \'github://astares/Tealight/repository\';
    baseline: \'Tealight\';
    load ',
											#tags : 'código',
											#children : OrderedCollection [ ],
											#parent : @34,
											#level : 4,
											#nodesInPreorder : OrderedCollection [
												@36
											],
											#links : OrderedCollection [
												''
											]
										},
										GrafoscopioNode {
											#header : 'Inspecting instances',
											#body : 'TLWebserver teapot inspec',
											#tags : 'código',
											#children : OrderedCollection [ ],
											#parent : @34,
											#level : 4,
											#links : OrderedCollection [
												''
											]
										},
										GrafoscopioNode {
											#header : 'Definir una ruta para una instancia de Teapot',
											#key : '',
											#body : 'TLWebserver teapot 
    GET: \'/hi\' -> \'HelloWorld\'',
											#tags : 'código',
											#children : OrderedCollection [ ],
											#parent : @34,
											#level : 4,
											#nodesInPreorder : OrderedCollection [
												@43
											],
											#links : OrderedCollection [
												''
											]
										},
										GrafoscopioNode {
											#header : 'Acceder a un Teapot por omisión',
											#key : '',
											#body : 'TLWebserver teapot',
											#tags : 'código',
											#children : OrderedCollection [ ],
											#parent : @34,
											#level : 4,
											#nodesInPreorder : OrderedCollection [
												@47
											],
											#links : OrderedCollection [
												''
											]
										}
									],
									#parent : @11,
									#level : 3,
									#links : OrderedCollection [
										'',
										'https://github.com/astares/Tealight'
									]
								},
								GrafoscopioNode {
									#header : 'Before and After Fillters',
									#body : '',
									#children : OrderedCollection [
										GrafoscopioNode {
											#header : 'Enable authentication',
											#body : 'Teapot on
\tbefore: \'/secure/*\' -> [ :req |
\t\treq session
\t\t\tattributeAt: #user
\t\t\tifAbsent: [ req abort: (TeaResponse redirect location:
\t\t\t\t\'/loginpage\')]];
\tbefore: \'*\' -> (Send message: #logRequest: to: auditor);
\tGET: \'/secure\' -> \'I am a protected string\';
\tstart.
',
											#tags : 'código',
											#children : OrderedCollection [ ],
											#parent : @52,
											#level : 4,
											#links : OrderedCollection [
												''
											]
										}
									],
									#parent : @11,
									#level : 3,
									#links : OrderedCollection [
										''
									]
								},
								GrafoscopioNode {
									#header : 'Extra',
									#body : '',
									#children : OrderedCollection [
										GrafoscopioNode {
											#header : 'Authentication & Security',
											#body : '',
											#children : OrderedCollection [ ],
											#parent : @58,
											#level : 4,
											#links : OrderedCollection [
												''
											]
										}
									],
									#parent : @11,
									#level : 3,
									#links : OrderedCollection [
										''
									]
								}
							],
							#parent : @9,
							#level : 2,
							#links : OrderedCollection [
								''
							]
						},
						GrafoscopioNode {
							#header : 'Building and Deploying a Small Web application',
							#body : '',
							#children : OrderedCollection [
								GrafoscopioNode {
									#header : 'Saying Hello World',
									#body : '',
									#children : OrderedCollection [
										GrafoscopioNode {
											#header : 'Starting the web server',
											#body : 'ZnServer startDefaultOn: 8080.
ZnServer default delegate map: #image to: MyFirstWebApp new.
',
											#tags : 'código',
											#children : OrderedCollection [ ],
											#parent : @67,
											#level : 4,
											#links : OrderedCollection [
												''
											]
										}
									],
									#parent : @65,
									#level : 3,
									#links : OrderedCollection [
										''
									]
								},
								GrafoscopioNode {
									#header : 'Serving an HTML Page With an Image',
									#body : '',
									#children : OrderedCollection [
										GrafoscopioNode {
											#header : 'Serving an image',
											#body : '"This is the code in MyFirstWebApp>>downloadPharoLogo, 
for testing it separately, as adviced in the reading"
ZnClient new
\tbeOneShot;
\tget: \'http://pharo.org/files/pharo.png\';
\tentity
\t',
											#tags : 'código',
											#children : OrderedCollection [ ],
											#parent : @73,
											#level : 4,
											#links : OrderedCollection [
												''
											]
										}
									],
									#parent : @65,
									#level : 3,
									#links : OrderedCollection [
										''
									]
								},
								GrafoscopioNode {
									#header : 'Image Magic',
									#body : '',
									#children : OrderedCollection [
										GrafoscopioNode {
											#header : 'Loading image inside Pharo',
											#body : 'MyFirstWebApp new form asMorph openInW',
											#tags : 'código',
											#children : OrderedCollection [ ],
											#parent : @79,
											#level : 4,
											#links : OrderedCollection [
												''
											]
										}
									],
									#parent : @65,
									#level : 3,
									#links : OrderedCollection [
										''
									]
								},
								GrafoscopioNode {
									#header : 'Saving Code to a Repository',
									#body : '',
									#children : OrderedCollection [
										GrafoscopioNode {
											#header : 'Testing configuration',
											#body : 'ConfigurationOfMyFirstWebApp load',
											#tags : 'código',
											#children : OrderedCollection [ ],
											#parent : @85,
											#level : 4,
											#links : OrderedCollection [
												''
											]
										}
									],
									#parent : @65,
									#level : 3,
									#links : OrderedCollection [
										''
									]
								},
								GrafoscopioNode {
									#header : 'Running a Real Cloud Server',
									#body : '',
									#children : OrderedCollection [
										GrafoscopioNode {
											#header : 'run.st',
											#body : 'ZnServer defaultOn: 8080.
ZnServer default logToTranscript.
ZnServer default delegate
\tmap: \'image\' to: MyFirstWebApp new;
\tmap: \'redirect-to-image\' to: [ :request | ZnResponse redirect:
\t\'image\' ];
map: \'/\' to: \'redirect-to-image\'.
ZnServer default start.
',
											#children : OrderedCollection [ ],
											#parent : @91,
											#level : 4,
											#links : OrderedCollection [
												''
											]
										}
									],
									#parent : @65,
									#level : 3,
									#links : OrderedCollection [
										''
									]
								}
							],
							#parent : @9,
							#level : 2,
							#links : OrderedCollection [
								''
							]
						}
					],
					#parent : @4,
					#level : 1,
					#links : OrderedCollection [
						''
					]
				},
				@11,
				@13,
				@15,
				@18,
				@22,
				@24,
				@27,
				@31,
				@34,
				@36,
				@40,
				@43,
				@47,
				@52,
				@54,
				@58,
				@60,
				@65,
				@67,
				@69,
				@73,
				@75,
				@79,
				@81,
				@85,
				@87,
				@91,
				@93,
				GrafoscopioNode {
					#header : 'Presentation',
					#body : '',
					#children : OrderedCollection [
						GrafoscopioNode {
							#header : 'Mustache Templates for Pharo',
							#body : '',
							#children : OrderedCollection [
								GrafoscopioNode {
									#header : 'Getting Started',
									#body : '',
									#children : OrderedCollection [
										GrafoscopioNode {
											#header : 'Installing Mustache',
											#body : 'Gofer it
   smalltalkhubUser: \'NorbertHartl\' project: \'Mustache\';
   configuration;
   loadStable
',
											#tags : 'código',
											#children : OrderedCollection [ ],
											#parent : @103,
											#level : 3,
											#links : OrderedCollection [
												'',
												'http://ws.stfx.eu/EPD3VWNT5AN0'
											]
										}
									],
									#parent : @101,
									#level : 3,
									#links : OrderedCollection [
										''
									]
								}
							],
							#parent : @99,
							#level : 2,
							#links : OrderedCollection [
								''
							]
						}
					],
					#parent : @4,
					#level : 1,
					#links : OrderedCollection [
						''
					]
				},
				@101,
				@103,
				@105
			]
		},
		#level : 1,
		#links : OrderedCollection [
			''
		]
	},
	@6,
	@9,
	@99
]