Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add modules with initial notes #3

Merged
merged 7 commits into from
Jan 31, 2018
Merged

Add modules with initial notes #3

merged 7 commits into from
Jan 31, 2018

Conversation

benhylau
Copy link
Member

@benhylau benhylau commented Jan 6, 2018

This PR is worked on by: @benhylau @dcwalk @darkdrgn2k @uditvira @ansuz and is work-in-progress. Although at some point when the task separation is more clear we should think about merging this and move to a more sane pull model :)

@benhylau benhylau requested a review from dcwalk January 6, 2018 09:55
@dcwalk
Copy link
Contributor

dcwalk commented Jan 6, 2018 via email

Copy link
Contributor

@dcwalk dcwalk left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Nice start, I'll make a round of commits tomorrow most likely to fill in the bits I mentioned :)

module-1.md Outdated

## 2: Hands-on and material exploration

- Introduce yourself, why you are interested in this workshop
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Would aim to have the intros before a lecture.

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Remember our conversation about giving a little bit of context first (to surface ideas) vs. intro at the start? A while back.

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I don't remember, I think there are tradeoffs, but a round of names from the start and like a one sentence intro makes things feel less lecture, more participatory from the start.

I almost always follow that format.

module-1.md Outdated
## 2: Hands-on and material exploration

- Introduce yourself, why you are interested in this workshop
- Activity for audience to "run their own app" on pre-configured nodes, where the apps are relatable with those we are familiar with from the Internet (e.g. Facebook, Dropbox, Whatsapp, Twitter, Spotify)
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think we need to figure out the best way to specify an activity, my sense:

  1. format (e.g. group, pairs)
  2. materials (including slides etc...)
  3. objectives

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Makes sense to me. Let's add to template.

module-1.md Outdated

## 1: Topic introduction

- Discuss familiar topics like net neutrality, internet service providers, and internet censorship
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Should link to materials somewhere (incl. slide deck/site?), these could be contained within this repo

module-1.md Outdated

## 4: Wrap-up and week ahead

- Video on basic networking concepts (Metamesh intro videos)
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Think we could rough these in with a link + short description

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Yup will do.

module-6.md Outdated
## 2: Hands-on and material exploration

- Build a 900 MHz LoRa sensor network with WiFi mesh network as backhaul
- Use case for a community network that functions without internet connectivity
Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@uditvira hey can you add details to this one please

module-6.md Outdated
* How does LoRa work? What are some alternatives?
* ISM band and spectrum allocation in Canada

- Low Power Microcontrolers
Copy link
Member

@uditvira uditvira Jan 14, 2018

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@benhylau it could be possible to do a hands-on demo of Pi-to-Pi communication over LoRa instead of using Arduino's. That may be easier for people because they would already be familiar with Pi's at this point - however it won't be with low power micro-controllers anymore. Thoughts?

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Just be careful logic levels are different between Arduino and the pi... Depending on what you do you may need a logic level. Converter..

I don't think not using low level micro processors is an issue in an educational setting.. It's more to intrude a concept to lora. We can note that there are low powered processors but I think the learning curve would be maybe to high to throw Arduino into all this to.

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I don't think it is necessary to use Arduinos. It is sufficient to workshop LoRa transmission between two Raspberry Pi nodes, and then perhaps show an Arduino node with a power consumption comparison (just mentioning the numbers).

- USB WiFi radio that is ad-hoc or 802.11s-capable (e.g. TP-Link TL-WN722N)
- SD card with [mesh-orange](https://github.com/tomeshnet/mesh-orange) pre-configured to mesh wirelessly with cjdns
- Tools to discover node identity in the ad-hoc network and share human-readable names with others (e.g. [ssb-dns](https://github.com/ansuz/dnssb))
- Contain Docker image for Secure Scuttlebutt and multiple Patchwork clients (i.e. [scuttlebot](https://github.com/ssbc/scuttlebot), [patchwork](https://github.com/ssbc/patchwork), [patchbay](https://github.com/ssbc/patchbay), [patchfoo](https://github.com/ssbc/patchfoo))
Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@ansuz Do you know if patchwork and patchbay can be installed on a Raspberry Pi and accessed over browser from a laptop client?

Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Patchwork is an electron app, and I don't think there is a way to access it remotely except by X11 Forwarding.

patchbay, patchfoo, and several other clients are written to run in the browser, so they'd just need a means of restricting access to maybe a single cjdns ip.

Initial sync with ssb can be a bit heavy for the CPU, so I'd recommend that nobody start with an existing ssb feed.

Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

scuttlebot can be installed on an raspberry-pi, and it's all you need to access the network at a basic level. A basic UI could be made targeting this platform for whatever display you have. In my case, I plan to show basic (mainly connectivity) details of the ssb nodes attached to my mesh network on the installed sensehat. More details on getting started with sbot: https://www.scuttlebutt.nz/guides/cli-first-steps.html

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@vuldin Do you know if Patchbay can be run on the Pi as well, and then exposed on some port and accessed through browser of a NAT client? The command line is cool, but since this is the first workshop for a general audience, where cli is usually unfamiliar, it's best to start at the browser and then cli to show this is the actual message that is exchanged.

Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@benhylau I'm not sure about patchbay since I haven't tried it. My plan is to just create a websocket wrapper for sbot that allows a webapp to communicate with the service. Then I can have that webapp run on any other more graphically capable device such as my phone or laptop.

It would be cool to have the Pi connect to the mesh and then provide that connection to my phone (along with connection to the secure-scuttlebutt network). This connection could be done either with the built-in Pi wifi (if available) or bluetooth. All this along with a battery-powered Pi means an entirely mobile mesh-connected system with ssb (and any other P2P app/service you run on the Pi).

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Are you also building the webapp UI that talks to the ssb websocket? RE: mesh connection, yes the Raspberry Pi 3 configures the on-board WiFi as hostap and all ipv6 NAT traffic is passed to the cjdns tun interface: https://github.com/tomeshnet/prototype-cjdns-pi/blob/master/scripts/hostapd/nat.sh#L11

Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@benhylau I'm working on the UI, yes. I'm only at the point of having the framework in place, and it has basic connectivity/communication with the server. Once I have sbot sending data to websocket channels that are successfully displaying on the client I'll push the initial commit of the web project. Keep in mind that that level of functionality will be far from being a patchwork alternative, but it will be a good start.

Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

By the way @benhylau , that's awesome that cjdns can be the provider for the IPv6 address for mesh networking, and that you are still also able to connect to the broader network provided by cjdns (when connected to an access point). I will still need to do testing since I'm unfamiliar with how this all works... I'll share any notes.


- Individuals

### Activity
Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@ansuz Thoughts re: this as a workshop activity? Do you know how peer/friend discovery works over LAN?

Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I tried the other day and was able to sync another feed, while the other person could not see my posts.

It might work better if everyone is using the same hardware and software.


- USB WiFi radio that is ad-hoc or 802.11s-capable (e.g. TP-Link TL-WN722N)
- SD card with [mesh-orange](https://github.com/tomeshnet/mesh-orange) pre-configured to mesh wirelessly with cjdns
- Tools to discover node identity in the ad-hoc network and share human-readable names with others (e.g. [ssb-dns](https://github.com/ansuz/dnssb))
Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@ansuz Can ssb-dns allow us a reasonable way to address each other via names instead of cjdns IPv6 addresses?

Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

There's some work involved to change your DNS to resolve to your ssb records, and I'm not sure it would be easier than passing around IPv6s. Theoretically, it's designed to work especially well for in offline environments.

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

- Manually `echo`ing plaintext and HTTP messages into `netcat` is like you performing the task of an application (including our day-to-day ones, and the peer-to-peer ones we were playing with the week before)
- End the group stage and take four volunteers to form a more-than-two-node network using the network switch
- Point out two people in different groups may have selected the same IPv4 address, like how two previously disjoint communities gave the same street name and house number, which only becomes a problem when we bridge these two communities (talk about NAT and self-assignment of IPv6)
- Show how we can talk to multiple addresses from one node
Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@darkdrgn2k Only here we start using cjdns. Earlier parts are over clear IPv4s.

- An even number of Raspberry Pi 3s
- SD cards with mesh-orange images with all necessary interfaces pre-configured and programs pre-installed (e.g. ifconfig, netcat, cjdns)
- Ethernet cables equaling the number of Raspberry Pis
- Laptops that can make a SSH session to each Raspberry Pi (each running a Host AP with unique SSID)
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

One issue we may have is as all these nodes come up there will be so many SSIDs with default passwords floating around that it may be difficult to identify which one is yours.

We will need a way to "lock in" the ssid for each node and record it with a label on the box.

Without using configs perhaps we can tie the ssid to the MAC address of the onboard wireless adapter? or maybe even Ethernet?

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Yes I think we must drop a unique ssid in conf.d for each node. I already have to do this for two nodes otherwise I don't know which test2 I am connected to.

@dcwalk
Copy link
Contributor

dcwalk commented Jan 25, 2018

Okay I'm feeling like having a single PR might be too big to really dig in on each lesson, is there a date after which we aim to merge this in, and separate out remaining work?

Module 2 looks pretty far along, but I have some questions about how the initial intro and discussion will be handled (e.g. I think we don't want to just say "discuss" but also create materials, or identify arguments and perspectives?)

@benhylau
Copy link
Member Author

@dcwalk As noted here I am hoping to merge this in asap :) perhaps we should just merge this then have separate PR for each module?

Module 2 looks pretty far along, but I have some questions about how the initial intro and discussion will be handled (e.g. I think we don't want to just say "discuss" but also create materials, or identify arguments and perspectives?)

Yes those sections are not yet done and I have not had time to think about them. Once we divide up the work perhaps we will have people contribute to those sections.

_Preference to those that require minimal steps (e.g. exchanging keys, after `docker start`) and have a familiar UI._

- Secure Scuttlebutt / Patchwork (need to pin public keys)
- IPFS (auto peer but need to share content hash)
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

https://hub.docker.com/r/jkms/rpi-go-ipfs/

this is tested and working using HypriotOS on my RPI3. GH here: https://github.com/jkms/go-ipfs

module-1.md Outdated

## 3: Discussion and reflection activity

- Reflect on the role of technology in society
Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.


## 3: Discussion and reflection activity


Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Something fun? http://networks.land/activities/i-think-therefore-icann/
Not sure if enough time for this.

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@dcwalk to follow up

@benhylau benhylau merged commit 708ee68 into master Jan 31, 2018
@benhylau
Copy link
Member Author

benhylau commented Jan 31, 2018

As discussed during meeting, we are merging this in and will have per module PRs to continue future work. See https://github.com/tomeshnet/tpl-workshop/milestone/1

This was referenced Jan 31, 2018
@benhylau benhylau deleted the modules branch February 24, 2018 15:24
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

None yet

7 participants