Data Week

Artifact [09e5f70df8]
Login

Artifact 09e5f70df81f1966423d10eb600543e4bfbda977:


OrderedCollection [
	GrafoscopioNode {
		#header : 'Dev log',
		#body : '',
		#tags : OrderedCollection [
			'text'
		],
		#children : OrderedCollection [
			GrafoscopioNode {
				#header : 'Actualizar NeoJSON',
				#body : 'Gofer it
\tsmalltalkhubUser: \'SvenVanCaekenberghe\' project: \'Neo\';
\tconfigurationOf: \'NeoJSON\';
\tloadStable.
',
				#tags : OrderedCollection [
					'código'
				],
				#children : OrderedCollection [ ],
				#parent : @2,
				#level : 2,
				#links : OrderedCollection [
					'',
					'http://ws.stfx.eu/BX5B5QS3XPOI'
				]
			},
			GrafoscopioNode {
				#header : 'Importat Tweets desde JSON a una colección ',
				#body : '',
				#tags : OrderedCollection [
					'text'
				],
				#children : OrderedCollection [
					GrafoscopioNode {
						#header : 'Local ',
						#body : '| trinos |
trinos := TwitterMessages new importFromJSONLocalFile:  FileLocator temp asFileReference / \'2012_03.js\'.
trinos splitByType 

',
						#tags : 'código',
						#children : OrderedCollection [ ],
						#parent : @9,
						#level : 2,
						#links : OrderedCollection [
							''
						]
					},
					GrafoscopioNode {
						#header : 'Remoto',
						#body : '|  aJSONFileUrl messages |
aJSONFileUrl := \'https://ia801506.us.archive.org/31/items/offrayLC-tweets/tweets/2012_06.js\'.
messages := TwitterMessages new importFromJSONRemoteFile:  aJSONFileUrl.',
						#tags : 'código',
						#children : OrderedCollection [ ],
						#parent : @9,
						#level : 2,
						#links : OrderedCollection [
							''
						]
					}
				],
				#parent : @2,
				#level : 2,
				#links : OrderedCollection [
					''
				]
			},
			GrafoscopioNode {
				#header : 'Partir mensages',
				#body : '|  aJSONFileUrl messages |
aJSONFileUrl := \'https://ia801506.us.archive.org/31/items/offrayLC-tweets/tweets/2012_06.js\'.
messages := TwitterMessages new importFromJSONRemoteFile:  aJSONFileUrl.
messages splitByType ',
				#tags : OrderedCollection [
					'código'
				],
				#children : OrderedCollection [
					GrafoscopioNode {
						#header : 'Prueba',
						#body : 'TwitterMessagesTest new test',
						#tags : 'código',
						#children : OrderedCollection [ ],
						#parent : @19,
						#level : 2,
						#links : OrderedCollection [
							''
						]
					}
				],
				#parent : @2,
				#level : 2,
				#links : OrderedCollection [
					''
				]
			},
			GrafoscopioNode {
				#header : 'Twitter profile overview',
				#body : '',
				#tags : OrderedCollection [
					'text'
				],
				#children : OrderedCollection [
					GrafoscopioNode {
						#header : 'Mensaje completo',
						#body : '"This is still not working... next Data Weeks / Rodas, could
work on solving it"
| tweetsFile overview |
tweetsFile := FileLocator temp asFileReference / \'LuLinGar\' / \'data\' / \'js\' / \'tweets\' / \'2018_02.js\'.
overview := TwitterDataSelfie new.
overview 
\tgetAvatarForProfile: \'offrayLC\';
\tsplitMessagesByTypeFrom: tweetsFile. 
overview avatarWheel ',
						#tags : OrderedCollection [
							'código'
						],
						#children : OrderedCollection [ ],
						#parent : @26,
						#level : 2,
						#links : OrderedCollection [
							''
						]
					},
					GrafoscopioNode {
						#header : 'newNode',
						#body : '',
						#tags : OrderedCollection [
							'text'
						],
						#children : OrderedCollection [ ],
						#parent : @26,
						#level : 2
					},
					GrafoscopioNode {
						#header : 'Reconstruyendo avatarWheel',
						#body : 'La rueda del avatar no está funcionando.
Acá voy a intentar reconstruir el método hasta tener una visualización funcional.',
						#tags : '',
						#children : OrderedCollection [
							GrafoscopioNode {
								#header : 'Método cási original',
								#body : '| o p tweetsFile |
o := TwitterProfileOverview  new.
o screenName: \'offrayLC\'.
tweetsFile := FileLocator temp asFileReference / \'2011_09.js\'.
o messages importFromJSONLocalFile: tweetsFile.
o.
p := TwitterProfile new scrapDataForProfile: o screenName.
o avatar: p avatar.
\t^o avatarWheel',
								#tags : 'código',
								#children : OrderedCollection [ ],
								#parent : @36,
								#level : 3,
								#links : OrderedCollection [
									''
								]
							},
							GrafoscopioNode {
								#header : 'Tagged Avatar Wheel',
								#body : '',
								#tags : OrderedCollection [
									'text'
								],
								#children : OrderedCollection [
									GrafoscopioNode {
										#header : 'Original',
										#body : '\t| o p tweetsFile |
\to := TwitterProfileOverview  new.
\to screenName: \'offrayLC\'.
\ttweetsFile := FileLocator temp asFileReference / \'2012_03.js\'.
\tp := TwitterProfile new scrapDataForProfile: o screenName.
\to messages importFromJSONLocalFile: tweetsFile.
\to avatar: p avatar.
\t^o taggedWheelFull 
',
										#tags : 'código',
										#children : OrderedCollection [ ],
										#parent : @41,
										#level : 4,
										#links : OrderedCollection [
											'',
											'http://ws.stfx.eu/788TNQ9BHU0Q',
											'http://ws.stfx.eu/47K6ORJSGEII'
										]
									},
									GrafoscopioNode {
										#header : 'Empezar a deconstruir acá',
										#body : '\t| tweetsArc retweetArc mentionsArc tweetsWords retweetedProfiles mentionedProfiles visualWords arcs queries canvasTemp  aWordsPercentage rtProfilesPercentage mtProfilesPercentage aColorPalette o p tweetsFile |
\taWordsPercentage := 80.
\trtProfilesPercentage := 20.
\tmtProfilesPercentage := 10.
\taColorPalette := { Color orange . Color black . Color green }
\to := TwitterProfileOverview  new.
\to screenName: \'offrayLC\'.
\ttweetsFile := FileLocator temp asFileReference / \'2012_03.js\'.
\tp := TwitterProfile new scrapDataForProfile: o screenName.
\to messages importFromJSONLocalFile: tweetsFile.
\to avatar: p avatar.
\to messages ifNil: [ ^ o ].
\ttweetsArc := o avatarWheel canvas shapes at: 2.
\tretweetArc := o avatarWheel canvas shapes at: 1.
\tmentionsArc := o avatarWheel canvas shapes at: 3.
\ttweetsWords := o messages wordsByFrequencyInTweetsUpTo: aWordsPercentage.
\tretweetedProfiles := o messages retweetedProfilesByFrequencyUpTo: rtProfilesPercentage.
\tmentionedProfiles := o messages mentionedProfilesByFrequencyUpTo: mtProfilesPercentage.
\tarcs := { tweetsArc .  retweetArc . mentionsArc }.
\tqueries := { tweetsWords . mentionedProfiles . retweetedProfiles  }.
\tcanvasTemp := o avatarWheel canvas.
\tarcs doWithIndex: [ :arc :i | 
\t\tvisualWords := TPMessages new 
\t\t\tvisualWordsFrom:  (queries at: i)
\t\t\tcolored: (aColorPalette at: i).
\t\tarc color: (aColorPalette at: i).
\t\tarc
\t\t\tsurroundedBy: visualWords 
\t\t\tradialGap: 85  
\t\t\tangularGap: 3  
\t\t\trenderedIn: canvasTemp.
\t\tcanvasTemp := canvasTemp\t
\t].
\t^ canvasTemp',
										#tags : 'código',
										#children : OrderedCollection [ ],
										#parent : @41,
										#level : 4,
										#links : OrderedCollection [
											''
										]
									},
									GrafoscopioNode {
										#header : 'Con un sólo arco',
										#body : '\t| tweetsArc retweetArc mentionsArc tweetsWords retweetedProfiles mentionedProfiles visualWords arcs queries canvasTemp  aWordsPercentage rtProfilesPercentage mtProfilesPercentage aColorPalette o p tweetsFile |
\taWordsPercentage := 0.
\trtProfilesPercentage := 20.
\tmtProfilesPercentage := 10.
\taColorPalette := { Color black . Color black . Color green }.
\to := TwitterProfileOverview  new.
\to screenName: \'offrayLC\'.
\ttweetsFile := FileLocator temp asFileReference / \'2012_03.js\'.
\tp := TwitterProfile new scrapDataForProfile: o screenName.
\to messages importFromJSONLocalFile: tweetsFile.
\to avatar: p avatar.
\to messages ifNil: [ ^ o ].
\ttweetsArc := o avatarWheel canvas shapes at: 2.
\ttweetsWords := o messages wordsByFrequencyInTweetsUpTo: aWordsPercentage.
\tarcs := { tweetsArc }.
\tqueries := { tweetsWords }.
\tcanvasTemp := o avatarWheel canvas.
\tarcs doWithIndex: [ :arc :i | 
\t\tvisualWords := TPMessages new 
\t\t\tvisualWordsFrom:  (queries at: i)
\t\t\tcolored: (aColorPalette at: i).
\t\tarc color: (aColorPalette at: i).
\t\tarc
\t\t\tsurroundedBy: visualWords 
\t\t\tradialGap: 85  
\t\t\tangularGap: 3  
\t\t\trenderedIn: canvasTemp.
\t\tcanvasTemp := canvasTemp\t
\t].
\t^ canvasTemp
',
										#tags : 'código',
										#children : OrderedCollection [ ],
										#parent : @41,
										#level : 4,
										#links : OrderedCollection [
											'',
											'http://ws.stfx.eu/63ZSU4Q3U5HI'
										]
									}
								],
								#parent : @36,
								#level : 3,
								#links : OrderedCollection [
									''
								]
							}
						],
						#parent : @26,
						#level : 2,
						#links : OrderedCollection [
							''
						]
					}
				],
				#parent : @2,
				#level : 2,
				#links : OrderedCollection [
					''
				]
			},
			GrafoscopioNode {
				#header : 'Perfiles poderosos',
				#body : '',
				#tags : OrderedCollection [
					'text'
				],
				#children : OrderedCollection [
					GrafoscopioNode {
						#header : 'Lleras',
						#body : '" I try to read a JSON file with SmallTalk "
| input reader currentTweet |
input := FileLo.
" I try parse the Json File with NeoJson "
"reader := NeoJSONReader fromString: input contents asString ."
',
						#tags : 'código',
						#children : OrderedCollection [ ],
						#parent : @56,
						#level : 2,
						#links : OrderedCollection [
							'',
							'http://ws.stfx.eu/1P98HQ1DDNQU'
						]
					}
				],
				#parent : @2,
				#level : 2,
				#links : OrderedCollection [
					''
				]
			}
		],
		#parent : GrafoscopioNode {
			#header : 'Arbol principal',
			#body : '',
			#tags : OrderedCollection [
				'text'
			],
			#children : @1,
			#level : 0,
			#nodesInPreorder : OrderedCollection [
				@63,
				@2,
				@5,
				@9,
				@12,
				@15,
				@19,
				@22,
				@26,
				@29,
				@33,
				@36,
				@38,
				@41,
				@44,
				@47,
				@50,
				@56,
				@59,
				GrafoscopioNode {
					#header : 're:publica 2018',
					#body : '',
					#tags : OrderedCollection [
						'text'
					],
					#children : OrderedCollection [
						GrafoscopioNode {
							#header : 'Twitter activity overview (data from the web)',
							#body : '"Here we import our already exported Twitter data, so we ca use it to
 create our own data visualizations.
Lets start by defining our variables:"
| dataUrl profile |

"This is the address where we publishd our exported Twitter data.
Please, if necessary, replace this with your custom link:"
dataUrl := \'https://zenodo.org/record/1183968/files/318088798_7f4206d8bae26af45ba1067799db4d77e8b3e2af.zip\'.

"We load our Twiiter profile details from the exported data:"
profile := TwitterProfile fromExportedDataLink: dataUrl.

"After that we unziped the data and create a quick overview:"
profile
\tactivityOverview 
',
							#tags : OrderedCollection [
								'código'
							],
							#children : OrderedCollection [ ],
							#parent : @66,
							#level : 2,
							#links : OrderedCollection [
								''
							]
						},
						GrafoscopioNode {
							#header : 'Twitter activity overview (data from a zip file)',
							#body : '| profile zipFile |
"Replace the zip file name, for the one you posted your Twitter data.
(is the last part or your \'dataUrl\' variable in the previous node)."
zipFile := FileLocator temp / \'318088798_7f4206d8bae26af45ba1067799db4d77e8b3e2af.zip\'.
profile := TwitterProfile fromZipDataFile: zipFile.
profile
\tactivityOverview.
profile getAvatar.
',
							#tags : OrderedCollection [
								'código'
							],
							#children : OrderedCollection [ ],
							#parent : @66,
							#level : 2,
							#links : OrderedCollection [
								''
							]
						},
						GrafoscopioNode {
							#header : 'Twitter Data Selfie',
							#body : 'Grailbird.data.tweets_2018_02 = 
[ {
  "source" : "\\u003Ca href=\\"http:\\/\\/twitter.com\\" rel=\\"nofollow\\"\\u003ETwitter Web Client\\u003C\\/a\\u003E",
  "entities" : {
    "user_mentions" : [ {
      "name" : "Gustavo Petro",
      "screen_name" : "petrogustavo",
      "indices" : [ 3, 16 ],
      "id_str" : "49849732",
      "id" : 49849732
    }, {
      "name" : "Federico Guti\\u00E9rrez",
      "screen_name" : "FicoGutierrez",
      "indices" : [ 59, 73 ],
      "id_str" : "43395943",
      "id" : 43395943
    } ],
    "media" : [ ],
    "hashtags" : [ ],
    "urls" : [ ]
  },
  "geo" : { },
  "id_str" : "967477194892238848",
  "text" : "RT @petrogustavo: Lo que le sucedi\\u00F3 al alcalde de Medell\\u00EDn @FicoGutierrez es que ha sido educado en un ambiente autoritario y pens\\u00F3 que un\\u2026",
  "retweeted_status" : {
    "source" : "\\u003Ca href=\\"http:\\/\\/twitter.com\\" rel=\\"nofollow\\"\\u003ETwitter Web Client\\u003C\\/a\\u003E",
    "entities" : {
      "user_mentions" : [ {
        "name" : "Federico Guti\\u00E9rrez",
        "screen_name" : "FicoGutierrez",
        "indices" : [ 41, 55 ],
        "id_str" : "43395943",
        "id" : 43395943
      } ],
      "media" : [ ],
      "hashtags" : [ ],
      "urls" : [ {
        "indices" : [ 256, 279 ],
        "url" : "https:\\/\\/t.co\\/t6T8OlByeO",
        "expanded_url" : "http:\\/\\/lasillavacia.com\\/opinion\\/con-permiso-o-sin-permiso-64830",
        "display_url" : "lasillavacia.com\\/opinion\\/con-pe\\u2026"
      } ]
    },
    "geo" : { },
    "id_str" : "967460323379859456",
    "text" : "Lo que le sucedi\\u00F3 al alcalde de Medell\\u00EDn @FicoGutierrez es que ha sido educado en un ambiente autoritario y pens\\u00F3 que un alcalde puede limitar los derechos fundamentales, ni siquiera sabe cuales son, sirve de ejemplo para construir una cultura democr\\u00E1tica\\nhttps:\\/\\/t.co\\/t6T8OlByeO",
    "id" : 967460323379859456,
    "created_at" : "2018-02-24 18:04:50 +0000",
    "user" : {
      "name" : "Gustavo Petro",
      "screen_name" : "petrogustavo",
      "protected" : false,
      "id_str" : "49849732",
      "profile_image_url_https" : "https:\\/\\/pbs.twimg.com\\/profile_images\\/962471262747529216\\/Uo8lOkRJ_normal.jpg",
      "id" : 49849732,
      "verified" : true
    }
  },
  "id" : 967477194892238848,
  "created_at" : "2018-02-24 19:11:52 +0000",
  "user" : {
    "name" : "Offray Vladimir Luna",
    "screen_name" : "offrayLC",
    "protected" : false,
    "id_str" : "318088798",
    "profile_image_url_https" : "https:\\/\\/pbs.twimg.com\\/profile_images\\/3179579549\\/f83f0e935fb5eff6d967e37e1a3efe5c_normal.png",
    "id" : 318088798,
    "verified" : false
  }
}, {
  "source" : "\\u003Ca href=\\"http:\\/\\/twitter.com\\" rel=\\"nofollow\\"\\u003ETwitter Web Client\\u003C\\/a\\u003E",
  "entities" : {
    "user_mentions" : [ {
      "name" : "El Espectador",
      "screen_name" : "elespectador",
      "indices" : [ 3, 16 ],
      "id_str" : "14834302",
      "id" : 14834302
    } ],
    "media" : [ ],
    "hashtags" : [ ],
    "urls" : [ {
      "indices" : [ 107, 130 ],
      "url" : "https:\\/\\/t.co\\/SfEC2Ye7LJ",
      "expanded_url" : "http:\\/\\/bit.ly\\/2EOXhTg",
      "display_url" : "bit.ly\\/2EOXhTg"
    } ]
  },
  "geo" : { },
  "id_str" : "967477057994227713",
  "text" : "RT @elespectador: Asistentes a marcha uribista en Tunja dicen que les prometieron dinero y no les pagaron. https:\\/\\/t.co\\/SfEC2Ye7LJ https:\\/\\/\\u2026",
  "retweeted_status" : {
    "source" : "\\u003Ca href=\\"https:\\/\\/about.twitter.com\\/products\\/tweetdeck\\" rel=\\"nofollow\\"\\u003ETweetDeck\\u003C\\/a\\u003E",
    "entities" : {
      "user_mentions" : [ ],
      "media" : [ {
        "expanded_url" : "https:\\/\\/twitter.com\\/elespectador\\/status\\/967174985167994880\\/photo\\/1",
        "indices" : [ 113, 136 ],
        "url" : "https:\\/\\/t.co\\/bC6pabOZvI",
        "media_url" : "http:\\/\\/pbs.twimg.com\\/media\\/DWwEFCkX0AITQyV.jpg",
        "id_str" : "967152504613097474",
        "id" : 967152504613097474,
        "media_url_https" : "https:\\/\\/pbs.twimg.com\\/media\\/DWwEFCkX0AITQyV.jpg",
        "sizes" : [ {
          "h" : 150,
          "resize" : "crop",
          "w" : 150
        }, {
          "h" : 453,
          "resize" : "fit",
          "w" : 680
        }, {
          "h" : 655,
          "resize" : "fit",
          "w" : 984
        }, {
          "h" : 655,
          "resize" : "fit",
          "w" : 984
        }, {
          "h" : 655,
          "resize" : "fit",
          "w" : 984
        } ],
        "display_url" : "pic.twitter.com\\/bC6pabOZvI"
      } ],
      "hashtags" : [ ],
      "urls" : [ {
        "indices" : [ 89, 112 ],
        "url" : "https:\\/\\/t.co\\/SfEC2Ye7LJ",
        "expanded_url" : "http:\\/\\/bit.ly\\/2EOXhTg",
        "display_url" : "bit.ly\\/2EOXhTg"
      } ]
    },
    "geo" : { },
    "id_str" : "967174985167994880",
    "text" : "Asistentes a marcha uribista en Tunja dicen que les prometieron dinero y no les pagaron. https:\\/\\/t.co\\/SfEC2Ye7LJ https:\\/\\/t.co\\/bC6pabOZvI",
    "id" : 967174985167994880,
    "created_at" : "2018-02-23 23:11:00 +0000",
    "user" : {
      "name" : "El Espectador",
      "screen_name" : "elespectador",
      "protected" : false,
      "id_str" : "14834302",
      "profile_image_url_https" : "https:\\/\\/pbs.twimg.com\\/profile_images\\/754008627866992640\\/CsiUfE0y_normal.jpg",
      "id" : 14834302,
      "verified" : true
    }
  },
  "id" : 967477057994227713,
  "created_at" : "2018-02-24 19:11:20 +0000",
  "user" : {
    "name" : "Offray Vladimir Luna",
    "screen_name" : "offrayLC",
    "protected" : false,
    "id_str" : "318088798",
    "profile_image_url_https" : "https:\\/\\/pbs.twimg.com\\/profile_images\\/3179579549\\/f83f0e935fb5eff6d967e37e1a3efe5c_normal.png",
    "id" : 318088798,
    "verified" : false
  }
}, {
  "source" : "\\u003Ca href=\\"http:\\/\\/twitter.com\\" rel=\\"nofollow\\"\\u003ETwitter Web Client\\u003C\\/a\\u003E",
  "entities" : {
    "user_mentions" : [ {
      "name" : "Daniel Bernal",
      "screen_name" : "danielbernalb",
      "indices" : [ 3, 17 ],
      "id_str" : "164402219",
      "id" : 164402219
    }, {
      "name" : "Luis G. Murillo",
      "screen_name" : "LuisGMurillo",
      "indices" : [ 34, 47 ],
      "id_str" : "293612779",
      "id" : 293612779
    } ],
    "media" : [ ],
    "hashtags" : [ ],
    "urls" : [ ]
  },
  "geo" : { },
  "id_str" : "967476768088182785",
  "text" : "RT @danielbernalb: Se\\u00F1or ministro @LuisGMurillo, calificar de demagogia ambiental la discusi\\u00F3n de la realidenraci\\u00F3n de reservas forestales\\u2026",
  "retweeted_status" : {
    "source" : "\\u003Ca href=\\"https:\\/\\/mobile.twitter.com\\" rel=\\"nofollow\\"\\u003ETwitter Lite\\u003C\\/a\\u003E",
    "entities" : {
      "user_mentions" : [ {
        "name" : "Luis G. Murillo",
        "screen_name" : "LuisGMurillo",
        "indices" : [ 15, 28 ],
        "id_str" : "293612779",
        "id" : 293612779
      } ],
      "media" : [ ],
      "hashtags" : [ ],
      "urls" : [ {
        "indices" : [ 188, 211 ],
        "url" : "https:\\/\\/t.co\\/Yl6OP7wYXH",
        "expanded_url" : "https:\\/\\/twitter.com\\/WRadioColombia\\/status\\/967387344776105987",
        "display_url" : "twitter.com\\/WRadioColombia\\u2026"
      } ]
    },
    "geo" : { },
    "id_str" : "967413373624348672",
    "text" : "Se\\u00F1or ministro @LuisGMurillo, calificar de demagogia ambiental la discusi\\u00F3n de la realidenraci\\u00F3n de reservas forestales que afecta a la Reserva van der Hammen, es demagogia institucional. https:\\/\\/t.co\\/Yl6OP7wYXH",
    "id" : 967413373624348672,
    "created_at" : "2018-02-24 14:58:16 +0000",
    "user" : {
      "name" : "Daniel Bernal",
      "screen_name" : "danielbernalb",
      "protected" : false,
      "id_str" : "164402219",
      "profile_image_url_https" : "https:\\/\\/pbs.twimg.com\\/profile_images\\/885647857021145088\\/S41RDRAU_normal.jpg",
      "id" : 164402219,
      "verified" : false
    }
  },
  "id" : 967476768088182785,
  "created_at" : "2018-02-24 19:10:11 +0000",
  "user" : {
    "name" : "Offray Vladimir Luna",
    "screen_name" : "offrayLC",
    "protected" : false,
    "id_str" : "318088798",
    "profile_image_url_https" : "https:\\/\\/pbs.twimg.com\\/profile_images\\/3179579549\\/f83f0e935fb5eff6d967e37e1a3efe5c_normal.png",
    "id" : 318088798,
    "verified" : false
  }
}, {
  "source" : "\\u003Ca href=\\"http:\\/\\/twitter.com\\" rel=\\"nofollow\\"\\u003ETwitter Web Client\\u003C\\/a\\u003E",
  "entities" : {
    "user_mentions" : [ {
      "name" : "Polo#110 Alirio Uribe Mu\\u00F1oz",
      "screen_name" : "AlirioUribeMuoz",
      "indices" : [ 3, 19 ],
      "id_str" : "2157729691",
      "id" : 2157729691
    } ],
    "media" : [ ],
    "hashtags" : [ ],
    "urls" : [ ]
  },
  "geo" : { },
  "id_str" : "967476623162429445",
  "text" : "RT @AlirioUribeMuoz: As\\u00ED qued\\u00F3 el bus del SITP despu\\u00E9s de que se incendio hoy, est\\u00E1n sacando a circular buses sin revisi\\u00F3n t\\u00E9cnica, est\\u00E1n e\\u2026",
  "retweeted_status" : {
    "source" : "\\u003Ca href=\\"http:\\/\\/twitter.com\\/download\\/android\\" rel=\\"nofollow\\"\\u003ETwitter for Android\\u003C\\/a\\u003E",
    "entities" : {
      "user_mentions" : [ ],
      "media" : [ {
        "expanded_url" : "https:\\/\\/twitter.com\\/AlirioUribeMuoz\\/status\\/967104269475250177\\/video\\/1",
        "indices" : [ 138, 161 ],
        "url" : "https:\\/\\/t.co\\/QH8ed1ARJh",
        "media_url" : "http:\\/\\/pbs.twimg.com\\/ext_tw_video_thumb\\/967103826850385921\\/pu\\/img\\/Yn0ZYEtUTevDpRpG.jpg",
        "id_str" : "967103826850385921",
        "id" : 967103826850385921,
        "media_url_https" : "https:\\/\\/pbs.twimg.com\\/ext_tw_video_thumb\\/967103826850385921\\/pu\\/img\\/Yn0ZYEtUTevDpRpG.jpg",
        "sizes" : [ {
          "h" : 150,
          "resize" : "crop",
          "w" : 150
        }, {
          "h" : 480,
          "resize" : "fit",
          "w" : 848
        }, {
          "h" : 480,
          "resize" : "fit",
          "w" : 848
        }, {
           ... truncated ...',
							#tags : OrderedCollection [
								'código'
							],
							#children : OrderedCollection [ ],
							#parent : @66,
							#level : 2,
							#links : OrderedCollection [
								''
							]
						},
						GrafoscopioNode {
							#header : 'Appendix',
							#body : 'This node contains some previous explorations and preparatives to make the workshop as
as smooth as possible.',
							#tags : OrderedCollection [
								'text'
							],
							#children : OrderedCollection [
								GrafoscopioNode {
									#header : 'Downloading data',
									#body : '| dataUrl |
dataUrl := \'https://zenodo.org/record/1193821/files/twitter-archive-2018-03-07.zip\'.
TwitterProfile fromExportedDataLink: dataUrl 
',
									#tags : OrderedCollection [
										'código'
									],
									#children : OrderedCollection [ ],
									#parent : @81,
									#level : 3,
									#links : OrderedCollection [
										''
									]
								},
								GrafoscopioNode {
									#header : 'Load user data',
									#body : '| zipFile jsUserData tweetsFoder |
zipFile := FileLocator temp asFileReference / \'twitter-archive-2018-03-07.zip\'.
jsUserData := TwitterProfile new jsonUserDetailsFromZip: zipFile.
TwitterProfile new fromJSONString: jsUserData',
									#tags : OrderedCollection [
										'código'
									],
									#children : OrderedCollection [ ],
									#parent : @81,
									#level : 3,
									#links : OrderedCollection [
										''
									]
								},
								GrafoscopioNode {
									#header : 'Draw tweet  activity overview',
									#body : '| zipFile tweetsFiles b ds |
zipFile := FileLocator temp asFileReference / \'twitter-archive-2018-03-07.zip\'.
"TwitterProfile new activityOverviewFromZip: zipFile."
',
									#tags : OrderedCollection [
										'código'
									],
									#children : OrderedCollection [ ],
									#parent : @81,
									#level : 3,
									#links : OrderedCollection [
										'',
										'http://ws.stfx.eu/5IIKC7XE1DP0'
									]
								}
							],
							#parent : @66,
							#level : 2,
							#links : OrderedCollection [
								''
							]
						}
					],
					#parent : @63,
					#level : 1,
					#links : OrderedCollection [
						''
					]
				},
				@69,
				@73,
				@77,
				@81,
				@84,
				@88,
				@92,
				GrafoscopioNode {
					#header : 'Visualizar18',
					#body : '',
					#tags : OrderedCollection [
						'text'
					],
					#children : OrderedCollection [
						GrafoscopioNode {
							#header : 'Histograma de actividad a partir de un archivo exportado',
							#body : '"Here we import our already exported Twitter data, so we ca use it to
 create our own data visualizations.
Lets start by defining our variables:"
| dataUrl profile |

"This is the address where we publishd our exported Twitter data.
Please, if necessary, replace this with your custom link:"
dataUrl := \'https://zenodo.org/record/1434256/files/236030321_faa9d68ccfa930feb72bc27b5ba686b3babe029b.zip\'.

"We load our Twiiter profile details from the exported data:"
profile := TwitterProfile fromExportedDataLink: dataUrl.

"After that we unziped the data and create a quick overview:"
profile
\tactivityOverview
',
							#tags : OrderedCollection [
								'código'
							],
							#children : OrderedCollection [ ],
							#parent : @98,
							#level : 2,
							#links : OrderedCollection [
								'',
								'http://ws.stfx.eu/4AMO0OPG12CS',
								'http://ws.stfx.eu/H0U9V2XR1E5A'
							]
						},
						GrafoscopioNode {
							#header : 'Histograma por tipo de mensaje',
							#body : '',
							#tags : OrderedCollection [
								'text'
							],
							#children : OrderedCollection [
								GrafoscopioNode {
									#header : 'Partir los mensajes de un archivo de trinos por tipo',
									#body : '| messages localTweetsFile |
messages := TwitterMessages new.
localTweetsFile := FileLocator temp asFileReference / \'samuelnacar/data/js/tweets/2011_05.js\' .
messages importFromJSONLocalFile: localTweetsFile.
messages splitByType.
"Si quisiéramos los tamaños sería:
"
"messages splitByType collect: #size."',
									#tags : OrderedCollection [
										'código'
									],
									#children : OrderedCollection [ ],
									#parent : @105,
									#level : 3,
									#links : OrderedCollection [
										''
									]
								},
								GrafoscopioNode {
									#header : 'Encontrar una visualización plantilla',
									#body : 'b := RTGrapher new.
ds := RTData new. 
ds barShape color: Color red. 
ds points: #(-5 -9 10 -2).
ds barChartWithBarTitle: [ :value | \'##\', value asString ].
b add: ds.
b axisX noLabel; noTick.
b ',
									#tags : OrderedCollection [
										'código'
									],
									#children : OrderedCollection [ ],
									#parent : @105,
									#level : 3,
									#links : OrderedCollection [
										''
									]
								},
								GrafoscopioNode {
									#header : 'Integrar los pasos anteriores',
									#body : '| messages localTweetsFile graph data sizes |
messages := TwitterMessages new.
localTweetsFile := FileLocator temp asFileReference / \'samuelnacar/data/js/tweets/2011_05.js\' .
messages importFromJSONLocalFile: localTweetsFile.
sizes := messages splitByType collect: #size.
graph := RTGrapher new.
data := RTData new. 
data barShape color: Color red. 
data points: sizes values.
data barChartWithBarTitle: [ :value | \'##\', value asString ].
graph add: data.
graph axisX noLabel; noTick.
graph ',
									#tags : OrderedCollection [
										'código'
									],
									#children : OrderedCollection [ ],
									#parent : @105,
									#level : 3,
									#links : OrderedCollection [
										''
									]
								}
							],
							#parent : @98,
							#level : 2,
							#links : OrderedCollection [
								''
							]
						},
						GrafoscopioNode {
							#header : 'Segunda visualización: nube de etiquetas para Tweets',
							#body : 'Se trata de detectar las palabras más frecuentes',
							#tags : OrderedCollection [
								'text'
							],
							#children : OrderedCollection [
								GrafoscopioNode {
									#header : 'Crear una nube de etiquetas.',
									#body : '| cloud text |
cloud := RTNameCloud new.
text := \'But I must explain to you how all this mistaken idea of denouncing pleasure and praising pain was born and I will give you a complete account of the system, and expound the actual teachings of the great explorer of the truth, the master-builder of human happiness. No one rejects, dislikes, or avoids pleasure itself, because it is pleasure, but because those who do not know how to pursue pleasure rationally encounter consequences that are extremely painful. Nor again is there anyone who loves or pursues or desires to obtain pain of itself, because it is pain, but because occasionally circumstances occur in which toil and pain can procure him some great pleasure. To take a trivial example, which of us ever undertakes laborious physical exercise, except to obtain some advantage from it? But who has any right to find fault with a man who chooses to enjoy a pleasure that has no annoying consequences, or one who avoids a pain that produces no resultant pleasure?\'.
cloud  addStrings: (text splitOn: Character space).',
									#tags : OrderedCollection [
										'código'
									],
									#children : OrderedCollection [ ],
									#parent : @121,
									#level : 3,
									#links : OrderedCollection [
										''
									]
								},
								GrafoscopioNode {
									#header : 'Descargar un dataset de pruebas',
									#body : '"Here we import our already exported Twitter data, so we ca use it to
 create our own data visualizations.
Lets start by defining our variables:"
| dataUrl profile |

"This is the address where we publishd our exported Twitter data.
Please, if necessary, replace this with your custom link:"
dataUrl := \'https://zenodo.org/record/1434256/files/236030321_faa9d68ccfa930feb72bc27b5ba686b3babe029b.zip\'.

"We load our Twiiter profile details from the exported data:"
profile := TwitterProfile fromExportedDataLink: dataUrl.
',
									#tags : OrderedCollection [
										'código'
									],
									#children : OrderedCollection [ ],
									#parent : @121,
									#level : 3,
									#links : OrderedCollection [
										''
									]
								},
								GrafoscopioNode {
									#header : 'Encontrar la nube de etiquetas de los trinos (tweets) de un mes',
									#body : '
"Nuestro algoritmo va a consistir de tres pasos:"

"1. Leer un archivo de tweets para un mes particular."
| messages localTweetsFile myTweets cloud |
messages := TwitterMessages new.
localTweetsFile := FileLocator temp asFileReference / \'GreenMartinha/data/js/tweets/2017_10.js\' .
messages importFromJSONLocalFile: localTweetsFile.

"2. Seleccionar los trinos de ese mes."
myTweets := messages selectTweets.

"3. Aplicar nube de etiquetas a dichos trinos."
cloud := RTNameCloud new.
myTweets do: [ :t | cloud addStrings: (t messageWords) ].
cloud ',
									#tags : OrderedCollection [
										'código'
									],
									#children : OrderedCollection [ ],
									#parent : @121,
									#level : 3,
									#links : OrderedCollection [
										'',
										'http://ws.stfx.eu/6ZIA8USZOYXE'
									]
								},
								GrafoscopioNode {
									#header : 'En un único mensaje',
									#body : '| messages localTweetsFile myTweets cloud |
messages := TwitterMessages new.
localTweetsFile := FileLocator temp asFileReference / \'samuelnacar/data/js/tweets/2011_05.js\' .
messages importFromJSONLocalFile: localTweetsFile.
messages wordCloudForTweets ',
									#tags : OrderedCollection [
										'código'
									],
									#children : OrderedCollection [ ],
									#parent : @121,
									#level : 3,
									#links : OrderedCollection [
										''
									]
								},
								GrafoscopioNode {
									#header : 'Cambiando el tipo de mensaje',
									#body : '| messages localTweetsFile myTweets cloud |
messages := TwitterMessages new.
localTweetsFile := FileLocator temp asFileReference / \'samuelnacar/data/js/tweets/2011_05.js\' .
messages importFromJSONLocalFile: localTweetsFile.
messages wordCloudFor: \'tweets\'',
									#tags : OrderedCollection [
										'código'
									],
									#children : OrderedCollection [ ],
									#parent : @121,
									#level : 3,
									#links : OrderedCollection [
										''
									]
								}
							],
							#parent : @98,
							#level : 2,
							#links : OrderedCollection [
								''
							]
						},
						GrafoscopioNode {
							#header : 'Limpiar las palabras no significativas',
							#body : '\'quedó\' \'realizado\' \'sé\' \'serás\' \'siguiente\' \'sr\' \'tan\' \'tened\' \'tenías\' \'todo\' \'tu\' \'tuviste\' \'uno\' \'vamos\' \'vuestro\' \'pues\' \'quizá\' \'saber\' \'señaló\' \'sido\' \'solos\' \'t\' \'tendría\' \'tenía\' \'tienes\' \'trabajo\' \'tuvieseis\' \'último\' \'ustedes\' \'vosotras\' \'pudoqué\' \'quiénes\' \'sabe\' \'segun\' \'seríamos\' \'sola\' \'sus\' \'tendrán\' \'tengáis\' \'tercera\' \'trabajáis\' \'tuviéramos\' \'tuyos\' \'usan\' \'ver\' \'ya qué\' \'propios\' \'queremos\' \'realizar\' \'sea\' \'seré\' \'sin\' \'sra\' \'tanto\' \'teneis\' \'tenida\' \'todos\' \'tú\' \'tuvisteis\' \'unos\' \'van\' \'vuestros\' \'q\' \'quizas\' \'sabes\' \'ser\' \'siempre\' \'somos\' \'tal\' \'tendríais\' \'teníaisqué\' \'toda\' \'tras\' \'tuviésemos\' \'últimos\' \'v\' \'vosotros\' \'pueda\' \'quienesquiera\' \'sabeis\' \'según\' \'serían\' \'solamente\' \'suya\' \'tendrás\' \'tengamos\' \'ti\' \'trabajamos\' \'tuvieran\' \'u\' \'usar\' \'verdad\' \'yo\' \'proximo\' \'querer\' \'realizó\' \'seáis\' \'seréis\' \'sino\' \'sres\' \'tarde\' \'tenéis\' \'tenidas\' \'tomar\' \'tus\' \'tuvo\' \'usa\' \'varias\' \'w\' \'qeu\' \'quizás\' \'sal\' \'sera\' \'siendo\' \'son\' \'tambien\' \'tendríamos\' \'teníais\' \'todas\' \'trata\' \'tuviesen\' \'un\' \'va\' \'voy\' \'puede\' \'quienquiera\' \'sabéis\' \'segunda\' \'serías\' \'solas\' \'suyas\' \'tendré\' \'tengan\' \'tiempo\' \'trabajan\' \'tuvieras\' \'última\' \'usas\' \'verdadera\' \'z\' \'próximo\' \'quien\' \'repente\' \'seamos\' \'seremos\' \'so\' \'sta\' \'te\' \'tenemos\' \'tenido\' \'total\' \'tuve\' \'tuya\' \'usais\' \'varios\' \'x\' \'que\' \'r\' \'salvo\' \'será\' \'siete\' \'soy\' \'también\' \'tendrían\' \'teníamos\' \'todavia\' \'través\' \'tuvieses\' \'una\' \'vais\' \'vuestra\' \'pueden\' \'quiere\' \'sabemos\' \'segundo\' \'si\' \'solo\' \'suyo\' \'tendréis\' \'tengas\' \'tiene\' \'trabajar\' \'tuvieron\' \'últimas\' \'uso\' \'verdadero\' \'próximos\' \'quién\' \'respecto\' \'sean\' \'sería\' \'sobre\' \'su\' \'temprano\' \'tener\' \'tenidos\' \'trabaja\' \'tuviera\' \'tuyas\' \'usáis\' \'vaya\' \'y\' \'qué\' \'raras\' \'se\' \'serán\' \'sigue\' \'soyos\' \'tampoco\' \'tendrías\' \'tenían\' \'todavía\' \'tres\' \'tuvimos\' \'unas\' \'valor\' \'vuestras\' \'puedo\' \'quiza\' \'saben\' \'seis\' \'sí\' \'sólo\' \'suyos\' \'tendremos\' \'tengo\' \'tienen\' \'trabajas\' \'tuviese\' \'ultimo\' \'usted\' \'vez\' \'pudo\' \'quienes\' \'s\' \'seas\' \'seríais\' \'sois\' \'supuesto\' \'tendrá\' \'tenga\' \'teniendo\' \'trabajais\' \'tuvierais\' \'tuyo\' \'usamos\' \'veces\' \'ya\' \'delante\' \'dias\' \'ejemplo\' \'encima\' \'esas\' \'estada\' \'estaremos\' \'esto\' \'estuvimos\' \'fuerais\' \'gran\' \'habidos\' \'haceis\' \'hayamos\' \'hubieron\' \'intenta\' \'lado\' \'manifestó\' \'mías\' \'muchísimas\' \'nos\' \'otras\' \'poca\' \'podrian\' \'propio\' \'debido\' \'detras\' \'donde\' \'emplean\' \'eras\' \'estabais\' \'estará\' \'éste\' \'estuviese\' \'f\' \'fuimos\' \'habían\' \'habríais\' \'has\' \'hubiera\' \'igual\' \'junto\' \'luego\' \'mi\' \'modo\' \'ninguna\' \'nunca\' \'pasada\' \'podría\' \'primeros\' \'deprisa\' \'diferente\' \'ellos\' \'era\' \'ésos\' \'estamos\' \'estas\' \'estuvierais\' \'excepto\' \'fueseis\' \'haber\' \'habrás\' \'haces\' \'hicieron\' \'hubimos\' \'intentas\' \'llegó\' \'medio\' \'mis\' \'n\' \'nuestros\' \'para\' \'podemos\' \'posible\' \'demás\' \'días\' \'el\' \'encuentra\' \'ésas\' \'estadas\' \'estaría\' \'estos\' \'estuviste\' \'fuéramos\' \'grandes\' \'habiendo\' \'hacéis\' \'hayan\' \'hubiese\' \'intentais\' \'largo\' \'mas\' \'mientras\' \'muchísimo\' \'nosotras\' \'otro\' \'pocas\' \'podrían\' \'decir\' \'detrasqué\' \'dónde\' \'emplear\' \'eres\' \'estábamos\' \'estarán\' \'estéis\' \'estuvieseis\' \'fin\' \'fuiste\' \'habías\' \'habríamos\' \'hasta\' \'hubierais\' \'incluso\' \'juntos\' \'lugar\' \'mí\' \'momento\' \'ningunas\' \'o\' \'pasado\' \'podriais\' \'principalmente\' \'desde\' \'diferentes\' \'ellosqué\' \'erais\' \'esta\' \'estan\' \'estás\' \'estuviéramos\' \'existe\' \'fuésemos\' \'habia\' \'habré\' \'hacia\' \'hizo\' \'hubiste\' \'intento\' \'lleva\' \'mejor\' \'misma\' \'nada\' \'nueva\' \'parece\' \'poder\' \'primer\' \'demasiada\' \'dice\' \'él\' \'enfrente\' \'ese\' \'estado\' \'estaríais\' \'éstos\' \'estuvisteis\' \'fueran\' \'gueno\' \'habla\' \'hacemos\' \'hayas\' \'hubieseis\' \'intentáis\' \'las\' \'más\' \'mio\' \'muchísimos\' \'nosotros\' \'otros\' \'poco\' \'podrias\' \'dejar\' \'detrás\' \'dos\' \'empleas\' \'es\' \'estaban\' \'estarás\' \'estemos\' \'estuviésemos\' \'final\' \'fuisteis\' \'habida\' \'habrían\' \'hay\' \'hubiéramos\' \'indicó\' \'k\' \'m\' \'mia\' \'mucha\' \'ninguno\' \'ocho\' \'peor\' \'podríais\' \'pronto\' \'despacio\' \'dijeron\' \'embargo\' \'eramos\' \'está\' \'están\' \'éstas\' \'estuvieran\' \'existen\' \'fuesen\' \'había\' \'habréis\' \'haciendo\' \'horas\' \'hubisteis\' \'ir\' \'llevar\' \'mencionó\' \'mismas\' \'nadie\' \'nuevas\' \'parecer\' \'podrá\' \'primera\' \'debajo\' \'demasiado\' \'dicen\' \'ella\' \'enseguida\' \'ése\' \'estados\' \'estaríamos\' \'estoy\' \'estuvo\' \'fueras\' \'h\' \'hablan\' \'hacen\' \'he\' \'hubiésemos\' \'intentamos\' \'le\' \'mayor\' \'mío\' \'mucho\' \'nuestra\' \'p\' \'pocos\' \'poner\' \'dejó\' \'dia\' \'durante\' \'empleo\' \'esa\' \'estabas\' \'estaré\' \'estén\' \'estuviesen\' \'fue\' \'g\' \'habidas\' \'habrías\' \'haya\' \'hubieran\' \'informo\' \'l\' \'mal\' \'mía\' \'muchas\' \'ningunos\' \'os\' \'pero\' \'podriamos\' \'propia\' \'despues\' \'dijo\' \'empleais\' \'éramos\' \'ésta\' \'estando\' \'este\' \'estuvieras\' \'explicó\' \'fueses\' \'habíais\' \'habremos\' \'hago\' \'hoy\' \'hubo\' \'j\' \'lo\' \'menos\' \'mismo\' \'ni\' \'nuevo\' \'parte\' \'podrán\' \'primero\' \'debe\' \'demasiados\' \'dicho\' \'ellas\' \'entonces\' \'eso\' \'estais\' \'estarían\' \'estuve\' \'etc\' \'fueron\' \'ha\' \'habrá\' \'hacer\' \'hecho\' \'hubiesen\' \'intentan\' \'lejos\' \'me\' \'mios\' \'muchos\' \'nuestras\' \'pais\' \'podeis\' \'por\' \'del\' \'día\' \'e\' \'en\' \'ésa\' \'estad\' \'estaréis\' \'estés\' \'estuvieses\' \'fuera\' \'general\' \'habido\' \'hace\' \'hayáis\' \'hubieras\' \'informó\' \'la\' \'manera\' \'mias\' \'muchísima\' \'no\' \'otra\' \'pesar\' \'podríamos\' \'propias\' \'después\' \'dio\' \'empleáis\' \'eran\' \'estaba\' \'estar\' \'esté\' \'estuvieron\' \'expresó\' \'fui\' \'habíamos\' \'habría\' \'han\' \'hube\' \'i\' \'jamás\' \'los\' \'menudo\' \'mismos\' \'ningún\' \'nuevos\' \'partir\' \'podria\' \'primero\' \'deben\' \'dentro\' \'dieron\' \'ello\' \'entre\' \'esos\' \'estáis\' \'estarías\' \'estuviera\' \'ex\' \'fuese\' \'habéis\' \'habrán\' \'hacerlo\' \'hemos\' \'hubieses\' \'intentar\' \'les\' \'mediante\' \'míos\' \'muy\' \'nuestro\' \'paìs\' \'podéis\' \'porque\' \'cuatro\' \'dar\' \'cuenta\' \'de\' \'d\' \'cuánto\' \'da\' \'cuantos\' \'dado\' \'cuántos\' \'dan\' \'conmigo\' \'cuales\' \'claro\' \'contra\' \'cuántas\' \'consigo\' \'cuando\' \'conocer\' \'cuáles\' \'comentó\' \'cosas\' \'cuanto\' \'ciertas\' \'consigue\' \'cuándo\' \'conseguimos\' \'cualesquiera\' \'como\' \'creo\' \'cierto\' \'consiguen\' \'cuanta\' \'conseguir\' \'cualquier\' \'cómo\' \'cual\' \'ciertos\' \'consigues\' \'cuánta\' \'considera\' \'cualquiera\' \'con\' \'cuál\' \'cinco\' \'contigo\' \'cuantas\' \'consideró\' \'cuan\' \'aquel\' \'atras\' \'c\' \'arriba\' \'buen\' \'aquello\' \'b\' \'cierta\' \'aquél\' \'atrás\' \'cabe\' \'arribaabajo\' \'buena\' \'aquellos\' \'bajo\' \'aquella\' \'aun\' \'cada\' \'aseguró\' \'buenas\' \'aquéllos\' \'bastante\' \'aquélla\' \'aún\' \'casi\' \'apenas\' \'asi\' \'bueno\' \'aqui\' \'bien\' \'aquellas\' \'aunque\' \'cerca\' \'aproximadamente\' \'así\' \'buenos\' \'aquí\' \'breve\' \'aquéllas\' \'ayer\' \'cercaqué\' \'añadió\' \'2\' \'ademas\' \'alguno\' \'abajo\' \'al\' \'anterior\' \'8\' \'ahí\' \'ambos\' \'3\' \'además\' \'algunos\' \'acá\' \'algo\' \'antes\' \'9\' \'ahora\' \'ampleamos\' \'4\' \'adrede\' \'allá\' \'actualmente\' \'algún\' \'_\' \'ajena\' \'antano\' \'5\' \'afirmó\' \'alli\' \'acuerdo\' \'alguna\' \'a\' \'ajeno\' \'antaño\' \'6\' \'agregó\' \'allí\' \'1\' \'adelante\' \'algunas\' \'a\' \'ajenos\' \'ante\' \'7\' \'ahi\' \'alrededor\' \'0\' ',
							#tags : OrderedCollection [
								'código'
							],
							#children : OrderedCollection [
								GrafoscopioNode {
									#header : 'Nube de etiquetas sin palabras indeseadas',
									#body : '| cloud text |
cloud := RTNameCloud new.
text := \'La guerra de Vietnam (Vietnam War en inglés, Chiến tranh Việt Nam en vietnamita)27​ llamada también segunda guerra de Indochina28​ fue un conflicto bélico librado entre 1955 y 1975 para impedir la reunificación de Vietnam bajo un gobierno socialista o comunista. En esta guerra participó la República de Vietnam (Vietnam del Sur), la cual estaba en contra de los comunistas, con el apoyo de los Estados Unidos y otras naciones aliadas de los Estados Unidos contra la guerrilla local del Frente Nacional de Liberación de Vietnam (Viet Cong) y el Ejército de la República Democrática de Vietnam (Vietnam del Norte), respaldados por China y la Unión Soviética. Se calcula que murieron en total entre 3,8 y 5,7 millones de personas.nota 2​ Estados Unidos contabilizó 58 159 bajas y más de 1700 desaparecidos, constituyendo la contienda más larga de dicho país hasta la Guerra Civil de Afganistán.

El conflicto comenzó por un intento de unificar las dos Vietnam en un único gobierno de coalición entre nacionalistas, comunistas y neutrales, según la propuesta inicial. Las acciones de los Estados Unidos para evitar dicha reunificación, unidas a una sucesión de dictaduras violentas, corruptas e ineficientes impuestas por los Estados Unidos, provocaron el levantamiento en armas de varios grupos unidos bajo el autodenominado Frente de Liberación Nacional, Viet Cong, rápidamente apoyado por la entonces Unión Soviética y la China de Mao. Inicialmente Saigón fue perdiendo terreno.

Con la entrada masiva de los Estados Unidos se recuperó parte de lo perdido. Pero, tras los sucesos de 1968, empezó la retirada progresiva de las tropas estadounidenses y la firma de los Acuerdos de Paz de París en 1973, tras los cuales Vietnam del Sur luchó solo contra el Ejército de la República Democrática de Vietnam hasta su propia derrota final y la consiguiente reunificación del país el 2 de julio de 1976 como la República Socialista de Vietnam. Las tres primeras etapas se distinguieron por transcurrir sin la formación de las tradicionales líneas de frente, donde proliferaron acciones terroristas y la guerra de guerrillas, frente a las misiones de «búsqueda y destrucción», el uso de bombardeos masivos y el empleo extensivo de armas químicas por parte de los Estados Unidos. La última fase fue una guerra convencional. Pero el fin de la contienda solo resultó una pausa en los enfrentamientos de Indochina. Después se producirían las invasiones de Camboya y Laos por Vietnam y de este por China. Por el contrario, Estados Unidos vivió un repliegue de la política exterior.

La cobertura realizada por los medios de comunicación fue permanente, estando considerado como el primer conflicto televisado de la historia. Esto permitió la denuncia de las frecuentes violaciones y abusos contra los derechos humanos cometidos por los dos bandos. Sin embargo, se discute si dicha cobertura constituyó la causa principal de la creciente oposición por parte de la opinión pública occidental hacia la intervención estadounidense.

Esta oposición y el hecho de ser la única derrota militar de los Estados Unidos hasta la actualidad, creó un sentimiento de mala conciencia en el pueblo estadounidense ante una guerra considerada injusta, el llamado síndrome de Vietnam. El síndrome dio paso a un movimiento pacifista y se prolongó hasta los años 1980, durante el mandato de Ronald Reagan.30​ La guerra de Vietnam se convirtió en un icono, perdurado en la actualidad, de los grupos sociales y partidos de izquierda en gran parte del mundo, además de un ejemplo imitado por otros combatientes posteriores.\'.
cloud  addStrings: ((text splitOn: Character space) copyWithoutAll: TwitterMessages unnecessaryWords, TwitterMessages unnecessaryWordsCamelCased).',
									#tags : OrderedCollection [
										'código'
									],
									#children : OrderedCollection [ ],
									#parent : @145,
									#level : 3,
									#links : OrderedCollection [
										''
									]
								},
								GrafoscopioNode {
									#header : 'Lista de palabras en camelCase',
									#body : '',
									#tags : OrderedCollection [
										'text'
									],
									#children : OrderedCollection [
										GrafoscopioNode {
											#header : 'Larga',
											#body : '| camelWords |

camelWords := TwitterMessages unnecessaryWords collect: [ :w | w asCamelCase ].
camelWords  ',
											#tags : OrderedCollection [
												'código'
											],
											#children : OrderedCollection [ ],
											#parent : @152,
											#level : 4,
											#links : OrderedCollection [
												''
											]
										},
										GrafoscopioNode {
											#header : 'Corta',
											#body : 'TwitterMessages unnecessaryWordsCamelCased ',
											#tags : OrderedCollection [
												'código'
											],
											#children : OrderedCollection [ ],
											#parent : @152,
											#level : 4,
											#links : OrderedCollection [
												''
											]
										}
									],
									#parent : @145,
									#level : 3,
									#links : OrderedCollection [
										''
									]
								}
							],
							#parent : @98,
							#level : 2,
							#links : OrderedCollection [
								''
							]
						},
						GrafoscopioNode {
							#header : 'Histograma de top n de palabras',
							#body : '',
							#tags : OrderedCollection [
								'text'
							],
							#children : OrderedCollection [
								GrafoscopioNode {
									#header : 'Seleccionar el top n de las palabras',
									#body : '| messages localTweetsFile myTweets cloud topWords |
messages := TwitterMessages new.
localTweetsFile := FileLocator temp asFileReference / \'samuelnacar/data/js/tweets/2011_05.js\' .
messages importFromJSONLocalFile: localTweetsFile. 
topWords := messages topWordsFor: \'tweets\' Upto: 5.
topWords
',
									#tags : OrderedCollection [
										'código'
									],
									#children : OrderedCollection [ ],
									#parent : @165,
									#level : 3,
									#links : OrderedCollection [
										''
									]
								},
								GrafoscopioNode {
									#header : 'Crear histograma con palabras',
									#body : '',
									#tags : OrderedCollection [
										'text'
									],
									#children : OrderedCollection [
										GrafoscopioNode {
											#header : 'Aproximación abandonada',
											#body : '',
											#tags : OrderedCollection [
												'text'
											],
											#children : OrderedCollection [
												GrafoscopioNode {
													#header : 'Demo 1 genérico',
													#body : '| b |
b := RTDoubleBarBuilder new.
b points: RTShape withAllSubclasses.
"b bottomValue: #numberOfMethods".
b topValue: #numberOfMethods.
b build.
^ b view',
													#tags : OrderedCollection [
														'código'
													],
													#children : OrderedCollection [ ],
													#parent : @175,
													#level : 5,
													#links : OrderedCollection [
														''
													]
												},
												GrafoscopioNode {
													#header : 'Con los datos de Twitter',
													#body : '| barView messages localTweetsFile myTweets cloud topWords |

messages := TwitterMessages new.
localTweetsFile := FileLocator temp asFileReference / \'samuelnacar/data/js/tweets/2011_05.js\' .
messages importFromJSONLocalFile: localTweetsFile. 
topWords := messages topWordsFor: \'tweets\' Upto: 5.
barView  := RTDoubleBarBuilder new.
barView points: topWords.
"b bottomValue: #numberOfMethods".
barView topValue: #value.
barView  build.
^ barView view',
													#tags : OrderedCollection [
														'código'
													],
													#children : OrderedCollection [ ],
													#parent : @175,
													#level : 5,
													#links : OrderedCollection [
														''
													]
												},
												GrafoscopioNode {
													#header : 'Como un método de una línea',
													#body : '| messages localTweetsFile |
messages := TwitterMessages new.
localTweetsFile := FileLocator temp asFileReference / \'samuelnacar/data/js/tweets/2011_05.js\' .
messages importFromJSONLocalFile: localTweetsFile.
messages topWordsHistogramFor: \'retweets\' upTo: 3.

"Lo dejamos por ahora, porque personalizar la gráfica, quitándole cosas es más difícil que partir de elementos simples y agregarle cosas."',
													#tags : OrderedCollection [
														'código'
													],
													#children : OrderedCollection [ ],
													#parent : @175,
													#level : 5,
													#links : OrderedCollection [
														''
													]
												}
											],
											#parent : @172,
											#level : 4,
											#links : OrderedCollection [
												''
											]
										},
										GrafoscopioNode {
											#header : 'Nueva aproximación',
											#body : '',
											#tags : OrderedCollection [
												'text'
											],
											#children : OrderedCollection [
												GrafoscopioNode {
													#header : 'Script de partida',
													#body : 'v := RTView new.
\tes := (RTBox 
\t\tnew size: 15; 
\t\tcolor: Color blue) elementsOn: #(4 5 1 2 3 5).
\tv addAll: es.

\tes @ RTPopup.

\tRTMetricNormalizer new
\t\telements: es;
\t\talphaColor: 0.3;
\t\tnormalizeWidth: #yourself min: 0 max: 80 minValue: 0 maxValue: 5 .

\tRTVerticalLineLayout  new alignBottom; on: es.

\tes @ RTLabeled.

\tv',
													#tags : OrderedCollection [
														'código'
													],
													#children : OrderedCollection [ ],
													#parent : @191,
													#level : 5,
													#links : OrderedCollection [
														''
													]
												}
											],
											#parent : @172,
											#level : 4,
											#links : OrderedCollection [
												''
											]
										}
									],
									#parent : @165,
									#level : 3,
									#links : OrderedCollection [
										''
									]
								}
							],
							#parent : @98,
							#level : 2,
							#links : OrderedCollection [
								''
							]
						},
						GrafoscopioNode {
							#header : 'Ampliar el tamaño de la muestra',
							#body : 'Pasar de trabajar con un archivo a un directorio.',
							#tags : OrderedCollection [
								'text'
							],
							#children : OrderedCollection [
								GrafoscopioNode {
									#header : 'Explorar una carpeta con información',
									#body : '| dataFolder tweetsData year |
year := 2011.
dataFolder := FileLocator temp asFileReference / \'samuelnacar\'.
tweetsData := \'data/js/tweets\'.
(dataFolder / tweetsData) allChildren select: [: file | file basename beginsWith: year asString  ].
',
									#tags : OrderedCollection [
										'código'
									],
									#children : OrderedCollection [ ],
									#parent : @201,
									#level : 3,
									#links : OrderedCollection [
										'',
										'http://ws.stfx.eu/72MAXSBV95D4'
									]
								},
								GrafoscopioNode {
									#header : 'Desde TwitterMessages',
									#body : '| messages |

messages := TwitterMessages new
\tdataFolder: FileLocator temp asFileReference / \'samuelnacar\'.
messages selectAllFilesFor: 2011.
\t
',
									#tags : OrderedCollection [
										'código'
									],
									#children : OrderedCollection [ ],
									#parent : @201,
									#level : 3,
									#links : OrderedCollection [
										'',
										'http://ws.stfx.eu/PFJ2HTD8H117'
									]
								},
								GrafoscopioNode {
									#header : 'Mensajes mensuales por tipo',
									#body : '',
									#tags : OrderedCollection [
										'text'
									],
									#children : OrderedCollection [
										GrafoscopioNode {
											#header : 'A partir de un script',
											#body : '"Vamos a recolectar los mensajes y los vamos a partir de acuerdo a su tipo"
| messages yearData |

"Este es un recuento para seleccionar el tamaño de los mensajes de un mes en particular:"
messages := TwitterMessages new
\tdataFolder: FileLocator temp asFileReference / \'samuelnacar\'.
yearData := messages selectAllFilesFor: 2011.
(messages importFromJSONLocalFile: (yearData at: 1)) sizesByType',
											#tags : OrderedCollection [
												'código'
											],
											#children : OrderedCollection [ ],
											#parent : @212,
											#level : 4,
											#links : OrderedCollection [
												''
											]
										},
										GrafoscopioNode {
											#header : 'A partir de un método',
											#body : '| messages |

messages := TwitterMessages new
\tdataFolder: FileLocator temp asFileReference / \'samuelnacar\'.
messages monthlyMessagesSizeByTypeIn: 2011.
"messages emptyYearlyDataTemplate."',
											#tags : OrderedCollection [
												'código'
											],
											#children : OrderedCollection [ ],
											#parent : @212,
											#level : 4,
											#links : OrderedCollection [
												''
											]
										}
									],
									#parent : @201,
									#level : 3,
									#links : OrderedCollection [
										''
									]
								},
								GrafoscopioNode {
									#header : 'Meter los datos anuales a una plantilla visual',
									#body : '',
									#tags : OrderedCollection [
										'text'
									],
									#children : OrderedCollection [
										GrafoscopioNode {
											#header : 'exampleMultiDataPoint',
											#body : '| b d |
b := RTGrapher new.
d := RTHorizontalMultipleData new.
"d barShape color: Color blue."
d points: #(#(\'hello\' 1 2 1) #(\'world\' 2 4 2) #(\'bonjour\' 3 5 4) #(\'Gutten Morgen\' -1 4 -5)).
d addMetric: #second.
d addMetric: #third.
d addMetric: #fourth.
"d barChartWithBarCenteredTitle: #first."
d barChartWithBarTitle: #first rotation: -30.
b add: d.
^ b
',
											#tags : OrderedCollection [
												'código'
											],
											#children : OrderedCollection [ ],
											#parent : @224,
											#level : 5,
											#links : OrderedCollection [
												'',
												'exampleMultiDataPoint',
												'http://ws.stfx.eu/5ML4L2UO0WJI'
											]
										},
										GrafoscopioNode {
											#header : 'De diccionario a array',
											#body : '| myDict trinosMes |

trinosMes := TwitterMessages new emptyMonthlyDataTemplate.
"myDict := Dictionary new 
\tat: \'llave1\' put: trinosMes;
\tat: \'llave2\' put: trinosMes;
\tyourself.
myDict asArray."
trinosMes
\tat: \'repliesSize\' put: 10;
\tat: \'tweetsSize\' put: 20;
\tat: \'retweetsSize\' put: 30;
\tyourself.
trinosMes asArray.',
											#tags : OrderedCollection [
												'código'
											],
											#children : OrderedCollection [ ],
											#parent : @224,
											#level : 5,
											#links : OrderedCollection [
												''
											]
										},
										GrafoscopioNode {
											#header : 'De diccionario a tabla',
											#body : '| messages |

messages := TwitterMessages new
\tdataFolder: FileLocator temp asFileReference / \'samuelnacar\'.
messages monthlyMessagesSizeByTypeAsTableIn: 2011.',
											#tags : OrderedCollection [
												'código'
											],
											#children : OrderedCollection [ ],
											#parent : @224,
											#level : 5,
											#links : OrderedCollection [
												''
											]
										}
									],
									#parent : @201,
									#level : 3,
									#links : OrderedCollection [
										''
									]
								},
								GrafoscopioNode {
									#header : 'Histograma de trinos anuales',
									#body : '',
									#tags : OrderedCollection [
										'text'
									],
									#children : OrderedCollection [
										GrafoscopioNode {
											#header : 'Como script',
											#body : '| b d messages year months dataTable |

year := 2011.
messages := TwitterMessages new
\tdataFolder: FileLocator temp asFileReference / \'samuelnacar\'.
b := RTGrapher new.
d := RTHorizontalMultipleData new.
"d barShape color: Color blue."
dataTable := messages monthlyMessagesSizeByTypeAsTableIn: year.
d points: dataTable.
d addMetric: #second.
d addMetric: #third.
d addMetric: #fourth.
"d barChartWithBarCenteredTitle: #first."
d barChartWithBarTitle: #first rotation: -30.
b add: d.
^ b',
											#tags : OrderedCollection [
												'código'
											],
											#children : OrderedCollection [ ],
											#parent : @240,
											#level : 4,
											#links : OrderedCollection [
												''
											]
										},
										GrafoscopioNode {
											#header : 'Como método',
											#body : '| messages |
messages := TwitterMessages new
\tdataFolder: FileLocator temp asFileReference / \'samuelnacar\'.
messages yearlyHistogramByMessageTypeIn: 2014.',
											#tags : OrderedCollection [
												'código'
											],
											#children : OrderedCollection [ ],
											#parent : @240,
											#level : 4,
											#links : OrderedCollection [
												'',
												'http://ws.stfx.eu/8NP2E2P3E1R3'
											]
										}
									],
									#parent : @201,
									#level : 3,
									#links : OrderedCollection [
										''
									]
								},
								GrafoscopioNode {
									#header : 'Hashtags',
									#body : '',
									#tags : OrderedCollection [
										'text'
									],
									#children : OrderedCollection [
										GrafoscopioNode {
											#header : 'Sacar hashtags',
											#body : '| messages tweetsFile |
messages := TwitterMessages new
\tdataFolder: FileLocator temp asFileReference / \'samuelnacar\'.
tweetsFile := (messages dataFolder / messages tweetsDataFolder) / \'2011_03.js\'.
messages importFromJSONLocalFile: tweetsFile ',
											#tags : OrderedCollection [
												'código'
											],
											#children : OrderedCollection [ ],
											#parent : @252,
											#level : 4,
											#links : OrderedCollection [
												''
											]
										},
										GrafoscopioNode {
											#header : 'Nube de hashtags',
											#body : '| messages tweetsFile cloud|
messages := TwitterMessages new
\tdataFolder: FileLocator temp asFileReference / \'samuelnacar\'.
messages importFromJSONDataFolder.

cloud := RTNameCloud new.
cloud := messages hashtagCloudFor: \'tweets\'.
cloud.
',
											#tags : OrderedCollection [
												'código'
											],
											#children : OrderedCollection [ ],
											#parent : @252,
											#level : 4,
											#links : OrderedCollection [
												'',
												'http://ws.stfx.eu/IP73KI1D0V4H'
											]
										}
									],
									#parent : @201,
									#level : 3,
									#links : OrderedCollection [
										''
									]
								},
								GrafoscopioNode {
									#header : '',
									#body : '',
									#tags : OrderedCollection [
										'código'
									],
									#children : OrderedCollection [ ],
									#parent : @201,
									#level : 3,
									#links : OrderedCollection [
										''
									]
								}
							],
							#parent : @98,
							#level : 2,
							#links : OrderedCollection [
								''
							]
						}
					],
					#parent : @63,
					#level : 1,
					#links : OrderedCollection [
						''
					]
				},
				@101,
				@105,
				@108,
				@112,
				@116,
				@121,
				@124,
				@128,
				@132,
				@136,
				@140,
				@145,
				@148,
				@152,
				@155,
				@159,
				@165,
				@168,
				@172,
				@175,
				@178,
				@182,
				@186,
				@191,
				@194,
				@201,
				@204,
				@208,
				@212,
				@215,
				@219,
				@224,
				@227,
				@231,
				@235,
				@240,
				@243,
				@247,
				@252,
				@255,
				@259,
				@264
			]
		},
		#level : 1,
		#links : OrderedCollection [
			''
		]
	},
	@66,
	@98
]