diff --git a/index.html b/index.html
index 7866b15..ea9ed5e 100644
--- a/index.html
+++ b/index.html
@@ -56,15 +56,15 @@ Cursor is allowed to flow EVERYWHERE though...
1
- 1. Networks
+ 1. Connections
2
- 2. Simple Contagion
+ 2. Contagions
3
- 3. Complex Contagion
+ 3. Complex Contagions
4
@@ -139,8 +139,8 @@ let's play! →
- Isaac Newton was pretty sure he was one smart cookie.
- I mean, after inventing calculus, classical mechanics, and a theory of gravity,
+ Sir Isaac Newton was pretty sure he was one smart cookie.
+ I mean, after inventing calculus and a theory of gravity,
he should be smart enough to do some financial investing, right?
Anyway,
long story short, he lost $4,600,000 (in today's dollars)
@@ -172,11 +172,10 @@ let's play! →
But why do some crowds become wise or mad?
Can we calculate the madness, or wisdom, of people?
- According to a new field of science,
- the answer is not to look at a crowd's individuals,
- but at...
+ According to the new field of network science,
+ the answer is not in the individual people, but in...
- ...its network →
+ ...their connections →
@@ -290,7 +289,7 @@ let's play! →
But ideas/behaviors aren't just passively observed, they actively spread.
So now, let's look at something network scientists call...
- “Simple Contagion!” →
+ “Contagions!” →
← bonus challenge: make everyone think
less than half of their friends are binge-drinkers
@@ -303,30 +302,112 @@ let's play! →
-blah blah simple
+ Below, we start with one person (img) who has some information.
+ Some misinformation. "Fake news", as the cool kids say.
+ And every day, that person spreads the rumor to their friends.
+ And they spread it to their friends. And so on.
+
+ Run the simulation, step-by-step ↓
+ (p.s: you can't draw while the sim's running)
+
+
+
+ Note: despite the negative name, "contagions" can be good or bad.
+ There's strong statistical evidence(*) that
+ smoking, happiness, obesity, voting patterns, and cooperation levels
+ are all "contagious" --
+ and even some evidence that suicides(*) and mass shootings(*) are, too.
-next
+ well that's depressing →
-blah blah simple cascade
+ Indeed it is.
+ Anyway, PUZZLE TIME!
+
+ Draw a network & run the simulation,
+ so that everyone gets infected with the "contagion".
+ (new rule: you can't cut the thick connections)
-onwards...
+ fan-flipping-tastic →
+
+
+
+ This madness-spreading is called an "information cascade".
+ Mr. Newton fell for such a cascade in 1720.
+ The world's markets fell for such a cascade in 2008.
+ But so what? You already knew ideas spread.
+ However, network scientists recently found a new kind of contagion,
+ one that spreads strangely. And they're called...
+
+
+
+ “Complex Contagions!” →
-blah blah complex vs simple
+
+ Truth may be stranger than fiction, but it doesn't sell as well.
+
+
+
+ Simple contagions, like juicy rumors or hot takes,
+ only need one "infected" friend to spread.
+ That doesn't mean the contagion will spread,
+ just that one exposure can be enough to spread.
+ This, by the way, is how biological contagions like viruses work.
+
+
+
+ Complex contagions are weirder.
+ Some things -- like norms, habits and hard-to-accept ideas --
+ need more social encouragement.
+ They need not a minimum number of friends to spread,
+ but a minimum percentage of friends to spread!(*)
+
+
+
+ On the right, a person needs at least 25% of their friends to
+ adopt a complex fact (img) before they do.
+ Try "infecting" them all with wisdom! →
+
-
-herp derp blah blah
-next
+
+
+ CAUTION:
+ just because an idea/behavior is "complex" doesn't mean it's good,
+ (e.g. conspiracy theories)
+ and just because it's "simple" doesn't mean it's bad!
+ (e.g. "floss daily")
+
+
+
+ Think of it this way:
+ simple contagions are weeds, complex contagions are trees,
+ and a network is an ecosystem.
+ Sometimes weeds are good, sometimes trees are bad.
+ But if your ecosystem can only support weeds,
+ something's very wrong.
+
+
+
+ (BONUS: OTHER KINDS OF CONTAGIONS)
+
+
+
+ So, how do we make sure our social ecosystem is healthy?
+ Let's revisit...
+
+ ...the cascade!
+
+
diff --git a/js/chapters/2_Simple_Contagion.js b/js/chapters/2_Simple_Contagion.js
index 0fb352b..bc2d8ab 100644
--- a/js/chapters/2_Simple_Contagion.js
+++ b/js/chapters/2_Simple_Contagion.js
@@ -20,13 +20,16 @@ SLIDES.push(
// Intro text
{
type:"box",
+ id:"_2_simple",
text:"_2_simple",
- x:0, y:0, w:350, h:200
+ x:80, y:0, w:800, h:160,
+ align: "center"
},
// Lil' contagion
{
type:"sim",
+ id:"contagion",
x:0, y:80,
fullscreen: true,
network: {
@@ -43,6 +46,7 @@ SLIDES.push(
// UI for the simulation
{
type:"box",
+ id:"ui",
x:380, y:165,
sim_ui:"red"
},
@@ -68,25 +72,58 @@ SLIDES.push(
if(peep.infected) peepCount++;
});
if(peepCount==sim.peeps.length){
- var boxes = slideshow.boxes;
- boxes.showChildByID("end", true);
+ /*var boxes = slideshow.boxes;
+ boxes.showChildByID("end", true);*/
state.ended = true;
+ slideshow.next();
}
}
}
},
+{
+ remove:[
+ {type:"box", id:"_2_simple"}
+ ],
+ move:[
+ {type:"box", id:"ui", y:5},
+ {type:"sim", id:"contagion", y:-80}
+ ],
+ add:[
+ {
+ type:"box",
+ text:"_2_simple_2",
+ x:0, y:390, w:650, h:100,
+ align: "right"
+ },
+ {
+ type:"box",
+ text:"_2_simple_end",
+ x:660, y:440, w:300, h:90
+ }
+ ]
+},
{
chapter: "Simple-Cascade",
clear:true,
add:[
+ // Intro text
+ {
+ type:"box",
+ id:"_2_cascade",
+ text:"_2_cascade",
+ x:80, y:0, w:800, h:100,
+ align: "center"
+ },
+
// Sim
{
type:"sim",
- x:0, y:-140,
+ id:"contagion",
+ x:0, y:-60,
fullscreen: true,
network: {
"contagion":0,
@@ -103,23 +140,17 @@ SLIDES.push(
// UI for the simulation
{
type:"box",
- x:380, y:290,
+ id:"ui",
+ x:380, y:360,
sim_ui:"red"
},
- // Intro text
- {
- type:"box",
- text:"_2_cascade",
- x:0, y:400, w:600, h:140
- },
-
// End text
{
id:"end",
type:"box",
text:"_2_cascade_end",
- x:660, y:440, w:300, h:100,
+ x:330, y:460, w:300, h:100,
hidden:true
},
@@ -145,4 +176,27 @@ SLIDES.push(
}
},
+{
+ remove:[
+ {type:"box", id:"_2_cascade"},
+ {type:"box", id:"end"}
+ ],
+ move:[
+ {type:"box", id:"ui", y:360-80},
+ {type:"sim", id:"contagion", y:-140}
+ ],
+ add:[
+ {
+ type:"box",
+ text:"_2_post_cascade",
+ x:0, y:390, w:650, h:150,
+ align: "right"
+ },
+ {
+ type:"box",
+ text:"_2_post_cascade_end",
+ x:660, y:450, w:300, h:90
+ }
+ ]
+},
);
\ No newline at end of file
diff --git a/js/chapters/3_Complex_Contagion.js b/js/chapters/3_Complex_Contagion.js
index 0ca92df..cc5c1bc 100644
--- a/js/chapters/3_Complex_Contagion.js
+++ b/js/chapters/3_Complex_Contagion.js
@@ -11,8 +11,9 @@ SLIDES.push(
// Intro text
{
type:"box",
+ id:"_3_complex",
text:"_3_complex",
- x:0, y:0, w:360, h:370
+ x:0, y:0, w:480, h:540
},
// Sim
@@ -22,46 +23,37 @@ SLIDES.push(
fullscreen: true,
network: {
"contagion":0.25,
- "peeps":[[432,144,1],[438,410,1],[636,139,0],[638,414,0],[789,68,0],[916,101,0],[855,195,0],[798,320,0],[887,346,0],[917,445,0],[840,503,0]],
- "connections":[[0,2,0],[2,4,0],[2,5,0],[6,2,0],[1,3,0],[3,10,0],[3,7,0],[8,3,0],[9,3,0]]
+ "peeps":[[819,90,0],[911,182,0],[905,310,0],[821,413,0],[688,252,0],[551,251,1]],
+ "connections":[[4,3,0],[2,4,0],[4,1,0],[4,0,0]]
},
options:{
infectedFrame: 3,
- scale: 1.25
+ scale: 1.75
}
},
// UI for the simulation
{
type:"box",
- x:440, y:225,
+ x:520, y:340,
sim_ui:"red"
- },
-
- // End text
- {
- id:"end",
- type:"box",
- text:"_3_complex_end",
- x:0, y:370, w:360, h:170, align:"right",
- hidden:true
- },
+ }
],
onupdate:function(slideshow, state){
- // Show end if at least 5 infected
+ // Show end if ALL infected
if(!state.ended){
var sim = slideshow.simulations.sims[0];
var peepCount = 0;
sim.peeps.forEach(function(peep){
if(peep.infected) peepCount++;
});
- if(peepCount>=5){
- var boxes = slideshow.boxes;
- boxes.showChildByID("end", true);
+ if(peepCount==sim.peeps.length){
state.ended = true;
+ sim.win();
+ slideshow.next();
}
}
@@ -69,6 +61,19 @@ SLIDES.push(
},
+{
+ remove:[
+ {type:"box", id:"_3_complex"}
+ ],
+ add:[
+ {
+ type:"box",
+ text:"_3_complex_2",
+ x:0, y:0, w:480, h:540
+ }
+ ]
+},
+
{
chapter: "Complex-Cascade",
clear:true,
diff --git a/js/main.js b/js/main.js
index 596e7f8..1a30b84 100644
--- a/js/main.js
+++ b/js/main.js
@@ -29,6 +29,6 @@ window.onload = function(){
window.requestAnimationFrame(update);
// First slide!
- slideshow.gotoChapter("Networks-Majority");
+ slideshow.gotoChapter("Complex");
}
\ No newline at end of file
diff --git a/js/slideshow/Slideshow.js b/js/slideshow/Slideshow.js
index 81f6347..ec76eee 100644
--- a/js/slideshow/Slideshow.js
+++ b/js/slideshow/Slideshow.js
@@ -72,8 +72,18 @@ function Slideshow(){
slide.move.forEach(function(childConfig){
switch(childConfig.type){
case "box":
- //var box = self.boxes.getChildByID(childConfig.id);
- //tweenBox(box, childConfig);
+ var box = self.boxes.getChildByID(childConfig.id);
+ box.classList.add("transitionable");
+ var from = {
+ x: parseInt(box.style.left),
+ y: parseInt(box.style.top)
+ };
+ var to = {
+ x: (childConfig.x===undefined) ? from.x : childConfig.x,
+ y: (childConfig.y===undefined) ? from.y : childConfig.y
+ };
+ box.style.left = to.x+"px";
+ box.style.top = to.y+"px";
break;
case "sim":
var sim = self.simulations.getChildByID(childConfig.id);