Skip to content

Commit 1d17201

Browse files
authored
Merge pull request #90 from tomeshnet/remark-module-1
The Remark-able Overhaul!
2 parents a8be5de + 48e2b80 commit 1d17201

File tree

185 files changed

+24669
-886
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

185 files changed

+24669
-886
lines changed

README.md

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -52,9 +52,7 @@ This course can be facilitated in an environment without internet access. Partic
5252

5353
## Workshop Materials
5454

55-
Class materials are written as [Markdown](https://en.wikipedia.org/wiki/Markdown) files and presentation slides are created as a Markdown-based [GitBook](https://www.gitbook.com). All generated assets are hosted on [GitHub Pages](https://tomeshnet.github.io/p2p-internet-workshop/) and packaged as a downloadable archive on [GitHub Releases](https://github.com/tomeshnet/p2p-internet-workshop/releases/latest).
56-
57-
When facilitating the workshop in an offline environment, you can run `gitbook serve` from a `presentation` directory to serve the slides on `http://localhost:4000`.
55+
Class materials are written as [Markdown](https://en.wikipedia.org/wiki/Markdown) files and presentation slides are created as Markdown-based [Remark slides](https://github.com/gnab/remark). All generated assets are hosted on [GitHub Pages](https://tomeshnet.github.io/p2p-internet-workshop/) and packaged as a downloadable archive on [GitHub Releases](https://github.com/tomeshnet/p2p-internet-workshop/releases/latest).
5856

5957
If you want to generate course assets yourself, simply run `./install-dependencies.sh` and `./build.sh`. You will find the generated assets in the `output` folder. The `./package.sh` script is used to zip up the generated assets into downloadable archives and to create the course website.
6058

@@ -92,7 +90,7 @@ Other accessories:
9290

9391
The first version of this syllabus is created by [Toronto Mesh](https://tomesh.net) contributors: [@benhylau](https://github.com/benhylau), [@darkdrgn2k](https://github.com/darkdrgn2k), [@dcwalk](https://github.com/dcwalk), [@uditvira](https://github.com/uditvira), [@Shrinks99](https://github.com/Shrinks99), and [@Pedro-on-a-bike](https://github.com/Pedro-on-a-bike). While most of the material is created new, the course also incorporates many prior works listed [here](https://tomeshnet.github.io/p2p-internet-workshop/articles/general/general-extra-resources.pdf), or otherwise referenced in their individual course modules.
9492

95-
Hands-on activities rely on software from many projects: [mesh-orange](https://github.com/tomeshnet/mesh-orange), [mesh-router-builder](https://github.com/benhylau/mesh-router-builder), [mesh-workshop](https://github.com/benhylau/mesh-workshop/), [steamlink](https://github.com/steamlink), [cjdns](https://github.com/cjdelisle/cjdns/), [Yggdrasil](https://yggdrasil-network.github.io/about.html), [IPFS](https://ipfs.io/), [Secure Scuttlebutt](https://github.com/ssbc/). Course material generation uses [markdown-pdf](https://github.com/alanshaw/markdown-pdf) and [gitbook-cli](https://github.com/GitbookIO/gitbook-cli). The course website is built with [Jekyll](https://jekyllrb.com/), and the theme is from [Mozilla's Open Leadership Training Series](https://github.com/mozilla/open-leadership-training-series). Icons from [Font Awesome](http://fontawesome.io/) and [Jake Ingman](https://thenounproject.com/search/?q=mesh&i=74809) are used.
93+
Hands-on activities rely on software from many projects: [mesh-orange](https://github.com/tomeshnet/mesh-orange), [mesh-router-builder](https://github.com/benhylau/mesh-router-builder), [mesh-workshop](https://github.com/benhylau/mesh-workshop/), [steamlink](https://github.com/steamlink), [cjdns](https://github.com/cjdelisle/cjdns/), [Yggdrasil](https://yggdrasil-network.github.io/about.html), [IPFS](https://ipfs.io/), [Secure Scuttlebutt](https://github.com/ssbc/). Course material generation uses [markdown-pdf](https://github.com/alanshaw/markdown-pdf) and [decktape](https://github.com/astefanutti/decktape). The course website is built with [Jekyll](https://jekyllrb.com/), and the theme is from [Mozilla's Open Leadership Training Series](https://github.com/mozilla/open-leadership-training-series). Icons from [Font Awesome](http://fontawesome.io/) and [Jake Ingman](https://thenounproject.com/search/?q=mesh&i=74809) are used.
9694

9795
## License
9896

build.sh

Lines changed: 31 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -8,10 +8,14 @@ mkdir output
88
css="pdf.css"
99
echo "Using CSS styles from $css"
1010

11+
# Define starting directory
12+
base_dir="$(pwd)"
13+
14+
# Create folder for general assets
15+
mkdir output/general
16+
1117
# Generate general assets
1218
for doc in general/*.md; do
13-
# Create folder for general assets
14-
mkdir output/general
1519

1620
# Generate assets as .pdf
1721
if [ -f $doc ]; then
@@ -21,10 +25,13 @@ for doc in general/*.md; do
2125
fi
2226
done
2327

28+
# Copy technical files used by Remark
29+
cp -r "slide-files" "output/"
30+
2431
# Go through each module
2532
for mod in module-*; do
2633
# Create folder for module
27-
mkdir "$mod"
34+
mkdir "output/$mod"
2835

2936
# Generate lesson plan .pdf
3037
doc="$mod/README.md"
@@ -34,21 +41,29 @@ for mod in module-*; do
3441
markdown-pdf "$doc" --out "$out" --cwd "$mod" --css-path "$css"
3542
fi
3643

37-
# Generate worksheets as .pdf
38-
mkdir "output/$mod/worksheet"
39-
for doc in $mod/worksheet/*.md; do
44+
# Generate handouts as .pdf
45+
mkdir "output/$mod/handouts"
46+
for doc in $mod/handouts/*.md; do
4047
if [ -f $doc ]; then
41-
out="output/$mod/worksheet/$(echo "$doc" | sed 's|/|-|g' | sed 's|.md|.pdf|')"
42-
echo "Generating worksheet from $doc to $out"
43-
markdown-pdf "$doc" --out "$out" --cwd "$mod/worksheet" --css-path "$css"
48+
out="output/$mod/handouts/$(echo "$doc" | sed 's|/|-|g' | sed 's|.md|.pdf|')"
49+
echo "Generating handouts from $doc to $out"
50+
markdown-pdf "$doc" --out "$out" --cwd "$mod/handouts" --css-path "$css"
4451
fi
4552
done
4653

47-
# Generate presentation GitBook
48-
book="$mod/presentation"
49-
if [ -d $book ]; then
50-
out="output/$mod/presentation"
51-
echo "Generating presentation from $book to $out"
52-
gitbook build "$book" "$out"
53-
fi
54+
# Copy Remark presentation and generate .pdf copy with DeckTape
55+
doc="presentation.html"
56+
cd $mod
57+
if [ -f $doc ]; then
58+
# Generate .pdf
59+
out="../output/$mod/handouts/$mod-presentation.pdf"
60+
echo "Generating presentation from $mod/$doc to $out"
61+
decktape remark "$doc" "$out" --chrome-arg=--allow-file-access-from-files
62+
63+
# Copy Remark presentation
64+
cp -r "slide-images" "../output/$mod/"
65+
cp "$doc" "../output/$mod/"
66+
fi
67+
cd $base_dir
68+
5469
done

install-dependencies.sh

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,10 @@
11
#!/usr/bin/env bash
22

3-
# For generating course materials in PDF
3+
# For rendering course materials to .pdf
44
npm install -g markdown-pdf
55

6-
# For generating presentation slides with GitBook
7-
npm install -g gitbook-cli
6+
# For converting Remark presentations to .pdf
7+
npm install -g decktape
88

99
# For generating course website with Jekyll
1010
gem install bundler

module-1/presentation.html

Lines changed: 168 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,168 @@
1+
<!DOCTYPE html>
2+
<html>
3+
<head>
4+
<title>Module One</title>
5+
<meta charset="utf-8">
6+
<meta name="viewport" content="width=device-width, initial-scale=1.0">
7+
<meta http-equiv="X-UA-Compatible" content="ie=edge">
8+
<link rel="stylesheet" href="../slide-files/slide.css">
9+
<script src="../slide-files/remark.js"></script>
10+
</head>
11+
12+
<body>
13+
14+
<textarea id="source">
15+
class: center, middle
16+
17+
# Building the Peer-to-Peer Internet
18+
19+
---
20+
21+
# Module 1: What is mesh?
22+
23+
1. About this workshop series
24+
2. Meshnets and peer-to-peer applications
25+
3. Peer-to-peer file sharing over a meshnet
26+
4. Investigating our technologies
27+
5. Wrap-up & homework
28+
29+
---
30+
class: center, middle
31+
32+
# About this workshop series
33+
34+
---
35+
36+
# Who made this?
37+
38+
This workshop series is made by [Toronto Mesh](https://tomesh.net), a group of volunteers using off-the-shelf hardware and peer-to-peer software to build a community mesh network.
39+
40+
Over the course of six workshops, we will:
41+
42+
- Learn how to build and maintain mesh networks
43+
- Familiarize with peer-to-peer applications and their values vs. centralized systems
44+
- Reflect on the politics of our technologies and what a distributed web may bring
45+
46+
The syllabus, along with all course material is open-source and adapts resources from [Commotion Wireless](http://commotionwireless.net), [Meta Mesh](https://www.metamesh.org), [networks.land](http://networks.land), [(Re)Building Technology](http://communitytechnology.github.io/), among others.
47+
48+
You can find it here: https://github.com/tomeshnet/p2p-internet-workshop/
49+
50+
---
51+
class: center, middle
52+
53+
# Meshnets and peer-to-peer applications
54+
55+
---
56+
57+
# Home internet
58+
59+
.center[![Home internet](slide-images/home-internet.svg)]
60+
61+
- In 2011, [Egypt internet shutdown](https://www.accessnow.org/five-years-later-the-internet-shutdown-that-rocked-egypt/) during Arab Spring, and in 2016, [Turkey passed legislation](https://turkeyblocks.org/2016/08/25/social-media-blocked-turkey/) allowing government to suspend access
62+
- In 2017, [Hurrican Maria in Puerto Rico](https://dyn.com/blog/puerto-ricos-slow-internet-recovery/) caused significant damage to last-mile infrastructure, slow recovery of general internet access long after core infrastructure is restored
63+
64+
---
65+
66+
# Mesh topology
67+
68+
![Mesh topology](slide-images/mesh-topology.svg)
69+
70+
- [Great Firewall of China](https://en.wikipedia.org/wiki/Great_Firewall) routinely scans, censors, and modifies internet traffic
71+
- In 2017 leading up to the Catalan referendum, the Spanish government [took down .cat domains](https://www.theregister.co.uk/2017/09/23/spanish_government_criticized_over_catalan_internet_registry_raid/) and [had the polling station app blocked](https://www.thespainreport.com/articles/1166-170929190146-google-removes-catalan-referendum-app-from-google-play-after-catalan-high-court-issues-take-down-order)
72+
- [Equifax data breach of 2017](https://arstechnica.com/information-technology/2017/09/why-the-equifax-breach-is-very-possibly-the-worst-leak-of-personal-info-ever/) demonstrated significant security risk associated with large collections of personal information
73+
74+
---
75+
76+
# Peer-to-peer applications
77+
78+
![Peer-to-peer applications](slide-images/peer-to-peer-applications.svg)
79+
80+
- Distribute content to mesh nodes such that you can access them from your peers, and their peers, and so on...
81+
- Content-addressing schemes allow you to self-verify integrity of the data, so you don't have to trust the data source
82+
- Content replication across nodes + distributed communication infrastructure make it difficult for single actors to monitor, censor, or destroy information access, discourage large collections of personal information, and allows for democratic forms of moderation
83+
84+
---
85+
86+
# Mesh communities
87+
88+
- Established mesh networks such as [Freifunk](https://freifunk.net) and [Guifi](http://guifi.net/) in Europe, [Metamesh](https://www.metamesh.org) and [People's Open](https://peoplesopen.net) in the U.S., [AlterMundi](https://altermundi.net) in Argentina, and many more
89+
- Common activities include flashing and putting up off-the-shelf routers, building free software and custom hardware, developing technical literacy material, providing low-cost internet access, community organizing locally and globally (such as [Battle Mesh](https://battlemesh.org))
90+
- Large variations across different mesh communities in their approach and ambitions
91+
92+
---
93+
94+
# Peer-to-peer file sharing on a mesh
95+
96+
Each Raspberry Pi:
97+
- Has a unique name in the form of `<hostname>.local`
98+
- Advertises a WiFi SSID `<hostname>` which you can connect with `password` as password
99+
- Connects to other in-range Raspberry Pis via a second WiFi interface to form a mesh
100+
101+
We will use the [InterPlanetary File System (IPFS)](https://ipfs.io), a peer-to-peer hypermedia protocol, to share content with each other on our own network.
102+
103+
You can think of the Raspberry Pi as your home router and modem connecting to your Internet Service Provider (ISP), except now it has a direct line to other content-serving mesh nodes just like itself, and has superpowers because it runs like a full computer.
104+
105+
---
106+
107+
# Investigate our technologies
108+
109+
Select a popular website or application and investigate based on the following criteria:
110+
111+
1. Mission & Ownership
112+
2. Design & Access
113+
3. Community & Local Impact
114+
4. Profit & Sustainability
115+
5. Teaching & Learning
116+
117+
.footnote[_This activity is based on [Explore Community Technology: Investigate Technology](https://communitytechnology.github.io/docs/intro-ct/investigate-tech/)._ ]
118+
119+
---
120+
class: center, middle
121+
122+
# Wrap-up & Homework
123+
124+
---
125+
126+
# Recap
127+
128+
- Presented the general state of peer-to-peer networks and services
129+
- Experimented with a distributed peer-to-peer application run over off-internet mesh network infrastructure
130+
- Touched upon community models for creating and managing technologies
131+
132+
_Questions?_
133+
134+
---
135+
136+
# Homework
137+
138+
Next session we will dive into networking on GNU/Linux and explore the layers between the application we used today and the cable or WiFi radio connecting these nodes.
139+
140+
📝_Watch this awesome video at home!_
141+
142+
[Routing and the Postal System](https://www.youtube.com/watch?v=n7NBgJAhzZ0) from the [Metamesh YouTube channel](https://www.youtube.com/channel/UCGEnntxbGKMU9J9GIZ1LQUQ):
143+
- Compares IP routing to postal delivery system
144+
- Explains acronyms like IP, DHCP, and NAT
145+
- Explains how addresses are distributed and routing in hierarchical ISP networks
146+
- Provides background for future discussions about self-addressing of IPv6 and mesh based "flat" routing
147+
</textarea>
148+
149+
<script>
150+
var slideshow = remark.create({
151+
// While the slide aspect ratio can be changed to '4:3' this can cause some content to be cut off. If you plan on changing this please reformat the slides accordingly!
152+
ratio: '16:9',
153+
slideNumberFormat:'',
154+
155+
// Presentation slide navigation options
156+
navigation: {
157+
scroll: false,
158+
touch: true,
159+
click: true,
160+
},
161+
162+
// The highlight theme used by highlight.js to style code blocks
163+
highlightStyle: 'atom-one-dark',
164+
});
165+
</script>
166+
167+
</body>
168+
</html>

module-1/presentation/README.md

Lines changed: 0 additions & 7 deletions
This file was deleted.

module-1/presentation/SUMMARY.md

Lines changed: 0 additions & 15 deletions
This file was deleted.

module-1/presentation/part-0/README.md

Lines changed: 0 additions & 1 deletion
This file was deleted.

module-1/presentation/part-0/introduce-yourself.md

Lines changed: 0 additions & 7 deletions
This file was deleted.

module-1/presentation/part-0/who-runs-this.md

Lines changed: 0 additions & 11 deletions
This file was deleted.

module-1/presentation/part-1/README.md

Lines changed: 0 additions & 1 deletion
This file was deleted.

module-1/presentation/part-1/home-internet.md

Lines changed: 0 additions & 6 deletions
This file was deleted.

0 commit comments

Comments
 (0)