Welcome to GPN!
Perth Term 1 2026
Connect to UWA WiFI
1. Select UnifiGuest wireless network�2. Enter the username and password
Username: perthgpn
Password: Gt88.mk?
3. Accept the Terms of Use.�4. Click the "Log in" button.
Connect to UWA WiFi
Welcome to GPN
Thank you to our Sponsors!
Platinum Sponsor:
Gold Sponsor:
Who are the tutors?
Log on
Log on and jump on the GPN website
girlsprogramming.network/workshop
Click on your node location
Click on your room.
From this page you can see:
Tell us you’re here!
Click on the
Start of Day Survey
and fill it in now!
Today’s project!
Markov Chains!
What is a Markov Chain?
A Markov chain is a simple Artificial Intelligence!
Let’s play a game with some cups to help explain it
Let’s play the cups game!
Let’s generate some text in the style of
Green Eggs & Ham by Dr Seuss
Do you like green eggs and ham?
I do not like them, Sam-I-am.
I do not like green eggs and ham.
Would you like them here or there?
I would not like them here or there.
I would not like them anywhere.
Let’s play the cups game!
We’re going to write some text by randomly choosing a next word based on the word before it
Let’s play the cups game!
Read the outside of your cup!
If someone shouts the word on the outside of your cup:
A tutor will write the words called out on the board
Today we’ll be making Markov Chains!
Markov chains are exactly what we just did with the cups!
Today we’ll make the computer do it to make some crazy stories!! �
Here’s one we made from some Shakespeare!�
Imagine if you used one of these to do your homework!!
doth stay! All days when I compare thee to unseeing eyes be blessed made By chance, or eyes can see, For all the top of happy show thee in dark directed. Then thou, whose shadow shadows doth stay! All days when I compare thee in your self in inward worth nor outward fair, Can make bright, How would thy shade Through heavy sleep on the eye of life repair, Which this, Time's pencil, or my pupil pen, Neither in the living day, When in eternal lines of that fair from fair thou grow'st, So should the lines to a summer's day?
Introduction to Edstem
Log on
Click on your Workbook link to take you into EdStem
Signing up to Edstem
Log in if you already have a an “Edstem” account from a past GPN
If you haven’t got an account, let’s make one:
Click Join Course
The name of your course will be at the top :
If you don’t have access to your email account, ask a tutor for a GPN Edstem login
Signing up to Edstem
We are shifting all our courses to a new website called “Edstem” so here’s an overview of how to sign up and how to use it.
First let’s go through how to create an account.
Getting to the lessons
The set up of the workbook
The main page:
Inside a Chapter
Inside a Chapter there are two main types of pages:
Each chapter has a checkpoint to complete to move to the next chapter. Make sure you scroll down to see all the questions in a checkpoint.
There may also be Bonus Lessons to try if you want to or if you are waiting for the next lecture
Inside a Chapter
Inside a Chapter there are two main types of pages:
Each chapter has a checkpoint to complete to move to the next chapter. Make sure you scroll down to see all the questions in a checkpoint.
There may also be Bonus Lessons to try if you want to or if you are waiting for the next lecture
How to do the work
In each Lesson there is:
You will need to copy your code from the last lesson, then follow the instructions to change your code
There are also Hints and Code Blocks to help you
Hints
Sometimes in a lesson, there’s some code we want you to do that might be a bit tricky, to help you out we’ve added some hints. They look like this:
If you press the blue run button it will show you what that code does, you can even change the code to see if/how it changes.
These are just hints make sure you’re not copying the hint into your code as it will likely end up breaking. They are just to show you the kinds of things you can do.
Running your code…
Click in the bottom right hand corner
Your code will run and any output will display in the Console
Don’t worry if you forget. Tutors
will help!
Some shortcuts…
There are a couple things you can do to make copying your code from one page to another easier.
Pressing these keys together will select all the text on a page
Pressing these keys together will copy anything that’s selected
Pressing these keys together will paste anything you’ve copied
On Macs use Command (⌘) instead of Ctrl
Project time!
You now know all about the EdStem!
You should now sign up and join our EdStem class.
Remember the tutors will be around to help!
Intro to Python
Let’s get coding!
Let’s make a mistake!
Click on Chapter 1 ‘Welcome message’
The first lesson ‘1.1 Print a message’ will open. It looks like this
Let’s make a mistake!
Type by button mashing the keyboard here - type anything you want
Click Run here to run your code!
Did you get a big ugly error message?
Mistakes are great!
Good work you made an error!
AttributeError: 'NoneType' object has no attribute 'foo'
TypeError: Can't convert 'int' object to str implicitly
ImportError: No module named humour
KeyError: ‘Hairy Potter’
SyntaxError: Invalid Syntax
Write some code!!
This is the first bit of code we will do. What do you think it does?��print('hello world')
�
Write some code!!
This is the first bit of code we will do. What do you think it does?��print('hello world')
�
It prints the words “hello world” onto the screen!
�
Variables
Variables are useful for storing things that change
(i.e. things that "vary" - hence the word "variable")
You can think of it like putting information in a box and giving it a label
friend
Variables
When coding, we can make a variable called friend and set it to a value like this
friend = “Alex”
friend
Alex
Variables
Instead of writing the word “Alex”, we can write friend (the variable’s name).
The computer will substitute the current value of friend.
It’s like we’re getting the value out of the box!
print(friend)
friend
Alex
Variables
Instead of writing the word “Alex”, we can write friend (the variable’s name).
The computer will substitute the current value of friend.
It’s like we’re getting the value out of the box!
print(friend)
friend
Alex
Alex
Reusing variables
We can replace values in variables:
animal = "dog"
print("My favourite animal is a " + animal)
animal = "cat"
print("My favourite animal is a " + animal)
animal = animal + "dog"
print("My favourite animal is a " + animal)
What will this output?
Reusing variables
We can replace values in variables:
animal = "dog"
print("My favourite animal is a " + animal)
animal = "cat"
print("My favourite animal is a " + animal)
animal = animal + "dog"
print("My favourite animal is a " + animal)
My favourite animal is a dog
My favourite animal is a cat
My favourite animal is a catdog
What will this output?
Asking a question!
It’s more fun when we get to interact with the computer! ��Let’s get the computer to ask us a question!
my_name = input('What is your name? ')
print('Hello ' + my_name)
This is what happens …
What is your name? Maddie
Hello Maddie
Breaking it down
my_name = input('What is your name? ')
print('Hello ' + my_name)
What do you think happens?
What is your name? Maddie
Hello Maddie
Store the answer in the variable my_name
Breaking it down
my_name = input('What is your name? ')
print('Hello ' + my_name)
What do you think happens?
What is your name? Maddie
Hello Maddie
Store the answer in the variable my_name
Writing input tells the computer to wait for a response
Breaking it down
my_name = input('What is your name? ')
print('Hello ' + my_name)
What do you think happens?
What is your name? Maddie
Hello Maddie
Store the answer in the variable my_name
Writing input tells the computer to wait for a response
This is the question you want printed to the screen
Breaking it down
my_name = input('What is your name? ')
print('Hello ' + my_name)
What do you think happens?
What is your name? Maddie
Hello Maddie
Store the answer in the variable my_name
Writing input tells the computer to wait for a response
This is the question you want printed to the screen
We can use the answer the user wrote that we then stored later!
Breaking it down
my_name = input('What is your name? ')
print('Hello ' + my_name)
SPACE 🙂
What is your name? Maddie
Hello Maddie
Big Tip : Put a space at the end of the question so it won’t be squished together with your answer - it looks nicer!
NO SPACE 🙁
What is your name?Maddie
Hello Maddie
Adding a comment!
Sometimes we want to write things in code that the computer doesn’t look at! We use comments for that! ��Use comments to write a note or explanation of our code
Comments make code easier for humans to understand
We can make code into a comment if we don’t want it to run (but don’t want to delete it!)
# This code was written by Sheree
# print(“Goodbye world!”)
Project time!
You now know all about printing, variables and input!�
Let’s put what we learnt into our project
Try to do Lessons 1 & 2
Don't forget to copy your code when you move to a new Lesson!
The tutors will be around to help!
If Statements and Lists
Conditions!
Conditions let us make decision.
First we test if the condition is met!
Then maybe we’ll do the thing
If it’s raining take an umbrella
Yep it’s raining
…... take an umbrella
Conditions
So to know whether to do something, they find out if it’s True!
fave_num = 5
if fave_num < 10:
print("that’s a small number")
Conditions
So to know whether to do something, they find out if it’s True!
fave_num = 5
if fave_num < 10:
print("that’s a small number")
What do you think happens?�>>>
Conditions
So to know whether to do something, they find out if it’s True!
fave_num = 5
if fave_num < 10:
print("that’s a small number")
What do you think happens?�>>> that’s a small number
Conditions
How about a different number???
fave_num = 9000
if fave_num < 10:
print("that’s a small number")
What do you think happens?�>>>
Conditions
How about a different number???
fave_num = 9000
if fave_num < 10:
print("that’s a small number")
What do you think happens?�>>>
Nothing!
If statements
word = "GPN"
if word == "GPN":
print("GPN is awesome!")
What happens?
If statements
word = "GPN"
if word == "GPN":
print("GPN is awesome!")
What happens?
>>> GPN is awesome!
:
At end of each if line to say you have finished writing your condition
==
When testing for equals in your condition
Remember …
If statements
word = "GPN"
if word == "GPN":
print("GPN is awesome!")
What happens?
>>> GPN is awesome!
If statements
word = "GPN"
if word == "GPN":
print("GPN is awesome!")
What happens?
>>> GPN is awesome!
But what if we want something different to happen if the word isn’t "GPN"
Else statements
word = "Chocolate"
if word == "GPN":
print("GPN is awesome!")
else:
print("The word isn’t GPN :(")
What happens?
else
statements means something still happens if the if statement was False
Else statements
word = "Chocolate"
if word == "GPN":
print("GPN is awesome!")
else:
print("The word isn’t GPN :(")
What happens?
>>> The word isn’t GPN :(
else
statements means something still happens if the if statement was False
Elif statements
word = "Chocolate"
if word == "GPN":
print("GPN is awesome!")
elif word == "Chocolate":
print("YUMMM Chocolate!")
else:
print("The word isn’t GPN :(")
What happens?
elif
Means we can give specific instructions for other words
Elif statements
word = "Chocolate"
if word == "GPN":
print("GPN is awesome!")
elif word == "Chocolate":
print("YUMMM Chocolate!")
else:
print("The word isn’t GPN :(")
What happens?
>>> YUMM Chocolate!
elif
Means we can give specific instructions for other words
Lists
But we don’t store it on lots of little pieces of paper!
We put it in one big shopping list!
��
Bread
Ice Cream
Chocolate
Pizza
When we go shopping, we write down what we want to buy!
Lists
It would be annoying to store it separately when we code too
>>> shopping_item1 = "Bread"
>>> shopping_item2 = "Chocolate"
>>> shopping_item3 = "Ice Cream"
>>> shopping_item4 = "Pizza"
So much repetition!�
Instead we use a python list!
shopping_list = ["Bread", "Chocolate", "Ice Cream", "Pizza"]
List anatomy
shopping_list = ["Bread", "Chocolate", "Ice Cream", "Pizza"]
Stored in the variable shopping_list
List anatomy
shopping_list = ["Bread", "Chocolate", "Ice Cream", "Pizza"]
Made up of different items (these are strings)
Stored in the variable shopping_list
List anatomy
shopping_list = ["Bread", "Chocolate", "Ice Cream", "Pizza"]
Made up of different items (these are strings)
Stored in the variable shopping_list
The items are separated by commas
List anatomy
shopping_list = ["Bread", "Chocolate", "Ice Cream", "Pizza"]
Has square brackets either side
Made up of different items (these are strings)
Stored in the variable shopping_list
The items are separated by commas
What’s an index?
A list has many items, indexing lets us get one item from the list using its position number;
Shopping list
What is the fourth item I need to buy?
What’s an index?
A list has many items, indexing lets us get one item from the list using its position number;
Shopping list
What is the fourth item I need to buy?
chocolate!
How do I know how long
We use indexes (or the position number) to pick an item in a list
fruits = ["apple", "banana", "cherry"]
fruits[1]
The list we want to pick an item from
How do I know how long
We use indexes (or the position number) to pick an item in a list
fruits = ["apple", "banana", "cherry"]
fruits[1]
The list we want to pick an item from
The name of the list
How do I know how long
We use indexes (or the position number) to pick an item in a list
fruits = ["apple", "banana", "cherry"]
fruits[1]
The list we want to pick an item from
The name of the list
The index (position) of the item
But wait!
When we index, we start counting from 0
fruits = ["apple", "banana", "cherry"]
fruits[1]
0
2
1
So we are actually picking the item “banana”
Project Time!
You now know all about if and lists!
�See if you can do Lesson 3
The tutors will be around to help!
Random!
That’s so random!
There’s lots of things in life that are up to chance or random!�
Python lets us import common bits of code people use! We’re going to use the random module!
We want the computer to be random sometimes! �
Using the random module
Let’s choose something randomly from a list!
This is like drawing something out of a hat in a raffle!
Try this!
>>> import random
>>> shopping_list = ["eggs", "bread", "apples", "milk"]
>>> random.choice(shopping_list)
Using the random module
You can also assign your random choice to a variable
>>> import random
>>> shopping_list = ["eggs", "bread", "apples", "milk"]
>>> random_food = random.choice(shopping_list)
>>> print(random_food)
Project Time!
Raaaaaaaaaandom! Can you handle that?
Let’s try use it in our project!
Try to do Lesson 4�� The tutors will be around to
For Loops
For Loops
For loops allow you to do something a certain number of times.
We use them when we know exactly how many times we want to do something!
For Loops
number = 10
for i in range(number):
#Do something
For Loops
number = 10
for i in range(number):
#Do something
The for word tells python we want to use a loop
For Loops
number = 10
for i in range(number):
#Do something
The for word tells python we want to use a loop
This i is a temporary variable which will count how many times we have looped.
For Loops
number = 10
for i in range(number):
#Do something
The for word tells python we want to use a loop
This i is a temporary variable which will count how many times we have looped.
This part says we want to loop number amount of times (in this case, 10)
For Loops
number = 10
for i in range(number):
#Do something
The for word tells python we want to use a loop
This i is a temporary variable which will count how many times we have looped.
This part says we want to loop number amount of times (in this case, 10)
The code indented in the loop is what will happen every time.
Looping how many times?
We can loop through a list:
friends = 4
for i in range(friends):
print(“Hello friend!”)
What’s going to happen?
Looping how many times?
We can loop through a list:
friends = 4
for i in range(friends):
print(“Hello friend!”)
>>> Hello friend!
>>> Hello friend!
>>> Hello friend!
>>> Hello friend!
What’s going to happen?
Looping how many times?
We can loop through a list:
We do what’s in the for loop as many times as what is in the “range”
friends = 4
for i in range(friends):
print(“Hello friend!”)
>>> Hello friend!
>>> Hello friend!
>>> Hello friend!
>>> Hello friend!
What’s going to happen?
Project Time!
Now you know how to use a for loop!
Try to do Lesson 5
...if you are up for it!
The tutors will be around to help!
Dictionaries
Dictionaries!
Dictionaries!
Look up�Hello
Get back�A greeting (salutation) said when meeting someone or acknowledging someone’s arrival or presence.
You know dictionaries!
They’re great at looking up thing by a word, not a position in a list!
Looking it up!
There are lots of times we want to look something up!�
Phone Book
Vending Machine
Competition registration
Name → Phone number
Treat Name → Price
Team Name → List of team members
Looking it up!
Phone Book
Name → Phone number
Key
Value
We can use a dictionary for anything with a �key → value pattern!
Dictionaries anatomy!
This is a python dictionary!
This dictionary has Alex, Caitlin and Emma’s phone numbers
phone_book = {"Alex": 111, "Caitlin": 222, "Emma": 333}
Dictionaries anatomy!
This is a python dictionary!
This dictionary has Alex, Caitlin and Emma’s phone numbers
phone_book = {"Alex": 111, "Caitlin": 222, "Emma": 333}
Stored in the variable phone_book
Dictionaries anatomy!
This is a python dictionary!
This dictionary has Alex, Caitlin and Emma’s phone numbers
phone_book = {"Alex": 111, "Caitlin": 222, "Emma": 333}
Stored in the variable phone_book
Has squiggly brackets either side
Dictionaries anatomy!
This is a python dictionary!
This dictionary has Alex, Caitlin and Emma’s phone numbers
phone_book = {"Alex": 111, "Caitlin": 222, "Emma": 333}
Stored in the variable phone_book
Has squiggly brackets either side
Made up of pairs of information
Dictionaries anatomy!
This is a python dictionary!
This dictionary has Alex, Caitlin and Emma’s phone numbers
phone_book = {"Alex": 111, "Caitlin": 222, "Emma": 333}
Stored in the variable phone_book
Has squiggly brackets either side
Made up of pairs of information
The pairs are separated by commas
Dictionaries anatomy!
This is a python dictionary!
This dictionary has Alex, Caitlin and Emma’s phone numbers
phone_book = {"Alex": 111, "Caitlin": 222, "Emma": 333}
Stored in the variable phone_book
Has squiggly brackets either side
Made up of pairs of information
The pairs are separated by commas
Keys and values are separated by a colon
Dictionaries anatomy!
This is a python dictionary!
This dictionary has Alex, Caitlin and Emma’s phone numbers
phone_book = {"Alex": 111, "Caitlin": 222, "Emma": 333}
Stored in the variable phone_book
Has squiggly brackets either side
Made up of pairs of information
Each pair is made up of a key and value
The pairs are separated by commas
Keys and values are separated by a colon
Cups!!
Remember the cups activity from the start of the day?
A Single Cup!
The word “A”
can be followed by
Any of these words
Key
Value
A Single Cup!
The word “A”
can be followed by
Any of these words
['house', 'mouse', 'house', 'mouse', 'box', 'fox', 'box', 'fox', 'house', 'mouse']
We can store the slips of paper as a python list!
A Single Cup!
The word “A”
can be followed by
Any of these words
We want to look up the word “a” and get back the list!
{'a' :
}
['house', 'mouse', 'house', 'mouse', 'box', 'fox', 'box', 'fox', 'house', 'mouse']
A Single Cup!
{'a' :
}
['house', 'mouse', 'house', 'mouse', 'box', 'fox', 'box', 'fox', 'house', 'mouse']
So we get a Dictionary with a List value!�
��If you look up “A” you get back a list of all the words that can follow “a”
Key
Value
Cups → Dictionary with lists!
Here’s what it looks like for a few more cups!
You can get the whole cup dictionary from today's website!
cups = {'am': ['Sam', 'That'],
'In': ['a', 'a', 'a'],
'a' : ['house', 'mouse',
'house', 'mouse',
'box', 'fox', 'box',
'fox', 'house',
'Mouse']
....}
Is it there?
We can check if something is a key in a dictionary like this:
if current_word in cups:
cups = {'am': ['Sam', 'That'],
'In': ['a', 'a', 'a'],
'a' : ['house', 'mouse',
'house', 'mouse',
'box', 'fox', 'box',
'fox', 'house',
'Mouse']
....}
Project time!
You now know all about lists and dictionaries!
�Let’s put what we learnt into our project
Try to do Lesson 6 & 7
The tutors will be around to help!
More Dictionaries and Lists!
Getting words from sample text
In order to be able to read in lots of text we need to be able to turn sentences into a list of words.
We can do this by using .split() on our text!
Using split
text = “a really cool sentence”
words = text.split()
print(words)
What do you think words will be?
Using split
text = “a really cool sentence”
words = text.split()
print(words)
What do you think words will be?
[“a”, “really”, “cool”, “sentence”]
More things you can do with lists!
There’s lots of cool things we can do with lists! Like:
Getting the length of a list
words = [“a”, “really”, “cool”, “sentence”]
print(len(words))
Adding new items to a list
words.append(“yay”)
print(words)
More things you can do with lists!
There’s lots of cool things we can do with lists! Like:
Getting the length of a list
words = [“a”, “really”, “cool”, “sentence”]
print(len(words))
Adding new items to a list
words.append(“yay”)
print(words)
4
More things you can do with lists!
There’s lots of cool things we can do with lists! Like:
Getting the length of a list
words = [“a”, “really”, “cool”, “sentence”]
print(len(words))
Adding new items to a list
words.append(“yay”)
print(words)
4
[“a”, “really”, “cool”, “sentence”, “yay”]
Accessing Lists!
This favourites list holds four strings in order:
faves = ['books', 'butterfly', 'chocolate', 'skateboard']
We can count out the items using index numbers!
0 1 2 3
Remember: Indices start from zero!
Accessing Lists
We access the items in a list with an index such as [0]:
>>> faves[0]
'books'
What code do you need to access the second item in the list?
>>> faves[1]
'butterfly'
0 [1] 2 3
Accessing Lists
We access the items in a list with an index such as [0]:
>>> faves[0]
'books'
What code do you need to access the second item in the list?
>>> faves[1]
'butterfly'
0 [1] 2 3
Going Negative
Negative indices count backwards from the end of the list:
>>> faves[-1]
'skateboard'
What would faves[-2] return?
>>> faves[-2]
'chocolate'
-4 -3 [-2] -1
Going Negative
Negative indices count backwards from the end of the list:
>>> faves[-1]
'skateboard'
What would faves[-2] return?
>>> faves[-2]
'chocolate'
-4 -3 [-2] -1
Falling off the edge
Python complains if you try to go past the end of a list
>>> faves = ['books', 'butterfly', 'chocolate',
'skateboard']
>>> faves[4]
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
IndexError: list index out of range
Updating our dictionaries!
We’ve seen how to use dictionaries - but how do we update existing ones? Let’s have a look at a phone book example!
>>> phone_book = {
"Alex": 111, "Caitlin": 222, "Emma": 333
}
>>> phone_book["Rowena"] = 444
>>> phone_book
{ "Alex": 123, "Caitlin": 222, "Emma": 333,
"Rowena": 444 }
Lists in dictionaries!
We’ve been using lists as the values of our dictionary like this:
>>> team_members = {
"Sydney": ["Pauline", "Srishti", "Amara"],
"Perth": ["Crischell", "Ash", "Taylah"]
}
>>> team_members["Sydney"]�
>>> team_members["Perth"].append("Priya")
Lists in dictionaries!
We’ve been using lists as the values of our dictionary like this:
>>> team_members = {
"Sydney": ["Pauline", "Srishti", "Amara"],
"Perth": ["Crischell", "Ash", "Taylah"]
}
>>> team_members["Sydney"]�
>>> team_members["Perth"].append("Priya")
["Pauline", "Srishti", "Amara"]
Lists in dictionaries!
We’ve been using lists as the values of our dictionary like this:
>>> team_members = {
"Sydney": ["Pauline", "Srishti", "Amara"],
"Perth": ["Crischell", "Ash", "Taylah"]
}
>>> team_members["Sydney"]�
>>> team_members["Perth"].append("Priya")
["Pauline", "Srishti", "Amara"]
["Pauline", "Srishti", "Amara", "Priya"]
Project Time!
Now you know even more about Dictionaries and Lists!
You can now try 8-11 in the Second part of your workbook!
The tutors will be around to help!
Files
Opening files!
To get access to the stuff inside a file in python we need to open it!
That doesn’t mean clicking on the little icon!
f = open("test.txt")
You’ll now be able to read the things in f
If your file is in the same location as your code you can just use the name!
A missing file causes an error
Here we try to open a file that doesn't exist:
f = open('missing.txt')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
IOError: [Errno 2] No such file or directory: 'missing.txt'
You can read a whole file into a string
>>> f = open('haiku.txt')
>>> my_string = f.read()
>>> print(my_stirng)
Wanna go outside.
Oh NO! Help! I got outside!
Let me back inside!
haiku.txt
Wanna go outside.
Oh NO! Help! I got outside!
Let me back inside!
You can also read in one line at a time
You can use a for loop to only get 1 line at a time!
f = open('haiku.txt')
for line in f:
print(line)
Wanna go outside.��Oh NO! Help! I got outside!��Let me back inside!
�Why is there an extra blank line each time?
Chomping off the newline
The newline character is represented by '\n':
print('Hello\nWorld')�Hello�World
We can remove it from the lines we read with .strip()
x = 'abc\n'
x.strip()
'abc'
x.strip() is safe as lines without newlines will be unaffected
Reading and stripping!
for line in open('haiku.txt'):
line = line.strip()
print(line)
Wanna go outside.�Oh NO! Help! I got outside!�Let me back inside!
No extra lines!
Using with!
This is a special trick for opening files!
with open("words.txt") as f:
for line in f:
print(line.strip())
It automatically closes your file for you!
It’s good when you are writing files in python!
Project Time!
Now you can read some stuff
You can now try the third section of your workbook!
The tutors will be around to help!
How did you go?
Click on the
End of Day Survey
and fill it in now!
girlsprogramming.network/workshop
Click on your node location